
এই কৌশলটির মূল ধারণাটি হ’ল একাধিক সময় ফ্রেমের সাথে বাজারের প্রবণতা সনাক্ত করা, উচ্চতর সময় ফ্রেমের উপর অতিক্রমকারী সূচকগুলিকে ফিল্টার হিসাবে ব্যবহার করা, নিম্ন স্তরের সময় ফ্রেমে কেনা এবং বিক্রি করার সংকেত দেওয়া। এই কৌশলটি উচ্চতর সময় ফ্রেমের দ্বারা সরবরাহিত বাজার কাঠামোর তথ্য ব্যবহার করে লেনদেনের সিদ্ধান্তের গুণমান উন্নত করার লক্ষ্যে।
এই কৌশলটি security ফাংশনটি কল করে একটি উচ্চতর সময় ফ্রেম (ডিফল্টভাবে বর্তমান সময় ফ্রেমের 4 গুণ) এর অতিক্রান্ত সূচকের মান অর্জন করে। অতিক্রান্ত সূচকটি দুটি লাইন নিয়ে গঠিতঃ অতিক্রান্ত লাইন এবং ট্রেন্ড লাইন। অতিক্রান্ত লাইনটি যখন ট্রেন্ড লাইনের উপরে থাকে তখন এটি একটি বিডিং সংকেত এবং যখন এটি নীচে থাকে তখন এটি একটি বিডিং সংকেত।
এই কৌশলটি উচ্চ সময়ের ফ্রেমের ওভারট্রেন্ডের দিকটি ফিল্টারিংয়ের শর্ত হিসাবে ব্যবহার করে এবং কেবলমাত্র নিম্ন সময়ের ফ্রেমের ওভারট্রেন্ডের দিকটি উচ্চ সময়ের ফ্রেমের সাথে সামঞ্জস্যপূর্ণ হলেই ট্রেডিং সিগন্যাল প্রেরণ করে। অর্থাৎ, এই কৌশলটি কেবলমাত্র তখনই বেশি বা খালি হয় যখন দুটি সময় ফ্রেমের ওভারট্রেন্ডের সূচকগুলি একই দিকের সংকেত দেয়।
এইভাবে, নিম্ন সময়ের ফ্রেম বাজারের শব্দ দ্বারা বিরক্ত হওয়া এড়ানো যায়, সংকেতের নির্ভরযোগ্যতা বাড়ায়। উচ্চ সময়ের ফ্রেম ব্যবহার করে বাজারের কাঠামোর বিচার করা এবং সামগ্রিকভাবে সঠিক বিচার করা যায়।
সমাধানঃ
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ
প্যারামিটার অপ্টিমাইজেশান, সমন্বয় সূচক, স্টপ লস এবং মেশিন লার্নিং এর মাধ্যমে এই প্রবণতা ট্র্যাকিং কৌশলটি উল্লেখযোগ্যভাবে উন্নত করা যেতে পারে।
এই কৌশলটি দক্ষতার সাথে উচ্চ সময়ের ফ্রেমের প্রবণতা বিচার ব্যবহার করে নিম্ন সময়ের ফ্রেমের লেনদেনের কার্য সম্পাদনকে নির্দেশ করে। এই মাল্টি টাইম ফ্রেম ডিজাইনটি কার্যকরভাবে বাজার শব্দটি ফিল্টার করতে পারে এবং আরও স্পষ্ট প্রবণতার দিক সনাক্ত করতে পারে। পাশাপাশি অন্তর্নির্মিত তারিখ সেট করার বৈশিষ্ট্যটি পুনরাবৃত্তিকে আরও নমনীয় করে তোলে। সামগ্রিকভাবে, এটি একটি সুনির্দিষ্টভাবে পরিকল্পিত মাল্টি টাইম ফ্রেম ট্রেন্ড ট্র্যাকিং কৌশল যা আরও গবেষণা এবং প্রয়োগের জন্য উপযুক্ত।
/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
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("Higher TF - Repainting", 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)
HTFMultiplier = input(4, minval=1, step=1)
SupertrendMult = input(1)
SupertrendPd = input(4, minval=4, step=4)
backtestBars = input(title="Backtest from ", defval=10, minval=1, maxval=30)
backtestFrom = input(title="Timeframe", defval="years", options=["days", "months", "years"])
repaintOption = input(title="Repaint", defval="Yes", options=["Yes", "No - set lookahead false", "No - do not use security"])
f_multiple_resolution(HTFMultiplier) =>
target_Res_In_Min = timeframe.multiplier * HTFMultiplier * (
timeframe.isseconds ? 1. / 60. :
timeframe.isminutes ? 1. :
timeframe.isdaily ? 1440. :
timeframe.isweekly ? 7. * 24. * 60. :
timeframe.ismonthly ? 30.417 * 24. * 60. : na)
target_Res_In_Min <= 0.0417 ? "1S" :
target_Res_In_Min <= 0.167 ? "5S" :
target_Res_In_Min <= 0.376 ? "15S" :
target_Res_In_Min <= 0.751 ? "30S" :
target_Res_In_Min <= 1440 ? tostring(round(target_Res_In_Min)) :
tostring(round(min(target_Res_In_Min / 1440, 365))) + "D"
f_getBackTestTimeFrom(backtestFrom, backtestBars)=>
byDate = backtestFrom == "days"
byMonth = backtestFrom == "months"
byYear = backtestFrom == "years"
date = dayofmonth(timenow)
mth = month(timenow)
yr = year(timenow)
leapYearDaysInMonth = array.new_int(12,0)
array.set(leapYearDaysInMonth,0,31)
array.set(leapYearDaysInMonth,1,29)
nonleapYearDaysInMonth = array.new_int(12,0)
array.set(leapYearDaysInMonth,0,31)
array.set(leapYearDaysInMonth,1,28)
restMonths = array.new_int(10,0)
array.set(leapYearDaysInMonth,0,31)
array.set(leapYearDaysInMonth,1,30)
array.set(leapYearDaysInMonth,2,31)
array.set(leapYearDaysInMonth,3,30)
array.set(leapYearDaysInMonth,4,31)
array.set(leapYearDaysInMonth,5,31)
array.set(leapYearDaysInMonth,6,30)
array.set(leapYearDaysInMonth,7,31)
array.set(leapYearDaysInMonth,8,30)
array.set(leapYearDaysInMonth,9,31)
array.concat(leapYearDaysInMonth,restMonths)
array.concat(nonleapYearDaysInMonth,restMonths)
isLeapYear = yr % 4 == 0 and (year%100 != 0 or year%400 == 0)
numberOfDaysInCurrentMonth = isLeapYear ? array.get(leapYearDaysInMonth, mth-2) : array.get(nonleapYearDaysInMonth, mth-2)
if(byDate)
mth := (date - backtestBars) < 0 ? mth - 1 : mth
yr := mth < 1 ? yr - 1 : yr
mth := mth < 1 ? 1 : mth
date := (date - backtestBars) < 0 ? numberOfDaysInCurrentMonth - backtestBars + date + 1 : date - backtestBars + 1
if(byMonth)
date := 1
yr := (mth - (backtestBars%12)) < 0 ? yr - int(backtestBars/12) - 1 : yr - int(backtestBars/12)
mth := mth - (backtestBars%12) + 1
if(byYear)
date := 1
mth := 1
yr := yr - backtestBars
[date, mth, yr]
repaint = repaintOption == "Yes"
useSecurityLookahead = repaintOption == "No - set lookahead false"
[SupertrendRepaint, DirRepaint] = security(syminfo.tickerid, f_multiple_resolution(HTFMultiplier), supertrend(SupertrendMult, SupertrendPd), lookahead = true, gaps=true)
[SupertrendNoLookahead, DirNoLookahead] = security(syminfo.tickerid, f_multiple_resolution(HTFMultiplier), supertrend(SupertrendMult, SupertrendPd), lookahead = false, gaps=false)
[SupertrendRegular, DirRegular] = supertrend(SupertrendMult, SupertrendPd)
[date, mth, yr] = f_getBackTestTimeFrom(backtestFrom, backtestBars)
inDateRange = time >= timestamp(syminfo.timezone, yr, mth, date, 0, 0)
longCondition = repaint ? DirRepaint == -1 : useSecurityLookahead? DirNoLookahead == -1 : DirRegular == -1
shortCondition = repaint ? DirRepaint == 1 : useSecurityLookahead? DirNoLookahead == 1 : DirRegular == 1
strategy.entry("Buy", strategy.long, when=longCondition and inDateRange)
strategy.entry("Sell", strategy.short, when=shortCondition and inDateRange)