Nous parlons principalement ici de la mise en œuvre de codes programmés en temps réel pour les stratégies de trading à moyenne et basse fréquence.

Stratégie

La naissance d'une stratégie de trading quantitative repose généralement sur l'observation et la compréhension du marché, la génération d'une idée de stratégie, puis la conception des détails spécifiques de la stratégie, puis le back-test de plusieurs variétés de données pour obtenir et vérifier l'effet de valeurs de paramètres spécifiques. . Si l’effet est bon et a une applicabilité universelle, l’étape suivante consiste à tester le marché réel avec de petits fonds. Si l'offre réelle hors échantillon est réalisable, vous pouvez éventuellement augmenter les fonds et la faire fonctionner pendant une longue période.

Afin d'éviter l'effet de levier, permettez-moi d'expliquer qu'il existe bien sûr d'autres méthodes pour générer des stratégies, telles que l'exploration de données, la fouille, la fouille, la fouille de facteurs. Il existe également des facteurs de génération automatiques tels que l’apprentissage automatique et l’apprentissage par renforcement. Cependant, ce type de méthode de boîte noire est difficile à maintenir pendant la période de retracement de la stratégie, car vous ne savez pas quand et pourquoi ces facteurs extraits échoueront. Lorsque vous effectuez des transactions quantitatives, le plus important est d'insister sur des transactions fermes. Si le marché n'est pas bon, vous pouvez réduire vos positions, mais vous ne pouvez pas les fermer. Personne ne peut savoir quand le grand marché éclatera. Si vous le manquez, votre retracement précédent sera vain.

Une analogie est que la conception et le backtesting des stratégies sont équivalents au « calcul du temple » mentionné dans « L'Art de la guerre » de Sun Tzu : « Celui qui n'a pas de bataille mais le temple est le vainqueur doit calculer davantage ; Qui n'a pas combattu mais le temple est le perdant doit calculer. "Moins c'est plus. Plus signifie victoire, moins signifie moins, et rien ne compte!"

Par conséquent, la stratégie de trading doit être bien planifiée et soigneusement calculée dès la conception initiale, sinon vous perdrez avant que l'offre réelle ne soit faite. Cette étape est la plus difficile. Bien que le code réel ultérieur ne soit pas facile, la plupart sont simplement fastidieux. Si vous y consacrez plus de temps et d'efforts, vous pouvez toujours le faire correctement. La clé d’une offre ferme est la maîtrise des risques.

Les stratégies de négociation, ou règles de négociation, nous permettent de « faire ce qu'il faut », et la mise en œuvre spécifique de l'offre réelle est de « faire ce qu'il faut ». Bien souvent, il est bien plus difficile de connaître la bonne direction que de parcourir une distance à pied. Tout comme la blague sur la réparation du matériel, il faut mille yuans pour tracer une ligne. Tracer la ligne elle-même ne vaut que 1 dollar, mais savoir où la tracer coûte 999.

Stratégie + offre réelle forment ensemble un système commercial. Concernant la conception d’un système de trading, vous pouvez vous référer à l’article précédent : Sept éléments d’un système de trading complet. La véritable offre ici concerne en fait les opérations spécifiques des 4 prochaines étapes du système commercial, « Entrée et sortie des profits et des pertes ». Les trois premières étapes sont essentiellement déterminées une fois la conception de la stratégie terminée.

Cependant, même si la stratégie est bonne, si la mise en œuvre effective n'est pas en place, l'effet sera considérablement réduit et même la stratégie potentielle qui était initialement bonne sera arrêtée. Développer une bonne stratégie n’est pas facile, alors n’échouez pas dans son exécution. Une bonne idée doit finalement être fermement mise en œuvre.

question

1. Situation soudaine du marché

Ce type de stratégie ne sera rencontré que s'il y a un signal dans la barre. Dans la barre, le prix de clôture ou le prix d'ouverture d'une certaine ligne K n'est pas utilisé, mais le prix intrajournalier est utilisé pour déclencher le signal.

