
یہ حکمت عملی ایک کثیر فریم ورژن ہے جو میں نے پہلے شائع کی تھی جس میں ایک سادہ ٹریکنگ اسٹاپ کی حکمت عملی تھی۔ اس سے پہلے کی حکمت عملی میں صرف بنیادی ٹریکنگ اسٹاپ کا استعمال کیا گیا تھا تاکہ پوزیشن میں داخل ہوسکے۔ یہ اچھی طرح سے کام کرتا ہے ، لہذا میں نے اس میں کچھ بہتری لانے کی کوشش کی۔ میں سوچتا ہوں کہ اگر ایک ہی اے ٹی آر ٹریکنگ اسٹاپ کا استعمال مختلف ٹائم فریموں پر کیا جاتا ہے اور ان کو ایک سگنل میں جوڑ دیا جاتا ہے۔
اس حکمت عملی میں ، آپ صرف اے ٹی آر اسٹاپ کا استعمال کرسکتے ہیں ، اور موجودہ ٹائم فریم کے ساتھ ساتھ مزید 3 اعلی ٹائم فریموں کا انتخاب کرسکتے ہیں۔ ان ٹائم فریموں پر ٹریکنگ اسٹاپ چارٹ پر نقشہ لگائے جائیں گے۔ اگر تمام 4 ٹائم فریم ملٹی ہیڈ سگنل دیتے ہیں تو ، زیادہ سے زیادہ میں داخل ہوں۔ جب کم از کم 2 ٹائم فریم ملٹی ہیڈ سگنل سے متفق نہیں ہوتے ہیں تو ، ملٹی ہیڈ پوزیشنوں کو ختم کردیں۔ خالی کرنے کے لئے بھی یہی منطق ہے۔
اس حکمت عملی کا مرکز اسٹاپ اور ٹرینڈ فالو پر نظر رکھنا ہے۔ اسٹاپ ٹریکنگ اسٹاپ کو روکنے کے لئے استعمال کیا جاتا ہے ، اور اے ٹی آر کی قیمتوں کے حساب سے ، اسٹاپ کو توڑنے سے مؤثر طریقے سے بچا جاسکتا ہے۔ ٹرینڈ فالو مختلف ٹائم فریموں پر رجحان کی سمت کو دیکھ کر داخلے کا فیصلہ کرتا ہے۔
خاص طور پر ، حکمت عملی پہلے مختلف ٹائم فریموں پر اے ٹی آر کی قیمتوں کا حساب لگاتی ہے اور اسٹاپ نقصان کی فاصلہ طے کرتی ہے۔ اس کے بعد جب قیمت اسٹاپ نقصان کی حد کو توڑنے کا فیصلہ کرتی ہے تو اس کے لئے زیادہ یا کم سگنل جاری کیا جاتا ہے۔ اگر متعدد ٹائم فریموں پر سگنل مماثل ہیں تو ، اس میں داخل ہوں۔ اس کے بعد اس سمت میں اسٹاپ نقصان کا سراغ لگانا جاری رکھیں۔
مختلف ادوار کے رجحانات کا فیصلہ کرنے کے ذریعے ، جعلی بریک کو مؤثر طریقے سے فلٹر کیا جاسکتا ہے۔ منافع کو مقفل کرنے اور خطرے کو مؤثر طریقے سے کنٹرول کرنے کے لئے اسٹاپ نقصانات کو بھی ٹریک کیا جاسکتا ہے۔
حل:
حکمت عملی کو بہتر بنانے کے لئے:
یہ حکمت عملی ایک سے زیادہ ٹائم فریم اے ٹی آر ٹریکنگ اسٹاپ کے ذریعہ ٹرینڈ فالو اور رسک کنٹرول کے نامیاتی امتزاج کو انجام دیتی ہے۔ یہ ایک ہی ٹائم فریم کے مقابلے میں رجحان کی سمت کا زیادہ واضح اندازہ لگا سکتا ہے۔ یہ ایک ہی ٹائم فریم کے مقابلے میں بہت زیادہ شور کو فلٹر کرتا ہے۔ اسٹاپ پیرامیٹرز اور ٹائم فریم کی مناسب ترتیب بہترین اثر حاصل کرنے کی کلید ہے۔ یہ حکمت عملی ان سرمایہ کاروں کے لئے موزوں ہے جو کسی حد تک واپسی کو برداشت کرسکتے ہیں۔ اس میں مزید اصلاح کی گنجائش اور توسیع ہے اور یہ ایک بہت ہی امید افزا حکمت عملی ہے۔
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="MTF Trailing SL Strategy [QuantNomad]", shorttitle = "MTF TrailingSL [QN]", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
////////////
// Inputs //
atr_length = input(14, title = "ATR Length")
atr_mult = input(2, title = "ATR Mult", type = input.float)
tf2 = input('120', title = "TF2", type = input.string)
tf3 = input('180', title = "TF3", type = input.string)
tf4 = input('240', title = "TF4", type = input.string)
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2016, title = "From Year", minval = 1970)
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
//////////////////
// CALCULATIONS //
tsl() =>
// SL values
sl_val = atr_mult * atr(atr_length)
// Init Variables
pos = 0
trailing_sl = 0.0
// Signals
long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1])
// Calculate SL
trailing_sl := short_signal ? high + sl_val :
long_signal ? low - sl_val :
nz(pos[1]) == 1 ? max(low - sl_val, nz(trailing_sl[1])) :
nz(pos[1]) == -1 ? min(high + sl_val, nz(trailing_sl[1])) :
nz(trailing_sl[1])
// Position var
pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1])
trailing_sl
trailing_sl1 = tsl()
trailing_sl2 = security(syminfo.tickerid, tf2, tsl())
trailing_sl3 = security(syminfo.tickerid, tf3, tsl())
trailing_sl4 = security(syminfo.tickerid, tf4, tsl())
pos1 = 0
pos1 := low <= trailing_sl1 ? -1 : high >= trailing_sl1 ? 1 : nz(pos1[1])
pos2 = 0
pos2 := low <= trailing_sl2 ? -1 : high >= trailing_sl2 ? 1 : nz(pos2[1])
pos3 = 0
pos3 := low <= trailing_sl3 ? -1 : high >= trailing_sl3 ? 1 : nz(pos3[1])
pos4 = 0
pos4 := low <= trailing_sl4 ? -1 : high >= trailing_sl4 ? 1 : nz(pos4[1])
total_pos = pos1 + pos2 + pos3 + pos4
//////////////
// PLOTINGS //
plot(trailing_sl1, linewidth = 2 , color = pos1 == 1 ? color.green : color.red, title = "TSL TF1")
plot(trailing_sl2, linewidth = 2 , color = pos2 == 1 ? color.green : color.red, title = "TSL TF2", transp = 25)
plot(trailing_sl3, linewidth = 2 , color = pos3 == 1 ? color.green : color.red, title = "TSL TF3", transp = 50)
plot(trailing_sl4, linewidth = 2 , color = pos4 == 1 ? color.green : color.red, title = "TSL TF4", transp = 75)
//////////////
// STRATEGY //
//strategy.entry("long", true, stop = trailing_sl1)
//strategy.entry("short", false, stop = trailing_sl1)
strategy.entry("long", true, when = total_pos == 4)
strategy.entry("short", false, when = total_pos == -4)
strategy.close("long", when = total_pos <= 0)
strategy.close("short", when = total_pos >= 0)