यह रणनीति गतिशील आंदोलन सूचकांक (डीएमआई) के आधार पर एक लंबी-केवल प्रवृत्ति के बाद की रणनीति को डिजाइन करती है, जिसमें डाउनसाइड जोखिमों को नियंत्रित करने के लिए एक औसत सच्ची सीमा (एटीआर) स्टॉप लॉस का अनुसरण करती है। इसमें आगे के अनुकूलन और बढ़त के लिए ट्रेडिंग घंटे और एस एंड पी 500 मौसमी फिल्टर भी शामिल हैं।
रणनीति केवल निर्दिष्ट व्यापारिक दिनों (मंगल-शुक्र) और व्यापारिक घंटों (पूर्वनिर्धारित 9:30am - 8:30pm स्थानीय समय) पर ट्रेडों में प्रवेश करती है।
जब ADX 27 से ऊपर होता है, तो यह संकेत देता है कि बाजार एक प्रवृत्ति में है। यदि +DI -DI से ऊपर पार करता है, तो एक लंबा संकेत उत्पन्न होता है।
स्थिति खोलने के बाद, स्टॉप लॉस को प्रवेश मूल्य से 5.5 गुना एटीआर पर सेट किया जाता है, और यह मुनाफे में लॉक करने के लिए कीमत बढ़ने के साथ ऊपर की ओर बढ़ता है।
वैकल्पिक रूप से, एस एंड पी 500 मौसमी पैटर्न सक्षम हैं, ताकि ट्रेड केवल ऐतिहासिक रूप से तेजी के समय के दौरान ही हों।
ट्रेंड मेट्रिक्स और स्टॉप लॉस को जोड़ने से ट्रेडों पर प्रभावी ढंग से ट्रेंड्स पर सवारी करने और नुकसान को नियंत्रित करने में मदद मिलती है।
व्यापार के घंटे और मौसमीता फिल्टर असामान्य अस्थिरता से बचने और झूठे संकेतों को कम करने में मदद करते हैं।
डीएमआई और एटीआर परिपक्व तकनीकी संकेतक हैं जिनमें क्वांट अनुकूलन के लिए उपयुक्त पैरामीटर ट्यूनिंग में लचीलापन है।
अनुचित डीएमआई और एटीआर मापदंडों से बहुत अधिक या बहुत कम संकेत हो सकते हैं। पैरामीटर ट्यूनिंग की आवश्यकता होती है।
स्टॉप लॉस को बहुत चौड़ा सेट करने से अनावश्यक स्टॉप हो सकते हैं। बहुत तंग सेट करने से नुकसान को नियंत्रित करने में विफलता हो सकती है।
व्यापार के समय और मौसमी नियम कुछ लाभदायक अवसरों को फ़िल्टर कर सकते हैं। फ़िल्टर प्रभाव का मूल्यांकन करने की आवश्यकता है।
प्रवेश और निकास नियमों के लिए एमएसीडी, बोलिंगर बैंड जैसे अन्य संकेतकों को जोड़ने पर विचार करें।
स्टॉप लॉस या स्टॉप लॉस स्केल के गतिशील समायोजन के लिए विभिन्न एटीआर गुणकों का परीक्षण करें।
व्यापारिक घंटों को समायोजित करने का परीक्षण करें, या मौसमी प्रवेश और निकास तिथियों का अनुकूलन करें।
ऑटो-ट्यून मापदंडों के लिए मशीन सीखने के तरीकों को लागू करने की कोशिश करो।
यह रणनीति ट्रेंड सिस्टम के साथ उच्च अस्थिरता के मुद्दों को दूर करने के लिए प्रवृत्ति के बाद और जोखिम नियंत्रण तकनीकों को एकीकृत करती है। ट्रेडिंग घंटे और मौसमी फ़िल्टर जोड़ने से झूठे संकेत और कम हो जाते हैं। पैरामीटर ट्यूनिंग और सुविधा विस्तार के साथ, यह रणनीति अधिक स्थिर लाभ प्राप्त कर सकती है।
/*backtest start: 2024-01-27 00:00:00 end: 2024-02-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="DMI Strategy with ADX and ATR-based Trailing SL (Long Only) and Seasonality", shorttitle="MBV-SP500-CLIMBER", overlay=true) // Eingabeparameter für Long-Positionen len = input.int(14, minval=1, title="DI Length") lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50) adxLongThreshold = input.float(27.0, title="ADX Threshold for Long", minval=0) atrLength = input.int(14, title="ATR Length") atrLongMultiplier = input.float(5.5, title="ATR Multiplier for Trailing SL (Long)") startTimeHH = input.int(09, title="startTime hh") startTimeMM = input.int(30, title="startTime mm") endTimeHH = input.int(20, title="endTime hh") endTimeMM = input.int(30, title="endTime mm") // Zeitzone des Nutzers als Eingabeparameter timezoneOffset = input.int(1, title="Timezone Offset (Hours from UTC)", minval=-12, maxval=14) // Zusätzliche Einstellung für SP500-Saisonalität enableSeasonality = input.bool(false, title="Enable SP500 Seasonality") seasonColor = color.new(color.blue, 90) activeTimeColor = color.new(color.yellow, 90) // Farbe für aktive Handelszeiten // Handelstage und -zeiten tradeMonday = input.bool(true, title="Trade on Monday") tradeTuesday = input.bool(true, title="Trade on Tuesday") tradeWednesday = input.bool(true, title="Trade on Wednesday") tradeThursday = input.bool(true, title="Trade on Thursday") tradeFriday = input.bool(true, title="Trade on Friday") // Konvertierung der Uhrzeit in Unix-Zeitstempel getUnixTime(hour, minute) => adjustedHour = hour - timezoneOffset sessionDate = timestamp(year, month, dayofmonth, 0, 0) sessionDate + adjustedHour * 60 * 60000 + minute * 60000 // Start- und Endzeit als Unix-Zeitstempel // + 1 Stunde wegen UTC startTime = getUnixTime(startTimeHH, startTimeMM) endTime = getUnixTime(endTimeHH, endTimeMM) // Überprüfen, ob der aktuelle Zeitpunkt innerhalb der Handelszeit liegt isTradingTime() => true // Saisonale Zeiträume definieren isSeason(time) => m = month(time) d = dayofmonth(time) (m == 1 and d >= 1) or (m == 2 and d <= 15) or (m == 3 and d >= 23) or (m == 4 and d <= 17) or (m == 5 and d >= 12) or (m == 6 and d >= 27 and d <= 8) or (m == 7 and d <= 29) or (m == 10 and d >= 15) or (m == 11 and d >= 1) or (m == 12 and d <= 2) or (m == 12 and d >= 20 and d <= 27) // Hintergrundfarbe für saisonale Bereiche und aktive Handelszeiten bgcolor(enableSeasonality and isSeason(time) ? seasonColor : na) bgcolor(isTradingTime() ? color.new(activeTimeColor, 90) : na) // Berechnung von +DM, -DM, ATR up = ta.change(high) down = -ta.change(low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) trur = ta.rma(ta.tr, len) atr = ta.atr(atrLength) // Berechnung von +DI, -DI und ADX plus = fixnan(100 * ta.rma(plusDM, len) / trur) minus = fixnan(100 * ta.rma(minusDM, len) / trur) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), lensig) // Logik für LONG Signale unter Berücksichtigung der Saisonalität und Zeitfilter longSignal = ta.crossover(adx, adxLongThreshold) and plus > minus and isTradingTime() longSignal := longSignal and (not enableSeasonality or (enableSeasonality and isSeason(time))) // Variable für Trailing Stop-Loss var float longTrailingSL = na // Variablen für die Eröffnungszeit und den Eröffnungspreis der Position var int openBarIndex = na var float openPrice = na // Handelslogik für Long-Positionen // ohne strategy.position_size == 0 gilt die Kondition für ALLE Signale und nicht nur für das erste if (longSignal and strategy.position_size == 0) strategy.entry("Long", strategy.long) openBarIndex := bar_index openPrice := close longTrailingSL := close - atr * atrLongMultiplier //if (longSignal) //longTrailingSL := close - atr * atrLongMultiplier // Aktualisierung des Trailing Stop-Loss if strategy.position_size > 0 longTrailingSL := math.max(longTrailingSL, close - atr * atrLongMultiplier) // Ausstieg aus Long-Positionen strategy.exit("Close Long", "Long", stop=longTrailingSL) // Anzeige des ATR-basierten Trailing Stops für Long-Positionen //plot(strategy.position_size > 0 ? longTrailingSL : na, color=color.red, title="ATR Trailing Stop Long") // Anzeige des ATR-basierten Trailing Stops für Long-Positionen plot(strategy.position_size > 0 ? longTrailingSL : na, color=color.new(color.red, 75), style=plot.style_circles, linewidth=1, title="Trailing Stop-Loss") // Wenn eine Position geschlossen wird, zeichnen Sie die Linie // if strategy.position_size[1] > 0 and strategy.position_size == 0 // lineColor = longTrailingSL > openPrice ? color.new(color.green, 50) : color.new(color.red, 50) // Hellgrün für Gewinne, Hellrot für Verluste // line.new(openBarIndex, openPrice, bar_index, longTrailingSL, width=3, color=lineColor)