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.
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
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
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
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
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.
Planificación
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.
La EMA opcional garantiza la negociación con la tendencia, evita las reversiones
Proporcionar dos tipos de stop loss/take profit para mayor flexibilidad
El cierre de la señal CCI vuelve a fijar el beneficio de reversión
Las señales de las CCI se destacan claramente en el gráfico
Lógica sencilla y clara, fácil de entender y optimizar
La CCI tiene un efecto retardado, puede no revertirse o dar señales falsas
Los parámetros EMA incorrectos pueden perder las tendencias o hacer que la estrategia sea ineficaz
El importe de las pérdidas de suspensión/beneficio por porcentaje fijo menos adaptable a las variaciones del mercado
El método ATR de stop loss/take profit sensible al período ATR, debe optimizar
Se recomienda ajustar el tamaño de las posiciones
El rendimiento varía según las condiciones del mercado, reevalúa los parámetros
Evaluar los períodos de CCI para encontrar las combinaciones óptimas de parámetros
Prueba de diferentes períodos de EMA para obtener la mejor estimación de tendencia
Ajustar el stop loss/take profit para obtener una relación óptima de riesgo y recompensa
Añadir otros filtros como el volumen para evitar más señales falsas
Combinar con líneas de tendencia/patrones de gráficos para la confirmación de patrones
Añadir reglas de tamaño de posición como tamaño fijo para controlar la extracción
Prueba de retroceso en diferentes condiciones de mercado, ajuste dinámico
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))