Kurzfristige Handelsstrategie mit Doppel gleitendem Durchschnitt und MACD-Kombination

Schriftsteller:ChaoZhang, Datum: 2023-10-09 16.47:42
Tags:

Übersicht

Diese Strategie kombiniert zwei gleitende Durchschnitte, den stochastischen Indikator und den MACD, um kurzfristige Handelsmöglichkeiten zu identifizieren, was eine relativ klassische kurzfristige Handelsstrategie ist.

Grundsätze

Die Strategie beruht hauptsächlich auf folgenden Grundsätzen:

  1. Die EMA mit einer kürzeren Periode kann schnell auf Kursänderungen reagieren. Die Überschreitung der 50-Perioden-EMA über die 100-Perioden-EMA bedeutet die Einrichtung einer Long-Position; die Überschreitung nach unten bedeutet die Einrichtung einer Short-Position.

  2. Verwenden Sie die Differenz zwischen MACD, um Ein- und Ausstiegspunkte zu bestimmen. Wenn die Differenz über 0 geht, zeigt sie eine Stärkung der Bullenkraft und führt zu einem Long-Entry; wenn sie unter 0 geht, zeigt sie eine Stärkung der Bärenkraft und führt zu einem Short-Entry.

  3. Kombinieren Sie den stochastischen RSI-Indikator, um überkaufte und überverkaufte Situationen zu beurteilen. Dieser Indikator kombiniert die Vorteile von KDJ und RSI und kann überkaufte und überverkaufte Bedingungen gut zeigen. Wenn er unter 20 liegt, ist der Markt überverkauft, und ein Long-Entry kann als Kombination anderer Indikatoren betrachtet werden; wenn er höher als 80 ist, ist der Markt überkauft und ein Short-Entry kann in Betracht gezogen werden.

  4. Wenn nach der Bestimmung der Eintrittsrichtung 4 der letzten 5 Kerzenhölzer Schlusskurs haben, der die gleitenden Durchschnitte berührt, zeigt dies, dass Unterstützung/Widerstand um die gleitenden Durchschnitte herum besteht und Positionen geöffnet werden können.

  5. Verwenden Sie Stop Loss und Take Profit, um Risiken zu managen.

Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Die Kombination mehrerer Indikatoren verbessert die Gewinnrate, indem sie gleitende Durchschnitte, den Überkauf/Überverkaufsindicator und den Momentum-Indikator zusammen nutzt.

  2. Die kurzfristigen gleitenden Durchschnitte können Trends und Umkehrungen schnell erfassen.

  3. Die Stochastischen RSI-Parameter sind so optimiert, dass überkaufte/überverkaufte Bedingungen gut erkannt werden können.

  4. Die Verwendung von Unterstützung/Widerstand um gleitende Durchschnitte für die Zeitkontrolle verhindert, dass Sie von gefälschten Ausbrüchen gefangen werden.

  5. Ein angemessener Stop Loss und Take Profit kontrolliert die Risiken für jeden Handel effektiv.

Risiken

Diese Strategie birgt auch einige Risiken:

  1. Nicht vollständig verhindern Verluste durch gefälschte Ausbrüche verursacht.

  2. Es kann zwischen den Indikatoren Abweichungen auftreten, die zu inkonsistenten Handelssignalen führen.

  3. Festgesetzte Stop-Loss- und Take-Profit-Systeme können sich nicht an Marktveränderungen anpassen.

  4. Der komplexe Code mit vielen Parametern ist schwer zu optimieren.

Die Lösungen sind:

  1. Optimieren Sie die Parameter, um die Signalqualität zu verbessern und die Wahrscheinlichkeit eines falschen Ausbruchs zu senken.

  2. Prioritäten zwischen den Indikatoren festlegen, um Konflikte zu vermeiden.

  3. Ein dynamischer Stop-Loss und Gewinngewinn auf Basis von ATR-Bereichen.

  4. Vereinfachen Sie die Logik und extrahieren Sie Kernparameter für Tests und Optimierungen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Testen und finden Sie die optimalen Kombinationen von gleitenden Durchschnittsperioden und MACD-Parametern.

  2. Verschiedene Indikatoren für Überkauf/Überverkauf testen, um den Stochastic RSI zu ersetzen.

  3. Versuchen Sie dynamischen Stop-Loss und Take-Profit, Trailing-Stop, um das Risikomanagement intelligenter zu gestalten.

  4. Fügen Sie Filterbedingungen hinzu, wie zum Beispiel die Erhöhung der Lautstärke, um die Signalqualität zu verbessern.

  5. Optimieren Sie die Eintrittslogik, um ineffektive Ausbrüche zu vermeiden, und verwenden Sie mehr Indikatoren, um den Trend zu bestimmen.

  6. Setzen Sie Stop-Loss-Limits nach Kontogröße, Anzahl der Trades pro Tag, um das Gesamtrisiko zu kontrollieren.

Zusammenfassung

Diese Strategie integriert die Vorteile mehrerer Indikatoren und ist für den kurzfristigen Handel sehr praktisch. Durch kontinuierliche Optimierung der Parameter, strenge Einstiegslogik und verbessertes Risikomanagement können die Stabilität und Rentabilität weiter gesteigert werden. Sie eignet sich für kurzfristige Trader mit etwas Erfahrung, aber Risiken müssen kontrolliert werden, um riesige Verluste zu vermeiden.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )

Mehr