
यह रणनीति प्रवृत्ति की दिशा का पता लगाने के लिए हॉल सूचक का उपयोग करती है, और फिर यादृच्छिक सूचक के साथ संयुक्त रूप से प्रवेश करती है। जब हॉल मध्य रेखा पर नीचे की ओर जाता है, तो वह प्रवेश करता है, और जब वह नीचे की ओर जाता है तो वह प्रवेश करता है। साथ ही, जब यादृच्छिक सूचक के लाइन डी लाइन के नीचे से गुजरती है, तो वह ओवरबॉय क्षेत्र से गुजरती है।
इस ट्रेडिंग रणनीति में मुख्य रूप से बाजार की प्रवृत्ति की दिशा का निर्धारण करने के लिए हॉल सूचकांक का उपयोग किया जाता है, इसके बाद विशिष्ट प्रविष्टि के लिए यादृच्छिक सूचकांक का उपयोग किया जाता है।
सबसे पहले, रणनीति में हॉल सूचकांक की गणना के लिए एक विधि परिभाषित की गई है, जिसमें मिडरेल, अपररेल और लोअररेल की गणना के लिए सूत्र शामिल हैं। मिडरेल को एक भारित चलती औसत (डब्ल्यूएमए) के साथ गणना की जाती है, और अपररेल और लोअररेल क्रमशः मिडरेल के विचलन हैं।
फिर, ट्रेंड की दिशा को निर्धारित करने के लिए मध्य-रेल और ऊपर-नीचे के बीच के संबंधों का उपयोग करें। जब मध्य-रेल पर ट्रेंड के माध्यम से नीचे की ओर जाता है, तो यह एक मजबूत खरीदारी का प्रतिनिधित्व करता है, जो कि पूर्वाग्रह की प्रवृत्ति है; जब मध्य-रेल के नीचे ट्रेंड के माध्यम से ट्रेंड के माध्यम से नीचे की ओर जाता है, तो यह एक मजबूत बिकनी है, जो कि पूर्वाग्रह की प्रवृत्ति है।
इसके अलावा, रणनीति में यादृच्छिक संकेतक की गणना के लिए एक विधि परिभाषित की गई है, जिसमें K मान और D मान के लिए एक सूत्र शामिल है। K मान RSI के SMA smoothing के लिए उपयोग किया जाता है, और D मान K मान के फिर से SMA smoothing के लिए है।
रुझान की दिशा का आकलन करने के बाद, यदि पूर्वाभास है, तो जब यादृच्छिक सूचक की K रेखा ओवरसोल्ड क्षेत्र के नीचे से D रेखा को पार करती है, तो अधिक करें; यदि पूर्वाभास है, तो जब K रेखा ओवरबॉय क्षेत्र से D रेखा को पार करती है, तो शून्य करें।
इस प्रकार, एक प्रवृत्ति निर्णय के संयोजन के साथ हॉल सूचकांक और एक यादृच्छिक सूचकांक के साथ ओवरबॉट ओवरसोल निर्णय, एक अधिक स्थिर और सटीक प्रवेश किया जा सकता है।
इस रणनीति का सबसे बड़ा लाभ यह है कि यह प्रवृत्ति निर्णय और ओवरबॉय ओवरसोल निर्णय के संयोजन के साथ बाजार का बहुआयामी विश्लेषण करने में मदद करता है, जिसमें प्रवेश की उच्च सटीकता होती है।
विशेष रूप से, इसके कुछ प्रमुख फायदे हैंः
हॉल सूचकांक बाजार के रुझानों की दिशा का आकलन करने के लिए बड़े स्तर पर स्थिति निर्धारित करने के लिए प्रभावी है।
इस प्रकार, जब हम बाजार में प्रवेश करते हैं, तो हम बाजार में प्रवेश करने के लिए सबसे उपयुक्त समय का पता लगा सकते हैं, क्योंकि हम बाजार में प्रवेश करने के लिए सबसे उपयुक्त समय का पता लगा सकते हैं।
दोनों का एक साथ उपयोग करने से संकेतों को सत्यापित करने और झूठे संकेतों को कम करने में मदद मिलती है।
पैरामीटर समायोजन के माध्यम से, विभिन्न किस्मों और समय चक्रों के लिए लचीलापन और अनुकूलन क्षमता;
ट्रेडिंग चैनल बनाने के लिए मध्य-रेखा विचलन का उपयोग करें, जिससे संभावित समर्थन और प्रतिरोध की पहचान हो सके।
STOP LOSS, EXIT ON TARGETS percent used to scale positions बड़े ऑर्डर विनियमन
Use of hull data Dictionary gives multiple asset class flexibility
चयनित अनुकूलन दिशा रणनीति की स्थिरता और रिटर्न को बढ़ा सकती है
इस रणनीति के साथ कुछ जोखिम भी हैं जिन पर ध्यान दिया जाना चाहिए, मुख्यतः
हॉल सूचकांक में विलंबता है और यह ट्रेंड टर्नओवर को याद कर सकता है, जिससे अनावश्यक नुकसान हो सकता है।
यादृच्छिक संकेतक पैरामीटर की गलत सेटिंग से अतिरिक्त सिग्नल उत्पन्न हो सकते हैं, K लाइन और D लाइन के क्रॉस सिग्नल को उचित रूप से छानना चाहिए।
हॉल संकेतक का उपयोग यादृच्छिक संकेतक के साथ किया जाता है, यदि पैरामीटर गलत तरीके से मेल खाते हैं, तो एक गलत संकेत हो सकता है।
ऊपर और नीचे की पटरी की चौड़ाई के लिए बहुत बड़ा या बहुत छोटा होना ट्रेडिंग सिग्नल की गुणवत्ता को प्रभावित कर सकता है और इष्टतम पैरामीटर खोजने के लिए सावधानीपूर्वक परीक्षण की आवश्यकता होती है।
हाल के दिनों में स्थिति अस्थिर है और मध्य-लंबी रेखा सूचकांक खराब हो सकता है।
Data mismatches between hull and stoch causing false signals
Sharp trend changes not caught by hull can cause losses
Testing on more timeframes/symbols needed to verify robustness
इन जोखिमों के लिए, निम्नलिखित बिंदुओं से अनुकूलन किया जा सकता हैः
प्रवृत्ति में परिवर्तन के प्रति संवेदनशीलता बढ़ाने के लिए उचित रूप से हॉल सूचकांक की लंबाई को छोटा करें।
यादृच्छिक संकेतक के पैरामीटर का अनुकूलन, झूठे संकेतों को कम करना
इष्टतम मार्ग की चौड़ाई खोजने के लिए ऊपर और नीचे के पैरामीटर को समायोजित करें।
अन्य संकेतकों को सत्यापित करने के संकेतों को जोड़ें, जैसे कि MACD आदि।
जोखिम को नियंत्रित करने के लिए स्टॉप लॉस रणनीति को बढ़ाएं।
इस रणनीति को निम्नलिखित पहलुओं से भी अनुकूलित किया जा सकता हैः
रणनीति की स्थिरता को सत्यापित करने के लिए अधिक किस्मों और अधिक समय चक्रों का परीक्षण करें।
अतिरिक्त रोकथाम तंत्र. इस तरह के अनुवर्ती रोकथाम, चलती रोकथाम, आदि के रूप में, बेहतर जोखिम नियंत्रण कर सकते हैं.
प्रवेश शर्तों के तर्क को अनुकूलित करें, अधिक कठोर फ़िल्टरिंग शर्तें सेट करें, और झूठे संकेतों को कम करें।
इस बात पर शोध करें कि कैसे होलर चैनल का उपयोग करके समर्थन और प्रतिरोध को बेहतर ढंग से निर्धारित किया जा सकता है।
यह पता लगाने के लिए कि क्या अन्य संकेतकों के सत्यापन संकेतों को जोड़ा जा सकता है।
पैरामीटर का अनुकूलन. जैसे कि होल सूचक लंबाई, यादृच्छिक सूचक K, डी चिकनाई पैरामीटर आदि का अनुकूलन।
अतिरिक्त स्थिति प्रबंधन फ़ंक्शन। वापसी, जीत की संख्या आदि के आधार पर स्थिति का आकार समायोजित करें।
स्टॉप लॉस और स्टॉप रोल नियम जोड़ा गया.
Optimize hull length parameter for better trend sensitivity
Add additional filters or confirming indicators to improve signal quality
Explore using hull bands to identify dynamic support/resistance levels
Parameter optimization for stoch RSI lengths, overbought/oversold levels
Introduce better position sizing and risk management rules
कुल मिलाकर, इस रणनीति को एकीकृत करने के लिए प्रवृत्ति निर्णय और ओवरबॉय ओवरसोल निर्णय के लिए प्रवेश एक अच्छा विचार है. लेकिन संकेतक की समस्या के कारण, अपने व्यापार के संकेत भी पूरी तरह से विश्वसनीय नहीं है, और आगे अनुकूलन की जरूरत है. इस रणनीति के प्रभाव की उम्मीद की जा सकती है अगर सबसे अच्छा पैरामीटर के संयोजन को खोजने के लिए, और अन्य सत्यापित संकेतक और जोखिम नियंत्रण के साधन के साथ पूरक. संक्षेप में, पैरामीटर समायोजन, स्टॉप लॉस तंत्र, स्थिति प्रबंधन आदि के पहलुओं में अधिक परीक्षण और अनुकूलन की आवश्यकता है, ताकि इस रणनीति को स्थिर करने के लिए विश्वसनीय हो और वास्तविक बाजार में लाभदायक हो सके।
/*backtest
start: 2023-10-16 00:00:00
end: 2023-10-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//Basic Hull Ma Pack tinkered by InSilico
//Converted to Strategy by DashTrader
strategy("Hull Suite + Stoch RSI Strategy v1.1", overlay=true, pyramiding=1, initial_capital=100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.023)
strat_dir_input = input(title="Strategy Direction", defval="all", options=["long", "short", "all"])
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)
//////////////////////////////////////////////////////////////////////
// Testing Start dates
testStartYear = input(2016, "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(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
stoch_upper_input = input(88, "Stoch Upper Threshold", type=input.float)
stoch_lower_input = input(5, "Stoch Lower Threshold", type=input.float)
sl = input(0.7, "SL %", type=input.float, step=0.1)
tp = input(2.1, "TP %", type=input.float, step=0.1)
// slowEMA = ema(close, slowEMA_input)
// vwap = vwap(close)
// rsi = rsi(close, rsi_input)
// stoch rsi
smoothK = 3
smoothD = 3
lengthRSI = 14
lengthStoch = 14
rsi1 = rsi(close, 14)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title="Source")
modeSwitch = input("Hma", title="Hull Variation", options=["Hma", "Thma", "Ehma"])
length = input(180, title="Length(180-200 for floating S/R , 55 for swing entry)")
switchColor = input(true, "Color Hull according to trend?")
candleCol = input(false,title="Color candles based on Hull's Trend?")
visualSwitch = input(true, title="Show as a Band?")
thicknesSwitch = input(1, title="Line Thickness")
transpSwitch = input(40, title="Band Transparency",step=5)
//FUNCTIONS
//HMA
HMA(_src, _length) => wma(2 * wma(_src, _length / 2) - wma(_src, _length), round(sqrt(_length)))
//EHMA
EHMA(_src, _length) => ema(2 * ema(_src, _length / 2) - ema(_src, _length), round(sqrt(_length)))
//THMA
THMA(_src, _length) => wma(wma(_src,_length / 3) * 3 - wma(_src, _length / 2) - wma(_src, _length), _length)
//SWITCH
Mode(modeSwitch, src, len) =>
modeSwitch == "Hma" ? HMA(src, len) :
modeSwitch == "Ehma" ? EHMA(src, len) :
modeSwitch == "Thma" ? THMA(src, len/2) : na
//OUT
HULL = Mode(modeSwitch, src, length)
MHULL = HULL[0]
SHULL = HULL[2]
//COLOR
hullColor = switchColor ? (HULL > HULL[2] ? #00ff00 : #ff0000) : #ff9800
//PLOT
///< Frame
Fi1 = plot(MHULL, title="MHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
Fi2 = plot(visualSwitch ? SHULL : na, title="SHULL", color=hullColor, linewidth=thicknesSwitch, transp=50)
///< Ending Filler
fill(Fi1, Fi2, title="Band Filler", color=hullColor, transp=transpSwitch)
///BARCOLOR
barcolor(color = candleCol ? (switchColor ? hullColor : na) : na)
bgcolor(color = k < stoch_lower_input and crossover(k, d) ? color.green : na)
bgcolor(color = d > stoch_upper_input and crossover(d, k) ? color.red : na)
notInTrade = strategy.position_size == 0
if notInTrade and HULL[0] > HULL[2] and testPeriod() and k < stoch_lower_input and crossover(k, d)
// if HULL[0] > HULL[2] and testPeriod()
stopLoss = close * (1 - sl / 100)
profit25 = close * (1 + (tp / 100) * 0.25)
profit50 = close * (1 + (tp / 100) * 0.5)
takeProfit = close * (1 + tp / 100)
strategy.entry("long", strategy.long, alert_message="buy")
strategy.exit("exit long 25%", "long", stop=stopLoss, limit=profit25, qty_percent=25, alert_message="profit_25")
strategy.exit("exit long 50%", "long", stop=stopLoss, limit=profit50, qty_percent=25, alert_message="profit_50")
strategy.exit("exit long", "long", stop=stopLoss, limit=takeProfit)
// line.new(bar_index, profit25, bar_index + 4, profit25, color=color.green)
// line.new(bar_index, profit50, bar_index + 4, profit50, color=color.green)
// box.new(bar_index, stopLoss, bar_index + 4, close, border_color=color.red, bgcolor=color.new(color.red, 80))
// box.new(bar_index, close, bar_index + 4, takeProfit, border_color=color.green, bgcolor=color.new(color.green, 80))
if notInTrade and HULL[0] < HULL[2] and testPeriod() and d > stoch_upper_input and crossover(d, k)
// if HULL[0] < HULL[2] and testPeriod()
stopLoss = close * (1 + sl / 100)
profit25 = close * (1 - (tp / 100) * 0.25)
profit50 = close * (1 - (tp / 100) * 0.5)
takeProfit = close * (1 - tp / 100)
strategy.entry("short", strategy.short, alert_message="sell")
strategy.exit("exit short 25%", "short", stop=stopLoss, limit=profit25, qty_percent=25, alert_message="profit_25")
strategy.exit("exit short 50%", "short", stop=stopLoss, limit=profit50, qty_percent=25, alert_message="profit_50")
strategy.exit("exit short", "short", stop=stopLoss, limit=takeProfit)
// line.new(bar_index, profit25, bar_index + 4, profit25, color=color.green)
// line.new(bar_index, profit50, bar_index + 4, profit50, color=color.green)
// box.new(bar_index, stopLoss, bar_index + 4, close, border_color=color.red, bgcolor=color.new(color.red, 80))
// box.new(bar_index, close, bar_index + 4, takeProfit, border_color=color.green, bgcolor=color.new(color.green, 80))
// var table winrateDisplay = table.new(position.bottom_right, 1, 1)
// table.cell(winrateDisplay, 0, 0, "Winrate: " + tostring(strategy.wintrades / strategy.closedtrades * 100, '#.##')+" %", text_color=color.white)