Dans la continuité des trois articles précédents sur le code réel du trading programmatique :
Produits secs de base - détails et réflexions sur le trading automatisé en temps réel des systèmes de trading quantitatifs (1. Problèmes et difficultés)
Système de trading quantitatif - Détails et réflexions sur l'offre ferme automatisée (2. Objectif de l'offre ferme)
Système de trading quantitatif - Détails et réflexions sur les offres réelles automatisées (3. Compétences en traitement)
Ici, nous continuerons à parler du système commercial multi-stratégies et du centre de marché dans la structure globale du code d'offre réel.
Préface
Dans le secteur du commerce, en particulier dans les contrats à terme, plusieurs maîtres du commerce à fort effet de levier apparaîtront de temps en temps, et le principal de 100 000 yuans peut facilement se transformer en dizaines de millions. Cependant, presque tous ces gens étaient comme des météores traversant le ciel nocturne. Après un bref instant éblouissant, ils disparurent silencieusement.
Et un autre groupe de commerçants chevronnés qui font des affaires depuis longtemps sont soumis toute la journée, parlant de l'avenir inconnaissable, craignant le marché et les cygnes noirs qui arrivent à tout moment, en même temps, ils utilisent un effet de levier très faible. ouvrez des positions et essayez de faire des erreurs. La direction est comme de l'herbe sur le mur, se balançant à gauche et à droite, sans la détermination et le courage d'un maître. Mais pour une raison quelconque, ce groupe de personnes est actif sur le marché. Bien que l'effet de levier soit faible, leurs positions ne sont pas petites.
Dans la nature humaine du monde commercial, les étoiles sont faciles à trouver, mais les étoiles d’anniversaire sont difficiles à trouver.
En tant que trader quantitatif survivant, je pense que l’un des points les plus importants du trading est de prendre conscience de la nécessité de stratégies multiples. Il est encore difficile de mettre en œuvre des stratégies multiples dans le trading subjectif car la main d’œuvre est limitée (à moins d’embaucher plusieurs traders comme une institution) et le marché fonctionne 24h/24 et 7j/7 et il est facile de rater les points d’entrée. Cependant, le trading programmatique est relativement simple à mettre en œuvre. La programmation perd la capacité du cerveau et des yeux humains à identifier les tendances des prix, mais elle a un pouvoir d'exécution plus fort et une plus grande capacité à copier des stratégies et à disperser les positions, ce qui présente des avantages et des inconvénients.
Multi-cibles, multi-stratégies et multi-paramètres, les positions en capital sont naturellement dispersées. Il ne s’agit plus d’une ouverture et d’une clôture passionnantes d’un seul profit ou d’une seule perte, mais d’une quête visant à lisser autant que possible la courbe des capitaux.
Aperçu
L'image ci-dessous est le schéma d'architecture générale d'un ensemble de mon vrai code.

