Handel mit SMA-Offsetfluktuation

Schriftsteller:ChaoZhang, Datum: 2023-12-19 10:52:10
Tags:

img

Strategieübersicht

Diese Strategie verwendet einfache gleitende Durchschnitte (SMA) und einige mathematische Berechnungen, um Kauf-/Verkaufspunkte zu bestimmen. Wir halten eine 100-tägige SMA-Linie als Grundlage. Wenn der Schlusskurs unterhalb dieser Linie liegt, bestimmen wir die Eröffnungsposition anhand des Prozentsatzes, an dem der Preis unterhalb der Linie liegt (low offset), was konfigurierbar ist. Ebenso setzen wir vor dem Schließen von Long-Positionen einen hohen Offset-Prozentsatz über dem 100-tägigen SMA. Wenn wir versuchen, zu früh zu schließen, während der Preis noch steigt, wird der nachfolgende Stop-Loss ausgelöst.

Strategie Logik

Die Strategie verwendet drei SMA-Linien: schnelle Linie (Standstillstand von 14 Tagen), langsame Linie (Standstillstand von 100 Tagen) und Referenzlinie (Standstillstand von 30 Tagen).

Es geht lang, wenn der Schlusskurs unter der Referenzlinie liegt, der Prozentsatz unter der langsamen Linie (niedriger Versatz) größer ist als der konfigurierte Wert, die schnelle Linie steigt und die langsame Linie fällt.

Es schließt lang, wenn der Schlusskurs über der Referenzlinie liegt, der Prozentsatz über der langsamen Linie (High Offset) größer ist als der konfigurierte Wert, der Schlusskurs stieg für 3 aufeinanderfolgende Kerzen, wir haben offene Gewinne und die schnelle Linie liegt über der langsamen Linie.

Die Ordergröße basiert auf einem Prozentsatz des Gesamtkapitals, das unsere Positionsgröße bestimmt.

Analyse der Vorteile

  1. Nutzen Sie den Vorteil, dass SMA Preisschwankungen ausgleichen und Marktlärm filtern kann.
  2. SMA-Crossovers haben eine gewisse Fähigkeit, Trendveränderungen vorherzusagen.
  3. Das Setzen von Versetzungen verhindert falsche Ausbrüche der SMA-Linien.
  4. Die Kombination von Trend- und Crossover-Indikatoren verbessert die Genauigkeit der Handelssignale.
  5. Ein Stop-Loss verhindert Gewinne und Verluste.

Risikoanalyse

  1. Die SMA selbst hat eine Verzögerung und kann Preiswendepunkte verpassen.
  2. Eine falsche Auslagerung kann die Strategie zu aggressiv oder zu konservativ machen.
  3. Ein falscher Stop-Loss-Parameter kann dazu führen, dass der Stopp zu früh oder der Stopp-Loss-Prozentsatz zu hoch ist.
  4. Unfähig, mit heftigen Preisschwankungen umzugehen.

Entsprechende Verbesserungen

  1. Hinzufügen anderer führender Indikatoren zu Filterangaben.
  2. Backtest und Optimierung von Versetzungen.
  3. Backtest und finden Sie optimale Stop-Loss-Parameter.
  4. Verringern Sie die Positionsgröße in Zeiten hoher Volatilität.

Optimierungsrichtlinien

  1. Testen Sie SMAs für verschiedene Perioden, um optimale Parameter zu finden.
  2. Hinzufügen anderer Indikatoren zur Bestimmung der Marktstruktur und -entwicklung.
  3. Optimieren Sie die Stop-Loss-Parameter, um mehr Gewinne zu erzielen.
  4. Anpassung der Positionsgröße an die Marktvolatilität.
  5. Strategie auf mehrere Produkte zur Diversifizierung gleichzeitig anwenden.

Schlussfolgerung

