Strategi ini adalah sistem dagangan berdasarkan beberapa isyarat silang Exponential Moving Average (EMA), menggabungkan EMA dari tempoh yang berbeza dengan mekanisme stop-loss dinamik berasaskan ATR. Strategi ini menggunakan EMA 10, 39, dan 73 tempoh sebagai penunjuk isyarat utama, sambil menggabungkan EMA jangka masa yang lebih tinggi 143 tempoh sebagai penapis trend, dan melaksanakan sasaran stop-loss dan mengambil keuntungan dinamik menggunakan penunjuk ATR.
Logik terasnya adalah berdasarkan beberapa persilangan EMA dan pengesahan trend. Isyarat panjang dihasilkan apabila EMA jangka pendek (10 tempoh) melintasi di atas EMA jangka sederhana (39 tempoh), dan harga berada di atas EMA jangka panjang (73 tempoh) dan EMA jangka masa yang lebih tinggi (143 tempoh). Sebaliknya, isyarat pendek dihasilkan apabila EMA jangka pendek melintasi di bawah EMA jangka sederhana, dan harga berada di bawah kedua-dua EMA jangka panjang. Strategi melaksanakan nisbah risiko-balasan 1:2 menggunakan 1x ATR untuk sasaran stop-loss dan 2x ATR untuk mengambil keuntungan.
Strategi ini membina sistem dagangan yang menggabungkan trend berikut dan pengurusan risiko melalui pelbagai persimpangan EMA dan hentian dinamik berasaskan ATR. Kekuatannya utama terletak pada mekanisme pengesahan jangka masa berbilang dan pengurusan kedudukan dinamik, sambil mengambil kira risiko pasaran dan lag. Kestabilan strategi dan keuntungan dapat ditingkatkan lagi melalui pengesahan jumlah, penapisan kekuatan trend, dan pengoptimuman lain. Dalam aplikasi praktikal, parameter harus disesuaikan mengikut persekitaran pasaran yang berbeza dan ciri instrumen perdagangan.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-28 00:00:00 period: 2d basePeriod: 2d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Enhanced EMA Crossover Strategy", overlay=true) // Define the EMA lengths ema_short_length = 10 ema_long_length = 39 ema_filter_length = 73 ema_higher_tf_length = 143 // Calculate the EMAs ema_short = ta.ema(close, ema_short_length) ema_long = ta.ema(close, ema_long_length) ema_filter = ta.ema(close, ema_filter_length) ema_higher_tf = request.security(syminfo.tickerid, "D", ta.ema(close, ema_higher_tf_length)) // Calculate ATR for volatility-based stop loss and take profit atr_length = 14 atr = ta.atr(atr_length) // Plot the EMAs plot(ema_short, title="EMA 10", color=color.blue) plot(ema_long, title="EMA 35", color=color.red) plot(ema_filter, title="EMA 75", color=color.orange) plot(ema_higher_tf, title="EMA Higher TF", color=color.purple) // EMA crossover conditions with EMA 75 and higher timeframe EMA filter longCondition = ta.crossover(ema_short, ema_long) and close > ema_filter and close > ema_higher_tf shortCondition = ta.crossunder(ema_short, ema_long) and close < ema_filter and close < ema_higher_tf // Execute long trade with dynamic stop loss and take profit if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Take Profit/Stop Loss", "Long", limit=close + 2 * atr, stop=close - 1 * atr) // Execute short trade with dynamic stop loss and take profit if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Take Profit/Stop Loss", "Short", limit=close - 2 * atr, stop=close + 1 * atr) // Plot signals on the chart plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")