Momentum Moving Average Crossover-Strategie


Erstellungsdatum: 2023-09-21 21:29:22 zuletzt geändert: 2023-09-21 21:29:22
Kopie: 1 Klicks: 596
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Diese Strategie verwendet die Kreuzung von schnellen und langsamen Moving Averages, um die Richtung der Markttrends zu bestimmen und ein Kauf- und Verkaufssignal zu senden. Die Strategie ist einfach zu verstehen und leicht umzusetzen und eignet sich für den mittleren und kurzen Handel.

Strategieprinzip

Die Strategie verwendet zwei bewegliche Durchschnitte, eine schnelle und eine langsame Linie. Die Schnelle Linie hat eine EMA von 3 Tagen und die langsame Linie eine EMA von 15 Tagen. Die Strategie beurteilt, dass die schnelle Linie, wenn sie von unten durch die langsame Linie bricht, ein Kaufsignal ist.

Die Strategie setzt auch eine schnellere Parameter 3 Tage EMA als Schnell-Exit-Linie. Wenn der Preis fällt unter die Schnell-Exit-Linie, wird eine Trendwende beurteilt und die ursprüngliche Mehrkopf-Position muss beendet werden. Gleichermaßen, wenn der Preis die Schnell-Exit-Linie erneut überschreitet, wird es wieder zu einem Bissen und somit zu einem Signal für einen Wiedereinstieg gemacht.

Die spezifischen Signal-Einstellungen sind wie folgt:

  1. Die Schnellstrecke geht von unten nach oben und übertritt die langsame Linie.

  2. Die schnelle Linie fällt von oben nach unten über die langsame Linie und macht Platz.

  3. Der Preis fiel unter die Schnell-Exit-Linie und die Position wurde platziert.

  4. Die Preise durchbrechen die Schnell-Exit-Linie und machen wieder mehr.

Strategische Vorteile

  • Einfach zu bedienen, mit nur zwei Parametern für Moving Averages, sehr einfach umzusetzen

  • Die Rückmeldedaten sind ausreichend, die verwendeten Indikatoren sind häufig, um die Wirksamkeit der Strategie zu bewerten.

  • Mehr konfigurierbare Parameter, die durch Anpassung der Parameter optimiert werden können

  • Risikokontrolle durch eine Stop-Loss-Einstellung mit schnellen Abwärtströmen

  • Die Strategie ist klar, die Signale für die Kauf- und Verkaufspunkte sind sehr klar.

  • Moderate Frequenz, vermeiden Sie zu häufige Transaktionen

Strategisches Risiko

  • Als Trend-Follow-Strategie erzeugen Sie mehr falsche Signale, wenn der Trend nicht sichtbar ist.

  • Der Moving Average selbst ist nachlässig und könnte einen Wendepunkt verpassen.

  • Feste Parameter-Einstellungen können nicht an Marktveränderungen angepasst werden und sollten mit Parameter-Optimierungen kombiniert werden

  • Die Stop-Loss-Einstellungen sind möglicherweise zu schwach, um den Schaden rechtzeitig zu stoppen.

  • Strategie-Signale sind häufig und die Transaktionskosten können hoch sein.

  • Handelssignale können abweichen und sollten in Verbindung mit anderen Indikatoren bestätigt werden.

Risiken können durch Optimierung der Parameter, Unterstützung der Bestätigung durch andere Indikatoren, angemessene Lockerung der Stop-Loss-Standards und rechtzeitige Aktualisierung der Parameter kontrolliert werden.

Strategieoptimierung

  • Tests zur Optimierung von Moving Average-Parametern, um sie besser an die aktuellen Markteigenschaften anzupassen

  • Mehr Indikatoren können kombiniert werden, um eine stärkere Strategie zu entwickeln

  • Anpassbare Parameter-Einstellungen können eingestellt werden, um die Parameter in Echtzeit an den Markt anzupassen

  • Die Einführung von Machine-Learning-Algorithmen ermöglicht eine intelligentere Optimierung der Strategien.

  • Sie können dynamische Stopps einstellen und Stopps verfolgen, um Risiken besser zu kontrollieren.

  • Kombination von Energieindikatoren, um Abweichungen zu vermeiden, die zu Fehlschlägen führen

Zusammenfassen

Diese Strategie ist insgesamt eine relativ einfache Doppel-Moving-Average-Kreuzung. Sie nutzt die Kreuzung zwischen schnellen und langsamen Durchschnittskurven, um Markttrends und Kauf- und Verkaufszeiten zu beurteilen. Die Strategie hat den Vorteil, dass die Idee klar ist, leicht umzusetzen ist und sich an verschiedene Märkte anpassen kann.

Strategiequellcode
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 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/
// © ehaarjee, ECHKAY, JackBauer007

//@version=4
//study(title="Tale_indicators", overlay=true)
strategy("Tale Indicators Strategy", overlay=true, precision=8, max_bars_back=200, pyramiding=0, initial_capital=20000, commission_type="percent", commission_value=0.1)

len_fast = input(3, minval=1, title="FAST EMA")
src_fast = input(close, title="Source for Fast")
fastMA = ema(src_fast, len_fast)
plot(fastMA, title="Slow EMA", color=color.orange)

