Estrategia de scalping basada en el CCI y la EMA

El autor:¿ Qué pasa?, Fecha: 2024-01-31 16:01:21
Las etiquetas:

img

Resumen general

Se trata de una estrategia de negociación de oscilación a corto plazo que combina el indicador EMA y el indicador CCI para identificar tendencias a corto plazo y niveles de sobrecompra/sobreventa en el mercado, con el fin de aprovechar las oportunidades de las fluctuaciones de precios a corto plazo.

Estrategia lógica

La estrategia utiliza principalmente las líneas de EMA de 10 días, EMA de 21 días y EMA de 50 días y el indicador CCI para determinar los plazos de entrada y salida.

La lógica específica es: Cuando el promedio móvil a corto plazo (EMA de 10 días) cruza por encima del promedio móvil a mediano plazo (EMA de 21 días) y el promedio móvil a corto plazo es mayor que el promedio móvil a largo plazo (EMA de 50 días), y al mismo tiempo el indicador CCI es mayor que 0, se considera una señal alcista para ir largo.

La lógica de salida consiste en cerrar la posición cuando la media móvil a corto plazo cruce de nuevo sobre la media móvil a mediano plazo.

Ventajas

  1. La combinación del sistema de promedios móviles y el indicador CCI permite identificar eficazmente las tendencias de los precios a corto plazo y los niveles de sobrecompra/sobreventa.

  2. El uso de cruces de promedios móviles para determinar entradas y salidas es simple y práctico.

  3. Los parámetros CCI y los ajustes del ciclo son más razonables para filtrar algunas señales falsas.

  4. La adopción de múltiples marcos de tiempo de promedios móviles puede obtener mejores oportunidades comerciales en mercados oscilantes.

Los riesgos

  1. Las grandes fluctuaciones en las operaciones a corto plazo pueden dar lugar a un stop loss consecutivo.

  2. La configuración incorrecta de los parámetros CCI puede aumentar las señales falsas.

  3. Durante los períodos de margen y de consolidación, esta estrategia puede presentar múltiples pequeñas pérdidas.

  4. Solo adecuado para operadores frecuentes a corto plazo, no adecuado para la tenencia a largo plazo.

Las medidas de reducción del riesgo correspondientes incluyen: optimización de los parámetros de la CCI, ajuste de la posición de stop loss, adición de condiciones FILTER, etc.

Direcciones de optimización

  1. Se pueden probar diferentes combinaciones de longitudes EMA para optimizar los parámetros.

  2. Se pueden añadir otros indicadores o condiciones de filtro para filtrar algunas señales falsas, como MACD, KDJ, etc.

  3. Utilice el stop loss dinámico para controlar pérdidas individuales.

  4. La combinación de indicadores de tendencia de mayor horizonte temporal puede evitar el comercio contra la tendencia.

Conclusión

En general, esta es una estrategia típica de oscilación a corto plazo que utiliza el cruce de líneas de promedio móvil combinadas con el estado de sobrecompra / sobreventa del indicador CCI para capturar oportunidades de reversión a corto plazo.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")

Más.