यह रणनीति मुख्य रूप से रुझानों की पहचान करने के लिए दोहरी ईएमए गति और डीईएमए गति के क्रॉसओवर का उपयोग करती है, और झूठे ब्रेकआउट को फ़िल्टर करने के लिए एटीआर अस्थिरता सूचकांक को शामिल करती है, दोहरी गति संकेतकों और अस्थिरता फ़िल्टरिंग के साथ एक मात्रात्मक ट्रेडिंग रणनीति लागू करती है।
इस रणनीति के मुख्य घटकों में निम्नलिखित शामिल हैंः
मूल्य के ईएमए और डीईएमए को दोहरे गति संकेतक के रूप में गणना करें। लंबी अवधि के ईएमए दीर्घकालिक रुझानों को दर्शाता है, जबकि डीईएमए एक अधिक संवेदनशील अल्पकालिक गति संकेतक के रूप में कार्य करता है। जब डीईएमए ईएमए से ऊपर जाता है तो एक खरीद संकेत उत्पन्न होता है।
एटीआर अस्थिरता सूचकांक की गणना करें। बाजार अस्थिरता और तरलता की स्थिति निर्धारित करने के लिए एटीआर मूल्य का उपयोग करें। झूठे ब्रेकआउट से बचने के लिए अस्थिरता बहुत अधिक होने पर गति संकेतक संकेतों को फ़िल्टर करें।
एटीआर अस्थिरता को एक पैरामीटरकृत चलती औसत रेखा द्वारा उच्च या निम्न के रूप में आंका जाता है। गति संकेतक संकेत केवल तभी ट्रिगर होते हैं जब एटीआर अस्थिरता चलती औसत रेखा से नीचे होती है।
पैरामीटर एटीआर समय सीमा, एटीआर लंबाई, एटीआर चलती औसत प्रकार और लंबाई आदि को नियंत्रित करते हैं।
लॉन्ग पोजीशन के लिए स्टॉप लॉस, टेक प्रॉफिट और ट्रेलिंग स्टॉप नियम स्थापित करें।
दोहरी ईएमए फ़िल्टर बुनियादी ईएमए क्रॉस रणनीतियों की तुलना में झूठे संकेतों और ओवरट्रेडिंग को काफी कम कर सकता है। एटीआर अस्थिरता सूचकांक को जोड़ने से मामूली उतार-चढ़ाव से भ्रामक संकेतों को प्रभावी ढंग से फ़िल्टर किया जाता है और फंसने से बचा जाता है।
एकल गति संकेतक की तुलना में, दोहरी डिजाइन निर्णय की प्रभावशीलता में सुधार कर सकता है। एक अधिक उत्तरदायी अल्पकालिक गति संकेतक के रूप में, स्थिर दीर्घकालिक ईएमए के साथ संयुक्त डीईएमए एक विश्वसनीय कॉम्बो सिग्नल बनाता है।
एटीआर मापदंडों को समायोजित करके, विभिन्न टिकरों के लिए उपयुक्त अस्थिरता सीमाएं निर्धारित की जा सकती हैं, जिससे रणनीति अनुकूलन क्षमता में सुधार होता है।
सबसे बड़ा जोखिम यह है कि अनुचित पैरामीटर सेटिंग्स के परिणामस्वरूप बहुत कम ट्रेडिंग सिग्नल हो सकते हैं। बहुत लंबी डीईएमए और ईएमए लंबाई, या एटीआर अस्थिरता सीमाएं बहुत अधिक सेट कर सकती हैं, सभी वास्तविक रणनीति प्रदर्शन को कम कर सकती हैं। इष्टतम पैरामीटर संयोजन खोजने के लिए दोहराए गए बैकटेस्ट की आवश्यकता होती है।
एक अन्य संभावित जोखिम यह है कि चरम बाजार स्थितियों में, मूल्य उतार-चढ़ाव एटीआर पैरामीटर बाधाओं का उल्लंघन कर सकते हैं जिससे नुकसान हो सकता है। जब आवश्यक हो तो रणनीति निष्पादन को रोकने के लिए बाजार की असामान्यताओं की मैन्युअल निगरानी की आवश्यकता होती है।
इष्टतम सेटिंग्स खोजने के लिए विभिन्न गति संकेतक पैरामीटर संयोजनों का परीक्षण करें।
दोहरे ईएमए से एमएसीडी या अन्य संकेतकों के स्थान पर गति संकेतक लगाने का प्रयास करें।
विभिन्न अस्थिरता सूचकांक विन्यासों का परीक्षण करें, जैसे समग्र ऐतिहासिक एटीआर, बाजार अस्थिरता सूचकांक आदि।
झूठे मूल्य ब्रेकआउट से जोखिम से बचने के लिए वॉल्यूम फ़िल्टरिंग जोड़ें।
जोखिम-लाभ अनुपात में सुधार के लिए स्टॉप लॉस और लाभ लेने के तंत्र का अनुकूलन करें।
यह रणनीति एक ठोस सैद्धांतिक आधार के साथ गति विश्लेषण और अस्थिरता अनुसंधान को एकीकृत करती है। पैरामीटर ट्यूनिंग और तर्क अनुकूलन के माध्यम से, यह एक स्थिर और विश्वसनीय एल्गोरिथम ट्रेडिंग प्रणाली बन सकती है। स्पष्ट व्यापार संकेतों और नियंत्रित जोखिमों के साथ, यह लाइव ट्रेडिंग में सत्यापित और लागू करने योग्य है।
/*backtest start: 2023-11-21 00:00:00 end: 2023-12-21 00:00:00 period: 1h 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/ // © Qorbanjf //@version=4 strategy("ORIGIN DEMA/EMA & VOL LONG ONLY", shorttitle="ORIGIN DEMA/EMA & VOL LONG", overlay=true) // DEMA length = input(10, minval=1, title="DEMA LENGTH") src = input(close, title="Source") e1 = ema(src, length) e2 = ema(e1, length) dema1 = 2 * e1 - e2 plot(dema1, "DEMA", color=color.yellow) //EMA len = input(25, minval=1, title="EMA Length") srb = input(close, title="Source") offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500) ema1 = ema(srb, len) plot(ema1, title="EMA", color=color.blue, offset=offset) // Inputs atrTimeFrame = input("D", title="ATR Timeframe", type=input.resolution) atrLookback = input(defval=14,title="ATR Lookback Period",type=input.integer) useMA = input(title = "Show Moving Average?", type = input.bool, defval = true) maType = input(defval="EMA", options=["EMA", "SMA"], title = "Moving Average Type") maLength = input(defval = 20, title = "Moving Average Period", minval = 1) //longLossPerc = input(title="Long Stop Loss (%)", // type=input.float, minval=0.0, step=0.1, defval=1) * 0.01 longTrailPerc = input(title="Trail stop loss (%)", type=input.float, minval=0.0, step=0.1, defval=50) * 0.01 longProfitPerc = input(title="Long Take Profit (%)", type=input.float, minval=0.0, step=0.1, defval=3000) / 100 // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2017, title = "From Year", minval = 2000) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2017) // ATR Logic // atrValue = atr(atrLookback) // atrp = (atrValue/close)*100 // plot(atrp, color=color.white, linewidth=2, transp = 30) atrValue = security(syminfo.tickerid, atrTimeFrame, atr(atrLookback)) atrp = (atrValue/close)*100 // Moving Average Logic ma(maType, src, length) => maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc) maFilter = security(syminfo.tickerid, atrTimeFrame, ma(maType, atrp, maLength)) // variables for enter position enterLong = crossover(dema1, ema1) and atrp < maFilter // variables for exit position sale = crossunder(dema1, ema1) // stop loss //longStopPrice = strategy.position_avg_price * (1 - longLossPerc) // trail stop // Determine trail stop loss prices longStopTrail = 0.0 longStopTrail := if (strategy.position_size > 0) stopValue = close * (1 - longTrailPerc) max(stopValue, longStopTrail[1]) else 0 //Take profit Percentage longExitPrice = strategy.position_avg_price * (1 + longProfitPerc) //Enter trades when conditions are met strategy.entry(id="long", long=strategy.long, when=enterLong, comment="long") // strategy.close("long", when = sale, comment = "Sell") //place exit orders (only executed after trades are active) strategy.exit(id="sell", limit = longExitPrice, stop = longStopTrail, comment = "SL/TP")