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