Die SMA-Offset-Fluctuation-Handelsstrategie identifiziert optimale Einstiegspunkte, indem sie Offsets basierend auf verschiedenen SMA-Linien festlegt. Der Exit-Mechanismus setzt einen Trailing-Stop-Loss, um Gewinne zu erzielen. Diese Strategie ist einfach zu verstehen und umzusetzen. Durch die Optimierung von Parametern wie SMA-Perioden, Offsets, Stop-Loss-Levels können bessere Ergebnisse erzielt werden. Sie eignet sich für mittelfristige Investoren, die nach stetigen Gewinnen suchen.


/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// Author: Sonny Parlin (highschool dropout)
strategy(shorttitle="SMA+Strategy", title="SMA Offset Strategy",
                                      overlay=true,  currency=currency.USD,
                                      initial_capital=10000)

// Inputs and variables
ss = input(14, minval=10, maxval=50, title="SMA Fast (days)")
ff = input(100, minval=55, maxval=200, title="SMA Slow (days)")
ref = input(30, minval=20, maxval=50, title="SMA Reference (days)")
lowOffset = input(0.001, "Low Offset (%)", minval=0, step=0.001)
highOffset = input(0.0164, "High Offset (%)", minval=0, step=0.0001)
orderStake = input(0.96, "Order Stake (%)", minval=0, step=0.01)

// SMA
smaFast = sma(close, ss)
smaSlow = sma(close, ff)
smaRef = sma(close, ref)
distanceLow = (close - smaSlow) / close
distanceHigh = (close - smaSlow) / close

// Set up SMA plot but don't show by default
plot(smaFast, "smaFast", color=#00ff00, display = 0)
plot(smaSlow, "smaSlow", color=#ff0000, display = 0)
plot(smaRef, "smaRef", color=#ffffff, display = 0)

// The buy stratey:
// guard that the low is under our sma low reference line by our lowOffset %, 
// default is 0.001. (low < smaRef) and (distanceLow > lowOffset)
// SMA fast is on the rise and SMA slow is falling and they are very likely
// to cross. (rising(smaFast,1)) and (falling(smaSlow, 1)) 
enterLong = (low < smaRef) and (distanceLow > lowOffset) and (rising(smaFast,1)) and (falling(smaSlow, 1)) 

// The sell Strategy:
// Guard that close is higher than our sma high reference line by our 
// highOffset %, default is 0.0164. (close > smaRef) and (distanceHigh > highOffset)
// Guard that close has risen by 3 candles in a row (rising(close,3)) 
// Guard that we currently have profit (strategy.openprofit > 0)
// Guard that SMA fast is higher than smaSlow (smaFast > smaSlow)
// If it keeps going up past our close position the trailing stoploss will kick in!
enterShort = (close > smaRef) and (distanceHigh > highOffset) and (rising(close,3)) and (strategy.openprofit > 0) and (smaFast > smaSlow)

// Order size is based on total equity
// Example 1:
// startingEquity = 2000
// close = 47434.93
// orderStake = 0.45
// (2,000 × orderStake) / close = orderSize = 0.0189733599 = approx $900

// Example 2:
// startingEquity = 2000
// close = 1.272
// orderStake = 0.45
// (startingEquity × orderStake) / close = orderSize = 707.5471698113 = approx $900
orderSize = (strategy.equity * orderStake) / close

// Trailing Stoploss
// I'm using 1.35 as my default value, play with this for different results.
longTrailPerc = input(title="Trailing Stoploss (%)",
     type=input.float, minval=0.0, step=0.1, defval=1.35) * 0.01
     
longStopPrice = 0.0

longStopPrice := if (strategy.position_size > 0)
    stopValue = close * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0

if (enterLong)
    strategy.entry("Open Long Position", strategy.long, orderSize, when=strategy.position_size <= 0)
    
if (enterShort)
    strategy.exit(id="Close Long Position", stop=longStopPrice)


//plot(strategy.equity)

Mehr