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.
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.
La estrategia tiene las siguientes ventajas:
Captura oportunamente las oportunidades de sobreventa y sobrecompra mediante la identificación de las reversiones mediante el indicador CCI.
Evita el comercio contra la tendencia al incorporar el análisis de la dirección de la tendencia utilizando promedios móviles.
Proporciona múltiples métodos opcionales de stop loss que se pueden ajustar en función de las condiciones del mercado.
Se trata de señales comerciales simples y claras que son fáciles de implementar.
La estrategia también presenta los siguientes riesgos:
El indicador CCI puede generar fácilmente señales falsas que no pueden evitarse por completo.
La colocación incorrecta del stop-loss puede causar un stop-out excesivo.
La incapacidad de identificar las tendencias significa que pueden generarse demasiadas operaciones innecesarias en mercados variados.
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:
Incorporar otros indicadores para filtrar las señales CCI.
Optimizar la colocación de la parada a través del backtesting.
Añadir indicadores de identificación de tendencias para evitar mercados agitados.
Determinar la dirección del comercio basado en el análisis de las principales áreas de soporte y resistencia.
Los principales aspectos para optimizar esta estrategia incluyen:
Optimización del parámetro CCI: ajustar el período de revisión CCI, optimizar los parámetros del indicador.
Optimización de Stop Loss: Prueba diferentes métodos de stop y selecciona el stop loss óptimo.
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.
Filtración de tendencias: añadir indicadores de identificación de tendencias como promedios móviles para evitar operaciones contra tendencias.
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.
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)