Stratégie de suivi de tendance croisée multiple EMA et CCI

EMA CCI
Date de création: 2024-09-26 15:43:50 Dernière modification: 2024-09-26 15:43:50
Copier: 1 Nombre de clics: 215
1
Suivre
1166
Abonnés

Stratégie de suivi de tendance croisée multiple EMA et CCI

Aperçu

Il s’agit d’une stratégie de suivi des tendances basée sur des moyennes mobiles multi-indices (EMA) et des indices de canaux de marchandises (CCI). Cette stratégie utilise des croisements d’EMA sur plusieurs périodes de temps pour identifier les changements de tendance potentiels et, en combinaison avec l’indicateur CCI, pour confirmer l’état de survente ou de survente du marché, ce qui améliore la précision des opportunités d’entrée. La stratégie contient également un mécanisme de stop-loss dynamique basé sur le temps et le prix pour gérer les risques et bloquer les bénéfices.

Principe de stratégie

La stratégie repose principalement sur les éléments clés suivants:

  1. Multiple croisement des EMA: les EMA de 8, 12, 24 et 72 cycles sont utilisés. Lorsque les EMA de courte période ((8, 12, 24) traversent simultanément les EMA de 72 cycles, cela est considéré comme un signal de multiplication potentielle; le contraire est un signal de blanchiment.

  2. Confirmation de l’indicateur CCI: utilisation de l’indicateur CCI à 20 cycles pour confirmer un état de surachat lorsque le CCI est supérieur à 150 et un état de surachat lorsque le CCI est inférieur à 150

  3. Conditions d’entrée :

    • Faire plus: une EMA à courte période est en même temps sur une EMA à 72 périodes, et le CCI est supérieur à 150, le prix est au-dessus de l’EMA à 72 périodes.
    • Faire le vide: EMA à courte période en même temps que 72 cycles EMA, et le CCI inférieur à 150, le prix est inférieur à 72 cycles EMA.
  4. La perte d’arrêt dynamique:

    • Deux modes d’entrée sont configurés: croisement unique et croisement dans une fenêtre de temps.
    • Pour chaque mode d’entrée, définissez un pourcentage de stop-loss différent.
  5. Gestion de position: stratégie de trading en position totale, c’est-à-dire en utilisant 100% des fonds du compte.

Avantages stratégiques

  1. Mécanisme de confirmation multiple: La combinaison de plusieurs indicateurs croisés EMA et CCI réduit efficacement l’impact des faux signaux et améliore la précision d’entrée.

  2. Mécanisme d’entrée flexible: la stratégie prend en compte les cas de croisement ponctuel et de croisement dans la fenêtre de temps, en s’adaptant aux différentes conditions du marché.

  3. Gestion dynamique des risques: un meilleur équilibre entre les gains et les risques est obtenu en réglant différents ratios de stop-loss en fonction des modes d’entrée.

  4. Capacité de suivi des tendances: utilisation de multiples croisements EMA pour capturer efficacement les changements de tendances à moyen et long terme.

  5. Filtrez les chocs: en utilisant les indices CCI pour juger les transactions sur-achat et sur-vente, vous pouvez éviter de faire des transactions fréquentes dans les marchés survolés.

Risque stratégique

  1. Rarité: les EMA et le CCI sont des indicateurs en retard qui peuvent ne pas être assez réactifs dans un marché très volatil.

  2. Fréquence des transactions: Dans les marchés en turbulence, il est possible de générer plus de faux signaux de rupture, ce qui entraîne une fréquence des transactions et une augmentation des frais de traitement.

  3. Risque de prise de position totale: le risque de retrait est plus élevé avec une transaction de prise de position à 100%.

  4. Stop-loss à pourcentage fixe: dans les marchés plus volatiles, un stop-loss à pourcentage fixe peut entraîner une sortie prématurée d’une situation avantageuse.

  5. Dépendance aux données historiques: la performance de la stratégie peut être affectée par les données historiques et nécessite une réoptimisation des paramètres lorsque les conditions du marché évoluent à l’avenir.

Orientation de l’optimisation de la stratégie

  1. Introduction d’un indicateur de volatilité: envisagez d’ajouter un indicateur ATR (Average True Range) qui ajuste le niveau de stop loss en fonction des fluctuations du marché pour s’adapter à différentes conditions du marché.

  2. Optimisation de la gestion des positions: introduction d’un mécanisme de gestion des positions dynamique, permettant d’ajuster la taille des positions en fonction de l’intensité des tendances du marché et de la tolérance au risque du compte.

  3. Ajout de conditions de filtrage: il est possible d’envisager d’ajouter des indicateurs tels que le volume de transactions, l’intensité de la tendance, etc. pour filtrer davantage les signaux de trading et améliorer le taux de victoire.

  4. Optimisation des paramètres: utilisant des méthodes telles que l’algorithme génétique ou la recherche de grille, optimiser les paramètres tels que le cycle EMA, la barre CCI pour améliorer l’adaptabilité de la stratégie dans différents environnements de marché.

  5. Adhésion à l’identification des régimes de marché: développer des modules d’identification des états de marché (trends, tremblements, hautes fluctuations), afin d’ajuster les paramètres de stratégie ou de suspendre les transactions en fonction des différentes conditions du marché.

Résumer

La stratégie de suivi des tendances EMA et CCI est un système de trading quantitatif qui combine l’analyse technique et la gestion des risques dynamiques. Grâce à la combinaison des indicateurs EMA et CCI, la stratégie est capable de capturer efficacement les tendances du marché tout en gérant les risques grâce à des mécanismes d’entrée flexibles et à des arrêts-arrêts dynamiques. Bien que la stratégie présente certains risques inhérents, tels que le retard et le potentiel de retrait élevé des transactions de positions complètes, la stabilité et l’adaptabilité de la stratégie peuvent être considérablement améliorées par d’autres optimisations et améliorations, telles que l’introduction de méthodes d’ajustement des taux de volatilité, de gestion des positions dynamiques et de gestion du régime de marché.

Code source de la stratégie
/*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")