ट्रिपल स्टैक्ड स्टोचैस्टिक मोमेंटम रणनीति


निर्माण तिथि: 2024-01-26 12:15:20 अंत में संशोधित करें: 2024-01-26 12:15:20
कॉपी: 2 क्लिक्स: 449
1
ध्यान केंद्रित करना
1214
समर्थक

ट्रिपल स्टैक्ड स्टोचैस्टिक मोमेंटम रणनीति

अवलोकन

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

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

इस रणनीति के लिए केंद्रीय संकेतक है यादृच्छिक गतिशीलता सूचक (SMI) । SMI सूचक के लिए गणना सूत्र इस प्रकार हैः

SMI = 100 * EMA(EMA(收盘价-最高价和最低价的中点,N1),N2) / 0.5 * EMA(EMA(最高价-最低价,N1),N2)

इनमें से, N1 और N2 क्रमशः पैरामीटर की लंबाई हैं। SMI सूचकांक के लिए मान सीमा 100 से 100 के बीच है, जब SMI 0 से अधिक होता है तो यह दर्शाता है कि समापन मूल्य दिन के मूल्य सीमा के ऊपरी भाग में है, और जब 0 से कम होता है तो यह दर्शाता है कि समापन मूल्य मूल्य मूल्य सीमा के निचले भाग में है।

पारंपरिक स्टोच सूचकांक की तरह, एसएमआई सूचकांक पूर्वनिर्धारित ओवरबॉय लाइन (जैसे 40) और ओवरबॉय लाइन (जैसे -40) से अधिक होने पर संकेत देता है कि रिवर्स सिग्नल हो सकता है। एसएमआई सूचकांक पर अपने चलती औसत को पार करते समय, एक खरीद संकेत उत्पन्न होता है; जब एसएमआई सूचकांक नीचे अपने चलती औसत को पार करता है, तो एक बेचने का संकेत उत्पन्न होता है।

इस रणनीति में तीन समूहों के विभिन्न पैरामीटर सेटिंग्स के एसएमआई सूचकांकों को ओवरले किया गया है, जो क्रमशः हैंः

  • SMI1: %K लंबाई 10 चक्र, %K चिकनाई चक्र 3 चक्र
  • SMI2: %K लंबाई 20 चक्र, %K चिकनाई चक्र 3 चक्र
  • SMI3: %K लंबाई 5 चक्र, %K चिकनाई चक्र 3 चक्र

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

रणनीतिक लाभ

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

रणनीतिक जोखिम

  • कई सूचकांक एक-दूसरे पर टिके हुए हैं, कुछ पिछड़े हुए हैं
  • उच्च लेनदेन लागत के साथ अक्सर शॉर्ट-लाइन ऑपरेशन
  • डेटा मिलान जोखिमों का पता लगाना
  • बाजार संरचना में परिवर्तन के बाद पैरामीटर विफलता का जोखिम

जोखिम को कम करने के उपाय:

  • पैरामीटर अनुकूलित करें, कम करें
  • ट्रेडिंग लागत को कम करने के लिए स्टॉक समय को ठीक से समायोजित करें
  • सांख्यिकीय परीक्षणों में वृद्धि, स्वास्थ्य परीक्षण
  • गतिशील समायोजन पैरामीटर

रणनीति अनुकूलन

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

संक्षेप

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

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

//@version=2
strategy("Stochastic Momentum multi strategy", "Stochastic Momentum Index multi strategy", overlay=false)

q = input(10, title="%K Length")
r = input(3, title="%K Smoothing Length")
s = input(3, title="%K Double Smoothing Length")
nsig = input(10, title="Signal Length")
matype = input("ema", title="Signal MA Type")  // possible: ema, sma, wma, trima, hma, dema, tema, zlema
overbought = input(40, title="Overbought Level", type=float)
oversold = input(-40, title="Oversold Level", type=float)

trima(src, length) => sma(sma(src,length),length)
hma(src, length) => wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
dema(src, length) => 2*ema(src,length) - ema(ema(src,length),length)
tema(src, length) => (3*ema(src,length) - 3*ema(ema(src,length),length)) + ema(ema(ema(src,length),length),length)
zlema(src, length) => ema(src,length) + (ema(src,length) - ema(ema(src,length),length))

smi = 100 * ema(ema(close-0.5*(highest(q)+lowest(q)),r),s) / (0.5 * ema(ema(highest(q)-lowest(q),r),s))
sig = matype=="ema" ? ema(smi,nsig) : matype=="sma" ? sma(smi,nsig) : matype=="wma" ? wma(smi,nsig) : matype=="trima" ? trima(smi,nsig) : matype=="hma" ? hma(smi,nsig) : matype=="dema" ? dema(smi,nsig) : matype=="tema" ? tema(smi,nsig) : matype=="zlema" ? zlema(smi,nsig) : ema(smi,nsig)

p_smi = plot(smi, title="SMI", color=aqua)
p_sig = plot(sig, title="Signal", color=red)

// plotchar(crossover(smi, sig), title= "low", location=location.bottom, color=green, char="▲", size= size.tiny)
// plotchar(crossunder(smi, sig), title= "high", location=location.top, color=red, char="▼", size= size.tiny)

/////////////////////////////2
q2 = input(20, title="%K Length 2")
r2 = input(3, title="%K Smoothing Length 2")
s2 = input(3, title="%K Double Smoothing Length 2")
nsig2 = input(10, title="Signal Length 2")
matype2 = input("ema", title="Signal MA Type 2")  // possible: ema, sma, wma, trima, hma, dema, tema, zlema
overbought2 = input(40, title="Overbought Level 2", type=float)
oversold2 = input(-40, title="Oversold Level 2", type=float)

