गति सूचक निर्णय ट्रेडिंग रणनीति एक प्रवृत्ति के बाद की रणनीति है। यह डबल घातीय चलती औसत का उपयोग करके गति सूचक का निर्माण करता है और इसे व्यापार संकेत उत्पन्न करने के लिए मूल्य परिवर्तन दर सूचक के साथ जोड़ता है। जब गति सूचक ऊपर जाता है, तो यह लंबे संकेत उत्पन्न करता है। जब गति सूचक नीचे जाता है, तो यह छोटे संकेत उत्पन्न करता है। यह रणनीति उन व्यापारियों के लिए उपयुक्त है जो बाजार में मध्य अवधि के रुझानों को ट्रैक करना चाहते हैं।
रणनीति गति को मापने के लिए डबल घातीय चलती औसत के आधार पर निर्णय बिंदु थरथरानवाला का उपयोग करती है। पहले यह दैनिक मूल्य परिवर्तन दर की गणना करता है, फिर मूल्य परिवर्तन दर को अलग से चिकना करने के लिए 31 दिन और 20 दिन के डबल घातीय चलती औसत का उपयोग करता है। अंत में यह ट्रेडिंग संकेत जारी करने के लिए 9 दिन के चिकनी चलती औसत का उपयोग करता है। जब तेजी से रेखा धीमी रेखा से ऊपर होती है, तो यह एक बैल बाजार का संकेत देती है। जब तेजी से रेखा धीमी रेखा से नीचे होती है, तो यह एक भालू बाजार का संकेत देती है।
रणनीति में साइडवेज बाजारों में गलत संकेतों से बचने के लिए मूल्य परिवर्तन दर का सूचक भी पेश किया गया है। विशेष रूप से, यह पिछले 30 दिनों में प्रतिशत मूल्य परिवर्तन की गणना करता है, और अपने चलती औसत के माध्यम से बाजार सक्रिय है या नहीं इसका न्याय करता है। ट्रेडिंग संकेत केवल तब जारी किए जाते हैं जब बाजार सक्रिय होता है।
यह रणनीति गति संकेतक और मूल्य परिवर्तन दर संकेतक को जोड़ती है, जो प्रभावी रूप से मध्यम अवधि के रुझानों की पहचान कर सकती है और अस्थिर बाजारों में लगातार व्यापार से बच सकती है। मूविंग एवरेज जैसी सरल प्रवृत्ति के बाद की रणनीतियों की तुलना में, यह गलत ट्रेडों की संभावना को बहुत कम कर सकती है। इसके अलावा, समय पर नुकसान को काटने और प्रति व्यापार हानि को प्रभावी ढंग से नियंत्रित करने के लिए स्टॉप लॉस बिंदुओं को सेट करके जोखिम को नियंत्रित किया जाता है।
यह रणनीति मुख्य रूप से मध्यम-लंबी अवधि के रुझान व्यापार पर निर्भर करती है, जो अल्पकालिक मूल्य उतार-चढ़ाव को पकड़ने में असमर्थ है। जब बाजार में तेज आंदोलन होता है, तो स्टॉप लॉस बिंदु टूट सकता है, जिससे अधिक नुकसान हो सकता है। इसके अलावा, अनुचित पैरामीटर सेटिंग्स भी रणनीति को प्रभावित कर सकती हैं। उदाहरण के लिए, यदि डबल घातीय चलती औसत पैरामीटर बहुत कम सेट किए जाते हैं, तो गलत ट्रेडों की संभावना बढ़ जाएगी।
जोखिमों को रोकने के लिए, स्टॉप लॉस बिंदुओं को स्टॉप लॉस रेंज को बढ़ाने के लिए उचित रूप से समायोजित किया जा सकता है। जब एक तेज बाजार आंदोलन होता है, तो स्टॉप लॉस के टूटने की संभावना से बचने के लिए रणनीति को अस्थायी रूप से बंद कर दिया जा सकता है। पैरामीटर ट्यूनिंग के लिए, इष्टतम मापदंडों का चयन करने के लिए विस्तृत बैकटेस्टिंग की जानी चाहिए।
इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः
तेजी से बाजार में उतार-चढ़ाव के दौरान व्यापार से बचने के लिए अस्थिरता सूचक जैसे अन्य फ़िल्टरिंग संकेतक जोड़ें।
प्रवृत्ति दिशा और शक्ति के निर्णय में सहायता के लिए मशीन लर्निंग मॉडल जोड़ें, जो संकेत की सटीकता में सुधार कर सकता है।
प्रवेश और निकास के समय को अनुकूलित करने के लिए सापेक्ष शक्ति सूचकांक, स्टोकैस्टिक ऑसिलेटर जैसे विभिन्न गति संकेतक का प्रयास करें।
लाइव ट्रेडिंग में, अनुकूलित पैरामीटर संयोजन को प्राप्त करने के लिए हालिया बाजार स्थितियों के साथ संयोजन में पैरामीटर को गतिशील रूप से समायोजित करें।
गति संकेतक निर्णय ट्रेडिंग रणनीति आम तौर पर एक स्थिर मध्य-लंबी अवधि की प्रवृत्ति के बाद की रणनीति है। यह दोहरे घातीय चलती औसत गति संकेतक और मूल्य परिवर्तन दर संकेतक को मिलाकर प्रभावी रूप से रुझानों की पहचान करता है और गलत ट्रेडों से बचता है। इस बीच, यह स्टॉप लॉस बिंदुओं को सेट करके जोखिम को नियंत्रित करता है। यदि पैरामीटर सही ढंग से ट्यून किए जाते हैं और बैकटेस्ट परिणाम अच्छे होते हैं, तो यह मध्यम-लंबी अवधि के निवेशकों के लिए उपयुक्त है जो अतिरिक्त रिटर्न का पीछा करते हैं। बेशक, व्यापारियों को अभी भी रणनीति के लिए तेज बाजार उतार-चढ़ाव द्वारा लाए गए जोखिम के बारे में पता होना चाहिए।
/*backtest start: 2022-12-08 00:00:00 end: 2023-11-10 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Decision 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.075) /////////////// 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 /////////////// Decision /////////////// src = input(ohlc4, title="Source") length1 = input(31, title="First Smoothing") length2 = input(20, title="Second Smoothing") siglength = input(9, title="Signal Smoothing") fr = input(true, title="Fill Region") calc_csf(src, length) => sm = 2.0 / length csf = 0.0 csf := (src - nz(csf[1])) * sm + nz(csf[1]) csf i = (src / nz(src[1], src)) * 100 pmol2 = calc_csf(i - 100, length1) pmol = calc_csf(10 * pmol2, length2) pmols = ema(pmol, siglength) d = pmol - pmols duml = plot(fr ? (d > 0 ? pmol : pmols) : na, style=plot.style_circles, color=color.yellow, linewidth=0, title="DummyL") hc = d > 0 ? d > d[1] ? color.lime : color.green : d < d[1] ? color.red : color.orange ///////////// Rate Of Change ///////////// source = close roclength = input(30, minval=1) pcntChange = input(7, minval=1) roc = 100 * (source - source[roclength]) / source[roclength] emaroc = ema(roc, roclength / 2) isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2)) /////////////// Strategy /////////////// long = d > 0 and isMoving() short = d < 0 and isMoving() 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]) sl_inp = input(2.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) since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 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("Long", strategy.long, when=long) strategy.entry("Short", strategy.short, when=short) strategy.exit("L Ex", "Long", stop=long_sl, limit=take_level_l, when=since_longEntry > 0) strategy.exit("S Ex", "Short", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0) /////////////// Plotting /////////////// sigl = plot(false ? na : pmols, title="PMO Signal", color=color.gray, linewidth=2, title="Signal") mdl = plot(false ? na : pmol, title="PMO", color=color.black, linewidth=2, title="PMO") fill(duml, sigl, color.green, transp=20, title="PosFill") fill(duml, mdl, color.red, transp=20, title="NegFill") bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)