Sumber dimuat naik... memuat...

Strategi Perdagangan EMA Dinamik Berbilang Jangka Masa

Penulis:ChaoZhang, Tarikh: 2023-12-12 12:18:41
Tag:

img

Ringkasan

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.

Nama Strategi

Strategi Perdagangan EMA Dinamik Berbilang Jangka Masa

Prinsip Strategi

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.

Analisis Kelebihan

  • Kelayakan untuk menyesuaikan jangka masa dengan mengkonfigurasi EMA yang berbeza
  • Setiap EMA boleh diaktifkan / dilumpuhkan secara bebas, sangat disesuaikan
  • Posisi yang diedarkan secara merata di seluruh EMA, baik untuk pengurusan risiko
  • Menggunakan pelbagai EMA, boleh beralih ke EMA yang lebih sesuai untuk peringkat pasaran yang berbeza
  • Logik yang mudah dan jelas, mudah difahami dan debug

Analisis Risiko

  • EMA sahaja tidak dapat menentukan struktur pasaran, terdedah kepada isyarat palsu
  • Pasaran Whipsaw membawa kepada persimpangan EMA yang berlebihan, peningkatan kekerapan perdagangan dan kos slippage
  • Keperluan pengoptimuman parameter EMA untuk pasaran yang berbeza
  • Mungkin memerlukan penunjuk lain untuk mengesahkan isyarat

Pertimbangkan untuk menggabungkan EMA dengan penunjuk lain seperti saluran atau osilator untuk menapis isyarat, atau menggabungkan trend dan penunjuk pembalikan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter EMA melalui pengimbas parameter dan analisis berjalan maju untuk mencari kombinasi EMA terbaik.

  2. Tambah keadaan penapis pada persimpangan EMA untuk mengelakkan isyarat palsu e.g. penapis jumlah, penapis turun naik dll.

  3. Gabungkan dengan penunjuk lain seperti MACD, KDJ, Bollinger Bands untuk memanfaatkan pelengkapannya.

  4. Sesuaikan saiz kedudukan secara dinamik pada setiap EMA berdasarkan turun naik pasaran atau kekuatan trend.

  5. Mengoptimumkan stop loss dan mengambil tahap keuntungan untuk mencapai nisbah risiko-balasan terbaik.

Kesimpulan

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


Lebih lanjut