यह एक मात्रात्मक ट्रेडिंग रणनीति है जो ट्रिपल सुपरट्रेंड, ईएमए और एडीएक्स संकेतकों को जोड़ती है। यह एक ट्रिपल सुपरट्रेंड प्रणाली का उपयोग करके ट्रेडिंग सिग्नल उत्पन्न करती है और ईएमए और एडीएक्स को फ़िल्टर के रूप में लागू करती है ताकि ट्रेडिंग आवृत्ति को नियंत्रित किया जा सके और सिग्नल की गुणवत्ता में सुधार किया जा सके।
विभिन्न मापदंडों के साथ तीन सुपरट्रेंड सिस्टम का उपयोग करें और ट्रेडिंग सिग्नल उत्पन्न करें जब तीनों सुपरट्रेंड दिशा पर सहमत हों।
ईएमए को ट्रेंड फ़िल्टर के रूप में लागू करें, केवल बंद होने पर ईएमए से ऊपर और बंद होने पर ईएमए से नीचे होने पर शॉर्ट करें।
ADX को ट्रेंड स्ट्रेंथ फिल्टर के रूप में लागू करें, केवल तभी ट्रेड करें जब ADX एक सीमा से ऊपर हो।
लाभप्रदता और जोखिम नियंत्रण को समायोजित करने के लिए पुनः प्रवेश विकल्प की अनुमति दें।
विशेष रूप से, लंबी प्रविष्टि की स्थिति तब होती है जब तीनों सुपरट्रेंड तेजी की ओर मुड़ते हैं, बंद ईएमए से ऊपर होता है और एडीएक्स सीमा से ऊपर होता है। छोटी प्रविष्टि की स्थिति तब होती है जब तीनों सुपरट्रेंड मंदी की ओर मुड़ते हैं, बंद ईएमए से नीचे होता है और एडीएक्स सीमा से ऊपर होता है। बाहर निकलते हैं जब सुपरट्रेंड में से कोई भी दिशा विपरीत होती है।
रणनीति ने दृश्य प्रवृत्ति निर्धारण में सहायता के लिए सुपरट्रेंड समर्थन और प्रतिरोध रेखाओं को भी ग्राफ किया है।
ट्रिपल सुपरट्रेंड सिस्टम झूठे ब्रेकआउट को फ़िल्टर करता है और प्रविष्टि सटीकता में सुधार करता है।
ईएमए और एडीएक्स के दोहरे फिल्टर से घाटे कम होते हैं और जोखिम प्रबंधन में सुधार होता है।
पुनः प्रवेश विकल्प जोखिम वरीयता के आधार पर लाभप्रदता को समायोजित करने की अनुमति देता है।
दृश्य सुपरट्रेंड लाइनें ट्रेंड दिशा निर्धारित करने में मदद करती हैं।
सुपरट्रेंड और अन्य संकेतकों में विलंब होता है और इससे देर से प्रवेश या जल्दी बाहर निकलने का कारण बन सकता है।
बहुत सख्त फ़िल्टर अवसरों को याद कर सकते हैं।
Whipsaws से सीमा-बंद बाजारों में घाटे हो सकते हैं।
पुनः प्रवेश की अनुमति देने से व्यापार की आवृत्ति और फिसलने की लागत बढ़ जाती है।
इन जोखिमों को मापदंडों, फिल्टरों को अनुकूलित करके और गतिशील स्टॉप का उपयोग करके कम किया जा सकता है। अनिश्चित बाजार स्थितियों को संबोधित करने के लिए स्थिति आकार और सख्त स्टॉप लागू किए जाने चाहिए।
इस रणनीति को कई पहलुओं में अनुकूलित किया जा सकता हैः
इष्टतम सुपरट्रेंड और ईएमए सेटिंग्स खोजने के लिए विभिन्न पैरामीटर संयोजनों का परीक्षण करें।
झूठे संकेतों को कम करने के लिए ADX सीमा को अनुकूलित करें.
अन्य फ़िल्टर जैसे अस्थिरता, मात्रा आदि जोड़ें।
विभिन्न उत्पादों के लिए अलग-अलग मापदंडों का अनुकूलन करें।
बेहतर जोखिम नियंत्रण के लिए गतिशील स्टॉप लॉस तंत्र का निर्माण करना।
बेहतर प्रवेश और निकास नियम खोजने के लिए मशीन लर्निंग का अन्वेषण करें।
यह रणनीति ट्रिपल सुपरट्रेंड सिस्टम की ताकत का उपयोग करती है और सिग्नल की गुणवत्ता में प्रभावी ढंग से सुधार और जोखिमों को नियंत्रित करने के लिए ईएमए और एडीएक्स डबल फिल्टर के साथ इसे बढ़ाती है। मापदंडों, फिल्टर, गतिशील स्टॉप में आगे के सुधार इसकी मजबूती और अनुकूलन क्षमता में सुधार कर सकते हैं। ट्रेंड विश्लेषण के साथ संयुक्त, यह मात्रात्मक व्यापार के लिए प्रभावी प्रवेश और निकास संकेत प्रदान करता है।
/*backtest start: 2023-08-18 00:00:00 end: 2023-09-17 00:00:00 period: 2h 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/ // ©kunjandetroja //@version=5 strategy('Triple Supertrend with EMA and ADX', overlay=true) m1 = input.float(1,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 1') m2 = input.float(2,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 2') m3 = input.float(3,"ATR Multi",minval = 1,maxval= 6,step=0.5,group='ST 3') p1 = input.int(10,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 1') p2 = input.int(15,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 2') p3 = input.int(20,"ATR Multi",minval = 5,maxval= 25,step=1,group='ST 3') len_EMA = input.int(200,"EMA Len",minval = 5,maxval= 250,step=1) len_ADX = input.int(14,"ADX Len",minval = 1,maxval= 25,step=1) len_Di = input.int(14,"Di Len",minval = 1,maxval= 25,step=1) adx_above = input.float(25,"adx filter",minval = 1,maxval= 50,step=0.5) var bool long_position = false adx_filter = input.bool(false, "Add Adx & EMA filter") renetry = input.bool(true, "Allow Reentry") f_getColor_Resistance(_dir, _color) => _dir == 1 and _dir == _dir[1] ? _color : na f_getColor_Support(_dir, _color) => _dir == -1 and _dir == _dir[1] ? _color : na [superTrend1, dir1] = ta.supertrend(m1, p1) [superTrend2, dir2] = ta.supertrend(m2, p2) [superTrend3, dir3] = ta.supertrend(m3, p3) EMA = ta.ema(close, len_EMA) [diplus,diminus,adx] = ta.dmi(len_Di,len_ADX) // ADX Filter adxup = adx > adx_above and close > EMA adxdown = adx > adx_above and close < EMA sum_dir = dir1 + dir2 + dir3 dir_long = if(adx_filter == false) sum_dir == -3 else sum_dir == -3 and adxup dir_short = if(adx_filter == false) sum_dir == 3 else sum_dir == 3 and adxdown Exit_long = dir1 == 1 and dir1 != dir1[1] Exit_short = dir1 == -1 and dir1 != dir1[1] // BuySignal = dir_long and dir_long != dir_long[1] // SellSignal = dir_short and dir_short != dir_short[1] // if BuySignal // label.new(bar_index, low, 'Long', style=label.style_label_up) // if SellSignal // label.new(bar_index, high, 'Short', style=label.style_label_down) longenter = if(renetry == false) dir_long and long_position == false else dir_long shortenter = if(renetry == false) dir_short and long_position == true else dir_short if longenter long_position := true if shortenter long_position := false strategy.entry('BUY', strategy.long, when=longenter) strategy.entry('SELL', strategy.short, when=shortenter) strategy.close('BUY', Exit_long) strategy.close('SELL', Exit_short) buy1 = ta.barssince(dir_long) sell1 = ta.barssince(dir_short) colR1 = f_getColor_Resistance(dir1, color.red) colS1 = f_getColor_Support(dir1, color.green) colR2 = f_getColor_Resistance(dir2, color.orange) colS2 = f_getColor_Support(dir2, color.yellow) colR3 = f_getColor_Resistance(dir3, color.blue) colS3 = f_getColor_Support(dir3, color.maroon) plot(superTrend1, 'R1', colR1, linewidth=2) plot(superTrend1, 'S1', colS1, linewidth=2) plot(superTrend2, 'R1', colR2, linewidth=2) plot(superTrend2, 'S1', colS2, linewidth=2) plot(superTrend3, 'R1', colR3, linewidth=2) plot(superTrend3, 'S1', colS3, linewidth=2) // // Intraday only // var int new_day = na // var int new_month = na // var int new_year = na // var int close_trades_after_time_of_day = na // if dayofmonth != dayofmonth[1] // new_day := dayofmonth // if month != month[1] // new_month := month // if year != year[1] // new_year := year // close_trades_after_time_of_day := timestamp(new_year,new_month,new_day,15,15) // strategy.close_all(time > close_trades_after_time_of_day)