Estrategia de trading cuantitativo basada en la tendencia de liquidez


Fecha de creación: 2023-12-21 10:19:52 Última modificación: 2023-12-21 10:19:52
Copiar: 0 Número de Visitas: 701
1
Seguir
1623
Seguidores

Estrategia de trading cuantitativo basada en la tendencia de liquidez

Descripción general

Esta estrategia se llama estrategia de tendencia impulsada por liquidez, cuyo objetivo es identificar la dirección de la tendencia de los precios en diferentes períodos de tiempo y tomar decisiones de compra o venta en consecuencia. La estrategia utiliza un sistema de doble línea para juzgar la tendencia y aprovechar el índice de fuerza relativa de las diferencias en los precios en múltiples marcos de tiempo para reaccionar a tiempo cuando la tendencia cambia.

Principio de estrategia

La lógica central de la estrategia se basa en el indicador CHOP, en el que el sistema de promedios cambiantes determina la dirección de la tendencia general. En concreto, la estrategia calcula los valores RSI de la línea rápida (Length = 20) y la línea lenta (Length = 50) en un marco de tiempo de alto ciclo, y calcula el diferencial entre ambos. Cuando la línea rápida RSI cruza la línea lenta RSI, se determina como una tendencia alcista, formando una señal múltiple; por el contrario, la línea rápida RSI cruza la línea lenta RSI y forma una señal alcista.

La estrategia también introdujo la determinación de múltiples marcos de tiempo: calcular el diferencial RSI en períodos más altos (como la línea del sol) para determinar la dirección de la tendencia general; realizar compras y ventas específicas en períodos más bajos (como la línea de 5 minutos) según los resultados de los períodos más altos. Esta combinación de marcos de tiempo tiene en cuenta tanto el juicio de tendencias de períodos altos como la flexibilidad de las operaciones de períodos bajos.

Ventajas estratégicas

  • Utilizando el RSI para determinar el potencial cambio de tendencia, reaccionar con anticipación, y ser sensible
  • Aplicación de ideas de marcos de tiempo múltiples, tendencias de juicio de alto ciclo, ejecución de operaciones de bajo ciclo
  • El RSI refleja los cambios en los precios y en el volumen de transacciones, lo que refleja la fluidez y el entusiasmo del mercado
  • Parámetros sencillos, fáciles de entender, explicar y ajustar

Riesgos estratégicos y soluciones

  • En el caso de la ecuación de la ecuación doble, puede haber una ruptura falsa.
  • El fracaso de la brecha puede causar pérdidas innecesarias.

La solución:

  1. Ajuste de los parámetros de la línea media para reducir la probabilidad de falsas brechas
  2. Aumentar las condiciones de filtración para evitar la entrada innecesaria

Dirección de optimización de la estrategia

  • Optimización de los parámetros del RSI con el algoritmo de filtro de Kalman
  • Adición de indicadores auxiliares de juicio como el MACD
  • Establecimiento de posiciones de salida dinámicas en combinación con cambios en el volumen de operaciones

Resumir

Esta estrategia utiliza el diferencial RSI para determinar los cambios potenciales en la tendencia y capturar los puntos de inflexión de manera sensible. El uso de marcos temporales múltiples garantiza el juicio de las tendencias generales y hace que las operaciones de compra y venta específicas sean más flexibles. En comparación con otras estrategias de seguimiento de tendencias, la estrategia es más simple, directa, los ajustes de los parámetros son intuitivos y fáciles de ajustar y optimizar.

Código Fuente de la Estrategia
/*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)