trima2(src2, length2) => sma(sma(src2,length2),length2)
hma2(src2, length2) => wma(2*wma(src2, length2/2)-wma(src2, length2), round(sqrt(length2)))
dema2(src2, length2) => 2*ema(src2,length2) - ema(ema(src2,length2),length2)
tema2(src2, length2) => (3*ema(src2,length2) - 3*ema(ema(src2,length2),length2)) + ema(ema(ema(src2,length2),length2),length2)
zlema2(src2, length2) => ema(src2,length2) + (ema(src2,length2) - ema(ema(src2,length2),length2))

smi2 = 100 * ema(ema(close-0.5*(highest(q2)+lowest(q2)),r2),s2) / (0.5 * ema(ema(highest(q2)-lowest(q2),r2),s2))
sig2 = matype2=="ema" ? ema(smi2,nsig2) : matype2=="sma 2" ? sma(smi2,nsig2) : matype2=="wma 2" ? wma(smi2,nsig2) : matype2=="trima 2" ? trima2(smi2,nsig2) : matype2=="hma 2" ? hma2(smi2,nsig2) : matype=="dema 2" ? dema2(smi2,nsig2) : matype2=="tema 2" ? tema2(smi2,nsig2) : matype2=="zlema 2" ? zlema2(smi2,nsig2) : ema(smi2,nsig2)

p_smi2 = plot(smi2, title="SMI 2", color=aqua)
p_sig2 = plot(sig2, title="Signal2", color=red)

// plotchar(crossover(smi2, sig2), title= "low2", location=location.bottom, color=green, char="▲", size= size.tiny)
// plotchar(crossunder(smi2, sig2), title= "high2", location=location.top, color=red, char="▼", size= size.tiny)

/////////////////////////////3
q3 = input(5, title="%K Length 3")
r3 = input(3, title="%K Smoothing Length 3")
s3 = input(3, title="%K Double Smoothing Length 3")
nsig3 = input(10, title="Signal Length 3")
matype3 = input("ema", title="Signal MA Type 3")  // possible: ema, sma, wma, trima, hma, dema, tema, zlema
overbought3 = input(40, title="Overbought Level 3", type=float)
oversold3 = input(-40, title="Oversold Level 3", type=float)

trima3(src3, length3) => sma(sma(src3,length3),length3)
hma3(src3, length3) => wma(2*wma(src3, length3/2)-wma(src3, length3), round(sqrt(length3)))
dema3(src3, length3) => 2*ema(src3,length3) - ema(ema(src3,length3),length3)
tema3(src3, length3) => (3*ema(src3,length3) - 3*ema(ema(src3,length3),length3)) + ema(ema(ema(src3,length3),length3),length3)
zlema3(src3, length3) => ema(src3,length3) + (ema(src3,length3) - ema(ema(src3,length3),length3))

smi3 = 100 * ema(ema(close-0.5*(highest(q3)+lowest(q3)),r3),s3) / (0.5 * ema(ema(highest(q3)-lowest(q3),r3),s3))
sig3 = matype3=="ema" ? ema(smi3,nsig3) : matype3=="sma 3" ? sma(smi3,nsig3) : matype3=="wma 3" ? wma(smi3,nsig3) : matype3=="trima 3" ? trima3(smi3,nsig3) : matype3=="hma 3" ? hma3(smi3,nsig3) : matype=="dema 3" ? dema3(smi3,nsig3) : matype3=="tema 3" ? tema3(smi3,nsig3) : matype3=="zlema 3" ? zlema3(smi3,nsig3) : ema(smi3,nsig3)

p_smi3 = plot(smi3, title="SMI 3", color=aqua)
p_sig3 = plot(sig3, title="Signal3", color=red)

// plotchar(crossover(smi3, sig3) and crossover(smi2, sig2) and crossover(smi, sig), title= "low3", location=location.bottom, color=green, char="▲", size= size.tiny)
// plotchar(crossunder(smi3, sig3) and crossunder(smi2, sig2) and crossunder(smi, sig), title= "high3", location=location.top, color=red, char="▼", size= size.tiny)
plotchar (((smi3 < sig3) and (smi2 < sig2) and (smi < sig)), title= "low3", location=location.bottom, color=green, char="▲", size= size.tiny)
plotchar (((smi3 > sig3) and (smi2 > sig2) and (smi > sig)), title= "high3", location=location.top, color=red, char="▼", size= size.tiny)

// === BACKTEST RANGE ===
FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2014)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2018, title = "To Year", minval = 2014)

longCondition = ((smi3 < sig3) and (smi2 < sig2) and (smi < sig))
shortCondition = ((smi3 > sig3) and (smi2 > sig2) and (smi > sig))

// buy = longCondition == 1 and longCondition[1] == 1 ? longCondition : na
buy = longCondition == 1 ? longCondition : na
sell = shortCondition == 1? shortCondition : na

// === ALERTS ===
strategy.entry("L", strategy.long, when=buy)

strategy.entry("S", strategy.short, when=sell)

alertcondition(((smi3 < sig3) and (smi2 < sig2) and (smi < sig)), title='Low Fib.', message='Low Fib. Buy')
alertcondition(((smi3 > sig3) and (smi2 > sig2) and (smi > sig)), title='High Fib.', message='High Fib. Low')