पी-सिग्नल रिवर्सल रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-29 14:44:56
टैगः

img

अवलोकन

पी-सिग्नल रिवर्सल रणनीति एक सांख्यिकीय मापदंडों और त्रुटि कार्यों के आधार पर बनाई गई एक मात्रात्मक ट्रेडिंग रणनीति है। यह बाजार रिवर्सल बिंदुओं को कैप्चर करने के लिए के-लाइनों की एक श्रृंखला के चरम मूल्य वितरण को ट्रैक करके गतिशील रूप से ट्रेडिंग सिग्नल प्राप्त करता है।

रणनीतिक सिद्धांत

इस रणनीति का मुख्य संकेतक पी-सिग्नल है, जो चलती औसत और मानक विचलन के सांख्यिकीय मापदंडों को जोड़ती है और उन्हें एक मात्रात्मक निर्णय संकेतक बनाने के लिए गौसियन त्रुटि फ़ंक्शन के माध्यम से -1 से 1 की सीमा में मैप करती है। यह पी-सिग्नल सकारात्मक से नकारात्मक में उलटा होने पर छोटा हो जाता है, और नकारात्मक से सकारात्मक में उलटा होने पर लंबा हो जाता है, एक उलटा रणनीति तर्क बनाते हैं।

रणनीति मापदंडों में कार्डिनलिटी, ΔErf और अवलोकन समय शामिल हैं। कार्डिनलिटी नमूना आकार को नियंत्रित करती है, ΔErf व्यापार आवृत्ति को कम करने के लिए त्रुटि फ़ंक्शन के मृत बैंड को नियंत्रित करती है। अवलोकन समय रणनीति के प्रारंभ समय को नियंत्रित करता है।

लाभ विश्लेषण

पी-सिग्नल रिवर्स रणनीति का सबसे बड़ा लाभ यह है कि यह सांख्यिकीय मापदंडों के संभावना वितरण पर आधारित है, जो प्रभावी रूप से बाजार के विशिष्ट बिंदुओं का न्याय कर सकते हैं और रिवर्स अवसरों को पकड़ सकते हैं। एकल तकनीकी संकेतक की तुलना में, यह अधिक बाजार जानकारी को शामिल करता है और अधिक व्यापक और विश्वसनीय निर्णय देता है।

इसके अतिरिक्त, रणनीति का पैरामीटरकृत डिजाइन अच्छी तरह से विनियमित है, जिससे उपयोगकर्ताओं को अनुकूलनशीलता और लचीलापन सुनिश्चित करने के लिए इष्टतम संयोजन खोजने के लिए अपनी आवश्यकताओं के अनुसार पैरामीटर स्थान को समायोजित करने की अनुमति मिलती है।

जोखिम विश्लेषण

पी-सिग्नल रिवर्स रणनीति का मुख्य जोखिम यह है कि यह संभावना वितरण के मापदंडों पर बहुत अधिक निर्भर करता है, जो गलत आकलन के परिणामस्वरूप असामान्य डेटा से आसानी से प्रभावित होता है। इसके अलावा, रिवर्स रणनीतियों का जोखिम-लाभ अनुपात आम तौर पर कम होता है, जिसमें सीमित एकल लाभ होता है।

नमूना आकार बढ़ाने के लिए कार्डिनलिटी पैरामीटर को बढ़ाना डेटा विसंगतियों के प्रभाव को कम कर सकता है। व्यापारिक आवृत्ति को कम करने के लिए ΔErf रेंज का उचित विस्तार जोखिम को नियंत्रित करने में मदद करता है।

अनुकूलन दिशाएँ

पी-सिग्नल रिवर्स रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः

  1. अनियमित संकेतों को फ़िल्टर करने के लिए अन्य संकेतकों को शामिल करें, जैसे कि मात्रा में तेज वृद्धि।

  2. न्याय की स्थिरता बढ़ाने के लिए कई समय सीमाओं में संकेतों को मान्य करें।

  3. एकल घाटे को कम करने के लिए स्टॉप लॉस रणनीतियों को बढ़ाएं।

  4. सर्वोत्तम संयोजन खोजने और लाभप्रदता बढ़ाने के लिए मापदंडों का अनुकूलन करें।

  5. गतिशील पैरामीटर समायोजन के लिए मशीन सीखने को शामिल करें।

