बहु-समय-अंतराल अनुवर्ती स्टॉप लॉस रणनीति

लेखक:चाओझांग, दिनांकः 2024-01-08 11:24:24
टैगः

img

अवलोकन

यह रणनीति मेरी पिछली सरल ट्रेलिंग स्टॉप लॉस रणनीति का एक बहु-टाइमफ्रेम संस्करण है। पिछली रणनीति ने केवल पदों में प्रवेश करने के लिए बुनियादी ट्रेलिंग स्टॉप लॉस का उपयोग किया। यह काफी अच्छी तरह से काम किया इसलिए मैंने इसे बेहतर बनाने की कोशिश की। मैंने सोचा कि अगर मैं एक ही एटीआर ट्रेलिंग स्टॉप लॉस का उपयोग करता हूं तो क्या होगा विभिन्न समय सीमाओं पर और उन्हें एक संकेत में मिलाएं।

इस रणनीति में आप केवल एटीआर स्टॉप का उपयोग कर सकते हैं और अपने वर्तमान समय सीमा के अलावा 3 अन्य उच्च समय सीमाओं का चयन कर सकते हैं। इन सभी समय सीमाओं से ट्रेलिंग स्टॉप लॉस चार्ट पर चित्रित किया जाएगा। यदि सभी 4 समय सीमाएं लंबे संकेत पर सहमत हैं तो लंबी स्थिति दर्ज करें। कम से कम 2 समय सीमाएं लंबे संकेत पर असहमत होने पर लंबी स्थिति बंद करें। लघु पदों के लिए तर्क समान है।

रणनीति तर्क

इस रणनीति का मूल ट्रेलिंग स्टॉप लॉस और ट्रेंड फॉलोइंग में निहित है। ट्रेलिंग स्टॉप लॉस का उपयोग एटीआर मूल्य के आधार पर स्टॉप लॉस स्तर सेट करने के लिए किया जाता है, जो स्टॉप लॉस को प्रभावित होने से प्रभावी ढंग से बचा सकता है। ट्रेंड फॉलोइंग विभिन्न समय सीमाओं में ट्रेंड दिशा का निरीक्षण करने के आधार पर प्रवेश निर्धारित करता है।

विशेष रूप से, रणनीति पहले विभिन्न समय सीमाओं पर एटीआर मूल्य की गणना करती है और स्टॉप लॉस दूरी निर्धारित करती है। फिर जब कीमत स्टॉप लॉस स्तर से टूटती है तो यह लंबे / छोटे संकेत उत्पन्न करती है। यदि कई समय सीमाओं के संकेत सहमत होते हैं, तो स्थिति ली जाएगी। उसके बाद, प्रवृत्ति दिशा के अनुसार स्टॉप लॉस स्तर को ट्रैक करते रहें। यदि समय सीमाओं के एक निश्चित प्रतिशत से संकेत उलट जाते हैं, तो स्थिति बंद हो जाती है।

विभिन्न अवधियों में रुझान के आकलन को जोड़कर, नकली ब्रेकआउट को प्रभावी ढंग से फ़िल्टर किया जा सकता है। साथ ही, लाभ में ट्रेलिंग स्टॉप लॉक और जोखिम को नियंत्रित करता है।

लाभ

  1. कई समय सीमाओं का उपयोग करने से शोर को फ़िल्टर करने और प्रवृत्ति की दिशा की पहचान करने में मदद मिलती है
  2. ए.टी.आर. ट्रेलिंग स्टॉप गतिशील रूप से स्टॉप दूरी को समायोजित करता है, जिससे बाहर होने की संभावना कम हो जाती है
  3. प्रवृत्ति के बाद और स्टॉप हानि प्रबंधन के संयोजन, आप प्रवृत्ति का पालन कर सकते हैं और समय में बाहर रोक
  4. कुछ पैरामीटर, समझने और अनुकूलित करने में आसान

जोखिम विश्लेषण

  1. एटीआर स्टॉप बहुत करीब या बहुत दूर हो सकता है यदि पैरामीटर ठीक से सेट नहीं हैं, हिट होने के लिए प्रवण या स्टॉप दूरी बहुत बड़ी है
  2. कई समय सीमाओं का संयोजन प्रभावी ढंग से काम नहीं कर सकता है या यदि पैरामीटर सही ढंग से सेट नहीं हैं तो गलत तरीके से न्याय कर सकता है
  3. स्टॉप लॉस और टाइमफ्रेम पैरामीटर दोनों को ठीक से कॉन्फ़िगर करने की आवश्यकता है, अन्यथा सर्वोत्तम परिणाम प्राप्त नहीं हो सकते हैं

समाधान:

  1. इष्टतम खोजने के लिए विभिन्न पैरामीटर सेट और उत्पादों का परीक्षण करें
  2. विश्वसनीय रुझान आकलन सुनिश्चित करने के लिए अनुपात और समय सीमाओं की संख्या को अनुकूलित करें
  3. एटीआर गुणक को सही दूरी और हिट न होने के बीच संतुलन के लिए समायोजित करें

अनुकूलन दिशाएँ

इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः

  1. रुझान आकलन के लिए सर्वोत्तम संयोजन खोजने के लिए समय सीमाओं की संख्या जोड़ें/कम करें
  2. इष्टतम स्टॉप दूरी निर्धारित करने के लिए विभिन्न एटीआर गुणकों का परीक्षण करें
  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)


अधिक