یہ حکمت عملی میری پچھلی سادہ ٹریلنگ اسٹاپ نقصان کی حکمت عملی کا ایک ملٹی ٹائم فریم ورژن ہے۔ پچھلی حکمت عملی میں صرف پوزیشنوں میں داخل ہونے کے لئے بنیادی ٹریلنگ اسٹاپ نقصان کا استعمال کیا گیا تھا۔ یہ کافی اچھی طرح سے کام کرتا تھا لہذا میں نے اسے بہتر بنانے کی کوشش کی۔ میں نے سوچا کہ اگر میں مختلف ٹائم فریم پر ایک ہی اے ٹی آر ٹریلنگ اسٹاپ نقصان کا استعمال کروں اور انہیں ایک سگنل میں جوڑ دوں تو کیا ہوگا؟
اس حکمت عملی میں آپ صرف اے ٹی آر اسٹاپ استعمال کرسکتے ہیں اور اپنے موجودہ ٹائم فریم کے علاوہ 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)