सारांश

पी-सिग्नल रिवर्सल रणनीति लचीले पैरामीटर डिजाइन और उपयोगकर्ता मित्रता के साथ संभावना वितरण के आधार पर एक मात्रात्मक व्यापार ढांचा स्थापित करती है। यह प्रभावी रूप से बाजारों की सांख्यिकीय विशेषताओं का न्याय करती है और रिवर्सल अवसरों को पकड़ती है। रणनीति को मल्टी-इंडिकेटर सत्यापन, स्टॉप लॉस अनुकूलन और अन्य साधनों के माध्यम से स्थिरता और लाभप्रदता में और बढ़ाया जा सकता है। यह मात्रात्मक तकनीकों का उपयोग करके एल्गोरिथम ट्रेडिंग के लिए एक कुशल और विश्वसनीय प्रतिमान प्रदान करता है।


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// **********************************************************************************************************
// 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 RVS © Kharevsky
// **********************************************************************************************************
strategy('P-Signal Strategy RVS.', precision=3, process_orders_on_close=true, pyramiding=0, 
     commission_type=strategy.commission.percent,
     commission_value=0.2)
// Parameters and const of P-Signal.
nPoints = input.int(title='Cardinality:', defval=4, minval=4, maxval=200, group='Parameters of strategy.')
ndErf = input.float(title='|ΔErf|:', defval=0, minval=0, maxval=1, step=0.01, group='Parameters of strategy.')
tStartDate = input(title='Start date:', defval=timestamp('30 Dec 1957 00:00 +0300'), group='Observation time.')
int nIntr = nPoints - 1
// Horner's method for the error (Gauss) & P-Signal functions.
fErf(x) =>
    nT = 1.0 / (1.0 + 0.5 * math.abs(x))
    nAns = 1.0 - nT * math.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 = ta.stdev(ser, int)
    nSma = ta.sma(ser, int)
    nStDev > 0 ? fErf(nSma / nStDev / math.sqrt(2)) : math.sign(nSma)
// Data.
float nPSignal = ta.sma(fPSignal(ta.change(ohlc4), nIntr), nIntr)
float ndPSignal = math.sign(nPSignal[0] - nPSignal[1])
bool isStartDate = true
// Reversal Strategy.
strategy.entry('short', strategy.short, when=isStartDate and nPSignal > ndErf and ndPSignal < 0)
strategy.entry('long', strategy.long, when=isStartDate and nPSignal < -ndErf and ndPSignal > 0)
// Plotting. 
hline(+1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-1.0, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(-ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
hline(ndErf, color=color.new(color.orange, 70), linestyle=hline.style_dotted, editable=false)
plot(nPSignal, color=color.new(color.blue, 0), style=plot.style_line)
// Table of state.
if barstate.isconfirmed
    var Table = table.new(position=position.bottom_right, columns=3, rows=1, 
     frame_color=color.new(color.orange, 70), frame_width=1, 
     border_color=color.new(color.orange, 70), border_width=1)
    table.cell(table_id=Table, column=0, row=0, 
     text=strategy.position_size > 0 ? 'Long: ' + str.tostring(strategy.position_size) : 'Short: ' + str.tostring(strategy.position_size), 
     text_color=strategy.position_size > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=1, row=0, 
     text='Net P/L: ' + str.tostring(strategy.netprofit, '#.#'), 
     text_color=strategy.netprofit > 0 ? color.green : color.red)
    table.cell(table_id=Table, column=2, row=0, 
     text='Open P/L: ' + str.tostring(strategy.openprofit, '#.#'), 
     text_color=strategy.openprofit > 0 ? color.green : color.red)
// The end.



अधिक