Sumber dimuat naik... memuat...

EMA Crossover dengan Bollinger Bands Double Entry Strategy: Sistem Dagangan Kuantitatif yang menggabungkan trend berikut dan volatility breakout

Penulis:ChaoZhang, Tarikh: 2024-07-29 17:14:32
Tag:EMABBATR

img

Ringkasan

EMA Crossover with Bollinger Bands Double Entry Strategy adalah sistem perdagangan kuantitatif yang menggabungkan trend berikut dan metodologi breakout turun naik. Strategi ini terutamanya menggunakan crossover Exponential Moving Average (EMA) untuk menentukan trend pasaran, sementara menggunakan Bollinger Bands (BB) untuk mengenal pasti peluang breakout yang berpotensi. Pendekatan ini bertujuan untuk menangkap trend pasaran yang kuat sambil menyediakan titik masuk tambahan melalui breakout Bollinger Band, dengan itu meningkatkan peluang perdagangan dan mengoptimumkan pengurusan modal.

Prinsip Strategi

  1. EMA Crossover: Strategi ini menggunakan EMA 12 tempoh dan 26 tempoh untuk menentukan arah trend. Isyarat beli dihasilkan apabila EMA cepat (12-periode) melintasi di atas EMA perlahan (26-periode), dan sebaliknya untuk isyarat jual.

  2. Bollinger Bands: Strategi ini menggunakan Bollinger Band 55 tempoh dengan penyimpangan standard 0.9. Apabila harga memecahkan band atas semasa sudah dalam trend menaik, ia memberikan peluang masuk tambahan.

  3. Logika kemasukan:

    • Entry Utama: EMA crossover atau harga pecah di atas Bollinger Band atas.
    • Entry Tambahan: Jika sudah berada dalam kedudukan yang panjang, meningkatkan saiz kedudukan pada breakout Bollinger Band.
  4. Logik Keluar:

    • Keluar apabila EMA yang cepat melintasi di bawah EMA yang perlahan.
    • Keluar pilihan apabila harga ditutup di bawah garis tengah Bollinger Band.
  5. Tetapkan Stop Loss:

    • Pengecualian yang berlaku bagi pelabur yang tidak mempunyai akaun bank.
    • Pilihan penggunaan paras terendah dalam tempoh 5 hari terakhir sebagai stop loss.
  6. Pengurusan Risiko:

    • Risiko kecacatan sebanyak 3% daripada ekuiti akaun setiap urus niaga (boleh disesuaikan).
    • Penggunaan ATR untuk penyesuaian stop loss dinamik, menyesuaikan diri dengan turun naik pasaran.
    • Jeda pilihan dalam perdagangan apabila harga berada di bawah garis tengah Bollinger Band.

Kelebihan Strategi

  1. Analisis Berbilang Dimensi: Menggabungkan strategi trend berikut (EMA) dan volatility breakout (Bollinger Bands), meningkatkan kebolehpercayaan isyarat perdagangan.

  2. Mekanisme Masuk Fleksibel: Sebagai tambahan kepada isyarat silang EMA utama, ia menggunakan penembusan Bollinger Band untuk peluang masuk tambahan, meningkatkan fleksibiliti strategi.

  3. Pengurusan Risiko Dinamik: Menggunakan ATR untuk menetapkan stop loss dan menyesuaikan saiz kedudukan, yang membolehkan strategi menyesuaikan diri dengan lebih baik dengan turun naik dalam keadaan pasaran yang berbeza.

  4. Kesedaran Keadaan Pasaran: Menggunakan garis tengah Bollinger Band untuk menilai keadaan pasaran, dengan pilihan untuk menghentikan perdagangan di bawah keadaan yang tidak baik, mengurangkan risiko.

  5. Pengurusan Modal yang Dioptimumkan: Mencapai kawalan modal yang lebih halus melalui pengurusan risiko berasaskan peratusan dan saiz kedudukan dinamik berasaskan ATR.

  6. Keupayaan yang tinggi: Pelbagai parameter yang boleh disesuaikan, seperti tempoh EMA, tetapan Bollinger Band, dan pengganda ATR, membolehkan strategi menyesuaikan diri dengan instrumen perdagangan dan persekitaran pasaran yang berbeza.

