Strategi ini menggunakan jalur atas dan bawah saluran regresi linear, digabungkan dengan penyimpangan standard berganda untuk menetapkan isyarat beli dan jual pecah, untuk menubuhkan kedudukan apabila harga pecah.
Logik teras strategi ini berdasarkan jalur atas, jalur bawah dan garis tengah saluran regresi linear. Proses pengiraan khusus adalah seperti berikut:
Mengira nilai regresi linear linreg harga, dan tempoh seterusnya
Mengira cerun cerun dan pertalian pertalian garis regresi linear berdasarkan linreg
Mengira penyimpangan penyimpangan harga berbanding garis regresi
Tetapkan dev kelipatan penyimpangan untuk mendapatkan offset kumpulan atas dan bawah
Apabila harga pecah ke atas dari band bawah, set membeli isyarat membeli
Apabila harga pecah ke bawah dari band atas, set sell isyarat jual
Apabila harga berbalik dari garis tengah saluran, set mengambil keuntungan isyarat keluar
Tetapkan logik perdagangan berdasarkan isyarat beli, jual dan keluar
Kelebihan terbesar strategi ini adalah bahawa ia menggunakan trend jangka menengah dan panjang yang tercermin oleh saluran regresi linear.
Band atas dan bawah dapat mencerminkan julat normal turun naik harga.
Perpindahan garis tengah sebagai isyarat mengambil keuntungan dapat memaksimumkan keuntungan dan mengelakkan kerugian yang disebabkan oleh pembalikan selepas membuat keuntungan.
Saluran regresi linear mempunyai beberapa kelewatan, yang dapat menapis bunyi pasaran jangka pendek dengan berkesan dan menjadikan isyarat perdagangan lebih boleh dipercayai.
Strategi ini mempunyai beberapa parameter dan mudah dilaksanakan, sesuai untuk perdagangan algoritma.
Terdapat beberapa risiko untuk strategi ini:
Kelewatan saluran regresi linear mungkin terlepas trend selepas perubahan jangka pendek yang drastik. Tempohnya boleh diperpendek untuk mengoptimumkan.
Tetapan yang tidak betul dari pengganda penyimpangan juga boleh membawa kepada isyarat palsu. Parameter boleh dioptimumkan melalui backtesting.
Mengandalkan hanya isyarat pecah boleh membawa kepada kerugian whipsaw. Indikator lain boleh digunakan untuk penapisan isyarat.
Terdapat beberapa risiko pemasangan lengkung. menggabungkan dengan penunjuk saluran lain atau menguji sumber data yang berbeza boleh membantu.
Arah pengoptimuman utama untuk strategi ini:
Mengoptimumkan panjang saluran regresi linear untuk mengimbangi lag dan kepekaan.
Mengoptimumkan pengganda penyimpangan untuk meningkatkan kualiti isyarat sambil memaksimumkan kawalan risiko.
Tambah penunjuk lain untuk penapisan isyarat untuk meningkatkan kadar kemenangan, contohnya EMA, KDJ dll.
Tambahkan mekanisme stop loss seperti ATR trailing stop loss.
Uji kesan sumber data yang berbeza pada strategi, contohnya penutupan yang disesuaikan, data indeks dll.
Sesuaikan parameter atau berat isyarat secara dinamik berdasarkan keadaan pasaran.
Ringkasnya, ini adalah sistem penembusan yang menggunakan saluran regresi linear sebagai penunjuk isyarat. Logik strategi jelas dan mudah difahami, dengan beberapa parameter, menjadikan perdagangan langsung agak mudah dilaksanakan. Walau bagaimanapun, bagaimana untuk mengoptimumkan parameter secara dinamik berdasarkan keadaan pasaran yang berubah dan menggabungkan indikator lain untuk penapisan isyarat adalah kunci kejayaan strategi ini. Melalui ujian dan pengoptimuman berterusan, strategi ini boleh menjadi sistem kuantitatif yang menjana keuntungan yang stabil.
/*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)