Triple EMA Momentum Strategy

Penulis:ChaoZhang, Tanggal: 2023-09-27 17:19:26
Tag:

Gambaran umum

Strategi ini dimodifikasi dari SoftKill21s Amazing scalper untuk major dengan manajemen risiko dengan menggunakan triple exponential moving averages bukan moving average sederhana untuk mengurangi lag. Ini cocok untuk pasangan mata uang utama pada jangka waktu 1 menit, mengadopsi pendekatan mengikuti tren berdasarkan salib emas dan salib kematian EMA cepat, EMA standar dan EMA lambat.

Logika Strategi

Strategi ini menggunakan tiga EMA dengan periode yang berbeda: EMA cepat 25 periode, EMA standar 50 periode dan EMA lambat 100 periode. Ketika EMA cepat melintasi EMA standar dan EMA lambat, itu menghasilkan sinyal beli. Ketika EMA cepat melintasi di bawah EMA standar dan EMA lambat, itu menghasilkan sinyal jual. Untuk mengurangi lag, EMA dihitung menggunakan teknik smoothing eksponensial ganda. Strategi ini juga memeriksa apakah waktu pasar terbuka sesi London atau New York sesuai dengan kondisi masuk. Selain itu, ukuran posisi setiap pesanan ditentukan secara dinamis dengan menggunakan persentase tetap ekuitas akun untuk mengendalikan risiko.

Secara khusus, strategi pertama menghitung tiga garis EMA, kemudian memeriksa apakah EMA cepat membentuk salib emas atau salib kematian dengan EMA standar dan EMA lambat. Jika kondisi juga sesuai dengan waktu pasar terbuka London atau New York, sinyal beli atau jual dihasilkan. Saat menentukan ukuran posisi, strategi menghitung persentase tetap ekuitas akun sebagai eksposur risiko, kemudian mengubahnya menjadi ukuran kontrak dan lot bulat untuk menyesuaikan posisi secara dinamis untuk setiap pesanan.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. EMA triple dapat secara efektif meluruskan data harga dan mengidentifikasi arah tren. EMA cepat sensitif terhadap perubahan harga, EMA standar melacak secara stabil, dan EMA lambat menyaring kebisingan.

  2. Penggunaan perataan eksponensial ganda mengurangi lag dan membuat sinyal lebih sensitif.

  3. Menggabungkan sesi perdagangan utama menghindari sinyal yang menyesatkan selama jam sibuk.

  4. Pendekatan manajemen risiko menyesuaikan ukuran posisi berdasarkan ekuitas akun, menghindari kerugian yang berlebihan pada perdagangan tunggal.

  5. Logikanya sederhana dan jelas, mudah dimengerti dan diterapkan, cocok untuk pemula.

  6. Strategi dapat dioptimalkan dan disesuaikan untuk pasangan mata uang dan kerangka waktu yang berbeda, dengan penerapan yang luas.

Analisis Risiko

Strategi ini juga memiliki beberapa risiko potensial:

  1. EMA tidak dapat secara efektif menyaring pecah palsu jangka pendek yang disebabkan oleh peristiwa mendadak, yang dapat menghasilkan sinyal yang salah. Indikator lain dapat ditambahkan untuk menyaring dan menganalisis.

  2. Ukuran posisi persentase tetap tidak dapat disesuaikan secara dinamis dengan volatilitas pasar, yang menyebabkan posisi terlalu besar atau terlalu kecil. Ukuran posisi dinamis berdasarkan volatilitas dapat dipertimbangkan.

  3. Hanya dua sesi utama yang dipertimbangkan, yang mungkin kehilangan peluang perdagangan di sesi lain.

  4. Kurangnya mekanisme stop loss mengakibatkan ketidakmampuan untuk mengontrol kerugian sepihak secara efektif.

  5. Penyambungan EMA memiliki beberapa keterlambatan dan mungkin tidak memiliki waktu masuk terbaik.

  6. Kinerja dapat dipengaruhi oleh biaya transaksi. Stop loss dan level take profit harus disesuaikan.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji parameter periode EMA yang berbeda untuk menemukan kombinasi optimal.

  2. Tambahkan indikator penyaringan lainnya seperti RSI, Bollinger Bands untuk meningkatkan kualitas sinyal.

  3. Memperkenalkan ukuran posisi dinamis berdasarkan volatilitas pasar dan profitabilitas.

  4. Tambahkan gerakan atau stop loss waktu untuk membatasi kerugian.

  5. Uji sesi perdagangan yang berbeda untuk menemukan waktu yang optimal.

  6. Mengoptimalkan tingkat mengambil keuntungan dan stop loss untuk menyeimbangkan ukuran keuntungan dan tingkat menang.

  7. Cobalah memodifikasi perhitungan EMA seperti EMA tertimbang linier untuk mengurangi lag.

  8. Gunakan pembelajaran mesin untuk menemukan parameter optimal.

  9. Model biaya transaksi dan sistem penyesuaian untuk keuntungan bersih maksimum.

Melalui optimasi di atas, sistem dapat meningkatkan profitabilitas, pengurangan dikendalikan, penerapan diperluas, untuk mendapatkan strategi perdagangan yang lebih kuat dan kuat.

Ringkasan

Logika keseluruhan strategi ini jelas, menggunakan EMA tiga untuk mengidentifikasi tren, menggabungkan dengan sesi utama untuk pelaksanaan, dan mengadopsi ukuran posisi berdasarkan persentase akun. Ini termasuk dalam sistem trend berikut yang khas. Ada ruang besar untuk optimasi melalui penyesuaian parameter, perbaikan mekanisme, pengenalan teknologi dll untuk lebih memperluas penerapannya di lebih banyak pasar dan meningkatkan ketahanan. Sebagai pembelajaran e untuk pemula, ini memberikan titik awal yang baik. Dengan latihan dan peningkatan, ini dapat berubah menjadi strategi kuantitatif yang matang dan dapat diandalkan.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// original author SoftKill21
//@version=4
//@capam 

strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true)
strategy.initial_capital = 50000
len1 = input(25, minval=1, title="Length")
len2 = input(50, minval=1, title="Length")
len3 = input(100, minval=1, title="Length")

src = input(close, title="Source")
tmp1 = ema(src, len1)
tmp2 = ema(src, len2)
tmp3 = ema(src, len3)
fastemaOut = 2*tmp1 - ema(tmp1, len1)
standardemaOut = 2*tmp2 - ema(tmp2, len2)
slowemaOut = 2*tmp3 - ema(tmp3, len3)
//fastemaOut = sma(src, len1)
//standardemaOut = sma(src, len2)
//slowemaOut = sma(src, len3)

plot(fastemaOut, color=color.black, title="First EMA")
plot(standardemaOut, color=color.yellow, title="Second EMA")
plot(slowemaOut, color=color.blue, title="Third EMA")


timeinrange(res, sess) => time(res, sess) != 0


londopen = timeinrange(timeframe.period, "0300-1100") 
nyopen = timeinrange(timeframe.period, "0800-1600") 

longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen)
shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen)

longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen
shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen
tp = input(50,title="TP")
sl = input(100, title="SL")

tradeLondon =  input(title="Trade london session?", type=input.bool, defval=true)
tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true)

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000        

if(tradeLondon==true)
    strategy.entry("long",1,when=longCondition)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

if(tradeNewyork==true)
    strategy.entry("long",1,when=longCondition2)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition2)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

// strategy.risk.max_intraday_filled_orders(2) 

Lebih banyak