
Strategi EMA crossover dengan Bollinger Bands double entry adalah sistem perdagangan kuantitatif yang menggabungkan trend tracking dan volatility breakout. Strategi ini terutama menggunakan crossover indeks moving averages (EMA) untuk menilai tren pasar, sementara menggunakan Bollinger Bands (Bollinger Bands) untuk mengidentifikasi peluang terobosan potensial. Metode ini bertujuan untuk menangkap tren pasar yang kuat dan memberikan titik masuk tambahan melalui Bollinger Bands, sehingga meningkatkan peluang perdagangan dan mengoptimalkan manajemen dana.
EMA silang: Strategi menggunakan 12 siklus dan 26 siklus EMA untuk menentukan arah tren. Ketika EMA cepat (periode 12) melewati EMA lambat (periode 26), menghasilkan sinyal ganda; sebaliknya menghasilkan sinyal kosong.
Brin-band: Strategi menggunakan 55 siklus, 0.9 standar deviasi Brin-band pengaturan. Ketika harga menembus rel, jika sudah berada dalam tren multihead, memberikan kesempatan masuk tambahan.
Logika input:
Logika Keluar:
Pengaturan Stop Loss:
Manajemen Risiko:
Analisis multi-dimensi: menggabungkan strategi trend tracking (EMA) dan volatility breakout (Burin Band) untuk meningkatkan keandalan sinyal perdagangan.
Mekanisme masuk yang fleksibel: Selain sinyal silang EMA utama, Brin Belt Breakout juga digunakan untuk memberikan kesempatan masuk tambahan, meningkatkan fleksibilitas strategi.
Manajemen risiko dinamis: menggunakan ATR untuk mengatur stop loss dan menyesuaikan ukuran posisi, sehingga strategi dapat beradaptasi dengan lebih baik terhadap volatilitas dalam berbagai kondisi pasar.
Persepsi kondisi pasar: menilai kondisi pasar melalui jalur tengah Brin, dapat memilih untuk menghentikan perdagangan dalam kondisi yang tidak menguntungkan, mengurangi risiko.
Pengelolaan dana yang lebih baik: Pengendalian dana yang lebih baik melalui manajemen risiko persentase dan penyesuaian ukuran posisi ATR secara dinamis.
Kustomisasi: Berbagai parameter dapat disesuaikan, seperti siklus EMA, pengaturan Brinks, ATR, dan lain-lain, sehingga strategi dapat disesuaikan dengan berbagai jenis perdagangan dan lingkungan pasar.
Risiko trend reversal: Berkinerja baik di pasar tren yang kuat, tetapi mungkin sering terjadi sinyal false breakout di pasar yang bergoyang.
Risiko overtrading: Penembusan BRI dapat menyebabkan terlalu banyak sinyal perdagangan, meningkatkan biaya transaksi.
Risiko slippage: Dalam pasar yang sangat fluktuatif, harga masuk dan keluar mungkin jauh dari ekspektasi.
Sensitivitas parameter: Kinerja strategi mungkin sensitif terhadap perubahan parameter seperti siklus EMA, pengaturan pita Brin, dan lain-lain, yang memerlukan pengoptimalan dan pengujian ulang yang cermat.
Ketergantungan pada kondisi pasar: Strategi mungkin tidak konsisten dalam berbagai siklus pasar dan lingkungan fluktuasi.
Manajemen risiko dana: Meskipun menggunakan manajemen risiko persentase, Anda masih dapat menghadapi penarikan akun yang lebih besar jika Anda terus mengalami kerugian.
Analisis multi-frame waktu: memperkenalkan konfirmasi tren dengan periode yang lebih lama, seperti garis lingkar atau garis bulan EMA, untuk mengurangi sinyal palsu.
Filter Volatilitas: Mengatur parameter Brinks atau menghentikan perdagangan di lingkungan dengan volatilitas rendah untuk menghindari perdagangan berlebihan di pasar horizontal.
Tambahkan indikator momentum: seperti RSI atau MACD, untuk mengkonfirmasi kekuatan tren dan sinyal pembalikan potensial.
Mengoptimalkan mekanisme keluar: Pertimbangkan untuk menggunakan tracking stop loss atau target keuntungan dinamis berbasis ATR untuk lebih mengunci keuntungan.
Klasifikasi kondisi pasar: mengembangkan sistem klasifikasi lingkungan pasar yang menggunakan parameter yang berbeda dalam kondisi pasar yang berbeda.
Optimasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk secara dinamis menyesuaikan parameter strategi agar sesuai dengan kondisi pasar yang berbeda.
Analisis korelasi: Mengingat korelasi antara varietas dalam perdagangan multi-varietas, mengoptimalkan karakteristik risiko-penghasilan portofolio keseluruhan.
Memperkenalkan faktor fundamental: Untuk saham atau komoditas, pertimbangkan untuk menambahkan indikator fundamental yang relevan untuk meningkatkan kualitas sinyal masuk.
Strategi EMA Cross vs Bollinger Bands Dual Entry adalah sistem perdagangan kuantitatif yang menggabungkan konsep trend tracking dan volatility breakout. Ini menangkap tren utama melalui EMA Cross dan menggunakan Bollinger Bands untuk memberikan peluang masuk tambahan, sementara menggunakan metode manajemen risiko dinamis untuk mengoptimalkan pemanfaatan dana. Keunggulan dari strategi ini adalah metode analisis multi-dimensi dan manajemen risiko yang fleksibel, tetapi juga menghadapi risiko perdagangan seperti reversal tren dan overtrading.
Ada banyak ruang untuk optimalisasi strategi ini melalui analisis multi-frame, penyaringan tingkat fluktuasi, dan penambahan indikator momentum. Secara khusus, pengenalan algoritma pembelajaran mesin dan sistem klasifikasi keadaan pasar dapat secara signifikan meningkatkan kemampuan adaptasi dan stabilitas strategi. Namun, dalam aplikasi praktis, masih perlu melakukan pengujian ulang dan pengujian ke depan secara menyeluruh, dan penyesuaian parameter yang halus sesuai dengan jenis perdagangan dan lingkungan pasar tertentu.
Secara keseluruhan, ini adalah kerangka strategi perdagangan kuantitatif yang dirancang secara rasional dan berpotensi. Dengan pengoptimalan berkelanjutan dan pengelolaan yang cermat, ini memiliki potensi untuk menjadi sistem perdagangan yang solid, cocok untuk investor yang mencari untuk mengendalikan risiko sambil menangkap tren.
/*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)")