Strategi ini menyesuaikan kurva kuadrat dengan titik tinggi / rendah bar untuk menghasilkan sinyal perdagangan ketika harga menembus garis yang sesuai.
Komponen dan aturan utama adalah:
Fitting kurva pada titik tinggi / rendah menggunakan regresi kuadrat.
Beli sinyal ketika dekat putus di atas band atas.
Jual sinyal ketika dekat putus di bawah band bawah.
N periode verifikasi untuk menghindari pemutusan palsu.
Tidak ada aturan keluar tetap, mengoptimalkan keluar melalui backtesting.
Strategi ini mencoba untuk mengidentifikasi harga kunci secara matematis dan perdagangan breakout, sistem breakout khas.
Dibandingkan dengan sistem breakout lainnya, keuntungan utamanya adalah:
Kecocokan matematika lebih obyektif daripada penilaian subjektif.
Pendekatan baru yang menggabungkan analisis teknis dan model statistik.
Verifikasi multi-periode menghindari pemutusan palsu.
Backtesting dapat mengoptimalkan exit dan periode tunggu.
Mudah diterapkan dengan penyesuaian yang fleksibel.
Model diperbarui secara otomatis tanpa intervensi manual.
Dapat menguji ketahanan parameter di berbagai produk dan kerangka waktu.
Potensi untuk mengoptimalkan lebih lanjut dengan pembelajaran mesin.
Pendekatan baru secara keseluruhan dengan nilai eksploratif.
Namun, risikonya adalah:
Kinerja pemasangan tergantung pada pengaturan parameter, risiko overfit.
Jalur yang dipasang lambat, tidak bisa sepenuhnya menghindari kerugian.
Tidak ada konfirmasi volume, risiko terperangkap.
Arbitrage statistik menantang untuk alfa persisten.
Periode backtest terbatas, perlu untuk memverifikasi ketahanan.
Kemampuan beradaptasi dengan berbagai pasar membutuhkan validasi.
Ukuran tetap tidak memiliki penyesuaian dinamis.
Butuh evaluasi ketat dari rasio reward/risiko.
Berdasarkan analisis, peningkatan dapat mencakup:
Uji ketahanan parameter di seluruh rezim pasar.
Tambahkan indikator konfirmasi volume.
Mengoptimalkan masuk/keluar logika untuk sinyal berkualitas tinggi.
Membangun model ukuran posisi dinamis.
Masukkan stop untuk membatasi kerugian.
Mengoptimalkan strategi manajemen risiko.
Validasi backtest jendela bergulir.
Mengevaluasi stabilitas multi-pasar.
Manfaatkan pembelajaran mesin untuk optimasi model.
Dalam kesimpulan, strategi ini memiliki beberapa nilai inovatif dan merit eksperimen. Tetapi kelangsungan hidup jangka panjang dari arbitrase statistik tetap belum terbukti. pengujian dalam sampel yang komprehensif pada ketahanan, risiko / imbalan adalah kunci untuk mencegah overfit dan mempertahankan kemampuan beradaptasi.
/*backtest start: 2023-08-23 00:00:00 end: 2023-09-22 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // strategy(title = " Strategy Quadratic Semaphore ", shorttitle = "SQS", overlay = true, precision = 8, calc_on_order_fills = true, calc_on_every_tick = true, backtest_fill_limits_assumption = 0, default_qty_type = strategy.fixed, default_qty_value = 2, initial_capital = 10000, pyramiding=5, currency = currency.USD, linktoseries = true) // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // backTestSectionFrom = input(title = "═══════════════ From ═══════════════", defval = true, type = input.bool) FromMonth = input(defval = 1, title = "Month", minval = 1) FromDay = input(defval = 1, title = "Day", minval = 1) FromYear = input(defval = 2019, title = "Year", minval = 2014) backTestSectionTo = input(title = "════════════════ To ════════════════", defval = true, type = input.bool) ToMonth = input(defval = 31, title = "Month", minval = 1) ToDay = input(defval = 12, title = "Day", minval = 1) ToYear = input(defval = 9999, title = "Year", minval = 2014) Config = input(title = "══════════════ Config ══════════════", defval = true, type = input.bool) p = input(6) length = input(30) // backTestPeriod() => (time > timestamp(FromYear, FromMonth, FromDay, 00, 00)) and (time < timestamp(ToYear, ToMonth, ToDay, 23, 59)) // // // ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ // x1 = bar_index x2 = sqrt(x1) y = high // S11 = sum(x2,length) - sqrt(sum(x1,length)) / length S12 = sum(x1*x2,length) - (sum(x1,length) * sum(x2,length)) / length S22 = sum(sqrt(x2),length) - sqrt(sum(x2,length)) / length Sy1 = sum (y*x1,length) - (sum(y,length) * sum(x1,length)) / length Sy2 = sum (y*x2,length) - (sum(y,length) * sum(x2,length)) / length // max1 = sma(x1,length) max2 = sma(x2,length) may = sma(y,length) b2 = ((Sy1 * S22) - (Sy2*S12))/(S22*S11 - sqrt(S12)) b3 = ((Sy2 * S11) - (Sy1 * S12))/(S22 * S11 - sqrt(S12)) b1 = may - b2*max1 - b3*max2 qr = b1 + b2*x1 + b3*x2 // yl = low // Sy1l = sum(yl*x1,length) - (sum(yl,length) * sum(x1,length)) / length Sy2l = sum(yl*x2,length) - (sum(yl,length) * sum(x2,length)) / length // mayl = sma(yl,length) b2l = ((Sy1l * S22) - (Sy2l*S12))/(S22*S11 - sqrt(S12)) b3l = ((Sy2l * S11) - (Sy1l * S12))/(S22 * S11 - sqrt(S12)) b1l = mayl - b2l*max1 - b3l*max2 qrl = b1l + b2l*x1 + b3l*x2 // period = round(p/2)+1 hh = qr[period] ll = qrl[period] countH = 0 countL = 0 buy=0 sell=0 // for i = 1 to period-1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 for i = period+1 to p+1 if qr[i]<hh countH:=countH+1 if qrl[i]>ll countL:=countL+1 if countH==p pivotH = high[period] buy := 1 if countL==p pivotL = low[period] sell := 1 // plotshape(buy == 1 , text='💣', style=shape.arrowup, location=location.belowbar, color=#32CD32, textcolor=color.white, offset=0, transp=0,size=size.auto) plotshape(sell == 1 , text='🔨', style=shape.arrowdown, location=location.abovebar, color=#FF0000, textcolor=color.white, offset=0, transp=0,size=size.auto) // if (backTestPeriod()) strategy.entry("long", true, 1, when = buy == 1) strategy.entry("short", false, 1, when = sell == 1)