यह रणनीति 21-दिवसीय और 55-दिवसीय चलती औसत के क्रॉसओवर के आधार पर ट्रेडिंग सिग्नल उत्पन्न करती है, और झूठे संकेतों को फ़िल्टर करने के लिए सुपरट्रेंड संकेतक का उपयोग करती है। यह एक ट्रेंड-फॉलोइंग रणनीति है।
कोड सबसे पहले 21-दिवसीय ईएमए (ईएमए1) और 55-दिवसीय ईएमए (ईएमए2) को परिभाषित करता है। एक खरीद संकेत उत्पन्न होता है जब ईएमए1 ईएमए2 से ऊपर पार करता है। एक बिक्री संकेत उत्पन्न होता है जब ईएमए1 ईएमए2 से नीचे पार करता है।
झूठे संकेतों को फ़िल्टर करने के लिए, सुपरट्रेंड संकेतक जोड़ा जाता है। सुपरट्रेंड एटीआर और हालिया उच्च-निम्न कीमतों के आधार पर प्रवृत्ति दिशा की गणना करता है। कोड में, सुपरट्रेंड लाइन के ऊपर अपट्रेंड है और नीचे डाउनट्रेंड है।
इसलिए एक खरीद संकेत केवल तब उत्पन्न होता है जब ईएमए 1 एक अपट्रेंड के दौरान ईएमए 2 के ऊपर पार हो जाता है। एक बिक्री संकेत केवल तब उत्पन्न होता है जब ईएमए 1 एक डाउनट्रेंड के दौरान ईएमए 2 के नीचे पार हो जाता है। सुपरट्रेंड ट्रेंड संक्रमण के दौरान झूठे संकेतों को फ़िल्टर करता है।
इसके अतिरिक्त, दीर्घकालिक प्रवृत्ति निर्धारित करने के लिए 200-दिवसीय और 233-दिवसीय चलती औसत जोड़े जाते हैं। संकेत केवल तभी उत्पन्न होते हैं जब दीर्घकालिक और अल्पकालिक प्रवृत्तियां संरेखित होती हैं।
सुपरट्रेंड के साथ संयुक्त दोहरी चलती औसत प्रभावी रूप से रुझानों की पहचान कर सकते हैं और झूठे संकेतों को फ़िल्टर कर सकते हैं।
समायोज्य चलती औसत मापदंडों से रणनीति को विभिन्न बाजार स्थितियों में अनुकूलित किया जा सकता है।
लंबी अवधि के चलती औसत परस्पर विरोधी रुझानों से जोखिमों को रोकते हैं।
एल्गोरिथम ट्रेडिंग के लिए सरल नियम।
दृश्य खरीद/बिक्री संकेत व्यापारिक निर्णयों को स्पष्ट करते हैं।
चलती औसत मोड़ बिंदुओं के आसपास झूठे संकेत उत्पन्न कर सकते हैं। संभावित मोड़ की पहचान करने की आवश्यकता है।
अनुचित पैरामीटर सेटिंग्स से चूक गए रुझान या अत्यधिक झूठे संकेत हो सकते हैं। विभिन्न बाजारों के लिए पैरामीटर को समायोजित करने की आवश्यकता होती है।
उच्च व्यापारिक आवृत्ति से लेनदेन की लागत अधिक होती है। लागतों की निगरानी की आवश्यकता होती है।
फ़िल्टरिंग प्रभावशीलता और विलंबता को संतुलित करने के लिए सुपरट्रेंड मापदंडों को अनुकूलित करने की आवश्यकता है।
लंबी अवधि के औसत संकेत उत्पन्न करने में देरी कर सकते हैं। ट्रेंड परिवर्तन का समय महत्वपूर्ण है।
इष्टतम मापदंडों को खोजने के लिए विभिन्न चलती औसत संयोजनों का परीक्षण करें।
फ़िल्टरिंग और लेगिंग को संतुलित करने के लिए सुपरट्रेंड मापदंडों को अनुकूलित करें।
संकेतों को और अधिक सत्यापित करने के लिए वॉल्यूम जैसे अन्य संकेतक जोड़ें।
संभावित मोड़ बिंदुओं की पहचान करने के लिए भावना और समाचार विश्लेषण को शामिल करें।
गतिशील रूप से मापदंडों का अनुकूलन करने के लिए मशीन लर्निंग का उपयोग करें.
यह रणनीति ट्रेंड की पहचान करने और झूठे संकेतों को फ़िल्टर करने में दोहरी चलती औसत और सुपरट्रेंड की ताकत को जोड़ती है। यह पैरामीटर अनुकूलन और अतिरिक्त सत्यापन के माध्यम से लगातार सुधार किया जा सकता है। कुछ जोखिमों के बावजूद, उन्हें जोखिम नियंत्रण तकनीकों के माध्यम से प्रबंधित किया जा सकता है। यह रणनीति एल्गोरिदमिक ट्रेडिंग के लिए उपयुक्त है।
/*backtest start: 2022-09-21 00:00:00 end: 2023-09-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © bhavikmota //@version=4 strategy("EMA & Supertrend", overlay = true) //length = input(9, minval=1) //ema1 = ema(close, length) //ema2 = ema(ema1, length) //ema3 = ema(ema2, length) //shortest = ema(close, 20) //short = ema(close, 50) //longer = ema(close, 100) //longest = ema(close, 200) //for Ema1 len1 = input(21, minval=1) //src1 = input(close) ema1 = ema(close,len1) plot(ema1, color=color.red, linewidth=1) //for Ema2 len2 = input(55, minval=1) //src2 = input(close) ema2 = ema(close,len2) plot(ema2, color=color.green, linewidth=1) //for Ema3 len3 = input(200, minval=1) //src3 = input(close) ema3 = ema(close,len3) plot(ema3, color=color.blue, linewidth=1) //for Ema4 len4 = input(233, minval=1) //src4 = input(close) ema4 = ema(close,len4) plot(ema4, color=color.black, linewidth=1) Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!") alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!") changeCond = trend != trend[1] alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!") //Trading logic Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover Exitlong = crossunder(close,ema2) // candle closes below supertrend Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover Exitshort = crossover(close,ema2) // candle closes above supertrend //Execution Logic - Placing Order start = timestamp(2008,1,1,0,0) if time>= start strategy.entry("long", strategy.long, when=Enterlong) strategy.close("long",when=Exitlong) //strategy.entry("short",strategy.short,100,when=Entershort) //strategy.close("short",when=Exitshort)