Stratégie de tendance progressive de BB KC

Auteur:ChaoZhang est là., Date: 2024-01-26 15:10:41 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise une combinaison de signaux de bandes de Bollinger et de canaux de Keltner pour identifier les tendances du marché. Les bandes de Bollinger sont un outil d'analyse technique qui définit les canaux en fonction des plages de volatilité des prix. Le signal de canal de Keltner combine la volatilité des prix et les tendances pour déterminer les niveaux de support ou de résistance.

Principes de stratégie

  1. Calculer les bandes de Bollinger intermédiaires, supérieures et inférieures sur 20 périodes.
  2. Calculez les canaux Keltner intermédiaire, supérieur et inférieur sur 20 périodes.
  3. Lorsque la ligne supérieure du canal de Keltner traverse la ligne supérieure de la bande de Bollinger et que le volume est supérieur à sa moyenne mobile à 10 périodes, passez long.
  4. Lorsque la ligne inférieure du canal de Keltner traverse la ligne inférieure de la bande de Bollinger et que le volume est supérieur à sa moyenne mobile à 10 périodes, passez à la courte.
  5. Fermez toutes les positions si aucun signal de sortie n'est déclenché après 20 bar depuis l'entrée.
  6. Définir un stop loss de 1,5% pour les transactions longues et un stop loss de -1,5% pour les transactions courtes.

Cette stratégie repose principalement sur les bandes de Bollinger pour juger des plages de volatilité et de l'élan. Le canal de Keltner sert d'outil de vérification en raison de ses caractéristiques similaires mais de paramètres différents.

Analyse de la force

  1. Utilise les avantages combinés des bandes de Bollinger et des canaux de Keltner pour améliorer la précision du signal.
  2. Le filtrage par volume de négociation réduit les signaux non valides provenant de fréquentes touches de ligne.
  3. Contrôle efficace des risques grâce à des mécanismes de stop loss et de trailing stop programmés.
  4. Des sorties rapides et des pertes limitées de la prise de profit forcée après des signaux non valides.

Analyse des risques

  1. Les bandes de Bollinger et les canaux de Keltner sont basés sur les moyennes mobiles et la volatilité.
  2. L'absence de mécanisme de composition signifie que des arrêts multiples peuvent entraîner des pertes excessives.
  3. Les signaux de renversement se produisent fréquemment. Les ajustements de paramètres peuvent entraîner des opportunités de tendance à être manquées.

L'élargissement des plages de stop loss ou l'ajout d'indicateurs de confirmation tels que le MACD peuvent réduire les risques de faux signaux.

Directions d'optimisation

  1. Les effets des paramètres d'essai sur le rendement de la stratégie, tels que les longueurs, les multiples d'écart type, etc.
  2. Ajouter d'autres indicateurs pour la confirmation du signal, par exemple KDJ, MACD.
  3. Utiliser l'apprentissage automatique pour l'optimisation automatisée des paramètres.

Résumé

Cette stratégie combine les bandes de Bollinger et les canaux de Keltner pour identifier les tendances, vérifiées par le volume des transactions.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
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/
// © jensenvilhelm

//@version=5
strategy("BB and KC Strategy", overlay=true)

// Define the input parameters for the strategy, these can be changed by the user to adjust the strategy
kcLength = input.int(20, "KC Length", minval=1) // Length for Keltner Channel calculation
kcStdDev = input.float(2.2, "KC StdDev") // Standard Deviation for Keltner Channel calculation
bbLength = input.int(20, "BB Length", minval=1) // Length for Bollinger Bands calculation
bbStdDev = input.float(2, "BB StdDev") // Standard Deviation for Bollinger Bands calculation
volumeLength = input.int(10, "Volume MA Length", minval=1) // Length for moving average of volume calculation
stopLossPercent = input.float(1.5, "Stop Loss (%)") // Percent of price for Stop loss 
trailStopPercent = input.float(2, "Trail Stop (%)") // Percent of price for Trailing Stop
barsInTrade = input.int(20, "Bars in trade before exit", minval = 1) // Minimum number of bars in trade before considering exit

// Calculate Bollinger Bands and Keltner Channel
[bb_middle, bb_upper, bb_lower] = ta.bb(close, bbLength, bbStdDev) // Bollinger Bands calculation
[kc_middle, kc_upper, kc_lower] = ta.kc(close, kcLength, kcStdDev) // Keltner Channel calculation

// Calculate moving average of volume
vol_ma = ta.sma(volume, volumeLength) // Moving average of volume calculation

// Plotting Bollinger Bands and Keltner Channels on the chart
plot(bb_upper, color=color.red) // Bollinger Bands upper line
plot(bb_middle, color=color.blue) // Bollinger Bands middle line
plot(bb_lower, color=color.red) // Bollinger Bands lower line
plot(kc_upper, color=color.rgb(105, 255, 82)) // Keltner Channel upper line
plot(kc_middle, color=color.blue) // Keltner Channel middle line
plot(kc_lower, color=color.rgb(105, 255, 82)) // Keltner Channel lower line

// Define entry conditions: long position if upper KC line crosses above upper BB line and volume is above MA of volume
// and short position if lower KC line crosses below lower BB line and volume is above MA of volume
longCond = ta.crossover(kc_upper, bb_upper) and volume > vol_ma // Entry condition for long position
shortCond = ta.crossunder(kc_lower, bb_lower) and volume > vol_ma // Entry condition for short position

// Define variables to store entry price and bar counter at entry point
var float entry_price = na // variable to store entry price
var int bar_counter = na // variable to store bar counter at entry point

// Check entry conditions and if met, open long or short position
if (longCond)
    strategy.entry("Buy", strategy.long) // Open long position
    entry_price := close // Store entry price
    bar_counter := 1 // Start bar counter
if (shortCond)
    strategy.entry("Sell", strategy.short) // Open short position
    entry_price := close // Store entry price
    bar_counter := 1 // Start bar counter

// If in a position and bar counter is not na, increment bar counter
if (strategy.position_size != 0 and na(bar_counter) == false)
    bar_counter := bar_counter + 1 // Increment bar counter

// Define exit conditions: close position if been in trade for more than specified bars
// or if price drops by more than specified percent for long or rises by more than specified percent for short
if (bar_counter > barsInTrade) // Only consider exit after minimum bars in trade
    if (bar_counter >= barsInTrade)
        strategy.close_all() // Close all positions
    // Stop loss and trailing stop
    if (strategy.position_size > 0)
        strategy.exit("Sell", "Buy", stop=entry_price * (1 - stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for long position
    else if (strategy.position_size < 0)
        strategy.exit("Buy", "Sell", stop=entry_price * (1 + stopLossPercent/100), trail_points=entry_price * trailStopPercent/100) // Set stop loss and trailing stop for short position


Plus de