Intelligence artificielle

Trading robotique et apprentissage incrémental

Trading robotique et apprentissage incrémental


C'est un mardi occupé. L'horloge sur le mur marque 15h45. Lorsque vous revenez à l’écran, votre téléphone portable sonne. Sans regarder votre téléphone, vous savez de quoi il retourne. Tous les jours, quelques secondes, le même message texte ennuyeux:

Salut Joe. Bonne après-midi. Votre stratégie VR1 a déclenché des suggestions sur votre portefeuille "Actions américaines" pour le marché de demain:
ACHETER 100 actions APPL limite 185.10
VENDRE limite de GOOG de 50 actions 1 328,50
Répondez avec TRADE et je les exécute pour vous.
Votre sympathique robot de quartier, HAL.
HAL Trading
CLAUSE DE NON-RESPONSABILITÉ: La négociation des contrats à terme, des actions et des options comporte un risque de perte important et ne convient pas à tous les investisseurs. L'évaluation des contrats à terme, des actions et des options peut fluctuer et, par conséquent, les clients peuvent perdre plus que leur investissement initial. ...BLA BLA BLA BLA.

C'est génial. La technologie porte le spam et le harcèlement à un tout nouveau niveau excitant.

Il existe essentiellement trois sources possibles d’un message comme celui-ci. Premièrement, un être humain ordinaire prétendant être un robot. Oui. Ne rigole pas. Très commun. Ce sont tous des facteurs économiques pervers qui jouent. Les humains ordinaires coûtent beaucoup moins cher que les scientifiques qui ont d’énormes dettes d’emprunt étudiant et des compétences soigneusement préparées qui leur permettent de concevoir des robots bien conçus.

Mais à l'avenir, les deuxième et troisième sources sont probablement des robots qui suivent un type de renforcement ou d'apprentissage incrémental.

À ce stade, nous faisons une pause pour que l’on puisse se demander: «Ce type de cas d’utilisation n’est-il pas parfait pour l’apprentissage supervisé par lots?» À quoi un autre pourrait-il répondre: «Pas vraiment».

Les robots commerciaux doivent être en mesure de prendre des mesures au fur et à mesure que de nouvelles données financières arrivent, et les données financières ne sont pas une sorte de prévision météorologique cyclique, ou de données immobilières. Les données commerciales entrantes sont vraiment nouveau et non stationnaire, il est donc probable que le modèle que vous obtenez maintenant n’est pas celui que vous avez obtenu il ya quelques minutes, ni la dernière heure, ni hier. Cela changera, et le plus souvent, si vous pensez savoir pourquoi, vous ne pouvez pas prouver pourquoi (très peu scientifique). L'utilisation de modèles d'apprentissage supervisé dans un scénario comme celui-ci nécessite du temps d'inactivité pour une formation appropriée. La sélection des meilleures fenêtres de données pour la formation et les tests n'est pas une tâche triviale.

Dans le renforcement de l'apprentissage, votre robot est un agent qui prend des mesures en réponse à un environnement de manière à maximiser sa récompense potentielle (pour un robot de négociation, les récompenses peuvent être des bénéfices des exécutions de transaction). Il existe de nombreuses façons intéressantes de modéliser votre bot commercial en tant qu’agent, en particulier lorsque les avantages potentiels sont prédits par un modèle d’apprentissage incrémental basé sur un réseau profond: un hybride d’apprentissage par renforcement et d’apprentissage par incrément. C'est cool, très professionnel, mais malheureusement pas dans le cadre de cet exemple rapide.

L’apprentissage incrémental est un type particulier d’apprentissage supervisé en ligne dans lequel un modèle apprend petit à petit, de manière cumulative, à l’arrivée de nouvelles données. Dans le cas du robot de trading, la tâche de prédiction est en réalité une prévision par régression, en d’autres termes, elle dépend d’une séquence de données, d’une série chronologique. Il existe fondamentalement deux manières de préparer les données d’une série chronologique pour la consommation du modèle.

Le premier, appelé régression de séquence, est simple:

C’est la façon naturelle dont les séries chronologiques sont organisées, coche après coche. L'inconvénient est que votre modèle doit accepter les séquences. C’est généralement le cas de RNN et de variantes telles que LSTM, mais comme nous visions un modèle de régression plus simple, nous ne pourrons pas utiliser de régression séquentielle.

La seconde, appelée régression par décalage de fenêtre, compense la limitation du modèle en décalant chaque échantillon d’une fenêtre de taille. n. C'est plus compliqué à décrire que de montrer à quoi ça ressemble, alors voici:

5 adj_price-1 adj_price-2 adj_price-3 adj_price-4 adj_price-2013_FR-2013-01-10 67.886429 67.055209 68.119845 67.937002 68.33899 70.296565 2013-01-10 67.470170 67.882029 67.055209 68.119845 6729899870 d'enveloppement de protection de l'enveloppe de la chambre d'enfant -01-15 63.011926 65.064689 67.470170 67.886429 67.055209 68.119845 2013-01-16 65.627481 63.011926 65.064689 67.470170 67.886429 67.055209

