
Strategi ini adalah strategi pelacakan tren yang didasarkan pada indeks moving average (EMA) multi-frame dan filter EMA 200-frame. Gagasan utamanya adalah menggunakan EMA dari berbagai frame waktu untuk mengidentifikasi arah tren pasar dan membuat posisi multi-posisi ketika tren naik dan harga di atas EMA 200. Ini dapat memastikan bahwa perdagangan dilakukan hanya dalam tren naik yang kuat untuk menangkap tren naik yang berkelanjutan, sambil menggunakan mekanisme stop loss dan stop loss untuk mengendalikan risiko.
Strategi ini menggunakan tiga frame waktu 5 menit, 15 menit, dan 30 menit untuk menghitung EMA cepat dan EMA lambat. Dengan membandingkan EMA cepat dan EMA lambat dari setiap frame waktu, arah tren dari setiap frame waktu dapat ditentukan. Kemudian, sinyal tren dari tiga frame waktu dijumlahkan untuk mendapatkan sinyal tren yang komprehensif.
Strategi ini menilai arah tren dengan membandingkan EMA dari beberapa frame waktu, dan menggunakan EMA 200 sebagai filter tren, dan membuat beberapa posisi untuk menangkap tren yang kuat ketika tren jelas ke atas dan harga berada di atas garis rata-rata jangka panjang. Kondisi pembukaan posisi yang ketat dan stop loss yang tetap membantu mengendalikan risiko. Namun, strategi ini mungkin lebih lambat bereaksi pada titik balik tren dan posisi stop loss tetap, dan memiliki keterbatasan dalam menanggapi lonjakan pasar yang mendadak. Adaptivitas dan soliditas strategi dapat ditingkatkan di masa depan dengan memperkenalkan lebih banyak kerangka waktu, mengoptimalkan stop loss, menambahkan lebih banyak sinyal perdagangan, optimasi parameter, dan lain-lain, sehingga dapat lebih baik menangkap peluang pasar dan mengendalikan risiko.
/*backtest
start: 2023-05-17 00:00:00
end: 2024-05-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Multi-Timeframe Trend Following with 200 EMA Filter - Longs Only", shorttitle="MTF_TF_200EMA_Longs", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=1)
// Inputs
fast_length = input.int(9, title="Fast EMA Length", minval=1)
slow_length = input.int(21, title="Slow EMA Length", minval=1)
filter_length_200 = input.int(200, title="200 EMA Length", minval=1)
stop_loss_perc = input.float(1.0, title="Stop Loss Percentage", minval=0.1) / 100
take_profit_perc = input.float(3.0, title="Take Profit Percentage", minval=0.1) / 100
// Calculate EMAs for 5-minute, 15-minute, and 30-minute timeframes
ema_fast_5min = request.security(syminfo.tickerid, "5", ta.ema(close, fast_length), lookahead=barmerge.lookahead_on)
ema_slow_5min = request.security(syminfo.tickerid, "5", ta.ema(close, slow_length), lookahead=barmerge.lookahead_on)
ema_fast_15min = request.security(syminfo.tickerid, "15", ta.ema(close, fast_length), lookahead=barmerge.lookahead_on)
ema_slow_15min = request.security(syminfo.tickerid, "15", ta.ema(close, slow_length), lookahead=barmerge.lookahead_on)
ema_fast_30min = request.security(syminfo.tickerid, "30", ta.ema(close, fast_length), lookahead=barmerge.lookahead_on)
ema_slow_30min = request.security(syminfo.tickerid, "30", ta.ema(close, slow_length), lookahead=barmerge.lookahead_on)
// Calculate 200 EMA for the 5-minute timeframe
ema_200_5min = ta.ema(close, filter_length_200)
// Determine the trend for each timeframe
trend_5min = ema_fast_5min > ema_slow_5min ? 1 : -1
trend_15min = ema_fast_15min > ema_slow_15min ? 1 : -1
trend_30min = ema_fast_30min > ema_slow_30min ? 1 : -1
// Combine trend signals
combined_trend = trend_5min + trend_15min + trend_30min
// Define entry and exit conditions with 200 EMA filter
enter_long = combined_trend == 3 and close > ema_200_5min
exit_long = combined_trend < 3 or close < ema_200_5min
// Plot EMAs for the 5-minute timeframe
plot(ema_fast_5min, color=color.blue, linewidth=2, title="Fast EMA 5min")
plot(ema_slow_5min, color=color.red, linewidth=2, title="Slow EMA 5min")
plot(ema_200_5min, color=color.green, linewidth=2, title="200 EMA 5min")
// Strategy execution
if (enter_long)
strategy.entry("Long", strategy.long, stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc))
if (exit_long)
strategy.close("Long")