Strategi Perdagangan Kuantitatif Berdasarkan Tren Gelombang

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

img

Gambaran umum

Strategi ini dirancang berdasarkan indikator Wave Trend. Indikator Wave Trend menggabungkan saluran harga dan moving average untuk secara efektif mengidentifikasi tren pasar dan menghasilkan sinyal perdagangan. Strategi ini memasuki posisi panjang atau pendek ketika garis Wave Trend melintasi tingkat kunci yang mewakili status overbought atau oversold.

Logika Strategi

  1. Hitung rata-rata bergerak segitiga ap harga, serta rata-rata bergerak eksponensial esa dari ap.
  2. Hitung rata-rata bergerak eksponensial d dari perbedaan absolut antara ap dan esa.
  3. Hasilkan indikator volatilitas ci.
  4. Hitung rata-rata bergerak periode n2 dari ci untuk mendapatkan indikator Trend Wave wt1.
  5. Tentukan garis ambang overbought dan oversold.
  6. Pergi panjang ketika wt1 melintasi garis oversold, pergi pendek ketika wt1 melintasi garis overbought.

Analisis Keuntungan

  1. Wave Trend break dari level overbought/oversold secara efektif menangkap titik pembalikan tren dan menghasilkan sinyal perdagangan yang akurat.
  2. Menggabungkan saluran harga dan teori rata-rata bergerak, indikator ini menghindari sinyal palsu yang sering terjadi.
  3. Berlaku pada semua jangka waktu dan berbagai instrumen perdagangan.
  4. Parameter yang dapat disesuaikan memberikan pengalaman pengguna yang baik.

Risiko dan Solusi

  1. Whipsaws yang signifikan dapat menyebabkan sinyal yang buruk, risiko tinggi. dapat menggunakan periode tunggu yang lebih pendek atau dikombinasikan dengan indikator lain untuk penyaringan sinyal.
  2. Tidak ada ukuran posisi dan mekanisme stop loss, risiko kerugian.

Arahan Optimasi

  1. Pertimbangkan untuk menggabungkan dengan indikator lain seperti KDJ dan MACD untuk membentuk kombinasi strategi, meningkatkan stabilitas.
  2. Desain stop loss otomatis seperti trailing stop, volatility stop untuk membatasi per trade loss.
  3. Menggunakan algoritma pembelajaran mesin pada data historis untuk menyesuaikan parameter otomatis dan meningkatkan kinerja strategi.

Kesimpulan

Strategi ini mengidentifikasi tren dan tingkat overbought/oversold menggunakan indikator Wave Trend, membentuk tren yang efektif mengikuti strategi. Dibandingkan dengan osilator jangka pendek, Wave Trend menghindari sinyal palsu dan memberikan stabilitas yang lebih baik. Dengan metode pengendalian risiko yang tepat, dapat mencapai keuntungan yang stabil. Peningkatan kinerja lebih lanjut dapat diharapkan 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 banyak