
Neurona biológica para la previsión de series temporales financieras
El trading moderno está experimentando una auténtica revolución. Redes neuronales, algoritmos genéticos, aprendizaje profundo... todas estas herramientas muestran resultados impresionantes, pero a menudo muestran un gran inconveniente: son demasiado "mecanicistas" e incapaces de captar la naturaleza sutil de las fluctuaciones del mercado, que son, de hecho, el resultado del comportamiento colectivo de los participantes vivos en el mercado.
En este contexto, el uso de modelos neuronales biológicamente plausibles resulta de especial relevancia. En lugar de crear construcciones matemáticas abstractas, hemos recurrido a la computadora más perfecta del universo (observable): el cerebro humano. Nuestro grupo de investigación ha desarrollado un sistema único basado en el modelo Hodgkin-Huxley que imita no solo la funcionalidad sino también la naturaleza física de los procesos neuronales.
El modelo Hodgkin-Huxley, galardonado con el Premio Nobel, describe el mecanismo de generación y propagación de los impulsos nerviosos a nivel celular. Pero, ¿por qué exactamente este modelo puede ser la clave para entender los mercados financieros? La respuesta está en la sorprendente analogía entre la propagación de los impulsos nerviosos en el cerebro y la propagación de la información en los mercados. Al igual que las neuronas intercambian señales eléctricas a través de conexiones sinápticas, los participantes en el mercado intercambian información a través de las transacciones comerciales.
Lo innovador de nuestro enfoque consiste en añadir al modelo clásico un componente similar al plasma. Así, hoy analizaremos una red neuronal como un sistema dinámico inmerso en un "plasma" de información de mercado, donde cada neurona puede influir en el comportamiento de otras neuronas no solo mediante conexiones directas, sino también a través de los campos electromagnéticos que genera. Esto permite al sistema captar correlaciones y relaciones sutiles que los algoritmos tradicionales no captan.
En este artículo examinaremos con detalle la arquitectura del sistema, sus principios de funcionamiento y los resultados de su aplicación práctica en diversos instrumentos financieros. Asimismo, mostraremos cómo un enfoque de inspiración biológica puede ofrecer una nueva perspectiva sobre el problema de la previsión de series temporales financieras y abrir nuevos horizontes en el campo del trading algorítmico.
El modelo Hodgkin-Huxley: cuando la biología se une a las finanzas
Imagine una neurona, una célula asombrosa que puede procesar y transmitir información usando impulsos eléctricos. Precisamente esta unidad fundamental del cerebro describieron Alan Hodgkin y Andrew Huxley en su innovador trabajo, por el que más tarde ganarían el Premio Nobel gracias al colosal avance que su modelo supuso en neurobiología. Ahora, imaginemos que este mismo modelo puede ayudarnos a comprender y predecir los movimientos de los mercados financieros.
El núcleo del modelo es una descripción matemática de cómo una neurona genera impulsos eléctricos. Al igual que los tráders reaccionan a la información que les llega del mercado, una neurona reacciona a las señales que recibe creando su propio patrón de actividad. Veamos el código que describe este asombroso proceso:
class HodgkinHuxleyNeuron: def __init__(self): self.V = -65.0 # Начальный потенциал покоя self.m = 0.05 # Активация натриевых каналов self.h = 0.6 # Инактивация натриевых каналов self.n = 0.32 # Активация калиевых каналов self.last_spike_time = float('-inf')
La danza de los iones: cómo la neurona toma decisiones
Lo más sorprendente del modelo Hodgkin-Huxley es su descripción de cómo los iones "danzan" a través de la membrana de una neurona. El sodio y el potasio, dos actores esenciales en este ballet molecular, se mueven a través de canales especiales, creando un potencial eléctrico. Es muy similar a cómo los flujos de órdenes crean movimientos de precios en el mercado. En nuestro sistema comercial, utilizamos esta analogía convirtiendo los datos del mercado en corrientes iónicas:
def ion_currents(self, V): I_Na = self.g_Na * (self.m ** 3) * self.h * (V - self.E_Na) # Натриевый ток I_K = self.g_K * (self.n ** 4) * (V - self.E_K) # Калиевый ток I_L = self.g_L * (V - self.E_L) # Ток утечки return I_Na, I_K, I_L
La influencia plasmónica: una nueva perspectiva de las redes neuronales
Nosotros hemos ido más allá del modelo clásico, añadiendo el concepto de un medio similar al plasma. Imagine que las neuronas no solo están conectadas por sinapsis, sino que están inmersas en el "plasma informativo" del mercado. Cada pico de una neurona crea una onda de influencia que se desvanece con el tiempo, igual que las noticias en el mercado pierden su influencia en el precio de forma gradual:
def plasma_influence(self, current_time): time_since_spike = current_time - self.last_spike_time influence = self.plasma_strength * np.exp(-time_since_spike / self.plasma_decay) return influence * self.get_market_correlation()
El aprendizaje a lo largo del tiempo: el marco STDP
Quizá la parte más emocionante de nuestro sistema sea el mecanismo de aprendizaje basado en la dependencia temporal entre empalmes de neuronas (STDP). Al igual que un tráder aprende de la experiencia, nuestras neuronas ajustan la fuerza de sus conexiones según el éxito que hayan tenido en la predicción de los movimientos del mercado:
def update_synaptic_weights(self, pre_spike, post_spike, weight): delta_t = post_spike - pre_spike if delta_t > 0: return weight * (1 + self.A_plus * np.exp(-delta_t / self.tau_plus)) else: return weight * (1 - self.A_minus * np.exp(delta_t / self.tau_minus))
Esta arquitectura de inspiración biológica permite a nuestro sistema no solo procesar datos de mercado, sino "sentir" el mercado como un tráder experimentado. Cada neurona se convierte en un pequeño experto en su propio aspecto de la dinámica del mercado, y su trabajo colectivo crea pronósticos extraordinariamente precisos.
La arquitectura del sistema: de la biología a las soluciones comerciales
Imagine el cerebro de un tráder analizando el mercado. Miles de neuronas procesan información sobre precios, volúmenes, indicadores y noticias. Precisamente esta arquitectura natural hemos recreado en nuestro sistema, añadiéndole las propiedades únicas del plasma y las interacciones electromagnéticas.
Los ojos del sistema: la estructura de datos de entrada
Al igual que el cerebro humano recibe información a través de los sentidos, nuestro sistema recopila y procesa muchas señales del mercado. Cada tick, cada movimiento de los precios se convierte en impulsos neuronales. Eche un vistazo al código de preprocesamiento de datos:
class MarketFeatures: def __init__(self, window_size=20): self.window_size = window_size self.scaler = StandardScaler() def add_price(self, price: float, ohlc_data: pd.DataFrame) -> Dict[str, float]: features = {} # Технические индикаторы features['sma_10'] = self._calculate_sma(ohlc_data['close'], window=10) features['ema_20'] = self._calculate_ema(ohlc_data['close'], window=20) features['rsi'] = self._calculate_rsi(ohlc_data['close'], window=14) # Объемные характеристики features['volume_sma'] = self._calculate_sma(ohlc_data['tick_volume'], window=10) # Временные паттерны features['hour'] = ohlc_data.index[-1].hour features['day_of_week'] = ohlc_data.index[-1].dayofweek return self.scaler.fit_transform(np.array(list(features.values())).reshape(1, -1))
La red neuronal: un puente entre la biología y las matemáticas
El núcleo de nuestro sistema supone una arquitectura híbrida que combina redes neuronales clásicas con un modelo Hodgkin-Huxley biológicamente plausible. Aquí, cada neurona no solo representa una función matemática, sino un pequeño sistema vivo:
class BioTradingModel(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(BioTradingModel, self).__init__() self.layers = nn.ModuleList([ nn.Linear(input_size, hidden_size), nn.Tanh(), nn.Linear(hidden_size, hidden_size), nn.Tanh(), nn.Linear(hidden_size, output_size) ]) # Биологические нейроны self.bio_neurons = [HodgkinHuxleyNeuron() for _ in range(hidden_size)] self.plasma_field = PlasmaField(hidden_size)
El campo de plasma: una nueva dimensión de las interacciones neuronales
Lo que hace único a nuestro sistema es el entorno plasmático en el que se encuentran inmersas las neuronas. Al igual que los campos electromagnéticos impregnan el espacio, nuestro plasma crea una capa adicional de interacción entre las neuronas:
class PlasmaField: def __init__(self, size): self.field_strength = np.zeros(size) self.decay_rate = 0.95 def update(self, neuron_activities): # Обновление поля на основе активности нейронов self.field_strength = self.field_strength * self.decay_rate self.field_strength += neuron_activities def get_influence(self, neuron_index): # Расчет влияния поля на конкретный нейрон return np.sum(self.field_strength * np.exp(-self.distance_matrix[neuron_index]))
El mecanismo del aprendizaje: la danza de las neuronas y el plasma
En nuestro sistema, el aprendizaje tiene lugar en varios niveles simultáneamente. El descenso de gradiente clásico se combina con la STDP biológica y la dinámica del plasma:
def train_step(self, inputs, target): # Прямой проход predictions = self.forward(inputs) loss = self.criterion(predictions, target) # Обратное распространение self.optimizer.zero_grad() loss.backward() # Биологическое обучение for i, neuron in enumerate(self.bio_neurons): # STDP обновление neuron.update_weights(self.last_spike_times) # Плазменная модуляция plasma_influence = self.plasma_field.get_influence(i) neuron.modulate_weights(plasma_influence) self.optimizer.step() return loss.item()
Dicha arquitectura en capas permite al sistema captar no solo patrones evidentes en los datos, sino también sutiles interrelaciones entre distintos aspectos de la dinámica del mercado. Cada componente del sistema desempeña una función única, y su sinergia crea algo más que la suma de las partes: un auténtico cerebro artificial que permite analizar los mercados financieros.
Los indicadores técnicos: los sentidos digitales de nuestro sistema
Si imaginamos nuestro sistema neuronal como el cerebro artificial de un tráder, los indicadores técnicos serían sus sentidos. Al igual que el ser humano utiliza la vista, el oído y el tacto para percibir el mundo, nuestro sistema usa diversos indicadores para "sentir" el mercado en todas sus facetas.
Los indicadores básicos: la visión del sistema
Empezaremos por los indicadores más fundamentales: las medias móviles. Son como la vista de nuestro sistema, y le permiten discernir la tendencia subyacente a través del ruido del mercado:
def calculate_moving_averages(self, prices): def sma(window): return np.convolve(prices, np.ones(window)/window, mode='valid') def ema(window): alpha = 2 / (window + 1) kernel = alpha * (1 - alpha)**np.arange(window) return np.convolve(prices, kernel[::-1], mode='valid') return { 'sma_fast': sma(10), # Быстрая SMA для краткосрочных трендов 'sma_slow': sma(20), # Медленная SMA для долгосрочных трендов 'ema_fast': ema(10), # Экспоненциальная MA для быстрой реакции 'ema_slow': ema(20) # Медленная EMA для фильтрации шума }
Los osciladores: el tacto los impulsos de mercado
RSI, Momentum y Estocástico son los receptores táctiles de nuestro sistema. Estos permiten "sentir" la fuerza del movimiento de los precios y los posibles puntos de inversión:
def calculate_oscillators(self, data): def rsi(prices, period=14): delta = np.diff(prices) gain = np.where(delta > 0, delta, 0) loss = np.where(delta < 0, -delta, 0) avg_gain = np.mean(gain[:period]) avg_loss = np.mean(loss[:period]) for i in range(period, len(gain)): avg_gain = (avg_gain * 13 + gain[i]) / 14 avg_loss = (avg_loss * 13 + loss[i]) / 14 rs = avg_gain / avg_loss return 100 - (100 / (1 + rs)) return { 'rsi': rsi(data['close']), 'momentum': data['close'] - np.roll(data['close'], 10), 'stoch_k': self._calculate_stochastic_k(data) }
La volatilidad y el volumen: el oído el sistema
Los indicadores de volatilidad y volumen son el oído de nuestro sistema: captan el "ruido" del mercado y la fuerza de los movimientos. Las bandas de Bollinger y los ATR ayudan a evaluar la amplitud de las fluctuaciones, mientras que los indicadores de volumen sirven para evaluar su importancia:
def measure_market_dynamics(self, data): def bollinger_bands(prices, window=20): sma = np.mean(prices[-window:]) std = np.std(prices[-window:]) return { 'upper': sma + 2 * std, 'lower': sma - 2 * std, 'width': 4 * std / sma # Нормализованная ширина полос } def volume_profile(volumes, prices): return { 'volume_ma': np.mean(volumes[-10:]), 'volume_trend': np.corrcoef(volumes[-20:], prices[-20:])[0,1], 'volume_oscillator': (np.mean(volumes[-5:]) / np.mean(volumes[-20:]) - 1) * 100 } volatility = bollinger_bands(data['close']) volume = volume_profile(data['volume'], data['close']) return {**volatility, **volume}
La normalización: el ajuste de la sensibilidad
Igual que el cerebro humano adapta la sensibilidad de los sentidos a las condiciones del entorno, nuestro sistema ajusta dinámicamente la escala de los datos de entrada. Esto resulta fundamental para el funcionamiento estable de la red neuronal:
def normalize_features(self, features: dict) -> dict: class AdaptiveNormalizer: def __init__(self, window=100): self.window = window self.history = {} def update(self, feature_name, value): if feature_name not in self.history: self.history[feature_name] = [] self.history[feature_name].append(value) if len(self.history[feature_name]) > self.window: self.history[feature_name].pop(0) mean = np.mean(self.history[feature_name]) std = np.std(self.history[feature_name]) return (value - mean) / (std + 1e-8) # Избегаем деления на ноль normalizer = AdaptiveNormalizer() return {name: normalizer.update(name, value) for name, value in features.items()}Todos estos indicadores y señales trabajan en estrecha conjunción para crear una imagen multidimensional de la realidad del mercado. Al igual que el cerebro humano integra la información de todos los sentidos, nuestro sistema sintetiza los datos procedentes de todos los indicadores en una única representación de la situación del mercado. Todo ello le permite formarse una idea holística de la dinámica del mercado en lugar de limitarse a seguir una tendencia o reaccionar a señales individuales.
Resultados experimentales
Metodología de las pruebas
Durante el estudio, hemos realizado una prueba exhaustiva del sistema con datos históricos del par de divisas EURUSD. El horizonte temporal ha sido de 5 años utilizando el marco temporal diario D1. Siguiendo los principios clásicos del aprendizaje automático, hemos dividido los datos en muestras de entrenamiento y de prueba en una proporción de 80/20. Como resultado, se han utilizado 1659 puntos de datos para el entrenamiento y 415 para las pruebas. El modelo ha pasado por 20 iteraciones de entrenamiento con diferentes inicializaciones de los pesos para encontrar la configuración óptima.
Análisis de los resultados
Durante el análisis de nuestros resultados, hemos descubierto una característica interesante del rendimiento de nuestro modelo. En lugar de tratar de predecir las fluctuaciones de precios a corto plazo, el sistema parece tratar de determinar algún tipo de precio "justo" para el par de divisas. Esta observación se confirma por la correlación bastante alta en la muestra de entrenamiento, que alcanza un valor de 0,583 con un error cuadrático medio relativamente bajo de 0,012346. Sin embargo, en la muestra de prueba el rendimiento del modelo disminuye significativamente: la correlación cae a valores negativos (-0,108), mientras que el MSE aumenta más de 90 veces, alcanzando 1,156584.
Comparación con los enfoques tradicionales
Nuestro modelo de inspiración biológica muestra un comportamiento significativamente distinto en comparación con los indicadores técnicos clásicos y las redes neuronales estándar. Sus previsiones resultan notablemente más volátiles.
Aquí tenemos un test sobre una muestra de prueba, con un horizonte de previsión de 15 barras:
Métricas estadísticas de rendimiento
El resultado más revelador del modelo es un coeficiente de determinación (R²) extremadamente bajo de la muestra de prueba, de aproximadamente 0,01. Curiosamente, el modelo muestra una correlación bastante alta en la muestra de entrenamiento, lo cual indica su capacidad para captar patrones a largo plazo en los datos. Al mismo tiempo, en las predicciones del modelo suelen darse valores atípicos claramente visibles. Aún no hemos comprobado si estos valores atípicos corresponden a movimientos de precios mínimos y si esto resulta adecuado para el scalping.
Características y aplicación práctica
El comportamiento observado del modelo puede explicarse por su naturaleza biológica. El sistema neural plasmático parece actuar como un potente filtro que amplifica sustancialmente las señales del mercado, por lo que el modelo arroja predicciones incrementales hipertróficas. Se supone que el mecanismo STDP (Spike-Timing-Dependent Plasticity) conduce a la formación de patrones estables de activación, lo cual provoca la promediación de las predicciones, por lo que, en consecuencia, deberíamos tener una imagen diferente de la prueba y el hecho. Un factor adicional puede ser un gran número de parámetros de entrada en forma de indicadores técnicos, lo cual crea un efecto de sobrerregularización.
Desde un punto de vista práctico, este modelo puede encontrar aplicación en la determinación de los niveles de valor razonable a corto plazo de un par de divisas.
Conclusión
Nuestro estudio de un sistema neuronal de inspiración biológica para predecir los mercados financieros ha arrojado resultados inesperados, pero también muy intrigantes. Al igual que el cerebro humano es capaz de intuir el valor "justo" de un activo, nuestro modelo, basado en los principios de las neuronas vivas, ha demostrado una asombrosa capacidad para identificar niveles de precio fundamentalmente bien basados.
La introducción de un medio similar al plasma en la arquitectura de una red neuronal ha creado una especie de "mente colectiva", en la que cada neurona influye en el trabajo del sistema no solo a través de conexiones directas, sino también mediante interacciones electromagnéticas de largo alcance. Este mecanismo se ha mostrado especialmente eficaz al filtrar el ruido del mercado e identificar tendencias a largo plazo.
Quizá esto oculte un significado más profundo. Al igual que los sistemas biológicos han evolucionado para sobrevivir a largo plazo, nuestra red neuronal, construida a imagen y semejanza de estos, también busca identificar patrones estables y fundamentalmente sólidos.
Bonus para los que han llegado al final
También he creado un indicador basado en este modelo. El indicador carga el resto del sistema como un módulo y se abre en una ventana sencilla como esta:
No lo he probado en vivo, pero ya que todos los demás sistemas suelen predecir la misma dirección, ¿quizá esta máquina funcione como debería?
Traducción del ruso hecha por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/ru/articles/16979
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.





- 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
Por Ivan Butko
El preprocesamiento -preprocesamiento de predictores- es la primera y más importante de las tres etapas de cualquier proyecto de aprendizaje automático. Tienes que sentarte y aprender lo básico. Entonces no estarías diciendo tonterías.
"Basura dentro - basura fuera", y para eso no hace falta ir a una adivina.
Del artículo;
Los exóticos no ofrecen ninguna ventaja ni siquiera frente a modelos estadísticos simples. ¿Y por qué?
Por código:
Normalización adaptativa - no vi lo que es adaptativo allí?
Todos los indicadores están en la biblioteca de análisis técnico ta. ¿Por qué reescribir todo en Python?
No tiene sentido en la aplicación práctica, IMHO
"Basura dentro - basura fuera" - y no necesitas ir a un adivino para eso.
No has tratado la definición de basura en los precios
No sabes lo que es basura y lo que no. Y si existe en principio. Dado que en Forex la gente gana en M1, y en M5, y en M15 y así sucesivamente, hasta D1
Usted no entiende y no sabe cómo operar con las manos.
Por lo tanto - usted no entiende lo que usted mismo está diciendo.
Pero si usted tiene una confirmación de la viabilidad y la estabilidad de sus modelos NS sólo debido a la presencia de preprocesamiento (sin ella - basura) - usted tendrá razón.
¿Existen tales?