STEM- und MATCS-kombinierte Momentum-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-15 16:22:48
Tags:

Diese Strategie wird als STEM und MATCS Combined Momentum Trading Strategy bezeichnet.

Wie die Strategie funktioniert:

  1. Berechnen Sie den Supertrend-Indikator, um Kauf- und Verkaufssignale zu erzeugen, wenn sich der Preis umkehrt.
  2. Berechnen Sie die schnellen, mittleren und langsamen MA des MACD-Indikators. Kaufsignale werden erzeugt, wenn der schnelle MA über den mittleren MA überschreitet. Verkaufssignale werden erzeugt, wenn der schnelle MA unter den mittleren MA überschreitet.
  3. Kombinieren Sie die Signale von Supertrend und MACD und machen Sie nur Trades, wenn beide Indikatoren übereinstimmen.
  4. Verwenden Sie den ATR-Indikator zur Berechnung dynamischer Stop-Loss-Levels.

Besondere Handelsregeln:

  1. Wenn der Supertrend von unten nach oben flipst und der MACD-schnelle MA über den mittleren MA geht, gehen Sie lang.
  2. Wenn der Supertrend von oben nach unten umkehrt und der MACD-schnelle MA unter den mittleren MA fällt, gehen Sie kurz.
  3. Ausstiegsregeln: Stop-Loss oder Gewinnspiel (optional).

Vorteile dieser Strategie:

  1. Die Kombination mehrerer Indikatoren verbessert die Genauigkeit des Signals.
  2. Dynamischer Stop-Loss kann einzelne große Verluste begrenzen.
  3. Hat sowohl Trendfolgungs- als auch Mittelumkehrfunktionen.

Risiken dieser Strategie:

  1. Falsche Supertrend- und MACD-Parameter können schlechte Signale erzeugen.
  2. Ein zu naher Stop-Loss kann zu häufigen Stop-Outs führen.
  3. Gebühren und Verschiebungen beeinflussen die Gewinne.

Zusammenfassend lässt sich sagen, dass die Kombination von STEM und MATCS die Effekte durch Indikatorenintegration verbessert, die für den kurz- und mittelfristigen Handel geeignet ist.


/*backtest
start: 2023-09-07 00:00:00
end: 2023-09-14 00:00:00
period: 1h
basePeriod: 15m
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/
// © IncomePipelineGenerator
//@version=4
// strategy("STRAT_STEM_MATCS_BTC", overlay=true, pyramiding = 0, default_qty_value = 20, slippage = 5)


ST_EMA_PERIOD = input(1, minval=1)
ST_EMA = ema(close, ST_EMA_PERIOD)

LENGTH = input(title="ATR_PERIOD", type=input.integer, defval=95)
ATR_TUNE = input(title="ATR_TUNE", type=input.float, step=0.1, defval=2.1)
showLabels = input(title="Show_Buy/Sell_Labels ?", type=input.bool, defval=true)
highlightState = input(title="Highlight_State ?", type=input.bool, defval=true)

ATR = ATR_TUNE * atr(LENGTH)

longStop = ST_EMA - ATR
longStopPrev = nz(longStop[1], longStop)
longStop := (close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = ST_EMA + ATR
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (close) > shortStopPrev ? 1 : dir == 1 and (close) < longStopPrev ? -1 : dir


fastLength = input(3, minval=1), medLength=input(9, minval=1), slowLength=input(12, minval=1), signalLength=input(16,minval=1)
fastMA = ema(close, fastLength), medMA = ema(close, medLength), slowMA = ema(close, slowLength)

macd = fastMA - slowMA
fmacd = fastMA - medMA
smacd = slowMA - medMA

signal = ema(macd, signalLength)
fsignal = ema(fmacd, signalLength)
ssignal = ema(smacd, signalLength)


SetStopLossShort = 0.0
SetStopLossShort := if(strategy.position_size < 0)
    StopLossShort = shortStop
    min(StopLossShort,SetStopLossShort[1])

SetStopLossLong = 0.0
SetStopLossLong := if(strategy.position_size > 0)
    StopLossLong = longStop
    max(StopLossLong,SetStopLossLong[1])


ATR_CrossOver_Period = input(5, type=input.integer, minval=1, maxval=2000)
ATR_SIGNAL_FINE_TUNE = input(0.962, type=input.float)  
ATR_CS = atr(ATR_CrossOver_Period)*ATR_SIGNAL_FINE_TUNE

StopLoss_Initial_Short = input(0.0, type=input.float) 
StopLoss_Initial_Long = input(0.0, type=input.float) 

StopLoss_Long_Adjust = input(0.0, type=input.float) 
StopLoss_Short_Adjust = input(0.0, type=input.float) 

VOLUME_CHECK = input(200)

//Custom Time Interval
fromMinute = input(defval = 0, title = "From Minute", minval = 0, maxval = 60)
fromHour = input(defval = 0, title = "From Hour", minval = 0, maxval = 24)
fromDay = input(defval = 1, title = "From Day", minval = 1)
fromMonth = input(defval = 1, title = "From Month", minval = 1)
fromYear = input(defval = 2019, title = "From Year", minval = 1900)
tillMinute = input(defval = 0, title = "Till Minute", minval = 0, maxval = 60)
tillHour = input(defval = 0, title = "Till Hour", minval = 0, maxval = 24)
tillDay = input(defval = 1, title = "Till Day", minval = 1)
tillMonth = input(defval = 1, title = "Till Month", minval = 1)
tillYear = input(defval = 2020, title = "Till Year", minval = 1900)
timestampStart = timestamp(fromYear,fromMonth,fromDay,fromHour,fromMinute)
timestampEnd = timestamp(tillYear,tillMonth,tillDay,tillHour,tillMinute)


//Custom Buy Signal Code --  This is where you design your own buy and sell signals. You now have millions of possibilites with the use of simple if/and/or statements.
if (  dir==1 and dir[1]==-1  and volume > VOLUME_CHECK and ((fsignal[1] -fsignal) <= 0) and  cross(fmacd, smacd) )
    strategy.exit("SELL")
    strategy.entry("BUY", strategy.long)
    strategy.exit("BUY_STOP","BUY", stop = close - StopLoss_Initial_Long)

//Custom Sell Signal Code
if  ( dir == -1 and dir[1] == 1 and dir[2] == 1 and dir[3] == 1 and dir[4] == 1 and  cross(fmacd, smacd) )
    strategy.exit( "BUY")
    strategy.entry("SELL", strategy.short)
    strategy.exit("SELL_STOP","SELL", stop = close + StopLoss_Initial_Short)

//Slight adjustments to ST for fine tuning
if (strategy.opentrades > 0 )
    strategy.exit("BUY_TRAIL_STOP","BUY", stop = longStop - StopLoss_Long_Adjust)
    strategy.exit("SELL_TRAIL_STOP","SELL", stop = shortStop + StopLoss_Short_Adjust)

Mehr