Análisis Técnico De Mercados Ginancieros Basado En Técnicas De Inteligencia Artificial Angel Pina Canelles Capıtulo 2 :Desarrollo de la Solución 2.1. Solución Propuesta 2.1.1. Visión General Puesto que nuestro objetivo es lograr hacer predicciones sobre el resultado que tendrás un robot puesto a operar sobre el mercado, el núcleo de nuestro sistema lo constituirán los predictores. Un predictor es un elemento relativo a un robot concreto, que basándose en su historial de operaciones realizará sus predicciones. Además, estableceremos otra capa superior al predictor que nos proporcionará una medida de la fiabilidad de las predicciones realizadas por este en cada momento. Toda esta información de cada robot será utilizada por un agente externo para elegir qué robots dejar operar en bolsa y cuáles no. El esquema de esta estructura puede encontrarse en la figura 2.1. La principal decisión que marcará ́ıa gran parte del diseño posterior consiste ́ıa en qué técnica de inteligencia artificial utilizar para implementar los predictores. En nuestro caso, decidimos utilizar redes neuronales porque, a pesar de ser suficientemente sencillas para la profundidad de un trabajo fin de grado, esperábamos que fueran suficientemente flexibles para resolver satisfactoriamente el problema para cada robot. Además, tienen la ventaja de ser suficientemente eficientes en su ejecución para poder utilizarlas operando en tiempo real. Una red neuronal artificial es un modelo matemático no lineal, de naturaleza computacional, con una arquitectura inspirada en la organización neuronal biológica ([3]). Es decir, puede verse como una estructura en red consistente en un número de neuronas (nodos) conectadas por enlaces direccionales ([4]). En ella, cada nodo es una unidad de procesamiento independiente, que calcula un valor de salida a partir de una serie de valores de entrada. La forma en la que estos valores de entrada se utilizan para dar lugar a la salida depende de una serie de parámetros espec ́ ıficos de cada nodo. Para que la red pueda resolver un determinado problema, se modifican estos parámetros de acuerdo a ciertos algoritmos, denominados algoritmos de entrenamiento. De esta forma, la red puede “aprender” para adaptarse a resolver un determinado problema. La figura 2.2 muestra un diagrama básico de la composición de una red neuronal.
Figura 2.1: Estructura básica general del sistema. Así, el objetivo de nuestro software será conseguir obtener redes neuronales capaces de predecir el comportamiento de cada robot, y utilizar estas para obtener información sobre su desempeño esperado, que proporcionaremos a un agente externo para que las controle.
2.1.2. Redes Neuronales como Predictores Introducción y Conceptos Básicos Las redes neuronales artificiales son especialmente útiles en problemas complejos o difíciles de definir con precisión. En estos casos, el diseño ̃no de una funci ́on n ́todo espec ́ıfico para resolver el problema resulta impracticable. También es una técnica muy común en casos en los que la función es desconocida, pero contamos con bastantes casos en los que conocemos de resolución correcta del problema. Por ejemplo, las redes neuronales son muy comunes en problemas de reconocimiento de patrones: Escritura a mano, reconocimiento facial, etc. En ellos, pese a que no podemos diseñar o programar un conjunto de reglas o un software concreto para resolver cada caso, en el caso de tener suficientes ejemplos del patrón que queremos detectar, las redes neuronales proporcionan muy buenos resultados en la detección de casos nuevos. Antes de que una red neuronal pueda resolver un problema concreto, debemos someterla a un proceso previo, conocido usualmente como aprendizaje o entrenamiento.
Figura 2.2: Diagrama básico de red neuronal y neuronas. El problema que estamos tratando de resolver es un problema de regresi ́ on. Es decir, tenemos una función desconocida, que en nuestro caso recibe como entrada la información del estado del mercado en un momento dado, y proporciona como salida la ganancia futura del robot cuando se activa en ese estado del mercado. Lo que realiza la red neuronal es, a partir de una serie de casos de ejemplo, crear un modelo de esa función desconocida. El proceso de aprendizaje consiste en ajustar esta función que implementa la red neuronal para reducir el error entre la salida obtenida y la deseada para el conjunto de ejemplos en los que conocemos la resolución del problema. Si los datos que utilizamos para este aprendizaje son representativos de todas las posibles entradas, y el modelo que implementa la red se ajusta bien a esos datos conocidos, esperamos que lo haga también para los desconocidos. Hay distintos tipos de redes neuronales dependiendo del número y distribución de sus neuronas y de los enlaces entre ellas, y a su estructura se le denomina usualmente topología de dicha red. Podemos distinguir en ella tres tipos de nodos o neuronas: De entrada, que reciben la información del exterior, de salida, que proporcionan sus resultados al exterior, y ocultas, que reciben y envían sus variables a otros nodos de la propia red. Por otra parte, denominamos variables de entrada a aquellas que reciben las neuronas de entrada del exterior de la red, y variables de salida a las que proporcionan al exterior de la red las neuronas de salida. La forma de calcular la salida de cada neurona en función de sus entradas queda determinada por variables denominadas pesos, relativos a cada uno de sus enlaces. Podemos ver gráficamente los distintos tipos de neuronas y variables, así como los tipos de capas, en la figura 2.3. Todas estas neuronas, a su vez, se distribuyen en capas. Decimos que un nodo está ́ a en la capa n cuando el m ́ ınimo n ́ umero de neuronas entre ́ esta y una neurona de entrada es n. Dicho de otro modo, las neuronas de entrada se encuentran en la capa 0, las neuronas de neuronas y capas de una red neuronal a las que se conectan ́ estas están en la capa 1, las que se conectan a estas otras están en la capa 2, etc. Si bien las redes neuronales pueden tener topolog ́ ıas muy diversas, las más comunes tienen tres capas: una de entrada, una capa oculta y una de salida, y no tienen ciclos.
Figura 2.3: Tipos Entrenamiento de una Red Neuronal El proceso completo que se realiza para obtener una red neuronal para resolver un problema en concreto, se divide en dos fases. En la primera, se deciden las características de la red que emplearemos: Variables de entrada, número de capas y de neuronas, distribución de las mismas... etc., es decir, su topolog ́ ıa. En una segunda fase, se entrena una red con la topolog ́ ıa elegida, que ser ́ a la que obtendremos como resultado final del proceso. El procedimiento de la primera fase consiste en partir de un conjunto de posibles topo log ́ ıas, elegidas a priori, y tras un proceso de experimentación, elegir aquella que proporcione mejores resultados. Es decir, en primer lugar elegimos un conjunto de topolog ́ ıas, definiendo las entradas que recibir ́ a nuestra red, cubriendo un espectro que consideremos suficiente. A continuación realizamos una cierta cantidad de experimentos para cada posible topología que nos planteemos utilizar para nuestro problema. Estos experimentos consisten en entrenar una red con esas caracter ́ ısticas y evaluarlas 1. Así, veremos los resultados que obtenemos para una serie de redes entrenadas con una determinada configuración, calcularemos su media, y ´esta será´a la medida que emplearemos para comparar esta topología con las demás. Sin embargo, es importante tener en cuenta que es usual que distintas topologías Que un resultado sea estad ́ ısticamente significativo significa que podemos asegurar con una cierta probabilidad, normalmente el 95 % ́ o 99 %, que el resultado obtenido no es producto del azar. Es decir, que realmente una topolog ́ ıa es mejor que la otra, y aunque realizáramos más experimentos es de esperar que se mantenga ese resultado. En el caso de que la diferencia entre el uso de dos topolog ́ ıas no sea estad ́ ısticamente significativa, elegiremos aquella que sea más sencilla (menor n ́ umero de neuronas, menor n ́ umero de variables de entrada...). Para determinar si efectivamente existe significancia estad ́ ıstica en la diferencia entre las medias de las dos series de experimentos debemos realizar un test estad ́ ıstico adecuado. El procedimiento y la base te ́ orica de los mismos se detallan en la sección 3.4. Para terminar, una vez elegida la topolog ́ ıa que utilizaremos, se procede al entrenamiento de una red con dicha configuración, que ser ́ a nuestra red final. Los detalles técnicos del procedimiento de ambas fases puede encontrarse más detalladamente en la secci´on 3.2, en la que también se recoge el proceso completo de experimentaci´on con las distintas topolog´ıas y entrenamiento de la red final, as´ı como el proceso de test de las redes resultantes, cuyo objetivo es tener una estimaci´on del comportamiento que tendrá´a la red cuando opere con casos nuevos.
2.1.3. El Procedimiento CompletoComo hemos visto, para obtener una red neuronal que pueda actuar de predictor hace falta tener una serie de casos conocidos con los que poder entrenarla. En nuestro caso, puesto que nuestro objetivo es utilizar la red para predecir cómo ser ́a el desempe ̃no del robot conociendo la situación del mercado actual, debemos tener una serie de casos pasados en los que conozcamos el desempe˜no que tuvo y la situación del mercado en dicho momento. Esta serie de casos la obtendremos a partir del histórico de operaciones del robot. Es decir, cada vez que en el pasado el robot realice ́ o una operaci ́ on en el mercado, sabemos qué resultado tuvo y conocemos la situación del mercado en ese momento, por lo que a partir de este histórico podemos obtener casos para entrenar nuestra red. No obstante, hay que tener en cuenta que modelizar la situación del mercado puede ser bastante complejo. Existen gran cantidad de factores que podemos tener en cuenta: Cotizaciones de la divisa en la que opera el robot, cotizaciones de otras divisas, otros factores como el d ́ıa de la semana o la hora en las que se realizó la operación, etc., y nos interesar ́ ıa utilizar la mayor cantidad de ellos posible, siempre y cuando sean relevantes. Para que el uso posterior de estos datos sea efectivo, se hace necesario establecer un tratamiento previo de los datos que nos permita eliminar redundancias e información no relevante, y reducir la dimensión de la información en la medida de lo posible, es decir, reducir el número de variables de entrada. Esto, además, permitir ́ a mejorar los resultados de las redes, que śolo recibiran la informacion relevante, y por tanto podr ́ andar mejores resultados con una estructura menos compleja. Para esta etapa previa de reducción de la dimensión de la entrada utilizaremos el algoritmo del análisis principal de componentes (PCA, por sus siglas en inglés), que se detalla en la sección 3.3. Por otra parte, una vez tenemos nuestra red entrenada, podemos ponerla a operar en el mercado real y monitorizar su rendimiento. Además, estableceremos medidas para controlar la precisión esperada de la red en cada momento, permitiendo a quien utilice sus predicciones controlar el riesgo. Este sistema de control de la fiabilidad de la red se expone en la sección 3.5. Por ´último, y como resumen de todo lo anteriormente expuesto, tenemos que podemos dividir nuestro proceso en las siguientes etapas principales: Obtención y tratamiento de los datos, elecci´on de la topolog´ıa de la red y entrenamiento, puesta en marcha en el mercado real y monitorizaci´on y fiabilidad. Un diagrama de estas etapas, con los productos obtenidos en cada una de ellas y las técnicas utilizadas en cada fase, puede encontrarse en la figura 2.4.
Figura 2.4: Diagrama general del sistema completo. 2.2. Etapas del Proceso2.2.1. Obtención y Tratamiento de los DatosEn esta etapa partimos del histórico de operaciones del robot, y nuestro objetivo ser ́ a obtener una serie de casos de prueba para poder realizar el entrenamiento de la red neuronal que proporcionar ́ a predicciones sobre ́ el. Recordemos que un caso de prueba consiste en una entrada para el problema cuya salida es conocida. En nuestro caso, la entrada consiste en la situación del mercado en el momento de producirse la operación, y la salida consiste en el resultado que tuvo ́ esta. Así, debemos definir en un primer lugar como movilizaremos la situación del mercado en un momento concreto. Dado que cada robot puede operar en una divisa distinta, siguiendo diferentes estrategias y utilizando distintos datos, debemos poder modelizar la situación del mercado de manera diferente para cada uno de ellos. Por tanto, nuestro software nos permitir´a definir qué información de entrada queremos utilizar en cada caso para reflejar el estado del mercado, y realizar de esta forma una modelización del mercado diferente para cada robot. La información básica que podemos utilizar para reflejar la situación del mercado, que esperamos sea relevante para nuestra predicción, son los datos relativos a la divisa sobre la que opera el robot. Utilizaremos por tanto los datos sobre la cotización de esta divisa en un intervalo de tiempo determinado anterior a la solicitud de apertura de la operación. Estos vienen agrupados según periodos de tiempo de distintas longitudes, ́ denominados velas. Es decir, una vela es la información agrupada de un determinado periodo de tiempo de una divisa concreta, y tiene 4 atributos principales: El precio que ten ́ıa la divisa al inicio del periodo, el que ten ́ıa al final del mismo, y el m ́aximo y ḿınimo precio alcanzado en ́este. Las velas pueden tener distintas longitudes, y en nuestro software utilizaremos principalmente velas de 4 tipos: de 5 minutos, de 15 minutos, de 1 hora y de 1 d ́ ıa. Además de la informaci´on b´asica de las velas de la divisa en la que opera nuestro robot, nuestro software permite a˜nadir otra información adicional, como velas de otras divisas, el d´ıa de la semana o la hora a la que se realizó la operación, e incluso otros indicadores macroeconómicos, como son el precio del petróleo o del oro. Con estos últimos indicadores logramos que, pese a que el robot tiene una visión muy local del mercado (opera con una divisa y utiliza únicamente las cotizaciones de ésta para determinar su comportamiento), nuestro sistema lo controla utilizando información mucho más global. De esta forma, podemos identificar tendencias a nivel mundial, modificando el comportamiento final del robot en base a si ciertos indicadores del mercado global presentan tendencias alcistas o bajistas, por ejemplo. Por último, es importante resaltar que únicamente podremos utilizar información anterior al momento de apertura de la operación. Esto es así debido a que las redes se utilizarán finalmente para predecir el resultado de la operación antes de que se inicie, por lo que evidentemente debemos utilizar únicamente información que vayamos a tener disponible en ese momento. A continuación, una vez elegida la información que queremos utilizar como entrada de nuestro problema, podemos formar los casos de prueba a partir del histórico de operaciones del robot, que nos servir ́ an para entrenar la red. Obtenemos así un fichero con ejemplos de entrada y salida de nuestro problema, siendo la entrada la modelización del mercado en el momento de apertura de una operación, y la salida el resultado que tuvo ́ esta. Aunque podr´ıamos utilizar directamente este fichero para entrenar nuestras redes, encontramos que la entrada es demasiado compleja: Por una parte, hay una gran cantidad de información, mucha de ella redundante o muy parecida, y por otra, como cada robot opera en distintas situaciones, puede haber información que sea ´útil en unos robots y redundante en otros, y no tenemos forma de saberlo a priori. Esta excesiva complejidad provoca que la red tenga muchas más dificultades para aprender y generalizar correctamente el problema, por lo que trataremos de reducirla. Para ello, como comentamos en la sección anterior, emplearemos el algoritmo del Análisis Principal de Componentes. Este algoritmo permite combinar las distintas variables de entrada para mantener la informaci ́ on n ́ as importante, y descartar aquella que sea redundante o poco significativa. Aplicando este proceso a nuestro conjunto de casos de prueba anterior, logramos reducir en la mayor´ıa de los casos de unas 150 ́o 200 entradas, a tan solo 20 ́o 25, lo que constituye una reducción de alrededor del 80 u 85 % en el n ́umero de entradas. Esto además permite que aunque añadamos información nueva que finalmente resulte ser redundante, esto no repercutirá demasiado negativamente en los resultados finales, puesto que será eliminada por este último procedimiento. Así, podemos añadir gran cantidad de información en un principio, y dejar que este paso la reduzca, eliminando la que sea redundante o poco significativa. Para finalizar el proceso aplicamos un proceso de normalización a los datos. Si bien en la teoría esto no es necesario, debido a que las redes pueden resaltar cualquier transformación lineal realizada a los datos, en la práctica lo usual es realizar la normalización. El motivo principal es que para la inicializaci´on de las redes (los valores iniciales que se dan a los pesos antes de comenzar el proceso de entrenamiento) deben estar escalados de acuerdo a los rangos de valores de entrada, para facilitar la convergencia y reducir la probabilidad de caer en m´ınimos locales. Por tanto, como en general se utilizan valores aleatorios pequeños para los pesos, es conveniente normalizar la entrada a valores también cercanos a 0. En nuestro caso, como se recomienda en general, utilizaremos como rango de normalizaci´on el intervalo [−1, 1].[12] El proceso de normalización consiste simplemente en un cambio de variable lineal, que transforma una variable de entrada cuyos valores se encuentran en el intervalo [xmin, xmax] en otra que se encuentra entre los valores [−1, 1], seg´ún y =2(x−xmin) xmax−xmin− 1. Con todo esto, obtenemos finalmente unos casos de prueba preprocesados adecuados para el entrenamiento de las redes en la siguiente fase.
2.2.2. Entrenamiento de Redes NeuronalesCon los casos de prueba procesados en la fase anterior, nuestro objetivo en esta fase será obtener una red entrenada capaz de predecir el desempeño de nuestro robot. Como hemos comentado, esta fase se puede dividir a su vez en dos etapas: En una primera elegimos la topología de nuestra red, y en una segunda fase entrenamos la red final que utilizaremos para controlar el robot. El proceso básico empleado es el usual cuando se trabaja con redes neuronales, que hemos expuesto anteriormente: En primer lugar se plantean diversas topologías posibles, con distinto número y tipo de entradas, distinto número de neuronas y distribución, etc. A continuación se realiza un determinado número de entrenamientos y experimentos para cada posible configuración, y finalmente se elige aquella que arroja mejores resultados, asegurándose de que la diferencia sea estadísticamente significativa. Por último, se entrena una red final con dicha topología2. No obstante, debido a las características de nuestro problema y situación, hay varios factores que no son comunes al proceso usual de entrenamiento descrito. El primero es debido a que Talentum optimiza los robots utilizando su histórico de operaciones, es decir, utilizan para modificar el robot precisamente los mismos datos que utilizaremos nosotros. Es decir, ajusta sus parámetros y comportamiento de forma que sus resultados si hubiera operado en el pasado sean buenos, esperando que de esta forma sean buenos también en el futuro. Esto implica que la situación que encontramos en el histórico de operaciones es probable que no sea la misma que encontrará posteriormente el robot cuando sea puesto en funcionamiento. Presumiblemente, los resultados que obtendrá el robot en tiempo real serán peores que los que se reflejan en su histórico, puesto que éste ha sido programado de forma que los resultados de su histórico sean buenos. De hecho, si observamos el histórico de resultados de alg ́ un robot, solemos encontrar que sus ganancias totales son muy altas, y hay muchas más operaciones que producen beneficios que que producen pérdidas. En el mercado real, por el contrario, esperamos que el balance del robot sea mucho peor, y que encontremos aproximadamente el mismo número de operaciones con ganancias que con pérdidas. Si utilizáramos como entrenamiento los casos extraídos directamente del histórico de operaciones corremos el riesgo de que nuestra red sea demasiado permisiva, es decir, que se adapte para ajustar correctamente los casos positivos (que son la mayor´ıa), aunque se equivoque en bastantes casos negativos. Para evitar esto, debemos modificar el conjunto de entrenamiento para que se ajuste en lo posible a la situación que esperamos encontrar en realidad. Es decir, debemos modificarlo de manera que las ganancias se equiparen aproximadamente con las pérdidas, para que nuestra red “aprenda” correctamente la misma situación para la que posteriormente la utilizaremos. Para ello, nuestra solución ha sido replicar las operaciones que produjeron pérdidas hasta que el balance total de pérdidas equipare al de ganancias. De esta forma, tenemos una situación resultante en la que el balance total es aproximadamente 0, y la importancia de las operaciones negativas está mucho más cerca de la importancia de las operaciones positivas. As´ı, esperamos que nuestra red se adapte bien a ajustar ambos casos. La segunda modificación se refiere al criterio que utilizamos para elegir una u otra topolog ́ ıa en la primera fase. Es común elegir criterios basados ´únicamente en la precisión de la predicción, como la diferencia entre los valores predichos y los valores correctos, o el error cuadrático medio (MSE). Sin embargo, debido al uso que se dará posteriormente a las predicciones, ninguna de estas medidas resultaba adecuada. En concreto, estos modelos de error penaliza de la misma forma un error entre haber predicho 15$ cuando en realidad eran 20$, y haber predicho 3$ cuando en realidad eran -2$. Es de suponer que al agente que vaya a realizar la decisión entre elegir una u otra red, la segunda diferencia le resultará mucho más relevante. Por ello, decidimos estudiar una medida de evaluación de la red neuronal alternativa para esta fase, dice ̃nando otra más parecida al uso que daremos posteriormente a las predicciones. En ella, supondremos que el agente externo elegirá para que operen todos los robots para los que nuestra predicción sea positiva, es decir, todos aquellos que predicamos que van a obtener ganancias. Así, simularemos que hubiera ocurrido si un determinado conjunto de operaciones se hubieran realizado bajo la supervisión de nuestro sistema, y cuál hubiera sido el balance total del robot en ese periodo, comparándolo con aquel que hubiera obtenido sin nuestra intervención. Es decir, tomamos la suma del balance obtenido en todas las operaciones para los que la predicción de nuestra red es positiva, y la diferencia de ésta con la suma del balance total de las operaciones elegidas será nuestra medida de error para esa red. Tras realizar diversos experimentos con las redes obtenidas utilizando este método y los anteriores, comparamos sus resultados. De esta forma obtuvimos que las redes entrenadas con las topolog´ıas elegidas utilizando esta ´última medida de error daban resultados más precisos cuando las utilizamos con datos que no hubieran sido utilizados ni para el entrenamiento ni para la optimizaci´on de los robots. Por ello, decidimos utilizar esta última medida de error descrita para nuestro sistema. Tras todo lo anterior, y una vez elegida la topología de la red, procedemos a la segunda fase. En ella, entrenamos una única red final con esta configuración elegida, que será la red final que utilizaremos como predictor para ese robot en nuestro sistema.
2.2.3. Puesta en Marcha a Mercado RealEn esta sección describiremos el proceso de ejecución de las redes neuronales entrenadas, y la comunicación con el agente externo para proporcionarle sus predicciones. Este agente externo ser ́ a un sistema de Talentum ya existente denominado Zeus. Zeus es un software desarrollado para controlar la gestión del riesgo de los sistemas de Talentum. Es capaz de controlar las operaciones realizadas por cualquier conjunto de robots, y de negar o autorizar cualquiera de sus operaciones en el momento en que el robot solicite realizarla. Nuestro software, por tanto, se comunicará con Zeus proporcionándole información de las predicciones sobre cada robot. Además, cada vez que un robot quiera realizar una operación, debe consultar a Zeus, que autoriza o deniega su entrada teniendo en cuenta nuestras predicciones. Las estrategias que implementa Zeus para controlar a los robots en base a nuestras predicciones pueden ser muy diversas, dependiendo de las directrices de los expertos de Talentum, e incluso de las preferencias de inversores concretos en cuanto a beneficio deseado y niveles de riesgo admitidos. No obstante, para realizar las pruebas de nuestro sistema y evaluar su rendimiento, hemos implementado dos estrategias básicas. La primera, utilizada antes de la implementación de los sistemas de estimación ́ on de errores, consiste simplemente en dejar operar aquellos robots para los cuales nuestra predicción sea positiva. Es decir, permitir todas aquellas operaciones que predicamos que van a resultar en beneficios. La segunda estrategia, también bastante sencilla, pero realizada una vez incorporamos el sistema de control del error, consiste en dejar pasar aquellas operaciones que, aun contando con el error que estimemos en la predicción, sigan superando un cierto umbral. Este umbral, en nuestro caso, lo ajustamos utilizando los resultados que tuvimos durante el periodo en que la utilizamos solo la primera estrategia recién descrita. Así, elegimos el umbral que maximiza las ganancias en el caso de que el sistema de fiabilidad y está segunda estrategia hubieran estado implementados en ese periodo. El umbral resultante obtenido por este procedimiento fue en nuestro caso de 2$. Por tanto, nuestra estrategia en este caso consistir ́ a en permitir las operaciones cuya aproximación una vez tenida en cuenta la corrección del error sea superior a este umbral. Por otra parte, para realizar nuestras predicciones debemos obtener los datos del mercado en tiempo real: Cotizaciones de todas las divisas en forma de velas, otros indicadores como el precio del petróleo o el oro... etc. Nuestro software ha sido implementado para obtener todos estos indicadores de bases de datos habilitadas por Talentum, en las que en periodos de tiempo de 5 minutos se almacena información actualizada del mercado global. La información se combina de forma que coincida con la modelización de la situación del mercado que realizamos para cada robot en la fase de obtención de los casos de entrenamiento. Además, le aplicamos los mismos pasos que realizamos para la obtención de dichos casos, es decir, es análisis principal de componentes y la normalizaci ́ on. Tras este preprocesamiento, podemos utilizar los datos resultantes como entrada de la red asociada, que nos devuelva la predicción. Por último, obtenemos la fiabilidad asociada en ese momento a esta red, y suministramos toda esta información a Zeus.
2.2.4. Monitorizaci´on y Fiabilidad Una vez iniciada su ejecución, nuestro software obtiene información sobre la ejecución de los robots en el mercado, es decir, sobre las operaciones que realicen en cada momento y su resultado. Esta información la utilizaremos para actualizar la fiabilidad de las redes en función de si sus predicciones fueron correctas o no. Para que obtener esta información sea posible, los robots almacenan en una base de datos durante su ejecución información sobre la apertura y cierre de cada operación que realizan, así´ı como los resultados de las mismas. Además, nuestro sistema almacena tam bi´en las predicciones que cada red realizó en cada momento, por lo que podemos utilizar ambas informaciones para actualizar la fiabilidad de la red que predijo cada resultado. Sin embargo, si únicamente tuviéramos los robots operando en mercado real controlados por nuestro sistema, solo conoceríamos los resultados de las operaciones que Zeus permitiera realizar. No obstante, para actualizar las estimaciones de error de las redes debemos conocer también los resultados finales que tendrán las operaciones cuya realización no se permite. Para ello, tendremos operando no solo los robots con dinero real controlados por nuestro sistema, sino también otra copia de cada uno de ellos operando en una cuenta de simulación. Es decir, realizan todas las operaciones que realizan los robots reales, pero sin invertir dinero real en ellas. Estos robots simulados también almacenarán los resultados de sus operaciones en la misma base de datos que sus copias reales, pero con otro identificador. De esta forma, nuestro sistema obtiene los resultados de todas las operaciones que los robots podrán realizar, independientemente de si finalmente se llevan a cabo o no. Con todo ello, tenemos finalmente operando todos nuestros robots en tiempo real, controlados por sus respectivas redes. Para ello, recibimos información en tanto de la evolución del mercado como de las operaciones que los propios robots realizan, y utilizamos un sistema adicional para detectar lo antes posible los periodos en los que las redes no están funcionando bien y recortar las pérdidas.
ReferenciasEn este capítulo pretendemos únicamente dar una idea general de la solución propuesta en nuestro trabajo, sin entrar en excesiva profundidad. Por ello, los detalles técnicos relativos al entrenamiento, validación y test de las redes podemos encontrarlos en la sección 3.2 den resultados similares, y corremos el riesgo de que la elección de una u otra se deba únicamente a los resultados de ese conjunto concreto de experimentos realizados, y esa no sea la tendencia general. Para evitarlo, debemos no tener en cuenta únicamente que la media de unos resultados sea mayor que otra, sino que debemos establecer que esta diferencia sea estadísticamente significativa. De nuevo, recordamos que los detalles del proceso pueden encontrarse en la sección 3.2
|