
गतिशीलता तोड़ने की रणनीति बाजार की प्रवृत्ति का पालन करने के लिए एक मात्रात्मक व्यापार रणनीति है। यह ऐतिहासिक कीमतों की गतिशीलता के संकेतकों की गणना करके बाजार की कीमतों के आंदोलन की प्रवृत्ति और ताकत का आकलन करने के लिए बाजार की मध्य-लंबी प्रवृत्ति को पकड़ने के लिए है। जब गतिशीलता नकारात्मक से सही हो जाती है, और सकारात्मक से नकारात्मक होने पर खाली हो जाती है, तो यह प्रवृत्ति ट्रैकिंग रणनीति है। यह रणनीति स्पष्ट रूप से प्रवृत्ति वाले बाजारों के लिए उपयुक्त है, जो अतिरिक्त लाभ प्राप्त कर सकती है।
यह रणनीति मुख्य रूप से गतिशीलता पर आधारित है। गतिशीलता सूचक वर्तमान चक्र के समापन मूल्य को N चक्र से पहले के समापन मूल्य को घटाकर है। जब नवीनतम K लाइन की समापन कीमत N चक्र से पहले से अधिक होती है, तो गतिशीलता सकारात्मक होती है, बढ़ती गति को दर्शाती है; जब नवीनतम K लाइन की समापन कीमत N चक्र से पहले से कम होती है, तो गतिशीलता नकारात्मक होती है, गिरावट को दर्शाती है।
रणनीति पहले 18 चक्रों की गतिशीलता की गणना करती है, यानी, वर्तमान समापन मूल्य को 18 चक्रों से पहले के समापन मूल्य को घटाकर, mom0 मिलता है। फिर mom0 की एक चक्र की गतिशीलता की गणना करें, और mom1 मिलता है।
जब mom0>0 और mom1>0 के बीच एक बहु सिग्नल उत्पन्न होता है, तो यह संकेत देता है कि कीमत में वृद्धि की गति मजबूत है; जब mom0 और mom1 के बीच एक शून्य सिग्नल उत्पन्न होता है, तो यह संकेत देता है कि कीमत में गिरावट की गति मजबूत है।
रणनीति नवीनतम ओवर और डाउन सिग्नल के समय को रिकॉर्ड करती है, जब ओवर सिग्नल का समय ओवर सिग्नल के समय से अधिक होता है, तो वह ओवर स्थिति रखती है, और जब ओवर सिग्नल का समय ओवर सिग्नल के समय से अधिक होता है, तो वह ओवर सिग्नल स्थिति रखती है
इस रणनीति के निम्नलिखित फायदे हैं:
रणनीति स्पष्ट और सरल है, इसे लागू करना आसान है, और यह मात्रात्मक व्यापार के शुरुआती लोगों के लिए उपयुक्त है।
गतिशीलता संकेतक बाजार की प्रवृत्ति और ताकत को पकड़ने में सक्षम हैं, जो मध्यम-लंबी प्रवृत्ति को ट्रैक करने के लिए उच्च जीत दर है।
दोहरी गतिशीलता फ़िल्टरिंग के साथ, कुछ नकली सफलताओं से होने वाले नुकसान को फ़िल्टर किया जा सकता है।
ट्रेडिंग सिग्नल उत्पन्न होने के बाद प्रवृत्ति की स्थिति स्थापित करने के लिए बढ़ोतरी की जाती है, जिससे प्रवृत्ति की स्थिति से अतिरिक्त लाभ प्राप्त किया जा सकता है।
समय पर स्टॉप लॉस से बाहर निकलने से एकल नुकसान को नियंत्रित किया जा सकता है और रिवर्स के कारण अत्यधिक नुकसान से बचा जा सकता है।
इस रणनीति के कुछ जोखिम भी हैं, जिनके बारे में ध्यान देने की आवश्यकता हैः
बहुहेड ट्रेडों में अल्पकालिक समायोजन के कारण स्टॉप लॉस की वापसी होती है, जो पूरे चक्र के ट्रेडों को पकड़ने में असमर्थ होती है। स्टॉप लॉस की सीमा को उचित रूप से ढीला किया जा सकता है।
अस्थिरता के दौरान अक्सर खुले और खुले पोजीशन होते हैं, जिससे ट्रेडिंग शुल्क और स्लाइड पॉइंट हानि बढ़ जाती है। फ़िल्टर शर्तों को उचित रूप से ढीला किया जा सकता है, जिससे ट्रेडिंग की आवृत्ति कम हो सकती है।
रुझान के उलट होने के बाद भी मूल दिशा में स्थिति रखने से नुकसान बढ़ जाता है। रुझान के सूचक के साथ मिलकर रुझान की उलटापन का आकलन किया जा सकता है।
अनुचित पैरामीटर सेट करने से ट्रेडिंग सिग्नल में गड़बड़ी हो सकती है या गलत सिग्नल उत्पन्न हो सकता है। विभिन्न बाजारों के लिए पैरामीटर को समायोजित करने की आवश्यकता होती है।
इस रणनीति को निम्नलिखित पहलुओं से अनुकूलित किया जा सकता हैः
गतिशीलता मापदंडों का अनुकूलन करें, विभिन्न चक्रों और बाजार समायोजन के लिए गतिशीलता की लंबाई की गणना करें, सिग्नल की गुणवत्ता में सुधार करें।
अन्य सूचकांकों जैसे कि MACD, KD आदि को फ़िल्टर करके, प्रवृत्ति के उलट होने से बचें।
स्टॉप-लॉस रणनीति का अनुकूलन करें, ट्रेडिंग ट्रेंड में स्टॉप-लॉस को उचित रूप से ढीला करें; गैर-ट्रेंड बाजार में स्टॉप-लॉस को उचित रूप से कसें।
स्थिति प्रबंधन रणनीति को बढ़ाएं, गैर-प्रवृत्ति स्थितियों में स्थिति को कम करें; अधिक लाभ प्राप्त करने के लिए प्रवृत्ति स्थितियों में स्थिति बढ़ाएं।
विभिन्न किस्मों के लिए पैरामीटर को अनुकूलित करें, पैरामीटर अनुकूलन में सुधार करें।
मशीन लर्निंग एल्गोरिदम जोड़े गए हैं ताकि रणनीति को गतिशील रूप से अनुकूलित किया जा सके।
एक गतिशील ब्रेकआउट रणनीति एक सरल और सहज प्रवृत्ति ट्रैकिंग रणनीति है। यह प्रभावी रूप से बाजार के मध्य-लंबी प्रवृत्ति को पकड़ने में सक्षम है, और प्रवृत्ति की स्थिति में बेहतर रिटर्न प्राप्त करता है। इसके अलावा, जोखिम नियंत्रण पर ध्यान देने की आवश्यकता है, स्टॉप-लॉस रणनीति को अनुकूलित करें, और अन्य संकेतकों के आधार पर प्रवृत्ति का न्याय करने में सहायता करें। निरंतर अनुकूलन के माध्यम से, इस रणनीति को एक स्थिर लाभदायक मात्रात्मक व्यापार प्रणाली में बदल दिया जा सकता है।
/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Momentum BF 🚀", overlay=true, precision=2, 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 ///////////////
_0 = input(false, "════════ Test Period ═══════")
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
///////////// Momentum /////////////
_1 = input(false, "═══════ Momentum ══════")
length = input(18)
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)
/////////////// Strategy ///////////////
long = mom0 > 0 and mom1 > 0
short = mom0 < 0 and mom1 < 0
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 Losses Long ///////////////
_5 = input(false, "═══════ Stop Loss L ══════")
SL_typel = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inpl = input(8.0, title='Fixed Stop Loss %') / 100
atrLkbl = input(20, minval=1, title='ATR Stop Period')
atrMultl = input(1.5, step=0.25, title='ATR Stop Multiplier')
atr1l = atr(atrLkbl)
longStop1l = 0.0
longStop1l := short_signal ? na : long_signal ? close - (atr1l * atrMultl) : longStop1l[1]
slLongl = in_long_signal ? strategy.position_avg_price * (1 - sl_inpl) : na
long_sll = in_long_signal ? slLongl : na
/////////////// Stop Losses Short ///////////////
_6 = input(false, "═══════ Stop Loss S ══════")
SL_types = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inps = input(7.0, title='Fixed Stop Loss %') / 100
atrLkbs = input(20, minval=1, title='ATR Stop Period')
atrMults = input(1.5, step=0.25, title='ATR Stop Multiplier')
atr1s = atr(atrLkbs)
shortStop1s = 0.0
shortStop1s := long_signal ? na : short_signal ? close + (atr1s * atrMults) : shortStop1s[1]
slShorts = strategy.position_avg_price * (1 + sl_inps)
short_sls = in_short_signal ? slShorts : na
_7 = input(false, "══════ Longs or Shorts ═════")
useLongs = input(true, title="Use Longs")
useShorts = input(true, title="Use Shorts")
/////////////// Execution ///////////////
if testPeriod()
if useLongs
strategy.entry("L", strategy.long, when=long)
strategy.exit("L SL", "L", stop = SL_typel == "Fixed" ? long_sll : longStop1l, when=since_longEntry > 0)
if useShorts
strategy.exit("S SL", "S", stop = SL_types == "Fixed" ? short_sls : shortStop1s, when=since_shortEntry > 0)
strategy.entry("S", strategy.short, when=short)
if not useShorts
strategy.close("L", when=short)
if not useLongs
strategy.close("S", when=long)
/////////////// Plotting ///////////////
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=40)
p0 = plot(close)
p1 = plot(strategy.position_size <= 0 ? na : SL_typel == "Fixed" ? long_sll : longStop1l, title="Long Stop Loss", color=color.yellow, style=plot.style_linebr, linewidth=2)
p2 = plot(strategy.position_size >= 0 ? na : SL_types == "Fixed" ? short_sls : shortStop1s, title="Short Stop Loss", color=color.orange, style=plot.style_linebr, linewidth=2)
p3 = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, style=plot.style_linebr, title="Long Entry", color=color.green, linewidth=2)
p4 = plot(strategy.position_size >= 0 ? na : strategy.position_avg_price, style=plot.style_linebr, title="Short Entry", color=color.red, linewidth=2)
fill(p0, p3, color = color.lime, transp=60)
fill(p0, p4, color = color.red, transp=60)