Voici un exemple de problème rencontré dans l'offre réelle il y a quelques jours. Un exemple microscopique d’un marché commercial. C’est assez courant dans le cercle monétaire.

L'image ci-dessous est la ligne K de 10 secondes du contrat perpétuel BNB d'il y a quelques jours (2023.7.10 17:21) (une barre est la signification de OHLCV agrégé à partir des données de transaction dans les 10 secondes).

Comme vous pouvez le constater, l'amplitude de la grande ligne positive est de 3,53% et la transaction s'élève à environ 30 millions de dollars. Terminé en 10 secondes. Avant le début de ce marché, la tendance se déroulait presque sans incident.

Regardez l'image ci-dessous qui représente la ligne K d'une seconde à ce moment-là, vous pouvez obtenir plus de détails.

Il faut environ 4 secondes pour monter complètement. Il a augmenté de plus de 2 points dès la première seconde. Ce sont essentiellement les résultats de stratégies à haute fréquence (tendances événementielles, à haute fréquence, tenue de marché, etc.) et d'ordres algorithmiques qui peuvent être organisés à l'avance.

Regardons la ligne K de 4 heures de BNB. La ligne positive la plus importante est la période pendant laquelle la nouvelle a été publiée. Amplitude 4,05%.

En comparant les lignes K de ces périodes, nous pouvons voir que ce type de fluctuations induites par l'actualité (cette fois, l'actualité est le nouvel IEO de Binance, ARKM) s'effectue généralement instantanément. L'augmentation de 4 heures n'est en réalité pas très différente de 10 secondes, et le démarrage réel ne dure qu'environ 4 secondes. Ce type de champ de bataille appartient à ces stratégies à haute fréquence armées jusqu’aux dents. Cependant, cela peut également affecter les stratégies de moyennes et basses fréquences, provoquant un glissement plus important.

Nous n’étudierons pas ici les stratégies à haute fréquence. Qu’est-ce que cela signifie pour les stratégies à moyenne et basse fréquence ? Deux choses principales me viennent à l’esprit :

1. Certaines tendances éclatent très soudainement et se réalisent en peu de temps, de sorte que la stratégie ne peut pas être suspendue par hasard. L'offre réelle dans le cercle des devises doit être garantie d'être en ligne 24 heures sur 24, surtout s'il existe une position, et elle ne peut pas être déconnectée.

2. Le glissement réel peut atteindre 2 points de pourcentage. Regardez la ligne K d'une seconde ci-dessus. Si votre signal d'achat est basé sur un certain prix et que ce prix apparaît dans la partie inférieure de la grande ligne K, alors quoi qu'il en soit, le prix après votre entrée. le marché pourrait glisser de 2 à 3 points de pourcentage. Le pire peut être aussi bas que 4 points de pourcentage, et ces ordres d’achat se situent sur la pointe de l’aiguille. Cependant, si vous vendez, vous réaliserez des bénéfices au-delà de vos espérances. Cependant, selon la loi de Murphy, le pain qui tombe atterrit toujours du côté beurré. À long terme, il y a de fortes chances que les dérapages se multiplient.

La bonne nouvelle, c’est que cela n’arrive qu’un nombre limité de fois. Tant que la stratégie est bonne et que le dérapage est plus important, il s’agit simplement d’une prise de bénéfices et n’affectera pas les rendements positifs à long terme. C'est comme subir un choc et une usure supplémentaires.

Une façon d'atténuer ce problème consiste à utiliser Websocket pour obtenir le dernier prix. Le document indique qu'il est mis à jour toutes les 250 millisecondes, mais parfois il se met à jour plus rapidement, il est donc possible de répondre immédiatement. Un autre avantage de websocket est qu'il n'occupe pas la limite de fréquence de l'API Restful de l'échange. Ceci est mentionné en détail plus tard.

2. Le devis horaire

