EMA মুভিং এভারেজের উপর ভিত্তি করে ট্রেন্ড অনুসরণ কৌশল


সৃষ্টির তারিখ: 2024-02-05 14:21:18 অবশেষে সংশোধন করুন: 2024-02-05 14:21:18
অনুলিপি: 0 ক্লিকের সংখ্যা: 629
1
ফোকাস
1617
অনুসারী

EMA মুভিং এভারেজের উপর ভিত্তি করে ট্রেন্ড অনুসরণ কৌশল

ওভারভিউ

এই কৌশলটি 3 টি ভিন্ন সময়ের EMA গড়ের উপর ভিত্তি করে এবং দামগুলি EMA গড়ের উপরে রয়েছে কিনা তা বিচার করে বর্তমান প্রবণতার দিকটি বিচার করে। স্বল্পমেয়াদী ইএমএ লাইনে দীর্ঘমেয়াদী ইএমএ লাইনটি অতিক্রম করার সময় একটি কেনার সংকেত উত্পন্ন হয়; দীর্ঘমেয়াদী ইএমএ লাইনের নীচে দীর্ঘমেয়াদী ইএমএ লাইনটি অতিক্রম করার সময় একটি বিক্রয় সংকেত উত্পন্ন হয়। এই কৌশলটি প্রবণতা অনুসরণ করে এবং প্রবণতা পরিবর্তনের সময় সমতল হয়।

কৌশল নীতি

এই কৌশলটি তিনটি ইএমএ গড় ব্যবহার করে, যথা ১০ দিন, ২০ দিন এবং ৫০ দিন। এর বিচারক নিয়ম হলঃ

  1. যখন 10 তম ইএমএ লাইন এবং 20 তম ইএমএ লাইন একই সাথে 50 তম ইএমএ লাইনের উপরে থাকে, তখন এটি একটি উত্থান হিসাবে সংজ্ঞায়িত করা হয়;

  2. যখন 10 তম ইএমএ লাইন এবং 20 তম ইএমএ লাইন একই সাথে 50 তম ইএমএ লাইনের নীচে থাকে, তখন এটি একটি নিম্নমুখী প্রবণতা হিসাবে সংজ্ঞায়িত করা হয়;

  3. স্বল্পমেয়াদী ইএমএ লাইন (১০ দিন লাইন এবং ২০ দিন লাইন) দীর্ঘমেয়াদী ইএমএ লাইন (৫০ দিন লাইন) অতিক্রম করার সময় একটি ক্রয় সংকেত উৎপন্ন হয়;

  4. যখন স্বল্পমেয়াদী ইএমএ লাইন (১০ দিনের লাইন এবং ২০ দিনের লাইন) দীর্ঘমেয়াদী ইএমএ লাইন (৫০ দিনের লাইন) অতিক্রম করে তখন বিক্রয় সংকেত উৎপন্ন হয়;

  5. ঊর্ধ্বমুখী প্রবণতার সময় একাধিক শীর্ষস্থানীয় অবস্থান এবং নিম্নমুখী প্রবণতার সময় খালি শীর্ষস্থানীয় অবস্থান;

  6. প্রবণতা পরিবর্তনের সময় (যখন EMA সংক্ষিপ্ত লাইনটি দীর্ঘ লাইনের সাথে প্রবেশ করে) বর্তমান সংকেত দিকের অবস্থানকে সমতল করে দেয়।

এই কৌশলটি ক্যাপচার প্রফিট (capture profit) এর মাধ্যমে এবং সময়মতো পজিশন বন্ধ করে লাভের মাধ্যমে পালাক্রমে মাল্টি-ফ্রি অপারেশন (multi-float operation) করে।

সামর্থ্য বিশ্লেষণ

