इस रणनीति का नाम है
डीईएमए संकेतक की गणना करें। डीईएमए दोहरे एग्ज़ेंटेन्शियल मूविंग एवरेज है जो दोहरे ईएमए का उपयोग करता है, जो अल्पकालिक बाजार शोर को फ़िल्टर कर सकता है और सिग्नल सटीकता में सुधार कर सकता है।
ईएमए सूचक की गणना करें। ईएमए घातीय चलती औसत है जो मूल्य परिवर्तनों पर तेजी से प्रतिक्रिया करता है।
एटीआर अस्थिरता सूचकांक की गणना करें। एटीआर बाजार अस्थिरता और जोखिम के स्तर को मापता है। बढ़ते एटीआर अस्थिरता और अल्पकालिक पॉलबैक की अधिक संभावना का प्रतिनिधित्व करता है।
जब डीईएमए ईएमए से नीचे जाता है और एटीआर सीमा से ऊपर जाता है, तो यह एक अल्पकालिक डाउनट्रेंड और बढ़े हुए बाजार जोखिम की शुरुआत का संकेत देता है।
जब डीईएमए ईएमए के ऊपर फिर से पार करता है, तो यह मूल्य समर्थन और ऊपर की ओर उछाल का संकेत देता है। रणनीति छोटी स्थिति को बंद करती है।
दोहरी ईएमए और ईएमए का संयोजन सिग्नल की सटीकता में प्रभावी ढंग से सुधार कर सकता है।
एटीआर अस्थिरता फ़िल्टर कम जोखिम वाले व्यापारों को समाप्त करता है।
संक्षिप्त धारण अवधि अल्पकालिक गति की निगरानी के लिए उपयुक्त है और लंबे समय तक हेजिंग से बचा जाता है।
सरल और स्पष्ट तर्क, समझने और लागू करने में आसान।
अनुचित एटीआर मापदंड व्यापार के अवसरों को खो सकते हैं।
एक साथ लंबे और छोटे दोनों संकेतों की निगरानी करने की आवश्यकता है, जिससे ऑपरेशन की कठिनाई बढ़ जाती है।
अल्पकालिक बाजार अस्थिरता से प्रभावित।
समाधानः बैकटेस्टिंग के माध्यम से पैरामीटर अनुकूलन। एक तरफ ध्यान केंद्रित करने के लिए तर्क को सरल करें। उचित रूप से स्टॉप लॉस स्तरों को आराम दें।
सर्वोत्तम संयोजन खोजने के लिए डीईएमए और ईएमए के लिए मापदंडों का अनुकूलन करें।
इष्टतम अस्थिरता बेंचमार्क निर्धारित करने के लिए एटीआर लुकबैक अवधि का अनुकूलन करें।
सिग्नल की सटीकता में सुधार के लिए BOLL बैंड जैसे अन्य संकेतक जोड़ें।
स्टॉप लॉस लागू करें और अधिक सुसंगत मुनाफे में लॉक करने के लिए लाभ नियम लें।
यह रणनीति डीईएमए, ईएमए क्रॉसओवर और एटीआर अस्थिरता सूचकांक का उपयोग करके एक सरल लेकिन प्रभावी अल्पकालिक ट्रेडिंग प्रणाली का निर्माण करती है। स्वच्छ तर्क और संचालन की आसानी इसे उच्च आवृत्ति गति व्यापार के लिए उपयुक्त बनाती है। आगे पैरामीटर और तर्क अनुकूलन संभावित रूप से अधिक स्थिर आउटपरफॉर्मेंस उत्पन्न कर सकता है।
/*backtest start: 2023-12-08 00:00:00 end: 2024-01-07 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 // 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("Qorban: DEMA/EMA & VOL Short ONLY", shorttitle="DEMA/EMA & VOL SHORT", 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) // get ATR VALUE atr = atr(14) //ATRP (Average True Price in precentage) // 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) slType = input(title="Stop Loss ATR / %", type=input.float, defval=5.0, step=0.1) slMulti = input(title="SL Multiplier", type=input.float, defval=1.0, step=0.1) minimumProfitPercent = input(title="Minimum profit %", type=input.float, defval=20.00) // 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)) // Determine percentage of open profit var entry = 0.0 distanceProfit = low - entry distanceProfitPercent = distanceProfit / entry //Determin if we have a long entry signal OR a sell position signal profitSignal = minimumProfitPercent == 0.0 or distanceProfitPercent >= minimumProfitPercent shortSignal = crossunder(dema1, ema1) and atrp > maFilter and strategy.position_size == 0 and not na(atr) exitSignal = profitSignal and strategy.position_size !=0 and crossover(dema1, ema1) // === 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) //Invert trade direction & flipping //tradInvert = input(defval = false, title = "invert trade direction") //MOM_MR = input(defval=1, title = "MOM = 1 / MR = -1", minval=-1, maxval=1) //plots=input(false, title="Show plots?") // Get stop loss (in pips AND percentage distance) shortStop = highest(high, 4) - (atr * slMulti) shortStopPercent = close - (close * slMulti) // Save long stop & target prices (used for drawing data to the chart & deetermining profit) var shortStopSaved = 0.0 var shortTargetSaved = 0.0 enterShort = false if shortSignal shortStopSaved := slType ? shortStop : shortStopPercent enterShort:= true entry := close // long conditions //enterLong = crossover(dema1, ema1) and atrp < maFilter //exitSignal => crossunder(dema1, ema1) //Enter trades when conditions are met strategy.entry("short", strategy.short, when=enterShort, comment="SHORT") //place exit orders (only executed after trades are active) strategy.exit(id="Short exit", from_entry="short", limit=exitSignal ? close : na, stop=shortStopSaved, when=strategy.position_size > 0, comment="end short") //short strategy //goShort() => crossunder(dema1, ema1) and atrp > maFilter //KillShort() => crossover(dema1, ema1) //strategy.entry("SHORT", strategy.short, when = goShort()) //strategy.close("COVER", when = KillShort())