Strategi perdagangan kuantitatif berdasarkan fungsi kesalahan Gaussian


Tanggal Pembuatan: 2024-01-19 14:28:03 Akhirnya memodifikasi: 2024-01-19 14:28:03
menyalin: 1 Jumlah klik: 647
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif berdasarkan fungsi kesalahan Gaussian

Ringkasan

Strategi ini adalah strategi perdagangan kuantitatif berdasarkan fungsi Gaussian error untuk menghitung perubahan harga dari indikator P-Signal. Ini menggunakan indikator P-Signal untuk menilai tren harga dan titik balik, untuk menentukan kapan masuk dan keluar.

Prinsip Strategi

Indikator inti dari strategi ini adalah P-Signal. Rumus perhitungan untuk P-Signal adalah sebagai 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, yaitu melihat berapa banyak akar K. Rumus ini terdiri dari tiga bagian:

  1. nStDev adalah selisih standar harga;
  2. nSma adalah rata-rata bergerak sederhana dari harga;
  3. fErf adalah Gaussian error function ≠

Seluruh rumus ini berarti bahwa harga dibagi rata-rata bergerak dengan harga standar deviasi, kemudian dibagi dengan sqrt ((2) untuk standar, dan kemudian dipetakan ke dalam interval ((-1, 1) melalui fungsi kesalahan Gaussian. Artinya, jika harga berfluktuasi lebih besar dari rata-rata, P-Signal mendekati 1; jika harga berfluktuasi lebih kecil dari 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)

Jika P-Signal lebih kecil dari 0 dan berubah menjadi positif, maka Anda harus melakukan perdagangan lebih banyak. Jika P-Signal lebih besar dari 0 dan berubah menjadi negatif, maka Anda harus melakukan perdagangan lebih sedikit.

Keunggulan Strategis

Strategi ini memiliki keuntungan sebagai berikut:

  1. Fungsi Gaussian Fungsi Kesalahan Fungsi Gaussian Fungsi Kesalahan Fungsi Gaussian Fungsi Kesalahan Fungsi Gaussian Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan Fungsi Kesalahan
  2. Menggunakan standar deviasi harga untuk menyesuaikan parameter secara otomatis. Hal ini membuat parameter strategi lebih luas dan lebih sensitif terhadap perubahan pasar.
  3. Indikator P-Signal menggabungkan keunggulan trend dan reversal trading. Ini mempertimbangkan tren fluktuasi harga dan fokus pada titik reversal harga, yang membantu menangkap perdagangan tren dan peluang perdagangan reversal.

Analisis risiko

Strategi ini juga memiliki beberapa risiko, terutama di:

  1. Strategi ini adalah strategi perdagangan frekuensi tinggi yang khas, menghasilkan lebih banyak transaksi, menanggung biaya transaksi yang lebih tinggi dan risiko slippage.
  2. Indikator P-Signal menghasilkan banyak sinyal palsu di pasar tanpa tren dan aturan harga yang jelas.
  3. Optimasi parameter sulit. Hubungan antara beberapa parameter dalam rumus rumit, sehingga optimasi parameter lebih sulit.

Untuk mengurangi risiko ini, pertimbangkan untuk meningkatkan kondisi penyaringan, mengurangi frekuensi transaksi; mengoptimalkan kombinasi parameter dan pengaturan biaya transaksi; penggilingan cakram, memilih varietas yang sesuai.

Arah optimasi

Strategi ini memiliki ruang untuk optimalisasi lebih lanjut, terutama dalam hal:

  1. Tambahkan kondisi penyaringan untuk menghindari sinyal palsu. Misalnya, dalam kombinasi dengan indikator lain, lakukan kondisi AND atau OR untuk menyaring sebagian dari Noise.
  2. Mengoptimalkan kombinasi parameter. Menyesuaikan ukuran nPoints pada varietas dan siklus yang berbeda, meningkatkan stabilitas strategi.
  3. Pertimbangkan parameter dinamis. Biarkan parameter nPoints beradaptasi sesuai dengan tingkat fluktuasi pasar, yang dapat meningkatkan kecurangan strategi.
  4. Menggabungkan metode pembelajaran mesin. Menggunakan algoritma AI untuk mengoptimalkan parameter, kondisi penyaringan, dan pemilihan varietas.

Meringkaskan

Secara keseluruhan, strategi ini adalah konsep baru, menggunakan fungsi Gaussian untuk menyesuaikan distribusi harga dan menyesuaikan parameter secara otomatis. Namun, sebagai strategi perdagangan frekuensi tinggi, lebih banyak pengujian dan pengoptimalan diperlukan, terutama dalam hal pengendalian risiko dan penyesuaian parameter, untuk memastikan profitabilitas yang stabil di pasar.

Kode 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.