Diese Strategie nutzt das Prinzip des doppelten gleitenden Durchschnitts-Crossovers, beinhaltet den ATR-Indikator für Stop-Loss und Take-Profit und fügt die Handelsstundensteuerung hinzu, um eine für Futures-Kontrakte geeignete Intraday-Handelsstrategie zu entwerfen.
Die Strategie verwendet 5-Perioden- und 20-Perioden-WMA-Linien Crossover als Einstiegssignale. Sie geht lang, wenn die 5-Perioden-Linie über die 20-Perioden-Linie bricht, und geht kurz, wenn die 5-Perioden-Linie unter die 20-Perioden-Linie bricht. Sie verwendet auch die 50-Perioden-WMA-Linie, um die Trendrichtung zu bestimmen. Handelssignale werden nur ausgelöst, wenn die Kursbrecherichtung mit dem Haupttrend übereinstimmt.
Darüber hinaus nutzt die Strategie den ATR-Indikator, um dynamische Stop-Loss- und Take-Profit-Levels festzulegen. ATR spiegelt die Volatilität des Marktes wider.
Schließlich löst die Strategie nur während der Handelszeiten in den USA (9:00-14:30 CST) aus, um eine hohe Volatilität bei Marktöffnung und -schließung zu vermeiden, bei der sich leicht falsche Signale bilden.
Die Strategie weist folgende Vorteile auf:
Die doppelte gleitende Durchschnittsüberschreitung erfasst effektiv Trendwendepunkte für einen rechtzeitigen Eintritt.
Der Trendfilter vermeidet den Handel gegen den wichtigsten Trend und reduziert falsche Signale.
Dynamische ATR-basierte Stop-Loss-Kontrollen pro Handelsverlust.
Die Begrenzung der Handelszeiten verhindert volatile Öffnungs- und Schließzeiten.
Einfache und klare Regeln, leicht verständlich und umsetzbar für Anfänger.
Anpassbare Parameter wie MA-Perioden, ATR-Multiplikator, Handelszeiten usw. für die Optimierung.
Die Strategie birgt außerdem folgende Risiken:
Mehr Stop-Loss-Auslöser während der Range-bound-Märkte.
Der Dual-MA-Crossover hat Verzögerungen und kann kurzfristige Ausbrüche verpassen.
Eine unsachgemäße Einstellung der ATR-Parameter führt zu großen oder kleinen Stoppverlusten.
Verlassen Sie sich ausschließlich auf technische Indikatoren ohne Fundamentalanalyse.
Die Wirksamkeit hängt von einem angemessenen Symbol und einem angemessenen Zeitrahmen ab.
Mechanische Systeme sind gefährdet, wenn sie arbitriert werden.
Die Parameter müssen je nach Handelssitzung angepasst werden.
Diese können durch Parameter-Tuning, Indikatorenkombinationen, selektives manuelles Eingreifen usw. verbessert werden.
Die Strategie kann in folgenden Aspekten verbessert werden:
Verschiedene MA-Systeme wie EMA, DMA usw. testen.
Hinzu kommen weitere technische Filter wie MACD, RSI usw.
Optimierung der ATR-Parameter für einen besseren Stop-Loss/Profit.
Verwenden Sie Lautstärkenindikatoren, um qualitativ hochwertige Eingangssignale zu finden.
Anpassen der Parameter anhand der Symbolspezifik.
Integration grundlegender Faktoren, um einen Handel gegen den Markt zu vermeiden.
Einführung von maschinellem Lernen wie neuronale Netzwerke für die Marktmodellierung.
Erforschen Sie mehrere Zeitrahmen für mehr Möglichkeiten.
Aufbau eines Strategie-Ensembles zur Verbesserung der Robustheit.
Zusammenfassend ist dies eine einfache und intuitive Strategie, die für Anfänger geeignet ist, Live-Trading zu üben. Gleichzeitig bleibt ein großer Raum für die Optimierung über mehr technische Indikatoren oder maschinelles Lernen. Parameter-Tuning basierend auf Symbolen und Marktdynamik ist ebenfalls entscheidend. Die Strategie bietet einen Referenzrahmen für Quant-Trading-Anfänger, erfordert aber unermüdliche Tests und Verbesserungen für stabile Gewinne.
/*backtest start: 2023-10-15 00:00:00 end: 2023-11-14 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/ // © james4392010 //@version=4 strategy(title="DayTradingFutures Cross-Strategy", overlay=true) // === GENERAL INPUTS === Periods = input(title="ATR Period", type=input.integer, defval=10) src = input(hl2, title="Source") Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true) showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true) //highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true) atr2 = sma(tr, Periods) atr= changeATR ? atr(Periods) : atr2 up=src-(Multiplier*atr) up1 = nz(up[1],up) up := close[1] > up1 ? max(up,up1) : up dn=src+(Multiplier*atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? min(dn, dn1) : dn wmaFastSource = input(defval = close, title = "Fast WMA Source") wmaFastLength = input(defval = 5, title = "Fast WMA Period") wmaSlowSource = input(defval = close, title = "Slow WMA Source") wmaSlowLength = input(defval = 20, title = "Slow WMA Period") wmaDirectionSource = input(defval = close, title = "Trend 50 Period Source") wmaDirectionLength = input(defval = 50, title = "Trend 50 Period") timeinrange(res, sess) => time(res, sess) != 0 // === SERIES SETUP === /// a couple of ma's.. wmaFast = wma(close, 5) wmaSlow = wma(close, 20) wmaDirection = wma(close, 50) // === PLOTTING === fast = plot(series=wmaFast, color=color.white, linewidth=2) slow = plot(series=wmaSlow, color=color.yellow, linewidth=2) direction = plot(series=wmaDirection, color=color.red, linewidth=2) // === INPUT BACKTEST RANGE === //fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) //fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) //fromYear = input(defval = 2022, title = "From Year", minval = 2022) // To Date Inputs //toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) //toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) //toYear = input(defval = 2022, title = "To Year", minval = 2022) //startDate = timestamp(fromYear, fromMonth, fromDay) //finishDate = timestamp(toYear, toMonth, toDay) //inDateRange= (time >= fromDay, fromMonth, fromYear and time <= toDay, toMonth, toYear) // === FUNCTION EXAMPLE === //inDateRange = (time >= fromDay, fromMonth, fromYear) and (time <= toDay, toMonth, toYear) // === LOGIC === enterLong = crossover(wmaFast, wmaSlow) and close > wmaDirection and timeinrange(timeframe.period, "0900-1430") enterShort = crossunder(wmaFast, wmaSlow) and close < wmaDirection and timeinrange(timeframe.period, "0900-1430") //trend := nz(trend[1], trend) //trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend //upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) buySignal = enterLong //plotshape(enterLong ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green) plotshape(enterLong and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white) //dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) sellSignal = enterShort //plotshape(enterShort ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red) plotshape(enterShort and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white) //mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0) //longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white //shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white //fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor) //fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor) alertcondition(buySignal, title="Buy", message="Buy!") alertcondition(sellSignal, title="Sell", message="Sell!") //changeCond = trend != trend[1] //alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!") // Entry for strategy // //tp=input(25,title="TakeProfit") //sl=input(40,title="StopLoss") strategy.entry("Long",1, when=buySignal) //strategy.exit("Exit",profit=tp,loss=sl) //strategy.exit("TakeProfit",profit=tp) //strategy.exit("StopLoss",loss=sl) strategy.entry("Short",1, when=sellSignal) //strategy.exit("Exit",profit=tp,loss=sl) //strategy.exit("TakeProfit",profit=tp) //strategy.exit("StopLoss",loss=sl) //strategy.exit("Exit", wmaFastwmaSlow) //Buy and Sell Signals //strategy.close_all(when =not timeinrange(timeframe.period, "1000-1430")) // === FILL ==== fill (fast, slow, color = wmaSlow > wmaDirection ? color.green : color.red) //fill(when=enterLong, tp, color = color.new(color.green, 90), title = "Profit area") //fill(when=enterLong, sl, color = color.new(color.red, 90), title = "Loss area") //fill(when=enterShort, tp, color = color.new(color.green, 90), title = "Profit area") //fill(when=enterShort, sl, color = color.new(color.red, 90), title = "Loss area")