Dynamische SMA-Kreuztrendstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-05 12:14:12
Tags:

img

Übersicht

Diese Strategie ist eine einfache gleitende Durchschnitts- (SMA) Crossover-Strategie, die für Kryptowährungsmärkte geeignet ist. Sie verwendet schnelle, mittlere und langsame SMAs, um potenzielle Ein- und Ausstiegssignale zu identifizieren. Wenn die schnelle SMA über die mittlere SMA überschreitet, wird ein Kaufsignal generiert. Wenn die schnelle SMA unter die mittlere SMA überschreitet, wird ein Verkaufssignal generiert.

Strategie Logik

Einstellungen der Parameter

Die Strategie ermöglicht es den Händlern, folgende Schlüsselparameter festzulegen:

  • Preisquelle: Schlusspreis oder sonstige Preise
  • Betrachten Sie unvollständige Balken oder nicht
  • SMA-Vorhersagemethode: Verschiebungsvorhersage oder lineare Regressionsvorhersage
  • Schnelle SMA-Länge: Standard 7
  • Durchschnittliche SMA-Länge: Standard 30
  • langsame SMA-Länge: Standard 50
  • Mittel des Kontos
  • Risikoprozentsatz pro Handel

Berechnung der SMA

Die schnelle SMA, die mittlere SMA und die langsame SMA werden auf der Grundlage der vom Benutzer festgelegten SMA-Längen berechnet.

Handelssignale

Wenn die schnelle SMA über die mittlere SMA überschreitet, wird ein Kaufsignal generiert.

Risiko und Positionsgröße

Die Strategie berechnet den nominalen Kapitalbetrag pro Handel auf der Grundlage von Kontomitteln und einem akzeptablen Risikoprozentsatz pro Handel.

Analyse der Vorteile

  • Verwendet mehrere SMAs, um Trends mit größerer Überzeugung zu identifizieren
  • Optionale SMA-Vorhersagemethoden für eine bessere Anpassungsfähigkeit
  • Einfache und klare Handelssignale, die leicht umzusetzen sind
  • Einbezieht wissenschaftliches Risikomanagement und Positionsmanagement

Risikoanalyse

  • Nachlässige Art der SMAs kann Preisumkehrpunkte verpassen
  • Betrachtet nur technische Indikatoren ohne Kombination von Fundamentaldaten
  • Die Auswirkungen plötzlicher Ereignisse werden nicht berücksichtigt.

Kann durch Verkürzung der SMA-Perioden, Hinzufügen anderer Indikatoren usw. optimiert werden.

Optimierungsrichtlinien

  • Hinzufügen anderer Indikatoren, um falsche Signale zu filtern
  • Einbeziehung der Fundamentalanalyse
  • Optimierung der SMA-Periodenparameter
  • Optimierung der Risiko- und Positionsgrößenparameter

Schlussfolgerung

Diese Strategie integriert SMA-Crossover-Regeln, Risikomanagement und Positionsgrößen für ein robustes Trend-Folge-System, das für Krypto-Märkte geeignet ist.


/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Onchain Edge Trend SMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Configuration Parameters
priceSource = input(close, title="Price Source")
includeIncompleteBars = input(true, title="Consider Incomplete Bars")
maForecastMethod = input(defval="flat", options=["flat", "linreg"], title="Moving Average Prediction Method")
linearRegressionLength = input(3, title="Linear Regression Length")
fastMALength = input(7, title="Fast Moving Average Length")
mediumMALength = input(30, title="Medium Moving Average Length")
slowMALength = input(50, title="Slow Moving Average Length")
tradingCapital = input(100000, title="Trading Capital")
tradeRisk = input(1, title="Trade Risk (%)")

// Calculation of Moving Averages
calculateMA(source, period) => sma(source, period)
predictMA(source, forecastLength, regressionLength) => 
    maForecastMethod == "flat" ? source : linreg(source, regressionLength, forecastLength)

offset = includeIncompleteBars ? 0 : 1
actualSource = priceSource[offset]

fastMA = calculateMA(actualSource, fastMALength)
mediumMA = calculateMA(actualSource, mediumMALength)
slowMA = calculateMA(actualSource, slowMALength)

// Trading Logic
enterLong = crossover(fastMA, mediumMA)
exitLong = crossunder(fastMA, mediumMA)

// Risk and Position Sizing
riskCapital = tradingCapital * tradeRisk / 100
lossThreshold = atr(14) * 2
tradeSize = riskCapital / lossThreshold

if (enterLong)
    strategy.entry("Enter Long", strategy.long, qty=tradeSize)

if (exitLong)
    strategy.close("Enter Long")

// Display Moving Averages
plot(fastMA, color=color.blue, linewidth=2, title="Fast Moving Average")
plot(mediumMA, color=color.purple, linewidth=2, title="Medium Moving Average")
plot(slowMA, color=color.red, linewidth=2, title="Slow Moving Average")


Mehr