Visión por computadora para el trading (Parte 2): Complicamos la arquitectura para el análisis 2D de imágenes RGB
Introducción: cuando los números cobran vida
En la primera parte de nuestro estudio, mostramos cómo las redes neuronales convolucionales pueden analizar series temporales de cotizaciones de divisas a través de filtros unidimensionales. Ahora estamos dando un salto cuántico: hoy vamos a enseñar a los algoritmos a percibir el mercado como un paisaje holístico lleno de texturas, patrones y señales ocultas.
La transformación de series numéricas secas en imágenes permite al algoritmo analizar el mercado desde una perspectiva completamente nueva. Así es exactamente como piensan los tráders expertos, que no solo ven tablas de datos, sino una imagen viva del mercado donde cada detalle implica una señal significativa. Nuestro algoritmo va más allá de la representación unidimensional, revelando estructuras y patrones que permanecen invisibles en las series numéricas.
La alquimia de los datos: de números a sinfonías visuales
Así, nuestro lienzo digital de 128x128 píxeles se convierte en el lienzo sobre el que se desarrolla el drama del mercado. Las líneas de cotizaciones de acciones se transforman en mapas visuales multicanal.

El canal rojo late con los datos de precio: el Santo Grial que persiguen los tráders. El verde cobra vida gracias a los indicadores técnicos: medias móviles, MACD, bandas de Bollinger: herramientas perfeccionadas durante décadas. El canal azul es la pista de los osciladores: RSI, estocástico, indicadores de volatilidad, que, como un pulso, muestran el estado de ánimo del mercado.
El código que crea esta magia resulta engañosamente simple, pero detrás de él se esconde un poder que podría revolucionar nuestra comprensión de los mercados:
# Фрагмент кода, превращающий данные в RGB-изображение for t in range(window_size): x = int(t / window_size * img_size[1]) y = int((1 - img_data[j, t]) * img_size[0]) if 0 <= y < img_size[0] and 0 <= x < img_size[1]: img[y, x, 0] = 1.0 # Красный канал для ценовых данных
Cuando los datos se convierten en una imagen, surgen formas sorprendentes, como las estrellas en el cielo nocturno. Es como ver una cara en una fotografía en lugar de describirla con fórmulas. Los patrones que los tráders pasan años aprendiendo a reconocer (“cabeza y hombros”, “doble fondo”, “bandera”) cobran vida ante el algoritmo y se vuelven tan obvios como el amanecer.
Para hacer estas imágenes aún más ricas, hemos añadido patrones de velas. Las velas alcistas brillan en verde, como señal de esperanza de crecimiento, mientras que las velas bajistas brillan en rojo, como una advertencia de peligro. Las mechas están dibujadas en medios tonos, como sombras, haciendo alusión a la lucha entre compradores y vendedores. Esto permite que el modelo no solo capte tendencias generales, sino también detecte detalles sutiles como “martillo”, “envolvente” y “doji”.
Así es como se implementa en el código:
if close_y < open_y: # Бычья свеча for y in range(close_y, open_y): if 0 <= y < img_size[0] and 0 <= x < img_size[1]: img[y, x, 1] = 1.0 # Зелёный else: # Медвежья свеча for y in range(open_y, close_y): if 0 <= y < img_size[0] and 0 <= x < img_size[1]: img[y, x, 0] = 1.0 # Красный
Estas imágenes no solo son visualizaciones. Son como mapas de calor, donde la intensidad del color refleja la energía del mercado, y cada vela supone una pequeña historia sobre la batalla entre toros y osos. Este es un nuevo lenguaje en el que el algoritmo habla al mercado y suena a poesía.
La arquitectura neuronal: un tráder artificial con triple visión
Crear un tráder artificial es como construir un rascacielos donde cada piso realiza su propia tarea y juntos crean algo grandioso. Nuestra arquitectura consta de tres caminos paralelos, cada uno de los cuales mira el mercado desde su propio ángulo. El primer camino, con filtros de convolución cortos, captura destellos instantáneos: rupturas de nivel, inversiones, saltos bruscos. El segundo, con filtros largos, analiza las grandes tendencias que, como los ríos, dan forma a los ciclos del mercado. La tercera vía monitorea la volatilidad y la energía, analizando los osciladores para comprender si el mercado está tranquilo o ya listo para explotar.
El código que muestra esta idea se ve así:
local_path = Conv1D(64, 3, padding='same', activation='relu')(inputs[:,:,:,0]) trend_path = Conv1D(64, 7, padding='same', activation='relu')(inputs[:,:,:,1]) vol_path = Conv1D(64, 5, padding='same', activation='relu')(inputs[:,:,:,2])
Estos caminos se fusionan en un todo único, pero antes de hacerlo pasan por el mecanismo de atención, una tecnología que enseña al modelo a centrarse en lo esencial, como un tráder que, en medio del ruido de las noticias y los gráficos, solo ve la señal clave. Marcus du Sautoy, autor de “El código de la creatividad”, lo compara con la meditación: “El modelo aprende a descartar el ruido y ver la esencia”. Una línea de código hace que esto sea una realidad:
attention_layer = Attention()([merged, merged])
Pero eso no es todo. Añadimos una capa LSTM bidireccional que mira los datos de un lado a otro, como un historiador que pasa las páginas del pasado y del futuro. Esto ayuda a capturar patrones complejos: consolidaciones prolongadas, reversiones ocultas, momentos en que el mercado se congela antes de un impulso. Y después, la unificación global de características, como un director de orquesta, reúne todas las notas en una única sinfonía, creando una visión holística del mercado.
El toque final es el aprendizaje multitarea. El modelo no solo decide si el precio subirá o bajará, sino que pronostica hasta dónde se moverá el mercado. Peter Lynch, el legendario inversor, dijo una vez: “Saber que una acción va a subir es una cosa: predecir que crecerá exactamente un 8% es otra cosa muy distinta”. Nuestro modelo hace exactamente eso, como un jugador de ajedrez que no solo ve el movimiento, sino la partida completa.
A través del ojo de la cerradura: cómo un algoritmo revela sus pensamientos
El código que lo hace posible es sencillo, pero detrás se esconde una auténtica revolución:
attention = np.mean(np.abs(attention_maps[i]), axis=-1) heatmap = cv2.applyColorMap(np.uint8(255 * attention_resized), cv2.COLORMAP_JET)
Esta visualización es el comienzo de una nueva ciencia: la interpretación neuronal de los mercados. Por primera vez, no solo obtenemos un pronóstico de una caja negra, sino que entendemos por qué se ha hecho.
Otro descubrimiento es la especialización de las neuronas. Analizando la activación de las capas internas, vimos que algunas neuronas se “iluminan” solo durante los giros bruscos, otras durante las tendencias suaves y otras durante la calma antes de la tormenta. Es como en el cerebro humano, donde distintas áreas son responsables de la visión o la audición.
El modelo creaba su propio mapa del mercado, clasificando las situaciones de una forma que ningún analista lo había hecho jamás. Por ejemplo, descubrimos divergencias inusuales entre el RSI y el precio que los tráders experimentados luego confirmaron como significativas. Esto no es simplemente un algoritmo: es una nueva forma de ver el mercado.
Transparencia de las decisiones: cuando una máquina se explica por sí sola
Nuestro sistema no solo produce predicciones: también explica cómo ha llegado a ellas. Podemos dibujar un gráfico donde las áreas de atención del modelo estén resaltadas en rojo, mostrando lo que está mirando. Sería como mirar dentro de la mente de un tráder mientras recorre puntos clave en un gráfico. El código para esta visualización se ve así:
def plot_prediction_with_attention(data, prediction, attention_weights): plt.plot(data.index, data['close'], label='Цена закрытия', color='black', linewidth=2) for i in range(len(data.index) - 1): plt.axvspan(data.index[i], data.index[i+1], alpha=attention_weights[i] * 0.3, color='red')
Este tipo de imágenes convierten un modelo misterioso en un compañero. El tráder no solo ve que el mercado subirá, sino también el motivo de ello: qué indicadores, qué velas y qué momentos han convencido al algoritmo. El modelo se desliza a través de los datos, produciendo predicciones cuadro por cuadro, como un director filmando una película del mercado. No se trata simplemente de números: es una historia contada en movimiento.
imageio.mimsave(gif_path, frames, duration=0.5)

