এই কৌশলটি আমার পূর্ববর্তী সহজ ট্রেইলিং স্টপ লস কৌশলটির একটি মাল্টি-টাইমফ্রেম সংস্করণ। পূর্ববর্তী কৌশলটি কেবলমাত্র মৌলিক ট্রেইলিং স্টপ লস ব্যবহার করে অবস্থানগুলিতে প্রবেশ করেছিল। এটি বেশ ভালভাবে কাজ করেছিল তাই আমি এটি উন্নত করার চেষ্টা করেছি। আমি ভেবেছিলাম যদি আমি বিভিন্ন টাইমফ্রেমে একই এটিআর ট্রেইলিং স্টপ লস ব্যবহার করি এবং সেগুলি এক সংকেতে একত্রিত করি তবে কী হবে।
এই কৌশলটিতে আপনি কেবল এটিআর স্টপ ব্যবহার করতে পারেন এবং আপনার বর্তমান টাইমফ্রেমের পাশাপাশি 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)