La stratégie de canal de renversement moyen de la CCI

Auteur:ChaoZhang est là., Date: 2023-11-01 16:20:45 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie est conçue comme un système de négociation de tendance flexible basé sur l'indicateur CCI. Elle peut générer des signaux de négociation basés sur des croisements de ligne zéro CCI ou des croisements de bande supérieure / inférieure personnalisés.

La logique de la stratégie

  1. Utiliser les croisements de la ligne zéro du CCI pour déterminer les tendances du marché.

  2. Définissez des bandes CCI personnalisées supérieures et inférieures.

  3. Option de ne négocier que dans des délais spécifiques et de fermer toutes les positions en dehors de ces délais.

  4. Fixez un stop-loss et des pourcentages de profit.

  5. Messages d'alerte personnalisables pour les signaux d'entrée et de sortie.

  6. Stratégie hautement personnalisable avec paramètres, bandes, arrêts, etc. réglables.

Analyse des avantages

  1. L'indice CCI est sensible aux variations de prix et permet de détecter les renversements de tendance.

  2. Les bandes personnalisées peuvent être ajustées pour différents marchés.

  3. Soutenir le commerce dans des délais différents avec des paramètres optimisés en fonction des caractéristiques.

  4. Résultats de l'analyse de risque et de rendement

  5. Des paramètres entièrement personnalisables optimisent la stratégie pour différents produits et conditions de marché.

Analyse des risques

  1. Les CCI sujettes à de faux signaux devraient vérifier les signaux présentant des indicateurs à plus long terme.

  2. Les pourcentages fixes d'arrêt et de prise ne peuvent pas s'adapter à l'évolution des conditions du marché.

  3. Les opérations effectuées dans des délais fixes présentent le risque de manquer des opportunités au cours des périodes d'intervalle.

  4. Des optimisations fréquentes des paramètres peuvent entraîner des transactions excédentaires ou manquantes.

  5. Les facteurs macro doivent être pris en considération, l'optimisation seule ne suffit pas à éliminer les risques.

Directions d'optimisation

  1. Ajouter des indicateurs à plus long terme pour vérifier les signaux CCI.

  2. Incorporer des arrêts/prises dynamiques tels que l'ATR.

  3. Testez les paramètres dans différents délais et trouvez des périodes à haut rendement.

  4. Optimiser les paramètres et les bandes de CCI pour les marchés en évolution.

  5. Envisagez d'intégrer d'autres facteurs comme la volatilité et le volume.

  6. Sélectionnez les délais appropriés pour les produits négociés.

  7. Considérez l'apprentissage automatique pour automatiser les optimisations de stratégie.

Résumé

Dans l'ensemble, il s'agit d'un système de suivi des tendances très flexible et personnalisable. Les principaux avantages sont l'utilisation de l'ICC pour les tendances, des bandes personnalisées pour limiter les risques, des arrêts / prises fixes et la sélection des délais. Il faut surveiller les faux signaux CCI et les arrêts inflexibles.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 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/
// © REV0LUTI0N

//@version=4

strategy(title="CCI Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)


//CCI Code

length = input(20, minval=1, title="CCI Length")
src = input(close, title="Source")
ma = sma(src, length)
cci = (src - ma) / (0.015 * dev(src, length))


// Strategy Backtesting
startDate  = input(timestamp("2099-10-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("9999-12-31T00:00:00"), type = input.time, title='Backtesting End Date')

time_cond  = true


//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = true
timetoclose = true


//Strategy Settings

//Strategy Settings - Enable Check Boxes
enableentry = input(true, title="Enter First Trade ASAP")
enableconfirmation = input(false, title="Wait For Cross To Enter First Trade")
enablezero =input(true, title="Use CCI Simple Cross Line For Entries & Exits")
enablebands = input(false, title="Use Upper & Lower Bands For Entries & Exits")

//Strategy Settings - Band Sources
ccisource = input(0, title="CCI Simple Cross")
upperbandsource =input(100, title="CCI Enter Long Band")
upperbandexitsource =input(100, title="CCI Exit Long Band")
lowerbandsource =input(-100, title="CCI Enter Short Band")
lowerbandexitsource =input(-100, title="CCI Exit Short Band")

//Strategy Settings - Crosses
simplecrossup = crossover(cci, ccisource)
simplecrossdown = crossunder(cci, ccisource)
uppercrossup = crossover(cci, upperbandsource)
lowercrossdown = crossunder(cci, lowerbandsource)
uppercrossdown = crossunder(cci, upperbandexitsource)
lowercrossup = crossover(cci, lowerbandexitsource)
upperstop = crossunder(cci, upperbandsource)
lowerstop = crossover(cci, lowerbandsource)


// Stop Loss & Take Profit % Based
enablesl = input(false, title='Enable Stop Loss')
enabletp = input(false, title='Enable Take Profit')
stopTick = input(5.0, title='Stop Loss %', type=input.float, step=0.1) / 100
takeTick = input(10.0, title='Take Profit %', type=input.float, step=0.1) / 100

longStop = strategy.position_avg_price * (1 - stopTick)
shortStop = strategy.position_avg_price * (1 + stopTick)
shortTake = strategy.position_avg_price * (1 - takeTick)
longTake = strategy.position_avg_price * (1 + takeTick)

plot(strategy.position_size > 0 and enablesl ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesl ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enabletp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enabletp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")


// Alert messages
message_enterlong  = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
    

//Strategy Execution

//Strategy Execution - Simple Line Cross
if (cci > ccisource and enablezero and enableentry and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (cci < ccisource and enablezero and enableentry and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

if (simplecrossup and enablezero and enableconfirmation and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (simplecrossdown and enablezero and enableconfirmation and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

//Strategy Execution - Upper and Lower Band Entry
if (uppercrossup and enablebands and time_cond and timetobuy)
    strategy.entry("Long", strategy.long, alert_message = message_enterlong)
if (lowercrossdown and enablebands and time_cond and timetobuy)
    strategy.entry("Short", strategy.short, alert_message = message_entershort)

//Strategy Execution - Upper and Lower Band Exit
if strategy.position_size > 0 and uppercrossdown and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowercrossup and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Upper and Lower Band Stops
if strategy.position_size > 0 and upperstop and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and lowerstop and enablebands and time_cond and timetobuy
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Close Trade At End Of Time Frame    
if strategy.position_size > 0 and timetoclose and enableclose and time_cond
    strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose and time_cond
    strategy.close_all(alert_message = message_closeshort)

//Strategy Execution - Stop Loss and Take Profit
if strategy.position_size > 0 and enablesl and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enablesl and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)
    
if strategy.position_size > 0 and enabletp and time_cond
    strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_closelong)
if strategy.position_size < 0 and enabletp and time_cond
    strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_closeshort)



Plus de