Estrategia de seguimiento del impulso de la CCI

El autor:¿ Qué pasa?, Fecha: 2023-10-25 17:37:39
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el indicador del índice de canal de productos básicos (CCI), con el objetivo de ir largo en condiciones de sobreventa y ir corto en condiciones de sobrecompra. También utiliza opcionalmente un filtro de promedio móvil exponencial (EMA) para operar solo en la dirección de la tendencia. La estrategia también proporciona un porcentaje fijo o un stop loss basado en el rango verdadero promedio (ATR) y toma ganancias.

Estrategia lógica

  1. Utilice el indicador CCI para determinar la tendencia del mercado

    • El CCI calcula el impulso mediante la comparación del precio actual con el precio medio durante un período.

    • El CCI por encima de 150 es sobrecomprado, por debajo de -100 es sobrevendido

  2. Utilice el filtro EMA como opción

    • Sólo se puede ir largo cuando el precio está por encima de la EMA, y corto cuando está por debajo de la EMA

    • Utilizar la EMA para determinar la dirección de la tendencia, evitar operaciones contrarias a la tendencia

  3. Proporcionar dos tipos de stop loss y take profit

    • El importe de las pérdidas de detención y de las ganancias basadas en porcentajes fijos: utilizar el porcentaje fijo del precio de entrada

    • Stop loss basado en ATR y take profit: utilizar el multiplicador ATR para el stop loss, calcular el take profit basado en el ratio de riesgo-recompensa

  4. Condiciones de entrada

    • En caso de que el CCI se cruce por encima de -100

    • Ir a corto cuando el CCI cruza por debajo de 150

    • Si está habilitada la EMA, solo se introducirá cuando el precio esté a la derecha de la EMA

  5. Condiciones de salida

    • Posición cerrada cuando se alcanza el stop loss o el take profit

    • En el caso de las empresas de servicios de telecomunicaciones, la Comisión consideró que las medidas en cuestión eran compatibles con el mercado interior.

  6. Planificación

    • Indicador de gráfico CCI, regiones de código de color

Análisis de ventajas

  1. En el caso de las empresas de servicios de telecomunicaciones, el método de cálculo de la rentabilidad de las empresas de servicios de telecomunicaciones se basa en el cálculo de la rentabilidad de las empresas de servicios de telecomunicaciones.

  2. La EMA opcional garantiza la negociación con la tendencia, evita las reversiones

  3. Proporcionar dos tipos de stop loss/take profit para mayor flexibilidad

  4. El cierre de la señal CCI vuelve a fijar el beneficio de reversión

  5. Las señales de las CCI se destacan claramente en el gráfico

  6. Lógica sencilla y clara, fácil de entender y optimizar

Análisis de riesgos

  1. La CCI tiene un efecto retardado, puede no revertirse o dar señales falsas

  2. Los parámetros EMA incorrectos pueden perder las tendencias o hacer que la estrategia sea ineficaz

  3. El importe de las pérdidas de suspensión/beneficio por porcentaje fijo menos adaptable a las variaciones del mercado

  4. El método ATR de stop loss/take profit sensible al período ATR, debe optimizar

  5. Se recomienda ajustar el tamaño de las posiciones

  6. El rendimiento varía según las condiciones del mercado, reevalúa los parámetros

Direcciones de optimización

  1. Evaluar los períodos de CCI para encontrar las combinaciones óptimas de parámetros

  2. Prueba de diferentes períodos de EMA para obtener la mejor estimación de tendencia

  3. Ajustar el stop loss/take profit para obtener una relación óptima de riesgo y recompensa

  4. Añadir otros filtros como el volumen para evitar más señales falsas

  5. Combinar con líneas de tendencia/patrones de gráficos para la confirmación de patrones

  6. Añadir reglas de tamaño de posición como tamaño fijo para controlar la extracción

  7. Prueba de retroceso en diferentes condiciones de mercado, ajuste dinámico

Resumen de las actividades

La estrategia utiliza los principios clásicos de CCI sobrecomprado/sobrevendido para la entrada. El filtro EMA controla el comercio de tendencia. Dos tipos de stop loss/take profit proporcionados para la flexibilidad. El trazado resalta las señales claramente. Lógica simple y clara, fácil de entender y optimizar. Se pueden hacer mejoras adicionales mediante el ajuste de parámetros, la adición de filtros, control de riesgos, etc.


