
Strategi ini adalah sistem perdagangan momentum trend-tracking yang menggabungkan pelbagai petunjuk teknikal. Ia terutamanya menilai arah trend besar melalui purata bergerak 200 hari (MA200), mengenal pasti peluang penyesuaian menggunakan purata bergerak 50 hari (EMA50), dan menggabungkan isyarat silang indikator yang agak kuat (RSI) dan percakapan perpindahan rata-rata pergerakan (MACD) untuk menentukan masa masuk.
Logik teras strategi ini adalah untuk meningkatkan ketepatan perdagangan melalui mekanisme penapisan berlapis. Pertama, dengan MA200 untuk menentukan trend utama pasaran, apabila harga berada di atas MA200, ia dinilai sebagai trend multihead, sebaliknya sebagai trend overhead. Setelah menentukan arah trend, strategi mencari peluang pemulihan di sekitar EMA50, meminta harga untuk menyentuh EMA50 dalam 5 kitaran terakhir.
Strategi ini membina satu sistem perdagangan trend yang lengkap dengan menggunakan pelbagai petunjuk teknikal secara komposit. Kelebihan strategi ini adalah bahawa pengesahan pelbagai isyarat meningkatkan kebolehpercayaan perdagangan, dan mekanisme kawalan risiko memberikan perlindungan yang baik kepada strategi. Walaupun terdapat beberapa risiko yang wujud, prestasi strategi dapat ditingkatkan lagi dengan arah pengoptimuman yang disyorkan.
/*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)