
इस रणनीति में ट्रेडिंग सिग्नल उत्पन्न करने और फ़िल्टर करने के लिए दो प्रकार के हलचल औसत का उपयोग किया जाता है, अल्पकालिक और दीर्घकालिक. हलचल औसत का उपयोग संकेत उत्पन्न करने के लिए किया जाता है, जबकि दीर्घकालिक हलचल औसत का उपयोग संकेतों को फ़िल्टर करने के लिए किया जाता है, और केवल एक ट्रेडिंग सिग्नल उत्पन्न होता है जब हलचल औसत और दीर्घकालिक हलचल औसत समानांतर रूप से बदलते हैं।
यह रणनीति एटीआर सूचकांक का उपयोग करती है ताकि एक ही समय में स्टॉप और स्टॉप को सेट किया जा सके। प्रत्येक स्थिति के लिए, एटीआर के मूल्य के आधार पर वर्तमान स्थिति के लिए स्टॉप और स्टॉप को गतिशील रूप से सेट किया जाता है।
शॉर्ट-टर्म हॉर्स मूविंग एवरेज का उपयोग मूल्य की अल्पकालिक प्रवृत्ति और टर्निंग पॉइंट को पकड़ने के लिए किया जाता है। जब शॉर्ट-टर्म हॉर्स मूविंग एवरेज की दिशा में बदलाव होता है, तो यह दर्शाता है कि कीमतों की अल्पकालिक प्रवृत्ति बदल गई है।
लंबी अवधि के हलचल औसत का उपयोग कीमतों के समग्र आंदोलन को समझने के लिए किया जाता है। उदाहरण के लिए, जब लंबी अवधि के हलचल औसत की दिशा ऊपर की ओर होती है, तो यह दर्शाता है कि कीमतें समग्र रूप से ऊपर की ओर हैं।
ट्रेडिंग सिग्नल केवल तभी उत्पन्न होता है जब एक शॉर्ट-टर्म हॉल मूविंग एवरेज टर्नओवर होता है और इसकी टर्नओवर दिशा लंबी अवधि के हॉल मूविंग एवरेज की समग्र गति की दिशा से मेल खाती है। यानी, इस शॉर्ट-टर्म सिग्नल पर ट्रेडिंग केवल तभी की जाती है जब कीमतों में शॉर्ट-टर्म ट्रेंड में बदलाव होता है और समग्र गति भी उसी दिशा में बदलती है। यह शॉर्ट-टर्म मार्केट शोर के कारण गलत संकेतों को प्रभावी ढंग से फ़िल्टर कर सकता है।
स्थिति खोलने के बाद, एटीआर सूचकांक के आकार के आधार पर स्टॉप और स्टॉप की सीमा निर्धारित की जाती है। एटीआर सूचकांक बाजार में उतार-चढ़ाव और जोखिम के स्तर को दर्शाता है। स्टॉप-लॉस स्थिति को कीमत के निचले बिंदु के नीचे रखा जाता है, जबकि स्टॉप-लॉस स्थिति को कीमत के ऊपरी बिंदु पर रखा जाता है, और यह एटीआर मूल्य से जुड़ा होता है, जो बाजार में उतार-चढ़ाव के आधार पर स्टॉप-लॉस की सीमा को समायोजित करता है।
इस रणनीति में अल्पकालिक संकेतों और दीर्घकालिक फ़िल्टरिंग का संयोजन किया गया है ताकि कीमतों में मध्यवर्ती रुझानों की पहचान की जा सके और मोड़ बिंदुओं को समय पर पकड़ा जा सके। एकल चलती औसत जैसे संकेतकों की तुलना में, बाजार के शोर से धोखा देने की संभावना कम हो सकती है।
गतिशील समायोजन स्टॉप-लॉस स्टॉप स्थिति, बाजार में उतार-चढ़ाव की डिग्री के आधार पर उचित स्टॉप-लॉस स्टॉप सेट करने की अनुमति देता है, लाभप्रदता की गारंटी देते हुए, बहुत अधिक कट्टरपंथी होने से बचें, और नुकसान के जोखिम को कम करें।
हॉल की चलती औसत के लाभों का उपयोग करके, कीमतों के आंदोलनों को अधिक लचीला और सटीक रूप से निर्धारित किया जा सकता है, और सामान्य चलती औसत की तुलना में अधिक मजबूत ट्रैकिंग क्षमता है।
इस रणनीति में संकेत के रूप में दो हलचल औसत के संरेखण पर भरोसा किया जाता है, और यदि दो चलती औसत के बीच एक झूठी संरेखण उत्पन्न होती है, तो यह गलत प्रविष्टि का कारण बन सकता है। इस स्थिति में, यह निर्धारित करना आवश्यक है कि क्या संकेत को लंबे समय तक या अल्पकालिक बाजार संरचना के आधार पर फ़िल्टर किया जाना चाहिए।
अस्थिरता में, कीमतें एक छोटे से व्यापार के दायरे में घूम सकती हैं, जिससे संकेत की त्रुटि दर बढ़ जाती है और व्यर्थ व्यापार की संभावना बढ़ जाती है। इस स्थिति में, व्यर्थ व्यापार को व्यापार संकेत फ़िल्टरिंग शर्तों को बढ़ाकर टाला जा सकता है।
स्टॉप लॉस स्टॉप की सेटिंग एटीआर पर निर्भर करती है, और यदि एटीआर इंडिकेटर में बाजार में उतार-चढ़ाव की सटीकता नहीं है, तो स्टॉप लॉस स्टॉप की स्थिति भी अमान्य हो जाएगी। इस मामले में, एटीआर को अन्य अस्थिरता संकेतकों के साथ संयोजन में संशोधित करने पर विचार किया जा सकता है।
अन्य अल्पकालिक संकेतकों के साथ संयोजन पर विचार किया जा सकता है, जैसे कि आरएसआई जैसे ओवरबॉय ओवरसोल संकेतक, ताकि फ़िल्टरिंग प्रभाव को बढ़ाया जा सके।
लॉजिक रिलेशंस को बढ़ाया या अनुकूलित किया जा सकता है जो लंबे समय तक और छोटे समय के बीच हलचल औसत को फ़िल्टर करता है, जिससे फ़िल्टरिंग नियम अधिक कठोर हो जाते हैं और गलत संकेतों से बचा जाता है।
रणनीति की स्थिरता और लाभप्रदता पर विभिन्न पैरामीटर सेटिंग्स के प्रभाव का अध्ययन किया जा सकता है। उदाहरण के लिए, चलती औसत पैरामीटर, एटीआर पैरामीटर आदि के विभिन्न संयोजन अलग-अलग व्यापारिक प्रदर्शन का उत्पादन कर सकते हैं।
इस रणनीति का उपयोग करता है संक्षिप्त अवधि में हल चलती औसत सिग्नल कैप्चर, लंबी अवधि में हल चलती औसत सिग्नल फिल्टर और एटीआर सूचक सेट करने के लिए नुकसान रोक, एक पूरी तरह से मध्य अवधि के रुझान ट्रैकिंग रणनीति प्रणाली का गठन. इस रणनीति को प्रभावी रूप से मध्य अवधि में कीमत मोड़ का पता लगाने के लिए, कम समय में बाजार के शोर से बाधित होने से बचने के लिए, एक महत्वपूर्ण स्टॉक चयन उपकरण के निर्माण के लिए एक रुझान व्यापार प्रणाली. पैरामीटर अनुकूलन और सहायक शर्तों को जोड़ने के माध्यम से, इस रणनीति को और अधिक बढ़ा सकते हैं सिग्नल निर्णय सटीकता, बेहतर प्रदर्शन के लिए.
/*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)