C'est ce que rencontrent de nombreuses stratégies de tendance, car la plupart d'entre elles utilisent le prix de la position de commutation pour calculer les signaux d'entrée et de sortie. Puis dès que l'heure passe, tout le monde démarre l'un après l'autre.

À l'heure, en particulier les multiples de 8, car quel que soit le cycle de votre stratégie, ces trois points devraient tous respecter le temps diviseur commun. Peut-être que les stratégies automatisées de chacun agiront et que les fréquences hautes, moyennes et basses seront rassemblées pour. génèrent leurs propres signaux, les rivaux les uns des autres.

De plus, à ce moment-là, l'échange nécessite également un règlement et une livraison. Bien que le contrat perpétuel ne soit pas livré, il peut y avoir d'autres opérations pour calculer les frais de capital de livraison. Pendant environ 6 secondes après les trois heures du 08/08/16, la websocket de Binance n'a pas transmis les informations de la ligne K, elle s'est arrêtée ! Je te demande juste quoi faire ? En réalité, il n’y a souvent pas de solution.

Ce qui est plus grave, c'est que le marché résonnera, surtout en cas de baisse, et que la panique sera plus contagieuse. Les serveurs de la bourse sont encore plus occupés, et de nombreuses petites pièces avec des conditions de marché féroces sont immédiatement en panne. Les commandes ne peuvent pas être passées, et toutes sont des erreurs 1001. Lorsque vous passez un ordre rapidement et que vous réussissez, les ordres négociés sur la pointe de l'épingle peuvent être les vôtres.

Par conséquent, le dérapage est vraiment inévitable. C'est le destin. Acceptez-le. Une optimisation excessive du code ne sera pas d'une grande utilité. Comme mentionné précédemment, considérez-le simplement comme un stop loss supplémentaire.

Cependant, il y a aussi quelques astuces à partager.

Le signal peut être calculé à l'avance n secondes avant l'heure. À ce moment-là, la congestion n'a pas commencé, car la plupart des stratégies automatisées peuvent attendre que le cours de clôture de la ligne K de l'heure soit publié avant de commencer à calculer le signal. Cependant, le problème causé par cette opération est qu'elle peut générer de faux signaux. Par exemple, le prix remonte immédiatement. Il ne devrait pas y avoir de signal et un faux positif se produit. À ce stade, cela dépend de votre choix si vous souhaitez le faire ou non. Cependant, vous pouvez ajouter un certain seuil et le déclencher lorsqu'il le dépasse, afin d'éviter les faux signaux provoqués par les retours de prix à court terme. Le glissement peut être un peu réduit.

Il existe également une méthode d'utilisation de signaux de décalage tels que le décalage horaire ou le décalage k-line, qui ne génère pas de signaux sur l'heure, n'intervient pas avec les autres et évite mieux l'encombrement. Il existe également des méthodes telles que TWAP.

Cependant, celles-ci nécessitent certaines compétences et rendront le code lui-même plus difficile.

offre ferme

Une stratégie CTA de base à moyenne et basse fréquence. De manière générale, le code réel est très simple. Il n'y a qu'une seule stratégie pour une variété, et il n'y a pas d'addition ou de soustraction de positions, et aucune information croisée n'est mélangée. Le code local n’a alors pas besoin de conserver d’état, car l’échange enregistre tout pour vous. S'il y a une position, quelle marge est requise, si la commande est terminée, etc. Parce qu'il s'agit d'une fréquence moyenne à basse, vous pouvez vérifier les informations du compte de la bourse à tout moment en cas de besoin, et c'est la méthode la plus immédiate et la plus précise. Cela élimine le problème lié à l'utilisation d'une base de données locale pour enregistrer l'état des transactions.

