Strategi ini menyesuaikan kurva kuadrat ke titik tinggi / rendah bar untuk menjana isyarat perdagangan apabila harga memecahkan garis yang dipasang.
Komponen dan peraturan utama adalah:
Sesuaikan lengkung pada titik tinggi / rendah menggunakan regresi kuadrat.
Beli isyarat apabila hampir pecah di atas band atas.
Jual isyarat apabila dekat pecah di bawah band bawah.
N tempoh pengesahan untuk mengelakkan pecah palsu.
Tiada peraturan keluar tetap, optimum keluar melalui backtesting.
Strategi ini cuba untuk mengenal pasti harga utama secara matematik dan berdagang breakout, sistem breakout biasa.
Berbanding dengan sistem breakout lain, kelebihan utama adalah:
Kecocokan matematik lebih objektif daripada penilaian subjektif.
Pendekatan baru yang menggabungkan analisis teknikal dan model statistik.
Pengesahan berbilang tempoh mengelakkan pemutusan palsu.
Ujian balik boleh mengoptimumkan keluar dan tempoh menunggu.
Mudah dilaksanakan dengan penyesuaian fleksibel.
Model dikemas kini secara automatik tanpa campur tangan manual.
Boleh menguji ketahanan parameter merentasi produk dan jangka masa.
Potensi untuk mengoptimumkan lebih lanjut dengan pembelajaran mesin.
Pendekatan baru secara keseluruhan dengan nilai eksplorasi.
Walau bagaimanapun, risiko adalah:
Prestasi pemasangan bergantung pada penyesuaian parameter, risiko pemasangan berlebihan.
Talian yang dipasang lambat, tidak dapat mengelakkan kerugian sepenuhnya.
Tiada pengesahan jumlah, risiko terperangkap.
Arbitraj statistik adalah mencabar untuk alfa berterusan.
Tempoh backtest terhad, perlu mengesahkan ketahanan.
Kebolehsesuaian pelbagai pasaran memerlukan pengesahan.
Saiz tetap tidak mempunyai penyesuaian dinamik.
Perlu penilaian ketat nisbah ganjaran / risiko.
Berdasarkan analisis, penambahbaikan mungkin melibatkan:
Uji ketahanan parameter di seluruh rejimen pasaran.
Tambah penunjuk pengesahan jumlah.
Mengoptimumkan logik masuk / keluar untuk isyarat yang lebih berkualiti.
Membina model saiz kedudukan dinamik.
Masukkan hentian untuk mengehadkan kerugian.
Mengoptimumkan strategi pengurusan risiko.
Pembuktian backtest tingkap bergulir.
Menilai kestabilan pelbagai pasaran.
Memanfaatkan pembelajaran mesin untuk pengoptimuman model.
Kesimpulannya, strategi ini mempunyai beberapa nilai inovatif dan merit eksperimen. Tetapi daya maju jangka panjang arbitrase statistik masih belum terbukti. Ujian dalam sampel yang komprehensif mengenai ketahanan, risiko / ganjaran adalah kunci untuk mengelakkan overfit dan mengekalkan daya adaptasi.
/*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)