La estrategia de doble impulso establece bandas superiores e inferiores basadas en el precio de apertura y el rango del día anterior, yendo largo en las rupturas alcistas y corto en las rupturas bajistas.
Calcular el HH más alto y el LL más bajo en las barras N recientes.
Calcular el máximo HC cercano y el mínimo LC cercano del día anterior.
Rango del día anterior Rango es el mayor de HH-LC y HC-LL.
La banda superior BuyLine es el precio de apertura más k1 * rango.
La banda inferior SellLine es el precio de apertura menos k2*Range.
Ir largo cuando el cierre se rompe por encima de BuyLine. Ir corto cuando el cierre se rompe por debajo de SellLine.
Las principales ventajas de esta estrategia:
Captura la tendencia formada por las rupturas alrededor del precio de apertura.
Las bandas se establecen automáticamente en función de la volatilidad histórica, evitando la subjetividad.
Los valores de k personalizables se adaptan a productos con una volatilidad diferente.
Las señales de fuga tienen una calidad relativamente alta.
Periodos de retención flexibles para capturar las tendencias en diferentes plazos.
Principales riesgos de esta estrategia:
Dificultad para determinar el rango razonable de las bandas, riesgos de sobreajuste.
Las rupturas pueden ser señales falsas, hay que detener la pérdida.
El período de retención fijo no puede adaptarse dinámicamente al mercado.
Los datos insuficientes de las pruebas de retroceso conducen al ajuste de la curva.
Dificultad para llevar a cabo el comercio largo y corto juntos.
Soluciones:
Optimizar los valores de k en un conjunto de datos más grande para evitar el sobreajuste.
Establezca un stop loss adecuado para limitar las pérdidas por operación.
Añadir un filtro de tendencia para evitar el comercio de contratrend.
Considerar la posibilidad de reducir el período de retención a intradía.
Validación en vivo con dimensionamiento gradual de la posición.
Algunas maneras de mejorar la estrategia:
Ajuste dinámico de los valores k de las bandas.
Agregue el filtro de volumen para confirmar las señales de fuga.
Utilice el stop loss para proteger las ganancias.
Evaluar la fuerza de ruptura para el tamaño de la posición.
Distinguir entre tendencia y rango para descomponer la estrategia.
La estrategia de doble empuje puede capturar oportunidades de negociación de tendencia alrededor del precio de apertura. Pero la configuración de parámetros y la optimización del período de retención tienen un gran margen de mejora considerando el control de riesgos. Para el comercio en vivo, comience con parámetros conservadores y aumente el tamaño de las posiciones gradualmente.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-18 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Dual Thrust Strategy",overlay=true,initial_capital=1000) k1=input(0.67,type=float,step=0.01) k2=input(0.62,type=float,step=0.01) TimeFrame=input('240') len=input(20) HH=security(syminfo.tickerid,TimeFrame,highest(high,len),barmerge.lookahead_off) LC=security(syminfo.tickerid,TimeFrame,lowest(close,len),barmerge.lookahead_off) HC=security(syminfo.tickerid,TimeFrame,highest(close,len),barmerge.lookahead_off) LL=security(syminfo.tickerid,TimeFrame,lowest(low,len),barmerge.lookahead_off) Range=max(HH-LC,HC-LL) BuyLine=security(syminfo.tickerid,"D",open,barmerge.lookahead_off)+k1*Range SellLine=security(syminfo.tickerid,"D",open,barmerge.lookahead_off)-k2*Range plot(BuyLine,color=blue,linewidth=2,offset=1,transp=70) plot(SellLine,color=red,linewidth=2,offset=1,transp=70) LongCondition=crossover(close,BuyLine) ShortCondition=crossunder(close,SellLine) strategy.entry("enter long",true,1,when=LongCondition) strategy.entry("enter short",false,1,when=ShortCondition) plotshape(LongCondition and strategy.position_size<0?low:na,style=shape.labelup,location=location.absolute,color=blue,text="Long",textcolor=white,size=size.small) plotshape(ShortCondition and strategy.position_size>0?high:na,style=shape.labeldown,location=location.absolute,color=red,text="Short",textcolor=white,size=size.small) alertcondition(LongCondition and strategy.position_size<0,title='Long_DT') alertcondition(ShortCondition and strategy.position_size>0,title='Short_DT')