এই কৌশলটির সুবিধাগুলো হলঃ

  1. নিয়মগুলি সহজ, সুস্পষ্ট, সহজে বোঝা যায় এবং বাস্তবায়িত হয়।
  2. EMA গড়ের সাহায্যে ট্রেন্ডের দিকনির্দেশনা করা, যাতে বাজারের স্বল্পমেয়াদী অস্থিরতা দ্বারা বিরক্ত না হয়;
  3. সময়মতো পজিশন নিষ্পত্তি করা, প্রবণতা অনুসরণ করা এবং ক্ষতির বিস্তার এড়ানো;
  4. “অবশ্যই, আমি মনে করি যে, এই ধরনের ঘটনা ঘটতে পারে, কিন্তু আমি মনে করি, এটা ঘটতে পারে না।

ঝুঁকি বিশ্লেষণ

এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ

  1. EMA গড়ের মধ্যে একাধিকবার পেরিয়ে যাওয়ার সম্ভাবনা রয়েছে, এবং প্রায়শই পজিশন খোলার ফলে লেনদেনের ব্যয় হতে পারে;
  2. ট্রেডিং এর পর EMA এর ট্রেন্ডের উপর প্রভাব পড়বে, যার ফলে ট্রেড খোলার ভালো সুযোগ নষ্ট হতে পারে।

উপরের ঝুঁকির জন্য, নিম্নলিখিত উপায়ে অপ্টিমাইজ করা যেতে পারেঃ

  1. ইএমএ ব্যবধান কম হলে, পজিশন খোলার নিয়ম যথাযথভাবে শিথিল করা যেতে পারে, যাতে খুব ঘন ঘন লেনদেন এড়ানো যায়;
  2. অন্যান্য সূচকগুলির সাথে মিলিত হয়ে ট্রেন্ড নির্ধারণ করুন, যাতে EMA-এর সিদ্ধান্ত ব্যর্থ না হয়।

অপ্টিমাইজেশান দিক

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ

  1. প্যারামিটার অপ্টিমাইজেশানঃ আপনি বিভিন্ন ইএমএ সময়কালের প্যারামিটার সমন্বয় পরীক্ষা করতে পারেন এবং সর্বোত্তম প্যারামিটার খুঁজে পেতে পারেন;

  2. লেনদেনের খরচ অপ্টিমাইজ করুন লেনদেনের নিয়মগুলি যথাযথভাবে অপ্টিমাইজ করুন, অপ্রয়োজনীয় ঘন ঘন লেনদেন হ্রাস করুন;

  3. স্টপ লস কৌশল অপ্টিমাইজ করুন। যুক্তিসঙ্গত স্টপ লস স্তর সেট করুন এবং একক ক্ষতি নিয়ন্ত্রণ করুন।

  4. অন্যান্য সূচকগুলির সাথে মিলিতঃ MACD, KDJ ইত্যাদির মতো অন্যান্য সূচকগুলি সহায়ক বিচার ব্যবহার করে, প্রবেশের সময়কে অনুকূল করে তোলে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2024-01-28 00:00:00
end: 2024-01-31 04:00:00
period: 45m
basePeriod: 5m
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/
// © mattehalen

//@version=4
//study("EMA 10,20 59",overlay=true)
strategy("EMA 10,20 59",overlay=true)
infoBox     = input(true, title="infoBox", type=input.bool)
infoBox2    = input(false, title="infoBox2", type=input.bool)
BuySellSignal_Bool = input(false, title="Buy & SellSignal", type=input.bool)
infoBoxSize = input(title="infoBoxSize", defval=size.large, options=[size.auto, size.tiny, size.small, size.normal, size.large, size.huge])
ema1Value   = input(10)
ema2Value   = input(20)
ema3Value   = input(59)
maxLoss = input(3000)
ema1        = ema(close,ema1Value)
ema2        = ema(close,ema2Value)
ema3        = ema(close,ema3Value)
objcnt      = 0
buyTitle    = tostring(close[1])
myProfit    = float(0)

plot(ema1,title="ema1",color=color.red,linewidth=2)
plot(ema2,title="ema2",color=color.green,linewidth=2)
plot(ema3,title="ema3",color=color.black,linewidth=2)

Buytrend = (ema1 and ema2 > ema3) and (ema1[1] and ema2[1] > ema3[1])
BarssinceBuyTrend = barssince(Buytrend)
BarssinceSellTrend = barssince(not Buytrend)
closeAtBuyTrend = close[1]
bgcolor(Buytrend ? color.green : color.red,transp=70)

