इस रणनीति का मुख्य विचार अल्पकालिक गिरावट समाप्त होने के बाद नियमित रूप से निम्न औसत कीमतों को ट्रैक करना है। विशेष रूप से, रणनीति प्रत्येक महीने के अंत में अल्पकालिक गिरावट के अंत की पहचान करेगी, ताकि नियमित रूप से पदों को जोड़ा जा सके; साथ ही, अंतिम के लाइन बंद होने पर पदों को साफ किया जा सके।
नियमित ट्रैकिंग सिग्नल निर्णयः 24*30 के-लाइन (एक महीने का प्रतिनिधित्व करने वाले) के बाद यह निर्धारित किया जाता है कि नियमित ट्रैकिंग बिंदु तक पहुंच गया है और पहला सिग्नल आउटपुट है।
अल्पकालिक गिरावट के अंत का निर्णयः प्रवृत्ति निर्धारित करने के लिए एमएसीडी संकेतक का उपयोग करें। जब एमएसीडी विचलन होता है और एमएसीडी संकेत रेखा से नीचे जाता है, तो यह निर्धारित किया जाता है कि अल्पकालिक गिरावट समाप्त हो गई है।
प्रवेश नियम: जब नियमित ट्रैकिंग सिग्नल और अल्पकालिक गिरावट सिग्नल का अंत एक ही समय में ट्रिगर किया जाता है, तो एक ट्रैकिंग सिग्नल जारी किया जाता है और लंबी स्थिति खोली जाती है।
बाहर निकलने के नियमः जब अंतिम K-लाइन बंद हो जाती है, तो सभी पदों को खाली करें।
उपरोक्त रणनीति के बुनियादी व्यापार प्रवाह और सिद्धांत हैं। यह ध्यान देने योग्य है कि रणनीति डिफ़ॉल्ट रूप से ट्रैकिंग के लिए हैप्रतिमाह 1000 बैकटेस्ट, जो 33 महीनों तक बढ़ाया जाएगा, यानी कुल निवेश33,000.
इस रणनीति का सबसे बड़ा लाभ यह है कि यह नियमित रूप से कम स्तरों पर पदों का निर्माण कर सकती है। दीर्घकालिक दृष्टिकोण से, यह उच्च रिटर्न उत्पन्न करने के लिए अपेक्षाकृत सस्ती औसत लागत मूल्य प्राप्त कर सकती है। इसके अलावा, अल्पकालिक खरीद बिंदुओं की पहचान करने के लिए एमएसीडी संकेतक का उपयोग करना भी काफी विश्वसनीय और स्पष्ट है, जो कुछ हद तक एक मृत अंत में जाने से बच सकता है, और यह कुछ हद तक नुकसान से भी बच सकता है।
सामान्य तौर पर, यह लागत औसतकरण की रणनीति है जो मध्यम और दीर्घकालिक धारकों के लिए अधिक उपयुक्त है ताकि वे संतोषजनक रिटर्न प्राप्त करने के लिए नियमित रूप से बैच खरीद सकें।
रणनीति का मुख्य जोखिम अल्पकालिक गिरावट के अंत को सटीक रूप से निर्धारित करने में असमर्थता है। गिरावट के अंत के एमएसीडी संकेतक के निर्णय में देरी हो सकती है, जिससे इष्टतम बिंदु पर प्रवेश करने में विफलता होगी। इसके अलावा, धन का बिखरा हुआ निवेश भी परिचालन लागत में वृद्धि करता है।
रुझानों को निर्धारित करने के लिए अधिक संकेतक जोड़ने पर विचार करें, जैसे बोलिंगर बैंड, केडीजे, आदि। ये संकेतक अग्रिम में उलट समय की भविष्यवाणी कर सकते हैं। साथ ही, प्रत्येक महीने निवेश किए गए धन की मात्रा को अनुकूलित किया जा सकता है ताकि रिटर्न पर परिचालन लागतों के प्रभाव को कम किया जा सके।
इस रणनीति को निम्नलिखित दिशाओं में और अधिक अनुकूलित किया जा सकता हैः
अत्यधिक बार-बार व्यापार की समस्या को कम करने के लिए नियमित ट्रैकिंग चक्र को अनुकूलित करें, जैसे कि हर दो महीने में एक बार ट्रैकिंग।
अल्पकालिक गिरावट के अंत को निर्धारित करने के लिए अधिक संकेतकों को शामिल करें, जिससे प्रवेश बिंदु सबसे निचले बिंदु के करीब हो।
इष्टतम विन्यास खोजने के लिए हर महीने निवेशित धनराशि का अनुकूलन करें।
जब कीमतें बहुत नीचे गिरती हैं तो अत्यधिक नुकसान से बचने के लिए स्टॉप लॉस रणनीतियों को शामिल करने का प्रयास करें।
इष्टतम रखरखाव दिनों को खोजने के लिए रिटर्न पर विभिन्न रखरखाव अवधि के प्रभाव का परीक्षण करें।
इस डाउनट्रेंड रणनीति के बाद डॉलर लागत औसतकरण का समग्र विचार स्पष्ट और समझने में आसान है। नियमित रूप से पुनःपूर्ति और अल्पकालिक निर्णय को मिलाकर, यह अधिक सस्ती औसत लागत मूल्य प्राप्त कर सकता है। इस रणनीति की मध्यम और दीर्घकालिक होल्डिंग स्थिर रिटर्न उत्पन्न कर सकती है और दीर्घकालिक निवेश मूल्य का पीछा करने वाले निवेशकों के लिए उपयुक्त है। साथ ही, कुछ दिशाएं हैं जिन्हें रणनीति को और बेहतर बनाने के लिए अनुकूलित किया जा सकता है ताकि इसका प्रदर्शन एक स्तर तक बढ़ सके।
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 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/ // © BHD_Trade_Bot // @version=5 strategy( shorttitle = 'DCA After Downtrend v2', title = 'DCA After Downtrend v2 (by BHD_Trade_Bot)', overlay = true, calc_on_every_tick = false, calc_on_order_fills = false, use_bar_magnifier = false, pyramiding = 1000, initial_capital = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_type = strategy.commission.percent, commission_value = 1.1) // Backtest Time Period start_year = input(title='Start year' ,defval=2017) start_month = input(title='Start month' ,defval=1) start_day = input(title='Start day' ,defval=1) start_time = timestamp(start_year, start_month, start_day, 00, 00) end_year = input(title='end year' ,defval=2050) end_month = input(title='end month' ,defval=1) end_day = input(title='end day' ,defval=1) end_time = timestamp(end_year, end_month, end_day, 23, 59) window() => time >= start_time and time <= end_time ? true : false h1_last_bar = (math.min(end_time, timenow) - time)/1000/60/60 < 2 // EMA ema50 = ta.ema(close, 50) ema200 = ta.ema(close, 200) // EMA_CD emacd = ema50 - ema200 emacd_signal = ta.ema(emacd, 20) hist = emacd - emacd_signal // BHD Unit bhd_unit = ta.rma(high - low, 200) * 2 bhd_upper = ema200 + bhd_unit bhd_upper2 = ema200 + bhd_unit * 2 bhd_upper3 = ema200 + bhd_unit * 3 bhd_upper4 = ema200 + bhd_unit * 4 bhd_upper5 = ema200 + bhd_unit * 5 bhd_lower = ema200 - bhd_unit bhd_lower2 = ema200 - bhd_unit * 2 bhd_lower3 = ema200 - bhd_unit * 3 bhd_lower4 = ema200 - bhd_unit * 4 bhd_lower5 = ema200 - bhd_unit * 5 // Count n candles after x long entries var int nPastCandles = 0 var int entryNumber = 0 if window() nPastCandles := nPastCandles + 1 // ENTRY CONDITIONS // 24 * 30 per month entry_condition1 = nPastCandles > entryNumber * 24 * 30 // End of downtrend entry_condition2 = emacd < 0 and hist < 0 and hist > hist[2] ENTRY_CONDITIONS = entry_condition1 and entry_condition2 if ENTRY_CONDITIONS entryNumber := entryNumber + 1 entryId = 'Long ' + str.tostring(entryNumber) strategy.entry(entryId, strategy.long) // CLOSE CONDITIONS // Last bar CLOSE_CONDITIONS = barstate.islast or h1_last_bar if CLOSE_CONDITIONS strategy.close_all() // Draw colorRange(src) => if src > bhd_upper5 color.rgb(255,0,0) else if src > bhd_upper4 color.rgb(255,150,0) else if src > bhd_upper3 color.rgb(255,200,0) else if src > bhd_upper2 color.rgb(100,255,0) else if src > bhd_upper color.rgb(0,255,100) else if src > ema200 color.rgb(0,255,150) else if src > bhd_lower color.rgb(0,200,255) else if src > bhd_lower2 color.rgb(0,150,255) else if src > bhd_lower3 color.rgb(0,100,255) else if src > bhd_lower4 color.rgb(0,50,255) else color.rgb(0,0,255) bhd_upper_line = plot(bhd_upper, color=color.new(color.teal, 90)) bhd_upper_line2 = plot(bhd_upper2, color=color.new(color.teal, 90)) bhd_upper_line3 = plot(bhd_upper3, color=color.new(color.teal, 90)) bhd_upper_line4 = plot(bhd_upper4, color=color.new(color.teal, 90)) bhd_upper_line5 = plot(bhd_upper5, color=color.new(color.teal, 90)) bhd_lower_line = plot(bhd_lower, color=color.new(color.teal, 90)) bhd_lower_line2 = plot(bhd_lower2, color=color.new(color.teal, 90)) bhd_lower_line3 = plot(bhd_lower3, color=color.new(color.teal, 90)) bhd_lower_line4 = plot(bhd_lower4, color=color.new(color.teal, 90)) bhd_lower_line5 = plot(bhd_lower5, color=color.new(color.teal, 90)) // fill(bhd_upper_line5, bhd_lower_line5, color=color.new(color.teal, 95)) plot(ema50, color=color.orange, linewidth=3) plot(ema200, color=color.teal, linewidth=3) plot(close, color=color.teal, linewidth=1) plot(close, color=colorRange(close), linewidth=3, style=plot.style_circles)