Die Ressourcen sind geladen. Beförderung...

Die Strategie für den Crossover zwischen Multi-EMA und CCI

Schriftsteller:ChaoZhang, Datum: 2024-09-26
Tags:EMACCI

img

Übersicht

Dies ist eine Trendfolgestrategie, die auf mehreren exponentiellen gleitenden Durchschnitten (EMA) und dem Commodity Channel Index (CCI) basiert. Die Strategie nutzt EMA-Crossovers aus mehreren Zeiträumen, um potenzielle Trendänderungen zu identifizieren, kombiniert mit dem CCI-Indikator, um überkaufte oder überverkaufte Marktbedingungen zu bestätigen, wodurch die Genauigkeit des Eintrittszeitpunkts verbessert wird. Die Strategie umfasst auch dynamische Profit- und Stop-Loss-Mechanismen, die auf Zeit und Preis basieren, um Risiken zu managen und Gewinne zu erzielen.

Strategieprinzipien

Die Strategie beruht in erster Linie auf folgenden Schlüsselelementen:

  1. Mehrfache EMA-Kreuzungen: Verwendet 8, 12, 24 und 72-Perioden-EMA. Wenn kürzere EMAs (8, 12, 24) gleichzeitig über die 72-Perioden-EMA kreuzen, gilt dies als potenzielles Long-Signal; das Gegenteil gilt für Kurzsignale.

  2. Nachweis des CCI-Indikators: Der CCI-Indikator mit 20 Perioden wird verwendet, um zu bestätigen, ob der CCI-Index über 150 liegt und unter -150 liegt.

  3. Eintrittsbedingungen:

    • Lang: Kurzfristige EMA überschreiten gleichzeitig die 72-Fristige EMA, der CCI liegt über 150 und der Preis liegt über der 72-Fristigen EMA.
    • Kurz: Kurzfristige EMA-Werte liegen gleichzeitig unter der 72-Perioden-EMA, der CCI liegt unter -150 und der Preis unter der 72-Perioden-EMA.
  4. Dynamische Gewinn- und Stop-Loss-Aktivitäten:

    • Setzt zwei Einstiegsmodi ein: einmaliges Crossover und Crossover innerhalb eines Zeitfensters.
    • Die Prozentsätze für Take-Profit und Stop-Loss werden je nach Einstiegsmodus unterschiedlich festgelegt.
  5. Positionsmanagement: Die Strategie setzt vollständigen Positionshandel ein, wobei 100% der Kontomittel für den Handel verwendet werden.

Strategische Vorteile

  1. Mehrfacher Bestätigungsmechanismus: Die Kombination von mehreren EMA-Kreuzungen und dem CCI-Indikator verringert effektiv die Auswirkungen falscher Signale und verbessert die Eingabegenauigkeit.

  2. Flexibler Eintrittsmechanismus: Die Strategie berücksichtigt sowohl einmalige Crossovers als auch Crossovers innerhalb eines Zeitfensters, die sich an unterschiedliche Marktumgebungen anpassen.

  3. Dynamisches Risikomanagement: Auf der Grundlage verschiedener Einstiegsmodi, besserer Ausgleichsrenditen und Risiken werden unterschiedliche Take-Profit- und Stop-Loss-Verhältnisse festgelegt.

  4. Trendverfolgungsfähigkeit: Nutzt mehrere EMA-Kreuzungen, um mittelfristige bis langfristige Trendänderungen effektiv zu erfassen.

  5. Filterung von unruhigen Märkten: Die Überkauf- und Überverkaufsschätzungen des CCI-Indikators tragen dazu bei, häufige Geschäfte in seitlichen, unruhigen Märkten zu vermeiden.

