ডাবল মুভিং এভারেজ ক্রসওভার কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১০-০৭ 15:18:44
ট্যাগঃ

সারসংক্ষেপ

এটি দ্বৈত চলমান গড় ক্রসওভারের উপর ভিত্তি করে একটি ট্রেডিং কৌশল। এটি বাজারের প্রবণতা নির্ধারণ এবং ট্রেডিং সংকেত উত্পন্ন করার জন্য দ্রুত এবং ধীর চলমান গড়ের মধ্যে মিথস্ক্রিয়া ব্যবহার করে। যখন দ্রুত এমএ ধীর এমএ এর উপরে অতিক্রম করে, তখন একটি ক্রয় সংকেত উত্পন্ন হয়। যখন দ্রুত এমএ ধীর এমএ এর নীচে অতিক্রম করে, তখন একটি বিক্রয় সংকেত উত্পন্ন হয়।

নীতি

এই কৌশলটি মূলত চলমান গড়ের প্রবণতা ট্র্যাকিং ক্ষমতা ব্যবহার করে। চলমান গড়গুলি হল ঐতিহাসিক বন্ধের দামের উপর ভিত্তি করে একটি নির্দিষ্ট সময়ের মধ্যে গণনা করা গড় মূল্য। তারা ইনট্রা-ডে ছোটখাট ওঠানামা মসৃণ করতে পারে এবং বৃহত্তর সময়সীমার প্রবণতা প্রতিফলিত করতে পারে। দ্রুত এমএ একটি স্বল্প সময়ের ব্যবহার করে এবং দামের পরিবর্তনে আরও দ্রুত প্রতিক্রিয়া জানাতে পারে, যখন ধীর এমএ একটি দীর্ঘমেয়াদী সময়কাল ব্যবহার করে এবং দীর্ঘমেয়াদী প্রবণতা উপস্থাপন করে। ধীর এমএ এর উপরে দ্রুত এমএ ক্রসিং সংক্ষিপ্ত মেয়াদী গতিবেগকে নির্দেশ করে যা দীর্ঘমেয়াদী প্রবণতাকে ভেঙে দিচ্ছে, একটি আপট্রেন্ড শুরু হচ্ছে। বিপরীতভাবে, ধীর এমএ এর নীচে দ্রুত এমএ ক্রসিং মানে দীর্ঘমেয়াদী প্রবণতা চাপের মধ্যে রয়েছে এবং দাম পড়তে পারে।

এই কৌশলটি বিভিন্ন চক্রের দৈর্ঘ্যের চলমান গড়গুলি সেট করে এবং তাদের ক্রসওভারগুলি ব্যবহার করে ট্রেডিং সংকেত উত্পন্ন করে। যখন স্বল্প-চক্রের এমএ দীর্ঘ-চক্রের এমএ এর উপরে অতিক্রম করে, এটি স্বল্পমেয়াদী গতি বাড়ানোর সংকেত দেয় এবং একটি ক্রয় সংকেত উত্পন্ন করে। যখন স্বল্প-চক্রের এমএ দীর্ঘ-চক্রের এমএ এর নীচে অতিক্রম করে, এটি দুর্বল স্বল্পমেয়াদী প্রবণতা নির্দেশ করে এবং একটি বিক্রয় সংকেত উত্পাদন করে। কৌশল কোডটি প্লট ফাংশনের সাথে এমএগুলি প্লট করে, এমএ ক্রসগুলি নির্ধারণের জন্য প্রবণতা পরিবর্তনশীল ব্যবহার করে এবং ক্রসওভার ঘটলে ক্রয় এবং বিক্রয় সংকেতগুলি আউটপুট করে।

সুবিধা

  • ট্রেন্ড পরিবর্তন নির্ধারণের জন্য এমএ ক্রস ব্যবহার করা একটি সহজ এবং কার্যকর কৌশল
  • এমএগুলি বাজারের গোলমালকে কার্যকরভাবে ফিল্টার করতে পারে এবং হুইপস এড়াতে পারে
  • দ্রুত এবং ধীর ম্যানেজমেন্ট পিরিয়ডের সমন্বয় বিভিন্ন বাজারের অবস্থার সাথে মানিয়ে নিতে পারে
  • দৃশ্যমানভাবে প্রবণতা সংকেত এবং বাঁক পয়েন্ট নির্দেশ করে
  • সহজেই বোঝা যায়, নমনীয় পরামিতি মিটিং

ঝুঁকি

  • ডুয়াল এমএ ক্রসওভারের সময় বিলম্ব রয়েছে এবং বাঁক পয়েন্টগুলি মিস করতে পারে
  • ব্যাপ্তি বাজারের জন্য উপযুক্ত নয়, আরো মিথ্যা সংকেত উত্পাদন করতে পারে
  • এমএ সময়কালের ভুল সেটিংস অতিরিক্ত সংবেদনশীলতা বা অলসতার কারণ হতে পারে
  • প্রবণতা পরিপ্রেক্ষিতে এবং সময়কাল নিশ্চিত করার জন্য অন্যান্য সূচক প্রয়োজন

অপ্টিমাইজেশান নির্দেশাবলী

  • বিভিন্ন এমএ সময়ের প্যারামিটারগুলির লাভজনকতা মূল্যায়ন করুন এবং সর্বোত্তম নির্বাচন করুন
  • অন্যান্য ফিল্টার যোগ করুন যেমন চ্যানেল সূচক, মোমবাতি নিদর্শন ইত্যাদি।
  • স্টপ লস এবং লাভ নেওয়ার জন্য অস্থিরতা সূচক অন্তর্ভুক্ত করুন
  • মেশিন লার্নিং অ্যালগরিদম ব্যবহার করে স্বয়ংক্রিয়ভাবে প্যারামিটার এবং নিয়ম অপ্টিমাইজ করুন
  • স্বয়ংক্রিয় অর্ডার কার্যকরকরণের জন্য অ্যালগরিদমিক ট্রেডিং মডিউল যুক্ত করুন

সংক্ষিপ্তসার

ডুয়াল এমএ ক্রসওভার কৌশলটি চলমান গড়ের প্রবণতা ট্র্যাকিংয়ের ক্ষমতা ব্যবহার করে এবং তাদের ক্রসগুলির উপর ভিত্তি করে সংকেত উত্পন্ন করে। এটি সহজ এবং স্বজ্ঞাত হলেও এর কিছু ত্রুটিও রয়েছে। এটিকে একটি শক্তিশালী সিস্টেমে পরিণত করতে প্যারামিটার টিউনিং, নিশ্চিতকরণ যুক্ত করা, অ্যালগরিদম অপ্টিমাইজেশন ইত্যাদির মাধ্যমে এটি কাটিয়ে উঠতে পারে। সামগ্রিকভাবে, ডুয়াল এমএ কৌশলটি একটি খুব ক্লাসিক এবং সহজেই ব্যবহারযোগ্য প্রবণতা অনুসরণকারী কৌশল।


/*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)

আরো