हुल मूविंग एवरेज और स्टोकास्टिक आरएसआई संयोजन ट्रेडिंग रणनीति

लेखक:चाओझांग, दिनांकः 2023-10-18 12:40:23
टैगः

img

अवलोकन

यह रणनीति प्रवृत्ति की दिशा निर्धारित करने के लिए हॉल मूविंग एवरेज का उपयोग करती है और इसे प्रवेश संकेतों के लिए स्टोकेस्टिक आरएसआई के साथ जोड़ती है। लंबे ट्रेड तब किए जाते हैं जब एचएमए मध्य रेखा निचली रेखा के ऊपर से पार हो जाती है, और छोटे ट्रेड जब यह ऊपरी रेखा के नीचे से पार हो जाती है। इसके अलावा, लंबे ट्रेड तब किए जाते हैं जब स्टोकेस्टिक आरएसआई के लाइन ओवरबॉट ज़ोन से डी लाइन के नीचे से पार हो जाती है, जबकि शॉर्ट ट्रेड ओवरसोल्ड ज़ोन से ऊपर के क्रॉस पर किए जाते हैं।

रणनीति तर्क

इस रणनीति के प्रमुख घटक ट्रेंड दिशा के लिए हुल मूविंग एवरेज और टाइमिंग एंट्री सिग्नल के लिए स्टोकैस्टिक आरएसआई हैं।

सबसे पहले, हुल एमए गणना में मध्य, ऊपरी और निचले बैंड के लिए सूत्र शामिल हैं। मध्य बैंड एक भारित चलती औसत का उपयोग करता है, जबकि ऊपरी और निचले बैंड मध्य रेखा से ऑफसेट होते हैं।

ट्रेंड की दिशा मध्य बैंड और ऊपरी/निम्न बैंड के बीच संबंध से निर्धारित होती है। मध्य रेखा का ऊपर का क्रॉसओवर खरीद दबाव और एक अपट्रेंड का संकेत देता है, जबकि नीचे का क्रॉसओवर बिक्री दबाव और एक डाउनट्रेंड को बढ़ाता है।

स्टोकैस्टिक आरएसआई की गणना भी परिभाषित की गई है, जिसमें स्मूथ किए गए के और डी मान शामिल हैं। के मूल्य आरएसआई पर एसएमए स्मूथिंग का उपयोग करता है, जबकि डी मूल्य के पर दूसरा एसएमए स्मूथिंग है।

प्रवृत्ति की दिशा निर्धारित होने के बाद, लॉन्ग ट्रेड तब किए जाते हैं जब स्टॉक आरएसआई के लाइन अपट्रेंड के दौरान ओवरबॉट जोन से डी लाइन के नीचे पार करती है। शॉर्ट ट्रेड तब किए जाते हैं जब के लाइन डाउनट्रेंड के दौरान ओवरसोल्ड जोन से डी लाइन के ऊपर पार करती है।

हुल ट्रेंड फिल्टर और स्टॉक आरएसआई ओवरबॉट/ओवरसोल्ड विश्लेषण को मिलाकर ट्रेडों में प्रवेश करने के लिए एक मजबूत बहु-कारक दृष्टिकोण प्रदान किया जाता है।

लाभ

इस रणनीति के मुख्य लाभ निम्नलिखित हैंः

  1. हुल एमए प्रभावी रूप से बाजार की समग्र प्रवृत्ति की दिशा की पहचान करता है।

  2. स्टॉक आरएसआई समय प्रविष्टियों के लिए ओवरबॉट/ओवरसोल्ड स्तर निर्धारित करता है।

  3. दोनों का एक साथ उपयोग करने से झूठे संकेत कम होते हैं और ताकतें मिलती हैं।

  4. विभिन्न प्रतीकों और समय सीमाओं के लिए मापदंडों को अनुकूलित करने के लिए लचीलापन।

  5. पतवार बैंड संभावित गतिशील समर्थन और प्रतिरोध की पहचान करते हैं।

  6. इसमें स्थिति आकार और जोखिम प्रबंधन के नियम शामिल हैं।

  7. पतवार डेटा शब्दकोश के माध्यम से बहु-संसाधन क्षमता।

  8. लाभप्रदता बढ़ाने और उपयोग को कम करने के लिए अनुकूलन योग्य घटक।

जोखिम

