मल्टी टाइमफ्रेम मूविंग एवरेज क्रॉसओवर रणनीति एक एल्गोरिदमिक ट्रेडिंग रणनीति है जो ट्रेंड की दिशा निर्धारित करने के लिए विभिन्न समय सीमा अवधि के बीच मूविंग एवरेज क्रॉसओवर संकेतों का उपयोग करती है। यह रणनीति अधिक विश्वसनीय ट्रेडिंग संकेत उत्पन्न करने के लिए प्रवृत्ति, गति और अस्थिरता संकेतकों को जोड़ती है।
यह रणनीति बाजार की प्रवृत्ति की दिशा निर्धारित करने के लिए विभिन्न अवधियों में CCI संकेतक की गणना करती है, सोने के क्रॉस और मौत के क्रॉस का पता लगाने के लिए MACD संकेतों के साथ संयुक्त होती है, और अंत में ATR संकेतक का उपयोग कम खरीदने और उच्च बेचने के लिए स्टॉप लॉस/टेक प्रॉफिट स्तर निर्धारित करने के लिए करती है।
विशेष रूप से, यह पहले तेजी या मंदी के रुझानों का न्याय करने के लिए 20 अवधि के सीसीआई की गणना करता है। फिर यह जांचता है कि क्या ट्रेडिंग संकेतों की पहचान करने के लिए एमएसीडी लाइनें पार हो रही हैं। इसके बाद, एटीआर का उपयोग मुनाफे में ताला लगाने के लिए ट्रेलिंग स्टॉप उत्पन्न करने के लिए किया जाता है। अंत में, सभी संकेतों को प्रवेश और निकास संकेत उत्पन्न करने के लिए समेकित किया जाता है।
कई संकेतकों का संयोजन संकेत की सटीकता में सुधार करता है
सीसीआई, एमएसीडी और एटीआर के संयोजन से ट्रेडिंग संकेतों की विश्वसनीयता बढ़ जाती है क्योंकि वे सामूहिक रूप से रुझान, गति और अस्थिरता का आकलन करते हैं।
बहु-समय-सीमा विश्लेषण बाजार की लय को पकड़ता है
लंबी अवधि का सीसीआई समग्र प्रवृत्ति को समझता है, जबकि उच्च आवृत्ति वाला एमएसीडी स्थानीय मोड़ बिंदुओं का पता लगाता है, जिससे रणनीति को बाजार के बड़े उतार-चढ़ावों पर लाभ उठाने की अनुमति मिलती है।
एटीआर पीछे रुकने नियंत्रण जोखिम प्रभावी ढंग से
एटीआर पर आधारित स्टॉप लॉस बाजार की अस्थिरता के अनुकूल हो सकता है, जबकि इसकी ट्रेलिंग सुविधा बाजार के अनुकूल होने पर लाभ में और अधिक लॉक करती है।
सीमित अनुकूलन स्थान
अधिकांश मापदंडों में संकीर्ण परिशुद्धता समायोजन स्थान होता है, जिससे प्रदर्शन की बाधा आसानी से पहुंच जाती है।
बढ़ी हुई कंप्यूटिंग लोड
एक साथ चलने वाले कई संकेतक कंप्यूटिंग लोड को बढ़ा सकते हैं, जिससे उच्च आवृत्ति व्यापार में देरी हो सकती है।
लगातार संकेत, सीमित जोखिम नियंत्रण
सिग्नल अक्सर हो सकते हैं, जबकि जोखिम नियंत्रण मुख्य रूप से एटीआर ट्रैलिंग स्टॉप पर निर्भर करता है, जिसमें चरम चाल के खिलाफ सीमाएं हैं।
अधिक कुशल पैरामीटर ट्यूनिंग के लिए मशीन लर्निंग लागू करें
बेजियन अनुकूलन, आनुवंशिक एल्गोरिदम आदि अधिक बुद्धिमान और कुशल पैरामीटर ट्यूनिंग को सक्षम कर सकते हैं।
अनुकूलन क्षमता में सुधार के लिए कार्यात्मक संकेतक जोड़ें
अन्य संकेतकों जैसे अस्थिरता, मात्रा, भावना को शामिल करने से रणनीति अधिक मजबूत और लचीली हो सकती है।
बेहतर स्थिरता के लिए जोखिम प्रबंधन को मजबूत करना
अधिक वैज्ञानिक स्टॉप लॉस नियमों को डिजाइन किया जा सकता है, और स्थिति आकार जैसे अतिरिक्त मॉड्यूल चरम घटनाओं के खिलाफ सुरक्षा में मदद कर सकते हैं।
मल्टी टाइमफ्रेम मूविंग एवरेज क्रॉसओवर रणनीति CCI, MACD और ATR की शक्तियों का उपयोग विश्वसनीय प्रवृत्ति कैप्चर और कुशल जोखिम नियंत्रण प्राप्त करने के लिए करती है। यह सटीक संकेत उत्पन्न करने, बाजार की लय को समझने और जोखिम का प्रबंधन करने के लिए प्रवृत्ति, गति और अस्थिरता को ध्यान में रखती है। हालांकि पैरामीटर ट्यूनिंग, कंप्यूटिंग लोड और जोखिम नियंत्रण जैसे कुछ पहलुओं में और सुधार किया जा सकता है, फिर भी यह एक ठोस एल्गोरिथम ट्रेडिंग सिस्टम है। मशीन लर्निंग, अधिक संकेतक और बेहतर जोखिम प्रबंधन का उपयोग करके कुछ सुधारों के साथ, इसका प्रदर्शन नए स्तर तक पहुंच सकता है।
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('smplondonclinic Strategy', shorttitle='SMPLC Strategy', overlay=true, pyramiding = 0, process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) direction = input.string(title='Entry Direction', defval='Long', options=['Long', 'Short', 'Both'],group = "Strategy Entry Direction") TPPerc = input.float(title='Take Profit (%)', minval=0.0, step=0.1, defval=0.5, group='Strategy TP & SL') SLPerc = input.float(title='Stop Loss (%)', minval=0.0, step=0.1, defval=0.5, group='Strategy TP & SL') period = input(20, 'CCI period',group = "TREND MAGIC") coeff = input(1, 'ATR Multiplier',group = "TREND MAGIC") AP = input(5, 'ATR Period',group = "TREND MAGIC") ATR = ta.sma(ta.tr, AP) srctm = close upT = low - ATR * coeff downT = high + ATR * coeff MagicTrend = 0.0 MagicTrend := ta.cci(srctm, period) >= 0 ? upT < nz(MagicTrend[1]) ? nz(MagicTrend[1]) : upT : downT > nz(MagicTrend[1]) ? nz(MagicTrend[1]) : downT color1 = ta.cci(srctm, period) >= 0 ? #0022FC : #FC0400 plot(MagicTrend, color=color1, linewidth=3) tmb = ta.cci(srctm, period) >= 0 and close>MagicTrend tms = ta.cci(srctm, period) <= 0 and close<MagicTrend //MACD res = input.timeframe("", "Indicator TimeFrame", group = "MACD") fast_length = input.int(title="Fast Length", defval=12, group = "MACD") slow_length = input.int(title="Slow Length", defval=26, group = "MACD") src = input.source(title="Source", defval=close, group = "MACD") signal_length = input.int(title="Signal Smoothing", minval = 1, maxval = 999, defval = 9, group = "MACD") sma_source = input.string(title="Oscillator MA Type", defval="EMA", options=["SMA", "EMA"], group = "MACD") sma_signal = input.string(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"], group = "MACD") 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 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 //UT Bot srcut = close showut = input.bool(false, 'Show UT Bot Labels', group = "UT BOT") keyvalue = input.float(2, title='Key Vaule. \'This changes the sensitivity\'', step=.5, group = "UT BOT") atrperiod = input(7, title='ATR Period', group = "UT BOT") xATR = ta.atr(atrperiod) nLoss = keyvalue * xATR xATRTrailingStop = 0.0 iff_1 = srcut > nz(xATRTrailingStop[1], 0) ? srcut - nLoss : srcut + nLoss iff_2 = srcut < nz(xATRTrailingStop[1], 0) and srcut[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), srcut + nLoss) : iff_1 xATRTrailingStop := srcut > nz(xATRTrailingStop[1], 0) and srcut[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), srcut - nLoss) : iff_2 pos = 0 iff_3 = srcut[1] > nz(xATRTrailingStop[1], 0) and srcut < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos := srcut[1] < nz(xATRTrailingStop[1], 0) and srcut > nz(xATRTrailingStop[1], 0) ? 1 : iff_3 xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue //plot(xATR, color=xcolor, title='Trailing Stop') buy = ta.crossover(srcut, xATRTrailingStop) sell = ta.crossunder(srcut, xATRTrailingStop) barcolor = srcut > xATRTrailingStop plotshape(showut ? buy:na, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(showut ? sell:na, title='Sell', text='Sell', style=shape.labeldown, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) //barcolor(barcolor ? color.green : color.red) goLong = buy and tmb and cross_UP goShort = sell and tms and cross_DN plotshape(goLong, location=location.bottom, style=shape.triangleup, color=color.lime, size=size.small) plotshape(goShort, location=location.top, style=shape.triangledown, color=color.red, size=size.small) percentAsPoints(pcnt) => strategy.position_size != 0 ? math.round(pcnt / 100.0 * strategy.position_avg_price / syminfo.mintick) : float(na) percentAsPrice(pcnt) => strategy.position_size != 0 ? (pcnt / 100.0 + 1.0) * strategy.position_avg_price : float(na) current_position_size = math.abs(strategy.position_size) initial_position_size = math.abs(ta.valuewhen(strategy.position_size[1] == 0.0, strategy.position_size, 0)) TP = strategy.position_avg_price + percentAsPoints(TPPerc) * syminfo.mintick * strategy.position_size / math.abs(strategy.position_size) SL = strategy.position_avg_price - percentAsPoints(SLPerc) * syminfo.mintick * strategy.position_size / math.abs(strategy.position_size) var long = false var short = false if direction == 'Long' long := goLong short := false if direction == 'Short' short := goShort long := false if direction == 'Both' long := goLong short := goShort if long and strategy.opentrades == 0 strategy.entry(id='Long', direction=strategy.long) if short and strategy.opentrades == 0 strategy.entry(id='Short', direction=strategy.short) if strategy.position_size > 0 strategy.exit('TPSL', from_entry='Long', qty=initial_position_size, limit=TP, stop=SL) if strategy.position_size < 0 strategy.exit('TPSL2', from_entry='Short', qty=initial_position_size, limit=TP, stop=SL)