गतिशील चलती औसत पर आधारित प्रवृत्ति व्यापार रणनीति

लेखक:चाओझांग, दिनांक: 2023-12-21 11:33:50
टैगः

img

अवलोकन

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

सिद्धांत

यह रणनीति मुख्य रूप से तीन Hull Moving Average (HMA) वेरिएंट नियमित HMA, वेटेड HMA (WHMA) और एक्सपोनेंशियल HMA (EHMA) पर आधारित है। जैसा कि कोड से पता चलता है, यह उपयोगकर्ताओं को तीन Hull MAs के बीच स्विच करने की अनुमति देता है।

एचएमए का सूत्र हैः

HMA = WMA ((2*WMA ((close, n/2)-WMA ((close, n), sqrt ((n))

जहां डब्ल्यूएमए भारित चलती औसत है और एन अवधि पैरामीटर है। एसएमए की तुलना में, एचएमए मूल्य परिवर्तनों के लिए तेजी से प्रतिक्रिया करता है।

WHMA और EHMA के लिए सूत्र समान हैं। HMA को डिफ़ॉल्ट विकल्प के रूप में चुना गया है।

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

लाभ

पारंपरिक एमए रणनीतियों की तुलना में, इस रणनीति के निम्नलिखित फायदे हैंः

  1. तेजी से प्रतिक्रिया और समय पर प्रविष्टियों और रुकावटों के लिए मजबूत प्रवृत्ति-पीछा करने की क्षमता
  2. अनावश्यक व्यापारिक आवृत्ति को कम करना, बढ़तों और रुकावटों का पीछा करने से बचना
  3. अधिक बाजार परिवेशों के अनुकूलन के लिए लचीले एचएमए मापदंड
  4. लागू करने की क्षमता बढ़ाने के लिए स्विच करने योग्य एचएमए वेरिएंट

जोखिम

कुछ जोखिम भी हैं:

  1. सीमा-बंद बाजारों के दौरान कई झूठे संकेत उत्पन्न करना, व्यापार की आवृत्ति और फिसलने की लागत में वृद्धि
  2. यदि एचएमए मापदंडों को सही ढंग से सेट नहीं किया जाता है तो प्रवृत्ति उलट बिंदुओं की अनुपस्थिति, जिससे अधिक हानि के जोखिम होते हैं
  3. कम तरलता वाले शेयरों के कारोबार में तरलता जोखिम और भारी फिसलन

समाधान:

  1. सर्वोत्तम मूल्यों के लिए एचएमए मापदंडों का अनुकूलन करें
  2. रुझान उलटने के बिंदुओं को निर्धारित करने के लिए अन्य संकेतक जोड़ें
  3. बड़ी औसत दैनिक मात्रा वाले तरल भंडार का चयन करें

सुधार

इस रणनीति को निम्नलिखित पहलुओं से भी बढ़ाया जा सकता हैः

  1. संकेत विश्वसनीयता सुनिश्चित करने के लिए वॉल्यूम या अन्य फ़िल्टर जोड़ें
  2. बेहतर समय के लिए एमएसीडी, केडीजे का संयोजन, जीत दर में सुधार
  3. वास्तविक व्यापार बैकटेस्ट के आधार पर एचएमए अवधि को समायोजित करें
  4. WHMA या EHMA पर स्विच करें जो विशिष्ट स्टॉक के लिए सबसे अच्छा प्रदर्शन करता है
  5. एकल व्यापार हानि को नियंत्रित करने के लिए स्टॉप लॉस तंत्र जोड़ें

सारांश

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


/*backtest
start: 2022-12-14 00:00:00
end: 2023-12-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Position Investing by SirSeff', overlay=true, pyramiding=1, 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)
strat_dir_input = input.string(title='Strategy Direction', defval='long', 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(2000, '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)


testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
//INPUT
src = input(close, title='Source')
modeSwitch = input.string('Hma', title='Hull Variation', options=['Hma', 'Thma', 'Ehma'])
length = input(55, 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.int(40, title='Band Transparency', step=5)

//FUNCTIONS
//HMA
HMA(_src, _length) =>
    ta.wma(2 * ta.wma(_src, _length / 2) - ta.wma(_src, _length), math.round(math.sqrt(_length)))
//EHMA    
EHMA(_src, _length) =>
    ta.ema(2 * ta.ema(_src, _length / 2) - ta.ema(_src, _length), math.round(math.sqrt(_length)))
//THMA    
THMA(_src, _length) =>
    ta.wma(ta.wma(_src, _length / 3) * 3 - ta.wma(_src, _length / 2) - ta.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)


if HULL[0] > HULL[2] and testPeriod()
    strategy.entry('Invest', strategy.long)
if HULL[0] < HULL[2] and testPeriod()
    strategy.entry('Pause', strategy.short)



अधिक