Strategi ini menggunakan band atas dan bawah saluran regresi linier, dikombinasikan dengan standar deviasi ganda untuk mengatur sinyal beli dan jual pecah, untuk menetapkan posisi ketika harga pecah.
Logika inti dari strategi ini didasarkan pada pita atas, pita bawah dan garis tengah saluran regresi linier.
Menghitung nilai regresi linier linreg harga, dan periode berikutnya
Menghitung kemiringan kemiringan dan pemotongan pemotongan garis regresi linier berdasarkan linreg
Menghitung deviasi deviasi harga relatif terhadap garis regresi
Tetapkan dev ganda dari penyimpangan untuk mendapatkan offset dari band atas dan bawah
Ketika harga keluar ke atas dari band bawah, mengatur sinyal beli beli
Ketika harga keluar ke bawah dari band atas, mengatur sinyal jual jual
Ketika harga terbalik dari garis tengah saluran, mengatur mengambil keuntungan sinyal keluar
Atur logika perdagangan berdasarkan sinyal beli, jual dan keluar
Keuntungan terbesar dari strategi ini adalah bahwa ia memanfaatkan tren jangka menengah dan panjang yang tercermin dari saluran regresi linier.
Band atas dan bawah dapat secara efektif mencerminkan rentang normal fluktuasi harga.
Crossover garis tengah sebagai sinyal mengambil keuntungan dapat memaksimalkan keuntungan dan menghindari kerugian yang disebabkan oleh pembalikan setelah menghasilkan keuntungan.
Saluran regresi linier memiliki beberapa keterlambatan, yang dapat secara efektif menyaring kebisingan pasar jangka pendek dan membuat sinyal perdagangan lebih dapat diandalkan.
Strategi ini memiliki beberapa parameter dan mudah diterapkan, cocok untuk perdagangan algoritmik.
Ada beberapa risiko untuk strategi ini:
Lag dari saluran regresi linier dapat melewatkan tren setelah perubahan jangka pendek drastis. Periode dapat dipersingkat untuk mengoptimalkan.
Pengaturan yang salah dari deviasi multiplier juga dapat menyebabkan sinyal palsu. Parameter dapat dioptimalkan melalui backtesting.
Mengandalkan hanya sinyal breakout dapat menyebabkan kerugian whipsaw. Indikator lain dapat digunakan untuk penyaringan sinyal.
Ada beberapa risiko pencocokan kurva. Kombinasi dengan indikator saluran lain atau pengujian sumber data yang berbeda dapat membantu.
Arah optimasi utama untuk strategi ini:
Optimalkan panjang saluran regresi linier untuk menyeimbangkan lag dan sensitivitas.
Mengoptimalkan pengganda penyimpangan untuk meningkatkan kualitas sinyal sambil memaksimalkan kontrol risiko.
Tambahkan indikator lain untuk penyaringan sinyal untuk meningkatkan tingkat kemenangan, misalnya EMA, KDJ dll.
Tambahkan mekanisme stop loss seperti ATR trailing stop loss.
Uji dampak dari sumber data yang berbeda pada strategi, misalnya penutupan yang disesuaikan, data indeks dll.
Sesuaikan secara dinamis parameter atau bobot sinyal berdasarkan kondisi pasar.
Secara singkat, ini adalah sistem breakout yang menggunakan saluran regresi linier sebagai indikator sinyal. Logika strategi jelas dan mudah dipahami, dengan beberapa parameter, membuat perdagangan langsung relatif mudah dilaksanakan. Namun, bagaimana mengoptimalkan parameter secara dinamis berdasarkan perubahan kondisi pasar dan menggabungkan indikator lain untuk penyaringan sinyal adalah kunci keberhasilan strategi ini. Melalui pengujian dan pengoptimalan berkelanjutan, strategi ini dapat menjadi sistem kuantitatif yang menghasilkan 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)