Strategi kuantitas kombinasi EMA bergerak dinamis

Penulis:ChaoZhang, Tanggal: 2024-01-22 12:34:33
Tag:

img

Gambaran umum

Strategi ini adalah strategi kombinasi rata-rata bergerak dinamis yang bekerja pada beberapa kerangka waktu. Strategi ini menggunakan Rata-rata Gerak Eksponensial (EMA) dengan panjang yang berbeda untuk penilaian tren dan sinyal masuk/keluar.

Logika Strategi

Strategi ini menggunakan 7 EMA yang bergerak dengan kecepatan yang berbeda, dari yang tercepat ke yang paling lambat: EMA 3 periode, EMA 15 periode, EMA 19 periode, EMA 50 periode, EMA 100 periode, EMA 150 periode dan EMA 200 periode.

Selain itu, strategi ini juga menggabungkan price breaking high baru-baru ini dan close price crossing historical highs untuk mengkonfirmasi sinyal panjang, dan menggunakan price breaking low baru-baru ini dan close price crossing historical lows untuk mengkonfirmasi signal short.

Aturan keluar mengharuskan harga penutupan untuk memecahkan EMA yang lebih cepat secara berurutan menuju EMA yang lebih lambat, menunjukkan pembalikan tren.

Analisis Keuntungan

  • Menggunakan 7 EMA dengan kecepatan yang berbeda yang membentuk bentuk trapezoid dapat mengidentifikasi titik pembalikan tren dengan lebih tepat
  • Menggabungkan tinggi/rendah baru dan tinggi/rendah historis menghindari sinyal pecah palsu
  • Aturan keluar ganda yang ketat memungkinkan stop loss yang tepat waktu

Analisis Risiko

  • Tidak ada mekanisme stop loss mengarah pada potensi kerugian besar
  • Aturan keluar ganda dapat menyebabkan keluar dini
  • Terlalu banyak EMA yang lebih cepat menghasilkan lebih banyak kebisingan dan meningkatkan frekuensi perdagangan dan biaya komisi

Solusi:

  1. Tambahkan stop loss persentase tetap dan trailing stop loss
  2. Sesuaikan panjang EMA keluar untuk menurunkan kekakuan aturan exit ganda
  3. Meningkatkan panjang EMA untuk mengurangi frekuensi perdagangan

Arahan Optimasi

  • Tambahkan mekanisme stop loss seperti stop loss persentase tetap, trailing stop loss dll
  • Mengoptimalkan parameter EMA untuk menemukan kombinasi terbaik
  • Tambahkan indikator lain seperti MACD, ATR, KDJ dll untuk menyaring sinyal
  • Gabungkan dengan strategi rentang/saluran untuk menangkap pergerakan sekunder dalam tren
  • Pertimbangkan untuk menambahkan aturan ukuran posisi

Kesimpulan

Strategi ini memiliki logika yang jelas menggunakan 7 EMA dengan kecepatan yang berbeda untuk menentukan tren dan aturan exit ganda untuk mendeteksi pembalikan. tetapi tidak ada mekanisme stop loss yang mengarah pada risiko kerugian besar, dan mungkin keluar lebih awal. perbaikan dapat dilakukan dalam aspek seperti menambahkan stop loss, penyesuaian parameter, penyaringan indikator untuk mengubahnya menjadi sistem perdagangan yang solid.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true  )
Length = input(3, minval=1)
Length2 = input(15, minval=1)
Length3 = input(19, minval=1)
//Length33 = input(25, minval=1)
Length4 = input(50, minval=1)
Length44 = input(100, minval=1)
Length5 = input(150, minval=1)
Length6 = input(171, minval=1)
Length66 = input(172, minval=1)

xPrice = input(close)

xEMA1 = ema(xPrice, Length)
xEMA2 = ema(xPrice, Length2)
xEMA3 = ema(xPrice, Length3)
//xEMA33 = ema(xPrice, Length33)
xEMA4 = ema(xPrice, Length4)
xEMA44 = ema(xPrice, Length44)
xEMA5 = ema(xPrice, Length5)
xEMA6 = ema(xPrice, Length6)
xEMA66 = ema(xPrice, Length66)

// plot(xEMA1, color=color.white)
// plot(xEMA2, color=color.red)
// plot(xEMA3, color=color.green)
// plot(xEMA4, color=color.purple)
// plot(xEMA44, color=color.gray)
// plot(xEMA5, color=color.maroon)
// plot(xEMA6, color=color.blue)
// plot(xEMA66, color=color.orange)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



long = close >  xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3  and xEMA3 > xEMA4  and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6  and xEMA6> xEMA66  and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond
short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3  and xEMA3 < xEMA4  and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and  xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond

notlong = close < xEMA1
strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)


exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4
exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4)
exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4
exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4)

strategy.close("long", when = exitlong1 or exitlong2)
strategy.close("short", when= exitshort1 or exitshort2) 






 


Lebih banyak