Crossover-Strategie für monatliche Schlusskurse und gleitende Durchschnittswerte


Erstellungsdatum: 2023-11-23 17:09:01 zuletzt geändert: 2023-11-23 17:09:01
Kopie: 0 Klicks: 570
1
konzentrieren Sie sich auf
1617
Anhänger

Crossover-Strategie für monatliche Schlusskurse und gleitende Durchschnittswerte

Überblick

Diese Strategie nutzt die Kreuzung von Monatsschlusspreisen und Moving Averages, um ein Handelssignal zu erzeugen. Wenn die Monatsschlusspreise über dem Moving Average liegen, machen Sie einen Plus; wenn die Monatsschlusspreise unter dem Moving Average liegen, machen Sie einen Minus.

Strategieprinzip

Die Kernlogik der Strategie lautet:

  1. Eingabe der Periodiparameter für die Moving Average, Sie können SMA oder EMA auswählen
  2. Sie können die bewegliche Mittellinie anzeigen.
  3. Der Abschlusskurs einer anderen Aktie kann als Signal verwendet werden.
  4. Handelssignale basierend auf der Beziehung zwischen dem Monatsschlusskurs und dem Moving Average
    • Die Einführung einer Moving Average am Ende der Börse bedeutet mehr.
    • Die Schlusskurs durchschreitet die Moving Average und ist nahtlos.

Die Strategie nutzt die glatte Eigenschaft der beweglichen Durchschnittslinie, um die teilweise Geräusche der Preise zu filtern und die Umkehrung der mittelfristigen Entwicklung der Aktienpreise zu erfassen. Wenn der Aktienpreis über der Durchschnittslinie liegt, zeigt dies, dass der Aktienpreis einen Stiermarkttrend bildet; Wenn der Aktienpreis unter der Durchschnittslinie liegt, zeigt dies, dass der Aktienpreistrend in einen Bärenmarkt umschaltet.

Strategische Vorteile

Diese Strategie hat folgende Vorteile:

  1. Mithilfe von Mondlinie-Daten filtern wir nachts die Geräusche und erfassen mittlere und langfristige Trends in den Aktienkursen.
  2. Anpassbare Moving Average-Perioden mit optimierten Parametern für verschiedene Aktien
  3. Eine andere Aktie als Signalquelle zur Stabilisierung
  4. Mit einer fortschrittlichen Anti-Repainting-Technologie, um Rückgängen zu verhindern
  5. Eingabe von beliebigen Rückmesszeiten zur Testoptimierung

Insgesamt ist das Strategie-Framework einfach und praktisch und kann durch Parameteroptimierung auf die meisten Aktien angewendet werden, insbesondere für mittlere und langfristige Anleger.

Strategisches Risiko

Die Strategie birgt auch einige Risiken, die sich auf folgende Bereiche konzentrieren:

  1. Monatliche Daten werden nur langsam aktualisiert und zeigen keine Preisänderungen in Echtzeit.
  2. Es gibt eine gewisse Verzögerung, die möglicherweise eine kurzfristige Handelsmöglichkeit verpasst.
  3. Die bewegliche Durchschnittslinie hat eine Verzögerung und kann nicht kontrolliert werden, wann die Signale erzeugt werden.
  4. Unkorrekt gewählte Parameter können zu konservativen oder verpassten Möglichkeiten führen

Um die Risiken zu verringern, können Optimierungen in folgenden Bereichen vorgenommen werden:

  1. Technische Indikatoren in Verbindung mit einem niedrigeren Zeitrahmen zur Unterstützung der Beurteilung
  2. Anpassung der beweglichen Durchschnittsphase zur Ermittlung der optimalen Parameterkombination
  3. Nutzung eines stabileren Signals als Signalquelle
  4. Die Größe der Positionen entsprechend anpassen, um Einzelschäden zu kontrollieren

Richtung der Strategieoptimierung

Die Strategie bietet auch viel Optimierungsmöglichkeiten, insbesondere in folgenden Bereichen:

  1. Erhöhung der Stop-Loss-Strategie zur Gewinnsicherung und Risikokontrolle
  2. In Kombination mit anderen Indikatoren, wie KD, MACD, etc., erhöht die Genauigkeit der Handelssignale
  3. Dynamische Optimierung von Moving Average Parameters mit Hilfe von Machine Learning
  4. Hinzufügen eines Positionsmanagement-Moduls, um die Positionen mit dem Trend zu allokalisieren
  5. Zusätzliche Multifunktionalität, die flexibel an die Marktbedingungen angepasst werden kann
  6. Joining mit K-Linien in kürzeren Zeitrahmen, um eine schnelleren Transaktion zu ermöglichen

Zusammenfassen

Die Gesamtkonzeption der Crossover-Strategie zwischen Monatsschlusskurs und Moving Average ist klar und einfach umzusetzen. Durch die Anpassung der Parameter kann sie auf verschiedene Aktien angewendet werden. Sie eignet sich insbesondere für mittel- und langfristige Anleger. Mit der kontinuierlichen Stärkung von Modulen wie Stop-Loss- und Optimierungsparametern wird die Strategie voraussichtlich noch bessere Ergebnisse erzielen.

Strategiequellcode
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')