Strategi perdagangan kuantitatif berdasarkan fungsi ralat Gaussian


Tarikh penciptaan: 2024-01-19 14:28:03 Akhirnya diubah suai: 2024-01-19 14:28:03
Salin: 1 Bilangan klik: 647
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif berdasarkan fungsi ralat Gaussian

Gambaran keseluruhan

Strategi ini adalah strategi perdagangan kuantitatif P-Signal berdasarkan fungsi kesilapan Gaussian untuk mengira perubahan harga. Ia menggunakan P-Signal untuk menilai trend harga dan titik perubahan untuk menentukan masa masuk dan keluar.

Prinsip Strategi

Indikator utama strategi ini adalah P-Signal. Formula pengiraan P-Signal adalah seperti berikut:

fPSignal(ser, int) => 
    nStDev = stdev(ser, int)
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)

Di sini ser mewakili urutan harga, int mewakili parameter nPoints, iaitu melihat berapa banyak K-root. Formula ini terdiri daripada tiga bahagian:

  1. nStDev ialah perbezaan piawaian harga;
  2. nSma adalah purata bergerak mudah untuk harga;
  3. fErf adalah fungsi kesilapan Gaussian ≠

Keseluruhan formula ini bermaksud bahawa harga bergerak rata-rata dibahagikan dengan perbezaan piawai harga, kemudian dibahagikan dengan sqrt ((2) untuk piawaian, dan kemudian dipetakan ke dalam interval ((-1, 1) melalui fungsi kesilapan Gaussian. Iaitu, jika harga bergerak lebih besar daripada rata-rata, P-Signal mendekati 1; jika harga bergerak lebih kecil daripada rata-rata, P-Signal mendekati -1.

Strategi menggunakan nilai P-Signal dan simbol perubahannya untuk menentukan masuk dan keluar:

strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)  

strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)

Apabila P-Signal lebih kecil daripada 0 dan berubah menjadi positif, anda boleh melakukan perdagangan lebih banyak; apabila P-Signal lebih besar daripada 0 dan berubah menjadi negatif, anda boleh melakukan perdagangan yang sama.

Kelebihan Strategik

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan Gaussian Kesalahan Fungsi Untuk Menyesuaikan Sebaran Harga. Gaussian Kesalahan Fungsi Untuk Menyesuaikan Sebaran Normal Dengan Sangat Baik, Yang Bersesuaian Dengan Sebaran Sebaran Sebahagian Besar Dari Sejenis Waktu Kewangan.
  2. Menggunakan perbezaan piawaian harga untuk menyesuaikan parameter secara automatik. Ini menjadikan parameter strategi lebih luas dan lebih kasar terhadap perubahan pasaran.
  3. Indeks P-Signal menggabungkan kelebihan trend dan perdagangan berbalik. Ia mengambil kira trend turun naik harga dan memberi perhatian kepada titik perubahan harga, yang membantu menangkap perdagangan trend dan peluang perdagangan berbalik.

Analisis risiko

Strategi ini juga mempunyai beberapa risiko, seperti:

  1. Risiko perdagangan frekuensi tinggi. Strategi ini adalah strategi perdagangan frekuensi tinggi yang tipikal, menghasilkan lebih banyak perdagangan, menanggung kos perdagangan yang lebih tinggi dan risiko slippage.
  2. P-Signal boleh menghasilkan banyak isyarat palsu di pasaran di mana harga tidak mempunyai trend dan peraturan yang jelas.
  3. Pengoptimuman parameter sukar. Hubungan antara pelbagai parameter dalam formula adalah rumit, menjadikan pengoptimuman parameter lebih sukar.

Untuk mengurangkan risiko ini, anda boleh mempertimbangkan untuk menambah syarat penapisan, mengurangkan frekuensi perdagangan; mengoptimumkan set parameter dan kos perdagangan; pengisar cakera, memilih varieti yang sesuai.

Arah pengoptimuman

Strategi ini masih mempunyai ruang untuk pengoptimuman yang lebih lanjut, dengan tujuan utama:

  1. Tambah syarat penapisan untuk mengelakkan isyarat palsu. Sebagai contoh, gabungan dengan petunjuk lain, lakukan syarat AND atau OR, saring sebahagian daripada Noise.
  2. Mengoptimumkan set parameter. Menyesuaikan saiz nPoints dalam pelbagai jenis dan kitaran, meningkatkan kestabilan strategi.
  3. Pertimbangkan parameter dinamik. Biarkan parameter nPoints menyesuaikan diri dengan kadar turun naik pasaran, yang mungkin meningkatkan kebolehan strategi.
  4. Menggabungkan kaedah pembelajaran mesin. Menggunakan algoritma AI untuk mengoptimumkan parameter, syarat penapisan dan pemilihan pelbagai jenis.

ringkaskan

Secara keseluruhannya, konsep teras strategi ini adalah baru, menggunakan fungsi Gaussian untuk menyesuaikan penyebaran harga dan menyesuaikan parameter secara automatik. Tetapi sebagai strategi perdagangan frekuensi tinggi, lebih banyak ujian dan pengoptimuman diperlukan, terutamanya dalam mengawal risiko dan menyesuaikan parameter, untuk memastikan keuntungan yang stabil di pasaran.

Kod sumber strategi
/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// **********************************************************************************************************
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// P-Signal Strategy © Kharevsky
// @version=4
// **********************************************************************************************************
strategy("P-Signal Strategy", precision = 3)
// Parameters and const of P-Signal.
nPoints = input(title = "Number of Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0/(1.0 + 0.5*abs(x))
    nAns = 1.0 - nT*exp(-x*x - 1.26551223 + 
     nT*( 1.00002368 + nT*( 0.37409196 + nT*( 0.09678418 + 
     nT*(-0.18628806 + nT*( 0.27886807 + nT*(-1.13520398 + 
     nT*( 1.48851587 + nT*(-0.82215223 + nT*( 0.17087277 ))))))))))
    x >= 0 ? nAns : -nAns
fPSignal(ser, int) => 
    nStDev = stdev(ser, int)
    nSma = sma(ser, int)
    fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)
// Strat.
float nPSignal = sma(fPSignal(change(ohlc4), nIntr), nIntr)
float ndPSignal = sign(nPSignal[0] - nPSignal[1])
strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)
strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)
// Plotting. 
hline(+1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
hline(-1.0, color = color.new(color.orange,70), linestyle = hline.style_dotted)
plot(nPSignal, color = color.blue, style = plot.style_line)
plot(strategy.position_size, color = color.white, style = plot.style_cross)
// Alerts.
if(strategy.position_size[0] > strategy.position_size[1])
    alert("P-Signal strategy opened the long position: " + syminfo.tickerid + " " + timeframe.period, alert.freq_once_per_bar)
if(strategy.position_size[0] < strategy.position_size[1])
    alert("P-Signal strategy closed the long position: " + syminfo.tickerid + " " + timeframe.period, alert.freq_once_per_bar)
// The end.