
Strategi ini adalah sistem perdagangan dinamis yang mengikuti tren yang menggabungkan beberapa indikator teknis. Ini terutama menilai arah tren besar dengan 200-hari moving average (MA200), mengidentifikasi peluang perombakan dengan 50-hari moving average (EMA50), dan menggabungkan sinyal silang dengan indikator yang relatif kuat (RSI) dan dispersi tren rata-rata bergerak (MACD) untuk menentukan waktu masuk.
Logika inti dari strategi ini adalah meningkatkan akurasi perdagangan melalui mekanisme penyaringan multi-lapisan. Pertama, dengan MA200 menentukan tren dominan pasar, yang dinilai sebagai tren multi-head ketika harga berada di atas MA200, sebaliknya tren overhead. Setelah menentukan arah tren, strategi mencari peluang pemulihan di dekat EMA50, meminta harga untuk mencapai EMA50 dalam 5 periode terakhir.
Strategi ini menggunakan beberapa indikator teknis secara komprehensif untuk membangun sistem perdagangan yang lengkap untuk melacak tren. Keuntungan dari strategi ini adalah bahwa konfirmasi sinyal ganda meningkatkan keandalan perdagangan, dan mekanisme kontrol risiko memberikan perlindungan yang baik untuk strategi. Meskipun ada beberapa risiko yang melekat, kinerja strategi dapat ditingkatkan lebih lanjut dengan arah optimasi yang disarankan. Secara keseluruhan, ini adalah strategi perdagangan kuantitatif yang ketat secara logis dan praktis.
/*backtest
start: 2024-02-21 00:00:00
end: 2024-08-10 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Trend-Following Momentum Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=2)
// PARAMETERS
lengthMA200 = input(200, title="200-day MA Length")
lengthEMA50 = input(50, title="50-day EMA Length")
rsiLength = input(14, title="RSI Length")
macdFastLength = input(12, title="MACD Fast Length")
macdSlowLength = input(26, title="MACD Slow Length")
macdSignalLength = input(9, title="MACD Signal Length")
riskRewardRatio = input(1.5, title="Risk-Reward Ratio")
useTrailingStop = input(true, title="Use Trailing Stop?")
trailingPercent = input(1.0, title="Trailing Stop (%)") / 100
// INDICATORS
ma200 = ta.sma(close, lengthMA200) // 200-day MA
ema50 = ta.ema(close, lengthEMA50) // 50-day EMA
rsi = ta.rsi(close, rsiLength) // RSI
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
// TREND CONDITIONS
bullishTrend = close > ma200
bearishTrend = close < ma200
// PULLBACK CONDITION
recentPullbackLong = ta.barssince(close < ema50) < 5 // Price touched EMA50 in last 5 bars
recentPullbackShort = ta.barssince(close > ema50) < 5 // Price touched EMA50 in last 5 bars
// ENTRY CONDITIONS
longEntry = bullishTrend and ta.crossover(macdLine, signalLine) and rsi > 50 and recentPullbackLong
shortEntry = bearishTrend and ta.crossunder(macdLine, signalLine) and rsi < 50 and recentPullbackShort
// EXECUTE TRADES
if longEntry
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", from_entry="Long", limit=close * (1 + riskRewardRatio), stop=close * (1 - (1 / (1 + riskRewardRatio))), trail_price=useTrailingStop ? close * (1 - trailingPercent) : na)
if shortEntry
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", from_entry="Short", limit=close * (1 - riskRewardRatio), stop=close * (1 + (1 / (1 + riskRewardRatio))), trail_price=useTrailingStop ? close * (1 + trailingPercent) : na)
// PLOT INDICATORS
plot(ma200, title="200-day MA", color=color.blue, linewidth=2)
plot(ema50, title="50-day EMA", color=color.orange, linewidth=2)