Risiko Strategi

  1. Risiko Pembalikan Trend: Berprestasi baik di pasaran yang mempunyai trend yang kuat tetapi boleh menghasilkan isyarat pecah palsu yang kerap di pasaran yang terhad.

  2. Risiko Perdagangan Terlalu: Penembusan Bollinger Band boleh menyebabkan isyarat perdagangan yang berlebihan, meningkatkan kos transaksi.

  3. Risiko tergelincir: Di pasaran yang sangat tidak menentu, harga kemasukan dan keluar mungkin menyimpang dengan ketara daripada jangkaan.

  4. Sensitiviti Parameter: Prestasi strategi mungkin sensitif terhadap perubahan dalam tempoh EMA, tetapan Bollinger Band, dan lain-lain, yang memerlukan pengoptimuman dan pengujian semula yang teliti.

  5. Kebergantungan persekitaran pasaran: Prestasi strategi mungkin tidak konsisten di dalam kitaran pasaran yang berbeza dan persekitaran turun naik.

  6. Risiko Pengurusan Modal: Walaupun menggunakan pengurusan risiko berasaskan peratusan, akaun masih boleh menghadapi pengeluaran yang signifikan sekiranya kerugian berturut-turut.

Arahan Pengoptimuman Strategi

  1. Analisis pelbagai jangka masa: Memperkenalkan pengesahan trend jangka panjang, seperti EMA mingguan atau bulanan, untuk mengurangkan isyarat palsu.

  2. Penapisan Volatiliti: Sesuaikan parameter Bollinger Band atau hentikan perdagangan dalam persekitaran turun naik yang rendah untuk mengelakkan perdagangan berlebihan di pasaran sampingan.

  3. Menggabungkan Indikator Momentum: Tambah RSI atau MACD untuk mengesahkan kekuatan trend dan isyarat pembalikan yang berpotensi.

  4. Mengoptimumkan Mekanisme Keluar: Pertimbangkan untuk menggunakan hentian penghujung atau sasaran keuntungan dinamik berasaskan ATR untuk mengunci keuntungan dengan lebih baik.

  5. Klasifikasi Negara Pasaran: Membangunkan sistem klasifikasi persekitaran pasaran untuk menggunakan tetapan parameter yang berbeza dalam negara pasaran yang berbeza.

  6. Pengoptimuman Pembelajaran Mesin: Gunakan algoritma pembelajaran mesin untuk menyesuaikan parameter strategi secara dinamik untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.

  7. Analisis korelasi: Pertimbangkan korelasi antara instrumen apabila berdagang pelbagai aset untuk mengoptimumkan ciri risiko-pengembalian portfolio secara keseluruhan.

  8. Menggabungkan Faktor-faktor Dasar: Untuk stok atau komoditi, pertimbangkan untuk menambah penunjuk asas yang relevan untuk meningkatkan kualiti isyarat kemasukan.

Kesimpulan

EMA Crossover with Bollinger Bands Double Entry Strategy adalah sistem perdagangan kuantitatif yang menggabungkan konsep trend berikut dan volatility breakout. Ia menangkap trend utama melalui crossover EMA dan menyediakan peluang kemasukan tambahan menggunakan breakout Bollinger Band, sambil menggunakan kaedah pengurusan risiko dinamik untuk mengoptimumkan penggunaan modal.

Terdapat ruang yang signifikan untuk pengoptimuman melalui analisis pelbagai jangka masa, penapisan turun naik, penggabungan penunjuk momentum, dan kaedah lain. Khususnya, pengenalan algoritma pembelajaran mesin dan sistem klasifikasi keadaan pasaran dapat meningkatkan fleksibiliti dan kestabilan strategi dengan ketara. Walau bagaimanapun, dalam aplikasi praktikal, pengujian backtesting dan uji maju yang komprehensif masih diperlukan, dan penyesuaian parameter yang teliti diperlukan berdasarkan instrumen perdagangan dan persekitaran pasaran tertentu.

Secara keseluruhan, ini adalah rangka kerja strategi perdagangan kuantitatif yang direka dengan baik dan menjanjikan. Melalui pengoptimuman berterusan dan pengurusan yang teliti, ia berpotensi menjadi sistem perdagangan yang kukuh yang sesuai untuk pelabur yang ingin menangkap trend sambil mengawal risiko.


