সমন্বিত চলমান গড় এবং সমষ্টিগত উচ্চ নিম্ন সূচক সমন্বয় কৌশল

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

img

সারসংক্ষেপ

এই কৌশলটি মূলত বাজারের প্রবণতা এবং খোলা পজিশন নির্ধারণের জন্য উচ্চ নিম্ন সূচক, চলমান গড় সূচক এবং সুপার ট্রেন্ড সূচককে একত্রিত করে।

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

  1. উচ্চ নিম্ন সূচক একটি নির্দিষ্ট সময়ের মধ্যে সর্বশেষ মূল্য একটি নতুন উচ্চ বা নতুন নিম্ন তৈরি করেছে কিনা তা বিচার করে এবং স্কোরটি জমা করে। যখন স্কোরটি বেড়ে যায়, এটি উত্থান শক্তির শক্তির প্রতিনিধিত্ব করে। যখন স্কোরটি পড়ে, এটি bearish শক্তির শক্তির প্রতিনিধিত্ব করে।

  2. মুভিং এভারেজ ইনডেক্স মূল্যায়ন করে যে দামটি একটি ঊর্ধ্বমুখী সিঁড়ি-আকৃতির আপট্রেন্ডে আছে কিনা বা একটি নিম্নমুখী সিঁড়ি-আকৃতির ডাউনট্রেন্ডে রয়েছে কিনা। যখন মুভিং এভারেজ একটি সিঁড়ি-আকৃতির উত্থান দেখায়, তখন এটি উত্থান শক্তির শক্তির প্রতিনিধিত্ব করে। যখন এটি একটি সিঁড়ি-আকৃতির হ্রাস দেখায়, তখন এটি bearish শক্তির শক্তির প্রতিনিধিত্ব করে।

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

সুবিধা

  1. উচ্চ নিম্ন সূচক কার্যকরভাবে মূল্য আন্দোলন এবং গতির পরিবর্তন বিচার করতে পারেন। চলন্ত গড় সূচক কার্যকরভাবে মূল্য প্রবণতা নির্ধারণ করতে পারেন। উভয় সমন্বয় আরো সঠিকভাবে বাজার দিক নির্ধারণ করতে পারেন।

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

  3. একাধিক সূচক একে অপরকে যাচাই করে এবং মিথ্যা সংকেত হ্রাস করে।

ঝুঁকি

  1. উচ্চ নিম্ন সূচক এবং চলমান গড় সূচক থেকে ভুল সংকেত ক্ষতির পজিশনের দিকে পরিচালিত করতে পারে।

  2. সুপার ট্রেন্ড সূচকের অপর্যাপ্ত অংশগ্রহণ এবং অনুপযুক্ত প্যারামিটার সেটিং ভুল সংকেত তৈরি করতে পারে।

  3. দ্রুত প্রবণতা বিপরীত এবং ভুল স্টপ লস সেটিং বড় ক্ষতি হতে পারে।

  4. সূচক প্যারামিটার অপ্টিমাইজ করে, স্টপ লস মূল্যের মাত্রা সামঞ্জস্য করে ইত্যাদি ঝুঁকি হ্রাস করা যেতে পারে।

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

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

  2. সিগন্যালগুলিকে আরও স্থিতিশীল এবং নির্ভরযোগ্য করার জন্য উচ্চ নিম্ন সূচক এবং চলমান গড় সূচকের পরামিতিগুলি অপ্টিমাইজ করুন।

  3. মিথ্যা সংকেত হ্রাস করার জন্য যাচাই করার জন্য অন্যান্য সূচক যেমন MACD, KD ইত্যাদি অন্তর্ভুক্ত করুন।

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

  5. কম জনপ্রিয় পণ্য ট্রেডিং এড়ানোর জন্য আবেগ বিশ্লেষণ অন্তর্ভুক্ত করুন।

সিদ্ধান্ত

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


/*backtest
start: 2023-10-21 00:00:00
end: 2023-11-20 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("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, 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"])
includePartiallyAligned = input(true)
HighLowPeriod = input(50, minval=1,step=1)
LookbackPeriod = input(10, minval=1,step=1)

supertrendMult = input(2, minval=1, maxval=10, step=0.5)
supertrendLength = input(10, minval=1)

tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short])
backtestYears = input(10, minval=1, step=1)

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_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

f_getHighLowValue(HighLowPeriod)=>
    currentHigh = highest(high,HighLowPeriod) == high
    currentLow = lowest(low,HighLowPeriod) == low
    currentHigh?1:currentLow?-1:0

inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0)

maAlignment = f_getMaAlignment(MAType,includePartiallyAligned)
alignedMaIndex = sum(maAlignment,LookbackPeriod)

maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0
maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection

highLowIndex = f_getHighLowValue(HighLowPeriod)
cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod)

hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0
hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection

[superTrend, dir] = supertrend(supertrendMult, supertrendLength)

buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1)
sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1)

barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray
barcolor(barColor)

// strategy.risk.allow_entry_in(tradeDirection)
strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy")
strategy.close("Buy", when=dir == 1)

strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell")
strategy.close("Sell", when=dir == -1)


আরো