
Ini adalah strategi perdagangan kuantitatif yang menggabungkan cross-index moving average (EMA) dan filter Average True Range (ATR). Strategi ini secara efektif meningkatkan rasio Sharpe dan kinerja keseluruhan strategi dengan mengidentifikasi tren kuat dan melakukan perdagangan di lingkungan pasar yang berfluktuasi tinggi. Strategi ini menggunakan 50 siklus dan 200 siklus EMA untuk menangkap tren jangka menengah dan panjang, sementara menggunakan indikator ATR untuk menilai volatilitas pasar dan hanya melakukan perdagangan ketika fluktuasi melebihi batas tertentu.
Logika inti dari strategi ini terdiri dari dua bagian utama: penilaian tren dan penyaringan tingkat fluktuasi. Dalam penilaian tren, strategi ini menggunakan 50 siklus EMA sebagai garis cepat, 200 siklus EMA sebagai garis lambat, menghasilkan sinyal bullish ketika melewati garis lambat pada garis cepat, menghasilkan sinyal bullish ketika melewati garis lambat. Dalam penyaringan tingkat fluktuasi, strategi ini menghitung nilai ATR 14 siklus dan mengubahnya menjadi persentase harga, hanya memungkinkan untuk membuka posisi ketika persentase ATR melebihi batas nilai default (dianggap diam-diam 2%). Desain ini memastikan bahwa strategi hanya diperdagangkan dalam lingkungan pasar dengan cukup volatilitas, secara efektif mengurangi sinyal palsu di pasar yang bergoyang.
Ini adalah strategi yang menggabungkan indikator teknis klasik dengan konsep manajemen risiko modern. Strategi ini memiliki kesederhanaan yang kuat dan juga kepraktisan yang kuat. Meskipun ada beberapa risiko yang melekat, strategi ini masih memiliki nilai aplikasi yang baik melalui pengoptimalan yang masuk akal dan langkah-langkah manajemen risiko.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover with ATR Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Inputs for Moving Averages
fastLength = input.int(50, title="Fast EMA Length")
slowLength = input.int(200, title="Slow EMA Length")
// Inputs for ATR Filter
atrLength = input.int(14, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrThreshold = input.float(0.02, title="ATR Threshold (%)")
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Calculate ATR
atr = ta.atr(atrLength)
// Convert ATR to a percentage of price
atrPct = atr / close
// Define Long Condition (Cross and ATR filter)
longCondition = ta.crossover(fastEMA, slowEMA) and atrPct > atrThreshold / 100
// Define Short Condition
shortCondition = ta.crossunder(fastEMA, slowEMA) and atrPct > atrThreshold / 100
// Define Exit Conditions
exitConditionLong = ta.crossunder(fastEMA, slowEMA)
exitConditionShort = ta.crossover(fastEMA, slowEMA)
// Long Entry
if (longCondition)
strategy.entry("Long", strategy.long)
// Short Entry
if (shortCondition)
strategy.entry("Short", strategy.short)
// Long Exit
if (exitConditionLong)
strategy.close("Long")
// Short Exit
if (exitConditionShort)
strategy.close("Short")
// Plot EMAs for visual reference
plot(fastEMA, title="50 EMA", color=color.blue)
plot(slowEMA, title="200 EMA", color=color.red)
// Plot ATR for reference
plot(atrPct, title="ATR Percentage", color=color.orange, style=plot.style_line)
hline(atrThreshold / 100, "ATR Threshold", color=color.green)