L'ensemble de l'architecture est divisé en deux parties. L’un est un centre de marché indépendant et l’autre est le programme commercial chargé de mettre en œuvre la logique stratégique.
Habituellement, je démarre un programme avec un seul compte, et leurs paramètres de politique et leurs clés de compte sont distingués par des fichiers de configuration, de sorte que le code puisse être entièrement partagé et que la version du code soit plus facile à gérer. Certains paramètres de la stratégie peuvent être légèrement différents, notamment pour échelonner certaines opérations afin qu’elles ne se déroulent pas brusquement en même temps.
Lorsqu'il y avait peu de stratégies auparavant, j'ai démarré un programme Python avec chaque sous-stratégie, mais plus tard j'ai découvert que la mémoire du serveur n'était pas suffisante. Car un programme Python occupe à lui seul environ 60Mo de mémoire s'il y a plus de stratégies et sont copiées sur plusieurs comptes, il occupera rapidement beaucoup de mémoire. Bien que vous puissiez payer plus pour un serveur plus puissant, il est également difficile à gérer et à entretenir. En fin de compte, il a été modifié pour devenir ce qu'il est aujourd'hui. En fonction des comptes, des stratégies similaires sur différentes devises (plusieurs devises et plusieurs paramètres) sont regroupées en un seul groupe, puis un groupe de stratégies constitue une application Python. Après l'avoir exécuté, je pense que ce modèle de combinaison est très efficace pour la mise en page de plusieurs comptes et plusieurs stratégies. Il est très pratique pour la gestion du code ainsi que pour l'exploitation et la maintenance en temps réel.
L’avantage d’une sous-stratégie pour une application Python est que le code peut être beaucoup plus simple. Cependant, imaginez, si votre stratégie s'exécute sur les 40 principales pièces de monnaie, puis exécute 3 stratégies différentes sur chaque pièce, ce sera alors 120 sous-stratégies. Si vous ajoutez trois comptes supplémentaires, ce sera 360 sous-stratégies. stratégies. Ce modèle Ce serait insoutenable.
Lorsqu'il y a peu d'applications, vous pouvez d'abord utiliser un terminal tel que tmux pour afficher les informations du journal en temps réel, ce qui est très pratique pour surveiller les premières étapes du fonctionnement du programme. Une fois le code stable dans la période ultérieure, un logiciel d'exploitation et de maintenance tel que pm2 sera utilisé pour la gestion. Analysez simplement le fichier journal régulièrement à l’avenir.
Dans le cas de cibles et de stratégies multiples, une place de marché indépendante doit être la norme. Les différentes informations de marché obtenues peuvent être partagées entre plusieurs programmes de trading, c'est-à-dire les modules de stratégie sur le côté gauche de l'image ci-dessus.
Centre de devis
L'image ci-dessous est une image plus détaillée du module Market Center.

