Strategi perdagangan kuantitatif berdasarkan arah aliran gelombang


Tarikh penciptaan: 2023-11-28 16:17:31 Akhirnya diubah suai: 2023-11-28 16:17:31
Salin: 1 Bilangan klik: 715
1
fokus pada
1619
Pengikut

Strategi perdagangan kuantitatif berdasarkan arah aliran gelombang

Gambaran keseluruhan

Strategi ini direka berdasarkan indikator trend gelombang. Indikator trend gelombang menggabungkan saluran harga dan rata-rata untuk mengenal pasti trend pasaran dengan berkesan dan menghantar isyarat beli dan jual. Strategi ini melakukan pembelian atau penjualan dengan menetapkan garis beli dan jual melampaui trend gelombang.

Prinsip Strategi

  1. Hitung harga dengan purata bergerak segitiga ap, dan purata bergerak indeks ap esa。
  2. Mengira purata bergerak indeks untuk perbezaan mutlak antara ap dan esa.
  3. Dapatkan Indeks Fluktuasi
  4. Hitung rata-rata kitaran n2 untuk ci, dan dapatkan indikator trend gelombang wt1。
  5. Tetapkan garis beli dan jual.
  6. Apabila WT1 melalui garis jual-beli, buat lebih; apabila WT1 melalui garis beli-beli, buat kosong.

Analisis kelebihan

  1. Indikator trend gelombang menembusi garisan overbought dan oversold, yang dapat menangkap titik perubahan trend pasaran dengan berkesan, membuat keputusan membeli dan menjual dengan tepat.
  2. Gabungan saluran harga dan teori garis rata, penunjuk tidak akan menghasilkan isyarat yang kerap.
  3. Tempoh masa boleh digunakan untuk pelbagai jenis transaksi.
  4. Parameter penunjuk boleh disesuaikan, pengalaman pengguna baik.

Risiko dan penyelesaian

  1. Dalam pasaran yang sangat bergolak, petunjuk akan menghasilkan isyarat yang salah, risiko yang lebih besar. Anda boleh memendekkan tempoh pegangan dengan sewajarnya, atau menggabungkan isyarat penapis petunjuk lain.
  2. Tanpa mempertimbangkan pengurusan kedudukan dan mekanisme penutupan kerugian, terdapat risiko kerugian. Anda boleh menetapkan saiz kedudukan dan penutupan bergerak untuk mengawal risiko.

Arah pengoptimuman

  1. Ia boleh dipertimbangkan untuk digunakan bersama-sama dengan indeks lain, seperti KDJ, MACD dan lain-lain, untuk membentuk portfolio perdagangan dan meningkatkan kestabilan strategi.
  2. Mekanisme henti kerugian automatik boleh direka, seperti hentian pengesanan, hentian garis putaran, dan lain-lain, untuk mengawal kerugian tunggal.
  3. Ia boleh digabungkan dengan algoritma pembelajaran mendalam untuk meningkatkan kadar kemenangan strategi dengan mengoptimumkan parameter secara automatik melalui latihan data pengulangan.

ringkaskan

Strategi ini adalah strategi pengesanan trend yang berkesan berdasarkan indikator trend gelombang untuk mengenal pasti trend dalam keadaan overbought dan oversold. Ia dapat mengurangkan isyarat salah dan meningkatkan kestabilan berbanding dengan indikator jangka pendek. Bersama dengan pengurusan kedudukan dan hentian, strategi ini dapat memperoleh keuntungan yang stabil.

Kod sumber strategi
/*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")