সুপারট্রেন্ড ভিত্তিক মাল্টিটাইমফ্রেম ট্রেন্ড ট্র্যাকিং কৌশল

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

img

সারসংক্ষেপ

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

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

কৌশলটি সিকিউরিটি ফাংশনটি কল করে একটি উচ্চতর সময়সীমার (বর্তমান সময়সীমার ডিফল্ট 4x) থেকে সুপারট্রেন্ড সূচক মানগুলি পুনরুদ্ধার করে। সুপারট্রেন্ড সূচকটিতে দুটি লাইন রয়েছেঃ সুপারট্রেন্ড লাইন এবং ট্রেন্ড লাইন। ট্রেন্ড লাইনের উপরে সুপারট্রেন্ড লাইনটি একটি উত্থান সংকেত, যখন নীচে একটি হ্রাস সংকেত।

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

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

সুবিধা

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

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

  • উচ্চতর সময়সীমার থেকে বিলম্বিত সংকেতগুলি স্বল্পমেয়াদী সুযোগগুলি মিস করতে পারে
  • দীর্ঘ সময়সীমার বাজারের কাঠামো সম্পর্কে ভুল ধারণা
  • সুপারট্রেন্ডের সম্ভাব্য ভুল সংকেত
  • ব্যাকটেস্টের তারিখের সীমাবদ্ধতা গুরুত্বপূর্ণ তথ্য বাদ দিতে পারে এবং ফলাফলের নির্ভুলতা প্রভাবিত করতে পারে

সমাধান:

  • সিগন্যাল বিলম্ব কমাতে উচ্চতর টাইমফ্রেম সেটিংস সূক্ষ্ম সুর করুন
  • উচ্চতর সময়সীমার বিচারকে নিশ্চিত করার জন্য অন্যান্য সূচক যুক্ত করুন
  • সিগন্যালের গুণমান উন্নত করার জন্য সুপারট্রেন্ড প্যারামিটারগুলি অপ্টিমাইজ করুন
  • স্থিতিশীলতা পরীক্ষা করার জন্য ধীরে ধীরে ব্যাকটেস্ট সময়কাল বাড়ান

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

এই কৌশলটি বেশ কয়েকটি ক্ষেত্রে উন্নত করা যেতে পারেঃ

  1. সেরা প্যারামিটার সমন্বয় জন্য সুপার ট্রেন্ড পরামিতি অপ্টিমাইজ করুন
  2. মাল্টিফ্যাক্টর মডেল তৈরি করতে অন্যান্য সূচক যোগ করুন
  3. বিভিন্ন উচ্চ-নিম্ন সময়সীমার সমন্বয় পরীক্ষা করুন
  4. ঝুঁকি নিয়ন্ত্রণের জন্য স্টপ লস প্রক্রিয়া অন্তর্ভুক্ত করুন
  5. গতিশীলভাবে পরামিতিগুলি সামঞ্জস্য করতে মেশিন লার্নিং ব্যবহার করুন

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

সিদ্ধান্ত

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


/*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)


আরো