Estrategia de salida de la DCCI

El autor:¿ Qué pasa?, Fecha: 2024-02-18 10:13:21
Las etiquetas:

img

Resumen general

La estrategia de ruptura del DCCI es una estrategia de trading a corto plazo que identifica situaciones de sobreventa y sobrecompra utilizando el indicador CCI. Combina el indicador CCI y la línea media móvil WMA.

Estrategia lógica

La estrategia utiliza el indicador CCI para juzgar las condiciones de sobrecompra / sobreventa del mercado. El indicador CCI puede identificar efectivamente situaciones de precios anormales. Los valores por debajo de -100 indican que el mercado está sobrevendido, mientras que los valores por encima de 100 indican que el mercado está sobrecomprado. La estrategia será larga cuando el indicador CCI cruce por encima de -100 desde abajo; y será corta cuando el indicador CCI cruce por debajo de 100 desde arriba.

Al mismo tiempo, la estrategia también incorpora la línea media móvil WMA para determinar la dirección de la tendencia. Sólo cuando el precio de cierre está por encima de la línea WMA serán válidas las señales largas; sólo cuando el precio de cierre está por debajo de la línea WMA serán válidas las señales cortas. Esto ayuda a filtrar algunas señales comerciales ambiguas.

Después de entrar en una posición, la estrategia utiliza stop loss para controlar los riesgos. Hay tres métodos opcionales de stop loss: stop de estrategia fija, stop de swing alto / bajo, stop ATR. Cuando es largo, la posición se detendrá si el precio cae al nivel de stop; cuando es corto, la posición se detendrá si el precio sube al nivel de stop.

Análisis de ventajas

La estrategia tiene las siguientes ventajas:

  1. Captura oportunamente las oportunidades de sobreventa y sobrecompra mediante la identificación de las reversiones mediante el indicador CCI.

  2. Evita el comercio contra la tendencia al incorporar el análisis de la dirección de la tendencia utilizando promedios móviles.

  3. Proporciona múltiples métodos opcionales de stop loss que se pueden ajustar en función de las condiciones del mercado.

  4. Se trata de señales comerciales simples y claras que son fáciles de implementar.

Análisis de riesgos

La estrategia también presenta los siguientes riesgos:

  1. El indicador CCI puede generar fácilmente señales falsas que no pueden evitarse por completo.

  2. La colocación incorrecta del stop-loss puede causar un stop-out excesivo.

  3. La incapacidad de identificar las tendencias significa que pueden generarse demasiadas operaciones innecesarias en mercados variados.

  4. La incapacidad de juzgar la dirección general del mercado puede resultar en una negociación en la dirección equivocada.

Para hacer frente a estos riesgos, los principales enfoques de optimización son:

  1. Incorporar otros indicadores para filtrar las señales CCI.

  2. Optimizar la colocación de la parada a través del backtesting.

  3. Añadir indicadores de identificación de tendencias para evitar mercados agitados.

  4. Determinar la dirección del comercio basado en el análisis de las principales áreas de soporte y resistencia.

Direcciones de optimización

Los principales aspectos para optimizar esta estrategia incluyen:

  1. Optimización del parámetro CCI: ajustar el período de revisión CCI, optimizar los parámetros del indicador.

  2. Optimización de Stop Loss: Prueba diferentes métodos de stop y selecciona el stop loss óptimo.

  3. Optimización de filtros: agregar filtros adicionales como MACD, RSI para construir un sistema de filtrado de múltiples indicadores para reducir las señales falsas.

  4. Filtración de tendencias: añadir indicadores de identificación de tendencias como promedios móviles para evitar operaciones contra tendencias.

  5. Automática de obtención de ganancias: Construir mecanismos dinámicos de obtención de ganancias para obtener ganancias automáticamente en función de la volatilidad del mercado.

Conclusión

En general, la Estrategia de Breakout de DCCI es un sistema de trading a corto plazo muy práctico. Identifica situaciones de sobrecompra/sobreventa utilizando el indicador CCI e incorpora el promedio móvil para sesgo direccional. El riesgo se gestiona a través de stop losses. Las señales simples y claras hacen que esta estrategia sea fácil de implementar para el trading a corto plazo.


/*backtest
start: 2023-02-11 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © tweakerID

// ---From the "Bitcoin Trading Strategies" book, by David Hanson---

// After testing, works better with an ATR stop instead of the Strategy Stop. This paramater
// can be changed from the strategy Inputs panel.

// "CCI Scalping Strategy
// Recommended Timeframe: 5 minutes
// Indicators: 20 Period CCI, 20 WMA
// Long when: Price closes above 20 WMA and CCI is below -100, enter when CCI crosses above -100.
// Stop: Above 20 WMA"

//@version=4
strategy("CCI Scalping Strat", 
     overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_Stop = input(0, step=.05, title="Strategy Stop Mult")*.01
i_CCI=input(16, title="CCI Length")
i_WMA=input(5, title="WMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Stop Loss and Take Profit")
i_SLType=input(defval="ATR Stop", title="Type Of Stop", options=["Strategy Stop", "Swing Lo/Hi", "ATR Stop"])
i_SPL=input(defval=10, title="Swing Point Lookback")
i_PercIncrement=input(defval=2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_ATR = input(14, title="ATR Length")
i_ATRMult = input(10, step=.1, title="ATR Multiple")
i_TPRRR = input(1.5, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR

// ATR Stop
ATR=atr(i_ATR)*i_ATRMult
ATRLong = ohlc4 - ATR
ATRShort = ohlc4 + ATR
ATRLongStop = valuewhen(bought, ATRLong, 0)
ATRShortStop = valuewhen(bought, ATRShort, 0)
LongSL_ATR_price = strategy.position_size > 0 ? ATRLongStop : na 
ShortSL_ATR_price = strategy.position_size < 0 ? ATRShortStop : na 
ATRtp=strategy.position_avg_price + (strategy.position_avg_price - LongSL_ATR_price)*i_TPRRR
ATRstp=strategy.position_avg_price - (ShortSL_ATR_price - strategy.position_avg_price)*i_TPRRR

/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

//CCI
CCI=cci(close, i_CCI)
//WMA
WMA=wma(close, i_WMA)

//Stops
LongStop=valuewhen(bought, WMA, 0)*(1-i_Stop)
ShortStop=valuewhen(bought, WMA, 0)*(1+i_Stop)
StratTP=strategy.position_avg_price + (strategy.position_avg_price - LongStop)*i_TPRRR
StratSTP=strategy.position_avg_price - (ShortStop - strategy.position_avg_price)*i_TPRRR

BUY = (close > WMA) and crossover(CCI , -100)
SELL = (close < WMA) and crossunder(CCI , 100)

//Trading Inputs
DPR=input(true, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL= i_SLType == "Swing Lo/Hi" ? entry_LL_price : i_SLType == "ATR Stop" ? LongSL_ATR_price : LongStop
SSL= i_SLType == "Swing Lo/Hi" ? entry_HH_price : i_SLType == "ATR Stop" ? ShortSL_ATR_price : ShortStop
TP= i_SLType == "Swing Lo/Hi" ? tp : i_SLType == "ATR Stop" ? ATRtp : StratTP
STP= i_SLType == "Swing Lo/Hi" ? stp : i_SLType == "ATR Stop" ? ATRstp : StratSTP

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////


plot(WMA)
plot(i_SL and strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(i_SL and strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(i_SL and strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", size=size.auto)
    

Más.