
Esta estrategia se basa en el indicador CCI, diseñado para hacer más en caso de sobreventa y menos en caso de sobreventa. Opcionalmente, también utiliza el filtro EMA para controlar el comercio solo en la dirección de la tendencia. La estrategia también ofrece un stop loss basado en un porcentaje fijo o en un rango real medio (ATR).
Utilizando el índice CCI para determinar las tendencias del mercado
El CCI mide la dinámica comparando el precio actual con el precio promedio en un período determinado
CCI por encima de 150 es sobrecompra, por debajo de -100 es sobreventa
Se puede usar el filtro EMA
Hacer más solo cuando el precio está por encima de la EMA, hacer un descuento cuando el precio está por debajo de la EMA
Utiliza EMA para determinar la dirección de la tendencia y evitar el comercio contra la tendencia
Dos opciones para detener los daños
Detención de pérdidas basada en un porcentaje fijo: utiliza un porcentaje fijo del precio de entrada para configurar el stop loss
Stop loss basado en ATR: utiliza el multiplicador de ATR para establecer el stop loss y luego calcula el stop en función de la relación de riesgo/recibo
Condiciones de ingreso
CCI hace más cuando cruza la línea 100
Descanso bajo la CCI en la línea 150
Si EMA está activado, solo hacer más cuando el precio está por encima de EMA y hacer un vacío cuando el precio está por debajo de EMA
Condiciones de salida
El precio alcanzó el nivel de parada de pérdidas
El CCI vuelve a entrar en zona de sobrecompra y sobreventa
Dibujo
El uso del CCI para determinar sobrecompra y sobreventa es un uso clásico del indicador CCI
El EMA opcional asegura que se negocie solo en la dirección de la tendencia y evita la reversión
Ofrece dos formas de stop loss que pueden ajustarse según el mercado
El CCI indica que el mercado ha vuelto a entrar en zona de sobreventa para cerrar posiciones y bloquear ganancias para invertir la tendencia.
Los mapas destacan las señales CCI para que sean fáciles de leer
La lógica de la estrategia es clara, simple, fácil de entender y optimizar
Indicadores del CCI están rezagados y pueden haber inversiones perdidas o falsas señales
La configuración incorrecta de los parámetros de EMA puede perder la tendencia o hacer que la estrategia no sea válida
El porcentaje de paradas de pérdidas es difícil de adaptar a los cambios en el mercado, con un parámetro más amplio
El ATR es sensible a los ciclos de intervalo y debe ajustarse a los parámetros óptimos
El riesgo de retiro es mayor y la gestión de las posiciones debe ajustarse adecuadamente
Eficacia Los parámetros del indicador deben evaluarse a medida que el entorno del mercado cambia
Evaluar los parámetros CCI de diferentes períodos para encontrar la combinación óptima de parámetros
Prueba de diferentes períodos de EMA para determinar el período de tendencia más adecuado
Ajuste de los parámetros de stop loss para obtener la mejor relación riesgo-beneficio
Añadir otras condiciones de filtro, como volumen de transacciones, para filtrar aún más las señales falsas
Para mejorar la eficacia de los juicios de forma combinados con líneas de tendencia o gráficos
Aumentar las estrategias de gestión de posiciones, como fijar posiciones, para controlar el riesgo de retiro
Recopilación global de datos de diferentes entornos de mercado y parámetros de ajuste dinámico
La estrategia utiliza el clásico principio de sobrecompra y sobreventa del indicador CCI para introducirla. La dirección de la tendencia se puede controlar con la adición de un filtro EMA. Ofrece dos métodos de parada de pérdidas para facilitar el ajuste.
/*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))