स्टोकैस्टिक गति दोहरे संकेतक रणनीति

लेखक:चाओझांग, दिनांक: 2023-10-07 16:45:25
टैगः

अवलोकन

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

रणनीति तर्क

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

झूठे ब्रेकआउट को फ़िल्टर करने के लिए, रणनीति 10 अवधि के शरीर एसएमए के 1/3 को भी ब्रेकआउट फ़िल्टर की स्थिति के रूप में उपयोग करती है। जब शरीर एसएमए के 1/3 के माध्यम से टूटता है, तो ब्रेकआउट को मान्य माना जाता है।

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

बैकटेस्ट कार्यक्षमता एक दिनांक सीमा दर्ज करके रणनीति का बैकटेस्ट करती है.

लाभ विश्लेषण

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

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

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

  • पिछड़े संकेतकों के रूप में, एसएमआई और आरएसआई में उच्चतम का पीछा करने और निम्नतम को मारने का जोखिम है।
  • मार्टिंगेल में घाटे में तेजी लाने का जोखिम होता है।
  • फ़िल्टर विभिन्न बाजारों में कुछ वैध संकेतों को फ़िल्टर कर सकते हैं।

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

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

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

सारांश

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


/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", 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")

//Backtesting Input Range
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 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > 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()

अधिक