ओबीवी ईएमए क्रॉसओवर ट्रेंड फॉलोिंग स्ट्रैटेजी

लेखक:चाओझांग, दिनांकः 2024-02-20 15:35:08
टैगः

img

अवलोकन

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

रणनीतिक सिद्धांत

यह रणनीति मुख्य रूप से यह निर्धारित करने के लिए उपयोग करती है कि क्या ओबीवी लंबी प्रविष्टि समय निर्धारित करने के लिए एक अपट्रेंड में है। विशेष रूप से, यह ओबीवी के 6-दिवसीय ईएमए और 24-दिवसीय ईएमए की गणना करता है। जब 6-दिवसीय ईएमए 24-दिवसीय ईएमए से ऊपर जाता है, तो एक लंबा संकेत उत्पन्न होता है। इसी तरह, जब 6-दिवसीय ईएमए 24-दिवसीय ईएमए से नीचे जाता है, तो एक छोटा संकेत उत्पन्न होता है। इसके अलावा, रणनीति 3% स्टॉप लॉस भी सेट करती है।

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

लाभ विश्लेषण

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

  1. ट्रेडिंग वॉल्यूम पर आधारित ओबीवी सूचक बाजार प्रतिभागियों के इरादे को स्पष्ट रूप से आंक सकता है और संकेत अधिक विश्वसनीय होता है।

  2. दोहरी ईएमए लाइन प्रसंस्करण संकेत को स्पष्ट बनाने के लिए कुछ शोर को फ़िल्टर कर सकता है।

  3. तेज और धीमी ईएमए रेखाओं का संयोजन मूल्य समतलता और रुझान परिवर्तनों को पकड़ने दोनों को ध्यान में रख सकता है।

जोखिम विश्लेषण

इस रणनीति में कुछ जोखिम भी हैं:

  1. ओबीवी संकेतक किसी बिंदु पर गलत संकेत दे सकता है, जिस पर रणनीति को नुकसान हो सकता है।

  2. हिंसक व्यापार में, ईएमए लाइनों का प्रभाव होता है, जो इष्टतम प्रवेश बिंदु को याद कर सकता है।

  3. फिक्स्ड स्टॉप लॉस सेटिंग बाजार परिवर्तनों के अनुकूल करने के लिए बहुत कठोर हो सकती है।

विरोधी उपाय:

  1. गलत संकेतों से बचने के लिए अन्य संकेतकों से पुष्टि करें।

  2. ईएमए रेखाओं को अधिक संवेदनशील बनाने के लिए पैरामीटर सेटिंग्स को अनुकूलित करें.

  3. गतिशील स्टॉप लॉस सेट करें.

अनुकूलन दिशा

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

  1. बेहतर मेल खाने वाले चलती औसत मापदंडों को खोजने के लिए ईएमए पैरामीटर संयोजन को अनुकूलित करें।

  2. सिग्नल की पुष्टि के लिए अन्य संकेतकों को बढ़ाएं, जैसे कि एमएसीडी, आरएसआई आदि, सिग्नल की सटीकता में सुधार के लिए।

  3. गतिशील स्टॉप लॉस सेट करें, जो बाजार के उतार-चढ़ाव के अनुसार वास्तविक समय में स्टॉप लॉस बिंदु को समायोजित कर सकता है।

  4. सबसे अच्छा पैरामीटर संयोजन खोजने के लिए पैरामीटर संयोजन अनुकूलन.

निष्कर्ष

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


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OBV EMA X BF 🚀", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

/////////////// OBV /////////////// 
src = close
atr = atr(input(title="ATR Period", defval=3, minval=1))
atrmult = input(title="ATR Mult", defval=1, minval=0)
obv = cum(change(src) > 0 ? volume * (volume / atr) : change(src) < 0 ? -volume * (volume / atr) : 0 * volume / atr)
e1 = ema(obv, input(24))
e2 = ema(obv, input(6))

///////////////  Strategy  /////////////// 
long = crossover(e2, e1)
short = crossunder(e2, e1)

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

//////////////// Stop loss /////////////// 
sl_inp = input(3.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, when=since_shortEntry > 0)

/////////////// Plotting /////////////// 
plot(e1, color = e1 > e1[1] ? color.lime : e1 < e1[1] ? color.red : color.white, linewidth = 2, offset = 0)
plot(e2, color = e2 > e2[1] ? color.lime : e2 < e2[1] ? color.red : color.white, linewidth = 1)
bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=90)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=60)

अधिक