Tout d'abord, vous pouvez définir les symboles de la ligne K à obtenir via le fichier de configuration, afin qu'il soit plus facile de changer de type à l'avenir.
S'il s'agit de plusieurs périodes, vous pouvez alors obtenir leur ligne k de période de diviseur commun, puis chaque stratégie peut rééchantillonner en fonction de ses propres besoins.
Si vous souhaitez simplifier les choses une fois pour toutes, alors il est préférable d'obtenir directement la ligne K de 15 minutes, car les stratégies de moyenne et basse fréquence, notamment le suivi de tendance, avec un cycle de moins de 15 minutes, sont fondamentalement difficile de gagner de l'argent à long terme.
Par exemple, si vous avez une stratégie de 15 minutes, 1 heure ou 4 heures, le centre de marché n'a besoin que d'obtenir la ligne K de 15 minutes. Si la longueur de la ligne k de la grande période après le rééchantillonnage n'est pas suffisante, vous devez alors enregistrer davantage de lignes k de 15 minutes dans la base de données au moment du démarrage.
Étant donné que Websocket ne transmet que les dernières informations mises à jour sur la ligne K, si votre stratégie utilise un cycle de ligne K relativement important et un temps d'analyse long, par exemple 4 heures de ma150, il s'agira alors de 600 heures (25 jours) de données, 15 Si une ligne k par minute est requise, il en faut 2 400. Cela dépend de l'acquisition unique et de la sauvegarde via l'API restante au démarrage du centre de marché, comme base pour les mises à jour continues ultérieures.
J'ai divisé l'ensemble du centre de marché en deux applications. En fait, elles peuvent également être combinées en une seule application, mais il est plus robuste de les séparer. Parlons d’abord du PlanB secondaire.
Plan B
Comme mentionné dans plusieurs articles précédents, il s'agit principalement d'éviter que le websocket de PlanA ne soit déconnecté. Il est utilisé comme sauvegarde temporaire, notamment au moment de la sortie de la stratégie, pour éviter que le prix ne s'inverse déjà sur une certaine distance et à la sortie. la position n'a pas été liquidée, provoquant des pertes plus inattendues.
PlanB est très simple. Il utilise principalement la fonction public_get_ticker_price pour obtenir les derniers prix de tous les contrats perpétuels à la fois. Il s'agit également des dernières informations sur les prix compilées par B An lui-même.
Actuellement, B'an compte plus de 200 contrats perpétuels. Si nous obtenons les derniers prix un par un, nous devons nous assurer que le prix de chaque produit est mis à jour toutes les 3 secondes. L'API sera appelée plus de 4 000 fois en une minute. qui doit dépasser la limite n° possible. Cependant, le poids de l'API de la fonction mentionnée précédemment n'est que de 2. Si elle est utilisée une fois toutes les 3 secondes, elle ne consommera que 40 quotas d'API par minute. Il n'y a pas lieu de s'inquiéter du dépassement du quota.
Après mon test, Binance regroupe les prix de tous les contrats une fois toutes les 1 à 2 secondes environ, donc pour le prix de sauvegarde des stratégies moyennes et basses fréquences, un délai d'environ 5 secondes est tout à fait suffisant.
Si vos exigences ne sont pas élevées, vous pouvez même l'utiliser pour synthétiser des lignes K approximatives pour tous les contrats, en évitant complètement l'utilisation de websocket. Même si ce type de ligne K ne peut pas être utilisé pour le trading, il peut également être utilisé pour analyser l'ensemble des informations du marché, puis fournir des points d'entrée aux traders subjectifs en fonction de leurs propres algorithmes de stratégie, tels que la divergence et la convergence des moyennes mobiles. reconnaissance de formes simple, etc. Signal. Sinon, comment peut-on voir autant de pièces ? Si vous avez un bon day trader, cet outil peut être utile pour vous aider dans le trading. J'ai déjà écrit des outils similaires pour d'autres. C'est vraiment bien quand le marché est bon, mais le marché n'a pas été bon récemment.
Bien entendu, cette solution n’est utile que lors du trading de nombreuses pièces. Dans le cas contraire, mieux vaut obtenir directement le prix handicap BBO de chaque variété.
Notez également que les informations de prix de sauvegarde doivent être utilisées fréquemment dans le code principal. Par exemple, elles sont utilisées pour calculer le montant des fonds fiduciaires correspondant à la position et le taux de profit et de perte approximatif, ce qui ne nécessite pas de données très précises. Parce que les extraits de code et les informations qui ne sont pas fréquemment utilisés peuvent être tombés en panne il y a longtemps et vous ne le saurez peut-être même pas jusqu'à ce qu'ils soient utilisés. Quiconque a écrit beaucoup de code sait que ce type de code d'annexe peut facilement être accidentellement modifié sans s'en rendre compte.
Plan A
Le code principal du centre de marché. Cette application a 4 fonctions principales.
Procurez-vous des chandeliers à base historique. Comme mentionné plus tôt dans l'article, chaque fois que vous démarrez, vous devez vous assurer que chaque ligne K requise par toutes les stratégies est présente.
gestion des websockets. Ce module est un peu plus compliqué et doit gérer diverses situations de déconnexion, reconnexion, etc. Chaque fois que l'échange transmet de nouvelles données de la ligne K, les données de la dernière barre de la ligne K dans la base de données sont mises à jour.
En plus des données de la gamme K, j'ai également mis à jour les informations de précision de chaque variété sur le centre de marché. Autrement dit, la fonction public_get_exchangeinfo obtient les différents prix de commande et la précision minimale de la quantité commandée, puis les convertit en un type de dictionnaire pratique. De cette façon, toutes les stratégies peuvent être partagées.
La dernière étape consiste à vérifier, un simple contrôle d’intégrité suffit. Vérifiez si les K-lignes obtenues sont continues et s'il n'y a pas d'omissions, puis comparez-les régulièrement une à une avec les K-lignes obtenues par le reste de l'API, si l'écart de prix avec le prix obtenu par PlanB est trop important, etc. En bref, c’est juste une question de comparaison et d’inspection afin que les erreurs puissent être découvertes le plus tôt possible.
Il s’agit probablement de la structure de base de ma stratégie de marché de moyenne à basse fréquence. Si nécessaire, les informations de mise à jour du compte peuvent également être obtenues via websocket. Mais c'est un peu plus gênant et ne sera pas utilisé la plupart du temps.