ट्रिपल एक्सपोनेंशियल मूविंग एवरेज और स्टोचैस्टिक एक्सपोनेंशियल मूविंग एवरेज ट्रेडिंग रणनीति


निर्माण तिथि: 2024-01-30 16:52:48 अंत में संशोधित करें: 2024-01-30 16:52:48
कॉपी: 3 क्लिक्स: 777
1
ध्यान केंद्रित करना
1617
समर्थक

ट्रिपल एक्सपोनेंशियल मूविंग एवरेज और स्टोचैस्टिक एक्सपोनेंशियल मूविंग एवरेज ट्रेडिंग रणनीति

अवलोकन

यह रणनीति एक ट्रेंड ट्रैकिंग रणनीति है जो ट्रेडिंग सिग्नल उत्पन्न करने के लिए ट्रिपल इंडेक्स मूविंग एवरेज इंडिकेटर और रैंडम इंडेक्स फ्लैट मूविंग एवरेज इंडिकेटर को जोड़ती है। जब तेज चलती औसत पर तेज चलती औसत होता है, तो मध्यम चलती औसत पर धीमी चलती औसत होता है; जब तेज चलती औसत के नीचे तेज चलती औसत होता है, तो मध्यम चलती औसत के नीचे धीमी चलती औसत होता है।

सिद्धांत

  1. 8, 14 और 50 दिन के ट्रिपल इंडेक्सियल मूविंग एवरेज का उपयोग करना। 14 दिन के इंडेक्सियल मूविंग एवरेज को 8 दिन के इंडेक्सियल मूविंग एवरेज पर पार करते समय, 14 दिन के इंडेक्सियल मूविंग एवरेज को 50 दिन के इंडेक्सियल मूविंग एवरेज पर पार करते समय एक अधिक संकेत उत्पन्न होता है; इसके विपरीत, एक शून्य संकेत।

  2. स्टोचैस्टिक आरएसआई का उपयोग करके एक यादृच्छिक सूचकांक चिकनी चलती औसत का उपयोग करें। यह 14 दिन आरएसआई की गणना करता है, फिर आरएसआई के आधार पर स्टोचैस्टिक सूचकांक की गणना करता है, और अंत में स्टोचैस्टिक सूचकांक की गणना के लिए 3 दिन सरल चलती औसत प्राप्त करता है। K लाइन और 3 दिन सरल चलती औसत प्राप्त करता है। जब K लाइन डी लाइन से गुजरती है, तो सहायक संकेत के रूप में अधिक देखें।

  3. ट्रेडिंग सिग्नल उत्पन्न करते समय, यदि कीमत 8 वें दिन के इंडेक्स मूविंग एवरेज से अधिक है, तो प्रवेश करें; यदि कीमत 8 वें दिन के इंडेक्स मूविंग एवरेज से कम है, तो प्रवेश करें।

  4. स्टॉप लॉस 1 गुना एटीआर के नीचे / ऊपर है। स्टॉप लॉस 4 गुना एटीआर के ऊपर / नीचे है।

लाभ

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

  2. स्टोचैस्टिक आरएसआई को एक सहायक निर्णायक के रूप में जोड़ा गया है, जो झूठे संकेतों को फ़िल्टर कर सकता है और प्रवेश की सटीकता को बढ़ा सकता है।

  3. एटीआर के आधार पर स्टॉप लॉस स्टॉप की स्थिति सेट करें, जिससे बाजार में उतार-चढ़ाव की गतिशीलता को ट्रैक किया जा सके और स्टॉप लॉस स्टॉप को बहुत बड़ा या बहुत छोटा होने से बचा जा सके।

  4. इस रणनीति के पैरामीटर की स्थापना उचित है, और यह बड़ी प्रवृत्ति के तहत उत्कृष्ट प्रदर्शन करती है। इसमें कम वापसी होती है, और लाभ स्थिर होता है, जो लंबी रेखा संचालन के लिए उपयुक्त है।

जोखिम

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

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

  3. ट्रिपल मूविंग एवरेज का उपयोग करने के कारण, जब फास्ट लाइन और मीडियम स्पीड लाइन उलट जाती है, तो एक निश्चित अंतराल होता है। इस समय यह देखना आवश्यक है कि क्या कीमतें खुद को उलटती हैं या नहीं, यह तय करने के लिए कि क्या प्रवेश है।

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

अनुकूलन

  1. अन्य संकेतकों जैसे कि MACD को शामिल करने पर विचार किया जा सकता है ताकि प्रवेश के समय को और अनुकूलित किया जा सके। विभिन्न मापदंडों के लिए चलती औसत संयोजनों का परीक्षण भी किया जा सकता है।

  2. एटीआर ओवरहेड जांच के लिए पैरामीटर को अनुकूलित किया जा सकता है। उदाहरण के लिए, स्टॉप लॉस को 1 एटीआर से 1.5 एटीआर में समायोजित करें, और स्टॉप को 4 एटीआर से 3 एटीआर में समायोजित करें, यह देखने के लिए कि क्या बेहतर रिटर्न प्राप्त किया जा सकता है।

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

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

संक्षेप

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

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

//              3ESRA
//              v0.2a

// Coded by Vaida Bogdan