BuySignal = Buytrend and not Buytrend[1] and BuySellSignal_Bool

BuySignalOut = Buytrend and (crossunder(ema1,ema2)) and BuySellSignal_Bool
BarssinceBuy = barssince(BuySignal)
bgcolor(BuySignal ? color.green : na , transp=30)
bgcolor(BuySignalOut ? color.black : na , transp=30)
plot(BarssinceBuy,title="BarssinceBuy",display=display.none)


SellSignal = not Buytrend and Buytrend[1] and BuySellSignal_Bool
SellSignalOut = not Buytrend and (crossover(ema1,ema2)) and BuySellSignal_Bool
BarssinceSell = barssince(SellSignal)
bgcolor(SellSignal ? color.red : na , transp=30)
bgcolor(SellSignalOut ? color.black : na , transp=30)
plot(BarssinceSell,title="BarssinceSell",display=display.none)


buyProfit   = float(0)
cntBuy      =0
sellProfit  = float(0)
cntSell     =0
buyProfit   := Buytrend and not Buytrend[1]? nz(buyProfit[1]) + (close[BarssinceBuyTrend[1]]-close) : nz(buyProfit[1])
cntBuy      := Buytrend and not Buytrend[1]? nz(cntBuy[1]) + 1: nz(cntBuy[1])
sellProfit  := not Buytrend and Buytrend[1]? nz(sellProfit[1]) + (close-close[BarssinceSellTrend[1]]) : nz(sellProfit[1])
cntSell     := not Buytrend and Buytrend[1]? nz(cntSell[1]) + 1 : nz(cntSell[1])
totalProfit = buyProfit + sellProfit

// if (Buytrend and not Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceBuyTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuyTrend[1]]) + "\n" + "Profit = "+tostring(close[BarssinceBuyTrend[1]]-close) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.red,size=infoBoxSize)
// if (not Buytrend and Buytrend[1] and infoBox==true)
//     l = label.new(bar_index - (BarssinceSellTrend[1]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSellTrend[1]]) + "\n" + "Profit = "+tostring(close-close[BarssinceSellTrend[1]]) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.green,size=infoBoxSize)

// if (BuySignalOut and not BuySignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceBuy[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.purple,size=infoBoxSize
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceBuy[0]]) + "\n" + "Profit = "+tostring(close-close[BarssinceBuy[0]]) ,style=label.style_labelup, yloc=yloc.belowbar,color=color.lime,size=infoBoxSize)
// if (SellSignalOut and not SellSignalOut[1] and infoBox2==true)
// //    l = label.new(bar_index - (BarssinceSell[0]/2), na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.purple,size=infoBoxSize)
//     l = label.new(bar_index, na,text="Close = " + tostring(close) + "\n" + "Start = "+tostring(close[BarssinceSell[0]]) + "\n" + "Profit = "+tostring(close[BarssinceSell[0]]-close) ,style=label.style_labeldown, yloc=yloc.abovebar,color=color.fuchsia,size=infoBoxSize)


// l2 = label.new(bar_index, na, 'buyProfit in pip = '+tostring(buyProfit)+"\n"+  'cntBuy = '+tostring(cntBuy) +"\n"+  'sellProfit in pip = '+tostring(sellProfit)+"\n"+  'cntSell = '+tostring(cntSell) +"\n"+  'totalProfit in pip = '+tostring(totalProfit)     , 
//   color=totalProfit>0 ? color.green : color.red, 
//   textcolor=color.white,
//   style=label.style_labeldown, yloc=yloc.abovebar,
//   size=size.large)

// label.delete(l2[1])



//--------------------------------------------------
//--------------------------------------------------
if (Buytrend)
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

//if BuySignalOut
   // strategy.close("long", comment = "Exit Long")
if (not Buytrend)
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
//if SellSignalOut
    // Force trade exit.
    //strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//--------------------------------------------------
//--------------------------------------------------