Strategie für die Überwachung der Dynamik der CCI

Schriftsteller:ChaoZhang, Datum: 2023-10-25 17:37:39
Tags:

img

Übersicht

Diese Strategie basiert auf dem Commodity Channel Index (CCI) Indikator und zielt darauf ab, bei Überverkaufszuständen lang zu gehen und bei Überkaufszuständen kurz zu gehen. Es verwendet auch optional einen Exponential Moving Average (EMA) -Filter, um nur in Richtung des Trends zu handeln. Die Strategie bietet auch einen festen Prozentsatz oder einen durchschnittlichen wahren Bereich (ATR) basierende Stop-Loss und Take-Profit.

Strategie Logik

  1. Verwendung des CCI-Indikators zur Ermittlung der Marktentwicklung

    • Die Kommission stellt fest, dass die in den Erwägungsgründen 24 und 25 genannten Maßnahmen nicht in Frage kommen.

    • CCI über 150 ist überkauft, unter -100 ist überverkauft

  2. Optional EMA-Filter verwenden

    • Nur lang gehen, wenn der Preis über der EMA liegt, und kurz gehen, wenn er unter der EMA liegt

    • Verwenden Sie die EMA, um die Trendrichtung zu bestimmen, vermeiden Sie den gegentrendischen Handel

  3. Zwei Arten von Stop Loss und Take Profit

    • Festprozentualer Stop-Loss- und Take-Profit-Basis: Festprozentualer Einstiegspreis

    • ATR-basierte Stop-Loss und Take-Profit: Verwenden Sie den ATR-Multiplikator für den Stop-Loss, berechnen Sie die Take-Profit-Bilanz basierend auf der Risikovergütungsquote

  4. Eingangsbedingungen

    • Bei einer Überschreitung des CCI über -100 geht man lang

    • Wenn der CCI unter 150 fällt, kurz gehen

    • Wenn EMA aktiviert ist, wird nur eingegeben, wenn sich der Preis auf der rechten Seite der EMA befindet

  5. Ausgangsbedingungen

    • Schließung der Position, wenn ein Stop-Loss oder ein Take-Profit erreicht wird

    • Schließung der Position, wenn die CCI wieder in die Überkauf-/Überverkaufsregion eintritt

  6. Planung

    • Grafik CCI-Indikator, Farbcodes

Analyse der Vorteile

  1. Bei der Ermittlung der Höhe des Zinssatzes wird der Zinssatz für die Ermittlung der Zinssätze für die Ermittlung des Zinssatzes für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze für die Ermittlung der Zinssätze.

  2. Optionale EMA sorgt dafür, dass der Handel mit dem Trend abläuft und Rückschläge vermieden werden

  3. Für die Flexibilität sind zwei Arten von Stop-Loss/Take-Profit vorgesehen

  4. Schließung des CCI-Signals wieder ein Rücklaufgewinn

  5. Die Grafik zeigt die CCI-Signale deutlich.

  6. Einfache und klare Logik, leicht zu verstehen und zu optimieren

Risikoanalyse

  1. CCI hat eine verzögerte Wirkung, kann Umkehrungen verpassen oder falsche Signale geben

  2. Falsche EMA-Parameter können Trends verpassen oder die Strategie unwirksam machen

  3. Festes Stop-Loss-/Take-Profit-Prozentsatz, das sich weniger an Marktveränderungen anpasst

  4. Die ATR-Stop-Loss-/Take-Profit-Regelung, die für die ATR-Periode sensibel ist, sollte die

  5. Größeres Zugriffsrisiko, Anpassung der Positionsgröße

  6. Leistung variiert je nach Marktbedingungen, Parameter neu bewerten

Optimierungsrichtlinien

  1. Bewertung von CCI-Perioden zur Suche nach optimalen Parameterkombinationen

  2. Versuche verschiedene EMA-Perioden für die beste Trendschätzung

  3. Anpassung des Stop-Loss-/Take-Profit-Verhältnisses für eine optimale Risikovergütung

  4. Fügen Sie andere Filter wie Lautstärke hinzu, um weitere falsche Signale zu vermeiden

  5. Kombination mit Trendlinien/Chartmustern zur Musterbestätigung

  6. Hinzufügen von Positionsgrößenregeln wie feste Größe zur Steuerung des Drawdowns

  7. Backtest unter verschiedenen Marktbedingungen, dynamische Anpassung

