Dies ist eine 3-minütige Expert Advisor-Strategie für E-mini S&P500-Futures (ES). Sie erzeugt Handelssignale durch Berechnung einer Reihe von exponentiellen gleitenden Durchschnitten und Kombination spezifischer Musterbedingungen.
Der Kernindikator dieser Strategie ist die T3-Durchschnittslinie. Die T3 berechnet zunächst eine Reihe von exponentiellen gleitenden Durchschnitten xe1 ~ x6 auf der Grundlage des vom Benutzer definierten T3-Parameters. Dann berechnet sie den gewichteten Durchschnitt dieser EMAs mit bestimmten Koeffizienten als endgültige T3-Durchschnittslinie.
Wenn der Schlusskurs unterhalb der T3-Durchschnittslinie liegt, wird ein Kaufsignal generiert. Wenn der Schlusskurs über der T3-Durchschnittslinie liegt, wird ein Verkaufssignal generiert. Darüber hinaus beurteilt die Strategie auch spezifische Kerzenmuster als ergänzende Einstiegsbedingungen. Handelsaufträge werden nur gesendet, wenn sowohl Musterbedingungen als auch T3-Signale gleichzeitig auftauchen.
Die größte Stärke dieser Strategie liegt in der Multi-Filter-Konstruktion und Parameteroptimierung. Auf der einen Seite kann die Kombination von Preis-Aktion und Chart-Musterfiltern den Lärm der Trades reduzieren. Auf der anderen Seite können wichtige Parameter wie T3 und Musterbeurteilungsregeln optimiert werden, um sich an verschiedene Märkte anzupassen und die Einstiegsgenauigkeit zu verbessern.
Im Vergleich zu einfachen gleitenden Durchschnitten ist der dreifache Glättungsmechanismus des T3-Indikators wirksam, um Marktlärm zu filtern und Trendumkehrpunkte zu identifizieren.
Die wichtigsten Risiken dieser Strategie stammen aus unangemessener Parameter-Tuning und übergroßer Haltedauer. Wenn der T3-Parameter zu groß eingestellt wird, werden die Indikatoren hinter dem Markt zurückbleiben; wenn er zu klein eingestellt wird, erhöht er die Wahrscheinlichkeit von Lärmtrades. Darüber hinaus können 3-Min-Operationen ohne rechtzeitigen Stop-Loss großen Verlust erleiden.
Um Risiken zu kontrollieren, ist es zunächst erforderlich, wiederholt zu testen, um den optimalen Parameterbereich für verschiedene Produkte zu bestimmen. Zweitens sollte eine strikte Stop-Loss-Strategie ausgeführt werden, um Positionen mit einem akzeptablen Verlustprozentsatz pro Handel zu verlassen.
Es gibt mehrere Richtungen zur Verbesserung der Strategie:
Optimieren des T3-Parameters, um die optimale Bandbreite für verschiedene Handelsinstrumente zu finden
Verbesserung der Musterbeurteilungslogik zur Steigerung der Genauigkeit der Mustererkennung
Hinzufügen von fortgeschritteneren Stop-Loss-Mechanismen wie Trailing Stop-Loss
Hinzufügen eines Geldmanagement-Moduls basierend auf Gewinnfaktor oder maximaler Auslastung
Hinzufügen eines Moduls für die unterstützte Eingabe mit maschinellem Lernen
Durch diese Verbesserungen können die Stabilität und Rentabilität der Strategie schrittweise verbessert werden.
Als kurzfristige Intraday-Handelsstrategie hat diese Strategie Vorteile wie riesigen Optimierungsraum, mehrere Filter und schnelle Auftragsausführung.
/*backtest start: 2023-11-16 00:00:00 end: 2023-11-23 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("ES 3m Short Only (Triple RED)", overlay=true) // Alert Message '{{strategy.order.alert_message}}' //3min T3 = input(150)//to 600 xPrice3 = close xe1 = ta.ema(xPrice3, T3) xe2 = ta.ema(xe1, T3) xe3 = ta.ema(xe2, T3) xe4 = ta.ema(xe3, T3) xe5 = ta.ema(xe4, T3) xe6 = ta.ema(xe5, T3) b3 = 0.7 c1 = -b3*b3*b3 c2 = 3*b3*b3+3*b3*b3*b3 c3 = -6*b3*b3-3*b3-3*b3*b3*b3 c4 = 1+3*b3+b3*b3*b3+3*b3*b3 nT3Average = c1 * xe6 + c2 * xe5 + c3 * xe4 + c4 * xe3 // Buy Signal - Price is below T3 Average buySignal3 = xPrice3 < nT3Average sellSignal3 = xPrice3 > nT3Average //NinjaTrader Settings. acct = "Sim101" ticker = "ES 12-23" qty = 1 takeProfitTicks = 4 stopLossTicks = 16 tickSize = 0.25 takeProfitShort = close - takeProfitTicks * tickSize stopLossShort = close + stopLossTicks * tickSize OCOMarketShort = '{ "alert": "OCO Market Short", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '", "qty": "' + str.tostring(qty) + '", "take_profit_price": "' + str.tostring(takeProfitShort) + '", "stop_price": "' + str.tostring(stopLossShort) + '", "tif": "DAY" }' CloseAll = '{ "alert": "Close All", "account": "' + str.tostring(acct) + '", "ticker": "' + str.tostring(ticker) + '" }' IsUp = close > open IsDown = close < open PatternPlot = IsDown[2] and IsDown[1] and IsDown and close[1] <= high[0] and close[1] > close[0] and low[1] > low[0] and high[2] > high[1] and low[2] <= low[1] if (PatternPlot and sellSignal3) strategy.entry('Short', strategy.short, alert_message=OCOMarketShort) strategy.exit('Close Short', 'Short', profit=takeProfitTicks, loss=stopLossTicks, alert_message=CloseAll) //plotshape(PatternPlot, title="Custom Pattern", style=shape.circle, location=location.abovebar, color=color.red, size=size.small)