Kombinierte Momentum-Trading-Strategie von STEM und MATCS


Erstellungsdatum: 2023-09-15 16:22:48 zuletzt geändert: 2023-09-15 16:22:48
Kopie: 0 Klicks: 655
1
konzentrieren Sie sich auf
1617
Anhänger

Die Strategie wird als STEM und MATCS kombinierte dynamische Handelsstrategie bezeichnet. Die Strategie verwendet die Supertrend-Indikatoren in Kombination mit MACD-Indikatoren, um ein Handelssignal zu erzeugen.

Wie funktioniert die Strategie:

  1. Die Berechnung des Supertrend-Indikators erzeugt ein Kauf- und Verkaufssignal, wenn sich der Preis dreht.
  2. Berechnen Sie die Schnell-, Mittel- und Langzeilinie des MACD-Indikators. Es wird ein Kaufsignal erzeugt, wenn die Schnelllinie die Mittellinie überschreitet, und ein Verkaufssignal, wenn die Schnelllinie die Mittellinie unterschreitet.
  3. In Kombination mit den Indikatoren Supertrend und MACD wird nur dann zugelassen, wenn beide gleichzeitig signalisiert werden.
  4. Die dynamische Stop-Loss-Berechnung wird mit dem ATR-Indikator berechnet.

Spezifische Handelsregeln:

  1. Wenn der Supertrend umschlägt und der MACD die mittlere Linie überquert, wird ein Plus eingegeben.
  2. Eintritt in den Short-Trend, wenn der Supertrend umkehrt und die MACD-Schnelllinie unter die Mittellinie fällt.
  3. Die Bedingungen für die Ausgleichsposition sind: Stop-Loss oder Stop-Out (optional).

Die Vorteile der Strategie:

  1. Die Kombination mehrerer Indikatoren erhöht die Signalgenauigkeit.
  2. Die Dynamische Stop-Loss-Regelung beschränkt die individuellen Verluste.
  3. Es ist ein Trend-Tracking- und Reverse-Trading-System.

Die Risiken dieser Strategie:

  1. Supertrend und MACD-Indikator Parameter sind falsch eingestellt und können falsche Signale erzeugen.
  2. Der Stopppunkt ist zu nahe und kann häufig gestoppt werden.
  3. Die Transaktionsgebühren und die Gleitpunkte beeinflussen die Gewinne.

Zusammenfassend kann man sagen, dass die Kombination von STEM- und MATCS-Portfolio-Dynamik-Strategien durch die Integration von Indikatoren zur Steigerung der Effektivität geeignet sind. Sie sind für den Handel mit Short- und Mid-Line-Trading geeignet. Die Anwendung von Stop-Loss-Strategien ist von entscheidender Bedeutung, um das Risiko zu kontrollieren.

Strategiequellcode
/*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)