मात्रात्मक ऑसिलेटर संकेतकों पर आधारित संयोजन रणनीति


निर्माण तिथि: 2024-02-27 16:46:42 अंत में संशोधित करें: 2024-02-27 16:46:42
कॉपी: 3 क्लिक्स: 653
1
ध्यान केंद्रित करना
1617
समर्थक

मात्रात्मक ऑसिलेटर संकेतकों पर आधारित संयोजन रणनीति

अवलोकन

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

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

इस रणनीति में चार प्रमुख मापदंडों का उपयोग किया गया है।

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

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

और बाहर निकलने की शर्तें बहुत सरल हैं, केवल तभी जब मूल रेखा के नीचे क्षणिक प्रवृत्ति रेखा को पार करते हैं।

रिक्त शर्तों के लिए, केवल निर्णय की शर्तों को उलट दिया जा सकता है, जैसा कि बहु शर्तों के लिए है।

श्रेष्ठता विश्लेषण

इस रणनीति का सबसे बड़ा लाभ यह है कि सूचक का सही संयोजन, प्रत्येक सूचक के फायदे का प्रभावी ढंग से उपयोग कर सकता है, एक दूसरे को सत्यापित कर सकता है, झूठी सकारात्मकता से बचा जा सकता है, जिससे बहुत सारे शोर को फ़िल्टर किया जा सकता है, जिससे संकेत अधिक विश्वसनीय हो सकता है।

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

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

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

इस रणनीति का सबसे बड़ा जोखिम एक स्टॉप-लॉस तंत्र की कमी है। जब बाजार में भारी बदलाव होता है, तो समय पर स्टॉप-लॉस नहीं किया जा सकता है, जिससे नुकसान बढ़ सकता है। इसके अलावा, अतिरिक्त फ़िल्टर की कमी, जैसे कि मार्जिनल सिस्टम फ़िल्टर और ऊर्जा संकेतक, कुछ हद तक झूठे सकारात्मक व्यापार का कारण बन सकते हैं।

इन जोखिमों को कम करने के लिए, एक बचाव स्टॉप सेट किया जा सकता है, जब नुकसान एक निश्चित अनुपात से अधिक हो तो स्वचालित रूप से बंद हो जाता है। इसके अलावा, दोहरी सत्यापन के लिए एमएसीडी जैसे गतिशीलता संकेतकों को शामिल किया जा सकता है, जिससे झूठे ब्रेक के जोखिम से बचा जा सकता है।

अनुकूलन दिशा

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

  1. सुरक्षा रोकथाम तंत्र में शामिल हों। अधिकतम वापसी की गणना ऐतिहासिक रीट्रेसिंग डेटा के आधार पर की जाती है, जिसके अनुसार एक रोकथाम बिंदु निर्धारित किया जाता है।

  2. फ़िल्टर जोड़ें। MACD, ब्रिन बैंड और अन्य संकेतकों को शामिल करें और फ़िल्टर के कई स्तरों को जोड़ें, जिससे झूठे संकेतों को कम किया जा सके।

  3. अधिक समय चक्रों के साथ संयुक्त। वर्तमान में केवल एक सेट है, और अधिक समय चक्रों के साथ एकीकृत किया जा सकता है, और स्थिरता के लिए बहु-समय अक्ष सत्यापन विधि का उपयोग किया जा सकता है।

  4. गतिशील समायोजन मापदंडों जोड़ा गया मापदंड अनुकूलन मॉड्यूल, विभिन्न बाजार स्थितियों के अनुसार गतिशील रूप से सूचक मापदंडों को समायोजित करने के लिए, रणनीति को अधिक अनुकूल बनाने के लिए

  5. विभिन्न किस्मों में रणनीति लागू करें और जोखिम को नियंत्रित करने के लिए विभिन्न किस्मों के लिए अवसरों की तलाश करें

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © simwai

//@version=5
strategy('Ehlers Elegant Oscillator + Ehlers Decycler + Ehlers Instantaneous + Ehlers Spearman Rank', 'Ehlers Combo', overlay=true, margin_long=100, margin_short=100)

// -- Inputs --
inp = input(title='Source', defval=close)
res = input.timeframe(title='Resolution', defval='')
bar = input(title='Allow Bar Color Change?', defval=true)
src = inp
length = input.int(title='Length', defval=20, minval=2, maxval=300)
rmsLength = input.int(title='Rms Length', defval=50, minval=2)
decyclerLength = length

// -- Calculation --
// Ehlers Elegant Oscillator
a1 = math.exp(-1.414 * math.pi / length)
b1 = 2 * a1 * math.cos(1.414 * math.pi / length)
c2 = b1
c3 = -a1 * a1
c1 = 1 - c2 - c3

deriv = src - nz(src[2])
rms = math.avg(math.pow(deriv, 2), rmsLength)
rms := rms != 0 ? math.sqrt(rms) : 0
nDeriv = rms != 0 ? deriv / rms : 0
iFish = nDeriv != 0 ? (math.exp(2 * nDeriv) - 1) / (math.exp(2 * nDeriv) + 1) : 0

