Strategi Dagangan Kuantitatif Berdasarkan Trend Gelombang

Penulis:ChaoZhang, Tarikh: 2023-11-28 16:17:31
Tag:

img

Ringkasan

Strategi ini direka berdasarkan penunjuk Trend Gelombang. Penunjuk Trend Gelombang menggabungkan saluran harga dan purata bergerak untuk mengenal pasti trend pasaran dengan berkesan dan menghasilkan isyarat perdagangan. Strategi ini memasuki kedudukan panjang atau pendek apabila garis Trend Gelombang melintasi tahap utama yang mewakili status overbought atau oversold.

Logika Strategi

  1. Hitung purata bergerak segitiga harga, serta purata bergerak eksponensial esa harga.
  2. Hitung purata bergerak eksponensial d perbezaan mutlak antara ap dan esa.
  3. Menghasilkan penunjuk turun naik ci.
  4. Hitung purata bergerak tempoh n2 ci untuk mendapatkan indikator Trend Gelombang wt1.
  5. Tetapkan garis ambang terlalu banyak beli dan terlalu banyak jual.
  6. Pergi panjang apabila wt1 melintasi di atas garis oversold, pergi pendek apabila wt1 melintasi di bawah garis overbought.

Analisis Kelebihan

  1. Jatuhan Trend Gelombang tahap overbought / oversold secara berkesan menangkap titik pembalikan trend dan menghasilkan isyarat perdagangan yang tepat.
  2. Menggabungkan saluran harga dan teori purata bergerak, penunjuk mengelakkan isyarat palsu yang kerap.
  3. Berlaku untuk semua jangka masa dan pelbagai instrumen dagangan.
  4. Parameter yang boleh disesuaikan memberikan pengalaman pengguna yang baik.

Risiko dan Penyelesaian

  1. Whipsaws yang signifikan boleh menyebabkan isyarat yang buruk, risiko tinggi. boleh menggunakan tempoh tunggu yang lebih pendek atau digabungkan dengan penunjuk lain untuk penapisan isyarat.
  2. Tiada ukuran kedudukan dan mekanisme berhenti kerugian, risiko kerugian. boleh menetapkan peraturan saiz kedudukan tetap dan berhenti bergerak.

Arahan pengoptimuman

  1. Pertimbangkan untuk menggabungkannya dengan penunjuk lain seperti KDJ dan MACD untuk membentuk kombinasi strategi, meningkatkan kestabilan.
  2. Reka bentuk stop loss automatik seperti trailing stop, volatility berhenti untuk had setiap kerugian perdagangan.
  3. Menggunakan algoritma pembelajaran mesin pada data sejarah untuk menyesuaikan parameter automatik dan meningkatkan prestasi strategi.

Kesimpulan

Strategi ini mengenal pasti trend dan tahap overbought / oversold menggunakan penunjuk Trend Wave, membentuk trend yang berkesan mengikut strategi. Berbanding dengan osilator jangka pendek, Trend Wave mengelakkan isyarat palsu dan memberikan kestabilan yang lebih baik. Dengan kaedah kawalan risiko yang betul, ia dapat mencapai keuntungan yang stabil. Tambahan peningkatan prestasi boleh dijangkakan dari parameter dan penyesuaian model.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@author SoftKill21
//@version=4

strategy(title="WaveTrend strat", shorttitle="WaveTrend strategy")
n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
Overbought = input(70, "Over Bought")
Oversold = input(-30, "Over Sold ")

// BACKTESTING RANGE
 
// From Date Inputs
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 = 2001, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, 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)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1500","0500-1600")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true //and (london or newyork)

ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(Overbought, color=color.red)
plot(Oversold, color=color.green)

plot(wt1, color=color.green)
longButton = input(title="Long", type=input.bool, defval=true)
shortButton = input(title="Short", type=input.bool, defval=true)

if(longButton==true)
    strategy.entry("long",1,when=crossover(wt1,Oversold) and time_cond)
    strategy.close("long",when=crossunder(wt1, Overbought))
    
if(shortButton==true)
    strategy.entry("short",0,when=crossunder(wt1, Overbought) and time_cond)
    strategy.close("short",when=crossover(wt1,Oversold))

//strategy.close_all(when= not (london or newyork),comment="time")
if(dayofweek == dayofweek.friday)
    strategy.close_all(when= timeinrange(timeframe.period, "1300-1400"), comment="friday") 

Lebih lanjut