Strategi Sinyal Perdagangan Quadratic Fit


Tanggal Pembuatan: 2023-09-23 15:40:57 Akhirnya memodifikasi: 2023-09-23 15:40:57
menyalin: 2 Jumlah klik: 627
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggunakan kurva dua kali untuk mencocokkan K-line high dan low untuk membentuk sinyal perdagangan. Ketika harga sebenarnya menembus kurva pencocokan, menghasilkan sinyal beli dan jual. Strategi ini mencoba menggunakan model matematika untuk mengidentifikasi dukungan dan resistensi utama untuk melakukan perdagangan yang menembus.

Prinsip Strategi

Komponen dan aturan utama dari strategi ini adalah sebagai berikut:

  1. Menyesuaikan titik tinggi dan rendah: Menggunakan dua kali lipat terkecil kurva untuk menyesuaikan titik tinggi dan rendah garis K.

  2. Sinyal beli: Sinyal beli dihasilkan ketika harga K-line closing menembus kurva uptrend.

  3. Sinyal jual: Sinyal jual dihasilkan ketika harga K-line close breaks the downtrend curve

  4. Verifikasi siklus N: memerlukan penembusan yang berlangsung selama N siklus untuk berlaku, untuk menghindari penembusan palsu.

  5. Sinyal posisi kosong: tidak ada sinyal posisi kosong yang jelas, dengan mengoptimalkan pengukuran kembali untuk menentukan waktu memegang posisi.

Strategi ini mencoba untuk mengidentifikasi harga kunci melalui model matematis dan masuk ke pasar saat terjadi penembusan, yang merupakan sistem penembusan yang khas.

Analisis Keunggulan

Keuntungan utama dari strategi ini dibandingkan dengan sistem penembusan lainnya adalah:

  1. Dengan menggunakan model matematika, penilaian lebih objektif daripada subjektif.

  2. Ini adalah metode baru yang menggabungkan teknologi perdagangan dengan model statistik.

  3. Masukkan verifikasi multi-siklus untuk menyaring penembusan palsu.

  4. Optimalisasi pengembalian untuk mencari waktu terbaik untuk memegang posisi.

  5. Ini tidak terlalu sulit untuk diterapkan dan dapat disesuaikan secara fleksibel.

  6. Model ini diperbarui secara otomatis tanpa perlu perawatan manual.

  7. Parameter kebugaran dapat diuji untuk berbagai jenis dan siklus.

  8. Pembelajaran mesin dapat diperkenalkan untuk optimasi dan verifikasi lebih lanjut.

  9. Secara keseluruhan, tingkat kebaruan yang tinggi dan layak untuk dijelajahi.

Analisis risiko

Namun, strategi ini juga memiliki risiko:

  1. Efek pencocokan tergantung pada pilihan parameter dan mungkin terlalu dioptimalkan.

  2. Ada keterlambatan pada kurva kesesuaian yang tidak dapat sepenuhnya menghindari kerugian.

  3. Tidak mempertimbangkan volume transaksi, ada risiko untuk melakukan swap.

  4. Arbitrase statistik sulit untuk mendapatkan keuntungan ekstra yang stabil dalam jangka panjang.

  5. Periode pengembalian pendek, perlu memverifikasi model soliditas.

  6. Adaptasi multi-varietas harus diuji.

  7. Posisi tetap tidak dapat disesuaikan secara dinamis.

  8. Rasio pengembalian pendapatan harus dinilai secara ketat.

Arah optimasi

Berdasarkan analisis di atas, strategi ini dapat ditingkatkan dalam beberapa hal:

  1. Tes kekuatan parameter dalam berbagai lingkungan pasar.

  2. Menambahkan indikator verifikasi volume transaksi.

  3. Optimalkan Logika Keluar dan Masuk, Tingkatkan Kualitas Sinyal.

  4. Membangun model manajemen posisi dinamis.

  5. Memperkenalkan strategi stop loss untuk membatasi kerugian.

  6. Optimalkan strategi pengelolaan dana.

  7. Verifikasi jendela yang bergulir.

  8. Evaluasi kemampuan stabilitas hasil dari beberapa varietas.

  9. Model ini dioptimalkan dengan menggunakan pembelajaran mesin.

Meringkaskan

Secara keseluruhan, strategi ini memiliki beberapa nilai inovasi dan eksperimen. Namun, stabilitas keuntungan jangka panjang dari Statistical Arbitrage masih menghadapi ujian. Perlu dipertimbangkan secara menyeluruh dalam pengujian kembali kehandalan strategi, risiko dan keuntungan, untuk mencegah overadaptasi, sehingga strategi tetap dapat beradaptasi di pasar yang berubah-ubah.

Kode Sumber Strategi
/*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)