
यह रणनीति एक गॉस त्रुटि फ़ंक्शन के आधार पर मूल्य परिवर्तन की गणना करने के लिए पी-सिग्नल सूचक की एक मात्रात्मक ट्रेडिंग रणनीति है। यह पी-सिग्नल सूचक का उपयोग मूल्य प्रवृत्ति और टर्नओवर को समझने के लिए करता है ताकि प्रवेश और बाहर निकलने का समय निर्धारित किया जा सके।
इस रणनीति के लिए केंद्रीय संकेतक पी-सिग्नल है। पी-सिग्नल के लिए गणना सूत्र निम्नानुसार हैः
fPSignal(ser, int) =>
nStDev = stdev(ser, int)
nSma = sma(ser, int)
fErf(nStDev > 0 ? nSma/nStDev/sqrt(2) : 1.0)
यहाँ ser मूल्य अनुक्रम को दर्शाता है, int पैरामीटर nPoints को दर्शाता है, यानी कितने K लाइनों को देखें। सूत्र तीन भागों से बना हैः
पूरे सूत्र का अर्थ है कि कीमतों के चल औसत को कीमतों के मानक विचलन से विभाजित करना, फिर इसे sqrt ((2) से विभाजित करना, और फिर इसे गॉस त्रुटि फ़ंक्शन द्वारा ((-1, 1) की सीमा तक मानचित्रित करना। अर्थात, यदि कीमतों में उतार-चढ़ाव औसत से अधिक है, तो पी-सिग्नल 1 के करीब है; यदि कीमतों में उतार-चढ़ाव औसत से कम है, तो पी-सिग्नल -1 के करीब है।
प्रविष्टि और बाहर निकलने के लिए पी-सिग्नल के मानों और उनके परिवर्तन के संकेतों का उपयोग करने की रणनीतिः
strategy.entry("long", strategy.long, 1, when = nPSignal < 0 and ndPSignal > 0)
strategy.close("long", when = nPSignal > 0 and ndPSignal < 0)
जब पी-सिग्नल 0 से कम हो और सकारात्मक हो, तो अधिक करें; जब पी-सिग्नल 0 से अधिक हो और नकारात्मक हो, तो बराबर करें।
इस रणनीति के निम्नलिखित फायदे हैं:
इस रणनीति के कुछ जोखिम भी हैं, जो मुख्य रूप से इस प्रकार हैंः
इन जोखिमों को कम करने के लिए, फ़िल्टरिंग की शर्तों को बढ़ाने पर विचार किया जा सकता है, व्यापार की आवृत्ति को कम करना; पैरामीटर के सेट और व्यापार लागत की स्थापना का अनुकूलन करना; वास्तविक डिस्क पीस, उपयुक्त किस्मों का चयन करना।
इस रणनीति में और अधिक अनुकूलन के लिए जगह है, मुख्य रूप सेः
कुल मिलाकर, इस रणनीति का मुख्य विचार नया है, जो कि मूल्य वितरण को अनुकूलित करने के लिए गॉस फंक्शन का उपयोग करता है, जो पैरामीटर के दायरे को स्वचालित रूप से समायोजित करता है। लेकिन एक उच्च आवृत्ति ट्रेडिंग रणनीति के रूप में, इसे और अधिक परीक्षण और अनुकूलन की आवश्यकता है, विशेष रूप से जोखिम नियंत्रण और पैरामीटर समायोजन के लिए, ताकि यह स्थिर हो सके।
/*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.