Diese Strategie verwendet gleitende Durchschnittskreuzungen und den ATR-Indikator, um nach dem Handel einen automatisierten Trend zu implementieren. Es geht lang, wenn die schnelle EMA über die langsame EMA überschreitet, und wird kurz, wenn die schnelle EMA unter die langsame EMA überschreitet. Gleichzeitig verwendet es den ATR-Indikator, um die Trendrichtung zu beurteilen, und sendet nur Handelssignale, wenn der ATR anzeigt, dass ein Trend vorhanden ist.
Die Strategie beruht hauptsächlich auf zwei technischen Indikatoren:
EMA-Linien: Es verwendet zwei EMA-Linien mit unterschiedlichen Parametern, schnell und langsam. Wenn die schnelle EMA über die langsame EMA überschreitet, gilt sie als langes Signal. Wenn die schnelle EMA unter die langsame EMA überschreitet, gilt sie als kurzes Signal.
ATR-Indikator: Der ATR-Indikator misst die Größe und Kraft der Kursschwankungen, um die Trendlichkeit der aktuellen Bewegung zu beurteilen.
Durch die Kombination von EMA-Kreuzungen zur Ermittlung von Handelschancen und dem ATR-Filter zur Vermeidung von Trendschwächen soll die Strategie verhindern, dass man während des Marktschwankens in Schwierigkeiten gerät.
Zu den Vorteilen dieser Strategie gehören:
Nur wenn der ATR einen Trend identifiziert, der hilft, sich bei nicht-direktionalem Regime nicht zu verwirren.
Einfache EMA-Crossover-Logik zur Identifizierung von Handelssignalen.
Anpassbare EMA-Empfindlichkeit und -Glattheit durch Parameteranpassungen.
Komplettes automatisiertes Handelssystem mit nur zwei einfachen Indikatoren, einfach in Pine Editor implementiert.
Minimaler Bedarf an fortlaufenden Parameteranpassungen,
Zu den zu berücksichtigenden Risiken gehören:
EMA-Crossovers können falsche Signale erzeugen, was zu unnötigen Verlusten führt.
Die ATR-Trendbeurteilung kann auch anfällig für Fehler sein und Handelsmöglichkeiten verpassen.
Es wird nicht berücksichtigt, ob die Grundlagen für einen höheren Zeitrahmen liegen, da wichtige Nachrichten Ereignisse Umkehrungen auslösen können, die bei schnellen EMA-Kreuzungen möglicherweise verfehlt werden und manuelle Eingriffe erfordern.
Diese Risiken können durch Optimierungen verringert werden.
Zu den wichtigsten Optimierungsrichtungen gehören:
Hinzufügen anderer Indikatoren zur Schaffung eines kombinierten Systems und Verbesserung der Signalgenauigkeit.
Auswahl der EMA- und ATR-Parameter, die am besten für den jeweiligen Markt geeignet sind, basierend auf dem Symbol und dem gehandelten Zeitrahmen.
Implementierung dynamischer Parameteroptimierung durch maschinelles Lernen zur Anpassung von Indikatoren anhand der aktuellen Marktbedingungen anstelle von festen statischen Werten.
Das ist eine sehr praktische Trend-Folge-Strategie. Mit nur einer einfachen Kombination von zwei Indikatoren baut es ein relativ vollständiges Handelssystem auf. Durch Parameteranpassungen kann es an Trader mit unterschiedlichen Vorlieben und Stilen angepasst werden. Gleichzeitig können weitere Erweiterungen und Optimierungen die Strategieleistung noch verbessern. Die einfache, aber effektive Handelslogik in Verbindung mit einem starken Optimierungspotenzial macht dies zu einer lohnenden quantitativen Strategie, die langfristig recherchiert und angewendet werden kann.
/*backtest start: 2022-12-05 00:00:00 end: 2023-12-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This strategy has been created for GMT trade 4h by Zhukov //@version=5 strategy('ZhukovTrade', overlay=true, calc_on_every_tick=true, currency=currency.USD) // INPUT: // Options to enter fast and slow Exponential Moving Average (EMA) values emaFast = input.int(title='Fast EMA', defval=100, minval=1, maxval=9999) emaSlow = input.int(title='Slow EMA', defval=200, minval=1, maxval=9999) // Option to select trade directions tradeDirection = input.string(title='Trade Direction', options=['Long', 'Short', 'Both'], defval='Both') // Options that configure the backtest date range startDate = input(title='Start Date', defval=timestamp('01 Jan 2023 00:00')) endDate = input(title='End Date', defval=timestamp('31 Dec 2023 23:59')) // CALCULATIONS: // Use the built-in function to calculate two EMA lines fastEMA = ta.ema(close, emaFast) slowEMA = ta.ema(close, emaSlow) emapos = ta.ema(close,200) // PLOT: // Draw the EMA lines on the chart plot(series=fastEMA, color=color.new(color.orange, 0), linewidth=2) plot(series=slowEMA, color=color.new(color.blue, 0), linewidth=2) plot(series=emapos, color=color.new(color.red, 0), linewidth=2) // CONDITIONS: // Check if the close time of the current bar falls inside the date range inDateRange = true // Translate input into trading conditions longOK = tradeDirection == 'Long' or tradeDirection == 'Both' shortOK = tradeDirection == 'Short' or tradeDirection == 'Both' // Decide if we should go long or short using the built-in functions longCondition = ta.crossover(fastEMA, slowEMA) shortCondition = ta.crossunder(fastEMA, slowEMA) // ORDERS: // Set take profit and stop loss percentages take_profit_percent = input(0, title="Take Profit Percent") stop_loss_percent = input(0, title="Stop Loss Percent") // Submit entry (or reverse) orders atrPeriod = input(12, "ATR Length") factor = input.float(3.0, "Factor", step = 0.01) [supertrend, direction] = ta.supertrend(factor, atrPeriod) bodyMiddle = plot((open + close) / 2, display=display.none) upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr) downTrend = plot(direction < 0? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr) fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false) fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false) if longCondition and inDateRange if longOK and direction<0 strategy.entry(id='long', direction=strategy.long, alert_message = "LONG") if shortCondition and inDateRange if shortOK and direction>0 strategy.entry(id='short', direction=strategy.short, alert_message = "SHORT") // Submit exit orders in the cases where we trade only long or only short if strategy.position_size > 0 and take_profit_percent strategy.exit(id='tp long',from_entry ="long",profit = take_profit_percent) if strategy.position_size > 0 and stop_loss_percent strategy.exit(id='sl long',from_entry="long",loss=stop_loss_percent) if strategy.position_size < 0 and stop_loss_percent strategy.exit(id='sl short',from_entry="short",loss=stop_loss_percent) if strategy.position_size < 0 and take_profit_percent strategy.exit(id='tp short',from_entry="short",profit = take_profit_percent)