سپر ٹرینڈ پر مبنی ملٹی ٹائم فریم ٹرینڈ ٹریکنگ حکمت عملی

مصنف:چاؤ ژانگ، تاریخ: 2024-02-21 11:05:17
ٹیگز:

img

جائزہ

اس حکمت عملی کا بنیادی خیال مارکیٹ کے رجحانات کی نشاندہی کرنے کے لئے متعدد ٹائم فریموں کو جوڑنا ہے ، جس میں فلٹر کے طور پر اعلی ٹائم فریموں سے سپر ٹرینڈ اشارے کا استعمال کیا جاتا ہے اور کم ٹائم فریموں سے خرید و فروخت کے سگنل تیار کیے جاتے ہیں۔ اس کا مقصد تجارتی فیصلوں کے معیار کو بہتر بنانے کے لئے اعلی ٹائم فریموں کے ذریعہ فراہم کردہ مارکیٹ کی ساخت کی معلومات کو فائدہ اٹھانا ہے۔

حکمت عملی منطق

حکمت عملی سیکیورٹی فنکشن کو کال کرکے اعلی ٹائم فریم (موجودہ ٹائم فریم کے ڈیفالٹ 4x) سے سپر ٹرینڈ اشارے کی اقدار کو بازیافت کرتی ہے۔ سپر ٹرینڈ اشارے میں دو لائنیں ہوتی ہیں: سپر ٹرینڈ لائن اور ٹرینڈ لائن۔ ٹرینڈ لائن کے اوپر سپر ٹرینڈ لائن ایک تیزی کا اشارہ ہے ، جبکہ نیچے ایک bearish سگنل ہے۔

اعلی ٹائم فریم سے سپر ٹرینڈ اشارے کی سمت فلٹر کی حالت کے طور پر کام کرتی ہے۔ تجارتی سگنل صرف اس وقت پیدا ہوتے ہیں جب دونوں ٹائم فریموں سے سپر ٹرینڈ کی سمتیں سیدھ ہوجاتی ہیں۔ اس کا مطلب یہ ہے کہ سگنل صرف اس وقت ٹرگر ہوتے ہیں جب دونوں ٹائم فریم ایک ہی سمت میں سگنل دیتے ہیں۔

اس سے کم ٹائم فریم میں مارکیٹ کے شور سے مداخلت سے گریز ہوتا ہے اور سگنل کی وشوسنییتا میں بہتری آتی ہے۔ اس سے زیادہ ٹائم فریم مارکیٹ ڈھانچے کا استعمال صحیح مجموعی فیصلے کرنے کی بھی اجازت ملتی ہے۔

فوائد

  • اعلی 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)


مزید