Le cœur du prédateur alpha et l’art du RPyC: coder en python pour les crypto-curieux

Par: Blockforce Capital Research

Dans notre dernier article [APM II], l’alpha Predator s’éloignait lentement du jardin alors que nous observions derrière quelques buissons. Hélas, la queue épaisse en forme de fractale du prédateur Alpha s’est coincée dans une épine, libérant une goutte de sang sans que le prédateur ne l’aperçoive. Cette simple goutte de sang est une chance rare d’en apprendre davantage sur le fonctionnement interne du Predator Alpha de Blockforce Capital. En rentrant au laboratoire et en plaçant cet échantillon au microscope, nous commençons à voir l'ADN à structure fine du code Python qui donne vie au prédateur.

Notre équipe de recherche a pour objectif d'aider l'ensemble de la communauté des codeurs et des passionnés de cryptographie en mettant en évidence et en expliquant les technologies que nous utilisons. Cet article est le premier de notre nouvelle série intitulée «Tech Corner»; une série de messages adressés à nos lecteurs avec un talent pour les détails techniques et de codage. Nous allons entrer dans le code et partager les détails de notre modèle Alpha Predator (APM) pour la négociation systématique d’actifs numériques. Notre objectif est d’être transparent et éducatif. Si vous souhaitez rester à jour, n'hésitez pas à vous inscrire sur notre liste de diffusion pour ne pas manquer notre prochain opus de Tech Corner. Commençons!

Sous le microscope

L'APM est écrit en Python et s'appuie sur les packages Pandas et NumPy pour le traitement des chiffres. Il fonctionne sur des ressources informatiques de service Web dédiées et extrait les données d’une base de données PostgreSQL exécutée sur le service RDS haute disponibilité du serveur. La base de données elle-même est alimentée par de nombreux collecteurs de données et binners redondants pour s'assurer qu'APM puisse dévorer les données de marché les plus récentes.

L’Alpha Predator tient des registres détaillés de ses activités et de ses résultats et envoie des signaux commerciaux par divers canaux. Ils incluent Slack, SMS, un système de mise en file d'attente pour une exécution automatique des transactions et même des appels automatisés aux gestionnaires de portefeuille.

L'un des problèmes auxquels nous avons été confrontés consistait à obtenir des informations en direct plus détaillées sur la manière dont APM prend ses décisions, y compris des graphiques de données de marché et de leurs analyses. Comme nous l’avons décrit dans [APM I] et [APM II], APM utilise un arbre de décision basé sur les propriétés du marché et la version actuelle prend des décisions sur la base d’oscillateurs stochastiques optimisés.

Au début, une approche low-tech

Notre première approche consistait à utiliser une copie hors ligne d'APM pour générer des graphiques statiques utilisant la même source de données que l'APM réel. Ce plan nous a mis à peu près à mi-chemin, mais il y avait deux problèmes importants. Premièrement, nous ne pouvions jamais être sûrs à 100% que l’APM en direct voyait les mêmes données et analyses que la copie hors ligne. Pour résoudre ce problème, nous avons dû vérifier deux ou trois fois les fichiers de configuration APM, qui changent beaucoup au fur et à mesure que l'optimisation APM progresse. Le deuxième problème était l'aspect manuel de cette stratégie. Nous avons toujours eu besoin de quelqu'un pour exécuter l'APM hors ligne afin de vérifier l'APM en direct, ce qui n'est pas pratique.

L’alternative évidente à celle que nous venons de décrire était une autre approche peu technique: faire en sorte que APM dumpe toutes ses données sur le disque chaque fois qu’il met à jour et évalue les critères de négociation. La logique aurait alors été d'écrire un code automatisé utilisant ces données pour afficher et mettre à jour les graphiques affichés sur une page Web. Bien que pratique, cela aurait été une voie de communication à sens unique.

Entrer RPC - Appel de procédure à distance

Notre équipe d'ingénieurs a mis au point un moyen beaucoup plus puissant et bidirectionnel d'interagir avec un APM en cours d'exécution. Il s’appelle «appel de procédure à distance» (RPC) et remonte aux temps sombres de l’informatique avant Internet. Dans son incarnation moderne, RPC permet à un programme de s’attacher à un autre programme en cours d’exécution. Il peut ensuite inspecter et même modifier les données de ce dernier programme et exécuter des fonctions en fonction d’autorisations prédéfinies. RPC nous permet d’avoir un lien direct avec le cœur d’APM: nous pouvons extraire et représenter graphiquement toutes ses données en temps réel, et nous pouvons influencer son comportement en modifiant les variables qui contrôlent son évolution.

