स्टोकैस्टिक गति रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-22 10:13:23
टैगः

img

अवलोकन

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

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

स्टोकैस्टिक गति सूचकांक

स्टोकैस्टिक मोमेंटम इंडेक्स (एसएमआई) एक सामान्य तकनीकी संकेतक है जिसका उपयोग मात्रात्मक व्यापार में किया जाता है जो गति और दोलन संकेतकों की ताकत को जोड़ती है।

विशेष रूप से, एसएमआई की गणना इस प्रकार की जाती हैः

एसएमआई = (करीब - (एचएच + एलएल) /2)/(0.5*(एचएच - एलएल)) * 100

जहां HH पिछले N दिनों में सबसे अधिक मूल्य है और LL सबसे कम मूल्य है।

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

तेज आरएसआई

रिलेटिव स्ट्रेंथ इंडेक्स (आरएसआई) एक मानक ओवरबॉट/ओवरसोल्ड इंडिकेटर है। यह रणनीति अल्पकालिक ओवरबॉट/ओवरसोल्ड स्थितियों का न्याय करने के लिए 7 की अवधि के साथ तेजी से आरएसआई का उपयोग करती है।

20 से नीचे की रीडिंग को ओवरसोल्ड माना जाता है, जबकि 80 से ऊपर की रीडिंग को फास्ट आरएसआई के अनुसार ओवरबॉट माना जाता है। जब इन सीमाओं का उल्लंघन किया जाता है तो संकेत उत्पन्न होते हैं।

शरीर फ़िल्टर

यह रणनीति कुछ संकेतों को फ़िल्टर करने के लिए कैंडलस्टिक बॉडी साइज़ की जांच करके बॉडी फ़िल्टर को भी लागू करती है। केवल एक सेट थ्रेशोल्ड से अधिक बॉडी ट्रेड को ट्रिगर करेंगे।

यह कुछ झूठे संकेतों को फ़िल्टर करता है और विश्वसनीयता बढ़ाता है।

लाभ

बहु-सूचक संयोजन

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

अधिक खरीदे/बेचे जाने का पता लगाना

एसएमआई और फास्ट आरएसआई दोनों ही समाप्त रुझानों का पता लगाने के लिए उत्कृष्ट हैं। इन अतिव्यापी क्षेत्रों से औसत-वापसी का व्यापार करके, रणनीति कम खरीदने और उच्च बेचने का पालन करती है।

दो तरफ़ा व्यापार

गिरावट और छोटी रैलियों दोनों को खरीदने की क्षमता बाजार की स्थितियों में अवसरों को अधिकतम करती है।

जोखिम नियंत्रण

बॉडी फिल्टर चंचल परिस्थितियों में कम दृढ़ता वाले संकेतों को अस्वीकार करके whipsaws से बचता है।

जोखिम

कुल्हाड़ी

लगातार लंबी/छोटी स्विच करने से Whipsaw का जोखिम होता है। तर्क को अनुकूलित करने से इसे कम किया जा सकता है।

भीड़-भाड़ वाले व्यवसाय

संकेत बाजार के प्रतिभागियों को समूहबद्ध कर सकते हैं और प्रवेश पर त्वरित उलटफेर को प्रेरित कर सकते हैं। ठीक-ठीक समायोजन पैरामीटर झुंड जोखिम को कम कर सकते हैं।

काली हंस

चरम घटनाएं सभी मॉडलों को उलटा कर सकती हैं। व्यवस्थित जोखिमों को नियंत्रित करने के लिए बुद्धिमान स्टॉप लॉस आवश्यक हैं।

सुधार

पैरामीटर अनुकूलन

विभिन्न एसएमआई/आरएसआई अवधि और बॉडी फिल्टर सीमाओं का परीक्षण उच्च रिटर्न के लिए इष्टतम मानों को उजागर कर सकता है।

गतिशील रोक

अस्थिरता आधारित या एटीआर स्टॉप को शामिल करने से स्थिति और पोर्टफोलियो जोखिम में सुधार होगा।

मशीन लर्निंग

भविष्य के सूचक स्तरों की भविष्यवाणी करने वाले मॉडल महत्वपूर्ण बिंदुओं को पहले से पहचान सकते हैं। इससे भविष्यवाणी की क्षमता बढ़ेगी।

निष्कर्ष

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


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

//Noro
//2018

//@version=2
strategy(title = "Noro's Stochastic Strategy v1.1", shorttitle = "Stochastic str 1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2017, defval = 2017, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMIsignal < -1 * limit and close < open and body and usesmi
dn1 = SMIsignal > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

अधिक