यह रणनीति ट्रेडिंग सिग्नल उत्पन्न करने और फ़िल्टर करने के लिए अल्पकालिक और दीर्घकालिक हॉल मूविंग एवरेज का उपयोग करती है। अल्पकालिक हॉल मूविंग एवरेज का उपयोग सिग्नल उत्पन्न करने के लिए किया जाता है, जबकि दीर्घकालिक हॉल मूविंग एवरेज का उपयोग सिग्नल फ़िल्टर करने के लिए किया जाता है। ट्रेड केवल तभी किए जाते हैं जब अल्पकालिक हॉल मूविंग एवरेज दिशा बदलता है और दीर्घकालिक हॉल मूविंग एवरेज एक ही समग्र दिशा में आगे बढ़ रहा है।
यह रणनीति ट्रेडों में प्रवेश करते समय गतिशील रूप से स्टॉप लॉस सेट करने और लाभ स्तर लेने के लिए एटीआर संकेतक का भी उपयोग करती है।
अल्पकालिक हलचल औसत अल्पकालिक मूल्य रुझानों और मोड़ बिंदुओं को पकड़ता है। जब यह दिशा बदलता है, तो यह अल्पकालिक मूल्य रुझान में बदलाव का संकेत देता है।
लंबी अवधि का हलचल औसत समग्र मूल्य प्रवृत्ति को निर्धारित करता है। उदाहरण के लिए, जब यह बढ़ रहा है, तो कीमतें समग्र वृद्धिशील प्रवृत्ति में हैं।
ट्रेड तभी किए जाते हैं जब अल्पकालिक हलचल औसत दिशा बदलता है, और इसकी नई दिशा दीर्घकालिक हलचल औसत की दिशा के साथ संरेखित होती है। यह उन संकेतों को फ़िल्टर करता है जो समग्र प्रवृत्ति के खिलाफ जाते हैं और केवल अल्पकालिक बाजार शोर हो सकते हैं।
स्थिति में प्रवेश करने के बाद, स्टॉप लॉस और टेक प्रॉफिट स्तर एटीआर संकेतक मूल्य के आधार पर निर्धारित किए जाते हैं। एटीआर बाजार की अस्थिरता और जोखिम के स्तर को दर्शाता है। स्टॉप लॉस को मूल्य के निचले स्तरों से नीचे रखा जाता है जबकि लाभ लक्ष्य मूल्य के उच्च स्तरों पर, वर्तमान एटीआर रीडिंग से बंधे रेंज के साथ।
अल्पकालिक संकेतों और दीर्घकालिक फ़िल्टरों का संयोजन मध्यमकालिक रुझानों और महत्वपूर्ण बिंदुओं की प्रभावी ढंग से पहचान करता है, जिससे बाजार शोर से झूठे संकेतों से बचा जाता है।
एटीआर पर आधारित गतिशील स्टॉप लॉस और ले लाभ वर्तमान अस्थिरता, संतुलन लाभ लेने और हानि की रोकथाम के आधार पर उचित सीमाएं निर्धारित करता है।
हुल मूविंग एवरेज में स्टैंडर्ड मूविंग एवरेज के मुकाबले लचीलापन और सटीकता के फायदे हैं, जिसमें बेहतर ट्रेंड ट्रैकिंग है।
रणनीति संकेत उत्पन्न करने के लिए हुल चलती औसत के बीच क्रॉसिंग पर निर्भर करती है। झूठे क्रॉसिंग के परिणामस्वरूप खराब ट्रेड हो सकते हैं, जिसके लिए समग्र बाजार संरचना का विश्लेषण करना आवश्यक है।
रेंजिंग में, एक ट्रेडिंग रेंज में कीमत में उतार-चढ़ाव के साथ चंचल बाजार, सिग्नल त्रुटियां और अनावश्यक ट्रेडें ढेर हो सकती हैं। इस तरह के बाजारों के दौरान व्यापक परिस्थितियों के साथ संकेतों को फ़िल्टर करके इससे बचा जा सकता है।
स्टॉप लॉस और टेक प्रॉफिट एटीआर पर निर्भरता का मतलब है कि अशुद्ध अस्थिरता रीडिंग के परिणामस्वरूप खराब प्लेसमेंट होगा। अन्य अस्थिरता उपाय इसे ठीक करने के लिए एटीआर को बढ़ा सकते हैं।
आरएसआई जैसे अतिरिक्त अल्पकालिक संकेतक अभिसरण के माध्यम से संकेत की सटीकता में सुधार कर सकते हैं।
हेल चलती औसत के बीच फिल्टर तर्क को और अधिक सख्त प्रवेश आवश्यकताओं के लिए बढ़ाया जा सकता है, जिससे झूठे संकेतों से बचा जा सकता है।
पैरामीटर ट्यूनिंग अनुसंधान चलती औसत लंबाई, एटीआर अवधि आदि में परिवर्तन से स्थिरता और लाभप्रदता में सुधार का पता लगा सकता है।
यह रणनीति अल्पकालिक संकेत उत्पादन, दीर्घकालिक संकेत फ़िल्टरिंग और एटीआर-आधारित स्टॉप लॉस / टेक प्रॉफिट को एक मजबूत मध्यम अवधि के ट्रेंड फॉलोइंग फ्रेमवर्क में जोड़ती है। यह अल्पकालिक शोर को फ़िल्टर करते हुए मध्यम अवधि के inflection points की पहचान करने में सक्षम है। पैरामीटर अनुकूलन और जोड़े गए फ़िल्टर के साथ, यह और भी बेहतर प्रदर्शन प्राप्त कर सकता है।
/*backtest start: 2023-12-04 00:00:00 end: 2024-01-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Hull Filtered Strategy", overlay=true, pyramiding=0, default_qty_type= strategy.percent_of_equity, default_qty_value = 10, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0) // Parameters for Hull Moving Averages src = input(close, title="Source") signal_period = input(50, title="Period of signal HMA") filter_period = input(200, title="Period of filter HMA") strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"]) // Set allowed trading directions strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all strategy.risk.allow_entry_in(strat_dir_value) // stop loss and take profit sl_factor = input(2,title="Stop Loss Factor") tp_factor = input(3,title="Take Profit Factor") atr_period = input(14, title="ATR Period (SL/TP)") // Testing Start dates testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) //Stop date if you want to use a specific range of dates testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // ----------------------------------------------------------------------------- // Global variables // ----------------------------------------------------------------------------- var float tp = na var float sl = na var float position = na // ----------------------------------------------------------------------------- // Functions // ----------------------------------------------------------------------------- testWindow() => time >= testPeriodStart and time <= testPeriodStop ? true : false // ----------------------------------------------------------------------------- // The engine // ----------------------------------------------------------------------------- hma_signal = hma(src, signal_period) hma_filter = hma(src, filter_period) // Used to determine exits and stop losses atr_e = atr(atr_period) // if hma_filter increases hma_trend is set to 1, if it decreases hma_trend is set to -1. If no trend is available, hma_trend is set to ß0 trend = hma_filter > hma_filter[1] ? 1 : hma_filter < hma_filter[1] ? -1 : 0 signal = hma_signal > hma_signal[1] ? 1 : hma_signal < hma_signal[1] ? -1 : 0 // ----------------------------------------------------------------------------- // signals // ----------------------------------------------------------------------------- if signal[0] == 1 and signal[1] != 1 and trend == 1 and testWindow() sl := close - sl_factor*atr_e tp := close + tp_factor*atr_e strategy.entry("HMA_LNG", strategy.long) strategy.exit("LE", "HMA_LNG", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e) if signal[0] == -1 and signal[1] != -1 and trend == -1 and testWindow() sl := close + sl_factor*atr_e tp := close - tp_factor*atr_e strategy.entry("HMA_SHRT", strategy.short) strategy.exit("SE", "HMA_SHRT", profit=100*tp_factor*atr_e, loss=100*sl_factor*atr_e) if strategy.position_size != 0 sl := sl[1] tp := tp[1] // ----------------------------------------------------------------------------- // PLOT // ----------------------------------------------------------------------------- hma_s = plot(hma_signal, title="SIGNAL", color = signal == 1 ? color.green : color.red) hma_l = plot(hma_filter, title="TREND", color = trend == 1 ? color.green : color.red) plot(tp, title="TAKE PROFIT", color= strategy.position_size != 0 ? color.blue: na, linewidth=1) plot(sl, title="STOP LOSS", color= strategy.position_size != 0 ? color.red: na, linewidth = 1)