Die gleitende Durchschnittsbreakout-Strategie ist eine kurzfristige Handelsstrategie, die gleitende Durchschnitte zur Bestimmung von Ein- und Ausstiegen verwendet.
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.
Risikomanagement:
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")