Strategische Risiken

  1. Verzögerung: Sowohl die EMA als auch der CCI sind Verzögerungsindikatoren, die auf volatile Märkte möglicherweise nicht schnell genug reagieren.

  2. Häufiger Handel: Auf unruhigen Märkten kann es viele falsche Ausbruchssignale erzeugen, was zu häufigem Handel und erhöhten Transaktionskosten führt.

  3. Voller Positionsrisiko: Der Einsatz von 100% Positionshandel kann erhebliche Zugriffsrisiken mit sich bringen.

  4. Festprozentualer Stop-Loss: In stark volatilen Märkten können festprozentuelle Stop-Losss günstige Trends zu früh verlassen.

  5. Abhängigkeit von historischen Daten: Die Strategieleistung kann von historischen Daten beeinflusst werden und muss möglicherweise bei zukünftigen Marktverhältnissen neu optimiert werden.

Strategieoptimierungsrichtlinien

  1. Einführung von Volatilitätsindikatoren: Erwägen Sie, den Indikator ATR (Average True Range) hinzuzufügen, um die Gewinn- und Stop-Loss-Level anhand der Marktvolatilität anzupassen und sich an verschiedene Marktumgebungen anzupassen.

  2. Optimierung des Positionsmanagements: Einführung dynamischer Positionsmanagementmechanismen zur Anpassung der Positionsgröße anhand der Trendstärke und der Risikotoleranz des Kontos.

  3. Hinzufügen von Filterbedingungen: Erwägen Sie, Indikatoren wie Volumen und Trendstärke hinzuzufügen, um Handelssignale weiter zu filtern und die Gewinnraten zu verbessern.

  4. Optimierung von Parametern: Verwenden Sie genetische Algorithmen oder Netzwerksuchmethoden zur Optimierung von Parametern wie EMA-Perioden und CCI-Schwellenwerten, um die Anpassungsfähigkeit der Strategie in verschiedenen Marktumgebungen zu verbessern.

  5. Hinzufügen von Marktregime-Erkennung: Entwicklung eines Marktzustand-Erkennungsmoduls (Trend, Unruhe, hohe Volatilität), um Strategieparameter anzupassen oder den Handel auf der Grundlage verschiedener Marktzustände zu pausieren.

Zusammenfassung

Die Multi-EMA und CCI Crossover Trend Following Strategie ist ein quantitatives Handelssystem, das technische Analyse mit dynamischem Risikomanagement kombiniert. Durch die Kombination von mehreren EMA-Crossovers und dem CCI-Indikator kann diese Strategie Markttrends effektiv erfassen und gleichzeitig das Risiko durch flexible Einstiegsmechanismen und dynamische Take-Profit- und Stop-Loss-Einstellungen managen. Obwohl die Strategie einige inhärente Risiken wie Verzögerung und potenzielle hohe Abzüge aus dem Handel mit voller Position aufweist, kann sie durch weitere Optimierungen und Verbesserungen wie die Einführung von Volatilitätsanpassungen, dynamisches Positionsmanagement und Markterkennung die Stabilität und Anpassungsfähigkeit erheblich verbessern. Insgesamt handelt es sich um einen Rahmen für eine Strategie mit einer soliden Grundlage und dem Potenzial, stabile Renditen in verschiedenen Marktumgebungen zu generieren.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-09-24 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA & CCI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Параметры EMA
ema8_length = 8
ema12_length = 12
ema24_length = 24
ema72_length = 72

// Расчет EMA
ema8 = ta.ema(close, ema8_length)
ema12 = ta.ema(close, ema12_length)
ema24 = ta.ema(close, ema24_length)
ema72 = ta.ema(close, ema72_length)

// Параметры CCI
cci_length = 20
cci_overbought = 150
cci_oversold = -150

// Параметры тейк-профита и стоп-лосса
takeProfitPercent = input.float(1.5, title="Take Profit (%)", step=0.1)
stopLossPercent = input.float(0.5, title="Stop Loss (%)", step=0.1)
takeProfitPercentTime = input.float(0.5, title="Take Profit (%) for Time-based", step=0.1)
stopLossPercentTime = input.float(0.2, title="Stop Loss (%) for Time-based", step=0.1)
max_wait_bars = input.float(2, title="Max wait candles", step=1)
// Расчет CCI
cci = ta.cci(close, cci_length)

