P-Signal Multi Timeframe Trading Strategi

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

img

Gambaran umum

Strategi perdagangan multi timeframe P-Signal adalah strategi perdagangan algoritma cryptocurrency berdasarkan prinsip statistik dan analisis multi timeframe. Strategi ini menggunakan fungsi kesalahan Gaussian dan indikator P-Signal untuk memodelkan grafik harian, mingguan dan bulanan Bitcoin, dan pergi panjang pada penyeberangan indikator di atas 0 dan keluar pada penyeberangan di bawah 0, untuk memperdagangkan volatilitas.

Logika Strategi

Indikator inti dari strategi P-Signal adalah P-Signal itu sendiri, yang menggabungkan penyimpangan standar statistik dan rata-rata bergerak sederhana dan memetakan ke kisaran -1 hingga 1 menggunakan fungsi kesalahan Gaussian, untuk mendeteksi apakah pasar sesuai dengan distribusi normal.

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 menghitung indikator P-Signal pada kerangka waktu harian, mingguan dan bulanan untuk Bitcoin, pergi panjang ketika indikator melintasi di atas 0, dan keluar ketika melintasi kembali di bawah 0. Katup nilai indikator juga diatur untuk mengontrol entri berulang.

Analisis Keuntungan

Keuntungan terbesar dari strategi P-Signal adalah penggunaan beberapa kerangka waktu untuk meningkatkan stabilitas strategi. grafik harian menangkap fluktuasi pasar jangka pendek, sementara grafik mingguan dan bulanan menyaring breakout palsu.

Dibandingkan dengan satu timeframe, beberapa timeframe memungkinkan penggunaan stop harian untuk mengontrol penarikan selama periode volatilitas, sementara mengurangi frekuensi transaksi menggunakan timeframe yang lebih tinggi selama pasar berkisar. Secara keseluruhan, kombinasi ini memungkinkan memaksimalkan keuntungan sambil meminimalkan penarikan absolut dan relatif.

Analisis Risiko

Risiko terbesar dari strategi P-Signal adalah bahwa indikator itu sendiri adalah kotak hitam bagi pedagang kuant. Kami tidak memiliki cara untuk menentukan kemampuan adaptasi indikator ini untuk pasar tertentu, juga tidak dapat menentukan rentang optimal parameternya. Ini dapat menyebabkan kinerja strategi yang buruk dalam perdagangan langsung.

Selain itu, strategi itu sendiri memiliki beberapa keterbatasan. Misalnya, ketidakmampuan untuk menangani gerakan kekerasan, sinyal tertinggal dari crossover indikator dll. Semua ini dapat menjadi masalah tersembunyi selama perdagangan langsung.

Untuk memecahkan masalah ini, kita dapat menyesuaikan parameter indikator, mengoptimalkan stop loss, memperkenalkan lebih banyak indikator tambahan dll. Tetapi premisnya adalah untuk menguji stabilitas di periode backtesting yang cukup besar.

Arahan Optimasi

Ada beberapa arah untuk mengoptimalkan strategi P-Signal:

  1. Mengubah parameter indikator P-Signal: nIntr_D, nIntr_W dan nIntr_M, menemukan kombinasi parameter optimal

  2. Tambahkan metode stop loss: trailing stop loss, time stop loss, ATR stop loss dll, temukan stop loss optimal

  3. Memperkenalkan indikator tambahan: meningkatkan penilaian kondisi pasar tertentu, misalnya menggunakan MACD untuk menentukan tren

  4. Mengoptimalkan ukuran posisi: mengatur ukuran posisi dinamis berdasarkan efisiensi penggunaan akun

  5. Optimasi pembelajaran mesin: gunakan jaringan saraf, algoritma genetik untuk menemukan parameter yang optimal secara global

Kesimpulan

Strategi perdagangan multi timeframe P-Signal secara keseluruhan adalah ide strategi yang sangat menjanjikan. Ini menggabungkan prinsip-prinsip statistik dan indikator teknis, dan menggunakan analisis multi timeframe untuk meningkatkan stabilitas. Jika kita dapat memecahkan beberapa keterbatasan melalui backtesting dan optimasi yang ekstensif, sangat mungkin untuk mengubahnya menjadi strategi perdagangan algoritmik cryptocurrency yang nyata dan dapat digunakan.


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