Stratégie de suivi de l'élan des CCI

Auteur:ChaoZhang est là., Date: 2023-10-25 17h37 et 39 min
Les étiquettes:

img

Résumé

Cette stratégie est basée sur l'indicateur CCI (Commodity Channel Index), visant à aller long dans des conditions de survente et à aller court dans des conditions de surachat. Elle utilise également en option un filtre EMA (Exponential Moving Average) pour ne négocier que dans le sens de la tendance.

La logique de la stratégie

  1. Utiliser l'indicateur CCI pour déterminer l'évolution du marché

    • En outre, la CCI a indiqué que les prix de l'aéroport de Marseille étaient les mêmes que ceux de l'aéroport de Marseille.

    • L'indice CCI supérieur à 150 est un indice de surachat, inférieur à -100 est un indice de survente

  2. Optionnellement utiliser le filtre EMA

    • Passer long uniquement lorsque le prix est au-dessus de l'EMA, et court lorsque celui-ci est en dessous de l'EMA

    • Utiliser l'EMA pour déterminer la direction de la tendance, éviter les transactions contre-tendance

  3. Fournir deux types de stop loss et de prise de profit

    • Pour l'évaluation de la valeur de l'échange, le montant de la valeur de l'échange doit être calculé à partir de la valeur de l'échange.

    • Stop loss et take profit basés sur ATR: Utiliser le multiplicateur ATR pour le stop loss, calculer le take profit basé sur le ratio risque-rendement

  4. Conditions d'entrée

    • Passer à long lorsque l'indice CCI dépasse -100

    • Passer à court lorsque le CCI dépasse 150

    • Si l'EMA est activée, saisir uniquement lorsque le prix se trouve à droite de l'EMA

  5. Conditions de sortie

    • Position close lorsque le stop loss ou le take profit est atteint

    • La position fermée lorsque la CCI rentre dans la région de surachat/survente

  6. Le complot

    • Indicateur graphique CCI, régions à code couleur

Analyse des avantages

  1. Utiliser le CCI suracheté/survendu pour l'entrée, une utilisation classique du CCI

  2. L'EMA facultative assure la négociation avec la tendance, évitant les renversements

  3. Fournir deux types de stop loss/take profit pour une plus grande souplesse

  4. La clôture sur le signal CCI garantit à nouveau un bénéfice de renversement

  5. La cartographie met clairement en évidence les signaux CCI

  6. Logie simple et claire, facile à comprendre et à optimiser

Analyse des risques

  1. L'IRC a un effet de retard, peut manquer des renversements ou donner de faux signaux

  2. Des paramètres EMA erronés peuvent faire oublier les tendances ou rendre la stratégie inefficace

  3. Pourcentage fixe d'arrêt des pertes/prise de bénéfices moins adapté aux variations du marché

  4. ATR stop loss/take profit sensible à la période ATR, devrait optimiser

  5. Risque de tirage plus élevé, dimensionnement des positions doit être ajusté

  6. Les performances varient selon les conditions du marché, réévaluer les paramètres

Directions d'optimisation

  1. Évaluer les périodes CCI pour trouver les combinaisons optimales de paramètres

  2. Testez différentes périodes EMA pour une meilleure estimation de la tendance

  3. Ajuster le ratio stop-loss/take profit pour un ratio de risque-rendement optimal

  4. Ajoutez d'autres filtres comme le volume pour éviter davantage les faux signaux

  5. Combiner avec les lignes de tendance/les schémas graphiques pour confirmer les schémas

  6. Ajouter des règles de dimensionnement de position comme la taille fixe pour contrôler le tirage

  7. Test en arrière-plan dans différentes conditions de marché, ajustement dynamique

Résumé

La stratégie utilise les principes classiques de surachat / survente du CCI pour l'entrée. Le filtre EMA contrôle le trading de tendance. Deux types de stop loss / take profit sont fournis pour la flexibilité.


/*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))


Plus de