यह रणनीति वर्तमान प्रवृत्ति दिशा निर्धारित करने के लिए बोलिंगर बैंड, केल्टनर चैनलों और अनुकूलन सापेक्ष शक्ति सूचकांक का उपयोग करती है, जिसमें प्रवेश के समय के लिए पैराबोलिक एसएआर के साथ संयुक्त होता है। ट्रेडिंग सिग्नल तब उत्पन्न होते हैं जब इन तीन संकेतकों के निर्णय सहमत होते हैं। रणनीति मुख्य रूप से प्रवृत्ति दिशा का न्याय करती है और लाभ के उद्देश्य से, जब प्रवृत्ति बदलती है, तो समय पर प्रवेश करती है।
वर्तमान प्रवृत्ति को निर्धारित करने के लिए यह रणनीति निम्नलिखित तीन तकनीकी संकेतकों को जोड़ती हैः
SQUEEZE Momentum Indicator: बोलिंगर बैंड और केल्टनर चैनलों की गणना करता है। जब दो बैंड ओवरलैप होते हैं, तो यह एक निचोड़ उत्पन्न करता है और एक आसन्न प्रवृत्ति परिवर्तन का संकेत देता है। यह निचोड़ की स्थिति और रैखिक प्रतिगमन ढलान देता है।
आरएसआई वॉल्यूम वेटेड: आरएसआई वॉल्यूम द्वारा भारित की गणना करता है। ओवरबॉट/ओवरसोल्ड स्तरों को निर्धारित करने के लिए मध्य बिंदु का उपयोग करता है। यह वॉल्यूम परिवर्तनों पर जोर देता है।
पैराबोलिक एसएआरः एसएआर रेखा के सापेक्ष वर्तमान मूल्य के स्थान का न्याय करता है। मूल्य से ऊपर एसएआर नीचे की ओर संकेत करता है जबकि मूल्य से नीचे एसएआर ऊपर की ओर संकेत करता है।
रणनीति ट्रेंड की दिशा निर्धारित करने के लिए बोलिंगर बैंड का उपयोग करती है, इसे परिष्कृत करने के लिए केल्टनर चैनल, ओवरबॉट/ओवरसोल्ड होने पर रिवर्स अवसर खोजने के लिए आरएसआई, और प्रवेश के समय के लिए एसएआर। तर्क हैः
बोलिंगर बैंड, केल्टनर चैनल, संपीड़न संकेतक की गणना करें. संपीड़न होने पर स्टैंडबाय में प्रवेश करें.
वॉल्यूम भारित आरएसआई की गणना करें। मध्य बिंदु से ऊपर आरएसआई ऊपर की ओर रुझान, मध्य बिंदु से नीचे की ओर रुझान दर्शाता है।
पैराबोलिक SAR की गणना करें। कीमत के नीचे SAR ऊपर की ओर रुझान दिखाता है, कीमत के ऊपर नीचे की ओर रुझान दिखाता है।
तीनों संकेतकों को मिलाएं: जब निचोड़ होता है, तो आरएसआई मध्य बिंदु से ऊपर जाता है, एसएआर मूल्य से नीचे है, एक लंबा संकेत उत्पन्न होता है। जब निचोड़ होता है, आरएसआई मध्य बिंदु से नीचे जाता है, एसएआर मूल्य से ऊपर है, एक छोटा संकेत उत्पन्न होता है।
जब कोई सिग्नल ट्रिगर हो जाता है, तो जांचें कि क्या पिछले बार पर तीन संकेतकों के निर्णय वर्तमान सिग्नल के विपरीत हैं। यदि हां, तो व्यापार में प्रवेश करें।
स्टॉप लॉस सेट करें और प्रवेश के बाद लाभ लें, स्टॉप लॉस को ट्रेल करें।
इस रणनीति के फायदे:
कई संकेतकों का संयोजन प्रवृत्ति निर्णय की सटीकता में सुधार करता है। निचोड़ सटीक रूप से प्रवृत्ति परिवर्तनों का पता लगाता है, आरएसआई स्पष्ट रूप से ओवरबॉट / ओवरसोल्ड स्तरों की पहचान करता है, एसएआर सटीक रूप से प्रविष्टि को गुणा करता है।
सूचक तर्क सरल और समझने में आसान है।
कई संकेतकों की पुष्टि से झूठे ब्रेकआउट को फ़िल्टर करने में मदद मिलती है।
स्टॉप लॉस और टेक प्रॉफिट यांत्रिकी लाभ में ताला लगाता है और जोखिम को सीमित करता है।
व्यापक बैकटेस्ट डेटा विश्वसनीयता सुनिश्चित करता है।
कुछ जोखिम भी हैं:
लंबे और छोटे प्रविष्टि तर्क समान हैं और परस्पर विरोधी संकेत उत्पन्न कर सकते हैं। फ़िल्टरिंग की आवश्यकता है।
सभी संकेतक पैरामीटर अनुकूलन का उपयोग करते हैं, जोखिम ओवरफिटिंग।
उच्च व्यापारिक आवृत्ति, स्थिति आकार नियंत्रण की आवश्यकता है।
स्टॉप लॉस बहुत करीब हो सकता है और आसानी से रोक दिया जा सकता है।
समाधान:
सिग्नल दोलन से बचने के लिए सूचक निर्णयों पर स्थिरता जांच जोड़ें।
पैरामीटर को समायोजित करने और ओवरफिटिंग से बचने के लिए पैदल आगे विश्लेषण का उपयोग करें।
दिशा के अनुसार पदों को नियंत्रित करने के लिए पिरामिड आकार सेट करें.
स्टॉप लॉस की कीमत को अनुकूलित करने के लिए विभिन्न स्टॉप लॉस रेंज का परीक्षण करें।
रणनीति को अनुकूलित करने के लिए कुछ दिशाएंः
स्थिरता के लिए सूचक मापदंडों का अनुकूलन करें। गतिशील अनुकूलन पर विचार करें।
निश्चित/समान प्रतिशत के रूप में स्थिति आकार तर्क जोड़ें.
विभिन्न स्टॉप लॉस विधियों जैसे अस्थिरता या रैखिक स्टॉप, शून्य स्थिति आदि का परीक्षण करें।
फिक्स्ड फ्रैक्शनल पोजीशन साइजिंग जैसे मनी मैनेजमेंट को जोड़ें।
गतिशील प्रवेश और निकास के लिए मशीन लर्निंग मॉडल का उपयोग करें।
सहसंबंधित प्रणालीगत जोखिमों को कम करने के लिए लंबी और छोटी दोनों ओर जाकर हेजिंग तंत्र जोड़ें।
अधिक संकेतकों पर विचार करें और सटीकता में सुधार के लिए मतदान तंत्र बनाएं।
रणनीति में प्रवृत्ति की दिशा निर्धारित करने के लिए कई संकेतकों का उपयोग करने और चालाक रूप से निचोड़ पर प्रवेश करने का स्पष्ट तर्क है। स्टॉप लॉस और ले लाभ यांत्रिकी जोखिम को सीमित करती है। पैरामीटर अनुकूलन और जोखिम नियंत्रण बैकटेस्ट और लाइव परिणामों में और सुधार कर सकते हैं। यह ट्रेंडिंग उत्पादों के लिए उपयुक्त एक स्थिर प्रवृत्ति के बाद की रणनीति है, और दैनिक जैसे बड़े समय सीमा पर भी काम कर सकती है। मजबूत व्यावहारिक मूल्य के साथ, इस रणनीति को कई पहलुओं में और अनुकूलित किया जा सकता है।
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © XaviZ //#####©ÉÉÉɶN############################################### //####*..´´´´´´,,,»ëN######################################## //###ë..´´´´´´,,,,,,''%©##################################### //###'´´´´´´,,,,,,,'''''?¶################################### //##o´´´´´´,,,,,,,''''''''*©################################# //##'´´´´´,,,,,,,'''''''^^^~±################################ //#±´´´´´,,,,,,,''''''''^í/;~*©####æ%;í»~~~~;==I±N########### //#»´´´´,,,,,,'''''''''^;////;»¶X/í~~/~~~;=~~~~~~~~*¶######## //#'´´´,,,,,,''''''''^^;////;%I^~/~~/~~~=~~~;=?;~~~~;?ë###### //©´´,,,,,,,''''''''^^~/////X~/~~/~~/~~»í~~=~~~~~~~~~~^;É#### //¶´,,,,,,,''''''''^^^;///;%;~/~~;í~~»~í?~?~~~?I/~~~~?*=íÑ### //N,,,,,,,'''''''^^^^^///;;o/~~;;~~;£=»í»;IX/=~~~~~~^^^^'*æ## //#í,,,,,''''''''^^^^^;;;;;o~»~~~~íX//~/»~;í?IíI»~~^/*?'''=N# //#%,,,'''''''''^^^^^^í;;;;£;~~~//»I»/£X/X/»í*&~~~^^^^'^*~'É# //#©,,''''''''^^^^^^^^~;;;;&/~/////*X;í;o*í»~=*?*===^'''''*£# //##&''''''''^^^^^^^^^^~;;;;X=í~~~»;;;/~;í»~»±;^^^^^';=''''É# //##N^''''''^^^^^^^^^^~~~;;;;/£;~~/»~~»~~///o~~^^^^''''?^',æ# //###Ñ''''^^^^^^^^^^^~~~~~;;;;;í*X*í»;~~IX?~~^^^^/?'''''=,=## //####X'''^^^^^^^^^^~~~~~~~~;;íííííí~~í*=~~~~Ií^'''=''''^»©## //#####£^^^^^^^^^^^~~~~~~~~~~~íííííí~~~~~*~^^^;/''''='',,N### //######æ~^^^^^^^^~~~~~~~~~~~~~~íííí~~~~~^*^^^'=''''?',,§#### //########&^^^^^^~~~~~~~~~~~~~~~~~~~~~~~^^=^^''=''''?,íN##### //#########N?^^~~~~~~~~~~~~~~~~~~~~~~~~^^^=^''^?''';í@####### //###########N*~~~~~~~~~~~~~~~~~~~~~~~^^^*'''^='''/É######### //##############@;~~~~~~~~~~~~~~~~~~~^^~='''~?'';É########### //#################É=~~~~~~~~~~~~~~^^^*~'''*~?§############## //#####################N§£I/~~~~~~»*?~»o§æN################## //@version=4 strategy(title="M-SQUEEZE", overlay = true) //study(title="M-SQUEEZE", overlay = true) src = input(close, "SOURCE", type = input.source) // ███▓▒░░ VARIABLES ░░▒▓███ var bool longCond = na, var bool shortCond = na var int CondIni_long0 = 0, var int CondIni_short0 = 0 var int CondIni_long = 0, var int CondIni_short = 0 var float last_open_longCondition = na, var float last_open_shortCondition = na var int last_longCondition0 = na, var int last_shortCondition0 = na var int last_longCondition = na, var int last_shortCondition = na var bool long_tp = na, var bool short_tp = na var int last_long_tp = na, var int last_short_tp = na var bool Final_Long_tp = na, var bool Final_Short_tp = na var bool SMI_longCond = na, var bool SMI_shortCond = na var bool RSI_longCond = na, var bool RSI_shortCond = na var bool ADX_longCond = na, var bool ADX_shortCond = na var bool SAR_longCond = na, var bool SAR_shortCond = na var bool Final_longCondition0 = na, var bool Final_shortCondition0 = na var bool Final_longCondition = na, var bool Final_shortCondition = na // ███▓▒░░ SQUEEZE MOMENTUM INDICATOR ░░▒▓███ Act_SMI = input(true, "SQUEEZE MOMENTUM INDICATOR") BB_length = input(85, title="BOLLINGER BANDS LENGTH", minval = 1) BB_mult = input(2.1, title="BOLLINGER BANDS MULTI-FACTOR", minval = 0.1, step = 0.1) KC_length = input(38, title="KELTNER CHANNEL LENGTH", minval = 1) KC_mult = input(2.0, title="KELTNER CHANNEL MULTI-FACTOR", minval = 0.1, step = 0.1) SQUEEZE_M(_src,_BB_length,_BB_mult,_KC_length,_KC_mult)=> // Calculate BB basis = sma(_src, _BB_length) dev = _BB_mult * stdev(_src, _BB_length) upperBB = basis + dev lowerBB = basis - dev // Calculate KC ma = sma(src, _KC_length) rangema = sma(tr, _KC_length) upperKC = ma + rangema * _KC_mult lowerKC = ma - rangema * _KC_mult // Squeeze sqzOn = lowerBB > lowerKC and upperBB < upperKC sqzOff = lowerBB < lowerKC and upperBB > upperKC nosqz = sqzOn == false and sqzOff == false // Linear Regression curve val = linreg(_src - avg(avg(highest(high, _KC_length), lowest(low, _KC_length)), sma(close, _KC_length)), _KC_length, 0) [nosqz,val] [NOSQZ,VAL] = SQUEEZE_M(src,BB_length,BB_mult,KC_length,KC_mult) barcolor(iff(VAL > 0, iff(VAL > nz(VAL[1]), color.lime, color.green), iff(VAL < nz(VAL[1]), color.red, color.maroon))) // ███▓▒░░ SAR ░░▒▓███ Act_SAR = input(true, "PARABOLIC SAR") Sst = input (0.73, "SAR STAR", step=0.01, minval = 0.01) Sinc = input (0.5, "SAR INC", step=0.01, minval = 0.01) Smax = input (0.06, "SAR MAX", step=0.01, minval = 0.01) SAR = sar(Sst, Sinc, Smax) plot(SAR, style = plot.style_cross, title = "SAR") // ███▓▒░░ RSI VOLUME WEIGHTED ░░▒▓███ Act_RSI = input(true, "RSI VOLUME WEIGHTED") RSI_len = input(22, "RSI LENGHT", minval = 1) RSI_obos = input(45,title="RSI CENTER LINE", type=input.integer, minval = 1) WiMA(_src, _length)=> var float MA_s=0.0 MA_s:=(_src + nz(MA_s[1] * (_length-1)))/_length MA_s RSI_Volume(fv, length)=> up=iff(fv>fv[1],abs(fv-fv[1])*volume,0) dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0) upt=WiMA(up,length) dnt=WiMA(dn,length) 100*(upt/(upt+dnt)) RSI_V = RSI_Volume(src, RSI_len) // ███▓▒░░ STRATEGY ░░▒▓███ SMI_longCond := (Act_SMI ? (VAL > 0 and (VAL > nz(VAL[1])) and not NOSQZ) : RSI_longCond) RSI_longCond := (Act_RSI ? (RSI_V > RSI_obos) : SAR_longCond) SAR_longCond := (Act_SAR ? (SAR < close) : SMI_longCond) SMI_shortCond := (Act_SMI ? (VAL < 0 and (VAL < nz(VAL[1])) and not NOSQZ) : RSI_shortCond) RSI_shortCond := (Act_RSI ? (RSI_V < RSI_obos) : SAR_shortCond) SAR_shortCond := (Act_SAR ? (SAR > close) : SMI_shortCond) longCond := SMI_longCond and RSI_longCond and SAR_longCond shortCond := SMI_shortCond and RSI_shortCond and SAR_shortCond CondIni_long0 := longCond ? 1 : shortCond ? -1 : CondIni_long0[1] CondIni_short0 := longCond ? 1 : shortCond ? -1 : CondIni_short0[1] longCondition0 = (longCond and CondIni_long0[1] == -1) shortCondition0 = (shortCond and CondIni_short0[1] == 1) CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_long[1] CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_short[1] longCondition = (longCond[1] and CondIni_long[1] == -1) shortCondition = (shortCond[1] and CondIni_short[1] == 1) // ███▓▒░░ ALERTS & SIGNALS ░░▒▓███ plotshape(longCondition, title = "Long Signal", style = shape.triangleup, location = location.belowbar, color = color.blue, transp = 0, size = size.tiny) plotshape(shortCondition, title = "Short Signal", style = shape.triangledown, location = location.abovebar, color = #FF0000, transp = 0, size = size.tiny) //alertcondition(longCondition, title="Long Alert", message = "LONG") //alertcondition(shortCondition, title="Short Alert", message = "SHORT") // ███▓▒░░ BACKTESTING ░░▒▓███ testStartYear = input(2018, "BACKTEST START YEAR", minval = 1980, maxval = 2222) testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12) testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31) testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222) testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12) testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31) testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false strategy.entry("Long", strategy.long, when = longCondition0 and testPeriod) strategy.entry("Short", strategy.short, when = shortCondition0 and testPeriod)