Die Moving Average Crossover Trading Strategie ist eine der häufigsten Quantitative Trading-Strategien. Die Strategie erzeugt Handelssignale, indem sie Moving Averages aus verschiedenen Perioden berechnet und entsprechend ihrer Überschneidung erstellt. Konkret handelt es sich um die Berechnung eines Index-Moving Averages aus 4 Perioden, 8 Perioden und 20 Perioden.
Die Kernlogik der Strategie lautet:
Mit dieser Methode nutzen wir die Kreuzung zwischen verschiedenen periodischen Durchschnittslinien, um die Marktsignale zu beurteilen, und die Richtung der längsten periodischen Durchschnittslinie, um Fehlsignale zu filtern und eine stabile Handelsstrategie aufzubauen.
Diese Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Die wichtigsten Lösungen sind:
Diese Strategie kann in folgenden Bereichen optimiert werden:
Zyklusoptimierung: Bestimmung der optimalen MA-Zykluskombination für verschiedene Sorten
Modellintegration: Integration mit Deep-Learning-Modellen wie LSTM, RNN und anderen, um mehr Alpha zu gewinnen
Kombinationsoptimierung: Kombination mit anderen Kennzahlen, um eine Kombination zu erstellen
Die Moving Average-Cross-Strategie ist insgesamt eine eher klassische und gebräuchliche Quantifizierungs-Trading-Strategie. Die Strategie ist logisch einfach, leicht zu verstehen und umzusetzen und hat eine gewisse Stabilität. Es gibt jedoch auch einige Probleme, wie die Erzeugung von Falschsignalen, die Unfähigkeit, sich an Marktveränderungen anzupassen, etc. Diese Probleme können durch Parameteroptimierung, Stop-Loss-Optimierung, Modellfusion und andere Methoden verbessert werden.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//future strategy
//strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05)
//stock strategy
strategy(title = "stub", overlay = true)
//forex strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true)
//crypto strategy
//strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000)
testStartYear = input(1900, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testEndYear = input(2018, "Backtest Start Year")
testEndMonth = input(12, "Backtest Start Month")
testEndDay = input(1, "Backtest Start Day")
testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testPeriod() => true
ema1 = ema(close,4)
ema2 = ema(close,8)
ema3 = ema(close,20)
go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1]
exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1]
go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1]
exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1]
if testPeriod()
strategy.entry("simpleBuy", strategy.long, when=go_long)
strategy.exit("simpleBuy", "simpleSell",when=exit_long)
strategy.entry("simpleSell", strategy.short,when=go_short)
strategy.exit("simpleSell", "simpleSell",when=exit_short)