বোলিংজার ব্যান্ডের উপর ভিত্তি করে দ্বৈত চলমান গড় মিটিং কৌশল

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

img

সারসংক্ষেপ

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

কৌশল নীতি

এই কৌশলটি মূলত বোলিংজার ব্যান্ড সূচক এবং ট্রেডিংয়ের জন্য চলমান গড় সূচকের ক্রসওভারের সংকেতগুলির উপর ভিত্তি করে। বিশেষত, এটি একই সময়ে 5 থেকে 200 দিনের দৈর্ঘ্যের সাথে মাঝের রেল, বোলিংজার ব্যান্ডের উপরের রেল এবং 7 টি চলমান গড় ব্যবহার করে। এটি যখন দামটি নীচে থেকে উপরের দিকে বোলিংজার ব্যান্ডের মাঝের এবং নীচের রেলগুলি ভেঙে যায় তখন এটি একটি ক্রয় সংকেত উত্পন্ন করে; এটি একটি বিক্রয় সংকেত উত্পন্ন করে যখন দামটি নীচে থেকে উপরের দিকে বোলিংজার ব্যান্ডের উপরের রেলটি ভেঙে যায় প্রবণতা অনুসরণ করতে।

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

সুবিধা বিশ্লেষণ

  1. নমনীয় কনফিগারেশন যা বিভিন্ন বাজারের পরিবেশে উপযুক্ত প্যারামিটার সমন্বয়গুলি কাস্টমাইজ করতে পারে
  2. ফিল্টার হিসাবে দুটি ভিন্ন সূচক একত্রিত করা ভুল সংকেত হ্রাস করতে পারে
  3. প্রবণতা মূল্যায়ন সূচক অস্থির বাজারে বিপরীত অপারেশন এড়াতে পারে
  4. স্টপ লস সেটিং ট্র্যাকিং লাভ সর্বাধিক করে তোলে

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

  1. অতিরিক্ত লেনদেন এড়ানোর জন্য বিভিন্ন সময়সীমার চক্রের জন্য পরামিতিগুলি যথাযথভাবে সামঞ্জস্য করা উচিত
  2. ট্র্যাকিং স্টপ লস দ্রুত হ্রাসের সময় ক্ষতি বাড়াতে পারে
  3. পর্যাপ্ত তহবিল নিশ্চিত করতে হবে, অন্যথায় ধারাবাহিক ক্ষতির ঝুঁকি সহ্য করতে পারবে না

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

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

সিদ্ধান্ত

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


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("BuyTheDip", overlay=true, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
exitType = input(title="Exit Strategy", defval="Signal", options=["Signal", "TrailingStop", "Both"])
LookbackPeriod = input(30, minval=10,step=10)

BBStdDev = input(2, minval=1, maxval=10, step=0.5)
BBLength = input(60, minval=5, step=5)

atrLength = input(22)
atrMult = input(6)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.all, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)
includePartiallyAligned = true
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

f_getTrailingStop(atr, atrMult)=>
    stop = close - atrMult*atr
    stop := strategy.position_size > 0 ? max(stop, stop[1]) : stop
    stop

f_getMaAlignment(MAType, includePartiallyAligned)=>
    ma5 = f_getMovingAverage(close,MAType,5)
    ma10 = f_getMovingAverage(close,MAType,10)
    ma20 = f_getMovingAverage(close,MAType,20)
    ma30 = f_getMovingAverage(close,MAType,30)
    ma50 = f_getMovingAverage(close,MAType,50)
    ma100 = f_getMovingAverage(close,MAType,100)
    ma200 = f_getMovingAverage(close,MAType,200)

    upwardScore = 0
    upwardScore := close > ma5? upwardScore+1:upwardScore
    upwardScore := ma5 > ma10? upwardScore+1:upwardScore
    upwardScore := ma10 > ma20? upwardScore+1:upwardScore
    upwardScore := ma20 > ma30? upwardScore+1:upwardScore
    upwardScore := ma30 > ma50? upwardScore+1:upwardScore
    upwardScore := ma50 > ma100? upwardScore+1:upwardScore
    upwardScore := ma100 > ma200? upwardScore+1:upwardScore
    
    upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200
    downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200
    upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0
    
inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

exitBySignal = exitType == "Signal" or exitType == "Both"
exitByTrailingStop = exitType == "TrailingStop" or exitType == "Both"
maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
atr = atr(atrLength)

trailingStop = f_getTrailingStop(atr, atrMult)
maAligned = highest(maAlignment,LookbackPeriod)
[middle, upper, lower] = bb(close, BBLength, BBStdDev)

buyCondition = maAligned == 1 and (crossover(close, lower) or crossover(close, middle))
buyExitCondition = crossunder(close, upper)

strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=buyExitCondition and exitBySignal)
strategy.exit("ExitBuy", "Buy", stop = trailingStop, when=exitByTrailingStop )




আরো