এটি দ্বৈত চলমান গড় ক্রসওভারের উপর ভিত্তি করে একটি ট্রেডিং কৌশল। এটি বাজারের প্রবণতা নির্ধারণ এবং ট্রেডিং সংকেত উত্পন্ন করার জন্য দ্রুত এবং ধীর চলমান গড়ের মধ্যে মিথস্ক্রিয়া ব্যবহার করে। যখন দ্রুত এমএ ধীর এমএ এর উপরে অতিক্রম করে, তখন একটি ক্রয় সংকেত উত্পন্ন হয়। যখন দ্রুত এমএ ধীর এমএ এর নীচে অতিক্রম করে, তখন একটি বিক্রয় সংকেত উত্পন্ন হয়।
এই কৌশলটি মূলত চলমান গড়ের প্রবণতা ট্র্যাকিং ক্ষমতা ব্যবহার করে। চলমান গড়গুলি হল ঐতিহাসিক বন্ধের দামের উপর ভিত্তি করে একটি নির্দিষ্ট সময়ের মধ্যে গণনা করা গড় মূল্য। তারা ইনট্রা-ডে ছোটখাট ওঠানামা মসৃণ করতে পারে এবং বৃহত্তর সময়সীমার প্রবণতা প্রতিফলিত করতে পারে। দ্রুত এমএ একটি স্বল্প সময়ের ব্যবহার করে এবং দামের পরিবর্তনে আরও দ্রুত প্রতিক্রিয়া জানাতে পারে, যখন ধীর এমএ একটি দীর্ঘমেয়াদী সময়কাল ব্যবহার করে এবং দীর্ঘমেয়াদী প্রবণতা উপস্থাপন করে। ধীর এমএ এর উপরে দ্রুত এমএ ক্রসিং সংক্ষিপ্ত মেয়াদী গতিবেগকে নির্দেশ করে যা দীর্ঘমেয়াদী প্রবণতাকে ভেঙে দিচ্ছে, একটি আপট্রেন্ড শুরু হচ্ছে। বিপরীতভাবে, ধীর এমএ এর নীচে দ্রুত এমএ ক্রসিং মানে দীর্ঘমেয়াদী প্রবণতা চাপের মধ্যে রয়েছে এবং দাম পড়তে পারে।
এই কৌশলটি বিভিন্ন চক্রের দৈর্ঘ্যের চলমান গড়গুলি সেট করে এবং তাদের ক্রসওভারগুলি ব্যবহার করে ট্রেডিং সংকেত উত্পন্ন করে। যখন স্বল্প-চক্রের এমএ দীর্ঘ-চক্রের এমএ এর উপরে অতিক্রম করে, এটি স্বল্পমেয়াদী গতি বাড়ানোর সংকেত দেয় এবং একটি ক্রয় সংকেত উত্পন্ন করে। যখন স্বল্প-চক্রের এমএ দীর্ঘ-চক্রের এমএ এর নীচে অতিক্রম করে, এটি দুর্বল স্বল্পমেয়াদী প্রবণতা নির্দেশ করে এবং একটি বিক্রয় সংকেত উত্পাদন করে। কৌশল কোডটি প্লট ফাংশনের সাথে এমএগুলি প্লট করে, এমএ ক্রসগুলি নির্ধারণের জন্য প্রবণতা পরিবর্তনশীল ব্যবহার করে এবং ক্রসওভার ঘটলে ক্রয় এবং বিক্রয় সংকেতগুলি আউটপুট করে।
ডুয়াল এমএ ক্রসওভার কৌশলটি চলমান গড়ের প্রবণতা ট্র্যাকিংয়ের ক্ষমতা ব্যবহার করে এবং তাদের ক্রসগুলির উপর ভিত্তি করে সংকেত উত্পন্ন করে। এটি সহজ এবং স্বজ্ঞাত হলেও এর কিছু ত্রুটিও রয়েছে। এটিকে একটি শক্তিশালী সিস্টেমে পরিণত করতে প্যারামিটার টিউনিং, নিশ্চিতকরণ যুক্ত করা, অ্যালগরিদম অপ্টিমাইজেশন ইত্যাদির মাধ্যমে এটি কাটিয়ে উঠতে পারে। সামগ্রিকভাবে, ডুয়াল এমএ কৌশলটি একটি খুব ক্লাসিক এবং সহজেই ব্যবহারযোগ্য প্রবণতা অনুসরণকারী কৌশল।
/*backtest start: 2023-01-01 00:00:00 end: 2023-04-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_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/ // © KivancOzbilgic //@version=4 strategy("pomila", overlay=true) 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=false) highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) barcoloring = input(title="Bar Coloring 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) FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 999) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 999) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) window() => time >= start and time <= finish ? true : false longCondition = buySignal if (longCondition) strategy.entry("BUY", strategy.long, when = window()) shortCondition = sellSignal if (shortCondition) strategy.entry("SELL", strategy.short, when = window()) buy1= barssince(buySignal) sell1 = barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na barcolor(barcoloring ? color1 : na)