
اس حکمت عملی کا بنیادی خیال مارکیٹ کے رجحانات کی نشاندہی کرنے کے لئے متعدد ٹائم فریموں کو جوڑنا ہے ، اعلی ٹائم فریم پر تجاوزات کے اشارے کو فلٹر کے طور پر استعمال کرنا ، اور نچلے ٹائم فریم پر خرید و فروخت کے اشارے بھیجنا ہے۔ اس حکمت عملی کا مقصد اعلی ٹائم فریم کے ذریعہ فراہم کردہ مارکیٹ کی ساخت کی معلومات کو استعمال کرنا ہے تاکہ تجارتی فیصلوں کے معیار کو بہتر بنایا جاسکے۔
یہ حکمت عملی سیکیورٹی فنکشن کو کال کرکے اعلی ٹائم فریم (ڈیفالٹ موجودہ ٹائم فریم کے 4x) کی حد سے تجاوز کرنے والے اشارے کی قیمت حاصل کرتی ہے۔ حد سے تجاوز کرنے والے اشارے میں دو لائنیں شامل ہیں: حد سے تجاوز کرنے والی لائن اور رجحان لائن۔ حد سے تجاوز کرنے والی لائن جب رجحان لائن کے اوپر ہوتی ہے تو بیجنگ سگنل ہوتی ہے ، اور جب نیچے ہوتی ہے تو بیجنگ سگنل ہوتی ہے۔
اس حکمت عملی میں اعلی ٹائم فریم کے اوپری رجحان کی سمت کو فلٹرنگ کی شرط کے طور پر استعمال کیا گیا ہے۔ اس حکمت عملی میں صرف اس وقت ٹریڈنگ سگنل جاری کیا جاتا ہے جب اعلی ٹائم فریم کے اوپری رجحان کی سمت اعلی ٹائم فریم کے ساتھ مل جاتی ہے۔ یعنی ، اس حکمت عملی میں صرف اس وقت زیادہ یا کم ہوتا ہے جب دونوں ٹائم فریموں پر اوپری رجحان کے اشارے ایک ہی سمت میں سگنل دیتے ہیں۔
اس سے کم ٹائم فریم مارکیٹ کے شور کی مداخلت سے بچنے اور سگنل کی وشوسنییتا کو بہتر بنایا جاسکتا ہے۔ اس کے ساتھ ہی اعلی ٹائم فریم کا استعمال کرتے ہوئے مارکیٹ کی ساخت کا اندازہ لگائیں اور مجموعی طور پر صحیح فیصلہ کریں۔
حل:
اس حکمت عملی کو مندرجہ ذیل پہلوؤں سے بہتر بنایا جاسکتا ہے:
پیرامیٹرز کی اصلاح، مجموعہ اشارے، بہتر روکنے اور مشین سیکھنے کو متعارف کرانے کے طریقوں کے ذریعے، اس کثیر ٹائم فریم رجحان کی نگرانی کی حکمت عملی کی تاثیر کو نمایاں طور پر بڑھا دیا جا سکتا ہے.
اس حکمت عملی نے اعلی ٹائم فریم کے رجحانات کا استعمال کرتے ہوئے کم ٹائم فریم کے ٹریڈنگ پر عملدرآمد کی ہدایت کی ہے۔ اس طرح کے ملٹی ٹائم فریم ڈیزائن مارکیٹ کے شور کو مؤثر طریقے سے فلٹر کرسکتے ہیں اور رجحان کی سمت کو زیادہ واضح طور پر پہچان سکتے ہیں۔ اس کے ساتھ ہی ، اس میں تاریخ کی ترتیب کی خصوصیت بھی شامل ہے جس کی وجہ سے پیمائش زیادہ لچکدار ہے۔ مجموعی طور پر ، یہ ایک اچھی طرح سے ڈیزائن کیا گیا ملٹی ٹائم فریم رجحانات سے باخبر رہنے کی حکمت عملی ہے جو مزید تحقیق اور اطلاق کے قابل ہے۔
/*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)