Zusammenfassung

Die Strategie nutzt die klassischen CCI-Überkauft/Überverkauft-Prinzipien für den Einstieg. Der EMA-Filter steuert den Trendhandel. Zwei Arten von Stop-Loss/Take-Profit sorgen für Flexibilität. Das Ploten hebt Signale klar hervor. Einfache und klare Logik, leicht zu verstehen und zu optimieren. Weitere Verbesserungen können durch Parameter-Tuning, Hinzufügen von Filtern, Risikokontrolle usw. vorgenommen werden.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 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/
// © alifer123

//@version=5
// strategy("CCI+EMA Strategy with Percentage or ATR TP/SL [Alifer]", shorttitle = "CCI_EMA_%/ATR_TP/SL", overlay=false,
//      initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.045)

length = input(14, "CCI Length")
overbought = input.int(150, step = 10, title = "Overbought")
oversold = input.int(-140, step = 10, title = "Oversold")
src = hlc3
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))

// EMA
useEMA = input(true, "Use EMA", tooltip = "Only enters long when price is above the EMA, only enters short when price is below the EMA")
emaLength = input(55, "EMA Length")
var float ema = na
if useEMA
    ema := ta.ema(src, emaLength)

// Take Profit and Stop Loss Method
tpSlMethod_percentage = input(true, "Percentage TP/SL", group="TP/SL Method")
tpSlMethod_atr = input(false, "ATR TP/SL", group="TP/SL Method")

// Percentage-based Take Profit and Stop Loss
tp_percentage = input.float(10.0, title="Take Profit (%)", step=0.1, group="TP/SL Method")
sl_percentage = input.float(10.0, title="Stop Loss (%)", step=0.1, group="TP/SL Method")

// ATR-based Take Profit and Stop Loss
atrLength = input(20, title="ATR Length", group="TP/SL Method")
atrMultiplier = input(4, title="ATR SL Multiplier", group="TP/SL Method")
riskRewardRatio = input(2, title="Risk Reward Ratio", group="TP/SL Method")

// Calculate TP/SL levels based on the selected method, or leave them undefined if neither method is selected
longTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 + tp_percentage / 100) : na
longSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 - sl_percentage / 100) : na
shortTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 - tp_percentage / 100) : na
shortSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 + sl_percentage / 100) : na

if tpSlMethod_atr
    longSL := strategy.position_avg_price - ta.atr(atrLength) * atrMultiplier
    longTP := ((strategy.position_avg_price - longSL) * riskRewardRatio) + strategy.position_avg_price
    shortSL := strategy.position_avg_price + ta.atr(atrLength) * atrMultiplier
    shortTP := ((strategy.position_avg_price - shortSL) * riskRewardRatio) - strategy.position_avg_price

// Enter long position when CCI crosses below oversold level and price is above EMA
longCondition = ta.crossover(cci, oversold) and (not useEMA or close > ema)
if longCondition
    strategy.entry("Buy", strategy.long)

// Enter short position when CCI crosses above overbought level and price is below EMA
shortCondition = ta.crossunder(cci, overbought) and (not useEMA or close < ema)
if shortCondition
    strategy.entry("Sell", strategy.short)

// Close long positions with Take Profit or Stop Loss
if strategy.position_size > 0
    strategy.exit("Long Exit", "Buy", limit=longTP, stop=longSL)

// Close short positions with Take Profit or Stop Loss
if strategy.position_size < 0
    strategy.exit("Short Exit", "Sell", limit=shortTP, stop=shortSL)

// Close positions when CCI crosses back above oversold level in long positions or below overbought level in short positions
if ta.crossover(cci, overbought)
    strategy.close("Buy")
if ta.crossunder(cci, oversold)
    strategy.close("Sell")

// Plotting
color_c = cci > overbought ? color.red : (cci < oversold ? color.green : color.white)
plot(cci, "CCI", color=color_c)
hline(0, "Middle Band", color=color.new(#787B86, 50))
obband = hline(overbought, "OB Band", color=color.new(#78867a, 50))
osband = hline(oversold, "OS Band", color=color.new(#867878, 50))
fill(obband, osband, color=color.new(#787B86, 90))


Mehr