Strategi dagangan pecahan berdasarkan saluran regresi linear


Tarikh penciptaan: 2024-02-18 15:00:53 Akhirnya diubah suai: 2024-02-18 15:00:53
Salin: 1 Bilangan klik: 1045
1
fokus pada
1617
Pengikut

Strategi dagangan pecahan berdasarkan saluran regresi linear

Gambaran keseluruhan

Strategi ini menggunakan saluran kemerosotan linear di atas dan di bawah, digabungkan dengan isyarat beli dan jual yang pecah dengan setelan standard standard ganda, untuk mewujudkan kedudukan pembentukan selepas harga pecah. Ia juga menggunakan persimpangan garis tengah saluran sebagai isyarat kedudukan kosong, untuk mencapai stop profit.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan pada laluan regresi linear dan garis tengah. Proses pengiraan spesifik adalah seperti berikut:

  1. Mengira nilai regresi linear untuk harga, dan regresi linear untuk kitaran seterusnya

  2. Slope and intercept of the slope and intercept of the linear regression line calculated from the linear regression value

  3. Pengiraan deviasi harga berbanding garis regresi

  4. Tetapkan deviasi pada dev, untuk mendapatkan pengalihan ke atas dan ke bawah

  5. Setting buy signal when price breaks up from the downtrend

  6. Apabila harga menembusi dari atas ke bawah, set signal sell

  7. Apabila harga berpatah balik dari garisan tengah saluran, letakkan isyarat berhenti exit

  8. Logik perdagangan berdasarkan isyarat beli, isyarat jual dan isyarat berhenti

Analisis kelebihan

Kelebihan utama strategi ini ialah menggunakan trend harga jangka sederhana dan jangka panjang yang ditunjukkan oleh saluran regresi linear. Ia ditunjukkan dalam beberapa aspek berikut:

  1. Jalur atas dan bawah saluran kemerosotan linear dapat mencerminkan secara berkesan julat normal turun naik harga, menggunakan julat saluran untuk menetapkan isyarat perdagangan, yang dapat mengurangkan isyarat salah.

  2. Persaingan garis tengah berfungsi sebagai isyarat berhenti, yang dapat mengunci keuntungan maksimum, dan mengelakkan kerugian yang ditimbulkan oleh pembalikan selepas keuntungan.

  3. Perkakas kemerosotan linear mempunyai ketegangan tertentu, yang dapat menghapuskan bunyi pasaran jangka pendek dengan berkesan, menjadikan isyarat perdagangan lebih dipercayai.

  4. Strategi ini mempunyai sedikit parameter, mudah dilaksanakan, dan sesuai untuk algoritma perdagangan kuantitatif.

Analisis risiko

Strategi ini juga mempunyai beberapa risiko, seperti:

  1. Saluran regresi linear mempunyai keterlambatan dan mungkin terlepas trend selepas perubahan mendadak jangka pendek. Anda boleh mengurangkan kitaran saluran dengan sewajarnya, mengoptimumkan parameter.

  2. Penetapan yang tidak betul dalam perkalian penyimpangan juga boleh menyebabkan isyarat yang salah. Ia boleh digabungkan dengan parameter pengoptimuman pengukuran semula.

  3. Berdasarkan isyarat pecah sahaja, kemungkinan besar terdapat kerugian gegaran. Anda boleh mempertimbangkan untuk menyaringnya dengan penunjuk lain.

  4. Terdapat risiko kecocokan kurva tertentu. Anda boleh mempertimbangkan untuk menggabungkan dengan penunjuk saluran lain, atau menguji sumber data yang berbeza.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan panjang saluran pengembalian linear, mengimbangi keterbelakangan dan sensitiviti tindak balas.

  2. Mengoptimumkan kelipatan penyimpangan, meningkatkan kualiti isyarat dengan mengehadkan risiko.

  3. Menambah petunjuk lain untuk penapisan isyarat, meningkatkan kemenangan strategi. Contohnya EMA, KDJ dan sebagainya.

  4. Menambah mekanisme hentian kerugian. Contohnya, hentian ATR, hentian pengesanan dan sebagainya.

  5. Uji kesan pelbagai sumber data terhadap strategi. Contohnya, menggunakan data hak cipta, data indeks, dan sebagainya.

  6. Menggabungkan parameter atau berat isyarat yang disesuaikan secara dinamik dengan keadaan pasaran.

ringkaskan

Strategi ini secara keseluruhan adalah sistem terobosan yang menggunakan saluran regresi linear sebagai petunjuk isyarat. Idea strategi jelas dan mudah difahami, parameternya sedikit, dan pelaksanaan di lapangan tidak sukar. Tetapi bagaimana untuk menyesuaikan parameter yang dioptimumkan mengikut dinamik persekitaran pasaran, dan memfilterkan isyarat dalam kombinasi dengan petunjuk lain, adalah kunci kejayaan strategi ini.

Kod sumber strategi
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Robotrading
//@version=4

strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1)

//Settings
source      = input(close)
length      = input(100, minval=1)
offset      = input(0, minval=0)
dev         = input(2.0, "Deviation")
smoothing   = input(1, minval=1)
mtf_val     = input("", "Resolution", input.resolution)
signals     = input("Recent", "Signals Display", options=["Recent", "All"])
goto        = input(0, "End At Bar Index")

//Lin.reg.
cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white
data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing)
linreg = data(linreg(source, length, offset))
linreg_p = data(linreg(source, length, offset+1))

//Deviation
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
    deviationSum:= deviationSum + pow(source[i]-(slope*(x-i)+intercept), 2)  
deviation = sqrt(deviationSum/(length))
x1 = x-length
x2 = x
y1 = slope*(x-length)+intercept
y2 = linreg

//Cross
dm_current = -deviation*dev + y2
dp_current = deviation*dev + y2
ex_current = (dm_current + dp_current) / 2
buy = crossunder(close, dm_current)
sell = crossover(close, dp_current)
exit = crossover(close, ex_current) or crossunder(close, ex_current)

//Channel
updating = goto <= 0 or x < goto
// if updating
//     line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3)
//     line.delete(b[1])
//     line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3)
//     line.delete(dp[1])
//     line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3)
//     line.delete(dm[1])

//Lines
plot(dm_current, color = color.lime)
plot(dp_current, color = color.red)
plot(ex_current)
    
//Trading
if ex_current > 0
    strategy.entry("Long", strategy.long, na, limit = dm_current)
    strategy.entry("Short", strategy.short, na, limit = dp_current)
    strategy.exit("ExitLong", "Long", limit = ex_current)
    strategy.exit("ExitShort", "Short", limit = ex_current)