// Состояние открытой позиции
sz = strategy.position_size

// Флаги для отслеживания пересечений EMA вверх
var int ema8_cross_index_up = na
var int ema12_cross_index_up = na
var int ema24_cross_index_up = na

// Флаги для отслеживания пересечений EMA вниз
var int ema8_cross_index_down = na
var int ema12_cross_index_down = na
var int ema24_cross_index_down = na

// Проверка пересечения EMA с 72 вверх и обновление индекса пересечения
if (ta.crossover(ema8, ema72))
    ema8_cross_index_up := bar_index
if (ta.crossover(ema12, ema72))
    ema12_cross_index_up := bar_index
if (ta.crossover(ema24, ema72))
    ema24_cross_index_up := bar_index

// Проверка пересечений EMA вниз и обновление индекса пересечения
if (ta.crossunder(ema8, ema72))
    ema8_cross_index_down := bar_index
if (ta.crossunder(ema12, ema72))
    ema12_cross_index_down := bar_index
if (ta.crossunder(ema24, ema72))
    ema24_cross_index_down := bar_index

// Условия пересечения за одну свечу (лонг и шорт)
cross_condition_one_candle_long = (na(ema8_cross_index_up) == false and (bar_index - ema8_cross_index_up) == 0) and
                                  (na(ema12_cross_index_up) == false and (bar_index - ema12_cross_index_up) == 0) and
                                  (na(ema24_cross_index_up) == false and (bar_index - ema24_cross_index_up) == 0)

cross_condition_one_candle_short = (na(ema8_cross_index_down) == false and (bar_index - ema8_cross_index_down) == 0) and
                                   (na(ema12_cross_index_down) == false and (bar_index - ema12_cross_index_down) == 0) and
                                   (na(ema24_cross_index_down) == false and (bar_index - ema24_cross_index_down) == 0)

// Условия пересечения в течение указанного времени (лонг и шорт)
cross_condition_within_time_long = (not na(ema8_cross_index_up) and (bar_index - ema8_cross_index_up) <= max_wait_bars) and
                                   (not na(ema12_cross_index_up) and (bar_index - ema12_cross_index_up) <= max_wait_bars) and
                                   (not na(ema24_cross_index_up) and (bar_index - ema24_cross_index_up) <= max_wait_bars)

cross_condition_within_time_short = (not na(ema8_cross_index_down) and (bar_index - ema8_cross_index_down) <= max_wait_bars) and (not na(ema12_cross_index_down) and (bar_index - ema12_cross_index_down) <= max_wait_bars) and (not na(ema24_cross_index_down) and (bar_index - ema24_cross_index_down) <= max_wait_bars)

// Условие для открытия лонга
long_condition_one = cross_condition_one_candle_long and cci > cci_overbought and close > ema72
long_condition_time = cross_condition_within_time_long and cci > cci_overbought and close > ema72

// Условие для открытия шорта
short_condition_one = cross_condition_one_candle_short and cci < cci_oversold and close < ema72
short_condition_time = cross_condition_within_time_short and cci < cci_oversold and close < ema72

// Вход в лонг
if (long_condition_one and sz == 0)
    strategy.entry(id='Long_one', direction=strategy.long)

if (long_condition_time and sz == 0)
    strategy.entry(id='Long_time', direction=strategy.long)

// Вход в шорт
if (short_condition_one and sz == 0)
    strategy.entry(id='Short_one', direction=strategy.short)

if (short_condition_time and sz == 0)
    strategy.entry(id='Short_time', direction=strategy.short)

