Estrategia de tendencia gradual de BB KC

El autor:¿ Qué pasa?, Fecha: 2024-01-26 15:10:41
Las etiquetas:

img

Resumen general

Esta estrategia utiliza una combinación de bandas de Bollinger y señales del canal de Keltner para identificar tendencias de mercado. Las bandas de Bollinger son una herramienta de análisis técnico que define canales basados en rangos de volatilidad de precios. La señal del canal de Keltner combina la volatilidad de precios y tendencias para determinar niveles de soporte o resistencia. Esta estrategia utiliza las ventajas de ambos indicadores al juzgar si ocurre una cruz de oro entre las bandas de Bollinger y los canales de Keltner para encontrar oportunidades largas y cortas. También incorpora volumen de negociación para verificar la validez de las señales, lo que puede identificar eficazmente el comienzo de las tendencias y maximizar el filtrado de señales inválidas.

Principios de estrategia

  1. Calcule las bandas de Bollinger medias, superiores e inferiores durante 20 períodos.
  2. Calcular los canales Keltner medios, superiores e inferiores durante 20 períodos.
  3. Cuando la línea superior del canal de Keltner cruce por encima de la línea superior de la banda de Bollinger y el volumen es mayor que su promedio móvil de 10 períodos, vaya largo.
  4. Cuando la línea inferior del canal de Keltner cruce por debajo de la línea inferior de la banda de Bollinger y el volumen es mayor que su promedio móvil de 10 períodos, vaya corto.
  5. Cierre todas las posiciones si no se activa ninguna señal de salida después de 20 barras desde la entrada.
  6. Establezca un stop loss del 1,5% para las operaciones largas y un stop loss del -1,5% para las operaciones cortas.

Esta estrategia se basa principalmente en las bandas de Bollinger para juzgar los rangos de volatilidad y el impulso. El canal de Keltner sirve como una herramienta de verificación debido a sus características similares pero diferentes parámetros.

Análisis de la fuerza

  1. Utiliza las ventajas combinadas de las bandas de Bollinger y los canales de Keltner para mejorar la precisión de la señal.
  2. El filtrado por volumen de negociación reduce las señales no válidas de frecuentes toques de línea.
  3. Control eficaz del riesgo a partir de los mecanismos de stop loss y trailing stop programados.
  4. Salidas rápidas y pérdidas limitantes de la obtención de ganancias forzadas después de señales inválidas.

Análisis de riesgos

  1. Tanto las bandas de Bollinger como los canales de Keltner se basan en promedios móviles y volatilidad.
  2. La ausencia de un mecanismo de composición significa que las paradas múltiples pueden dar lugar a pérdidas excesivas.
  3. Las señales de reversión ocurren con frecuencia. Los ajustes de parámetros pueden hacer que se pierdan oportunidades de tendencia.

Ampliar los rangos de stop loss o agregar indicadores de confirmación como el MACD puede reducir los riesgos de señales falsas.

Direcciones de optimización

  1. Impactos de los parámetros de ensayo en el rendimiento de la estrategia, como longitudes, múltiplos de desviación estándar, etc.
  2. Añadir otros indicadores para la confirmación de la señal, por ejemplo, KDJ, MACD.
  3. Utilice el aprendizaje automático para la optimización automática de parámetros.

Resumen de las actividades

Esta estrategia combina las bandas de Bollinger y los canales de Keltner para identificar tendencias, verificadas por el volumen de negociación.


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


Más.