/*backtest
start: 2023-09-24 00:00:00
end: 2023-10-24 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/
// © alifer123

//@version=5
// strategy("CCI+EMA Strategy with Percentage or ATR TP/SL [Alifer]", shorttitle = "CCI_EMA_%/ATR_TP/SL", overlay=false,
//      initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.045)

length = input(14, "CCI Length")
overbought = input.int(150, step = 10, title = "Overbought")
oversold = input.int(-140, step = 10, title = "Oversold")
src = hlc3
ma = ta.sma(src, length)
cci = (src - ma) / (0.015 * ta.dev(src, length))

// EMA
useEMA = input(true, "Use EMA", tooltip = "Only enters long when price is above the EMA, only enters short when price is below the EMA")
emaLength = input(55, "EMA Length")
var float ema = na
if useEMA
    ema := ta.ema(src, emaLength)

// Take Profit and Stop Loss Method
tpSlMethod_percentage = input(true, "Percentage TP/SL", group="TP/SL Method")
tpSlMethod_atr = input(false, "ATR TP/SL", group="TP/SL Method")

// Percentage-based Take Profit and Stop Loss
tp_percentage = input.float(10.0, title="Take Profit (%)", step=0.1, group="TP/SL Method")
sl_percentage = input.float(10.0, title="Stop Loss (%)", step=0.1, group="TP/SL Method")

// ATR-based Take Profit and Stop Loss
atrLength = input(20, title="ATR Length", group="TP/SL Method")
atrMultiplier = input(4, title="ATR SL Multiplier", group="TP/SL Method")
riskRewardRatio = input(2, title="Risk Reward Ratio", group="TP/SL Method")

// Calculate TP/SL levels based on the selected method, or leave them undefined if neither method is selected
longTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 + tp_percentage / 100) : na
longSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 - sl_percentage / 100) : na
shortTP = tpSlMethod_percentage ? strategy.position_avg_price * (1 - tp_percentage / 100) : na
shortSL = tpSlMethod_percentage ? strategy.position_avg_price * (1 + sl_percentage / 100) : na

if tpSlMethod_atr
    longSL := strategy.position_avg_price - ta.atr(atrLength) * atrMultiplier
    longTP := ((strategy.position_avg_price - longSL) * riskRewardRatio) + strategy.position_avg_price
    shortSL := strategy.position_avg_price + ta.atr(atrLength) * atrMultiplier
    shortTP := ((strategy.position_avg_price - shortSL) * riskRewardRatio) - strategy.position_avg_price

// Enter long position when CCI crosses below oversold level and price is above EMA
longCondition = ta.crossover(cci, oversold) and (not useEMA or close > ema)
if longCondition
    strategy.entry("Buy", strategy.long)

// Enter short position when CCI crosses above overbought level and price is below EMA
shortCondition = ta.crossunder(cci, overbought) and (not useEMA or close < ema)
if shortCondition
    strategy.entry("Sell", strategy.short)

// Close long positions with Take Profit or Stop Loss
if strategy.position_size > 0
    strategy.exit("Long Exit", "Buy", limit=longTP, stop=longSL)

// Close short positions with Take Profit or Stop Loss
if strategy.position_size < 0
    strategy.exit("Short Exit", "Sell", limit=shortTP, stop=shortSL)

// Close positions when CCI crosses back above oversold level in long positions or below overbought level in short positions
if ta.crossover(cci, overbought)
    strategy.close("Buy")
if ta.crossunder(cci, oversold)
    strategy.close("Sell")

// Plotting
color_c = cci > overbought ? color.red : (cci < oversold ? color.green : color.white)
plot(cci, "CCI", color=color_c)
hline(0, "Middle Band", color=color.new(#787B86, 50))
obband = hline(overbought, "OB Band", color=color.new(#78867a, 50))
osband = hline(oversold, "OS Band", color=color.new(#867878, 50))
fill(obband, osband, color=color.new(#787B86, 90))


Más.