Diese Strategie verwendet den von Larry Williams in seinem Buch
Die Kernlogik dieser Strategie besteht darin, 3-Perioden- gleitende Durchschnitte der Hoch- und Tiefpreise zu berechnen. Insbesondere verwendet sie die Ta.ema-Funktion, um exponentielle gleitende Durchschnitte der Hoch- und Tiefpreise über die letzten 3 Balken zu berechnen, um dynamische Unterstützungs- und Widerstandsniveaus zu generieren. Wenn der Preis unter die Tiefpunkte der EMA bricht, zeigt dies einen Abwärtstrend an, so dass wir lang gehen können. Wenn der Preis wieder über die Höchstpunkte der EMA steigt, deutet dies darauf hin, dass der Aufwärtstrend beendet ist und wir unsere Position schließen sollten. Auf diese Weise kann die Strategie dynamisch Preisänderungen verfolgen und einen Kauf niedrig und einen Verkauf hoch erreichen.
Der größte Vorteil dieser Strategie ist ihre Einfachheit und Dynamik. Verglichen mit der Festzeit-Hochs/Tiefs- gleitenden Durchschnitte verwendet diese Strategie kontinuierliche kurzfristige gleitende Durchschnitte, die Preisschwankungen sensibler und zeitnaher erfassen können. Dies ermöglicht es, schnell Handelsmöglichkeiten zu identifizieren, um den Markt zu betreten und zu verlassen. Außerdem ist eine geringe Rechenlast ein weiterer Vorteil für die Verringerung der Handelslatenz.
Das Hauptrisiko dieser Strategie besteht darin, dass sie langsamer auf plötzliche Ereignisse wie wichtige Nachrichten reagiert. Da ihre gleitende Durchschnittsperiode sehr kurz ist, dauert es einige Zeit, um die gleitenden Durchschnittsniveaus anzupassen, wenn es einen starken Kursanstieg gibt. Dies kann zu Verlusten oder verpassten Möglichkeiten führen. Auch kann Überempfindlichkeit zu falschen Trades führen. Um diese Risiken zu mindern, können wir die gleitende Durchschnittsperiode angemessen erhöhen oder Filter hinzufügen, um falsche Signale zu vermeiden.
Es gibt immer noch viel Raum für die Optimierung dieser Strategie. Erstens können Oszillatoren integriert werden, um die Signale zu filtern. Zweitens könnte Stop-Loss-Logik hinzugefügt werden, um Risiken zu kontrollieren. Außerdem können wir die gleitenden Durchschnittsparameter dynamisch anhand von Marktzuständen anpassen, indem wir längere Perioden in Trends und kürzere Perioden in unterschiedlichen Märkten verwenden. Zusätzlich können Multi-Timeframe-Analyse, Mustererkennung mit maschinellem Lernen usw. helfen, die Strategieleistung zu verbessern.
Zusammenfassend ist dies eine sehr einfache und praktische Strategie, die Trends mithilfe von kurzfristigen Hoch/niedrigen gleitenden Durchschnitten identifiziert. Seine Vorteile sind starke Dynamik, geringe Rechenleistung und hohe Reaktionsfähigkeit, geeignet für den aktiven Handel. Aber es hat auch Mängel bei der Reaktion auf extreme Ereignisse und ein höheres Risiko für falsche Signale. Es gibt Richtungen, um diese Probleme durch Parameter-Tuning, das Hinzufügen von Filtern und Mustererkennungstechniken zu lösen, um die Wirksamkeit der Strategie weiter zu erhöhen.
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy( "Larry Williams 3 Period EMAs strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD ) // Time range for backtesting startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31) startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12) startYear = input.int(title="Start Year", defval=2018, minval=1800, maxval=2100) endDate = input.int(title="End Date", defval=31, minval=1, maxval=31) endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12) endYear = input.int(title="End Year", defval=2041, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // EMA period = 3 emaH = ta.ema(high, period) emaL = ta.ema(low, period) // PLOT: // Draw the EMA lines on the chart plot(series=emaH, color=color.green, linewidth=2) plot(series=emaL, color=color.red, linewidth=2) // Conditions if(inDateRange and close < emaL) strategy.entry("Long", strategy.long, comment="Long") if(close > emaH) strategy.close("Long", comment="Close Long") // Uncomment to enable short entries //if(inDateRange and close > emaH) // strategy.entry("Short", strategy.short, comment="Short") //if(close < emaL) // strategy.close("Short", comment="Close Short")