पी-सिग्नल मल्टी-टाइम-फ्रेम ट्रेडिंग रणनीति एक डिजिटल मुद्रा एल्गोरिथ्म ट्रेडिंग रणनीति है, जो सांख्यिकीय सिद्धांतों पर आधारित है, जो बहु-टाइम-फ्रेम विश्लेषण के साथ संयुक्त है। यह रणनीति गोस त्रुटि फ़ंक्शन और पी-सिग्नल सूचक को बिटकॉइन के दिन, सप्ताह और चंद्रमा के लिए मॉडल फिट करती है, जो सूचक गोल्डफ़ॉक्स और डेडफ़ॉक्स के आधार पर अस्थिरता ट्रेडिंग को लागू करती है।
पी-सिग्नल रणनीति का मुख्य सूचक पी-सिग्नल है, जो एक सांख्यिकीय मानक विचलन और एक सरल चलती औसत का संयोजन है, जो कि बाजार के सामान्य वितरण के अनुरूप होने का पता लगाने के लिए गॉस त्रुटि फ़ंक्शन द्वारा -1 से 1 तक मैप किया जाता है।
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指标
यह रणनीति सूर्य रेखा, वृत्त रेखा और चंद्र रेखा समय फ्रेम में पी-सिग्नल संकेतक की गणना करती है, जब संकेतक 0 अक्ष को पार करता है तो अधिक होता है, और 0 अक्ष को पार करते समय समतल होता है।
पी-सिग्नल रणनीति का सबसे बड़ा लाभ यह है कि यह रणनीति की स्थिरता को बढ़ाने के लिए कई समय सीमाओं का उपयोग करता है। दिन की रेखा बाजार में अल्पकालिक उतार-चढ़ाव को पकड़ती है, और साप्ताहिक-मासिक रेखा फ़िल्टर के माध्यम से तोड़फोड़ करती है। साथ ही, पी-सिग्नल सूचक स्वयं में कुछ पूर्वानुमान क्षमता है जो प्रवृत्ति के व्यवहार की उतार-चढ़ाव को बढ़ा सकती है।
एकल समय सीमा की तुलना में, बहु-समय सीमा एक दिन की रेखा के नुकसान का उपयोग कर सकती है और एक उच्च समय सीमा का उपयोग करके व्यापार की आवृत्ति को कम कर सकती है। कुल मिलाकर, इस संयोजन से लाभप्रदता सुनिश्चित करते हुए पूर्ण और सापेक्ष वापसी को अधिकतम किया जा सकता है।
पी-सिग्नल रणनीति के लिए सबसे बड़ा जोखिम यह है कि सूचक स्वयं ही एक ब्लैक बॉक्स है। हमें यह निर्धारित करने में कठिनाई होती है कि सूचक किसी विशेष बाजार के लिए कितना उपयुक्त है, और इसके मापदंडों की इष्टतम सीमा निर्धारित नहीं की जा सकती है। इससे रणनीति का प्रदर्शन खराब हो सकता है।
इसके अलावा, रणनीति में ही कुछ सीमाएं हैं, जैसे कि तीव्र स्थिति को संभालने में असमर्थता, व्यापार संकेत के रूप में सूचक अंतर, आदि। ये समस्याएं वास्तविक समय के लिए एक छिपा हुआ खतरा हो सकती हैं।
इन समस्याओं को हल करने के लिए, हम सूचक मापदंडों को समायोजित कर सकते हैं, रोकथाम के तरीकों को अनुकूलित कर सकते हैं, अधिक सहायक सूचकांकों को पेश कर सकते हैं, आदि।
P-Signal की रणनीति में कुछ सुधार हो सकते हैं:
P-Signal सूचक के पैरामीटर को बदलने के लिएः nIntr_D, nIntr_W और nIntr_M, पैरामीटर का इष्टतम संयोजन खोजने के लिए
स्टॉप को बढ़ाने के तरीकेः स्टॉप को ट्रैक करें, समय स्टॉप, एटीआर स्टॉप आदि, सबसे अच्छा स्टॉप खोजने के लिए
सहायक संकेतक का परिचयः विशेष परिस्थितियों के लिए निर्णय क्षमता बढ़ाने की रणनीति, जैसे कि MACD निर्णय प्रवृत्ति का परिचय
स्थिति प्रबंधन का अनुकूलन करेंः गतिशील स्थिति सेट करें, पूंजी उपयोग दक्षता का अनुकूलन करें
मशीन लर्निंग ऑप्टिमाइज़ेशन पैरामीटरः न्यूरल नेटवर्क, आनुवंशिक एल्गोरिदम आदि का उपयोग करके पैरामीटर को सर्वश्रेष्ठ बनाने के लिए
पी-सिग्नल बहु-समय फ्रेम ट्रेडिंग रणनीति एक बहुत ही संभावित रणनीति विचार है। यह सांख्यिकीय सिद्धांतों और तकनीकी संकेतकों को जोड़ती है, बहु-समय फ्रेम विश्लेषण का उपयोग करके स्थिरता को बढ़ाता है। यदि हम बड़ी मात्रा में प्रतिक्रिया और अनुकूलन के माध्यम से कुछ सीमाओं को हल करने में सक्षम हैं, तो इसे वास्तविक और उपयोगी डिजिटल मुद्रा एल्गोरिथ्म ट्रेडिंग रणनीति में बदलने की पूरी संभावना है।
/*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.