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

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-২৮ 15:12:50
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি ২১ দিনের এবং ৫৫ দিনের চলমান গড়ের ক্রসওভারের উপর ভিত্তি করে ট্রেডিং সংকেত তৈরি করে এবং মিথ্যা সংকেতগুলি ফিল্টার করতে সুপার ট্রেন্ড সূচক ব্যবহার করে। এটি একটি প্রবণতা অনুসরণকারী কৌশল।

কৌশলগত যুক্তি

কোডটি প্রথমে 21-দিনের ইএমএ (ইএমএ 1) এবং 55-দিনের ইএমএ (ইএমএ 2) সংজ্ঞায়িত করে। যখন ইএমএ 1 ইএমএ 2 এর উপরে অতিক্রম করে তখন একটি ক্রয় সংকেত উত্পন্ন হয়। যখন ইএমএ 1 ইএমএ 2 এর নীচে অতিক্রম করে তখন একটি বিক্রয় সংকেত উত্পন্ন হয়।

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

সুতরাং একটি ক্রয় সংকেত কেবলমাত্র যখন ইএমএ 1 একটি আপট্রেন্ডের সময় ইএমএ 2 এর উপরে অতিক্রম করে তখনই উত্পন্ন হয়। একটি বিক্রয় সংকেত কেবল তখনই উত্পন্ন হয় যখন ইএমএ 1 একটি ডাউনট্রেন্ডের সময় ইএমএ 2 এর নীচে অতিক্রম করে। সুপারট্রেন্ড প্রবণতা রূপান্তরগুলির সময় মিথ্যা সংকেতগুলি ফিল্টার করে।

এছাড়াও, দীর্ঘমেয়াদী প্রবণতা নির্ধারণের জন্য 200 দিন এবং 233 দিনের চলমান গড় যোগ করা হয়। দীর্ঘমেয়াদী এবং স্বল্পমেয়াদী প্রবণতা সারিবদ্ধ হলেই সংকেত তৈরি করা হয়।

সুবিধা

  1. সুপারট্রেন্ডের সাথে যুক্ত ডাবল মুভিং মিডিয়ায় ট্রেন্ডগুলি কার্যকরভাবে সনাক্ত করা যায় এবং মিথ্যা সংকেতগুলি ফিল্টার করা যায়।

  2. সামঞ্জস্যযোগ্য চলমান গড় পরামিতিগুলি কৌশলটিকে বিভিন্ন বাজারের অবস্থার সাথে মানিয়ে নিতে পারে।

  3. দীর্ঘমেয়াদী চলমান গড়গুলি বিপরীতমুখী প্রবণতা থেকে ঝুঁকি রোধ করে।

  4. অ্যালগরিদমিক ট্রেডিংয়ের জন্য সহজ নিয়ম।

  5. ভিজ্যুয়াল ক্রয়/বিক্রয় সংকেতগুলি ট্রেডিং সিদ্ধান্তগুলি পরিষ্কার করে।

ঝুঁকি

  1. চলমান গড়গুলি বাঁক পয়েন্টগুলির চারপাশে মিথ্যা সংকেত তৈরি করতে পারে। সম্ভাব্য বাঁকগুলি সনাক্ত করা দরকার।

  2. অনুপযুক্ত প্যারামিটার সেটিংগুলি অনুপস্থিত প্রবণতা বা অত্যধিক মিথ্যা সংকেত সৃষ্টি করতে পারে। বিভিন্ন বাজারের জন্য প্যারামিটারগুলি সামঞ্জস্য করতে হবে।

  3. উচ্চ ট্রেডিং ফ্রিকোয়েন্সির ফলে লেনদেনের খরচ বেশি হয়। খরচ পর্যবেক্ষণ করা প্রয়োজন।

  4. সুপারট্রেন্ড প্যারামিটারগুলিকে ফিল্টারিং কার্যকারিতা এবং বিলম্বের ভারসাম্য বজায় রাখতে অপ্টিমাইজ করা দরকার।

  5. দীর্ঘমেয়াদী গড়গুলি সংকেত উত্পাদন করতে বিলম্ব করতে পারে। প্রবণতা পরিবর্তনের সময়কাল অত্যন্ত গুরুত্বপূর্ণ।

উন্নতি

  1. সর্বোত্তম পরামিতি খুঁজে পেতে বিভিন্ন চলমান গড় সংমিশ্রণ পরীক্ষা করুন।

  2. ফিল্টারিং এবং লেগিংয়ের ভারসাম্য বজায় রাখতে সুপারট্রেন্ড প্যারামিটারগুলি অপ্টিমাইজ করুন।

  3. সিগন্যালগুলিকে আরও বৈধ করার জন্য ভলিউমের মতো অন্যান্য সূচক যুক্ত করুন।

  4. সম্ভাব্য পরিবর্তন চিহ্নিত করার জন্য আবেগ এবং সংবাদ বিশ্লেষণ অন্তর্ভুক্ত করুন।

  5. মেশিন লার্নিং ব্যবহার করে গতিশীলভাবে পরামিতি অপ্টিমাইজ করুন।

সিদ্ধান্ত

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


/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"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/
// © bhavikmota

//@version=4
strategy("EMA & Supertrend", overlay = true)

//length = input(9, minval=1)
//ema1 = ema(close, length)
//ema2 = ema(ema1, length)
//ema3 = ema(ema2, length)

//shortest = ema(close, 20)
//short = ema(close, 50)
//longer = ema(close, 100)
//longest = ema(close, 200)


//for Ema1
len1 = input(21, minval=1)
//src1 = input(close)
ema1 = ema(close,len1)
plot(ema1, color=color.red, linewidth=1)

//for Ema2
len2 = input(55, minval=1)
//src2 = input(close)
ema2 = ema(close,len2)
plot(ema2, color=color.green, linewidth=1)

//for Ema3
len3 = input(200, minval=1)
//src3 = input(close)
ema3 = ema(close,len3)
plot(ema3, color=color.blue, linewidth=1)

//for Ema4
len4 = input(233, minval=1)
//src4 = input(close)
ema4 = ema(close,len4)
plot(ema4, color=color.black, linewidth=1)


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=true)
highlighting = input(title="Highlighter 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)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


//Trading logic

Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover
Exitlong = crossunder(close,ema2) // candle closes below supertrend

Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover
Exitshort = crossover(close,ema2) // candle closes above supertrend

//Execution Logic - Placing Order

start = timestamp(2008,1,1,0,0)

if time>= start
    strategy.entry("long", strategy.long, when=Enterlong)
    strategy.close("long",when=Exitlong)
//strategy.entry("short",strategy.short,100,when=Entershort)
//strategy.close("short",when=Exitshort)

আরো