// 3ESRA consists of a 3 EMA cross + a close above (for longs) the quickest EMA
// or below (for shorts). Note that I've deactivated the RSI Cross Over/Under
// (you can modify the code and activate it). The strategy also uses a stop loss
// that's at 1 ATR distance from the entry price and a take profit that's at
// 4 times the ATR distance from the entry price.

// Feedback:
// Tested BTCUSDT Daily
// 1. Stoch-RSI makes you miss opportunities.
// 2. Changing RR to 4:1 times ATR works better.

//@version=4
strategy(title="3 EMA + Stochastic RSI + ATR", shorttitle="3ESRA", overlay=true, pyramiding=1,
     process_orders_on_close=true, calc_on_every_tick=true,
     initial_capital=1000, currency = currency.USD, default_qty_value=10, 
     default_qty_type=strategy.percent_of_equity,
     commission_type=strategy.commission.percent, commission_value=0.1, slippage=2)

startDate = input(title="Start Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Backtesting range")
startMonth = input(title="Start Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Backtesting range")
startYear = input(title="Start Year", type=input.integer,
     defval=1900, minval=1800, maxval=2100, group="Backtesting range")
endDate = input(title="End Date", type=input.integer,
     defval=1, minval=1, maxval=31, group="Backtesting range")
endMonth = input(title="End Month", type=input.integer,
     defval=1, minval=1, maxval=12, group="Backtesting range")
endYear = input(title="End Year", type=input.integer,
     defval=2040, minval=1800, maxval=2100, group="Backtesting range")

// Date range filtering
inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 23, 59))
     
fast = input(8, minval=8, title="Fast EMA", group="EMAs")
medium = input(14, minval=8, title="Medium EMA", group="EMAs")
slow = input(50, minval=8, title="Slow EMA", group="EMAs")
src = input(close, title="Source")

smoothK = input(3, "K", minval=1, group="Stoch-RSI", inline="K&D")
smoothD = input(3, "D", minval=1, group="Stoch-RSI", inline="K&D")
lengthRSI = input(14, "RSI Length", minval=1, group="Stoch-RSI", inline="length")
lengthStoch = input(14, "Stochastic Length", minval=1, group="Stoch-RSI", inline="length")
rsiSrc = input(close, title="RSI Source", group="Stoch-RSI")

length = input(title="Length", defval=14, minval=1, group="ATR")
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")

// EMAs
fastema = ema(src, fast)
mediumema = ema(src, medium)
slowema = ema(src, slow)

// S-RSI
rsi1 = rsi(rsiSrc, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
sRsiCrossOver = k[1] < d[1] and k > d
sRsiCrossUnder = k[1] > d[1] and k < d

// ATR
ma_function(source, length) =>
	if smoothing == "RMA"
		rma(source, length)
	else
		if smoothing == "SMA"
			sma(source, length)
		else
			if smoothing == "EMA"
				ema(source, length)
			else
				wma(source, length)
atr = ma_function(tr(true), length)

// Trading Logic
longCond1 = (fastema > mediumema) and (mediumema > slowema)
longCond2 = true
// longCond2 = sRsiCrossOver
longCond3 = close > fastema
longCond4 = strategy.position_size <= 0
longCond = longCond1 and longCond2 and longCond3 and longCond4 and inDateRange

shortCond1 = (fastema < mediumema) and (mediumema < slowema)
shortCond2 = true 
// shortCond2 = sRsiCrossUnder
shortCond3 = close < fastema
shortCond4 = strategy.position_size >= 0
shortCond = shortCond1 and shortCond2 and shortCond3 and shortCond4 and inDateRange

var takeProfit = float(na), var stopLoss = float(na)
if longCond and strategy.position_size <= 0
    takeProfit := close + 4*atr
    stopLoss := close - 1*atr
    // takeProfit := close + 2*atr
    // stopLoss := close - 3*atr

else if shortCond and strategy.position_size >= 0
    takeProfit := close - 4*atr
    stopLoss := close + 1*atr
    // takeProfit := close - 2*atr
    // stopLoss := close + 3*atr
    
// Strategy calls
strategy.entry("3ESRA", strategy.long, comment="Long", when=longCond and strategy.position_size <= 0)
strategy.entry("3ESRA", strategy.short, comment="Short", when=shortCond and strategy.position_size >= 0)
strategy.exit(id="TP-SL", from_entry="3ESRA", limit=takeProfit, stop=stopLoss)
if (not inDateRange)
    strategy.close_all()
    
// Plot EMAs
plot(fastema, color=color.purple, linewidth=2, title="Fast EMA")
plot(mediumema, color=color.teal, linewidth=2, title="Medium EMA")
plot(slowema, color=color.yellow, linewidth=2, title="Slow EMA")
// Plot S-RSI
// plotshape((strategy.position_size > 0) ? na : sRsiCrossOver, title="StochRSI Cross Over", style=shape.triangleup, location=location.belowbar, color=color.teal, text="SRSI", size=size.small)
// Plot trade
bgcolor(strategy.position_size > 0 ? color.new(color.green, 75) : strategy.position_size < 0 ? color.new(color.red,75) : color(na))
// Plot Strategy
plot((strategy.position_size != 0) ? takeProfit : na, style=plot.style_linebr, color=color.green, title="TP")
plot((strategy.position_size != 0) ? stopLoss : na, style=plot.style_linebr, color=color.red, title="SL")