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