
P-Signal multi-frame trading strategy adalah strategi trading algoritma mata uang digital yang didasarkan pada prinsip-prinsip statistik yang digabungkan dengan analisis multi-frame. Strategi ini menggunakan Gaussian Error Function dan P-Signal indicator untuk model fit terhadap garis matahari, garis lingkaran dan garis bulan Bitcoin, untuk melakukan perdagangan volatilitas berdasarkan indikator Gold Fork over and Dead Fork under.
Indikator utama dari strategi P-Signal adalah P-Signal, yang merupakan kombinasi dari statistical standard deviation dan simple moving average, yang dipetakan ke dalam kisaran -1 sampai 1 melalui Gaussian error function, untuk mendeteksi apakah pasar sesuai dengan distribusi normal. Rumus perhitungan spesifiknya adalah sebagai berikut:
fErf(x) = 1.0 - 1.0/(1.0 + 0.5*abs(x)) * exp(-x*x - 1.26551223 + ...) # 高斯误差函数
fPSignal(ser, n) = fErf((stdev(ser, n) > 0 ? sma(ser, n)/stdev(ser, n)/sqrt(2) : 1)) # P-Signal指标
Strategi ini menghitung indikator P-Signal pada frame waktu Sunline, Garis Garis dan Garis Bulan secara terpisah, melakukan perdagangan di atas saat indikator melewati sumbu 0 dan perdagangan di bawah saat indikator melewati sumbu 0. Pada saat yang sama, pengaturan indikator Value Valve Control Repeat Open Position.
Keuntungan terbesar dari strategi P-Signal adalah menggunakan beberapa kerangka waktu untuk meningkatkan stabilitas strategi. Garis matahari menangkap pergerakan jangka pendek pasar, dan garis mingguan memfilter terobosan palsu.
Dibandingkan dengan time frame tunggal, multi-time frame dapat memanfaatkan day-line stop loss pada saat penarikan dan mengurangi frekuensi perdagangan dengan menggunakan time frame tinggi dalam situasi yang bergolak. Secara keseluruhan, kombinasi ini dapat memaksimalkan penarikan mutlak dan relatif sambil memastikan keuntungan.
Risiko terbesar dari strategi P-Signal adalah bahwa indikator itu sendiri adalah kotak hitam bagi pedagang kuantitatif. Kita sulit menentukan seberapa cocok indikator ini untuk pasar tertentu, dan tidak dapat menentukan kisaran optimal parameternya. Ini dapat menyebabkan kinerja strategi yang buruk di pasar nyata.
Selain itu, strategi itu sendiri juga memiliki beberapa keterbatasan. Misalnya, tidak dapat menangani situasi yang dramatis, nilai indikator yang berbeda sebagai sinyal perdagangan mungkin terlambat, dll.
Untuk mengatasi masalah-masalah ini, kita dapat menyesuaikan parameter indikator, mengoptimalkan metode stop loss, memperkenalkan lebih banyak indikator tambahan, dan lain-lain.
Strategi P-Signal memiliki beberapa hal yang dapat dioptimalkan:
Ganti parameter dari indikator P-Signal: nIntr_D, nIntr_W dan nIntr_M, untuk menemukan kombinasi parameter yang optimal
Meningkatkan Stop Loss: Mengikuti Stop Loss, Time Stop Loss, ATR Stop Loss, dan lain-lain, untuk menemukan cara terbaik untuk stop loss
Memperkenalkan indikator tambahan: strategi untuk meningkatkan kemampuan penilaian untuk situasi tertentu, seperti memperkenalkan tren penilaian MACD
Optimalkan manajemen posisi: mengatur posisi dinamis, mengoptimalkan efisiensi penggunaan dana
Parameter Optimasi Pembelajaran Mesin: Menggunakan Jaringan Neural, Algoritma Genetik, dan lain-lain untuk menemukan optimal global
P-Signal multi-frame trading strategi secara keseluruhan adalah ide strategi yang sangat potensial. Ini menggabungkan prinsip-prinsip statistik dengan indikator teknis, menggunakan analisis multi-frame untuk meningkatkan stabilitas. Jika kita dapat mengatasi beberapa keterbatasan dengan banyak pengembalian dan pengoptimalan, sangat mungkin untuk mengubahnya menjadi strategi perdagangan algoritma mata uang digital yang benar-benar 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.