এই কৌশলটি 21 তম এবং 55 তম চলমান গড়ের ক্রসগুলির উপর ভিত্তি করে ক্রয় এবং বিক্রয় সংকেত উত্পন্ন করে এবং সুপারট্রেন্ডিং সূচকগুলির সাথে মিলিত হয়ে মিথ্যা সংকেতগুলি ফিল্টার করার জন্য একটি প্রবণতা-অনুসরণ কৌশল।
কোডটি প্রথমে 21 তম লাইন ((EMA1) এবং 55 তম লাইন ((EMA2) এর চলমান গড় লাইনটি সংজ্ঞায়িত করে। EMA1 এ EMA2 অতিক্রম করার সময় একটি কেনার সংকেত উত্পন্ন হয়; EMA1 এর নীচে EMA2 অতিক্রম করার সময় একটি বিক্রয় সংকেত উত্পন্ন হয়।
মিথ্যা সংকেতগুলি ফিল্টার করার জন্য, কোডটিতে একটি সুপার ট্রেন্ডিং সূচক যুক্ত করা হয়েছে। সুপার ট্রেন্ডিং সূচকটি গড় বাস্তব তরঙ্গের ATR এর উপর ভিত্তি করে, দামের সাম্প্রতিক উচ্চতা এবং নিম্নের সাথে মিলিত হয়ে ট্রেন্ডের দিকনির্দেশের জন্য। কোডটি যখন দামগুলি আপট্রেন্ডের উপরে থাকে এবং নীচের ট্র্যাকের নীচে থাকে তখন এটি একটি পতনশীল প্রবণতা হিসাবে সেট করে।
এইভাবে, কেবলমাত্র ট্রেন্ডটি উঠার সময় EMA1 এ EMA2 কেটে কেনার সংকেত উত্পন্ন হয়; কেবলমাত্র ট্রেন্ডটি নেমে যাওয়ার সময় EMA1 এর নীচে EMA2 কেটে বিক্রি করার সংকেত উত্পন্ন হয়। সুপার ট্রেন্ড সূচক ফিল্টারিং দ্বারা, প্রবণতা পরিবর্তনের সময় উত্পন্ন মিথ্যা সংকেত এড়ানো যায়।
এছাড়াও, দীর্ঘমেয়াদী প্রবণতা নির্ধারণের জন্য কোডে 200 এবং 233 দিনের লাইন যুক্ত করা হয়েছে, যা দীর্ঘমেয়াদী প্রবণতার দিকনির্দেশের সাথে সামঞ্জস্য হলেই ট্রেডিং সিগন্যাল তৈরি করে।
ডাবল মুভিং গড় লাইন সুপার ট্রেন্ডিং সূচকগুলির সাথে মিলিত হয়, যা কার্যকরভাবে প্রবণতা দিক সনাক্ত করতে এবং মিথ্যা সংকেতগুলি ফিল্টার করতে পারে।
মুভিং এভারেজ প্যারামিটারগুলিকে সামঞ্জস্য করে, কৌশলটির সংবেদনশীলতাকে বিভিন্ন বাজারের অবস্থার সাথে খাপ খাইয়ে নেওয়া যায়।
দীর্ঘমেয়াদী গড় বিচার যোগ করা, স্বল্পমেয়াদী প্রবণতা অসঙ্গতি থেকে ঝুঁকি এড়াতে পারে।
নিয়মগুলি পরিষ্কার এবং সহজেই বোঝা যায়, প্যারামিটারগুলি সহজেই সামঞ্জস্য করা যায়, যা পরিমাণগত লেনদেনের জন্য উপযুক্ত।
ক্রেতা ও বিক্রেতার সংকেত দৃশ্যমান, কাজটি পরিষ্কার।
ডাবল মুভিং গড়রেখার কৌশল প্রবণতা পাল্টানোর সময়ে ভুল সংকেত তৈরি করতে পারে। সম্ভাব্য পাল্টান চিহ্নিত করতে সতর্কতা অবলম্বন করা প্রয়োজন।
চলমান গড়ের পরামিতিগুলি ভুলভাবে সেট করা ট্রেন্ড মিস করতে পারে বা খুব বেশি ভুল সংকেত তৈরি করতে পারে। বিভিন্ন বাজারের জন্য পরামিতিগুলি সামঞ্জস্য করতে হবে।
লেনদেনের ঘনত্ব বেশি হতে পারে এবং লেনদেনের খরচ নিয়ন্ত্রণে মনোযোগ দিতে হবে।
সুপারট্রেন্ডিং সূচকের প্যারামিটারগুলিকে অপ্টিমাইজ করা দরকার, অন্যথায় সঠিক সংকেতগুলি ফিল্টার করা বা ভুল সংকেতগুলি সংরক্ষণ করা যেতে পারে।
দীর্ঘমেয়াদী গড় লাইন সিদ্ধান্তটি একটি বিলম্বিত সংকেত তৈরি করতে পারে, এবং প্রবণতা পরিবর্তনের সময়কে যুক্তিসঙ্গতভাবে উপলব্ধি করা প্রয়োজন।
বিভিন্ন চলমান গড়রেখার সমন্বয় পরীক্ষা করে সর্বোত্তম প্যারামিটার খুঁজুন।
সুপার ট্রেন্ডিং সূচকগুলির প্যারামিটারগুলিকে অপ্টিমাইজ করুন, ফিল্টারিং প্রভাব এবং বিলম্বের ভারসাম্য বজায় রাখুন।
অন্যান্য সহায়ক সূচক যোগ করুন, যেমন লেনদেনের পরিমাণ সূচক, আরও প্রমাণীকরণ সংকেত।
এই পয়েন্টগুলোকে আবেগ, খবরের দিক এবং অন্যান্য বিষয়ের সাথে যুক্ত করে সম্ভাব্য বিপর্যয় চিহ্নিত করা হয়।
মেশিন লার্নিং পদ্ধতি ব্যবহার করে ডায়নামিক অপ্টিমাইজেশান প্যারামিটার
এই কৌশলটি ডাবল মুভিং গড় এবং সুপার ট্রেন্ডিং সূচকগুলির সুবিধাগুলিকে একত্রিত করে, যা প্রবণতা আবিষ্কার করতে এবং ত্রুটিযুক্ত সংকেতগুলি ফিল্টার করতে পারে। প্যারামিটার অপ্টিমাইজেশন এবং সহায়ক সূচক যাচাইয়ের মাধ্যমে কৌশলটির কার্যকারিতা ক্রমাগত উন্নত করা যেতে পারে। যদিও কিছু ঝুঁকি রয়েছে তবে এটি ঝুঁকি ব্যবস্থাপনার মাধ্যমে নিয়ন্ত্রণ করা যেতে পারে। এই কৌশলটি পরিমাণগত পদ্ধতিতে প্রক্রিয়াজাতকরণ ব্যবসায়ের জন্য উপযুক্ত।
/*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)