Strategie zur Beobachtung des doppelten gleitenden Durchschnitts Stop Loss

Schriftsteller:ChaoZhang, Datum: 2023-11-16 17:18:59
Tags:

img

Übersicht

Diese Strategie erzeugt lange und kurze Signale durch doppelte gleitende Durchschnitte und implementiert Tracking Stop Loss. Die Kernidee besteht darin, die Trendrichtung mit gleitenden Durchschnitten zu bestimmen, lang oder kurz entlang des Trends zu gehen und ATR zu verwenden, um den Stop Loss für das Tracking von Stop Loss zu berechnen.

Strategie Logik

Diese Strategie verwendet hl2 als Quellpreis und berechnet den ATR eines bestimmten Zeitraums als Stop-Loss-Bereich. Die oberen und unteren Bands werden anhand des ATR multipliziert mit einem bestimmten Faktor berechnet. Wenn der Preis über den oberen Band bricht, wird ein Kaufsignal generiert, um lang zu gehen. Wenn der Preis unter dem unteren Band bricht, wird ein Verkaufssignal generiert, um kurz zu gehen.

Nach dem Öffnen von Positionen wird der Stop Loss in Echtzeit basierend auf den Änderungen in ATR angepasst, um den Stop Loss zu verfolgen.

Diese Strategie nutzt die Fähigkeit der gleitenden Durchschnittswerte, die Trendrichtung zu bestimmen, voll aus und beinhaltet auch den auf ATR basierenden Stop-Loss-Tracking-Mechanismus, um die Handelsrichtung und die Risikokontrolle zu gewährleisten.

Vorteile

Der größte Vorteil dieser Strategie liegt in der Risikokontrolle. Traditionelle gleitende Durchschnittsstrategien berücksichtigen nur Richtungsurteile und können leicht Konten in die Luft jagen. Durch die Einbeziehung von ATR zur Verfolgung von Stop Loss kann diese Strategie den Stop Loss dynamisch anhand der Marktvolatilität anpassen, um Handelsrisiken effektiv zu kontrollieren.

Darüber hinaus kombiniert diese Strategie den zweiräumigen Handel. Verglichen mit einiräumigen Strategien kann sie die Positionsrichtung bei Umkehrtrends umgehend anpassen, um nicht in eine Richtung gefangen zu bleiben und die Rentabilität der Strategie zu verbessern.

Risiken

Die Hauptrisiken dieser Strategie stammen aus den Parameter-Einstellungen von ATR-Periode und Multiplikator. Wenn die ATR-Periode zu kurz oder Multiplikator zu groß ist, wäre der Stop-Loss-Bereich zu klein, um die Risiken effektiv zu kontrollieren. Wenn die ATR-Periode zu lang oder Multiplikator zu klein ist, wäre der Stop-Loss zu locker, um Gewinn zu erzielen. Außerdem besteht das Risiko falscher Ausbrüche, wenn die Preise in gleitende Durchschnitte eindringen.

Die Risiken können gemanagt werden, indem die ATR-Periode und der Multiplikator so optimiert werden, dass ein Gleichgewicht zwischen Stop-Loss- und Gewinnzielen hergestellt wird, und andere Indikatoren eingeführt werden, um falsche Ausbrüche zu filtern und die Signalqualität zu verbessern.

Möglichkeiten zur Verbesserung

Diese Strategie kann durch folgende Aspekte verbessert werden:

  1. Optimieren Sie gleitende Durchschnittsperioden, um die beste Parameterkombination zu finden.

  2. Hinzufügen anderer Indikatoren wie MACD, KDJ usw., um Signale zu filtern und die Qualität zu verbessern.

  3. Einbeziehung von Positionsgrößen wie Fixed Fraction, Martingale usw. zur Verbesserung der Rentabilität.

  4. Untersuchen Sie Unterschiede zwischen verschiedenen Produkten zur Optimierung.

  5. Maschinelles Lernen wie genetische Algorithmen für Parameter-Training und Optimierung anwenden.

Schlussfolgerung

Diese Strategie berücksichtigt vollständig die Beurteilung von Trends und die Risikokontrolle, die Gewinnverfolgung bei gleichzeitiger Verringerung von Drawdowns. Eine weitere Verbesserung durch Parameteroptimierung und Portfoliomethoden kann dazu beitragen, die Rentabilität der Strategie zu verbessern. Zusammenfassend ist dies eine robuste und stabile quantitative Handelsstrategie mit klarer Logik und einfacher Umsetzung.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
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/
// © KivancOzbilgic


//@version=4
strategy("Trenbolone Strategy", overlay = true)
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=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring 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
trend = 1
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 = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
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)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)

Mehr