स्टोकेस्टिक मोमेंटम इंडेक्स और आरएसआई पर आधारित मात्रात्मक रणनीति


निर्माण तिथि: 2023-12-12 15:20:29 अंत में संशोधित करें: 2023-12-12 15:20:29
कॉपी: 0 क्लिक्स: 1174
1
ध्यान केंद्रित करना
1621
समर्थक

स्टोकेस्टिक मोमेंटम इंडेक्स और आरएसआई पर आधारित मात्रात्मक रणनीति

अवलोकन

यह रणनीति मुख्य रूप से Stochastic Momentum Index ((SMI) और Relative Strength Index ((RSI) पर आधारित है। इसके अलावा, एक रंग फिल्टर और K-लाइन इकाई फिल्टर को एक सहायक निर्णय के रूप में जोड़ा गया है। SMI और RSI संकेतकों के आधार पर पॉलीहोल सिग्नल, फ़िल्टर की शर्तों के साथ मिलकर एक ट्रेडिंग सिग्नल भेजता है। यह रणनीति बाजार में शॉर्ट-लाइन ट्रेडिंग अवसरों को प्रभावी ढंग से ढूंढ सकती है।

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

इस रणनीति के केंद्र में दो सूचकांकों SMI और RSI पर निर्भर करता है। SMI मुख्य रूप से यह निर्धारित करता है कि क्या स्टॉक ओवरबॉट है, जबकि RSI स्टॉक की अपेक्षाकृत मजबूत है। जब दोनों एक साथ खरीदने के संकेत देते हैं, तो खरीदारी का संचालन किया जाता है। विशिष्ट तर्क इस प्रकार हैः

  1. एसएमआई ओवरसोल (नीचे की सीमा से नीचे), एक खरीद संकेत के रूप में माना जाता है
  2. RSI के नीचे गिरावट को खरीद संकेत के रूप में देखें
  3. जब एसएमआई ओवरसोल्ड और आरएसआई एक ही समय में संबंधित थ्रेशोल्ड से नीचे होते हैं, तो एक खरीद संकेत दिया जाता है
  4. वैक्यूम सिग्नल निर्णय तर्क के समान

इसके अलावा, इस रणनीति में दोहरी संकेत मोड है। इस मोड के लिए एसएमआई और आरएसआई को एक साथ संकेत देना होगा ताकि व्यापार किया जा सके। यह झूठे संकेतों को प्रभावी ढंग से कम कर सकता है।

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

रणनीतिक लाभ

  1. एसएमआई का उपयोग करके निर्णय लें कि क्या ओवरबॉट है, आरएसआई निर्णय अपेक्षाकृत मजबूत है, दोहरी पुष्टि झूठे संकेतों को कम कर सकती है
  2. दोहरे सिग्नल मोड सेट करें और अमान्य लेनदेन को काफी कम करें
  3. रंग फ़िल्टर और K-लाइन इकाई फ़िल्टर प्रभावी रूप से फ़िल्टरिंग को तोड़ सकते हैं
  4. नीति निष्पादन तर्क स्पष्ट और सरल
  5. अधिकांश पैरामीटर अनुकूलन योग्य हैं

रणनीतिक जोखिम और अनुकूलन

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

संक्षेप

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

रणनीति स्रोत कोड
/*backtest
start: 2023-12-04 00:00:00
end: 2023-12-06 19:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Stochastic Strategy v1.3", shorttitle = "Stochastic str 1.3", 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")
usecol = input(true, defval = true, title = "Use Color-Filter")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(2, defval = 2, minval = 2, maxval = 50, title = "SMI Percent K Length")
b = input(2, defval = 2, minval = 2, maxval = 50, title = "SMI Percent D Length")
limitsmi = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
periodrsi = input(2, defval = 2, minval = 2, maxval = 50, title = "RSI Period")
limitrsi = input(10, defval = 10, minval = 1, maxval = 50, title = "RSI Limit")
double = input(false, defval = false, title = "SMI+RSI Mode")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(2018, defval = 2018, 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), periodrsi)
fastdown = rma(-min(change(close), 0), periodrsi)
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)
avgrel = sma(sma(rdiff,b),b)
avgdiff = sma(sma(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(limitsmi, color = black, title = "Over Bought")
plot(-1 * limitsmi, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Color-Filter
gb = close > open or usecol == false
rb = close < open or usecol == false

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

//Signals
up1 = SMI < -1 * limitsmi and rb and body and usesmi
dn1 = SMI > limitsmi and gb and body and usesmi
up2 = fastrsi < limitrsi and rb and body and usersi
dn2 = fastrsi > 100 - limitrsi and gb and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Background
redb = (SMI > limitsmi and usesmi) or (fastrsi > 100 - limitrsi and usersi)
limeb = (SMI < -1 * limitsmi and usesmi) or (fastrsi < limitrsi and usersi)
col = showbg == false ? na : redb ? red : limeb ? lime : na
bgcolor(col, transp = 50)

//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]

signalup = ((up1 or up2) and double == false) or (up1 and up2 and double)
if signalup
    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)))

signaldn = ((dn1 or dn2) and double == false) or (dn1 and dn2 and double)
if signaldn
    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()