यह रणनीति समय अवधि में गतिशील प्रवृत्ति निर्णय को महसूस करने के लिए एमएसीडी संकेतक के चलती औसत के संयोजन पर आधारित है। यह एक अधिक क्लासिक प्रवृत्ति ट्रैकिंग रणनीति से संबंधित है। यह मुख्य रूप से एमएसीडी के तेजी से और धीमी गति से चलती औसत के बीच अंतर और इसके संकेत रेखा के बीच संबंध के माध्यम से वर्तमान प्रवृत्ति दिशा और ताकत का न्याय करता है। साथ ही, सटीकता में सुधार और गतिशील रूप से पदों को समायोजित करने के लिए क्रॉस-पीरियड निर्णय पेश किया जाता है।
यह एमएसीडी चलती औसत संयोजन क्रॉस-पीरियड गतिशील प्रवृत्ति रणनीति क्लासिक संकेतकों और बहु-समय फ्रेम संदर्भों के लाभों को एकीकृत करती है। पैरामीटर अनुकूलन और संयोजन परीक्षण के माध्यम से, एक अपेक्षाकृत स्थिर और लाभदायक प्रवृत्ति ट्रैकिंग रणनीति का निर्माण किया जा सकता है। यह वास्तविक धन परीक्षण और अनुप्रयोग के लायक है।
/*backtest start: 2023-02-12 00:00:00 end: 2024-02-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@temelbulut //@version=5 strategy('MACD Strategy %80', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=50) fastLength = input.int(title='MACD Fast Length', defval=12, minval=1) slowLength = input.int(title='MACD Slow Length', defval=26, minval=1) signalLength = input.int(title='MACD Signal Length', defval=9, minval=1) crossscore = input(title='Cross (buy/sell) Score', defval=10.) indiside = input(title='indicator Direction Score', defval=8) histside = input(title='Histogram Direction Score', defval=2) shotsl = input(title='Show Stop Loss Line', defval=false) Mult = input.float(title='Stop Loss Factor', defval=1.2, minval=0.1, maxval=100) Period = input.int(title='Stop Loss Period', defval=10, minval=1, maxval=100) lookaheadi = input(title='Lookahead', defval=true) HTF = timeframe.period == '1' ? '5' : timeframe.period == '3' ? '15' : timeframe.period == '5' ? '15' : timeframe.period == '15' ? '60' : timeframe.period == '30' ? '60' : timeframe.period == '45' ? '60' : timeframe.period == '60' ? '240' : timeframe.period == '120' ? '240' : timeframe.period == '180' ? '240' : timeframe.period == '240' ? 'D' : timeframe.period == 'D' ? 'W' : 'W' calc = timeframe.period == '1' ? 5 : timeframe.period == '3' ? 5 : timeframe.period == '5' ? 3 : timeframe.period == '15' ? 4 : timeframe.period == '30' ? 4 : timeframe.period == '45' ? 4 : timeframe.period == '60' ? 4 : timeframe.period == '120' ? 3 : timeframe.period == '180' ? 3 : timeframe.period == '240' ? 6 : timeframe.period == 'D' ? 5 : 1 count() => indi = ta.ema(close, fastLength) - ta.ema(close, slowLength) signal = ta.ema(indi, signalLength) Anlyse = 0.0 // direction of indi and histogram hist = indi - signal Anlyse := indi > indi[1] ? hist > hist[1] ? indiside + histside : hist == hist[1] ? indiside : indiside - histside : 0 Anlyse += (indi < indi[1] ? hist < hist[1] ? -(indiside + histside) : hist == hist[1] ? -indiside : -(indiside - histside) : 0) Anlyse += (indi == indi[1] ? hist > hist[1] ? histside : hist < hist[1] ? -histside : 0 : 0) // cross now earlier ? countcross = indi >= signal and indi[1] < signal[1] ? crossscore : indi <= signal and indi[1] > signal[1] ? -crossscore : 0. countcross += nz(countcross[1]) * 0.6 Anlyse += countcross nz(Anlyse) Anlys = count() AnlysHfrm = lookaheadi ? request.security(syminfo.tickerid, HTF, count(), lookahead=barmerge.lookahead_on) : request.security(syminfo.tickerid, HTF, count(), lookahead=barmerge.lookahead_off) Result = (AnlysHfrm * calc + Anlys) / (calc + 1) longCondition = ta.change(Result) != 0 and Result > 0 if longCondition strategy.entry('MACD Long', strategy.long,alert_message = 'MACD Long') shortCondition = ta.change(Result) != 0 and Result < 0 if shortCondition strategy.entry('MACD Short', strategy.short,alert_message = 'MACD Short') countstop(pos) => Upt = hl2 - Mult * ta.atr(Period) Dnt = hl2 + Mult * ta.atr(Period) TUp = 0. TDown = 0. TUp := close[1] > TUp[1] ? math.max(Upt, TUp[1]) : Upt TDown := close[1] < TDown[1] ? math.min(Dnt, TDown[1]) : Dnt tslmtf = pos == 1 ? TUp : TDown tslmtf pos = longCondition ? 1 : -1 stline = 0. countstop__1 = countstop(pos) security_1 = request.security(syminfo.tickerid, HTF, countstop__1) stline := ta.change(time(HTF)) != 0 or longCondition or shortCondition ? security_1 : nz(stline[1]) plot(stline, color=shotsl ? color.rgb(148, 169, 18) : na, style=plot.style_line, linewidth=2, title='Stop Loss')