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