len_slow = input(15, minval=1, title="SLOW EMA")
src_slow = input(close, title="Source for Slow")
slowMA = ema(src_slow, len_slow)
plot(slowMA, title="Fast EMA", color=color.blue)

len_fast_exit = input(3, minval=1, title="FAST EMA Exit")
src_fast_exit = input(close, title="Source for Fast Exit")
fastMAE = ema(src_fast_exit, len_fast_exit)
plot(fastMAE, title="Fast EMA Ex", color=color.red)


src_slow_enter_short = input(low, title="Source for Short Entry")
slowMASEn = ema(src_slow_enter_short, len_slow)

src_slow_enter_long = input(high, title="Source for Long Entry")
slowMALEn = ema(src_slow_enter_long, len_slow)

src_slow_exit_short = input(low, title="Source for Short Exit")
slowMASEx = ema(src_slow_enter_short, len_slow)

src_slow_exit_long = input(high, title="Source for Long Exit")
slowMALEx = ema(src_slow_enter_long, len_slow)

enter_long = crossover(fastMA, slowMALEn)
enter_short = crossunder(fastMA, slowMASEn)
exit_long = crossunder(fastMAE, slowMALEx)
exit_short = crossover(fastMAE, slowMALEx)

out_enter = iff(enter_long == true, 1, iff(enter_short == true, -1, 0))
plotarrow(out_enter, "Plot Enter Points", colorup=color.green, colordown=color.red, maxheight = 30)

bull = fastMA > slowMALEn
bear = fastMA < slowMASEn

c = bull ? color.green : bear ? color.red  : color.white
bgcolor(c)

exit_tuner = input(0.005, title="Exit Tuner to touch slowEMA")

bull_exit = (bull and (low>(fastMAE*(1+exit_tuner)))) or exit_long or (not(bear) and (fastMAE>high))
bear_exit = (bear and ((fastMAE*(1-exit_tuner))>high)) or exit_short or (not(bull) and (low>fastMAE))

bull_r = (bull and ((bull_exit[1]) or (bull_exit[2] and bull_exit[1])) and (low<=fastMAE))
bear_r = (bear and ((bear_exit[1]) or (bull_exit[2] and bull_exit[1])) and (fastMAE<=high))

bull_re = (bull and (low<slowMALEn)) and not(enter_long)
bear_re = (bear and (high>slowMASEn)) and not(enter_short)

bull_ree = (bull and ((low<slowMALEn) and not(bull_re[1] or enter_long[1]))) 
bear_ree = (bear and ((high>slowMASEn) and not(bear_re[1] or enter_short[1])))

bull_reenter =  (bull_r) and not(enter_long)
bear_reenter =  (bear_r) and not(enter_short)

plotshape(bull_exit, "Plot Bull Exit", style = shape.arrowdown, color=color.green, size=size.small, text="ExL", location=location.abovebar)
plotshape(bear_exit, "Plot Bear Exit", style = shape.arrowup, color=color.red, size=size.small, text="ExS", location=location.belowbar)

plotshape(bull_reenter, "Plot Bull ReEnter", style = shape.arrowup, color=color.green, size=size.small, text="ReL", location=location.belowbar)
plotshape(bear_reenter, "Plot Bear ReEnter", style = shape.arrowdown, color=color.red, size=size.small, text="ReS", location=location.abovebar)

run_strategy = input(true, title="Run Strategy")
// === INPUT BACKTEST RANGE ===
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 = 2020, title = "From Year",       type = input.integer, minval = 2000)
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 = 2100, title = "Thru Year",       type = input.integer, minval = 2000)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

var long_position_open = false
var short_position_open = false


if (enter_long and not(bull_exit) and not(long_position_open))
//    strategy.entry("LO", strategy.long, qty=4)
    long_position_open := true
    if (short_position_open)
//        strategy.close("SO")
        short_position_open := false

if (bull_reenter and not(long_position_open))  
//    strategy.entry("LO", strategy.long, qty=1)
    long_position_open := true

if (bull_exit and long_position_open)
//  strategy.close("LO")
    long_position_open := false
    
if (enter_short and not(bear_exit) and not(short_position_open))
//    strategy.entry("SO", strategy.short, qty=4)
    short_position_open := true
    if(long_position_open)
//        strategy.close("LO")
        long_position_open := false

if (bear_reenter and not(short_position_open))  
//    strategy.entry("SO", strategy.long, qty=1)
    long_position_open := true

if (bear_exit and short_position_open)
//    strategy.close("SO")
    short_position_open := false

if(run_strategy)
    strategy.entry("LO", strategy.long, when=(window() and enter_long), qty=4)
    strategy.entry("LO", strategy.long, when=(window() and bull_reenter and not(long_position_open)), qty=1)
    strategy.close("LO", when=(window() and bull_exit and long_position_open))
    strategy.entry("SO", strategy.short, when=(window() and enter_short), qty=4)
    strategy.entry("SO", strategy.short, when=(window() and bear_reenter and not(short_position_open)), qty=1)
    strategy.close("SO", when=(window() and bear_exit and short_position_open))