Analisis Strategi Perdagangan Kuantitatif Berdasarkan Fungsi Kesalahan Gaussian

Penulis:ChaoZhang, Tanggal: 2024-01-19 14:28:03
Tag:

img

Gambaran umum

Strategi ini adalah strategi perdagangan kuantitatif berdasarkan indikator P-Signal yang dihitung oleh fungsi kesalahan Gaussian untuk mengukur perubahan harga.

Logika Strategi

Indikator inti dari strategi ini adalah P-Signal. Rumus perhitungan P-Signal adalah:

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

Di sini ser mewakili seri harga, int mewakili parameter nPoints, yang merupakan jumlah batang untuk melihat kembali.

  1. nStDev adalah standar deviasi harga;
  2. nSma adalah rata-rata pergerakan harga sederhana;
  3. fErf adalah fungsi kesalahan Gaussian.

Artinya, jika fluktuasi harga lebih besar dari rata-rata, P-Signal mendekati 1; jika fluktuasi harga lebih kecil dari rata-rata, P-Signal mendekati -1.

Strategi ini menggunakan nilai P-Signal dan tanda perubahannya untuk menentukan entri dan keluar:

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

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

Ini pergi panjang ketika P-Signal kurang dari 0 dan berubah menjadi positif. menutup posisi ketika P-Signal lebih besar dari 0 dan berubah menjadi negatif.

Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Menggunakan fungsi kesalahan Gaussian untuk menyesuaikan distribusi harga Fungsi kesalahan Gaussian dapat menyesuaikan distribusi normal dengan sangat baik, yang sesuai dengan sebagian besar distribusi deret waktu keuangan.
  2. Mengatur parameter secara otomatis dengan standar deviasi harga. Ini membuat strategi lebih kuat di berbagai kondisi pasar.
  3. P-Signal menggabungkan keuntungan dari trend following dan mean reversal. Hal ini mempertimbangkan tren fluktuasi harga dan titik pembalikan, yang membantu menangkap peluang dalam perdagangan tren dan pembalikan.

Risiko

Ada juga beberapa risiko dengan strategi ini:

  1. Risiko perdagangan frekuensi tinggi. Sebagai strategi perdagangan frekuensi tinggi yang khas, ini dapat menghasilkan lebih banyak perdagangan, sehingga menanggung biaya transaksi yang lebih tinggi dan risiko slippage.
  2. P-Signal dapat menghasilkan banyak sinyal palsu ketika harga tidak memiliki tren atau pola yang jelas.
  3. Hubungan kompleks antara beberapa parameter membuat optimasi parameter menantang.

Untuk mengurangi risiko tersebut, beberapa langkah dapat dipertimbangkan: menambahkan filter untuk mengurangi frekuensi perdagangan; mengoptimalkan kombinasi parameter dan pengaturan biaya transaksi; pengujian langsung dan memilih produk yang cocok.

Peningkatan

Ada ruang untuk peningkatan lebih lanjut:

  1. Menambahkan filter untuk menghindari sinyal palsu, misalnya AND/OR dengan indikator lain untuk menyaring kebisingan.
  2. Mengoptimalkan kombinasi parameter. Mengatur ukuran nPoints di berbagai produk dan kerangka waktu untuk meningkatkan stabilitas.
  3. Mempertimbangkan parameter dinamis, penyesuaian nPoints secara adaptif sesuai dengan volatilitas pasar dapat meningkatkan ketahanan.
  4. Mengintegrasikan metode pembelajaran mesin. Menggunakan algoritma AI pada parameter, filter dan optimasi waktu lintas produk.

Kesimpulan

Kesimpulannya, gagasan inti dari strategi ini adalah inovasi, distribusi harga yang sesuai dengan fungsi Gaussian dan menyesuaikan parameter secara otomatis.


/*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.

Lebih banyak