EMA crossover dan Bollinger Bands dwi entry strategy: sistem perdagangan kuantitatif yang menggabungkan penjejakan arah aliran dan penembusan turun naik

EMA BB ATR
Tarikh penciptaan: 2024-07-29 17:14:32 Akhirnya diubah suai: 2024-07-29 17:14:32
Salin: 0 Bilangan klik: 604
1
fokus pada
1617
Pengikut

EMA crossover dan Bollinger Bands dwi entry strategy: sistem perdagangan kuantitatif yang menggabungkan penjejakan arah aliran dan penembusan turun naik

Gambaran keseluruhan

Strategi EMA crossover dan Bollinger Bands Double Entry adalah sistem perdagangan kuantitatif yang menggabungkan trend tracking dan pergerakan pergerakan. Strategi ini menggunakan crossover rata-rata bergerak indeks (EMA) untuk menilai trend pasaran, dan menggunakan Bollinger Bands (Bollinger Bands) untuk mengenal pasti peluang penembusan yang berpotensi.

Prinsip Strategi

  1. EMA silang: strategi menggunakan EMA 12 kitaran dan 26 kitaran untuk menentukan arah trend. Apabila EMA (12 kitaran) yang cepat melintasi EMA ((26 kitaran) yang perlahan, ia menghasilkan isyarat melakukan lebih banyak; sebaliknya ia menghasilkan isyarat melakukan lebih sedikit.

  2. Brinband: Strategi menggunakan 55 kitaran, 0.9 standard deviasi Brinbandsetting. Apabila harga menembusi rel, peluang masuk tambahan disediakan jika sudah berada dalam trend berbilang arah.

  3. Logik input:

    • Pendaftaran utama: EMA Cross atau harga menembusi Brin berbaris.
    • Kemasukan tambahan: Jika anda sudah memegang banyak kedudukan, anda akan menambah kedudukan anda apabila Brin mendedahkan.
  4. Logik keluar:

    • Keluar apabila EMA pantas melalui EMA perlahan.
    • Pilihan untuk keluar apabila harga ditutup di bawah Brin Belt.
  5. Tetapan Stop Loss:

    • Menggunakan 14 kitaran ATR (Average True Rate) untuk menghentikan kerosakan.
    • Anda boleh memilih untuk menggunakan titik terendah dalam 5 hari terakhir sebagai stop loss.
  6. Pengurusan Risiko:

    • Dana akaun 3% risiko lalai untuk setiap urus niaga (boleh disesuaikan).
    • Menggunakan ATR untuk menyesuaikan stop loss secara dinamik dan menyesuaikan diri dengan turun naik pasaran.
    • Pilihan untuk menghentikan perdagangan apabila harga berada di bawah Brin Belt.

Kelebihan Strategik

  1. Analisis multi-dimensi: menggabungkan strategi trend-tracking (EMA) dan volatility breakout (Burin Belt) untuk meningkatkan kebolehpercayaan isyarat perdagangan.

  2. Mekanisme kemasukan yang fleksibel: Selain daripada isyarat persilangan EMA utama, peluang tambahan untuk kemasukan disediakan dengan menggunakan penembusan Burin, meningkatkan fleksibiliti strategi.

  3. Pengurusan risiko dinamik: menggunakan ATR untuk menetapkan stop loss dan menyesuaikan saiz kedudukan, supaya strategi dapat menyesuaikan diri dengan lebih baik dengan turun naik dalam keadaan pasaran yang berbeza.

  4. Persepsi keadaan pasaran: menilai keadaan pasaran melalui Bollinger Bands dan memilih untuk menghentikan perdagangan dalam keadaan yang tidak menguntungkan untuk mengurangkan risiko.

  5. Pengurusan wang yang dioptimumkan: Pengendalian wang yang lebih halus dicapai dengan pengendalian risiko peratusan dan penyesuaian saiz kedudukan ATR secara dinamik.

  6. Kustomisasi yang kuat: Pelbagai parameter boleh disesuaikan, seperti kitaran EMA, tetapan Brinband, kelipatan ATR, dan sebagainya, yang membolehkan strategi menyesuaikan diri dengan pelbagai jenis perdagangan dan persekitaran pasaran.

Risiko Strategik

  1. Risiko trend reversal: Berkesan baik dalam pasaran trend yang kuat, tetapi mungkin sering muncul isyarat pecah palsu dalam pasaran yang bergolak.

  2. Risiko perdagangan berlebihan: Penembusan Bollinger Bands boleh menyebabkan terlalu banyak isyarat perdagangan, meningkatkan kos perdagangan.

  3. Risiko slippage: Dalam pasaran yang sangat tidak menentu, harga masuk dan keluar mungkin jauh dari jangkaan.

  4. Sensitiviti parameter: Prestasi strategi mungkin sensitif kepada perubahan parameter seperti kitaran EMA, tetapan Brinband, dan lain-lain yang memerlukan pengoptimuman dan pengujian semula yang teliti.

  5. Ketergantungan kepada keadaan pasaran: Strategi mungkin tidak konsisten dalam pelbagai kitaran pasaran dan persekitaran turun naik.

  6. Risiko pengurusan wang: Walaupun menggunakan pengurusan risiko peratusan, anda mungkin menghadapi penarikan balik akaun yang besar jika kerugian berturut-turut berlaku.

Arah pengoptimuman strategi

  1. Analisis bingkai masa berbilang: memperkenalkan pengesahan trend yang lebih lama, seperti EMA garis pusingan atau garis bulan, untuk mengurangkan isyarat palsu.

  2. Penapis turun naik: menyesuaikan parameter Brin atau menghentikan perdagangan dalam keadaan turun naik yang rendah untuk mengelakkan perdagangan berlebihan di pasaran terbalik.

  3. Tambahkan penunjuk momentum: seperti RSI atau MACD, untuk mengesahkan kekuatan trend dan isyarat pembalikan yang berpotensi.

  4. Optimumkan mekanisme keluar: pertimbangkan untuk menggunakan tracking stop loss atau sasaran keuntungan dinamik berasaskan ATR untuk lebih mengunci keuntungan.

  5. Klasifikasi keadaan pasaran: membangunkan sistem klasifikasi persekitaran pasaran yang menggunakan parameter yang berbeza dalam keadaan pasaran yang berbeza.

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

  7. Analisis hubungan: Apabila berdagang dalam pelbagai jenis, pertimbangkan hubungan antara jenis untuk mengoptimumkan ciri-ciri risiko dan keuntungan portfolio keseluruhan.

  8. Masukkan faktor asas: Untuk saham atau komoditi, pertimbangkan untuk memasukkan indikator asas yang berkaitan, meningkatkan kualiti isyarat masuk.

ringkaskan

Strategi EMA Cross vs Bolling Belt Dual Entry adalah sistem perdagangan kuantitatif yang menggabungkan trend tracking dan idea penembusan turun naik. Ia menangkap trend utama melalui EMA Cross dan menggunakan penembusan Bolling Belt untuk memberikan peluang masuk tambahan, sambil menggunakan kaedah pengurusan risiko dinamik untuk mengoptimumkan penggunaan dana.

Strategi ini masih mempunyai ruang yang besar untuk pengoptimuman melalui analisis pelbagai kerangka masa, penapisan kadar turun naik, penambahan penunjuk momentum, dan sebagainya. Terutama, pengenalan algoritma pembelajaran mesin dan sistem klasifikasi keadaan pasaran mungkin meningkatkan daya serap dan kestabilan strategi dengan ketara. Walau bagaimanapun, dalam aplikasi praktikal, pengukuran dan pengujian ke hadapan yang komprehensif masih diperlukan, dan penyesuaian parameter yang halus berdasarkan jenis perdagangan dan keadaan pasaran tertentu.

Secara keseluruhannya, ini adalah kerangka strategi perdagangan kuantitatif yang direka dengan baik dan berpotensi. Dengan pengoptimuman berterusan dan pengurusan yang teliti, ia berpotensi menjadi sistem perdagangan yang mantap, sesuai untuk pelabur yang mencari untuk mengawal risiko sambil menangkap trend.

Kod sumber strategi
/*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)")