SMA-Kreuzstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-08 11:36:51
Tags:

img

Übersicht

Diese Strategie erzeugt Handelssignale, die auf dem Crossover zwischen schnellen und langsamen gleitenden Durchschnitten basieren. Sie erzeugt Kaufsignale, wenn der schnelle gleitende Durchschnitt über den langsamen gleitenden Durchschnitt von unten kreuzt. Sie erzeugt Verkaufssignale, wenn der schnelle gleitende Durchschnitt unter den langsamen gleitenden Durchschnitt von oben kreuzt.

Grundsätze

Diese Strategie verwendet die Funktion sma, um die schnellen und langsamen gleitenden Durchschnitte zu berechnen. Die fast_SMA ist der schnelle gleitende Durchschnitt mit der Periodenlänge fast_SMA_input. Die slow_SMA ist der langsame gleitende Durchschnitt mit der Periodenlänge slow_SMA_input.

Die Strategie verwendet die Cross- und Crossunder-Funktionen, um den Crossover zwischen den schnellen und langsamen gleitenden Durchschnitten zu bestimmen. Wenn der schnelle gleitende Durchschnitt über den langsamen gleitenden Durchschnitt überschreitet, ist die LONG-Variable wahr und ein Kaufsignal wird generiert. Wenn der schnelle gleitende Durchschnitt unter den langsamen gleitenden Durchschnitt überschreitet, ist die SHORT-Variable wahr und ein Verkaufssignal wird generiert.

Vorteile

Diese Strategie hat folgende Vorteile:

  1. Ein einfaches Prinzip, leicht zu verstehen und umzusetzen.
  2. Anpassungsfähige gleitende Durchschnittsperioden, die an unterschiedliche Marktumgebungen angepasst werden können.
  3. Filtert Marktlärm aus und erzeugt relativ zuverlässige Handelssignale.
  4. Erfasst sowohl den Anfang als auch den Wendepunkt von Trends.

Risiken

Diese Strategie birgt außerdem folgende Risiken:

  1. Kann bei unsachgemäßen Einstellungen übermäßige Handelssignale erzeugen, was zu einem Übertrading führt.
  2. Kann viele falsche Signale in seitlichen Märkten erzeugen.
  3. Kann die Dauer eines Trends nicht bestimmen, kann sich vorzeitig umkehren.

Risikomanagement:

  1. Es werden geeignete gleitende Durchschnittsparameter festgelegt, um Filterwirkung und Empfindlichkeit auszugleichen.
  2. Hinzufügen von Trendindikatorfiltern, um falsche Signale zu vermeiden.
  3. Stellen Sie Stop-Loss-Punkte fest, um Verluste pro Handel zu kontrollieren.

Optimierung

Diese Strategie kann aus folgenden Gesichtspunkten optimiert werden:

  1. Zusätzliche Filterbedingungen für Volumen oder Volatilität, wenn der Ausbruch eintritt, um falsche Ausbrüche zu vermeiden.
  2. Einbeziehung von Trendindikatoren zur Identifizierung von Trendrichtung und -stärke.
  3. Fügen Sie maschinelle Lernmodelle hinzu, um die gleitenden Durchschnittparameter automatisch zu optimieren.
  4. Kombination mit Support/Widerstand und Bollinger Bands, um Handelsbereiche zu definieren und die Eingangsgenauigkeit zu verbessern.

Zusammenfassung

Diese Strategie erzeugt effektiv Handelssignale, indem sie die Vorteile gleitender Durchschnitte nutzt. Obwohl es einige Risiken gibt, können sie durch Parameteroptimierung, Hinzufügen von Filtern usw. verbessert werden.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-13 00:00:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author Jacques Grobler
//
//                  SIMPLE CROSS OVER BOT
//                  =====================
//
// This is a simple example of how to set up a strategy to go long or short
// If you make any modifications or have any suggestions, let me know
// When using this script, every section marked back testing should be 
// uncommented in order to use for back testing, same goes for using the script portion

///////////////////////////////////////////////////////////////////////////////////////
//// INTRO
//// -----
// BACKTESTING
//@version=4
strategy(title="SimpleCrossOver_Bot_V1_Backtester", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0, commission_type=strategy.commission.percent, commission_value=0.1)

// SIGNALS
//study(title="SimpleCrossOver_Bot_V1_Signals", overlay = true)

///////////////////////////////////////////////////////////////////////////////////////
//// INPUTS
//// ------
// BACKTESTING
dateSart_Year = input(2018, title="Start Year", minval=2000)
dateSart_Month = input(1, title="Start Month", minval=1, maxval=12)
dateSart_Day = input(1, title="Start Day", minval=1, maxval=31)
dateEnd_Year = input(2019, title="End Year", minval=2000)
dateEnd_Month = input(1, title="End Month", minval=1, maxval=12)
dateEnd_Day = input(1, title="End Day", minval=1, maxval=31)

// BACKTESTING AND SIGNALS
fast_SMA_input = input(7, title="SMA Fast")
slow_SMA_input = input(25, title="SMA Slow")

///////////////////////////////////////////////////////////////////////////////////////
//// INDICATORS
//// ----------
fast_SMA = sma(close, fast_SMA_input)
slow_SMA = sma(close, slow_SMA_input)

///////////////////////////////////////////////////////////////////////////////////////
//// STRATEGY
//// --------
LONG = cross(fast_SMA, slow_SMA) and fast_SMA > slow_SMA
stratLONG() => crossover(fast_SMA, slow_SMA)
SHORT = cross(fast_SMA, slow_SMA) and fast_SMA < slow_SMA
stratSHORT() => crossunder(fast_SMA, slow_SMA)

///////////////////////////////////////////////////////////////////////////////////////
//// TRIGGERS
//// --------
// BACKTESTING
testPeriodStart = timestamp(dateSart_Year, dateSart_Month, dateSart_Day, 0, 0)
testPeriodStop = timestamp(dateEnd_Year, dateEnd_Month, dateEnd_Day, 0, 0)
timecondition = true

strategy.entry(id="LONG", long = true, when=timecondition and stratLONG())
strategy.entry(id="SHORT", long = false, when=timecondition and stratSHORT())

// SIGNALS
//alertcondition(LONG, title="LONG")
//alertcondition(SHORT, title="SHORT")

///////////////////////////////////////////////////////////////////////////////////////
//// PLOTS
//// -----
// BACKTESTING AND SIGNALS
plot(fast_SMA, color=green, linewidth=1)
plot(slow_SMA, color=yellow, linewidth=1)
plotshape(LONG, title="LONG", style=shape.triangleup, text="LONG", location=location.belowbar, size=size.small, color=green)
plotshape(SHORT, title="SHORT", style=shape.triangledown, text="SHORT", location=location.abovebar, size=size.small, color=red)

Mehr