Comme nous l’avons mentionné précédemment, nous utiliserons un modèle de régresseur simple appelé descente de gradient stochastique, ou SGD. La descente en pente est un modèle d'optimisation similaire à celui utilisé par une personne aveugle pour tenter de se frayer un chemin sur une pente de montagne. La personne ne peut pas voir la topographie, alors elle avance pas à pas dans la direction avec le plus fort déclin. De même, un algorithme de descente de gradient recherche des minimums ou des maximums pas à pas, à partir du voisinage de la valeur actuelle.

Explorons maintenant la précision de notre robot. Une exploration simplifiée d'un robot de négociation passera par une séquence d'étapes très spécifiques:

  1. Récupérer des données et créer des fonctionnalités synthétiques basées sur les fonctionnalités existantes;
  2. Échelle des caractéristiques non catégoriques;
  3. Caractéristiques catégoriques à codage unique à chaud;
  4. Crée une fenêtre changeante d’entités de 5 colonnes pour chacune des 2 entités liées à une série chronologique;
  5. Adapter en ligne le modèle SGD et générer une mesure d'erreur quadratique courante de la différence entre les prévisions et les résultats réels;
  6. Générer une métrique d'erreur pondérée de manière exponentielle pondérée de manière exponentielle;
  7. Éliminez les caractéristiques non catégoriques au cas où, à des fins d'interprétation.

Le flux QuantLET pour ces étapes est donné par:

( 
récupérer ('XXXX', début = '2013-01-01', fin = '2017-12-31')[['Adj. Close', 'Adj. Volume']]
>> appliquer (adjust_columns)
>> échelle (['adj_price', 'adj_volume'], scalers =[price_scaler, volume_scaler])
>> one_hot (["dow", "dom", "month"])
>> window_shift (['adj_price', 'adj_volume'], 5, separator = '-')
>> online_fit_predict (modèle, 'predict_adj_price', error_type = 'squared', response_variable_tag = 'adj_price', ignore_tags =['Date'])
>> ewma ('erreur', alpha = .2, output_tag = 'ewme')
>> unscale (['adj_price', 'predicted_adj_price', 'adj_price-1', 'adj_price-2', 'adj_price-3', 'adj_price-4', 'adj_price-5'], scalers =[price_scaler] * 7, index_column = 'Date')
)

Et voila! c'est à peu près tout. Le robot est défini et la précision est capturée. Cette notation d'un modèle financier est basée sur Sigma et vous pouvez trouver plus d'exemples dans l'onglet exemples de QuantLET et dans les publications précédentes.

À partir de ce flux, nous prenons la visualisation de la progression de la précision de notre robot nouvellement créé:

La ligne bleue correspond au prix réel et la ligne verte à la prévision. Nous pouvons voir que dès le début de la série chronologique, le robot va à la dingue en essayant de prédire le prochain tick, en faisant des erreurs horribles pendant qu'il apprend. Lors de son adolescence, l’erreur carrée en mouvement reflète ce comportement. Il y a quelques pointes d'incertitude sur le parcours, et encore une fois, la métrique en mouvement capture les erreurs. La métrique atténuée que nous appelons «ewme» vise uniquement à garantir que les pointes d'incertitude passées sont toujours prises en compte dans les observations futures.

Jusqu'ici, ça a l'air bien. Mais je sais ce que vous pensez. Si nous pouvons prédire les prix du lendemain, nous pouvons gagner beaucoup d’argent, non? Ok, essayons de répondre à cela:

(s 
>> signal_on_prediction_above_threshold (last_sample_column = 'adj_price-1', prediction_column = 'predict_adj_price')
>> fixed_sized_execution (initial_balance = 5000., charge = 7., price_column = 'adj_price-1')
)

Sur ce modèle financier, beaucoup plus proche d’un «robot de négociation en direct», nous générons des signaux de vente (ou d’achat) uniquement si la différence de prix passe au-dessus (ou au-dessous) d’un seuil spécifique -. Toutefois, ces signaux ne sont exécutés que si (a) vous avez assez d’argent pour acheter (b) vous avez assez d’actions à vendre et que l’erreur de déplacement n’est pas supérieure à un seuil. La taille du pari est optimisée pour une fraction fixe du portefeuille. Le solde initial est de 5 000 USD et le coût de la transaction de 7 USD.

Alors, quel est le résultat?

Sérieusement, ce n'est évidemment pas le cas. Cet exercice fait des hypothèses irréalistes sur un marché. Du côté positif, une conclusion intéressante est la capacité d'un modèle SGD affiné à prévoir un mouvement de prix. C’est la motivation initiale de cet exercice qui m’a pris à peu près 15 minutes et que j’ai décidé de partager: une alternative plus légère (et donc plus rapide) aux modèles d’apprentissage approfondi offrant des performances comparables en matière de négociation.

Show More

SupportIvy

SupportIvy.com : Un lieu pour partager le savoir et mieux comprendre le monde. Meilleure plate-forme de support gratuit pour vous, Documentation &Tutoriels par les experts.

Related Articles

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close
Close