L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 135

 
Andrey Dik:
Pour combien de temps ?

Je comprends que votre code dans l'article est déjà adapté pour simuler le trading sur les points trouvés et qu'il est juste de l'utiliser. ) C'est génial.

Disons au bout de quelques jours de fonctionnement de la machine (ou d'une semaine). Dans un délai prévisible, disons.

 
Alexey Burnakov:

Je comprends que votre code dans l'article est déjà adapté pour simuler le trading sur les points trouvés et qu'il suffit de l'utiliser. ) C'est génial.

Eh bien, disons en quelques jours de fonctionnement de la machine.

L'algorithme lui-même fonctionne et ne nécessite pas (sauf si vous êtes trop pointilleux) de travail supplémentaire, tandis qu'un fragment de code avec l'idéal zz peut être utilisé comme une simulation de trading avec un peu de travail supplémentaire.

Dans les deux jours qui suivent ? - Non, je pense que vous pouvez obtenir un bon résultat beaucoup plus rapidement, en quelques heures ou même en quelques minutes. Dans l'article, la recherche a duré quelque chose comme quelques secondes, mais il y avait 100 barres. Dans votre cas, cela peut prendre beaucoup plus de temps, bien sûr. Vous pouvez estimer expérimentalement le nombre d'époques afin d'obtenir le résultat avec la précision spécifiée et de respecter la limite de temps.

 
Andrey Dik:

L'algorithme lui-même fonctionne et n'a pas besoin (sauf si vous êtes trop pointilleux) d'être affiné, mais la section de code avec le zz parfait pourrait en principe être utilisée comme une simulation de commerce avec quelques ajustements.

Dans les deux jours qui suivent ? - Non, je pense que vous pouvez obtenir un bon résultat beaucoup plus rapidement, en quelques heures ou même en quelques minutes. Dans l'article, la recherche a duré quelque chose comme quelques secondes, mais il y avait 100 barres. Dans votre cas, cela peut prendre beaucoup plus de temps, bien sûr. Vous pouvez ajuster expérimentalement le nombre d'époques de manière à obtenir le résultat avec la précision souhaitée et à respecter les exigences de temps.

Donc. Merci. Je vais essayer. Je veux générer des entrées pour les barres de minutes sur l'ensemble de l'historique. Et ensuite je les mettrai dans mon expérience.

Beau travail que vous avez fait. Et le fait que les entrées idéales ne coïncident pas nécessairement avec la logique ZZ est une conclusion non triviale et importante.

 
Alexey Burnakov:

Ok. Merci. Je vais essayer. Je veux générer des entrées pour les barres de minutes sur l'ensemble de l'historique. Je vais les mettre dans mon expérience.

Beau travail que vous avez fait. Et le fait que les entrées idéales ne coïncident pas nécessairement avec la logique ZZ est une conclusion non triviale et importante.

Et merci. Peu de gens ont fait attention aux caractères gras, pour une raison quelconque...

J'aimerais ajouter. L'article optimise le PPI en tenant compte de l'écart moyen d'un instrument, mais maintenant je suis enclin à penser que l'optimisation devrait être faite sans écart, tandis que l'écart doit être pris en compte lors des tests.

 
Andrey Dik:

Merci à vous aussi. Peu de gens font attention aux caractères gras, pour une raison quelconque...

Je voudrais ajouter. L'article optimise le WPI en tenant compte du spread moyen de l'instrument, mais maintenant je suis enclin, ou plutôt sûr, de croire que l'optimisation doit être effectuée sans spread, alors que les tests de transactions doivent être effectués avec le spread.

Pour optimiser "sur chaque barre", il faut bien sûr tenir compte du spread. Sinon, une transaction sera exécutée sur chaque barre en direction du prochain prix ouvert. L'écart rend la tâche non linéaire et définit la configuration optimale du marché.
 
Alexey Burnakov:

LSTM que nous verrons plus tard.

Pour l'instant, mon collègue et moi sommes arrivés à un R^2 de 0,2 sur le test. Quelques filtres de convolution et quelques neurones dans une couche entièrement connectée. L'idée est que la récurrence n'est pas nécessaire à cet endroit. Ce dont nous avons besoin, c'est d'une extraction correcte des caractéristiques.

Les résultats obtenus jusqu'à présent sont les suivants pour mon problème (tous les scores R^2 sur l'ensemble de test) :

