Ide inti dari strategi ini adalah untuk menghasilkan sinyal perdagangan berdasarkan crossover dari beberapa rata-rata bergerak eksponensial (EMA). Ini akan panjang ketika EMA jangka pendek melintasi EMA jangka panjang dari bawah, dan menutup posisi ketika EMA jangka pendek melintasi EMA jangka panjang di bawah EMA jangka panjang. Strategi ini memungkinkan konfigurasi beberapa periode EMA, dan setiap EMA dapat diaktifkan secara independen. Strategi ini akan melakukan crossover pada semua EMA yang diaktifkan.
Strategi Perdagangan EMA Dinamis Multi Timeframe
Strategi ini menetapkan 8 periode EMA - 8 hari, 13 hari, 21 hari, 34 hari, 55 hari, 89 hari, 144 hari dan 233 hari.
Ini menghasilkan sinyal panjang ketika EMA jangka pendek melintasi EMA jangka panjang dari bawah. Ini menghasilkan sinyal keluar ketika EMA jangka pendek melintasi EMA jangka panjang dari atas. Jadi jika dua EMA diaktifkan, EMA pendek > EMA panjang adalah sinyal panjang, EMA pendek < EMA panjang adalah sinyal keluar.
Misalnya, jika 55 hari EMA dan 89 hari EMA diaktifkan, strategi akan panjang ketika 55 hari EMA melintasi lebih dari 89 hari EMA, dan keluar ketika 55 hari EMA melintasi di bawah 89 hari EMA. Ini memungkinkan strategi untuk secara dinamis menyesuaikan kombinasi EMA yang digunakan, beralih dari jangka waktu yang lebih lama ke yang lebih pendek atau sebaliknya.
Ukuran posisi diatur untuk ekuitas akun dibagi oleh dekat dibagi oleh jumlah EMA diaktifkan.
Pertimbangkan untuk menggabungkan EMA dengan indikator lain misalnya saluran atau osilator untuk menyaring sinyal, atau menggabungkan indikator tren dan pembalikan.
Strategi dapat dioptimalkan dalam beberapa aspek:
Mengoptimalkan parameter EMA melalui pemindaian parameter dan analisis berjalan maju untuk menemukan kombinasi EMA terbaik.
Tambahkan kondisi filter pada crossover EMA untuk menghindari sinyal palsu misalnya filter volume, filter volatilitas dll.
Gabungkan dengan indikator lain seperti MACD, KDJ, Bollinger Bands untuk memanfaatkan komplementaritas.
Sesuaikan secara dinamis ukuran posisi pada setiap EMA berdasarkan volatilitas pasar atau kekuatan tren.
Mengoptimalkan stop loss dan mengambil tingkat keuntungan untuk mencapai rasio risiko-manfaat terbaik.
Secara keseluruhan, ini adalah strategi yang sangat sederhana dan langsung menghasilkan sinyal dari crossover EMA untuk menangkap tren jangka pendek dan jangka menengah. Keuntungannya utama terletak pada konfigurasi dan fleksibilitas yang tinggi untuk memungkinkan pedagang memilih EMA yang sesuai untuk mereka. Namun EMA saja dapat memberikan sinyal palsu dengan mudah yang merupakan risiko terbesar. Menggabungkan dengan indikator lain dan optimasi parameter dapat menyebabkan kinerja perdagangan yang lebih baik.
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-11 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true) // Revision: 1 // Author: @ToS_MavericK buyprice = 0.0 buyprice := buyprice[1] // === INPUT SMA === EMA1 = input(8) EMA2 = input(13) EMA3 = input(21) EMA4 = input(34) EMA5 = input(55) EMA6 = input(89) EMA7 = input(144) EMA8 = input(233) EnableEMA1 = input(true) EnableEMA2 = input(true) EnableEMA3 = input(true) EnableEMA4 = input(true) EnableEMA5 = input(true) EnableEMA6 = input(true) EnableEMA7 = input(true) EnableEMA8 = input(true) //Profit = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1) //StopLoss = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === SERIES SETUP === vEMA1 = ema(close, EMA1) vEMA2 = ema(close, EMA2) vEMA3 = ema(close, EMA3) vEMA4 = ema(close, EMA4) vEMA5 = ema(close, EMA5) vEMA6 = ema(close, EMA6) vEMA7 = ema(close, EMA7) vEMA8 = ema(close, EMA8) count = -1 if (EnableEMA1 == true) count := count + 1 if (EnableEMA2 == true) count := count + 1 if (EnableEMA3 == true) count := count + 1 if (EnableEMA4 == true) count := count + 1 if (EnableEMA5 == true) count := count + 1 if (EnableEMA6 == true) count := count + 1 if (EnableEMA7 == true) count := count + 1 if (EnableEMA8 == true) count := count + 1 // set position size Amount = 1 / (close * count) // === EXECUTION === strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2) strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2)) strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3) strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3)) strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4) strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4)) strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5) strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5)) strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6) strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6)) strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7) strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7)) strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8) strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8)) plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line) // plot FastMA plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line) // plot SlowMA plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line) // plot SlowMA plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line) // plot SlowMA plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line) // plot SlowMA plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line) // plot SlowMA plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line) // plot SlowMA plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line) // plot SlowMA //plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line) // plot SlowMA //plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line) // plot SlowMA