Strategi kuant kombinasi EMA bergerak dinamik

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

img

Ringkasan

Strategi ini adalah strategi gabungan purata bergerak dinamik yang berfungsi pada beberapa bingkai masa. Ia menggunakan purata bergerak eksponensial (EMA) dengan panjang yang berbeza untuk penilaian trend dan isyarat masuk / keluar.

Logika Strategi

Strategi ini menggunakan 7 EMA yang bergerak pada kelajuan yang berbeza, dari yang terpantas ke yang paling perlahan: EMA 3 tempoh, EMA 15 tempoh, EMA 19 tempoh, EMA 50 tempoh, EMA 100 tempoh, EMA 150 tempoh dan EMA 200 tempoh.

Di samping itu, strategi ini juga menggabungkan harga yang melangkau tinggi baru-baru ini dan harga yang hampir melangkau paras tertinggi sejarah untuk mengesahkan isyarat panjang, dan menggunakan harga yang baru-baru ini melangkau rendah dan dekat melangkau paras terendah sejarah untuk mengesahkan isyarat pendek. Ini membantu mengelakkan pecah palsu.

Peraturan keluar memerlukan harga penutupan untuk memecahkan EMA yang lebih cepat secara berturut-turut ke arah EMA yang lebih perlahan, menunjukkan pembalikan trend.

Analisis Kelebihan

  • Menggunakan 7 EMA kelajuan yang berbeza membentuk bentuk trapezoid boleh mengenal pasti titik pembalikan trend dengan lebih tepat
  • Menggabungkan tinggi baru/rendah dan tinggi sejarah/rendah mengelakkan isyarat pecah palsu
  • Peraturan keluar dua kali yang ketat membolehkan stop loss tepat pada masanya

Analisis Risiko

  • Tiada mekanisme stop loss membawa kepada potensi kerugian yang besar
  • Peraturan keluar ganda boleh menyebabkan keluar awal
  • EMA yang terlalu cepat menghasilkan lebih banyak bunyi bising dan meningkatkan kekerapan dagangan dan kos komisen

Penyelesaian:

  1. Tambah peratusan stop loss tetap dan trailing stop loss
  2. Sesuaikan panjang EMA keluar untuk mengurangkan ketegasan peraturan keluar dua
  3. Meningkatkan panjang EMA untuk mengurangkan kekerapan dagangan

Arahan pengoptimuman

  • Tambah mekanisme stop loss seperti stop loss peratusan tetap, trailing stop loss dan lain-lain
  • Mengoptimumkan parameter EMA untuk mencari kombinasi terbaik
  • Tambah penunjuk lain seperti MACD, ATR, KDJ dan lain-lain untuk menapis isyarat
  • Gabungkan dengan strategi julat/saluran untuk menangkap pergerakan sekunder dalam trend
  • Pertimbangkan untuk menambah peraturan saiz kedudukan

Kesimpulan

Strategi ini mempunyai logik yang jelas menggunakan 7 EMA dengan kelajuan yang berbeza untuk menentukan trend dan peraturan keluar ganda untuk mengesan pembalikan. Tetapi tidak ada mekanisme stop loss yang membawa kepada risiko kerugian yang besar, dan ia mungkin keluar lebih awal. Penambahbaikan boleh dibuat dalam aspek seperti menambah stop loss, penyesuaian parameter, penapisan penunjuk untuk menjadikannya menjadi sistem perdagangan yang kukuh.


/*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 lanjut