// Вычисление цен тейк-профита и стоп-лосса для лонга
if (sz > 0 and strategy.opentrades.entry_id(0) == 'Long_one')
    entryPriceLong = strategy.opentrades.entry_price(0)
    takeProfitPriceLong = entryPriceLong * (1 + takeProfitPercent / 100)
    stopLossPriceLong = entryPriceLong * (1 - stopLossPercent / 100)
    strategy.exit("Close long one", "Long_one", limit=takeProfitPriceLong, stop=stopLossPriceLong)
    ema8_cross_index_up := na
    ema12_cross_index_up := na
    ema24_cross_index_up := na

if (sz > 0 and strategy.opentrades.entry_id(0) == 'Long_time')
    entryPriceLongTime = strategy.opentrades.entry_price(0)
    takeProfitPriceLongTime = entryPriceLongTime * (1 + takeProfitPercentTime / 100)
    stopLossPriceLongTime = entryPriceLongTime * (1 - stopLossPercentTime / 100)
    strategy.exit("Close long time", "Long_time", limit=takeProfitPriceLongTime, stop=stopLossPriceLongTime)
    ema8_cross_index_up := na
    ema12_cross_index_up := na
    ema24_cross_index_up := na

// Вычисление цен тейк-профита и стоп-лосса для шорта
if (sz < 0 and strategy.opentrades.entry_id(0) == 'Short_one')
    entryPriceShort = strategy.opentrades.entry_price(0)
    takeProfitPriceShort = entryPriceShort * (1 - takeProfitPercent / 100)
    stopLossPriceShort = entryPriceShort * (1 + stopLossPercent / 100)
    strategy.exit("Close short one", "Short_one", limit=takeProfitPriceShort, stop=stopLossPriceShort)
    ema8_cross_index_down := na
    ema12_cross_index_down := na
    ema24_cross_index_down := na

if (sz < 0 and strategy.opentrades.entry_id(0) == 'Short_time')
    entryPriceShortTime = strategy.opentrades.entry_price(0)
    takeProfitPriceShortTime = entryPriceShortTime * (1 - takeProfitPercentTime / 100)
    stopLossPriceShortTime = entryPriceShortTime * (1 + stopLossPercentTime / 100)
    strategy.exit("Close short time", "Short_time", limit=takeProfitPriceShortTime, stop=stopLossPriceShortTime)
    ema8_cross_index_down := na
    ema12_cross_index_down := na
    ema24_cross_index_down := na

// Отображение EMA на графике
plot(ema8, title="EMA 8", color=color.blue, linewidth=2)
plot(ema12, title="EMA 12", color=color.orange, linewidth=2)
plot(ema24, title="EMA 24", color=color.green, linewidth=2)
plot(ema72, title="EMA 72", color=color.red, linewidth=2)

// Вывод CCI в подвале
//plot(cci, title="CCI", color=color.purple)
//hline(100, "CCI 150", color=color.green)
//hline(-100, "CCI -150", color=color.red)
//hline(0, "CCI 0", color=color.gray)


// Отладочная информация
//plotshape(series=long_condition_one, location=location.belowbar, color=color.lime, style=shape.labelup, title="Long Condition")
//plotshape(series=cross_condition_one_candle_long, location=location.belowbar, color=color.blue, style=shape.triangleup, title="Cross Condition Long")
//plotshape(series=long_condition_time, location=location.belowbar, color=#e6d700, style=shape.labelup, title="Long Condition Time")
//plotshape(series=cross_condition_within_time_long, location=location.belowbar, color=#a21dbd, style=shape.triangleup, title="Cross Condition Time Long")
//plotshape(series=short_condition_one, location=location.abovebar, color=color.red, style=shape.labeldown, title="Short Condition")
//plotshape(series=cross_condition_one_candle_short, location=location.abovebar, color=color.blue, style=shape.triangledown, title="Cross Condition Short")
//plotshape(series=short_condition_time, location=location.abovebar, color=#e6d700, style=shape.labeldown, title="Short Condition Time")
//plotshape(series=cross_condition_within_time_short, location=location.abovebar, color=#a21dbd, style=shape.triangledown, title="Cross Condition Time Short")


Verwandt

Mehr