Basierend auf der Crossover-Handelsstrategie mit doppeltem gleitendem Durchschnitt


Erstellungsdatum: 2023-11-27 15:32:57 zuletzt geändert: 2023-11-27 15:32:57
Kopie: 1 Klicks: 613
1
konzentrieren Sie sich auf
1617
Anhänger

Basierend auf der Crossover-Handelsstrategie mit doppeltem gleitendem Durchschnitt

Überblick

Die Strategie basiert auf der Kreuzung von zwei verschiedenen Parameter-Einstellungen von Moving Averages, um ein Kauf- und Verkaufssignal zu erzeugen. Ein Kaufsignal wird erzeugt, wenn ein Moving Average mit einer kürzeren Periode den Moving Average mit einer längeren Periode von unten durchbricht; ein Verkaufssignal wird erzeugt, wenn ein Moving Average mit einer kürzeren Periode den Moving Average mit einer längeren Periode von oben nach unten durchbricht.

Strategieprinzip

Die Strategie ist in der Pine-Skriptsprache geschrieben. Zuerst werden die Art, die Länge und die Preisquelle der beiden gleitenden Durchschnitte, die als p1 und p2 bezeichnet werden, durch Input definiert. P1 steht für den Mittelwert der kürzeren Periode und p2 für den Mittelwert der längeren Periode.

Die Crossover- und Crossunder-Funktion beurteilt die Kreuzung zweier Gleichlinien. Wenn p1 von unten über p2 geht, gibt es ein Kaufsignal; wenn p1 von oben über p2 geht, gibt es ein Verkaufsignal.

Die Strategie errichtet über die Strategy.entry-Funktion mehrköpfige oder leere Positionen, wenn ein Signal ausgegeben wird. Wenn der ShortOnly-Parameter aktiviert ist, werden nur die Geschäfte verkauft.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Regeln sind klar, leicht zu verstehen und umzusetzen
  2. Die Mittellinie ist ein klassisches und bekanntes Handelssignal.
  3. Typ, Länge und Preisquelle der hochgradig anpassbaren Mittellinie
  4. Der Handel verkauft Signale und reduziert die Handelsfrequenz.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. In einem schwankenden Umfeld kann eine Linie mehrere unwirksame Kreuzungen erzeugen, was zu Überhandelungen führt.
  2. Die Parameter müssen für verschiedene Sorten und Handelszyklen optimiert werden
  3. Es ist unklar, in welche Richtung der Trend gehen wird, und es könnte ein Rückschlag geben.

Sie können durch die Anpassung der Durchschnittslänge, die Einführung von Filterbedingungen und andere Methoden die Wirkungslosigkeit des Signals reduzieren. Sie können auch die Bewegung des Großkurses in Verbindung mit einem Trendindikator bestimmen.

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Die Einführung von Volumen-Gewogenen Durchschnittspreisen oder typischen Preisen als Preisquelle erhöht die Zuverlässigkeit von Kreuzungen

  2. Erhöhung der Validation Period

  3. Maximal zulässiger Verlust in Kombination mit ATR-Stopp, basierend auf der Marktschwankung

  4. Optimierungsparameter für die Kurvenkonformität zur Suche nach einer optimalen Kombination von Parametern

  5. Erwägen Sie nur, ein Handelssignal zu senden, wenn der Großzyklus-Trend übereinstimmt

Zusammenfassen

Die Strategie ist einfach zu verstehen und zu implementieren. Sie kann durch die Kreuzung zweier Gleichlinien ein Handelssignal erzeugen. Sie ist sehr individualisierbar. Sie kann jedoch auch in einem wackligen Umfeld mehr unwirksame Signale erzeugen.

Strategiequellcode
/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 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/
// © RafaelPiccolo

//@version=4
strategy("Double MA Cross", overlay=true)

type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len1 = input(10, minval=1, title="Length 1")
src1 = input(close, "Source 1", type=input.source)

type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"])
len2 = input(50, minval=2, title="Length 2")
src2 = input(close, "Source 2", type=input.source)

shortOnly = input(false, "Short only")

tema(src, len)=>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    ema3 = ema(ema2, len)
    return = 3 * (ema1 - ema2) + ema3

getPoint(type, len, src)=>
    return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len)

p1 = getPoint(type1, len1, src1)
p2 = getPoint(type2, len2, src2)

shortCondition = crossunder(p1, p2)
longCondition = crossover(p1, p2)

if (shortCondition)
    strategy.entry("Short", strategy.short)

if (longCondition)
    if (shortOnly)
        strategy.close("Short")
    else
        strategy.entry("Long", strategy.long)

plot(p1, "MA 1", p1 < p2 ? color.red : color.green)
plot(p2, "MA 2", color.blue)