यह रणनीति दोहरी चलती औसत क्रॉसओवर सिद्धांत का उपयोग करती है, ट्रेंड जजमेंट और क्रॉस बैकग्राउंड हाइलाइटिंग के लिए एमएसीडी संकेतक को जोड़ती है, और बाजार में मध्यम अवधि के रुझानों को पकड़ने के उद्देश्य से पैटर्न डॉट्स के साथ प्रविष्टियों की पुष्टि करती है। मुख्य तर्क यह है कि जब चलती औसत की दिशा बदलती है, तो प्रवेश करें, एमएसीडी पृष्ठभूमि रंगों के साथ क्रॉस पॉइंट को अलग करें, और एमएसीडी हिस्टोग्राम रंगों में परिवर्तन द्वारा गति निर्धारित करें।
यह रणनीति तेजी से ईएमए और धीमी ईएमए का उपयोग करके दोहरी चलती औसत का निर्माण करती है, और तेजी से और धीमी रेखाओं के बीच क्रॉसओवर के आधार पर प्रवृत्ति दिशा निर्धारित करती है। यह एमएसीडी और सिग्नल की गणना भी करती है, और एक हिस्टोग्राम के रूप में उनके अंतर को प्लॉट करती है।
कोड के अनुसार, तेज लाइन की लंबाई 12 है और धीमी लाइन की लंबाई 26 है, जो अल्पकालिक और दीर्घकालिक रुझानों का प्रतिनिधित्व करती है। अतिरिक्त चिकनाई के लिए सिग्नल की लंबाई 9 है।
क्रॉसओवर तर्क:
trend_up = macd > संकेतः तेज रेखा धीमी रेखा के ऊपर से गुजरती है, जो अल्पकालिक उभरते रुझान का संकेत देती है
trend_dn = macd < संकेतः धीमी रेखा के नीचे तेजी से रेखा पार करती है, जो अल्पकालिक डाउनट्रेंड का संकेत देती है
क्रॉसओवर बिंदु का पता लगानाः
cross_UP = संकेत[1] >= macd[1] और संकेत < macd: तेज रेखा नीचे से धीमी रेखा को पार करती है
cross_DN = सिग्नल[1] <= macd[1] और सिग्नल > macd: तेज रेखा ऊपर से धीमी रेखा को पार करती है
हिस्टोग्राम रंग परिवर्तन गति शक्ति निर्धारित करता हैः
histA_IsUp = हिस्टोग्राम स्तंभ बढ़ रहा है और 0 से अधिक है, अपट्रेंड में गति मजबूत हो रही है
histA_IsDown = हिस्टोग्राम स्तंभ घट रहा है लेकिन अभी भी 0 से अधिक है, ऊपरी रुझान में गति कमजोर हो रही है
0 के नीचे एक ही तर्क
दोहरी चलती औसत मध्यम अवधि के रुझान को निर्धारित करती है, अल्पकालिक शोर से बचती है
एमएसीडी उच्च लाभप्रदता के लिए अल्पकालिक रुझानों और गति का आकलन करने में सहायता करता है
हिस्टोग्राम रंग परिवर्तन बेहतर प्रविष्टि समय की पहचान करने में मदद करता है
क्रॉसओवर पृष्ठभूमि रंग संकेतों को हाइलाइट करता है
अनुकूलन योग्य चलती औसत अवधि विभिन्न बाजार परिवेशों के अनुरूप है
समायोज्य एमएसीडी पैरामीटर सूचक को अनुकूलित करते हैं
कई प्रविष्टि पुष्टि प्रदान करता हैः प्रवृत्ति, क्रॉसओवर, पैटर्न ब्रेकआउट
अल्पकालिक उतार-चढ़ाव के प्रति संवेदनशील नहीं दोहरे एमए, अल्पकालिक अवसरों को याद कर सकते हैं
गलत पैरामीटर सेटिंग के साथ खराब एमएसीडी प्रभाव, झूठे संकेत उत्पन्न कर सकता है
केवल एमए और एमएसीडी पर आधारित प्रविष्टियों में कुछ अंधे धब्बे हैं
स्टॉप लॉस तंत्र के अभाव में घाटे के विस्तार का जोखिम उत्पन्न होता है
सख्त धन प्रबंधन और स्थिति आकार की कमी
संभावित समाधान:
अल्पावधि स्विंग रेंज और नियंत्रण जोखिम को परिभाषित करने के लिए अन्य संकेतकों को मिलाएं
एमएसीडी मापदंडों का अनुकूलन और विभिन्न बाजारों पर परीक्षण
संकेतों की पुष्टि करने के लिए पैटर्न, गति आदि जोड़ें
हानि के आकार को सीमित करने के लिए स्टॉप लॉस तंत्र स्थापित करें
पूंजी के आधार पर स्थिति के आकार में धन प्रबंधन मॉड्यूल जोड़ें
अधिक बाजार अनुकूलन क्षमता के लिए एमए पैरामीटर संयोजनों का परीक्षण और अनुकूलन
विभिन्न एमए प्रकारों जैसे वीडब्ल्यूएपी, बोलिंगर मिडलाइन आदि का प्रयोग करें।
झूठे ब्रेकआउट से बचने के लिए ट्रेडिंग वॉल्यूम पर विचार करें
ओवरबॉट/ओवरसोल्ड की पुष्टि करने के लिए आरएसआई आदि को शामिल करें
ट्रेलिंग स्टॉप, अस्थिरता स्टॉप आदि जैसे मजबूत स्टॉप लॉस तंत्र बनाएँ।
खाते के आकार के आधार पर स्थिति का आकार शामिल करें
पैरामीटर अनुकूलन के लिए मशीन सीखने पर विचार करें
बेहतर पोर्टफोलियो दृष्टिकोण के लिए रणनीति ब्रह्मांड का विस्तार करें
यह रणनीति दोहरी चलती औसत प्रवृत्ति फ़िल्टरिंग और एमएसीडी गति को एकीकृत करती है, पैटर्न सुविधाओं को जोड़ती है, एक अपेक्षाकृत स्थिर मध्यम अवधि की ट्रेडिंग प्रणाली का निर्माण करती है। मुख्य लाभ अल्पकालिक शोर से बचते हुए प्रमुख प्रवृत्ति को पकड़ने में निहित है। लेकिन ऐसे क्षेत्र भी हैं जिन्हें सुधार किया जा सकता है, जैसे स्टॉप लॉस तंत्र और जोखिम प्रबंधन को जोड़ना। कुल मिलाकर यह एक मूल्यवान वैचारिक उदाहरण के रूप में कार्य करता है, लेकिन लाइव ट्रेडिंग के लिए व्यापक परीक्षण और परिष्करण की आवश्यकता होती है।
/*backtest start: 2022-11-15 00:00:00 end: 2023-11-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Histogram MacD MVP_V2.1", shorttitle="Histogram MacD MVP_2.1") //Plot Inputs res = input.timeframe("", "Indicator TimeFrame") fast_length = input.int(title="Fast Length", defval=12) slow_length = input.int(title="Slow Length", defval=26) src = input.source(title="Source", defval=close) signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9) sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"]) sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"]) // Show Plots T/F show_macd = input.bool(true, title="Show MACD Lines", group="Show Plots?", inline="SP10") show_macd_LW = input.int(3, minval=0, maxval=5, title = "MACD Width", group="Show Plots?", inline="SP11") show_signal_LW= input.int(2, minval=0, maxval=5, title = "Signal Width", group="Show Plots?", inline="SP11") show_Hist = input.bool(true, title="Show Histogram", group="Show Plots?", inline="SP20") show_hist_LW = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP20") show_trend = input.bool(true, title = "Show MACD Lines w/ Trend Color", group="Show Plots?", inline="SP30") show_HB = input.bool(false, title="Show Highlight Price Bars", group="Show Plots?", inline="SP40") show_cross = input.bool(false, title = "Show BackGround on Cross", group="Show Plots?", inline="SP50") show_dots = input.bool(true, title = "Show Circle on Cross", group="Show Plots?", inline="SP60") show_dots_LW = input.int(5, minval=0, maxval=5, title = "-- Width", group="Show Plots?", inline="SP60") //show_trend = input(true, title = "Colors MACD Lines w/ Trend Color", group="Show Plots?", inline="SP5") // MACD Lines colors col_macd = input.color(#FF6D00, "MACD Line ", group="Color Settings", inline="CS1") col_signal = input.color(#2962FF, "Signal Line ", group="Color Settings", inline="CS1") col_trnd_Up = input.color(#4BAF4F, "Trend Up ", group="Color Settings", inline="CS2") col_trnd_Dn = input.color(#B71D1C, "Trend Down ", group="Color Settings", inline="CS2") // Histogram Colors col_grow_above = input.color(#26A69A, "Above Grow", group="Histogram Colors", inline="Hist10") col_fall_above = input.color(#FF5252, "Fall", group="Histogram Colors", inline="Hist10") col_grow_below = input.color(#FF5252, "Below Grow", group="Histogram Colors", inline="Hist20") col_fall_below = input.color(#f8f524, "Fall", group="Histogram Colors", inline="Hist20") // Alerts T/F Inputs alert_Long = input.bool(true, title = "MACD Cross Up", group = "Alerts", inline="Alert10") alert_Short = input.bool(true, title = "MACD Cross Dn", group = "Alerts", inline="Alert10") alert_Long_A = input.bool(false, title = "MACD Cross Up & > 0", group = "Alerts", inline="Alert20") alert_Short_B = input.bool(false, title = "MACD Cross Dn & < 0", group = "Alerts", inline="Alert20") // Calculating fast_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)) slow_ma = request.security(syminfo.tickerid, res, sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)) macd = fast_ma - slow_ma signal = request.security(syminfo.tickerid, res, sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)) hist = macd - signal // MACD Trend and Cross Up/Down conditions trend_up = macd > signal trend_dn = macd < signal cross_UP = signal[1] >= macd[1] and signal < macd cross_DN = signal[1] <= macd[1] and signal > macd cross_UP_A = (signal[1] >= macd[1] and signal < macd) and macd > 0 cross_DN_B = (signal[1] <= macd[1] and signal > macd) and macd < 0 // Condition that changes Color of MACD Line if Show Trend is turned on.. trend_col = show_trend and trend_up ? col_trnd_Up : trend_up ? col_macd : show_trend and trend_dn ? col_trnd_Dn: trend_dn ? col_macd : na //Var Statements for Histogram Color Change var bool histA_IsUp = false var bool histA_IsDown = false var bool histB_IsDown = false var bool histB_IsUp = false histA_IsUp := hist == hist[1] ? histA_IsUp[1] : hist > hist[1] and hist > 0 histA_IsDown := hist == hist[1] ? histA_IsDown[1] : hist < hist[1] and hist > 0 histB_IsDown := hist == hist[1] ? histB_IsDown[1] : hist < hist[1] and hist <= 0 histB_IsUp := hist == hist[1] ? histB_IsUp[1] : hist > hist[1] and hist <= 0 hist_col = histA_IsUp ? col_grow_above : histA_IsDown ? col_fall_above : histB_IsDown ? col_grow_below : histB_IsUp ? col_fall_below :color.silver // Plot Statements //Background Color bgcolor(show_cross and cross_UP ? col_trnd_Up : na, editable=false) bgcolor(show_cross and cross_DN ? col_trnd_Dn : na, editable=false) //Highlight Price Bars barcolor(show_HB and trend_up ? col_trnd_Up : na, title="Trend Up", offset = 0, editable=false) barcolor(show_HB and trend_dn ? col_trnd_Dn : na, title="Trend Dn", offset = 0, editable=false) //Regular Plots plot(show_Hist and hist ? hist : na, title="Histogram", style=plot.style_columns, color=color.new(hist_col ,0),linewidth=show_hist_LW) plot(show_macd and signal ? signal : na, title="Signal", color=color.new(col_signal, 0), style=plot.style_line ,linewidth=show_signal_LW) plot(show_macd and macd ? macd : na, title="MACD", color=color.new(trend_col, 0), style=plot.style_line ,linewidth=show_macd_LW) hline(0, title="0 Line", color=color.new(color.gray, 0), linestyle=hline.style_dashed, linewidth=1, editable=false) plot(show_dots and cross_UP ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false) plot(show_dots and cross_DN ? macd : na, title="Dots", color=color.new(trend_col ,0), style=plot.style_circles, linewidth=show_dots_LW, editable=false) //Alerts if alert_Long and cross_UP alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Up.", alert.freq_once_per_bar_close) if alert_Short and cross_DN alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD Crosses Down.", alert.freq_once_per_bar_close) //Alerts - Stricter Condition - Only Alerts When MACD Crosses UP & MACD > 0 -- Crosses Down & MACD < 0 if alert_Long_A and cross_UP_A alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD > 0 And Crosses Up.", alert.freq_once_per_bar_close) if alert_Short_B and cross_DN_B alert("Symbol = (" + syminfo.tickerid + ") TimeFrame = (" + timeframe.period + ") Current Price (" + str.tostring(close) + ") MACD < 0 And Crosses Down.", alert.freq_once_per_bar_close) if (histA_IsUp) strategy.entry("buy", strategy.long, comment="buy") if (histA_IsDown) strategy.entry("sell", strategy.short, comment="sell")