Lorentzian Classification Open Source
- Indicadores
- Versión: 1.0
La versión oficial para MetaTrader 5 del indicador «Lorentzian Classification» de jdehorty predice la dirección del movimiento futuro de los precios a partir de datos históricos de precios utilizando la distancia lorentziana.
Descripción general
Un clasificador de distancia lorentziana (LDC) es un algoritmo de clasificación basado en el aprendizaje automático capaz de categorizar datos históricos a partir de un espacio de características multidimensional. Este indicador muestra cómo se puede utilizar la clasificación lorentziana para predecir la dirección de los movimientos futuros de los precios. Cada barra se clasifica según la dirección del precio en un horizonte fijo de 4 barras, utilizando la distancia lorentziana como métrica para la clasificación basada en la distancia.
El código fuente completo está publicado en GitHub bajo la organización AI Edge (artificial-intelligence-edge). Se trata de la implementación oficial de AI Edge para MetaTrader 5, derivada del mismo algoritmo de clasificación lorentziana creado originalmente para TradingView.
Antecedentes
En física, el espacio lorentziano es quizás más conocido por su papel en la descripción de la curvatura del espacio-tiempo en la teoría de la relatividad general de Einstein (2). Este concepto abstracto de la física teórica también tiene aplicaciones tangibles en el análisis de series temporales de datos financieros.
Se ha planteado la hipótesis de que el espacio lorentziano es muy adecuado para analizar datos de series temporales (4), (5). Varios estudios empíricos respaldan esta idea: La distancia lorentziana es más robusta frente a los valores atípicos y el ruido que la distancia euclidiana, de uso común (1), (3), (6), y se ha demostrado que supera a docenas de otras métricas de distancia, incluidas la distancia de Manhattan, la similitud de Bhattacharyya y la similitud coseno (1), (3). En una amplia variedad de conjuntos de datos de series temporales, la métrica de la distancia lorentziana obtiene sistemáticamente unos de los resultados de precisión media más altos (1).
La distancia euclidiana se utiliza habitualmente como métrica predeterminada para medir la similitud de patrones, pero puede que no sea óptima para los datos de los mercados financieros. Los datos financieros pueden verse significativamente distorsionados por la proximidad a acontecimientos importantes —reuniones del FOMC, anuncios de los bancos centrales, perturbaciones geopolíticas—. Esta distorsión provocada por los acontecimientos puede compararse con la deformación gravitatoria que un objeto masivo impone al continuo espacio-tiempo. En el caso de los mercados financieros, el continuo análogo es el «precio-tiempo».
En la galería (S1) se incluye una comparación lado a lado de cómo aparecen los vecindarios de puntos históricos similares en el espacio euclídeo tridimensional y en el espacio lorentziano.
En dicha comparación, el espacio lorentziano se adapta mejor a la deformación del «precio-tiempo», ya que la función de distancia lorentziana comprime el vecindario euclidiano de tal forma que la nueva distribución de vecindarios se agrupa en torno a cada uno de los ejes principales, además del propio origen. Esto significa que, aunque algunos vecinos más cercanos sean idénticos independientemente de la métrica utilizada, el espacio lorentziano también admite puntos históricos que una métrica euclidiana nunca revelaría.
Intuitivamente, esto tiene sentido. La evolución de los precios que se produce en las horas posteriores a un discurso del banco central se asemejará a algunas de las ocasiones anteriores en las que ocurrió ese mismo evento, independientemente de si el mercado estaba sobrecomprado o sobrevendido, o de si las condiciones macroeconómicas eran, en términos generales, alcistas o bajistas. La distancia euclidiana pasa por alto estos puntos vecinos y, a menudo, muestra en su lugar datos irrelevantes del día anterior al evento. La distancia lorentziana tiene en cuenta la distorsión del precio-tiempo causada por el evento y libera al modelo del sesgo temporal impuesto por la estructura de una serie temporal sin procesar.
Para conocer los detalles de implementación del algoritmo de clasificación, consulta el código fuente.
Cómo utilizarlo
El indicador traza una superposición de barras codificadas por colores, dos líneas de estimación de regresión de kernel y etiquetas de señales alcistas/bajistas directamente en el gráfico. Una tabla de estadísticas de operaciones situada en una esquina muestra información en tiempo real sobre la tasa de aciertos para su uso en la ingeniería de características. Todos los elementos visuales y sus controles, incluida la tabla de estadísticas de operaciones, se muestran en la galería (S2, S3).
Interpretación de las señales
El modelo asigna a cada barra un valor de predicción entero. Los valores más positivos corresponden a un sentimiento más alcista, y los valores más negativos corresponden a un sentimiento más bajista; los patrones secuenciales en estos valores pueden ayudar a identificar fractales y a distinguir posibles puntos de inflexión del ruido, en lugar de basarse únicamente en la clasificación de una sola barra.
Las líneas de estimación del núcleo se calculan mediante regresión del núcleo utilizando un núcleo cuadrático racional. Sirven como confirmación adicional de las predicciones del modelo barra por barra.
Los puntos de salida sugeridos se pueden activar o desactivar a través del menú de configuración. Las salidas estrictas se basan en el intervalo de entrenamiento del modelo (4 barras), mientras que las salidas dinámicas ofrecen sugerencias basadas en la regresión del núcleo en tiempo real.
La tabla de estadísticas de operaciones ofrece una lectura en tiempo real del rendimiento de las operaciones para el número seleccionado de barras históricas (por defecto, 2000). No se trata de un método de backtesting robusto: por defecto, solo refleja si una operación histórica fue rentable 4 barras después de la entrada o, en el modo de salidas dinámicas, si fue rentable tras la ejecución de la salida dinámica. Su objetivo es facilitar la ingeniería de características en tiempo real, ayudando a calibrar los ajustes del modelo para un gráfico determinado.
Los «cambios anticipados», que se muestran en la tabla de estadísticas de operaciones, contabilizan los casos en los que se generó una nueva señal de aprendizaje automático antes de que se alcanzara la salida de la operación anterior. Un recuento elevado puede indicar un mercado volátil y sugerir la activación de filtros de señal adicionales.
Configuración general
- Fuente — Por defecto: «Precio de cierre». Controla la fuente de datos de entrada.
- Recuento de vecinos — Por defecto: 8, mín.: 1, máx.: 100. Controla el número de vecinos a tener en cuenta.
- Número máximo de barras anteriores — Por defecto: 2000.
- Recuento de características — Por defecto: 5, mín.: 2, máx.: 5. Controla el número de características utilizadas para las predicciones.
- Compresión de color — Por defecto: 1, mín.: 1, máx.: 10. Controla el factor de compresión de la intensidad de la escala de colores.
- Mostrar salidas — Por defecto: falso. Muestra marcadores de flecha de salida en el gráfico. Las salidas estrictas se basan en el intervalo de entrenamiento del modelo (4 barras); consulta «Usar salidas dinámicas» más abajo para conocer las salidas basadas en el núcleo.
- «Usar salidas dinámicas » — Por defecto: falso. Controla si se amplía dinámicamente el umbral de salida basándose en la regresión del núcleo, lo que reduce las salidas prematuras.
- Incluir historial completo — Por defecto: falso. Cuando está activado, busca en todo el historial de barras para el entrenamiento; cuando está desactivado, utiliza solo las barras más recientes (Max Bars Back).
- Mostrar estadísticas de operaciones — Por defecto: true. Controla si se muestra la tabla de estadísticas de operaciones (solo para calibración, no para backtest). Por defecto, refleja la rentabilidad 4 barras después de la entrada, o en la salida dinámica si la opción «Usar salidas dinámicas» está activada.
- Usar estimación del peor caso — Por defecto: false. Cuando está activada, utiliza el precio de cierre de la barra en lugar del precio medio de la barra para las entradas de las estadísticas de la operación, lo que produce una estimación más conservadora, coherente con los resultados tradicionales de las pruebas retrospectivas.
Configuración de filtros
- Usar filtro de volatilidad — Por defecto: true. Controla si se aplica el filtro de volatilidad.
- Usar filtro de régimen — Por defecto: true. Controla si se aplica el filtro de detección de tendencias.
- Usar filtro ADX — Por defecto: falso. Controla si se aplica el filtro ADX.
- Umbral de régimen — Por defecto: -0,1; mín.: -10; máx.: 10. Controla el filtro de detección de régimen para identificar condiciones de tendencia frente a condiciones de oscilación lateral.
- Umbral de ADX — Por defecto: 20, mín.: 0, máx.: 100. Controla el umbral de ADX para identificar condiciones de tendencia frente a condiciones de oscilación lateral.
- Usar filtro EMA — Por defecto: false. Cuando está activado, las posiciones largas requieren un cierre por encima de la EMA y las cortas, un cierre por debajo de ella.
- Período de la EMA — Por defecto: 200. Período de la EMA utilizada para el filtro EMA.
- Usar filtro SMA — Por defecto: falso. Cuando está activado, las posiciones largas requieren un cierre por encima de la SMA y las cortas, un cierre por debajo de ella.
- Período de la SMA — Por defecto: 200. Período de la SMA utilizada para el filtro SMA.
Configuración de la regresión del núcleo
- Operar con el kernel — Por defecto: true. Controla si se opera con el kernel.
- Mostrar estimación del kernel — Por defecto: true. Controla si se muestra la estimación del kernel en el gráfico.
- Usar suavizado del kernel — Por defecto: false. Suavizado basado en cruces: menos cambios de color, más entradas de aprendizaje automático.
- Ventana retrospectiva — Por defecto: 8, mín.: 3. Controla el número de barras utilizadas para la estimación. Rango recomendado: 3–50.
- Ponderación relativa — Por defecto: 8. Controla la ponderación relativa de los marcos temporales. Rango recomendado: 0,25–25.
- Iniciar regresión en la barra — Por defecto: 25. Controla el índice de la barra en la que comienza la regresión. Rango recomendado: 2–25.
- Retraso del núcleo — Por defecto: 2. Retraso utilizado para la detección de cruces; los valores más bajos producen cruces más tempranos. Rango recomendado: 1–2.
Ajustes de ingeniería de características
Nota: La sección «Ingeniería de características» sirve para ajustar con precisión las características utilizadas en las predicciones. Los valores por defecto están optimizados para los marcos temporales de 4H a 12H en la mayoría de los gráficos, pero deberían funcionar razonablemente bien en otros marcos temporales.
Hay cinco ranuras de características (Característica 1–5), cada una de ellas configurable de forma independiente. El ajuste «Número de características» (en «Ajustes generales») controla cuántas ranuras de características se utilizarán. Por ejemplo, si el «Número de características» es 3, se utilizarán la Característica 1, la Característica 2 y la Característica 3. Deben estar activas al menos 2 características. Para cada ranura, se elige qué tipo de característica utilizar entre las cuatro opciones siguientes: RSI, WT, CCI y ADX. Tras elegir un tipo, se configuran los dos parámetros de esa ranura: «Parámetro A» y «Parámetro B». Lo que controlan estos parámetros depende del tipo elegido para esa ranura:
- RSI — Parámetro A: período del RSI. Parámetro B: período de suavizado EMA aplicado al RSI.
- WT (WaveTrend): Parámetro A: longitud del canal. Parámetro B: longitud media (suavizado de segunda etapa).
- CCI — Parámetro A: período del CCI. Parámetro B: período de suavizado EMA aplicado al CCI.
- ADX — Parámetro A: período del ADX. Parámetro B: no se utiliza; el ADX lo ignora.
Se permite utilizar el mismo tipo en más de una ranura (por ejemplo, el RSI tanto en la característica 1 como en la 5) y cuenta como dos características independientes, normalmente con valores de parámetros diferentes.
Valores por defecto por ranura:
- Característica 1 — RSI. Parámetro A (período): 14. Parámetro B (suavizado): 1.
- Característica 2 — WT. Parámetro A (longitud del canal): 10. Parámetro B (longitud media): 11.
- Característica 3 — CCI. Parámetro A (período): 20. Parámetro B (suavizado): 1.
- Característica 4 — ADX. Parámetro A (período): 20. Parámetro B: no se utiliza.
- Característica 5 — RSI. Parámetro A (período): 9. Parámetro B (suavizado): 1.
Configuración de visualización
- Mostrar colores de las barras — Por defecto: true. Controla si se muestran los colores de las barras.
- Mostrar valores de predicción de las barras — Por defecto: verdadero. Controla si se muestra la evaluación del modelo de cada barra como un número entero.
- Usar desplazamiento ATR — Por defecto: falso. Controla si se utiliza un desplazamiento basado en el ATR en lugar del desplazamiento de predicción de la barra.
- Desplazamiento de predicción de barras — Por defecto: 0, mín.: 0. Controla el desplazamiento de las predicciones de las barras como porcentaje respecto al máximo o mínimo de la barra.
Código fuente
El código fuente completo en MQL5 está publicado en GitHub bajo la organización AI Edge. La página de GitHub se muestra en la galería (S4).
Aviso de riesgo
Operar conlleva un riesgo significativo de pérdida. Este indicador clasifica los estados históricos del mercado y proporciona señales para que el operador las evalúe. No garantiza resultados rentables. El rendimiento histórico de la clasificación no predice resultados futuros.
Referencias
- R. Giusti y G. E. A. P. A. Batista, «An Empirical Comparison of Dissimilarity Measures for Time Series Classification», Conferencia Brasileña sobre Sistemas Inteligentes de 2013, octubre de 2013, DOI: 10.1109/bracis.2013.22.
- Y. Kerimbekov, H. S. Bilge y H. H. Ugurlu, «The use of Lorentzian distance metric in classification problems», Pattern Recognition Letters, vol. 84, 170-176, diciembre de 2016, DOI: 10.1016/j.patrec.2016.09.006.
- A. Bagnall, A. Bostrom, J. Large y J. Lines, «The Great Time Series Classification Bake Off: An Experimental Evaluation of Recently Proposed Algorithms». ResearchGate, 4 de febrero de 2016.
- H. S. Bilge, Yerzhan Kerimbekov y Hasan Huseyin Ugurlu, «Un nuevo método de clasificación mediante el uso de la métrica de distancia lorentziana», ResearchGate, 2 de septiembre de 2015.
- Y. Kerimbekov y H. Sakir Bilge, «Lorentzian Distance Classifier for Multiple Features», Actas de la 6.ª Conferencia Internacional sobre Aplicaciones y Métodos de Reconocimiento de Patrones, 2017, DOI: 10.5220/0006197004930501.
- V. Surya Prasath et al., «Efectos de la elección de la medida de distancia en el rendimiento del clasificador KNN: una revisión». [En línea].
Agradecimientos
Indicador original:
- veryfid — Por sus numerosas aportaciones, debates y consejos de gran valor que han contribuido a dar forma a este proyecto.
- capissimo — Por compartir ideas de código abierto sobre diversas implementaciones del método del vecino más cercano, varias de las cuales ayudaron a inspirar el proyecto original.
- RikkiTavi — Por las numerosas y valiosas conversaciones relacionadas con la física y por su ayuda en el desarrollo de un mecanismo para visualizar diversos algoritmos de distancia en 3D utilizando JavaScript.
- jlaurel — Por sus inestimables recomendaciones bibliográficas, que ayudaron a sentar las bases del tema subyacente.
- annutara — Por realizar las pruebas beta del indicador original y compartir ideas y reflexiones útiles en las primeras fases de su desarrollo.
- jasontaylor7 — Por realizar las pruebas beta del indicador original y por las numerosas conversaciones útiles que dieron forma al flujo de trabajo de backtesting.
- meddymarkusvanhala — Por realizar las pruebas beta del indicador original.
- dlbnext: por realizar pruebas retrospectivas detalladas del indicador original y por compartir ideas para mejorar la experiencia del usuario.