/*backtest
start: 2023-07-23 00:00:00
end: 2024-07-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover with BB Double Entry", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=100)

// Input parameters
fastLength = input.int(12, "Fast EMA Length")
slowLength = input.int(26, "Slow EMA Length")
atrPeriod = input.int(14, "ATR Period")
atrMultiplier = input.float(1.0, "ATR Multiplier")
useATRStopLoss = input.bool(true, "Use ATR Stop Loss")
stopLossDays = input.int(5, "Number of days for stop loss", minval=1, maxval=50)
riskPerTrade = input.float(3.0, "Risk per trade (%)", minval=0.1, maxval=5, step=0.1)
bbRiskPerTrade = input.float(1.5, "Risk for BB breakout trade (%)", minval=0.1, maxval=5, step=0.1)

// Bollinger Bands parameters
bbLength = input.int(55, "BB Length")
bbMult = input.float(0.9, "BB Standard Deviation")
useBBPauseResume = input.bool(false, "Use BB for Pause/Resume trading")

// Backtesting dates
startDate = input(timestamp("2020-01-01"), "Start Date")
endDate = input(timestamp("9999-12-31"), "End Date")

// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)

// Calculate ATR
atr = ta.atr(atrPeriod)

// Calculate Bollinger Bands
bbBasis = ta.sma(close, bbLength)
bbDev = bbMult * ta.stdev(close, bbLength)
bbUpper = bbBasis + bbDev
bbLower = bbBasis - bbDev

// Define trading conditions
longCondition = ta.crossover(fastEMA, slowEMA)
shortCondition = ta.crossunder(fastEMA, slowEMA)
bullish = fastEMA > slowEMA
bearish = fastEMA < slowEMA

// Bollinger Bands breakout
bbBreakout = close > bbUpper and close[1] <= bbUpper[1]

// Calculate lowest low for stop loss
lowestLow = ta.lowest(low, stopLossDays)

// Variables to store entry price and stop loss
var float entryPrice = na
var float stopLoss = na
var bool inPosition = false
var bool pauseTrading = false

// Entry logic
entryConditions = (longCondition or (bbBreakout and bullish)) and
                  (not useBBPauseResume or close > bbBasis) and
                  not pauseTrading

if entryConditions and not inPosition
    entryPrice := close
    atrStopLoss = close - (atr * atrMultiplier)
    lowStopLoss = lowestLow
    stopLoss := useATRStopLoss ? atrStopLoss : lowStopLoss
    
    riskAmount = strategy.equity * (riskPerTrade / 100)
    positionSize = riskAmount / (close - stopLoss)
    
    strategy.entry("Long", strategy.long, qty=positionSize)
    inPosition := true
    pauseTrading := false
    
    alert("BUY," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(positionSize), alert.freq_once_per_bar_close)

// Additional entry on BB breakout
if inPosition and bbBreakout and bullish and (not useBBPauseResume or close > bbBasis)
    bbRiskAmount = strategy.equity * (bbRiskPerTrade / 100)
    bbPositionSize = bbRiskAmount / (close - stopLoss)
    
    strategy.entry("Long_BB", strategy.long, qty=bbPositionSize)
    
    alert("ADD," + syminfo.ticker + ",EntryPrice=" + str.tostring(close) + ",StopLoss=" + str.tostring(stopLoss) + ",PositionSize=" + str.tostring(bbPositionSize), alert.freq_once_per_bar_close)

// Exit logic
if shortCondition or (useBBPauseResume and inPosition and close < bbBasis)
    if shortCondition
        strategy.close_all(comment="EMA Crossdown")
        inPosition := false
        pauseTrading := false
        alert("SELL," + syminfo.ticker + ",Reason=EMA_Crossdown", alert.freq_once_per_bar_close)
    else if useBBPauseResume
        strategy.close_all(comment="Close under BB basic")
        pauseTrading := true
        alert("SELL," + syminfo.ticker + ",Reason=Below_BB_Basic", alert.freq_once_per_bar_close)
    
    entryPrice := na
    stopLoss := na

// Resume trading if price closes above BB basic
if useBBPauseResume and pauseTrading and close > bbBasis
    pauseTrading := false
    alert("RESUME," + syminfo.ticker, alert.freq_once_per_bar_close)

// Stop loss
if strategy.position_size > 0
    strategy.exit("Stop Loss", "Long", stop=stopLoss)
    strategy.exit("Stop Loss", "Long_BB", stop=stopLoss)
    if close <= stopLoss
        alert("SELL," + syminfo.ticker + ",Reason=Stop_Loss", alert.freq_once_per_bar_close)

// Plotting
plot(fastEMA, color=color.new(color.blue, 0), title="Fast EMA")
plot(slowEMA, color=color.new(color.red, 0), title="Slow EMA")
plot(bbUpper, color=color.new(color.green, 50), title="BB Upper")
plot(bbLower, color=color.new(color.green, 50), title="BB Lower")
plot(bbBasis, color=color.new(color.yellow, 50), title="BB Basic")
plot(strategy.position_size > 0 ? stopLoss : na, color=color.red, style=plot.style_cross, linewidth=2, title="Stop Loss")

// Alert conditions
alertcondition(entryConditions, title="Buy Alert", message="Buy {{ticker}}")
alertcondition(bbBreakout and inPosition and bullish and (not useBBPauseResume or close > bbBasis), title="Add Position Alert", message="Add Position {{ticker}}")
alertcondition(shortCondition, title="Sell Alert (EMA)", message="Sell {{ticker}} (EMA crossdown)")
alertcondition(useBBPauseResume and inPosition and close < bbBasis, title="Pause Alert", message="Pause trading {{ticker}} (Close under BB basic)")
alertcondition(useBBPauseResume and pauseTrading and close > bbBasis, title="Resume Alert", message="Resume trading {{ticker}} (Close above BB basic)")

Berkaitan

Lebih lanjut