Esta estrategia integra el índice de fortaleza relativa (TSI), el índice de canal de productos básicos (CCI) y los indicadores de Hull Moving Average (Hull MA) para formar una estrategia de trading de seguimiento de tendencias.
La estrategia utiliza principalmente los indicadores de la ETI y CCI para juzgar la dirección de la tendencia y las situaciones de sobrecompra/sobreventa del mercado, así como el Hull MA para determinar la tendencia intermedia de los precios, y los tres se combinan como condiciones básicas para la apertura de posiciones.
Específicamente, cuando la línea rápida de TSI cruza por encima de la línea lenta, el indicador CCI cruza por encima de +20 && n1 sube, va largo; cuando la línea rápida de TSI cruza por debajo de la línea lenta, el indicador CCI cruza por debajo de -20 && n1 cae, va corto.
Al confirmar con indicadores a través de diferentes ciclos, se pueden filtrar eficazmente las fallas para seguir las tendencias a medio y largo plazo.
Se trata de una estrategia de seguimiento de tendencias relativamente estable y eficiente, con las siguientes ventajas principales:
El uso de las ETI para juzgar las tendencias a largo plazo es más fiable, evitando la interferencia del ruido del mercado a corto plazo;
La adición del indicador CCI puede confirmar los fenómenos de sobrecompra/sobreventa y filtrar algunas señales falsas.
El juicio de Hull MA
La integración de indicadores con diferentes parámetros puede mejorar la fiabilidad de las señales y reducir la probabilidad de interferencias.
Los parámetros flexibles de la estrategia se pueden optimizar para diferentes ciclos de mercado.
Aunque la estrategia es relativamente estable, todavía existen algunos riesgos a tener en cuenta:
El mercado puede experimentar reveses violentos que no pueden detenerse rápidamente por pérdidas, causando pérdidas relativamente grandes;
Los indicadores de la ETI de diferencia y de la ETI de CCI pueden presentar señales falsas y retrasos, sin que se cumplan algunos puntos de entrada.
La configuración incorrecta de los parámetros también puede conducir a una frecuencia de negociación excesivamente alta o a una disminución de la calidad de la señal.
Contramedidas:
Ajustar adecuadamente el stop loss para controlar las pérdidas individuales;
Confirmar con otros indicadores, según proceda, para mejorar la exactitud de la señal;
Ajustar los parámetros según el mercado para garantizar la estabilidad de la estrategia.
La estrategia también puede optimizarse en los siguientes aspectos:
Prueba diferentes combinaciones de indicadores de parámetros para encontrar la mejor coincidencia;
Introducir algoritmos de aprendizaje automático para lograr la optimización adaptativa de los parámetros;
Aumentar el módulo de gestión de capital para obtener ganancias más estables;
Incorporar más filtros para aumentar la estrategia de la tasa de ganancia.
Estos serán los focos para futuras optimizaciones.
Esta estrategia utiliza ampliamente los indicadores TSI, CCI y Hull MA para formar una estrategia de seguimiento de tendencias relativamente estable y eficiente. Aprovecha con éxito las ventajas de los indicadores de múltiples ciclos para mejorar la calidad de la señal. El siguiente paso será mejorar aún más la estabilidad y la rentabilidad de la estrategia a través de la optimización de parámetros, mejora de filtros y otros medios.
/*backtest start: 2022-11-21 00:00:00 end: 2023-11-27 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="TSI CCI Hull", shorttitle="TSICCIHULL", default_qty_type=strategy.percent_of_equity, default_qty_value=100, calc_on_order_fills= false, calc_on_every_tick=true, pyramiding=0) long = input(title="Long Length", type=input.integer, defval=50) short = input(title="Short Length", type=input.integer, defval=50) signal = input(title="Signal Length", type=input.integer, defval=25) price=input(title="Source",type=input.source,defval=open) Period=input(25, minval=1) lineupper = input(title="Upper Line", type=input.integer, defval=100) linelower = input(title="Lower Line", type=input.integer, defval=-100) p=price length= Period double_smooth(src, long, short) => fist_smooth = ema(src, long) ema(fist_smooth, short) pc = change(price) double_smoothed_pc = double_smooth(pc, long, short) double_smoothed_abs_pc = double_smooth(abs(pc), long, short) tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc) keh = tsi_value*5 > linelower ? color.red : color.lime teh = ema(tsi_value*5, signal*5) > lineupper ? color.red : color.lime meh = ema(tsi_value*5, signal*5) > tsi_value*5 ? color.red : color.lime i1=plot(tsi_value*5, title="TSI Value", color=color.black, linewidth=1,transp=100) i2=plot(ema(tsi_value*5, signal*5), title="TSI Signal", color=color.black, linewidth=1,transp=100) fill(i1,i2,color=meh,transp=85) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.black, linewidth=10) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=color.white, linewidth=8,transp=0) plot(cross(tsi_value*5, ema(tsi_value*5, signal*5)) ? tsi_value*5 : na, style=plot.style_circles, color=meh, linewidth=5) n2ma = 2 * wma(p, round(length / 2)) nma = wma(p, length) diff = n2ma - nma sqn = round(sqrt(length)) n1 = wma(diff, sqn) cci = (p - n1) / (0.015 * dev(p, length)) c = cci > 0 ? color.lime : color.red c1 = cci > 20 ? color.lime : color.silver c2 = cci < -20 ? color.red : color.silver cc=plot(cci, color=c, title="CCI Line", linewidth=2) cc2=plot(cci[1], color=color.gray, linewidth=1,transp=100) fill(cc,cc2,color=c,transp=85) plot(cross(20, cci) ? 20 : na, style=plot.style_cross,title="CCI cross UP", color=c1, linewidth=2,transp=100,offset=-2) plot(cross(-20, cci) ? -20 : na, style=plot.style_cross,title="CCI cross down", color=c2, linewidth=2,transp=100,offset=-2) TSI1=ema(tsi_value*5, signal*5) TSI2=ema(tsi_value*5, signal*5)[2] hullma_smoothed = wma(2*wma(n1, Period/2)-wma(n1, Period), round(sqrt(Period))) //plot(hullma_smoothed*200) longCondition = TSI1>TSI2 and hullma_smoothed<price and cci>0 if (longCondition and cci>cci[1] and cci > 0 and n1>n1[1]) strategy.entry("Buy Here", strategy.long) shortCondition = TSI1<TSI2 and hullma_smoothed>price and cci<0 if (shortCondition and cci<cci[1] and cci < 0 and n1<n1[1]) strategy.entry("Sell Here", strategy.short)