
यह रणनीति मेरे द्वारा पहले प्रकाशित की गई सरल ट्रैक स्टॉप रणनीति का एक बहु-समय-सीमा संस्करण है। पिछली रणनीति ने केवल बुनियादी ट्रैक स्टॉप का उपयोग करके स्थिति में प्रवेश किया था। यह अच्छी तरह से काम करता है, इसलिए मैंने इसमें कुछ सुधार करने की कोशिश की। मुझे आश्चर्य है कि अगर एक ही एटीआर ट्रैक स्टॉप का उपयोग विभिन्न समय-सीमाओं पर किया जाता है और उन्हें एक सिग्नल में मिलाया जाता है तो क्या होगा?
इस रणनीति में, आप केवल एटीआर स्टॉप का उपयोग कर सकते हैं और 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)