Cette interaction est extrêmement puissante. Nous l’implémentons en ajoutant un peu de code à APM (nous donnerons des détails ultérieurement), puis en nous connectant à l’instance APM en cours à partir d’un processus Web Python / Flask qui sert les données APM et l’interactivité via HTTPS. Voici une capture d'écran montrant à quoi cela ressemble:

Nous utilisons plotly.js pour afficher les données ci-dessus. Le prix BTC (en noir) et les% D (rouge) et% DS (bleu) de l'oscillateur stochastique actif sont indiqués. Les échanges se produisent chaque fois que ces deux se croisent. Le sélecteur et un bouton d'envoi en haut à gauche illustrent comment RPC nous permet d'interagir avec APM. Nous pouvons activer ou désactiver l'exécution automatique des transactions à l'aide de notre moteur de négociation exclusif, que nous décrirons dans une publication ultérieure. Plus important encore, le graphique ci-dessus est établi sur la base de données extraites d'une instance en direct de APM!

C’est super facile!

Donc comment ça fonctionne? C’est super facile! Tout ce qui est nécessaire est un interpréteur Python moderne (> = 3.6) et le paquet RPyC [pip install rpyc], ainsi qu'un peu de code. Nous avons rassemblé des exemples de fragments de code que vous pouvez essayer et exécuter vous-même.

Tout d'abord, vous ajoutez des instructions RPyC à votre code principal avec lequel vous souhaitez interagir ultérieurement. Voici un exemple:

Quelques points à noter: RPCService est la classe exposée par RPyC. Nous passons dans un objet appelé «my_object» de la classe My_Object qui a une propriété appelée «solution». En utilisant le mécanisme d’exposition des objets de RPyC, nous exposons «mon_objet» à l’aide de la méthode «exposée_get_my_object ()».

Nous notons également que RPyC est lancé en utilisant le mécanisme de threading Python. RPyC écoutera le numéro de port local 12345. Il est assis et fonctionne en arrière-plan pendant que le programme principal continue de s’exécuter. Dans ce cas, la dernière solution consiste à imprimer la solution toutes les deux secondes.

Voici le code client. C’est encore plus court:

Ainsi, le programme client (également appelé «processus») se connecte au serveur RPyC qui écoute sur le port 12345. Il saisit ensuite l’objet «my_object» exposé et affiche sa propriété de solution. Ensuite, il met à jour la solution à 43.

Pour essayer ceci, démarrez d’abord le serveur RPyC (le premier extrait de code), puis exécutez le client (le second extrait de code). Vous obtiendrez une sortie du processus serveur ressemblant à ceci:

Solution: 42

Solution: 42

Solution: 42

Solution: 43

Solution: 43

Solution: 43

Ici, le changement de 42 à 43 se produit lorsque le client est exécuté, se connecte au serveur et modifie my_object.solution de 42 à 43.

C’est précisément ainsi que nous gérons les modifications d’exécution des variables dans nos exécutions APM. Bien entendu, RPyC offre bien plus de fonctionnalités, notamment l’appel à distance des fonctions exécutées par le serveur, etc. Assurez-vous de consulter la documentation de RPyC ici

Conclusion

Nous espérons que cet article vous a incité à essayer le RPyC et à l'utiliser de manière productive à vos fins. Inutile de dire que nous sommes de grands fans et que nous continuerons à utiliser RPyC de nombreuses façons tout au long de l’APM et du reste de notre pile logicielle. Nous continuerons d’analyser au microscope l’ADN de l’Alpha Predator et de partager ce que nous trouvons ici dans les futurs articles de Tech Corner. Pour rester à jour avec nos publications actuelles, abonnez-vous à notre newsletter ci-dessous.

Blockforce Capital ne recommande pas que les informations présentées aux présentes servent de base à toute décision d'investissement. Les informations sont données sous forme de résumé et ne prétendent pas être complètes. Le présent document a pour seul objectif d'informer et ne constitue en aucun cas une offre ou une sollicitation d'achat ou de vente de titres, d'autres investissements ou de services, ni d'attirer des fonds ou des dépôts.

Publié à l'origine sur www.blockforcecapital.com.