La stratégie de rupture de la ligne K.

Auteur:ChaoZhang est là., Date: 2023-10-07 15h59 et 26h
Les étiquettes:

Résumé

La stratégie de rupture de la ligne K de Choppiness est une stratégie de trading quantitative qui utilise des modèles de ligne K et des indicateurs de dynamique pour déterminer les entrées et les sorties pour le trading d'actions.

La logique de la stratégie

Les concepts de base de la stratégie Choppiness K-line Breakthrough sont les suivants:

  1. Utilisation de l'indice des canaux de produits de base (ICC) pour déterminer si les prix se situent dans des zones de surachat ou de survente.

  2. Identification des modèles de ligne K pour détecter les signaux de percée. Une ligne K rouge avec une fermeture supérieure à l'ouverture indique une tendance haussière, tandis qu'une ligne K verte qui se ferme inférieure à l'ouverture indique une tendance à la baisse.

  3. Incorporer le volume de négociation pour ne considérer que les signaux d'achat et de vente lorsque le volume augmente.

  4. Prendre des positions longues lorsqu'une tendance haussière est identifiée et que le CCI indique une survente. Prendre des positions courtes lorsqu'une tendance baissière est identifiée et que le CCI indique une surachat.

  5. Définition des points stop-loss et profit pour contrôler les risques et verrouiller les bénéfices.

Plus précisément, la stratégie utilise l'ICC pour l'analyse de la surachat/survente, les modèles de la ligne K pour la direction de la tendance et le volume pour l'élan.

Analyse des avantages

La stratégie de percée de la ligne K de Choppiness présente les avantages suivants:

  1. La combinaison de plusieurs indicateurs améliore la fiabilité des signaux de négociation.

  2. L'utilisation de modèles de ligne K aide à identifier avec précision les renversements de tendance.

  3. Le stop loss et le take profit contrôlent efficacement les risques et bloquent les bénéfices.

  4. Seul le fait de prendre en considération les signaux sur le volume en augmentation évite de faux signaux.

  5. La logique de la stratégie est claire et les paramètres sont flexibles pour optimiser les actions et les environnements de marché.

  6. La stratégie peut être encore améliorée grâce à davantage de facteurs, à l'apprentissage automatique, etc., améliorant ainsi la stabilité et la rentabilité.

Analyse des risques

Les risques potentiels de la stratégie sont les suivants:

  1. Les signaux CCI peuvent être retardés, ce qui entraîne des points d'entrée optimaux manqués.

  2. Les fausses ruptures dans les modèles de ligne K peuvent entraîner des pertes inutiles.

  3. Les augmentations de volume pourraient également être manipulées, il est donc important de surveiller les divergences volume/prix.

  4. Le stop loss/take profit statique peut sortir plus tôt ou manquer d'autres tendances.

  5. Les paramètres fixés pour un stock peuvent ne pas convenir à d'autres.

  6. Les résultats des tests peuvent ne pas correspondre aux performances en direct.

Directions d'optimisation

La stratégie peut être renforcée par:

  1. Optimisation des paramètres CCI pour une génération de signal plus rapide.

  2. Ajouter plus d'indicateurs comme le MACD, les bandes de Bollinger pour améliorer la précision du signal.

  3. Utiliser des modèles d'apprentissage automatique formés sur des données historiques pour prédire les points d'entrée/sortie.

  4. Utilisation de stop loss dynamiques et prise de profit basée sur la volatilité du marché.

  5. Amélioration de la logique de la montée en volume pour détecter la divergence volume-prix.

  6. Adaptation des paramètres des différents stocks et régimes de marché pour améliorer la stabilité.

  7. Incorporation de mécanismes de suivi des tendances pour une meilleure performance à tous les stades du marché.

  8. Modularisation de la stratégie pour une plus grande souplesse et extensibilité.

Conclusion

La stratégie Choppiness K-line Breakthrough est une stratégie de trading à court terme relativement simple. Elle combine des indicateurs techniques communs pour une logique claire et un contrôle des risques via un stop loss et un take profit. La stratégie peut être optimisée de manière flexible en fonction des besoins pour capturer les inversions à court terme et les tendances à moyen terme.


/*backtest
start: 2023-09-06 00:00:00
end: 2023-10-06 00:00:00
period: 2h
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/
// © vikris

//@version=4
strategy("[VJ]War Machine PAT Intra", overlay=true, calc_on_every_tick = false)

// ********** Strategy inputs - Start **********

// Used for intraday handling
// Session value should be from market start to the time you want to square-off 
// your intraday strategy
// Important: The end time should be at least 2 minutes before the intraday
// square-off time set by your broker
var i_marketSession = input(title="Market session", type=input.session, 
     defval="0915-1455", confirm=true)

// Make inputs that set the take profit % (optional)
longProfitPerc = input(title="Long Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortProfitPerc = input(title="Short Take Profit (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01
     
// Set stop loss level with input options (optional)
longLossPerc = input(title="Long Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01

shortLossPerc = input(title="Short Stop Loss (%)",
     type=input.float, minval=0.0, step=0.1, defval=5.0) * 0.01    

trendFactor = input(title="Trend Factor(Lower means trending)", type=input.integer, minval=1, step=1, defval=50)

oversold = input(title="Oversold", type=input.integer, minval=1, step=1, defval=25)

overbought = input(title="Overbought", type=input.integer, minval=1, step=1, defval=75)

// ********** Strategy inputs - End **********


// ********** Supporting functions - Start **********

// A function to check whether the bar or period is in intraday session
barInSession(sess) => time(timeframe.period, sess) != 0
// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


// ********** Supporting functions - End **********


// ********** Strategy - Start **********
// See if intraday session is active
bool intradaySession = barInSession(i_marketSession)

// Trade only if intraday session is active

//=================Strategy logic goes in here===========================
//Vol Confirmation
vol = volume > volume[1]

//Engulfing candle confirm
bullishEC = close > open[1] and close[1] < open[1]
bearishEC = close < open[1] and close[1] > open[1]

//Candles colors
greenCandle = (close > open)
redCandle = (close < open)

length = input(title="Length", type=input.integer, defval=14, minval=1, maxval=2000)
src = hlc3
upper = sum(volume * (change(src) <= 0 ? 0 : src), length)
lower = sum(volume * (change(src) >= 0 ? 0 : src), length)
_rsi(upper, lower) =>
    100.0 - (100.0 / (1.0 + upper / lower))
mf = _rsi(upper, lower)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)

//tradeSignal = ((rsiOS or rsiOS[1]) and bullishEC) or ((rsiOB or rsiOB[1]) and bearishEC)




//Final Long/Short Condition
longCondition =  redCandle and mf < oversold and ci <trendFactor and vol
shortCondition = greenCandle and mf >overbought and ci <trendFactor and vol
 
//Long Strategy - buy condition and exits with Take profit and SL
if (longCondition and intradaySession)
    stop_level = longStopPrice
    profit_level = longExitPrice
    strategy.entry("My Long Entry Id", strategy.long)
    strategy.exit("TP/SL", "My Long Entry Id", stop=stop_level, limit=profit_level)


//Short Strategy - sell condition and exits with Take profit and SL
if (shortCondition and intradaySession)
    stop_level = shortStopPrice
    profit_level = shortExitPrice
    strategy.entry("My Short Entry Id", strategy.short)
    strategy.exit("TP/SL", "My Short Entry Id", stop=stop_level, limit=profit_level)
 
 
// Square-off position (when session is over and position is open)
squareOff = (not intradaySession) and (strategy.position_size != 0)
strategy.close_all(when = squareOff, comment = "Square-off")

// ********** Strategy - End **********

Plus de