P-Signal Multi Timeframe Trading Strategi

Penulis:ChaoZhang, Tarikh: 2023-11-28 16:32:36
Tag:

img

Ringkasan

Strategi perdagangan pelbagai jangka masa P-Signal adalah strategi perdagangan algoritma mata wang kripto berdasarkan prinsip statistik dan analisis pelbagai jangka masa. Strategi ini menggunakan fungsi ralat Gaussian dan penunjuk P-Signal untuk memodelkan carta harian, mingguan dan bulanan Bitcoin, dan pergi lama pada salib penunjuk di atas 0 dan keluar pada salib di bawah 0, untuk memantau turun naik perdagangan.

Logika Strategi

Indikator teras strategi P-Signal adalah P-Signal itu sendiri, yang menggabungkan penyimpangan piawai statistik dan purata bergerak mudah dan memetakannya ke julat -1 hingga 1 menggunakan fungsi ralat Gaussian, untuk mengesan sama ada pasaran mematuhi pengedaran normal. Formula pengiraan khusus adalah seperti berikut:

fErf(x) = 1.0 - 1.0/(1.0 + 0.5*abs(x)) * exp(-x*x - 1.26551223 + ...) # Gaussian error function 

fPSignal(ser, n) = fErf((stdev(ser, n) > 0 ? sma(ser, n)/stdev(ser, n)/sqrt(2) : 1)) # P-Signal indicator

Strategi ini mengira penunjuk P-Signal pada jangka masa harian, mingguan dan bulanan untuk Bitcoin, pergi lama apabila penunjuk melintasi di atas 0, dan keluar apabila melintasi kembali di bawah 0. Injap nilai penunjuk juga ditetapkan untuk mengawal kemasukan berulang.

Analisis Kelebihan

Kelebihan terbesar strategi P-Signal adalah penggunaan pelbagai jangka masa untuk meningkatkan kestabilan strategi. carta harian menangkap turun naik pasaran jangka pendek, sementara carta mingguan dan bulanan menapis pecah palsu. Pada masa yang sama, penunjuk P-Signal itu sendiri juga mempunyai beberapa keupayaan ramalan untuk memperkuat turun naik pergerakan trend.

Berbanding dengan satu jangka masa, pelbagai jangka masa membolehkan penggunaan hentian harian untuk mengawal penarikan semasa masa yang tidak menentu, sambil mengurangkan kekerapan transaksi menggunakan jangka masa yang lebih tinggi semasa pasaran berkisar. Secara keseluruhan, kombinasi ini membolehkan memaksimumkan keuntungan sambil meminimumkan penarikan mutlak dan relatif.

Analisis Risiko

Risiko terbesar strategi P-Signal adalah bahawa penunjuk itu sendiri adalah kotak hitam untuk peniaga kuant. Kami tidak mempunyai cara untuk menentukan kesesuaian penunjuk ini dengan pasaran tertentu, dan juga tidak dapat menentukan julat parameternya yang optimum. Ini boleh menyebabkan prestasi strategi yang buruk dalam perdagangan langsung.

Di samping itu, strategi itu sendiri mempunyai beberapa batasan. Sebagai contoh, ketidakupayaan untuk mengendalikan pergerakan ganas, isyarat yang tertinggal dari penyambungan penunjuk dan lain-lain. Semua ini boleh menjadi masalah tersembunyi semasa perdagangan langsung.

Untuk menyelesaikan masalah ini, kita boleh menyesuaikan parameter penunjuk, mengoptimumkan stop loss, memperkenalkan lebih banyak penunjuk tambahan dan lain-lain. Tetapi premisnya adalah untuk menguji kestabilan merentasi tempoh backtesting yang cukup besar.

Arahan pengoptimuman

Terdapat beberapa arah untuk mengoptimumkan strategi P-Signal:

  1. Ubah parameter penunjuk P-Signal: nIntr_D, nIntr_W dan nIntr_M, mencari kombinasi parameter optimum

  2. Tambah kaedah stop loss: trailing stop loss, time stop loss, ATR stop loss dan lain-lain, mencari stop loss optimum

  3. Memperkenalkan penunjuk tambahan: meningkatkan penilaian keadaan pasaran tertentu, contohnya menggunakan MACD untuk menentukan trend

  4. Mengoptimumkan saiz kedudukan: menetapkan saiz kedudukan dinamik berdasarkan kecekapan penggunaan akaun

  5. Pengoptimuman pembelajaran mesin: gunakan rangkaian saraf, algoritma genetik untuk mencari parameter yang optimum secara global

Kesimpulan

Strategi perdagangan pelbagai jangka masa P-Signal secara keseluruhan adalah idea strategi yang sangat menjanjikan. Ia menggabungkan prinsip statistik dan penunjuk teknikal, dan menggunakan analisis pelbagai jangka masa untuk meningkatkan kestabilan.


/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 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
// A good strategy should be able to handle backtesting.
// @version=4
// **********************************************************************************************************
strategy("P-Signal Strategy:", precision = 3, pyramiding = 3)
//
// Parameters and const of P-Signal.
//
nPoints_D = input(title = "Number of D Bars", type = input.integer, defval = 9, minval = 4, maxval = 100, group = "Parameters of observation.")
nPoints_W = input(title = "Number of W Bars", type = input.integer, defval = 4, minval = 4, maxval = 100, group = "Parameters of observation.")
nPoints_M = input(title = "Number of M Bars", type = input.integer, defval = 6, minval = 4, maxval = 100, group = "Parameters of observation.")
int nIntr_D = nPoints_D - 1
int nIntr_W = nPoints_W - 1
int nIntr_M = nPoints_M - 1
bool bDValveOpen = true
bool bWValveOpen = true
bool bMValveOpen = true
// 
// 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)
//
// Signals for the strategy.
//
float nPSignal_D = sma(fPSignal(change(ohlc4), nIntr_D), nIntr_D)
float ndPSignal_D = sign(nPSignal_D[0] - nPSignal_D[1])
//
float nPSignal_W = sma(security(syminfo.tickerid, "W",fPSignal(change(ohlc4), nIntr_W)), nIntr_W)
float ndPSignal_W = sign(nPSignal_W[0] - nPSignal_W[1])
//
float nPSignal_M = sma(security(syminfo.tickerid, "M",fPSignal(change(ohlc4), nIntr_M)), nIntr_M)
float ndPSignal_M = sign(nPSignal_M[0] - nPSignal_M[1])
//
// P-Signal 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_D, color = color.blue, style = plot.style_line)
//
// Multi Frame Strategy 
// ... Day
if(nPSignal_D < 0 and ndPSignal_D > 0 and bDValveOpen)
    strategy.entry("long_D", strategy.long, 1) 
    bDValveOpen := false
if(nPSignal_D > 0 and ndPSignal_D < 0)
    strategy.close("long_D")
    bDValveOpen := true
// ... Week
if(nPSignal_W < 0 and ndPSignal_W > 0 and bWValveOpen)
    strategy.entry("long_W", strategy.long, 1) 
    bWValveOpen := false
if(nPSignal_W > 0 and ndPSignal_W < 0)
    strategy.close("long_W")
    bWValveOpen := true
// ... Month
if(nPSignal_M < 0 and ndPSignal_M > 0 and bMValveOpen)
    strategy.entry("long_M", strategy.long, 1) 
    bMValveOpen := false
if(nPSignal_M > 0 and ndPSignal_M < 0)
    strategy.close("long_M")
    bMValveOpen := true
// The end.

Lebih lanjut