Estrategia cuantitativa de filtrado de tendencias basada en el canal de Keltner y el indicador CCI


Fecha de creación: 2024-02-27 15:47:20 Última modificación: 2024-02-27 15:47:20
Copiar: 0 Número de Visitas: 715
1
Seguir
1617
Seguidores

Estrategia cuantitativa de filtrado de tendencias basada en el canal de Keltner y el indicador CCI

Descripción general

Esta estrategia combina el canal de Kentner, el indicador CCI y el indicador RSI y las condiciones de volumen de transacción para lograr una estrategia de negociación de tendencia de filtración de exceso de volumen más completa. La estrategia puede generar señales de compra y venta cuando se rompe una zona de precio clave, cuando el indicador emite una señal de negociación y cuando aparece un volumen de transacción grande.

Principio de estrategia

La estrategia se basa principalmente en los siguientes indicadores y condiciones para tomar decisiones comerciales:

  1. El canal de Kentner: los precios se encuentran dentro de la zona del canal según el precio típico y el ATR calculado en un período determinado.

  2. Indicador CCI: para determinar si el precio es sobrecomprado o sobrevendido.

  3. Indicador RSI: ayuda a determinar si el precio está sobrecomprado o sobrevendido.

  4. Volumen de transacción: se requiere que el volumen de transacción supere un cierto promedio para generar transacciones.

  5. Filtrado de tendencias medias: combinación de indicadores medias como SMA, EMA y otros para determinar la dirección de la tendencia general de los precios.

En condiciones de acuerdo con la dirección de la tendencia, si el precio se rompe el canal de Kentner hacia arriba y hacia abajo, y los indicadores CCI y RSI emiten señales, al mismo tiempo que el volumen de operaciones aumenta considerablemente, se producen señales de compra y venta.

Ventajas estratégicas

La estrategia combina una variedad de indicadores y condiciones que pueden eliminar de manera efectiva algunas señales de negociación inciertas, lo que hace que las decisiones comerciales sean más estables y confiables. Las principales ventajas son:

  1. El mecanismo de filtración de tendencias puede evitar que los mercados oscilen de manera incierta.

  2. El precio de la entrada de Kettner se encuentra en una zona crítica.

  3. El CCI y el RSI son más precisos en el momento de emitir señales de sobreventa y sobreventa.

  4. Las condiciones de grandes volúmenes de transacciones evitan algunas falsas rupturas.

Riesgo estratégico

El principal riesgo de esta estrategia es el siguiente:

  1. El mecanismo de determinación de tendencias es imperfecto y puede perder oportunidades de tendencias más fuertes. Se pueden probar diferentes parámetros de la línea media.

  2. Los parámetros del indicador están mal configurados, lo que puede hacer que se pierda un momento clave de negociación o genere una señal errónea. Se pueden optimizar los parámetros.

  3. Cuando el efecto de la amplificación del volumen de transacciones no es evidente, existe un cierto riesgo de falsa ruptura. Se puede probar el multiplicador de la amplificación de diferentes volúmenes de transacciones.

Dirección de optimización de la estrategia

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Pruebe diferentes tipos y longitudes de medias para encontrar los parámetros de filtro de tendencia más adecuados.

  2. Optimización de los parámetros de los indicadores como el canal de Kentner, el CCI y el RSI para que la señal sea más precisa.

  3. Prueba el multiplicador de diferentes volúmenes de transacciones para encontrar el multiplicador más adecuado.

  4. Se puede considerar la inclusión de una estrategia de stop loss para controlar la pérdida máxima de una sola operación.

Resumir

En general, esta estrategia combina los canales Keltner, el CCI, el RSI y las condiciones de volumen de transacción para crear una estrategia de comercio de tendencia de sobrevaloración relativamente completa. Cuando el precio se rompe en una zona clave, el indicador da una señal de transacción y se produce un gran volumen de transacciones, puede generar una señal de compra y venta. Al mismo tiempo, el uso de medias móviles para juzgar la tendencia evita que las transacciones no tengan una tendencia clara.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-27 00:00:00
end: 2024-02-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Custom Keltner CCI Strategy with Trend Filter", overlay=true )
// Input Parameters for allowing long and short trades
allowLong = input(true, title="Allow Long Trades")
allowShort = input(true, title="Allow Short Trades")
// Trend Filter Inputs
maType = input(title="MA Type", options=["OFF", "SMA", "EMA", "SMMA", "CMA", "TMA"], defval="OFF")
trendFilterMethod = input(title="Trend Filter Method", options=["OFF", "Normal", "Reversed"], defval="OFF")
maLength = input(14, title="MA Length")
// Other Input Parameters
lengthKC = input(30, title="Keltner Channels Length")
multKC = input(0.7, title="Keltner Channels Multiplier")
lengthCCI = input(5, title="CCI Length")
overboughtCCI = input(75, title="CCI Overbought Level")
oversoldCCI = input(-75, title="CCI Oversold Level")
rsiPeriod = input(30, title="RSI Period")
rsiOverbought = input(60, title="RSI Overbought Level")
rsiOversold = input(60, title="RSI Oversold Level")
volumeMultiplier = input(0, title="Volume Multiplier", type=input.float, step=0.1, minval=0)
// Define Moving Averages
var float maValue = na
if (maType == "SMA")
    maValue := sma(close, maLength)
else if (maType == "EMA")
    maValue := ema(close, maLength)
else if (maType == "SMMA")
    maValue := na(maValue[1]) ? sma(close, maLength) : (maValue[1] * (maLength - 1) + close) / maLength
else if (maType == "CMA")
    maValue := na(maValue[1]) ? sma(close, maLength) : (sma(close, maLength) + (sma(close, maLength) - maValue[1])) / 2
else if (maType == "TMA")
    maValue := sma(sma(close, round(maLength/2)), round(maLength/2)+1)
// Entry Conditions with Trend Filter
longCondition = allowLong and (trendFilterMethod == "OFF" or (trendFilterMethod == "Normal" and close > maValue) or (trendFilterMethod == "Reversed" and close < maValue))
shortCondition = allowShort and (trendFilterMethod == "OFF" or (trendFilterMethod == "Normal" and close < maValue) or (trendFilterMethod == "Reversed" and close > maValue))
// Keltner Channels
typicalPrice = hlc3
middleLine = sma(typicalPrice, lengthKC)
range = multKC * atr(lengthKC)
upperChannel = middleLine + range
lowerChannel = middleLine - range
// CCI
cci = cci(close, lengthCCI)
// RSI
rsi = rsi(close, rsiPeriod)
// Volume
volCondition = volume > sma(volume, 50) * volumeMultiplier
// Combined Entry Conditions with Trend Filter
longCondition := longCondition and cci < oversoldCCI and low < lowerChannel and rsi < rsiOversold and volCondition
shortCondition := shortCondition and cci > overboughtCCI and high > upperChannel and rsi > rsiOverbought and volCondition
// Execute orders at the open of the new bar after conditions are met
if (longCondition)
    strategy.entry("Long", strategy.long)
if (shortCondition)
    strategy.entry("Short", strategy.short)
// Exit Conditions
strategy.close("Long", when = cci > 0)
strategy.close("Short", when = cci < 0)
// Plotting
plot(upperChannel, color=color.red, linewidth=1)
plot(lowerChannel, color=color.green, linewidth=1)
hline(overboughtCCI, "Overbought", color=color.red)
hline(oversoldCCI, "Oversold", color=color.green)