Strategi perdagangan bingkai berbilang masa berdasarkan saluran jalur


Tarikh penciptaan: 2023-09-20 15:47:46 Akhirnya diubah suai: 2023-09-20 15:47:46
Salin: 0 Bilangan klik: 776
1
fokus pada
1621
Pengikut

Gambaran keseluruhan

Strategi ini adalah berdasarkan saluran band gelombang yang menyesuaikan diri, merancang dua strategi tracking stop loss yang berbeza, melakukan pengesahan pengesanan sistematik pada pelbagai bingkai masa, dan merupakan strategi perdagangan jenis trend tracking.

Prinsip Strategi

  1. Hitung lintasan atas dan bawah saluran gelombang yang disesuaikan, lebar saluran disesuaikan dengan parameter.

  2. Strategi menjejaki penembusan, harga membuka kedudukan selepas menembusi saluran, dan berhenti ketika berada di dalam saluran.

  3. Kembali ke strategi berbalik, harga membuka kedudukan apabila mencapai saluran, harga berhenti ketika kembali di dalam saluran.

  4. Indeks CCI membantu menentukan jumlah talian udara.

  5. Kajian jangka masa berganda telah mengesahkan kebolehan kedua-dua strategi tersebut.

Analisis kelebihan

  1. Waveband channel adalah mudah dan intuitif untuk menangkap trend harga secara berkesan.

  2. Kedua-dua strategi ini boleh disesuaikan dengan keadaan pasaran yang berbeza untuk meningkatkan kestabilan.

  3. Indeks CCI boleh membantu menentukan jumlah ruang kosong.

  4. Hasilnya lebih meyakinkan jika dilihat dari segi jangka masa.

  5. Peraturan-peraturan strategi mudah difahami dan mudah dilaksanakan.

Analisis risiko

  1. Waveband channel mungkin rosak.

  2. Kedua-dua strategi ini mempunyai risiko terlambat atau terlambat.

  3. Indeks CCI mungkin memberi isyarat yang salah.

  4. Data yang tidak tepat perlu diuruskan dengan berhati-hati.

  5. Parameter yang dioptimumkan mungkin mempunyai overfit.

Arah pengoptimuman

  1. Uji parameter yang berbeza untuk mencari kombinasi optimum.

  2. Penilaian penapisan isyarat untuk penambahan petunjuk lain.

  3. Mengoptimumkan strategi hentikan kerugian dan mengurangkan risiko.

  4. Kajian kaedah pengiraan lebar saluran yang disesuaikan.

  5. Ujian semula dilakukan pada lebih banyak jenis dan kitaran.

  6. Parameter pengoptimuman dinamik menggunakan kaedah pembelajaran mesin.

ringkaskan

Strategi ini direka berdasarkan dua strategi penjejakan dan menghentikan kerugian berdasarkan saluran gelombang, melakukan pengesahan ulang pelbagai kerangka masa. Dengan cara mengoptimumkan parameter, penambahbaikan strategi menghentikan kerugian, dan sebagainya, dapat meningkatkan kestabilan sistem, mengembangkannya sebagai sistem perdagangan trend yang dipercayai dan dipercayai.

Kod sumber strategi
/*backtest
start: 2022-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "Underworld Hunter", overlay=true)

len = input(75, minval=1, title="Length")
src = input(close, title="Source")
basis = 0.0
basis := na(basis[1]) ? sma(src, len) : ema(ema(ema(src,len),len),len)

mult = input(1.9, minval=0.001, maxval=50, title="Deviation")
dev = mult * stdev(src, len)
upper = basis + dev
lower = basis - dev

//CCI calculation and inputs

lengthcci = input(20, minval=1, title="Period for CCI")
ma = sma(close, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))

//CCI plotting

cciover0 = ccivalue >= 100 and ccivalue <= 120
cciover1 = ccivalue > 120 and ccivalue <= 140
cciover2 = ccivalue > 140 and ccivalue <= 160
cciover3 = ccivalue > 160 and ccivalue <= 180
cciover4 = ccivalue > 180

cciunder0 = ccivalue <= -100 and ccivalue >= -120
cciunder1 = ccivalue <= -120 and ccivalue > -140
cciunder2 = ccivalue <= -140 and ccivalue > -160
cciunder3 = ccivalue <= -160 and ccivalue > -180
cciunder4 = ccivalue <= -180

plotshape(cciover0, title="CCIO0", location=location.abovebar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder0, title="CCIU0", location=location.belowbar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover1, title="CCIO1", location=location.abovebar, color=#ffff00, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder1, title="CCIU1", location=location.belowbar, color=#ffff00, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover2, title="CCIO2", location=location.abovebar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder2, title="CCIU2", location=location.belowbar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover3, title="CCIO3", location=location.abovebar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder3, title="CCIU3", location=location.belowbar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover4, title="CCIO4", location=location.abovebar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder4, title="CCIU4", location=location.belowbar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)

//plotting

plot(upper, title="Upper shadow", color=color.black, transp = 30, linewidth = 4)
plot(upper, title="Upper line", color=#FF2E00, transp = 0, linewidth = 2)
plot(lower, title="Lower shadow", color=color.black, transp = 30, linewidth = 4)
plot(lower, title="Lower line", color=#FF2E00, transp = 0, linewidth = 2)
plot(basis, title="Basic line", color=color.red, transp = 50, linewidth = 2)

mean = input(title="Test Reverse to the Mean instead", type=input.bool, defval=false)
test = input(title="Enable testing", type=input.bool, defval=true)

ordersize=floor(50000/close)

if(close>upper and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Up", strategy.long, ordersize)
if (close<upper and close[1]<upper and close[2]<upper)
    strategy.close("Hunt Up", qty_percent = 100, comment = "Hunt End")

if(close<lower and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Down", strategy.short, ordersize)
if (close>lower and close[1]>lower and close[2]>lower)
    strategy.close("Hunt Down", qty_percent = 100, comment = "Hunt End")

//bounce of bands

if(close>upper and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Down", strategy.short, ordersize)
if (close<upper and close[1]<upper and close[2]<upper and close>high[1])
    strategy.close("Sneak Down", qty_percent = 100, comment = "SneakEnd")

if(close<lower and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Up", strategy.long, ordersize)
if (close>lower and close[1]>lower and close[2]>lower and close<low[1])
    strategy.close("Sneak Up", qty_percent = 100, comment = "Sneak End")