Zhukovs Trend des gleitenden Durchschnitts nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-12 12:24:11
Tags:

img

Übersicht

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.

Strategie Logik

Die Strategie beruht hauptsächlich auf zwei technischen Indikatoren:

  1. 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.

  2. 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.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Nur wenn der ATR einen Trend identifiziert, der hilft, sich bei nicht-direktionalem Regime nicht zu verwirren.

  2. Einfache EMA-Crossover-Logik zur Identifizierung von Handelssignalen.

  3. Anpassbare EMA-Empfindlichkeit und -Glattheit durch Parameteranpassungen.

  4. Komplettes automatisiertes Handelssystem mit nur zwei einfachen Indikatoren, einfach in Pine Editor implementiert.

  5. Minimaler Bedarf an fortlaufenden Parameteranpassungen, set and forget Ansatz.

Risikoanalyse

Zu den zu berücksichtigenden Risiken gehören:

  1. EMA-Crossovers können falsche Signale erzeugen, was zu unnötigen Verlusten führt.

  2. Die ATR-Trendbeurteilung kann auch anfällig für Fehler sein und Handelsmöglichkeiten verpassen.

  3. 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.

Optimierungsrichtlinien

Zu den wichtigsten Optimierungsrichtungen gehören:

  1. Hinzufügen anderer Indikatoren zur Schaffung eines kombinierten Systems und Verbesserung der Signalgenauigkeit.

  2. Auswahl der EMA- und ATR-Parameter, die am besten für den jeweiligen Markt geeignet sind, basierend auf dem Symbol und dem gehandelten Zeitrahmen.

  3. Implementierung dynamischer Parameteroptimierung durch maschinelles Lernen zur Anpassung von Indikatoren anhand der aktuellen Marktbedingungen anstelle von festen statischen Werten.

Schlussfolgerung

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)


Mehr