Scalping-Strategie auf Basis von CCI und EMA

Schriftsteller:ChaoZhang, Datum: 2024-01-31 16:01:21
Tags:

img

Übersicht

Dies ist eine kurzfristige Schwingungshandelsstrategie, die den EMA-Indikator und den CCI-Indikator kombiniert, um kurzfristige Trends und Überkauf-/Überverkaufswerte auf dem Markt zu identifizieren, um Chancen aus kurzfristigen Kursschwankungen zu nutzen.

Strategie Logik

Die Strategie verwendet hauptsächlich die 10-tägigen EMA-, 21-tägigen EMA- und 50-tägigen EMA-Linien sowie den CCI-Indikator zur Bestimmung des Ein- und Ausstiegszeitraums.

Die spezifische Logik lautet: Wenn der kurzfristige gleitende Durchschnitt (10-Tage-EMA) über den mittelfristigen gleitenden Durchschnitt (21-Tage-EMA) kreuzt und der kurzfristige gleitende Durchschnitt höher als der langfristige gleitende Durchschnitt (50-Tage-EMA) ist und gleichzeitig der CCI-Indikator größer als 0 ist, gilt dies als ein bullisches Signal, um lang zu gehen. Wenn der kurzfristige gleitende Durchschnitt unter den mittelfristigen gleitenden Durchschnitt kreuzt und der kurzfristige gleitende Durchschnitt niedriger als der langfristige gleitende Durchschnitt ist und gleichzeitig der CCI-Indikator kleiner als 0 ist, gilt dies als ein bärisches Signal, um kurz zu gehen.

Die Exit-Logik besteht darin, die Position zu schließen, wenn der kurzfristige gleitende Durchschnitt den mittelfristigen gleitenden Durchschnitt zurückkreuzt.

Vorteile

  1. Durch die Kombination von gleitendem Durchschnittssystem und CCI-Indikator können kurzfristige Preisentwicklungen und Überkauf-/Überverkaufswerte effektiv ermittelt werden.

  2. Die Verwendung von gleitenden Durchschnittskreuzungen zur Bestimmung von Ein- und Ausgängen ist einfach und praktisch.

  3. CCI-Parameter und Zyklus-Einstellungen sind vernünftiger, um einige falsche Signale auszufiltern.

  4. Durch die Einführung mehrerer Zeitrahmen von gleitenden Durchschnitten können bessere Handelsmöglichkeiten in schwindelnden Märkten geschaffen werden.

Risiken

  1. Große Schwankungen bei kurzfristigen Geschäften können zu aufeinanderfolgenden Stop-Loss führen.

  2. Die falsche Einstellung der CCI-Parameter kann die falschen Signale verstärken.

  3. Während der Perioden der Bandbreite und der Konsolidierung kann diese Strategie auf mehrere kleine Verluste stoßen.

  4. Nur geeignet für kurzfristige häufige Händler, nicht geeignet für langfristige Anlagen.

Die entsprechenden Risikominderungsmaßnahmen umfassen die Optimierung der CCI-Parameter, die Anpassung der Stop-Loss-Position, das Hinzufügen von FILTER-Bedingungen usw.

Optimierungsrichtlinien

  1. Zur Optimierung der Parameter können verschiedene Kombinationen von EMA-Längen getestet werden.

  2. Andere Indikatoren oder Filterbedingungen können hinzugefügt werden, um einige falsche Signale wie MACD, KDJ usw. auszufiltern.

  3. Verwenden Sie dynamischen Stop-Loss, um einzelne Verluste zu kontrollieren.

  4. Durch die Kombination von Trendindikatoren mit höheren Zeitrahmen kann vermieden werden, dass der Handel gegen den Trend verläuft.

Schlussfolgerung

Insgesamt handelt es sich um eine typische kurzfristige Oszillationsstrategie, die die Überschneidung gleitender Durchschnittslinien in Kombination mit dem Überkauf-/Überverkaufsstatus des CCI-Indikators verwendet, um kurzfristige Umkehrmöglichkeiten zu erfassen.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")

Mehr