Estrategia de tendencia impulsada por la liquidez - Estrategia de negociación cuantitativa basada en la indicación de la tendencia de flujo

El autor:¿ Qué pasa?, Fecha: 2023-12-21 10:19:52
Las etiquetas:

img

Resumen general

La estrategia se llama Estrategia de tendencia impulsada por la liquidez. Su objetivo es identificar la dirección de la tendencia del precio en diferentes marcos de tiempo y tomar las decisiones largas o cortas correspondientes. La estrategia emplea un sistema de promedio móvil dual para determinar la tendencia y utiliza la diferencia entre los valores del índice de fuerza relativa (RSI) en múltiples marcos de tiempo para responder oportunamente a los cambios de tendencia.

Estrategia lógica

La lógica central de esta estrategia se basa en el indicador CHOP, donde el sistema de promedio móvil juzga la dirección general de la tendencia. Específicamente, la estrategia calcula los valores de RSI de una línea rápida (Length = 20) y una línea lenta (Length = 50) en marcos de tiempo más altos, y calcula la diferencia entre las dos líneas RSI. Cuando la línea rápida RSI cruza por encima de la línea lenta RSI, señala una tendencia al alza y desencadena señales largas. Por el contrario, si la línea rápida RSI cruza por debajo de la línea lenta RSI, indica una tendencia a la baja y genera señales cortas.

La estrategia también introduce un mecanismo de marcos de tiempo múltiples: calcula la diferencia RSI en marcos de tiempo más altos (por ejemplo, diarios) para determinar la dirección general de la tendencia, y luego ejecuta órdenes de compra y venta reales en marcos de tiempo más bajos (por ejemplo, 5 minutos) basadas en el juicio de tendencia de marcos de tiempo más altos.

Ventajas de la estrategia

  • Captar de forma sensible las posibles inversiones de tendencia con anticipación utilizando la divergencia del RSI
  • Aplicar el concepto de marco de tiempo múltiple para determinar la tendencia en TF más alto y ejecutar órdenes en TF más bajo
  • El RSI refleja las variaciones de precios y volumen, indicando la liquidez y la participación del mercado
  • Configuración de parámetros sencillos, fáciles de entender, explicar y ajustar

Riesgos y soluciones

  • Puede ocurrir una fuga falsa con el sistema de doble MA.
  • Una fuga fallida puede causar pérdidas innecesarias.

Soluciones:

  1. Ajuste de los parámetros de MA para reducir la probabilidad de una ruptura falsa
  2. Añadir filtros para evitar la entrada innecesaria

Direcciones de optimización

  • Optimiza los parámetros del RSI utilizando los algoritmos del filtro de Kalman
  • Añadir el MACD y otros indicadores para facilitar el juicio
  • Establecer posiciones de salida dinámicas basadas en cambios en el volumen de negociación

Conclusión

Esta estrategia aprovecha la divergencia del RSI para capturar sensiblemente los posibles puntos de inflexión de la tendencia. La aplicación de marcos de tiempo múltiples asegura juzgar la tendencia general mientras mantiene la ejecución de operaciones específicas flexible. En comparación con otras estrategias de seguimiento de tendencias, esta estrategia es más directa, intuitiva en los ajustes de parámetros y fácil de optimizar. En conclusión, la estrategia forma un sistema de trading de tendencias eficiente y práctico que vale la pena explorar y aplicar más.


/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Flow Trend Indicator Strategy", "FlowTI", overlay=true, calc_on_every_tick=true)

isTimeFrame(timeFrame) =>
    timeFrame == timeframe.period ? true : false

Htf() =>
    isTimeFrame("12") ? "60" : isTimeFrame("60") ? "300" : isTimeFrame("300") ? "D" : isTimeFrame("D") ? "W" : isTimeFrame("W") ? "M" : isTimeFrame("M") ? "5M" : "D"

TrendIndication() =>
    trendFastLength = 20
    trendSlowLength = 50
    upFastHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
    downFastHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendFastLength), barmerge.gaps_off, barmerge.lookahead_on)
    rsiFastHtf = downFastHtf == 0 ? 100 : upFastHtf == 0 ? 0 : 100 - (100 / (1 + upFastHtf / downFastHtf))
    upSlowHtf = request.security(syminfo.tickerid, Htf(), rma(max(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
    downSlowHtf = request.security(syminfo.tickerid, Htf(), rma(-min(change(close), 0), trendSlowLength), barmerge.gaps_off, barmerge.lookahead_on)
    rsiSlowHtf = downSlowHtf == 0 ? 100 : upSlowHtf == 0 ? 0 : 100 - (100 / (1 + upSlowHtf / downSlowHtf))
    rsiDiff = rsiFastHtf - rsiSlowHtf
    crossover(rsiDiff, 0) ? true : crossunder(rsiDiff, 0) ? false : na

if (TrendIndication() == true)
    strategy.entry("Long", strategy.long)

if (TrendIndication() == false)
    strategy.entry("Short", strategy.short)

Más.