Esta estrategia utiliza los conceptos de filtro de Kalman y la reversión media para capturar las fluctuaciones anormales a corto plazo en los precios de las acciones e implementar el comercio direccional de las acciones. La estrategia primero establece un modelo de relación de precios entre una acción y un índice de mercado, y luego utiliza la técnica de filtro de Kalman para predecir y filtrar la relación.
La idea central de la estrategia es establecer un modelo de relación de precios entre el precio de la propia acción y el precio del índice de mercado. Esta relación refleja el nivel de precios de las acciones individuales en relación con el mercado general. Cuando la relación es alta, se considera que la acción individual está sobrevalorada y se genera una señal de venta. Cuando la relación es baja, se considera que la acción individual está infravalorada y se genera una señal de compra.
Para filtrar la señal de relación sin problemas, la estrategia adopta el algoritmo de filtro de Kalman. El filtro de Kalman pesa el valor observado real de la relación con el valor predicho y actualiza la predicción de la relación en tiempo real. Y calcula un valor de filtro de Kalman sin problemas. Las señales comerciales se generan cuando el valor filtrado excede 2 desviaciones estándar por encima o por debajo de los niveles normales.
Además, la estrategia también tiene en cuenta los factores de volumen de operaciones. Las señales comerciales reales solo se generan cuando el volumen de operaciones es grande. Esto evita algunas operaciones falsas.
La mayor ventaja de esta estrategia es el suavizado efectivo y la predicción de la relación de precios utilizando el algoritmo del filtro de Kalman. En comparación con los modelos de reversión media simples, el filtro de Kalman puede reflejar mejor los cambios dinámicos en los precios, especialmente cuando los precios fluctúan bruscamente. Esto permite a la estrategia detectar anomalías de precios de manera oportuna y generar señales comerciales precisas.
En segundo lugar, la combinación del volumen de operaciones también mejora la aplicabilidad práctica de la estrategia.
En general, la estrategia combina con éxito el filtrado de Kalman, la reversión media, el análisis del volumen de operaciones y otras técnicas para formar una estrategia comercial cuantitativa sólida.
Aunque la estrategia es sólida desde el punto de vista teórico y técnico, todavía existen algunos riesgos potenciales en el uso real que requieren atención.
El primero es el riesgo del modelo. Algunos parámetros clave en el modelo de filtro de Kalman, como la varianza del ruido del proceso, la varianza del ruido de observación, etc., deben estimarse sobre la base de datos históricos. Si la estimación es inexacta o hay un cambio importante en las condiciones del mercado, dará lugar a una desviación en la predicción del modelo.
El segundo es el riesgo de costos de deslizamiento. Las operaciones frecuentes incurrirán en costos de deslizamiento más altos, lo que erosionará los rendimientos de la estrategia. La optimización de parámetros y el filtrado del volumen de transacciones pueden reducir las transacciones innecesarias hasta cierto punto.
Por último, existe cierto riesgo sistémico de mercado al seguir el índice de mercado como referencia. Cuando todo el mercado fluctúa bruscamente, la relación de precios entre las acciones individuales y el mercado también será anormal. La estrategia generará entonces señales erróneas. Podemos considerar elegir un índice más estable como referencia.
Hay margen para una mayor optimización de la estrategia:
Utilice modelos de aprendizaje profundo más complejos para adaptarse y predecir las relaciones de precios.
Optimizar las reglas de filtrado del volumen de operaciones para lograr ajustes de umbral más dinámicos e inteligentes, lo que reduce la probabilidad de operaciones falsas.
Prueba diferentes índices de mercado como puntos de referencia de estrategia y elige índices con fluctuaciones más pequeñas y estables, lo que reduce el impacto del riesgo sistémico de mercado.
Incorporar el análisis fundamental de las acciones para evitar la negociación de algunas acciones con valores fundamentales significativamente deteriorados.
Utilizar datos intradiarios de alta frecuencia para backtesting y optimización de la estrategia. Esto mejora el rendimiento real de la estrategia.
La estrategia captura con éxito las fluctuaciones anormales de precios a corto plazo en las acciones utilizando el modelo de filtro de Kalman. Mientras tanto, la introducción de señales de volumen también mejora la practicidad de la estrategia. Aunque todavía hay algunos riesgos de modelo y riesgos de mercado, esta es una estrategia comercial cuantitativa muy prometedora. Hay un gran margen de mejora y potencial de aplicación en la optimización futura del modelo y la señal.
/*backtest start: 2023-12-21 00:00:00 end: 2023-12-28 00:00:00 period: 1m basePeriod: 1m 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/ // © xXM3GAXx //@version=5 strategy("My strategy", overlay=true) //SPY or QQQ context = request.security("BTC_USDT:swap", timeframe.period, input(close)) //our stock particular = input(close) //ratio src = ta.roc(particular, 1) / math.abs(ta.roc(context, 1)) //kalman calculation Sharpness = input.float(1.0) K = input.float(1.0) greencolor = color.lime redcolor = color.red velocity = 0.0 kfilt = 0.0 Distance = src - nz(kfilt[1], src) Error = nz(kfilt[1], src) + Distance * math.sqrt(Sharpness*K/ 100) velocity := nz(velocity[1], 0) + Distance*K / 100 kfilt := Error + velocity //2 std devs up and down upper = kfilt[1] + 2 * ta.stdev(kfilt, input(20)) lower = kfilt[1] - 2 * ta.stdev(kfilt, input(20)) //plotting for visuals plot(kfilt, color=velocity > 0 ? greencolor : redcolor, linewidth = 2) plot(upper) plot(lower) //plot(ta.ema(ta.roc(particular, 1)/ta.roc(context, 1), 5), color = #00ffff, linewidth=2) //volume data vol = volume volema = ta.ema(volume, 10) //buy when ratio too low longCondition = kfilt<=lower and vol>=volema if (longCondition) strategy.entry("My Long Entry Id", strategy.long) //sell when ratio too high shortCondition = kfilt>=upper and vol>=volema if (shortCondition) strategy.entry("My Short Entry Id", strategy.short)