Cette stratégie simple est en fait réalisable, mais le problème est que le retracement peut être plus important, pas assez diversifié et que le risque est élevé. Un seul produit peut n'avoir aucun marché, fluctuer et retracer sans retour en arrière, ou rencontrer des conditions de marché extrêmes, et un autre grand trou apparaîtra sur la courbe des capitaux. Si vous le prenez au sérieux, vous aurez peur et arrêterez votre stratégie si vous ne pouvez pas le supporter. Si vous le prenez à la légère, l'expérience de trading sera bien pire. Notez que tout cela est dans des conditions de positions raisonnables. Sinon, si la position est trop légère, le retracement sera faible, mais les revenus seront également réduits, et les profits et pertes proviendront de la même source, et ce sera dommage de rater l'occasion si la position est trop légère ; trop lourd, ce sera une erreur, et tôt ou tard ce sera fini.

Il est cependant recommandé aux novices de commencer par une mise en œuvre en temps réel de cette stratégie. Ce n'est que par la pratique que vous pourrez améliorer rapidement votre niveau de trading. Mais assurez-vous de garder une position légère et l'effet de levier doit être inférieur. Il est préférable de ne pas utiliser l'effet de levier, afin de pouvoir persister plus longtemps.

Si vous souhaitez être plus professionnel, réduire les risques ponctuels, la courbe de capital sera plus lisse et vous aurez moins à vous soucier du moment où l'offre sera faite (comme mentionné précédemment, dans des positions raisonnables, cela est en fait très important, car cela est plus facile de s'en tenir à la stratégie et d'attendre le risque ) est généralement un modèle multi-variétés, multi-stratégies, multi-paramètres, et puis il y a des ajouts et des soustractions de positions. Cela ne signifie pas nécessairement ajouter ou soustraire des positions sur une stratégie, mais peut également être réalisé par plusieurs sous-stratégies pour obtenir l'effet d'ajouter ou de soustraire des positions. Cependant, dans ce cas, la stratégie sera plus complexe. Si vous souhaitez également minimiser le glissement des positions d'ouverture et de fermeture, la complexité du code montera en flèche.

Parlons des difficultés provoquées par ce modèle multi-variétés, multi-stratégies et multi-paramètres.

difficulté

1. Limite de fréquence API

La première difficulté liée aux stratégies multiples est la limite de fréquence des API. Il existe de nombreuses variétés et stratégies Afin d'obtenir des prix, des positions, des commandes et d'autres informations en temps réel, vous devez constamment visiter la bourse. Comme mentionné précédemment, si la fréquence est faible et lente, le prix obtenu peut ne pas être le plus récent et le glissement peut être beaucoup plus important.

Les ressources du serveur de l'échange sont limitées, il existe donc une limite sur la fréquence d'accès à l'API. La limite de Binance est de 2 400 par minute, puis il y a une limite de 10 secondes, et il existe d'autres modes dits d'apprentissage automatique pour détecter les comportements malveillants. Quoi qu'il en soit, cela ne fonctionnera certainement pas si c'est trop fréquent. Ça ne marche pas, l'échange a le dernier mot. Dans ce cas, vous savez, il n'y a pas de formule.

Bien qu'il soit dit qu'il s'agit de 2400, je l'ai testé avec désinvolture en utilisant la concurrence. Si je demande K lignes, même s'il s'agit des 99 lignes les plus courtes à la fois (le poids API est de 1), alors si je demande environ 75 pièces en même temps. , je serai banni pendant quelques minutes. Il n’est donc pas facile de remettre en question les limites.

Si vous le violez, vous recevrez des erreurs 429, 418 et votre IP sera bannie pendant quelques minutes à quelques jours. À ce moment-là, si vous avez un poste, ce sera misérable (il n'y a aucune restriction pour passer des commandes). , notamment en liquidant les positions existantes, mais vous n'avez aucune information sur les prix, à moins qu'il n'y ait également websocket)

La solution à ce problème consiste à utiliser Websocket pour obtenir des données, afin que l'échange puisse les transmettre activement en temps opportun sans occuper l'API. Peut réduire certains glissements. Le problème est que vous devez maintenir un autre centre de marché basé sur Websocket. La difficulté du code live a augmenté et est devenue plus compliquée. Il ne doit pas être déconnecté pendant 24 heures, et s'il est déconnecté, il doit être automatiquement reconnecté à temps, etc.

