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.
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.
Entsprechende Verbesserungen
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)