Strategi Perdagangan EMA Dinamis Multi Timeframe

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

img

Gambaran umum

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.

Nama Strategi

Strategi Perdagangan EMA Dinamis Multi Timeframe

Prinsip Strategi

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.

Analisis Keuntungan

  • Fleksibilitas untuk menyesuaikan kerangka waktu dengan mengkonfigurasi EMA yang berbeda
  • Setiap EMA dapat diaktifkan/dionaktifkan secara independen, sangat dapat disesuaikan
  • Posisi terdistribusi secara merata di EMA, baik untuk manajemen risiko
  • Menggunakan beberapa EMA, dapat beralih ke EMA yang lebih cocok untuk tahap pasar yang berbeda
  • Logika sederhana dan jelas, mudah dipahami dan debug

Analisis Risiko

  • EMA sendiri tidak dapat menentukan struktur pasar, rentan terhadap sinyal palsu
  • Pasar Whipsaw menyebabkan crossover EMA yang berlebihan, meningkatkan frekuensi perdagangan dan biaya slippage
  • Kebutuhan optimalisasi parameter EMA untuk pasar yang berbeda
  • Mungkin membutuhkan indikator lain untuk mengkonfirmasi sinyal

Pertimbangkan untuk menggabungkan EMA dengan indikator lain misalnya saluran atau osilator untuk menyaring sinyal, atau menggabungkan indikator tren dan pembalikan.

Arahan Optimasi

Strategi dapat dioptimalkan dalam beberapa aspek:

  1. Mengoptimalkan parameter EMA melalui pemindaian parameter dan analisis berjalan maju untuk menemukan kombinasi EMA terbaik.

  2. Tambahkan kondisi filter pada crossover EMA untuk menghindari sinyal palsu misalnya filter volume, filter volatilitas dll.

  3. Gabungkan dengan indikator lain seperti MACD, KDJ, Bollinger Bands untuk memanfaatkan komplementaritas.

  4. Sesuaikan secara dinamis ukuran posisi pada setiap EMA berdasarkan volatilitas pasar atau kekuatan tren.

  5. Mengoptimalkan stop loss dan mengambil tingkat keuntungan untuk mencapai rasio risiko-manfaat terbaik.

Kesimpulan

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


Lebih banyak