
डबल एक्सपोनेंशियल मूविंग एवरेज ट्रेंड फॉलोइंग स्ट्रैटेजी एक ट्रेंड फॉलोइंग स्ट्रैटेजी है जो औसत रेखा के क्रॉसिंग पर आधारित है। यह रणनीति तेज ईएमए और धीमी ईएमए की गणना करके और उनके क्रॉसिंग के आधार पर वर्तमान प्रवृत्ति की दिशा का न्याय करती है। जब तेज लाइन धीमी लाइन से गुजरती है, तो इसे मंदी के रूप में आंका जाता है; जब तेज लाइन धीमी लाइन से गुजरती है, तो इसे मंदी के रूप में आंका जाता है।
इस रणनीति का मूल तर्क दो अलग-अलग चक्रों के ईएमए औसत की गणना करना है, एक खाली लाइन के रूप में और एक बहु-सीमा लाइन के रूप में। विशेष रूप से, रणनीति तालिब सूचक के माध्यम से एक 8 चक्र के तेजी से ईएमए औसत की गणना करती है, जो एक बहु-सीमा लाइन है; इसके अलावा, एक 21 चक्र की धीमी गति से ईएमए औसत की गणना एक खाली सिर के रूप में की जाती है। फिर तेज ईएमए लाइन और धीमी ईएमए लाइन के क्रॉसिंग संबंध का न्याय करें, और जब तेज लाइन धीमी गति से गुजरती है, तो इसे अधिक के रूप में आंका जा सकता है; जब तेज लाइन धीमी गति से गुजरती है, तो इसे गिरावट के रूप में आंका जा सकता है, इसे खाली किया जा सकता है।
विशेष रूप से व्यापार के संचालन को लागू करने के लिए, रणनीति केवल अधिक या खाली हो सकती है; या दोनों दिशाओं में व्यापार किया जा सकता है जब तेज और धीमी रेखाएं पार हो जाती हैं। इसके अलावा, रणनीति में एक स्टॉप और स्टॉप मूल्य भी सेट किया गया है। स्थिति खोलने के बाद, यदि कीमत अनुचित दिशा में चलती है, तो नुकसान को रोक दिया जाएगा; यदि कीमत का संचालन अपेक्षित लक्ष्य तक पहुंचता है, तो स्टॉप को समाप्त कर दिया जाएगा।
डबल ईएमए रेविनरी ट्रैकिंग रणनीति का सबसे बड़ा लाभ यह है कि रेविनरी क्रॉसिंग की मजबूत प्रवृत्ति निर्णय क्षमता का उपयोग किया जाता है। ईएमए रेविनरी एक सामान्य रूप से प्रवृत्ति निर्णय उपकरण के रूप में, रेविनरी क्रॉसिंग के माध्यम से मूल्य परिवर्तन प्रवृत्ति और टर्नटाइम की पहचान करने के लिए, शॉर्ट लाइन बाजार के शोर से भ्रमित होने से बचने के लिए, मुख्य प्रवृत्ति की दिशा को पकड़ने के लिए।
इसके अलावा, रणनीति के लचीले व्यापार दिशा सेट, दोनों एकतरफा घटनाओं के लिए अनुकूल है, और कीमतों में दोतरफा अवसरों को पकड़ सकता है, रणनीति की व्यावहारिकता को बढ़ाता है। साथ ही स्टॉप-लॉस स्टॉप सेट करें, जो जोखिम को प्रभावी ढंग से नियंत्रित कर सकता है, कुछ मुनाफे को लॉक कर सकता है।
डबल ईएमए औसत रेखा ट्रैकिंग रणनीति का सबसे बड़ा जोखिम यह है कि कई बार छोटे पैमाने पर क्रॉसिंग के कारण कई बार क्रॉसिंग और झूठे सिग्नल उत्पन्न होते हैं। इस प्रकार, ईएमए चक्र को उचित रूप से बढ़ाया जा सकता है ताकि क्रॉसिंग और झूठे सिग्नल की संभावना कम हो सके।
दूसरी ओर, यदि स्टॉप रेंज को बहुत छोटा सेट किया जाता है, तो रणनीति को हिट होने की संभावना बढ़ जाती है। इस मामले में, स्टॉप रेंज को उचित रूप से बढ़ाया जा सकता है, लेकिन इसके जोखिम को भी संतुलित करने की आवश्यकता है।
इस रणनीति को और अधिक अनुकूलित किया जा सकता हैः
गतिशील रूप से ईएमए औसत चक्र को समायोजित करना। ईएमए चक्र गतिशीलता को बाजार में उतार-चढ़ाव और इष्टतम पैरामीटर के परिणामों के आधार पर समायोजित किया जा सकता है, जिससे निश्चित चक्र के तहत ओवरफिट की समस्या से बचा जा सकता है।
फ़िल्टरिंग की शर्तें जोड़ें झूठे संकेतों को फ़िल्टर करने के लिए। उदाहरण के लिए, लेन-देन की मात्रा के साथ जोड़ा जा सकता है, छोटे उतार-चढ़ाव के दौरान उत्पन्न झूठे क्रॉस को फ़िल्टर करें। अन्य संकेतकों जैसे कि MACD, KDJ आदि के साथ भी जोड़ा जा सकता है, ताकि अनिश्चित समय में संकेत उत्पन्न न हो सके।
एटीआर जैसे संकेतकों के साथ संयोजन में स्टॉप लॉस स्टॉप रणनीति का अनुकूलन, स्टॉप लॉस स्टॉप की गतिशील ट्रैकिंग को प्राप्त करने में मदद करता है।
विभिन्न पोजीशन समय का परीक्षण करें। पोजीशन समय बहुत लंबा है, जो आकस्मिक घटनाओं से प्रभावित हो सकता है; पोजीशन समय बहुत छोटा है, जो लेनदेन की लागत और स्लाइडिंग लागत को बढ़ाता है। सबसे अच्छा पोजीशन दिन खोजने के लिए, रणनीति की लाभप्रदता में सुधार कर सकते हैं।
डबल ईएमए रेवेन्यू ट्रैकिंग रणनीति समग्र रूप से एक मजबूत और व्यावहारिक प्रवृत्ति ट्रैकिंग रणनीति है। यह ईएमए रेवेन्यू क्रॉसिंग का उपयोग करके मूल्य प्रवृत्ति का आकलन करता है, जिससे बाजार की दिशा को प्रभावी ढंग से पकड़ लिया जा सकता है। साथ ही, सेटिंग्स की लचीली ट्रेडिंग दिशा सेटिंग्स रणनीति अनुकूलनशीलता को बढ़ाती है; और स्टॉप-लॉस और स्टॉप-ऑफ सेटिंग्स जोखिम को नियंत्रित करती हैं। आगे के अनुकूलन और सुधार के साथ, यह रणनीति मात्रात्मक व्यापार के लिए एक शक्तिशाली उपकरण बन सकती है।
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © TradersPostInc
//@version=5
strategy('TradersPost Example MOMO Strategy', overlay=true, default_qty_value=100, initial_capital=100000, default_qty_type=strategy.percent_of_equity, pyramiding=0)
startTime = input(defval = timestamp('01 Jan 2021 00:00 +0000'), title = 'Start Time', group = 'Date Range')
endTime = input(defval = timestamp('31 Dec 2023 23:59 +0000'), title = 'End Time', group = 'Date Range')
timeCondition = true
timeConditionEnd = timeCondition[1] and not timeCondition
fastEmaLength = input.int(defval = 8, title = 'Fast EMA Length')
slowEmaLength = input.int(defval = 21, title = 'Slow EMA Length')
sides = input.string(defval = 'Both', title = 'Sides', options = ['Long', 'Short', 'Both', 'None'])
fastEma = ta.ema(close, fastEmaLength)
slowEma = ta.ema(close, slowEmaLength)
isUptrend = fastEma >= slowEma
isDowntrend = fastEma <= slowEma
trendChanging = ta.cross(fastEma, slowEma)
ema105 = request.security(syminfo.tickerid, '30', ta.ema(close, 105)[1], barmerge.gaps_off, barmerge.lookahead_on)
ema205 = request.security(syminfo.tickerid, '30', ta.ema(close, 20)[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(ema105, linewidth=4, color=color.new(color.purple, 0), editable=true)
plot(ema205, linewidth=2, color=color.new(color.purple, 0), editable=true)
aa = plot(fastEma, linewidth=3, color=color.new(color.green, 0), editable=true)
bb = plot(slowEma, linewidth=3, color=color.new(color.red, 0), editable=true)
fill(aa, bb, color=isUptrend ? color.green : color.red, transp=90)
tradersPostBuy = trendChanging and isUptrend and timeCondition
tradersPostSell = trendChanging and isDowntrend and timeCondition
pips = syminfo.pointvalue / syminfo.mintick
percentOrPipsInput = input.string('Percent', title='Percent or Pips', options=['Percent', 'Pips'])
stopLossLongInput = input.float(defval=0, step=0.01, title='Stop Loss Long', minval=0)
stopLossShortInput = input.float(defval=0, step=0.01, title='Stop Loss Short', minval=0)
takeProfitLongInput = input.float(defval=0, step=0.01, title='Target Profit Long', minval=0)
takeProfitShortInput = input.float(defval=0, step=0.01, title='Target Profit Short', minval=0)
stopLossPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (stopLossLongInput / 100) * pips
stopLossPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (stopLossShortInput / 100) * pips
takeProfitPriceLong = ta.valuewhen(tradersPostBuy, close, 0) * (takeProfitLongInput / 100) * pips
takeProfitPriceShort = ta.valuewhen(tradersPostSell, close, 0) * (takeProfitShortInput / 100) * pips
takeProfitALong = takeProfitLongInput > 0 ? takeProfitLongInput : na
takeProfitBLong = takeProfitPriceLong > 0 ? takeProfitPriceLong : na
takeProfitAShort = takeProfitShortInput > 0 ? takeProfitShortInput : na
takeProfitBShort = takeProfitPriceShort > 0 ? takeProfitPriceShort : na
stopLossALong = stopLossLongInput > 0 ? stopLossLongInput : na
stopLossBLong = stopLossPriceLong > 0 ? stopLossPriceLong : na
stopLossAShort = stopLossShortInput > 0 ? stopLossShortInput : na
stopLossBShort = stopLossPriceShort > 0 ? stopLossPriceShort : na
takeProfitLong = percentOrPipsInput == 'Pips' ? takeProfitALong : takeProfitBLong
stopLossLong = percentOrPipsInput == 'Pips' ? stopLossALong : stopLossBLong
takeProfitShort = percentOrPipsInput == 'Pips' ? takeProfitAShort : takeProfitBShort
stopLossShort = percentOrPipsInput == 'Pips' ? stopLossAShort : stopLossBShort
buyAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "buy", "price": ' + str.tostring(close) + '}'
sellAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "sell", "price": ' + str.tostring(close) + '}'
exitLongAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'
exitShortAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit", "price": ' + str.tostring(close) + '}'
if (sides != "None")
if tradersPostBuy
strategy.entry('Long', strategy.long, when = sides != 'Short', alert_message = buyAlertMessage)
strategy.close('Short', when = sides == "Short" and timeCondition, alert_message = exitShortAlertMessage)
if tradersPostSell
strategy.entry('Short', strategy.short, when = sides != 'Long', alert_message = sellAlertMessage)
strategy.close('Long', when = sides == 'Long', alert_message = exitLongAlertMessage)
exitAlertMessage = '{"ticker": "' + syminfo.ticker + '", "action": "exit"}'
strategy.exit('Exit Long', from_entry = "Long", profit = takeProfitLong, loss = stopLossLong, alert_message = exitAlertMessage)
strategy.exit('Exit Short', from_entry = "Short", profit = takeProfitShort, loss = stopLossShort, alert_message = exitAlertMessage)
strategy.close_all(when = timeConditionEnd)