
Ini adalah strategi perdagangan kuantitatif yang menggabungkan penapis Indeks Moving Average (EMA) Crossover dan Average True Rate (ATR). Strategi ini meningkatkan kadar Sharpe dan prestasi keseluruhan strategi dengan mengenal pasti trend yang kuat dan berdagang di bawah persekitaran pasaran yang bergelombang. Strategi ini menggunakan 50 dan 200 kitaran EMA untuk menangkap trend jangka panjang dan menengah, sambil menggunakan indikator ATR untuk menilai turun naik pasaran, dan hanya berdagang apabila turun naik melebihi paras tertentu.
Logik teras strategi ini merangkumi dua bahagian utama: penilaian trend dan penapisan kadar turun naik. Dalam penilaian trend, strategi ini menggunakan EMA 50 kitaran sebagai garis cepat, EMA 200 kitaran sebagai garis perlahan, menghasilkan isyarat berganda ketika melintasi garis perlahan pada garis cepat, menghasilkan isyarat kosong ketika melintasi.
Ini adalah strategi yang menggabungkan petunjuk teknikal klasik dengan falsafah pengurusan risiko moden. Strategi ini mempunyai kesederhanaan yang kuat dan pada masa yang sama mempunyai kepraktisan yang kuat. Walaupun terdapat beberapa risiko yang wujud, strategi ini masih mempunyai nilai aplikasi yang baik melalui pengoptimuman yang munasabah dan langkah-langkah pengurusan 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)