Idea utama strategi ini adalah untuk menjana isyarat dagangan berdasarkan persimpangan pelbagai purata bergerak eksponensial (EMA). Ia pergi panjang apabila EMA jangka pendek melintasi EMA jangka panjang dari bawah, dan menutup kedudukan apabila EMA jangka pendek melintasi EMA jangka panjang. Strategi ini membolehkan mengkonfigurasi beberapa tempoh EMA, dan setiap EMA boleh diaktifkan secara bebas. Strategi ini akan berdagang persimpangan pada semua EMA yang diaktifkan.
Strategi Perdagangan EMA Dinamik Berbilang Jangka Masa
Strategi ini menetapkan 8 tempoh EMA - 8 hari, 13 hari, 21 hari, 34 hari, 55 hari, 89 hari, 144 hari dan 233 hari.
Ia menghasilkan isyarat panjang apabila EMA jangka pendek melintasi EMA jangka panjang dari bawah. Ia menghasilkan isyarat keluar apabila EMA jangka pendek melintasi EMA jangka panjang dari atas. Jadi jika dua EMA diaktifkan, EMA pendek > EMA panjang adalah isyarat panjang, EMA pendek < EMA panjang adalah isyarat keluar.
Sebagai contoh, jika 55 hari EMA dan 89 hari EMA diaktifkan, strategi akan panjang apabila 55 hari EMA melintasi lebih daripada 89 hari EMA, dan keluar apabila 55 hari EMA melintasi di bawah 89 hari EMA. Ini membolehkan strategi untuk menyesuaikan secara dinamik gabungan EMA yang digunakan, beralih dari jangka masa yang lebih lama ke yang lebih pendek atau sebaliknya.
Saiz kedudukan ditetapkan untuk ekuiti akaun dibahagikan dengan dekat dibahagikan dengan bilangan EMA yang diaktifkan.
Pertimbangkan untuk menggabungkan EMA dengan penunjuk lain seperti saluran atau osilator untuk menapis isyarat, atau menggabungkan trend dan penunjuk pembalikan.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Mengoptimumkan parameter EMA melalui pengimbas parameter dan analisis berjalan maju untuk mencari kombinasi EMA terbaik.
Tambah keadaan penapis pada persimpangan EMA untuk mengelakkan isyarat palsu e.g. penapis jumlah, penapis turun naik dll.
Gabungkan dengan penunjuk lain seperti MACD, KDJ, Bollinger Bands untuk memanfaatkan pelengkapannya.
Sesuaikan saiz kedudukan secara dinamik pada setiap EMA berdasarkan turun naik pasaran atau kekuatan trend.
Mengoptimumkan stop loss dan mengambil tahap keuntungan untuk mencapai nisbah risiko-balasan terbaik.
Secara keseluruhan, ini adalah strategi yang sangat mudah dan mudah menghasilkan isyarat dari persilangan EMA untuk menangkap trend jangka pendek dan sederhana. Kelebihannya utama terletak pada konfigurasi dan fleksibiliti yang tinggi untuk membolehkan peniaga memilih EMA yang sesuai untuk mereka. Walau bagaimanapun EMA sahaja dapat memberikan isyarat palsu dengan mudah yang merupakan risiko terbesar.
/*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