ss = 0.0
ss := bar_index < 3 ? 0 : (c1 * ((iFish + nz(iFish[1])) / 2)) + (c2 * nz(ss[1])) + (c3 * nz(ss[2]))
ssSig = ta.wma(ss, length)

slo = ss - ssSig
sig = slo > 0 ? slo > nz(slo[1]) ? 2 : 1 : slo < 0 ? slo < nz(slo[1]) ? -2 : -1 : 0
eoColor = sig > 1 ? color.green : sig > 0 ? color.lime : sig < -1 ? color.maroon : sig < 0 ? color.red : color.black

hline(0)
plot(ssSig, title='EO', color=eoColor, linewidth=2)

// Ehlers Decycler
pi = 2 * math.asin(1)
twoPiPrd = 2 * pi / decyclerLength
alpha = (math.cos(twoPiPrd) + math.sin(twoPiPrd) - 1) / math.cos(twoPiPrd)

dec = 0.0
dec := ((alpha / 2) * (src + nz(src[1]))) + ((1 - alpha) * nz(dec[1]))

decyclerSig = src > dec ? 1 : src < dec ? -1 : 0
decColor = decyclerSig > 0 ? color.green : decyclerSig < 0 ? color.red : color.black
plot(dec, title='Decycler', color=decColor, linewidth=2)

// Ehlers Instantaneous Trendline
getItrend(src, alpha) =>
    Price = src
    Smooth = 0.0
    ITrend = 0.0
    Trigger = 0.0
    
    ITrend := (alpha - alpha * alpha / 4) * Price + .5 * alpha * alpha  * Price[1] - (alpha - .75 * alpha * alpha) * Price[2] + 2 * (1 - alpha) * nz(ITrend[1]) - (1 - alpha) * (1 - alpha) * nz(ITrend[2])
    if(bar_index < 7)
        ITrend := (Price + 2 * Price[1] + Price[2]) / 4
    Trigger := 2 * ITrend - ITrend[2]
    [ITrend, Trigger]

itrendAlpha = 2 / (length + 1) / 2
[iT, Tr] = getItrend(src, itrendAlpha)

iTColor = Tr > iT ? color.aqua : color.maroon
plot(iT, 'Instantaneous Trend', iTColor, 2)

// Ehlers Spearman Rank
priceArray = array.new_float(300, 0.0)
rank = array.new_float(300, 0.0)
for i = 1 to length
    array.set(priceArray, i, nz(src[i - 1]))
    array.set(rank, i, i)

for i = 1 to length
    count = length + 1 - i
    for j = 1 to length - count
        if array.get(priceArray, j + 1) < array.get(priceArray, j)
            tempPrice = array.get(priceArray, j)
            tempRank = array.get(rank, j)
            array.set(priceArray, j, array.get(priceArray, j + 1))
            array.set(rank, j, array.get(rank, j + 1))
            array.set(priceArray, j + 1, tempPrice)
            array.set(rank, j + 1, tempRank)
         
sum = 0.0   
for i = 1 to length
    sum := sum + math.pow(i - array.get(rank, i), 2)
signal = 2 * (0.5 - (1 - ((6 * sum) / (length * (math.pow(length, 2) - 1)))))
spearmanSlo = signal - nz(signal[1])
spearmanSig = spearmanSlo > 0 or signal > 0 ? spearmanSlo > nz(spearmanSlo[1]) ? 2 : 1 : spearmanSlo < 0 or signal < 0 ? spearmanSlo < nz(spearmanSlo[1]) ? -2 : -1 : 0

// -- Signals --
bool enterLong = ta.crossover(sig, 0) and ta.crossover(decyclerSig, 0) and ta.crossover(src, dec) and (src > iT) and iT[1] < iT and spearmanSig > 0
bool enterShort = ta.crossunder(sig, 0) and ta.crossunder(decyclerSig, 0) and ta.crossunder(src, dec) and (src < iT) and iT[1] > iT and spearmanSig < 0
bool exitLong = ta.crossunder(src[100], iT) 
bool exitShort = ta.crossover(src[100], iT)

barcolor(bar and strategy.position_size > 0 ? color.green : bar and strategy.position_size < 0 ? color.red : color.gray)

// -- Long Exits --
strategy.close('long', when=exitLong and strategy.position_size > 0, comment='EXIT_LONG')

// -- Short Exits --
strategy.close('short', when=exitShort and strategy.position_size < 0, comment='EXIT_SHORT')

bool isStrategyEntryEnabled = true
// -- Long Entries --
if (isStrategyEntryEnabled)
    strategy.entry('long', strategy.long, when=enterLong, comment='ENTER_LONG')
else
    strategy.order('long', strategy.long, when=enterLong, comment='ENTER_LONG')

// -- Short Entries --
if (isStrategyEntryEnabled)
    strategy.entry('short', strategy.short, when=enterShort, comment='ENTER_SHORT')
else
    strategy.order('short', strategy.short, when=enterShort, comment='ENTER_SHORT')