Historia del éxito: cómo un modelo cambia las reglas del juego
Para entender cómo funciona el modelo en la práctica, vamos a imaginar a una tráder llamada Anna que trabaja para un pequeño fondo de trading por cuenta propia en Chicago. Anna confió en su experiencia e intuición durante años, pero el mercado se volvió cada vez más complejo y la competencia cada vez más dura. Una vez que comenzó a usar este modelo, su enfoque cambió. En lugar de pasar horas analizando gráficos, ahora mira los mapas de calor de atención que dibuja el modelo sobre el EURUSD. Estos mapas muestran dónde el mercado está a punto de revertirse, dónde la tendencia va ganando fuerza y dónde se debe esperar una pausa. Pero el modelo también puede aliviar por completo el estrés de la joven evolucionando hasta convertirse en un robot comercial.
Sutilezas técnicas: cómo un modelo aprende a ver
Uno de los pasos clave ha sido utilizar RobustScaler para normalizar los datos. Los mercados son caóticos y los shocks, como las noticias repentinas, pueden distorsionar la imagen. RobustScaler ayuda a que el modelo siga siendo fiable al ignorar estas anomalías. Así es como funciona:
scaler = RobustScaler() if window_data[indicator].std() != 0: img_data[j] = scaler.fit_transform(window_data[indicator].values.reshape(-1, 1)).flatten()
Otro truco es desenfocar las imágenes usando un filtro gaussiano. Esto suaviza el ruido y ayuda al modelo a centrarse en patrones generales en lugar de en picos aleatorios. Es como ponerse unas gafas para poder ver el bosque a través de los árboles:
img = gaussian_filter1d(img, sigma=0.5, axis=0) img = gaussian_filter1d(img, sigma=0.5, axis=1)
El entrenamiento del modelo representa una saga aparte. Hemos usado callbacks para evitar el sobreajuste, hemos guardado las mejores versiones y adaptado la tasa de aprendizaje. EarlyStopping detiene el proceso si el modelo comienza a "atascarse" y a aprender los datos de memoria, mientras que ReduceLROnPlateau reduce el paso cuando el progreso se ralentiza. Es como enseñar a un niño a montar en bicicleta: le ofreces apoyo hasta que aprende a montar por sí solo.
callbacks = [ EarlyStopping(monitor='val_direction_accuracy', patience=15, restore_best_weights=True, verbose=1, mode='max'), ModelCheckpoint(filepath=os.path.join(checkpoint_dir, 'best_model.keras'), monitor='val_direction_accuracy', save_best_only=True, verbose=1), ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=7, min_lr=0.00001, verbose=1) ]
Los resultados del programa de entrenamiento son alentadores: la precisión en el conjunto de prueba no disminuye tanto, manteniéndose constantemente por encima del 53%, y esto ocurre durante un pequeño número de épocas de entrenamiento:

Nuestra arquitectura mejorada ya demuestra resultados prometedores, pero esto es solo el comienzo.
Integración de datos fundamentales
El modelo actual trabaja exclusivamente con datos técnicos. El siguiente paso lógico consiste en integrar factores fundamentales: indicadores económicos, noticias y sentimiento del mercado. Esto se puede conseguir a través del aprendizaje multimodal, donde el contexto de las noticias se transforma en representaciones vectoriales y se combina con datos técnicos.
Jerarquía temporal y estructura fractal de los mercados
Los mercados tienen una naturaleza fractal: los patrones aparecen en diferentes periodos de tiempo con sorprendente autosimilitud. Una arquitectura basada en el procesamiento jerárquico de distintos marcos temporales (desde gráficos de minutos hasta gráficos mensuales) puede revelar patrones complejos de múltiples niveles.
Aprendizaje adaptativo y metaaprendizaje
Los mercados están en constante evolución, lo cual requiere una adaptación continua de los modelos. Una dirección prometedora sería el desarrollo de un sistema de metaaprendizaje que ajuste automáticamente la arquitectura y los parámetros de un modelo dependiendo de las condiciones cambiantes del mercado.
Estos detalles no son solo código, sino también la base sobre la cual el modelo aprende a ver el mercado más profundamente que cualquier tráder.
Mirando hacia el futuro: nuevos horizontes
Nuestro modelo es solo el comienzo, el primer trazo de un lienzo mayor. Imaginemos que hemos añadido noticias y datos económicos. Los transformadores convertirán los titulares de Bloomberg y los informes de la Fed en vectores, que el modelo combinará con gráficos e indicadores. Una subida de los tipos de interés o un tuit repentino de Elon Musk se convertirán en parte de la imagen que ve el algoritmo. Es como darle a un tráder no solo un gráfico, sino todo el contexto del mundo.
Los mercados son fractales donde los patrones se repiten en diferentes escalas de tiempo, desde minutos hasta meses. Si entrenamos el modelo para que observe todos los marcos temporales simultáneamente, podrá encontrar tendencias anidadas que eluden incluso a los mejores analistas. Imagine un modelo que ve un patrón de cabeza y hombros en el gráfico diario y, dentro de él, un micropatrón en el gráfico de cinco minutos. Sería como ver una galaxia y sus estrellas de un vistazo.
¿Qué pasaría si el modelo se mejorase a sí mismo? El metaaprendizaje nos permitirá adaptarnos a las condiciones cambiantes del mercado, desde la calma hasta la tormenta. Si el mercado se vuelve volátil, ajustará sus parámetros por sí mismo, como un capitán que dirige el timón en medio de una tormenta. Esto no es una fantasía: es el siguiente paso que ya vislumbramos en el horizonte.
La transparencia es otro objetivo. Queremos que los tráders no solo confíen en el modelo, sino que aprendan de él. Visualizaciones más profundas de la atención y la activación revelarán cómo piensa el algoritmo y quizás nos enseñen a ver el mercado de forma distinta. Imaginemos que el modelo identifica un patrón que nadie había notado antes y los tráders comienzan a llamarlo “cruz neuronal” en su honor. No será solo una herramienta, sino una nueva forma de pensar.
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/18103
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Utilizando redes neuronales en MetaTrader
Algoritmo de camello — Camel Algorithm (CA)
Particularidades del trabajo con números del tipo double en MQL4
Creación de clases de negociación similares a MQL5 en Python para MetaTrader 5
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso