মাল্টি-টাইমফ্রেম ট্রেলিং স্টপ লস কৌশল

লেখক:চাওঝাং, তারিখঃ ২০২৪-০১-০৮ ১১ঃ২৪ঃ২৪
ট্যাগঃ

img

সারসংক্ষেপ

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

এই কৌশলটিতে আপনি কেবল এটিআর স্টপ ব্যবহার করতে পারেন এবং আপনার বর্তমান টাইমফ্রেমের পাশাপাশি 3 টি উচ্চতর সময়সীমা চয়ন করতে পারেন। এই সমস্ত সময়সীমার ট্রেলিং স্টপ লস চার্টে প্লট করা হবে। যদি সমস্ত 4 টি টাইমফ্রেম লং সিগন্যালে একমত হয় তবে লং পজিশন প্রবেশ করুন। কমপক্ষে 2 টি টাইমফ্রেম লং সিগন্যালে একমত না হলে লং পজিশন বন্ধ করুন। শর্ট পজিশনের যুক্তি একই।

কৌশলগত যুক্তি

এই কৌশলটির মূলটি হ'ল ট্রেলিং স্টপ লস এবং ট্রেন্ড অনুসরণ। এটিআর মানের উপর ভিত্তি করে স্টপ লসের স্তর সেট করতে ট্রেলিং স্টপ লস ব্যবহার করা হয়, যা স্টপ লসকে কার্যকরভাবে আঘাত করা থেকে বিরত রাখতে পারে। ট্রেন্ড অনুসরণ বিভিন্ন সময়সীমার মধ্যে প্রবণতার দিক পর্যবেক্ষণের ভিত্তিতে প্রবেশ নির্ধারণ করে।

বিশেষত, কৌশলটি প্রথমে বিভিন্ন টাইমফ্রেমগুলিতে এটিআর মান গণনা করে এবং স্টপ লস দূরত্ব সেট করে। যখন দাম স্টপ লস স্তরটি ভেঙে যায় তখন এটি দীর্ঘ / সংক্ষিপ্ত সংকেত উত্পন্ন করে। যদি একাধিক টাইমফ্রেমের সংকেতগুলি একমত হয় তবে অবস্থান নেওয়া হবে। তারপরে প্রবণতা দিক অনুসারে স্টপ লস স্তরটি ট্র্যাক করা চালিয়ে যান। যদি নির্দিষ্ট শতাংশ টাইমফ্রেমের সংকেতগুলি বিপরীত হয় তবে অবস্থান বন্ধ করুন।

বিভিন্ন সময়ের মধ্যে প্রবণতা বিচারকে একত্রিত করে, ভুয়া ব্রেকআউটগুলি কার্যকরভাবে ফিল্টার করা যেতে পারে। একই সময়ে, লাভের পিছনে স্টপ লক এবং ঝুঁকি নিয়ন্ত্রণ করে।

সুবিধা

  1. একাধিক টাইমফ্রেম ব্যবহার করা গোলমাল ফিল্টার করতে এবং ট্রেন্ডের দিকনির্দেশনা সনাক্ত করতে সহায়তা করে
  2. এটিআর ট্রেলিং স্টপ স্টপ দূরত্বকে গতিশীলভাবে সামঞ্জস্য করে, বন্ধ হওয়ার সম্ভাবনা হ্রাস করে
  3. প্রবণতা অনুসরণ এবং স্টপ লস ম্যানেজমেন্ট একত্রিত করে, আপনি প্রবণতা অনুসরণ এবং সময় বন্ধ করতে পারেন
  4. কয়েকটি পরামিতি, সহজেই বোঝা এবং অপ্টিমাইজ করা

ঝুঁকি বিশ্লেষণ

  1. এটিআর স্টপ খুব কাছাকাছি বা খুব দূরে হতে পারে যদি প্যারামিটার সঠিকভাবে সেট না করা হয়, আঘাত বা স্টপ দূরত্ব খুব বড় হতে পারে
  2. একাধিক টাইমফ্রেম সমন্বয় কার্যকরভাবে কাজ করতে পারে না বা ভুল বিচার যদি পরামিতি সঠিকভাবে সেট না
  3. উভয় স্টপ লস এবং টাইমফ্রেম পরামিতি সঠিকভাবে কনফিগার করতে হবে, অন্যথায় সেরা ফলাফল অর্জন করতে পারে না

সমাধান:

  1. সর্বোত্তম খুঁজে পেতে বিভিন্ন পরামিতি সেট এবং পণ্য পরীক্ষা
  2. নির্ভরযোগ্য প্রবণতা মূল্যায়ন নিশ্চিত করার জন্য অনুপাত এবং সময়সীমার সংখ্যা অপ্টিমাইজ করুন
  3. এটিআর মাল্টিপ্লিফায়ারকে হিট না হওয়ার এবং সঠিক দূরত্বের মধ্যে ভারসাম্য বজায় রাখার জন্য সামঞ্জস্য করুন

অপ্টিমাইজেশান নির্দেশাবলী

কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ

  1. প্রবণতা মূল্যায়নের জন্য সেরা সমন্বয় খুঁজে পেতে সময়সীমার সংখ্যা যোগ করুন/কম করুন
  2. সর্বোত্তম স্টপ দূরত্ব নির্ধারণের জন্য বিভিন্ন ATR গুণক পরীক্ষা করুন
  3. প্রবণতা অব্যাহত থাকায় আরও অবস্থান তৈরি করতে পুনরায় প্রবেশের প্রক্রিয়া যুক্ত করুন
  4. প্রবেশ সংকেতগুলিতে অন্যান্য ফিল্টার অন্তর্ভুক্ত করুন যেমন ভলিউম সূচক ইত্যাদি
  5. বিভিন্ন পণ্যের জন্য প্যারামিটার টিউনিং

সিদ্ধান্ত

এই কৌশলটি মাল্টি-টাইমফ্রেম এটিআর ট্রেলিং স্টপগুলির মাধ্যমে প্রবণতা অনুসরণ এবং ঝুঁকি নিয়ন্ত্রণকে একত্রিত করে। একক স্টপের তুলনায়, এটি প্রবণতার দিকটি আরও স্পষ্টভাবে সনাক্ত করে; একক টাইমফ্রেমের তুলনায়, এটি প্রচুর শব্দ ফিল্টার করে। স্টপ প্যারামিটার এবং টাইমফ্রেমগুলিতে সঠিক কনফিগারেশন সর্বোত্তম ফলাফল অর্জনের মূল চাবিকাঠি। এটি এমন বিনিয়োগকারীদের জন্য উপযুক্ত যারা নির্দিষ্ট ড্রডাউনগুলি সহ্য করতে পারে এবং স্থিতিশীল রিটার্ন সরবরাহ করে। আরও বর্ধনের এবং প্রসারণের সুযোগ রয়েছে। এটি একটি খুব প্রতিশ্রুতিশীল কৌশল ধারণা।


/*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)


আরো