Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 135

 
Andrey Dik:
¿Por cuánto tiempo?

Entiendo que su código en el artículo ya es adecuado para simular el comercio en los puntos encontrados y es justo utilizarlo. ) Eso es genial.

Digamos que en un par de días de funcionamiento de la máquina (o una semana). En un plazo previsible, digamos.

 
Alexey Burnakov:

Entiendo que su código en el artículo ya es adecuado para simular el comercio en los puntos encontrados y sólo puede ser utilizado. ) Eso es genial.

Digamos que en un par de días de funcionamiento de la máquina.

El algoritmo en sí mismo funciona y no requiere (a menos que seas demasiado quisquilloso) trabajo adicional, mientras que un fragmento de código con zz ideal puede ser utilizado como una simulación de comercio con algo de trabajo adicional.

¿En un par de días? - No, creo que se puede obtener un buen resultado mucho más rápido, en horas o incluso minutos. En el artículo la búsqueda fue algo así como unos pocos segundos, pero había 100 barras. En su caso puede tardar mucho más, por supuesto. Puede estimar experimentalmente el número de épocas para poder obtener el resultado con la precisión especificada y cumplir el límite de tiempo.

 
Andrey Dik:

El algoritmo en sí funciona y no necesita (a no ser que seas demasiado exigente) algún ajuste, pero la sección de código con el zz perfecto podría en principio utilizarse como una simulación de comercio con algún ajuste.

¿En un par de días? - No, creo que se puede obtener un buen resultado mucho más rápido, en horas o incluso minutos. En el artículo la búsqueda fue algo así como unos pocos segundos, pero había 100 barras. En su caso puede tardar mucho más, por supuesto. Puede ajustar experimentalmente el número de épocas para obtener el resultado con la precisión deseada y cumplir los requisitos de tiempo.

Así que. Gracias. Lo intentaré. Quiero generar entradas para barras de minutos en todo el historial. Y luego los aplicaré a mi experimento.

Buen trabajo el que has hecho. Y el hecho de que las entradas ideales no coincidan necesariamente con la lógica ZZ es una conclusión no trivial e importante.

 
Alexey Burnakov:

De acuerdo. Gracias. Lo intentaré. Quiero generar entradas para las barras de minutos en todo el historial. Voy a ponerlos en mi experimento.

Buen trabajo el que has hecho. Y el hecho de que las entradas ideales no coincidan necesariamente con la lógica ZZ es una conclusión no trivial e importante.

Y gracias. Poca gente prestó atención a las negritas, por alguna razón...

Me gustaría añadir. El artículo optimiza el PPI teniendo en cuenta el diferencial medio de un instrumento, pero ahora me inclino a pensar que la optimización debe hacerse sin diferencial, mientras que el diferencial tiene que ser considerado durante las pasadas de prueba.

 
Andrey Dik:

Gracias a ti también. Poca gente presta atención a las negritas, por alguna razón...

Me gustaría añadir. El artículo optimiza el WPI teniendo en cuenta el spread medio del instrumento, pero ahora me inclino, o más bien estoy seguro, de que la optimización debería realizarse sin spread, mientras que las ejecuciones de las operaciones de prueba deberían realizarse con el spread.

Para optimizar "en cada barra" hay que tener en cuenta, por supuesto, el diferencial. En caso contrario, se ejecutará una operación en cada barra en dirección al siguiente precio de apertura. La dispersión hace que la tarea no sea lineal y define la configuración óptima del acuerdo.
 
Alexey Burnakov:

LSTM que veremos más adelante.

Por ahora, mi colega y yo hemos llegado a R^2 0,2 en la prueba. Unos cuantos filtros de convolución y unas pocas neuronas en una capa totalmente conectada. La idea es que la recurrencia no es necesaria allí. Lo que necesitamos es una extracción correcta de las características.

Los resultados hasta ahora son los siguientes para mi problema (todas las puntuaciones R^2 en el conjunto de pruebas):

ARIMA: 0,14

MLP (NN totalmente conectada): 0,12-0,15

GBM: 0,1

Red convolucional (simple, poco desarrollada): al menos 0,2

Así, la dependencia simulada ha resultado no ser tan sencilla y los métodos populares fallan. Vamos a mejorar la red convolucional.

Si alguien tiene tiempo para intentar resolver el problema (con alguna red recurrente), por favor comparta el resultado.

 
Alexey Burnakov:

Hasta ahora los resultados de mi problema son los siguientes (todas las estimaciones de R^2 en el conjunto de pruebas):

ARIMA: 0,14

MLP (NN totalmente conectada): 0,12-0,15

GBM: 0,1

Red convolucional (simple, poco desarrollada): al menos 0,2

Así, la dependencia simulada ha resultado no ser tan sencilla y los métodos populares fallan. Vamos a mejorar la red convolucional.

Si alguien tiene tiempo para intentar resolver el problema (con alguna red recurrente), por favor comparta los resultados.

También he trabajado en mi problema. También he utilizado NS convolucional con capas totalmente conectadas en la parte superior.

El mejor resultado que obtuve para R^2 en la prueba fue de 0,23 .

Parece ser el techo. Aumentar la complejidad de la red ya no da nada. Pero el resultado de la red no es perfecto. Este es un gráfico de puntos de la respuesta contra el modelo. Se espera una nube de pendiente estrecha. De hecho, se puede observar que la función de respuesta compleja no está totalmente modelada por la red (no se reconocen los saltos). La función producida por la red es mucho más suave de lo que había previsto.


Tal vez las personas familiarizadas con NS tengan alguna idea sobre cómo se podría modelar una función tan compleja (ejemplo):

¿Aumentar el número de capas, de neuronas?

De hecho, sin la preparación de las variables de entrada, todos los métodos populares se han fusionado. Convertir realmente puede extraer potencialmente las características necesarias (por integración, diferenciación, suavizado no lineal) y el NS ya aprende normalmente de ellas. Ese es el poder de la convolución.

Por cierto, el Sr. Perervenko no dijo nada sobre este tipo de redes en su artículo sobre redes neuronales. Sólo he encontrado una mención en todo el artículo. Y sería posible desvelar la cuestión de la aplicabilidad a las series temporales (de forma reflexiva).

Alexey

 

Tú, sobre todo, das más aportaciones.

Y ejemplos de formación.

 
Vadim Shishkin:

Tú, sobre todo, das más aportaciones.

Y ejemplos de formación.

Es suficiente.
 

Cuantas más neuronas haya en la capa oculta, más compleja será la función que pueda describir la neurona, por lo que se necesitan más capas ocultas y neuronas en ellas.

Pero entonces el problema será que la neurona utiliza sumas y multiplicaciones consecutivas (y por ejemplo sigmoides para la función de activación) para describir el objetivo, es decir, obviamente no obtendrás tu función original, sino algún tipo de aproximación. Y puede resultar que esta aproximación recuerde algunas características de los datos de entrenamiento, por lo que no funcionará correctamente con los nuevos datos. Por eso, a veces hay que dejar de entrenar, ver si el error en la muestra de prueba ha disminuido, y seguir entrenando si todo va bien. En algún momento el error en los datos de prueba empezará a crecer, entonces el entrenamiento debe detenerse por completo.

Además, la salida de una neurona-clave está limitada por la función de activación. Para popular - sigmoide es (0;1), relu es [0;inf). Los valores objetivo deben ser escalados a un intervalo diferente, sus salidas en el intervalo (-7;7) son simplemente inalcanzables para muchos paquetes.