2. Statut de la stratégie

Comme mentionné précédemment, si les stratégies deviennent plus complexes, vous devez enregistrer le statut de chaque stratégie, sinon les positions de la bourse ne sauront pas quelle stratégie a été ouverte, combien chacune a été ouverte, etc. Et si vous souhaitez le consulter plus tard, vous devrez enregistrer davantage de données.

A ce stade, vous devez introduire une base de données (bien sûr, vous pouvez également utiliser des enregistrements de fichiers, même idée).

L'introduction d'une base de données entraîne les problèmes de la base de données. Cependant, cela est similaire au développement de logiciels dans d’autres secteurs et n’a rien de nouveau. Surtout dans le secteur du commerce électronique, car il s'agit avant tout de soldes de fonds, de gestion des commandes et d'autres choses similaires, ceux qui n'ont aucune expérience peuvent lire de tels livres et articles.

Il convient de noter que de nombreuses étapes doivent être réalisées pour réaliser des opérations atomiques similaires aux transactions de base de données, c'est-à-dire qu'un ensemble d'opérations ou toutes réussissent. Une fois qu'une certaine étape échoue, vous ne devez rien faire et revenir à l'état d'origine.

Ensuite, comme il s'agit après tout d'une transaction en argent réel, pour les opérations de base de données sur les informations de commande, il est préférable d'utiliser le niveau le plus élevé des quatre niveaux d'isolement, Serialisable, pour éliminer la possibilité de toutes les lectures sales, les lectures non répétables et le fantôme lit. C'est-à-dire qu'aucune utilisation simultanée, multithread ou même asynchrone n'est utilisée pour lire et écrire les informations clés de la base de données. Toutes les opérations sont effectuées dans un seul thread. Mise en œuvre des opérations.

Ne prenez pas à la légère le défi de la programmation simultanée. S’il y a un problème avec ce type de système, il est probablement impossible de le résoudre. C’est le bug le plus difficile à trouver dans le développement logiciel. Ceux qui peuvent accomplir parfaitement ce genre de travail sont des programmeurs avec un salaire mensuel de plus de 50 000.

Je ne pense pas qu'il y en ait beaucoup qui utilisent le multi-threading ou l'asynchrone (multi-threading et asynchrone, il est recommandé d'utiliser le multi-threading, car l'asynchrone est comme une maladie infectieuse en Python. Une fois utilisé, il doit être utilisé dans une chaîne d'appel) Ce qui est vraiment bénéfique, c'est d'envoyer des signaux d'avertissement DingTalk, etc. Étant donné que le service DingTalk est en Chine et que les serveurs de change sont à l'étranger, votre serveur de codes doit être déployé à l'étranger, plus près de l'échange, donc lors de l'envoi de DingTalk, le retour prend parfois plusieurs secondes, et parfois il est même bloqué. dure plus de dix secondes.

enfin

En fait, peu importe si vous ne pouvez pas faire beaucoup de choses. Tant que vous êtes conscient d’accepter un dérapage plus important, il est possible de cracher près de 1/5 de bénéfices, voire plus. La chose la plus importante est la stratégie. Attendre des rendements positifs et pouvoir fonctionner sans aucun temps d’arrêt est la clé.

En bref, la première priorité d’une offre ferme est de poursuivre et d’exécuter de manière stable la logique établie de la stratégie. Le slippage fait partie du trading, essayez simplement de le réduire tant qu'il ne vous casse pas les muscles.

Stratégie de premier ordre, 2 et 3 flux sont mis en œuvre, il n'y a pas de gros problème. Mais si la stratégie n'est pas conforme aux normes, le meilleur code de trading réel n'aidera pas et la perte restera une perte. Par conséquent, le simple fait d’écrire du bon code ne peut pas faire de bons échanges quantitatifs. La stratégie est bonne et le code live est robuste. Bien sûr, c'est le meilleur. Cependant, lorsque le temps est limité, concentrez-vous sur la stratégie.

À suivre