Strategie für einen brechenden gleitenden Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2023-09-26 16:18:37
Tags:

Übersicht

Die gleitende Durchschnittsbreakout-Strategie ist eine kurzfristige Handelsstrategie, die gleitende Durchschnitte zur Bestimmung von Ein- und Ausstiegen verwendet.

Strategie Logik

Die Kernlogik setzt auf zwei gleitende Durchschnitte, eine schnelle Linie und eine langsame Linie, um den Kurstrend zu messen. Die schnelle Linie hat einen kürzeren Zeitraum und ist empfindlicher. Die langsame Linie hat einen längeren Zeitraum und ist stabiler.

Der Code ermöglicht es den Nutzern, die Schnellzeiteinheit shortPeriod und die langsame Zeiteinheit longPeriod über Eingabeparameter festzulegen.

Wenn der schnelle gleitende Durchschnitt über den langsamen gleitenden Durchschnitt kreuzt, signalisiert er einen Aufbruch und einen langen Einstieg.

Lange Einstiegsbedingungen:

Fast MA crosses above slow MA
Fast MA > Slow MA

Kurze Eintrittsbedingung:

Fast MA crosses below slow MA
Fast MA < Slow MA 

Die Strategie beinhaltet auch Stop-Loss-, Take-Profit- und Positionsgrößen-Einstellungen zur Risikokontrolle.

Vorteile

  • Einfach zu bedienen, leicht für Anfänger zu verstehen
  • Bewegliche Durchschnitte filtern Geräusche aus
  • Flexibilität bei der Feinabstimmung von MA-Perioden für verschiedene Zeitrahmen
  • Vordefinierte Stop-Loss und Take-Profit

Risiken

  • Anfällig für falsche Ausbrüche und Whipsaws
  • Nicht ideal für marktübergreifende Marktveränderungen
  • Verzögerungsangaben, Einsendungen könnten verspätet sein
  • Unfähigkeit, Trendumkehrungen effektiv zu filtern

Risikomanagement:

  • Fügen Sie Filter hinzu, um falsche Signale zu vermeiden
  • Strategie anwenden, wenn der Trend offensichtlich ist
  • Optimieren der MA-Parameter für bessere Einträge
  • Erlaubt breitere Haltestellen, um vorzeitige Haltestellen zu vermeiden

Möglichkeiten zur Verbesserung

  • Optimieren der MA-Parameter, um die besten Kombinationen zu finden
  • Hinzufügen zusätzlicher Indikatoren wie BOLL-Kanäle oder KD
  • Verbesserte Ausstiegsregeln zur Gewinnmaximierung
  • Prüfung der Robustheit auf verschiedenen Instrumenten
  • Einbeziehung von maschinellem Lernen mit Hilfe von Big Data

Schlussfolgerung

Die Breakout-Strategie des gleitenden Durchschnitts ist leicht zu verstehen und erzeugt Signale mit schnellen und langsamen MAs. Aber sie hat auch einige Mängel wie falsche Breaks und Verzögerungsprobleme. Mit Parameter-Tuning, zusätzlichen Filtern und anderen Verbesserungen kann die Strategie verbessert werden. Insgesamt dient sie als anfängerfreundlicher erster Schritt in den algorithmischen Handel und ebnet den Weg für fortschrittlichere Strategien, nachdem die Kernkonzepte erfasst wurden.


/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © YohanNaftali

//@version=5

///////////////////////////////////////////////////////////////////////////////
// Heikin Ashi Candle Startegy
// ver 2021.12.29
// © YohanNaftali
// This script composed by Yohan Naftali for educational purpose only 
// Reader who will use this signal must do own research
///////////////////////////////////////////////////////////////////////////////
strategy(
     title = 'Heikin Ashi Candle Startegy Long',  
     shorttitle = 'HA Strategy Long',  
     format = format.price,
     precision = 0,
     overlay = true)

// Input
validationPeriod = input.int( 
     defval = 3, 
     title = 'Validation Period', 
     group = 'Candle')

qtyOrder = input.float(
     defval = 1.0,
     title = 'Qty', 
     group = 'Order')

maxActive = input.float(
     defval = 1.0,
     title = 'Maximum Active Open Position', 
     group = 'Order')

// Long Strategy
tpLong = input.float(
     defval = 1,
     title = "Take Profit (%)",
     minval = 0.0, 
     step = 0.1, 
     group = "Long") * 0.01

slLong = input.float(
     defval = 25,
     title = "Stop Loss (%)", 
     minval=0.0, 
     step=0.1,
     group="Long") * 0.01

trailingStopLong = input.float(
     defval = 0.2,
     title = "Trailing Stop (%)",
     minval = 0.0, 
     step = 0.1,
     group = 'Long') * 0.01

// Calculation
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
haOpen = request.security(haTicker, timeframe.period, open)

// Long
limitLong = tpLong > 0.0 ? strategy.position_avg_price * (1 + tpLong) : na
stopLong = slLong > 0.0 ? strategy.position_avg_price * (1 - slLong) : na
float trailLong = 0.0
trailLong := if strategy.position_size > 0
    trailClose = close * (1 - trailLong)
    math.max(trailClose, trailLong[1])
else
    0

isGreen = true
for i = 0 to validationPeriod-1
    isGreen := isGreen and haClose[i] > haOpen[i]        
isLong = isGreen and haClose[validationPeriod] < haOpen[validationPeriod]



plot(
     limitLong,
     title = 'Limit', 
     color = color.rgb(0, 0, 255, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     trailLong,
     title = 'Trailing', 
     color = color.rgb(255, 255, 0, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     stopLong,
     title = 'Stop', 
     style = plot.style_stepline,
     color = color.rgb(255, 0, 0, 0), 
     linewidth = 1)

// plotshape(
//      isLong, 
//      title = 'Entry', 
//      style = shape.arrowup, 
//      location = location.belowbar, 
//      offset = 1, 
//      color = color.new(color.green, 0), 
//      text = 'Long Entry',
//      size = size.small)

// Strategy
strategy.risk.max_position_size(maxActive)
strategy.risk.allow_entry_in(strategy.direction.long)

strategy.entry(
     id = "Long", 
     direction = strategy.long, 
     qty = qtyOrder,  
     when = isLong,       
     alert_message = "LN")
if (strategy.position_size > 0)
    strategy.exit(
         id = "Long Exit",
         from_entry = "Long",
         limit = limitLong,
         stop = stopLong,
         trail_price = trailLong,
         alert_message = "LX")      

Mehr