
Strategi saluran regresi linear adaptif adalah strategi perdagangan kuantitatif berdasarkan analisis regresi linear. Strategi ini membentuk saluran naik turun dengan mengira persamaan regresi linear harga sekuriti dalam jangka masa tertentu, dan menggunakan saluran naik turun sebagai isyarat perdagangan, untuk perdagangan berselang-seling atau trend pemantauan.
Inti strategi saluran regresi linear yang beradaptasi adalah untuk mengira persamaan regresi linear harga penutupan untuk sejumlah K-root K-garis, membentuk garisan tengah yang mewakili digit harga, garisan atas yang mewakili had harga dan garisan bawah yang mewakili had harga. Proses pengiraan khusus adalah seperti berikut:
Kumpul parameter input panjang yang ditentukan oleh K akar K baris variabel bebas x dan variabel bergantung y. Di sini x adalah bilangan bulat 1 hingga panjang, y adalah harga penutupan K baris yang sesuai.
Hitung faktor pengembalian:
Hitung nilai regresi linear bagi setiap baris K dengan y’, STDDEV
Garis tengah adalah persamaan kemerosotan y’ = mx + b, dan setiap laluan naik dan turun di atas dan di bawah garis tengah adalah satu selang kali ganda standard.
Dengan ketibaan K baru, perhitungan di atas akan dikemas kini, membentuk saluran penyesuaian atas dan bawah. Mengikut saluran, lebih banyak ruang kosong dilakukan di bawah persimpangan atas dan bawah, berhenti di sekitar garis tengah.
Strategi saluran regresi linear adaptif mempunyai kelebihan berikut berbanding strategi linear rata-rata tradisional:
Model analisis regresi yang lebih saintifik dan logik mempunyai kepentingan statistik yang lebih tinggi daripada garis purata
Fleksibiliti yang lebih baik, ruang laluan akan disesuaikan secara automatik dengan perubahan harga
Hasil pengesanan yang lebih baik, jelas lebih baik daripada strategi garis rata pada beberapa jenis
Hasil pengujian dalam talian adalah baik, prestasi yang memuaskan dalam talian
Strategi ini mempunyai risiko utama:
Harga yang terlalu tinggi menyebabkan kerugian yang besar. Penyelesaian adalah dengan menetapkan parameter stop loss dan pengoptimuman.
Kesalahan laluan membawa kepada kesan pengesanan yang tidak baik. Penyelesaian adalah dengan menyesuaikan parameter, digabungkan dengan petunjuk teknikal lain.
Hasil pengesanan kelihatan baik, tetapi kesan cakera keras kurang baik. Penyelesaian adalah dengan menyesuaikan parameter dan mengesahkan sepenuhnya.
Strategi ini boleh terus dioptimumkan dari segi berikut:
Uji lebih banyak kombinasi parameter untuk mencari parameter yang optimum
Kesalahan isyarat semasa pergerakan yang teruk digabungkan dengan petunjuk teknikal lain
Meningkatkan strategi penangguhan kerugian, mengawal risiko kerugian, dan melindungi dana
Menambah modul pengurusan kedudukan untuk menyesuaikan saiz kedudukan mengikut keadaan pasaran
Strategi saluran regresi linear yang beradaptasi sendiri adalah strategi kuantitatif yang baik secara keseluruhan. Ia mempunyai asas teori yang kukuh, prestasi praktikal yang baik, layak untuk penyelidikan dan pengoptimuman lanjut, dan boleh menjadi komponen yang berkesan dalam sistem perdagangan kuantitatif. Tetapi juga perlu menyedari batasan, pencegahan risiko, dan amalan berhati-hati.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Stealthy 7 Linear Regression Channel Strategy", overlay=true)
source = open
length = input(100, minval=1)
mult1 = input(1, minval=0.001, maxval=50)
mult2 = input(1, minval=0.001, maxval=50)
DayTrader = input(title="Range Mode", type=bool, defval=false)
//Making the first least squares line
sum_x = length * (length + 1) / 2
sum_y = 0
sum_xy = 0
xyproductsum = 0
sum_xx = 0
for i = 1 to length
sum_y := sum_y + close[i]
sum_xy := i * close[i] + sum_xy
sum_xx := i * i + sum_xx
m = (length*sum_xy - (sum_x * sum_y)) / (length * sum_xx - (sum_x * sum_x))
b = sum_y / length - (m * sum_x / length)
//Finding the first standard deviation from the line
difference = 0
for i = 1 to length
y = i * m + b
difference := pow(abs(close[i] - y),2) + difference
STDDEV = sqrt(difference / length)
//Creating trading zones
dev = mult1 * STDDEV
dev2 = mult2 * STDDEV
upper = b + dev
lower = b - dev2
middle = b
if DayTrader == false
if crossover(source, upper)
strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong")
else
strategy.cancel(id="RGLONG")
if crossunder(source, lower)
strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort")
else
strategy.cancel(id="RGSHORT")
if crossover(source, middle) and strategy.position_size < 0
strategy.close_all()
if crossunder(source,middle) and strategy.position_size > 0
strategy.close_all()
if DayTrader == true
if crossover(source, lower)
strategy.entry("RGLONG", strategy.long, oca_name="RegChannel", comment="RegLong")
else
strategy.cancel(id="RGLONG")
if crossunder(source, upper)
strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel", comment="RegShort")
else
strategy.cancel(id="RGSHORT")
plot(upper, title="UpperBand", color=purple, linewidth=1, style=line)
plot(lower, title="LowerBand", color=purple, linewidth=1, style=line)
plot(middle, title="MiddleBand", color=black, linewidth=1, style=line)