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