ARIMA : 0,14

MLP (NN entièrement connecté) : 0,12-0,15

GBM : 0,1

Réseau convolutif (simple, pas bien développé) : au moins 0,2

Ainsi, la dépendance simulée s'est effectivement avérée ne pas être si simple et les méthodes populaires échouent. Nous allons améliorer le réseau convolutif.

Si quelqu'un a le temps d'essayer de résoudre le problème (avec un réseau récurrent), veuillez partager le résultat.

 
Alexey Burnakov:

Jusqu'à présent, les résultats pour mon problème sont les suivants (toutes les estimations R^2 sur l'ensemble de test) :

ARIMA : 0,14

MLP (NN entièrement connecté) : 0,12-0,15

GBM : 0,1

Réseau convolutif (simple, pas bien développé) : au moins 0,2

Ainsi, la dépendance simulée s'est effectivement avérée ne pas être si simple et les méthodes populaires échouent. Nous allons améliorer le réseau convolutif.

Si quelqu'un a le temps d'essayer de résoudre ce problème (avec un réseau récurrent), merci de partager les résultats.

J'ai aussi travaillé sur mon problème. J'ai également utilisé des NS convolutives avec des couches entièrement connectées au dessus.

Le meilleur résultat que j'ai obtenu pour le R^2 du test était de 0,23 .

Il semble que ce soit le plafond. Augmenter la complexité du réseau ne donne plus rien. Mais la sortie du réseau n'est pas parfaite. Il s'agit d'un graphique en points de la réponse par rapport au modèle. Un nuage à pente étroite est attendu. En fait, on peut constater que la fonction de réponse complexe n'est pas entièrement modélisée par le réseau (les sauts ne sont pas reconnus). La fonction produite par le réseau est beaucoup plus fluide que ce que j'avais prévu.


Peut-être que les personnes familières avec les SN auraient des idées sur la façon dont une fonction aussi complexe pourrait être modélisée (exemple) :

Augmenter le nombre de couches, de neurones ?

En fait, sans préparation des variables d'entrée, toutes les méthodes populaires ont fusionné. La conversion peut réellement capter les caractéristiques nécessaires (par intégration, différenciation, lissage non linéaire) et le système nerveux central est déjà formé normalement à ces caractéristiques. C'est le pouvoir de la convolution.

D'ailleurs, M. Perervenko n'a rien dit de ce type de réseaux dans son article sur les réseaux neuronaux. Eh bien, je n'ai trouvé qu'une seule mention dans l'article entier. Et il serait possible de révéler la question de l'applicabilité aux séries temporelles (de manière réfléchie).

Alexey

 

Vous, surtout, donnez plus de contributions.

Et des exemples de formation.

 
Vadim Shishkin:

Vous, surtout, donnez plus de contributions.

Et des exemples de formation.

C'est suffisant.
 

Plus il y a de neurones dans la couche cachée, plus la fonction décrite par le neurone est complexe. Il faut donc plus de couches cachées et de neurones dans celles-ci.

Mais alors le problème sera que le neurone utilise des additions et des multiplications consécutives (et par exemple des sigmoïdes pour la fonction d'activation) pour décrire la cible, c'est-à-dire que vous n'obtiendrez évidemment pas votre fonction originale, mais une sorte d'approximation. Et il peut s'avérer que cette approximation se souviendra de certaines caractéristiques des données d'apprentissage, de sorte qu'elle ne fonctionnera pas correctement avec les nouvelles données. Il faut donc parfois arrêter la formation, voir si l'erreur sur l'échantillon de test a diminué, et poursuivre la formation si tout va bien. À un moment donné, l'erreur sur les données de test commencera à augmenter, et il faudra alors arrêter complètement la formation.

De même, la sortie d'un neurone est limitée par la fonction d'activation. Pour le populaire - sigmoïde est (0;1), relu est [0;inf). Les valeurs cibles doivent être mises à l'échelle dans un intervalle différent, vos sorties dans l'intervalle (-7;7) sont tout simplement inatteignables pour de nombreux paquets.