विचार करने के लिए कुछ जोखिमः

  1. हुल एमए में विलंब है और रुझान परिवर्तनों को मिस कर सकता है।

  2. स्टॉक आरएसआई अत्यधिक संकेत उत्पन्न कर सकता है यदि मापदंडों को अनुकूलित नहीं किया जाता है।

  3. हुल और स्टोच मापदंडों के बीच असंगतता खराब संकेत का कारण बन सकती है।

  4. पतवार के बैंड बहुत चौड़े या संकीर्ण संकेत की गुणवत्ता को प्रभावित करेंगे।

  5. हाल के अस्थिर बाजार मध्यम/दीर्घकालिक संकेतकों को चुनौती देते हैं।

  6. हुल और स्टोक के बीच डेटा असंगतता गलत संकेत का कारण बनता है।

  7. हुल द्वारा नहीं पहचाने जाने वाले तेज रुझान परिवर्तन नुकसान का कारण बन सकते हैं।

  8. कई समय सीमाओं और प्रतीकों पर विस्तारित परीक्षण की आवश्यकता है।

इनसे निपटने के कुछ तरीके:

  1. अधिक प्रवृत्ति संवेदनशीलता के लिए पतवार एमए लंबाई को छोटा करें।

  2. झूठे क्रॉस को फ़िल्टर करने के लिए स्टोक आरएसआई को अनुकूलित करें।

  3. आदर्श पतवार बैंड चैनल चौड़ाई का पता लगाएं.

  4. एमएसीडी जैसे अतिरिक्त पुष्टिकरण संकेतक जोड़ें।

  5. जोखिम को नियंत्रित करने के लिए स्टॉप लॉस रणनीतियों को शामिल करें।

अनुकूलन के अवसर

इस रणनीति को सुधारने के कुछ तरीके हैंः

  1. मज़बूती सत्यापित करने के लिए विभिन्न समय सीमाओं में अधिक प्रतीकों पर परीक्षण करें।

  2. स्टॉप-लॉस यांत्रिकों को शामिल करें जैसे कि ट्रेलिंग स्टॉप या चलती औसत।

  3. प्रवेश नियमों को अनुकूलित करें, झूठे संकेतों को कम करने के लिए सख्त फ़िल्टर सेट करें।

  4. समर्थन और प्रतिरोध को बेहतर ढंग से परिभाषित करने के लिए हुल बैंड का उपयोग करें।

  5. सिग्नल की विश्वसनीयता में सुधार के लिए अतिरिक्त पुष्टिकरण संकेतकों का मूल्यांकन करें।

  6. लंबाई, ओवरबॉट/ओवरसोल्ड स्तर आदि के लिए पैरामीटर अनुकूलन

  7. बेहतर स्थिति आकार और जोखिम प्रबंधन की शुरूआत करें।

  8. लाइव ट्रेडिंग के लिए आवश्यक अतिरिक्त प्रवेश, स्टॉप लॉस और ले लाभ नियम।

  9. बेहतर प्रवृत्ति संवेदनशीलता के लिए पतवार की लंबाई अनुकूलित करें.

  10. सिग्नल की गुणवत्ता में सुधार के लिए फ़िल्टर या पुष्टिकरण संकेतक जोड़ें।

  11. गतिशील समर्थन/प्रतिरोध स्तरों के लिए पतवार बैंड का अन्वेषण करें।

  12. स्टॉक आरएसआई मापदंडों को अनुकूलित करें जैसे लंबाई, ओवरबॉट/ओवरसोल्ड।

  13. उन्नत स्थिति आकार और जोखिम प्रबंधन लागू करें।

निष्कर्ष

कुल मिलाकर यह प्रवृत्ति और गति को जोड़ने वाला एक प्रभावी दृष्टिकोण है। हालांकि, अंतर्निहित संकेतक कमजोरियों का मतलब है कि संकेतों पर आगे के अनुकूलन और जोखिम नियंत्रण के बिना अंधाधुंध भरोसा नहीं किया जाना चाहिए। परिष्कृत मापदंडों, अतिरिक्त फ़िल्टर और स्टॉप लॉस के साथ, यह रणनीति क्षमता प्रदान करती है। इसे लाइव ट्रेडिंग के लिए मजबूत और लाभदायक बनाने के लिए मापदंडों, जोखिम प्रबंधन और स्थिति आकार के लिए अधिक व्यापक परीक्षण की आवश्यकता है।


/*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)

अधिक