डायनेमिक प्राइस स्विंग ऑसिलेटर मूल्य रुझानों की पहचान करने के लिए एक रणनीति है। यह गतिशील प्रवेश और निकास को लागू करने के लिए चलती औसत, मूल्य चैनलों और फिबोनाची रिट्रेसमेंट को जोड़ती है। इस रणनीति का लाभ यह है कि यह लचीले संचालन के लिए मूल्य रुझानों में परिवर्तन की पहचान कर सकती है।
यह रणनीति मुख्यतः निम्नलिखित सिद्धांतों पर आधारित हैः
प्रवृत्ति के विरुद्ध व्यापार को रोकने के लिए मूल्य प्रवृत्ति की दिशा निर्धारित करने के लिए तेज ईएमए और धीमे ईएमए का उपयोग करें
ब्रेकआउट सिग्नल निर्धारित करने के लिए कीमत के ऊपरी और निचले चैनल की सीमाओं का उपयोग करें, जब कीमत ऊपरी सीमा चैनल को तोड़ती है तो शॉर्ट जाएं और जब यह निचली सीमा चैनल को तोड़ती है तो लंबी जाएं
न्याय के संकेत के रूप में चलती औसत क्रॉसओवर का उपयोग करें, सोने के क्रॉस पर लंबे समय तक जाएं, और मौत के क्रॉस पर कम जाएं
फैसले के संकेत के रूप में फाइबोनैचि रिट्रेसमेंट लाइन का उपयोग करें, जब कीमत फाइबोनैचि ऊपरी सीमा रेखा को तोड़ती है, तो शॉर्ट जाएं, और जब यह निचली सीमा रेखा को तोड़ती है, तो लंबे समय तक जाएं
इन संकेतकों के आधार पर बाजार में प्रवेश करने, स्टॉप लॉस और ले-प्रॉफिट एग्जिट के तंत्र निर्धारित किए जाने के बाद।
इस रणनीति का सबसे बड़ा लाभ यह है कि यह मूल्य रुझानों में परिवर्तन की पहचान करने के लिए कई संकेतकों को जोड़ती है।
प्रमुख प्रवृत्ति को निर्धारित करने के लिए तेज और धीमे ईएमए का उपयोग करने से प्रवृत्ति के खिलाफ व्यापार होने से बचा जाता है और नुकसान कम हो सकता है
मूल्य चैनल निर्णय अधिक लाभ क्षमता वाले मूल्य ब्रेकआउट अवसरों को पकड़ सकते हैं
चलती औसत क्रॉसओवर के फैसले सरल और व्यावहारिक हैं, लागू करने में आसान हैं
फाइबोनैचि रिट्रेसमेंट रणनीति को अधिक त्रि-आयामी बनाने के लिए न्याय करने का एक और तरीका जोड़ते हैं
इस रणनीति के कुछ जोखिमों को ध्यान में रखना आवश्यक हैः
तेज और धीमी ईएमए के लिए अनुचित पैरामीटर सेटिंग्स गलत आकलन का कारण बन सकती हैं
मूल्य चैनल की ऊपरी और निचली सीमाओं को तोड़ने का अनुचित समय नुकसान के आदेशों का कारण बन सकता है
मूविंग एवरेज क्रॉस का चुनाव भी सावधानी से करना चाहिए
फिबोनाची रिट्रेसमेंट बैंड की गलत चौड़ाई सेटिंग्स भी निर्णय प्रभाव को प्रभावित करेगी
इन जोखिमों को पैरामीटर अनुकूलन के माध्यम से कम किया जा सकता है।
इस रणनीति के लिए कुछ दिशाओं को अनुकूलित किया जा सकता हैः
ईएमए चक्र, चैनल चौड़ाई और चलती औसत अवधि जैसे मापदंडों का परीक्षण और अनुकूलन करें
अन्य तकनीकी संकेतकों जैसे आरएसआई और बोलिंगर बैंड के लिए निर्णय नियम जोड़ें
ब्रेकआउट की विश्वसनीयता निर्धारित करने के लिए ट्रेडिंग वॉल्यूम ऊर्जा संकेतक जैसे OBV को मिलाएं
स्वचालित रूप से इष्टतम मापदंडों का पता लगाने के लिए मशीन लर्निंग और अन्य प्रौद्योगिकियों का उपयोग करें
डायनेमिक प्राइस स्विंग ऑसिलेटर एक अत्यधिक लचीला और अनुकूलन योग्य रणनीति है। यह कई संकेतक निर्णयों के माध्यम से ब्रेकआउट निर्धारित करने के बाद गतिशील रूप से मूल्य परिवर्तन और व्यापार के अनुकूल हो सकता है। हालांकि कुछ जोखिम हैं, लेकिन रणनीति की स्थिरता और लाभप्रदता में सुधार के लिए निरंतर अनुकूलन द्वारा उन्हें कम किया जा सकता है। रणनीति गहन शोध के लायक है।
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 1m basePeriod: 1m 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/ //@version=4 // ██████╗██████╗ ███████╗ █████╗ ████████╗███████╗██████╗ ██████╗ ██╗ ██╗ //██╔════╝██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗ ██╔══██╗╚██╗ ██╔╝ //██║ ██████╔╝█████╗ ███████║ ██║ █████╗ ██║ ██║ ██████╔╝ ╚████╔╝ //██║ ██╔══██╗██╔══╝ ██╔══██║ ██║ ██╔══╝ ██║ ██║ ██╔══██╗ ╚██╔╝ //╚██████╗██║ ██║███████╗██║ ██║ ██║ ███████╗██████╔╝ ██████╔╝ ██║ // ╚═════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝ ╚═════╝ ╚═╝ //███████╗ ██████╗ ██╗ ██╗ ██╗████████╗██╗ ██████╗ ███╗ ██╗███████╗ ██╗ █████╗ ███████╗ █████╗ //██╔════╝██╔═══██╗██║ ██║ ██║╚══██╔══╝██║██╔═══██╗████╗ ██║██╔════╝███║██╔══██╗╚════██║██╔══██╗ //███████╗██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██╔██╗ ██║███████╗╚██║╚██████║ ██╔╝╚█████╔╝ //╚════██║██║ ██║██║ ██║ ██║ ██║ ██║██║ ██║██║╚██╗██║╚════██║ ██║ ╚═══██║ ██╔╝ ██╔══██╗ //███████║╚██████╔╝███████╗╚██████╔╝ ██║ ██║╚██████╔╝██║ ╚████║███████║ ██║ █████╔╝ ██║ ╚█████╔╝ //╚══════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ ╚═╝ ╚════╝ ╚═╝ ╚════╝ strategy(shorttitle='DPS',title='Dynamic Price Swing', overlay=true, scale=scale.left, initial_capital = 1000, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.18, calc_on_every_tick=true) // ----------------- Strategy Inputs ------------------------------------------------------------- //Backtest dates with auto finish date of today start = input(defval = timestamp("22 June 2021 00:00 -0500"), title = "Start Time") finish = input(defval = timestamp("31 December 2021 00:00 -0600"), title = "End Time") window() => true // create function "within window of time" // Strategy Selection - Long, Short, or Both stratinfo = input(true, "Long/Short for Mixed Market, Long for Bull, Short for Bear") strat = input(title="Trade Types", defval="Long/Short", options=["Long Only", "Long/Short", "Short Only"]) strat_val = strat == "Long Only" ? 1 : strat == "Long/Short" ? 0 : -1 // Risk Management Inputs sl= input(10.0, "Stop Loss %", minval = 0, maxval = 100, step = 0.01) stoploss = sl/100 tp = input(20.0, "Target Profit %", minval = 0, maxval = 100, step = 0.01) TargetProfit = tp/100 ld = input(2, "Stop Trading After This Many Losing Days", type=input.integer, minval=0, maxval=100, step=1) // strategy.risk.max_cons_loss_days(count=ld) ml = input(10, "Maximum % of Equity Lost to Halt Trading", type=input.integer, minval=1, maxval=100, step=1) // strategy.risk.max_drawdown(value=ml, type=strategy.percent_of_equity) // Price Movement Inputs PriceInfo = input(true, "Number of bars to look back on to calculate price swings.") lkbk = input(5,"Max Lookback Period") high_source = input(high,"High Source") low_source= input(low,"Low Source") // Trend Inputs TrendInfo = input(true, "Trend uses Fast and Slow EMA to prevent going the wrong direction") length = input(14, "RSI Length", minval=1) fastLength = input(12, minval=1, title="EMA Fast Length") slowLength = input(26, minval=1, title="EMA Slow Length") // Trigger Selection usePrice = input(true, "Use Average Price Channel Only") useMA = input(false, "Use Price Moving Average Only") useFib = input(false, "Use Price Fibonacci Average Only") // Trend Direction Calculation rsi_ema = ema(rsi(close, length), length) emaA = ema(rsi_ema, fastLength) emaFast = 2 * emaA - ema(emaA, fastLength) emaB = ema(rsi_ema, slowLength) emaSlow = 2 * emaB - ema(emaB, slowLength) bullishRule =emaFast > emaSlow and rsi_ema >=rsi_ema[1] bearishRule =emaFast < emaSlow and rsi_ema <= rsi_ema[1] // Price Channel lasthigh = highest(high_source, lkbk) lastlow = lowest(low_source, lkbk) // Fibonacci and Moving Average MA1 = sma(close,5),HA1 = sma(high,5),LA1 = sma(low,5), MA2 = sma(close,8),HA2 = sma(high,8),LA2 = sma(low,8), MA3 = sma(close,13),HA3 = sma(high,13),LA3 = sma(low,13), MA4 = sma(close,21),HA4 = sma(high,21),LA4 = sma(low,21), MA5 = sma(close,34),HA5 = sma(high,34),LA5 = sma(low,34), MA6 = sma(close,55),HA6 = sma(high,55),LA6 = sma(low,55), MA7 = sma(close,89),HA7 = sma(high,89),LA7 = sma(low,89), CMA = (MA1+MA2+MA3+MA4+MA5+MA6+MA7)/7, HMA = (HA1+HA2+HA3+HA4+HA5+HA6+HA7)/7, HMA2 = CMA + (atr(lkbk)*1.618) LMA = (LA1+LA2+LA3+LA4+LA5+LA6+LA7)/7, LMA2 = CMA - (atr(lkbk)*1.618) plot(CMA, title="CMA", color=color.new(#00ffaa, 70), linewidth=2) plot(HMA, title="HMA", color=color.maroon, linewidth=2) plot(HMA2, title="HMA Fib", color=color.red, linewidth=3) plot(LMA, title="LMA", color=color.green, linewidth=2) plot(LMA2, title="LMA Fib", color=color.teal, linewidth=3) // -------------------------------- Entry and Exit Logic ------------------------------------ // Entry Logic Channel_Sell = close >= lasthigh[1] and bearishRule and window() Channel_Buy = close <= lastlow[1] and bullishRule and window() MA_Sell = high>HMA and window() MA_Buy = low<LMA and window() Fib_Sell = high>HMA2 and window() Fib_Buy = low<LMA2 and window() qty = strategy.equity/close // Strategy Entry and Exit with built in Risk Management if(strategy.opentrades==0 and strat_val>-1) GoLong = usePrice ? Channel_Buy : useMA ? MA_Buy : useFib ? Fib_Buy : false if (GoLong) strategy.entry("LONG", strategy.long, qty) if(strategy.opentrades==0 and strat_val<1) GoShort = usePrice ? Channel_Sell : useMA ? MA_Sell : useFib ? Fib_Sell : false if (GoShort) strategy.entry("SHORT", strategy.short, qty) longStopPrice = strategy.position_avg_price * (1 - stoploss) longTakePrice = strategy.position_avg_price * (1 + TargetProfit) shortStopPrice = strategy.position_avg_price * (1 + stoploss) shortTakePrice = strategy.position_avg_price * (1 - TargetProfit) if (strategy.position_size > 0) strategy.exit(id="Exit Long", from_entry = "LONG", stop = longStopPrice, limit = longTakePrice) if (strategy.position_size < 0) strategy.exit(id="Exit Short", from_entry = "SHORT", stop = shortStopPrice, limit = shortTakePrice) CloseShort= usePrice ? Channel_Buy : useMA ? MA_Buy : useFib ? Fib_Buy : false CloseLong = usePrice ? Channel_Sell : useMA ? MA_Sell : useFib ? Fib_Sell : false if(CloseLong and strategy.position_size > 0) strategy.close("LONG") if(CloseShort and strategy.position_size < 0) strategy.close("SHORT")