Type/to search
8
Follow
1363
Followers
Du trading quantitatif à la gestion d'actifs - Développement de stratégies CTA pour des rendements absolus
Original
Created 2019-06-26 10:27:41  Updated 2023-10-30 20:30:50
 5
 7717

img

Préface

Pourquoi étudier ce cours?
Qu’avez-vous gagné en suivant ce cours ? Tout d'abord, ce cours est basé sur les langages de programmation JavaScript et Python. Le langage n'est qu'une technologie, et il nous faudra bien appliquer cette technologie à un secteur industriel. Le trading quantitatif est une industrie émergente qui connaît actuellement une phase de développement rapide et qui a une énorme demande de talents.

Grâce à l'étude systématique de ce cours, vous pourrez acquérir une compréhension plus approfondie du domaine du trading quantitatif. Si vous êtes un étudiant qui se prépare à entrer dans le domaine du trading quantitatif, cela vous sera également utile. Si vous êtes un trader boursier Si vous êtes un passionné d'investissement à terme, le trading quantitatif peut vous aider pleinement dans votre trading subjectif. En développant des stratégies de trading, vous pouvez réaliser des bénéfices sur le marché financier et élargir vos canaux et plateformes d'investissement et de gestion financière.

Avant cela, laissez-moi vous parler de mon expérience personnelle en trading. Je ne suis pas un spécialiste en finance, mais en statistiques. Il a commencé à s'engager dans le trading subjectif d'actions alors qu'il était étudiant. Plus tard, par hasard, il est devenu praticien en trading quantitatif d'un fonds de capital-investissement national, principalement engagé dans la recherche et le développement de stratégies.

Je suis dans le cercle du trading depuis plus de dix ans et j’ai développé différents types de stratégies. Ma philosophie d’investissement est la suivante : le contrôle du risque avant tout, se concentrer sur le rendement absolu. Le titre de notre cours est : Du trading quantitatif à la gestion d’actifs – Développement de stratégies CTA pour des rendements absolus.

1. La logique de gagner de l'argent avec les stratégies CTA à terme

1.1 Comprendre le CTA Futures

Certaines personnes peuvent se demander ce qu'est le CTA ? Qu'est-ce que le CTA exactement ? CTA est appelé conseiller en négoce de matières premières à l'étranger et est généralement appelé gestionnaire d'investissement dans le pays. Les CTA traditionnels regroupent les fonds d'un grand nombre d'investisseurs, puis les confient à des institutions d'investissement professionnelles et enfin investissent dans des contrats à terme sur indices boursiers, des contrats à terme sur matières premières et des contrats à terme sur obligations du Trésor par l'intermédiaire de conseillers en trading (c'est-à-dire des CTA).

Mais en fait, à mesure que le marché mondial des contrats à terme continue de croître et de se développer, le concept de CTA est également en constante expansion et sa portée dépasse de loin les contrats à terme traditionnels. Il peut non seulement investir sur le marché à terme, mais également investir sur le marché des taux d'intérêt, le marché boursier, le marché des changes, le marché des options, etc. Tant que ce produit dispose d'une certaine quantité de données historiques, la stratégie CTA correspondante peut être développé sur la base de ces données historiques.

Avant les années 1980, la technologie du trading électronique n'était pas très mature. À cette époque, la plupart des traders évaluaient la tendance future des contrats à terme sur matières premières en dessinant manuellement des indicateurs techniques tels que les indicateurs Williams, KDJ, RSI, MACD, CCI, etc. Plus tard, certains traders ont mis en place des fonds CTA spéciaux pour aider les clients à gérer leurs actifs. Ce n’est qu’avec la popularisation du trading électronique dans les années 1980 que les fonds CTA au sens propre ont commencé à apparaître.

Modifications de l'échelle de gestion des fonds de la CTA
img
Unité : milliards de dollars américains

Si l’on regarde le graphique ci-dessus, notamment avec l’essor du trading quantitatif, la taille des fonds CTA mondiaux est passée de 130,6 milliards de dollars américains en 2005 à plus de 300 milliards de dollars américains en 2015. En outre, la stratégie CTA est également devenue l’une des stratégies d’investissement les plus courantes des hedge funds mondiaux.

Les performances des fonds CTA ont également augmenté parallèlement à leur taille. Examinons l’indice Barlake CTA dans la figure ci-dessous. L’indice Barlake CTA est une référence sectorielle représentative pour les conseillers en négoce de matières premières à l’échelle mondiale. De fin 1979 à fin 2016, le rendement cumulé de l'indice Barlake CTA Fund a atteint 28,95 fois, avec un rendement annualisé de 9,59 %, un ratio de Sharpe de 0,37 et un drawdown maximum de 15,66 %.

Parce que dans le portefeuille de répartition d’actifs, les stratégies CTA maintiennent généralement une corrélation extrêmement faible avec les autres stratégies. Comme le montre le cercle rouge dans la figure ci-dessous, pendant le marché boursier baissier mondial de 2000 à 2002 et la crise mondiale des prêts hypothécaires à risque en 2008, l'indice Barlake CTA Fund n'a pas seulement enregistré de baisse, mais a également enregistré des rendements positifs. Sur les marchés boursiers et obligataires, le CTA peut générer des bénéfices solides. De plus, nous pouvons également constater que le niveau de profit de l'indice Barclays Commodity CTA depuis 1980 a toujours été supérieur à celui du S&P 500, et son drawdown est également bien inférieur à celui du S&P 500.

img

Le développement de la CTA dans mon pays n'a eu lieu qu'au cours de la dernière décennie, mais la dynamique est très forte. Cela est principalement dû à l'environnement commercial relativement ouvert des contrats à terme sur matières premières nationales, au faible seuil de capital commercial et au système de marge qui permet aux contrats à terme longs et courts de deux -trading de manière transparente et frais de transaction faibles. , l'architecture technique de la bourse est plus avancée que celle des actions et il est plus facile de négocier dans le système, etc.

Depuis 2010, les fonds CTA existent principalement sous la forme de fonds de private equity. Les politiques nationales ouvrant progressivement le champ d'investissement des comptes spéciaux de fonds, les fonds CTA commencent à exister sous la forme de comptes spéciaux de fonds. Leurs méthodes de fonctionnement plus transparentes et ouvertes sont également devenues un outil nécessaire à l'allocation d'actifs pour un plus grand nombre d'investisseurs.

img

Comme le montre la figure ci-dessus, que ce soit en termes de difficulté de démarrage, de seuil de capital, de méthode d'exécution de la stratégie de trading et d'ancrage de l'API, la stratégie CTA est également plus adaptée aux traders individuels que les autres stratégies de trading. Les contrats à terme nationaux sont très petits. Par exemple, un lot de maïs ou de tourteau de soja peut être négocié pour quelques milliers de yuans, avec presque aucun seuil de capital. De plus, comme certaines stratégies CTA proviennent de l'analyse technique traditionnelle, il est relativement facile de les comparer. à d’autres stratégies. .

img

Le processus de conception de la stratégie CTA est également relativement simple. Tout d'abord, les données historiques sont traitées de manière préliminaire, puis intégrées dans le modèle quantitatif. Le modèle quantitatif comprend des stratégies de trading formées par la modélisation mathématique, la conception de programmes et d'autres outils, et génère des signaux de trading en calculant et analyser ces données. Bien sûr, dans le développement réel, ce n'est pas aussi simple que le montre l'image ci-dessus. Ceci vise simplement à donner à chacun une idée générale.

1.2 Types de stratégies CTA à terme

Du point de vue des stratégies de trading, les stratégies CTA sont également diversifiées : elles peuvent être des stratégies de tendance ou des stratégies d'arbitrage ; elles peuvent être des stratégies à moyen et long terme dans de grands cycles ou des stratégies à court terme dans une journée ; la logique de la stratégie peut être basée sur Analyse technique ou fondamentale. Analyse de surface ; il peut s'agir de trading subjectif ou de trading systématique.

Il existe différentes méthodes de classification des stratégies CTA. Selon la méthode de trading, elles peuvent être divisées en : trading subjectif et trading systématique. Le développement des stratégies CTA à l'étranger est relativement avancé et la stratégie CTA de trading systématique a atteint près de 100 %. Selon la méthode d'analyse, elle peut être divisée en : analyse fondamentale et analyse technique. Selon la source de revenus, il peut être divisé en : trading de tendance et swing trading.

En général, sur l'ensemble du marché commercial, les stratégies de tendance représentent environ 70 % des stratégies CTA, les stratégies de retour à la moyenne représentent environ 25 % et les stratégies de contre-tendance ou d'inversion de tendance représentent environ 5 %. Parmi elles, la stratégie de tendance, qui représente la plus grande proportion, peut être divisée en : trading à haute fréquence, trading intraday, trading à moyen-court terme et trading à moyen-long terme selon la période de détention.

Stratégie de market making à haute fréquence
Il existe actuellement deux principales stratégies de trading à haute fréquence sur le marché : l'une est la stratégie de création de marché à haute fréquence et l'autre est la stratégie d'arbitrage à haute fréquence. La stratégie de market making consiste à fournir de la liquidité sur le marché de négociation. C'est-à-dire que sur un marché de négociation avec des market makers, si quelqu'un veut acheter ou vendre, le market maker doit s'assurer que son ordre peut être exécuté. Si la liquidité du marché est insuffisante et que l'ordre ne peut être exécuté, le teneur de marché doit acheter et vendre les contreparties d'autres personnes.

Stratégies d'arbitrage à haute fréquence
L'arbitrage haute fréquence est la négociation de deux actions ou ETF hautement corrélés et de combinaisons d'ETF. Sur la base de la méthode de calcul de l’ETF, la même méthode peut être utilisée pour calculer le prix attendu d’un ETF. Le prix de l'indice ETF peut être soustrait du prix attendu de l'ETF pour obtenir une différence de prix. En général, cette différence de prix s'exerce dans un canal de prix. Si la différence de prix franchit les canaux supérieur et inférieur, vous pouvez négocier cette différence de prix et attendre pour que la différence de prix revienne pour en tirer profit.

Stratégies intraday
Si nous suivons le sens littéral, tant que les positions ne sont pas conservées pendant la nuit, cela peut être appelé une stratégie de day trading. Étant donné que la période de détention des transactions intrajournalières est relativement courte, généralement après l'entrée sur le marché, on ne peut pas réaliser de profit immédiatement et on sortira rapidement du marché. Par conséquent, cette méthode de négociation comporte un risque de marché plus faible. Cependant, comme le marché évolue rapidement sur une courte période, les stratégies intraday ont généralement des exigences plus élevées pour les traders.

Stratégies à moyen et long terme
En théorie, plus la période de détention est longue, plus la capacité de la stratégie est grande et plus le rapport risque/rendement est faible. En particulier dans les transactions institutionnelles, étant donné que la capacité des stratégies à court terme est limitée et que les grands fonds ne peuvent pas entrer et sortir du marché dans un court laps de temps, davantage de stratégies à moyen et long terme seront allouées. En général, la période de conservation est de plusieurs jours, mois, voire plus.

Données sur la stratégie CTA
En règle générale, les stratégies CTA utilisent des données de minutes, d'heures et quotidiennes comme objets de recherche, notamment le prix d'ouverture, le prix le plus élevé, le prix le plus bas, le prix de clôture, le volume des transactions, etc. Seul un petit nombre de stratégies CTA utilisent des données de ticks. Par exemple, dans- données de profondeur telles que le prix d'achat, le prix de vente, le volume d'achat, le volume de vente, etc. dans les données L2.

img

Lorsqu'il s'agit des idées de base des stratégies CTA, la première chose à laquelle nous pensons sont les indicateurs techniques traditionnels, car il existe davantage de documents de référence publics à cet égard, la logique est généralement plus simple et la plupart d'entre eux sont basés sur des principes statistiques. Par exemple, les différents indicateurs techniques que tout le monde connaît : MA, SMA, EMA, MACD, KDJ, RSI, BOLL, W&R, DMI, ATR, SAR, BIAS, OBV, etc.

Il existe également sur le marché quelques modèles de trading classiques qui peuvent être utilisés comme référence et améliorés, notamment : la combinaison de moyennes mobiles multiples, DualThrust, R-Breaker, Turtle Trading Method, Grid Trading Method, etc.

Toutes les stratégies de trading ci-dessus sont basées sur l'analyse technique traditionnelle. Le processus consiste à extraire des facteurs ou des conditions d'achat et de vente présentant des avantages probabilistes en se basant sur des données historiques et des concepts de trading corrects, et à supposer que le marché conservera ce modèle à l'avenir. Enfin, utilisez du code pour mettre en œuvre des stratégies de trading et automatiser entièrement votre trading. Ouvrir une position, prendre des bénéfices, arrêter des pertes, ajouter des positions, réduire des positions, etc., ne nécessitent généralement pas d'intervention humaine. En fait, il s’agit d’une stratégie consistant à acheter haut et à vendre bas en profitant du coefficient d’autocorrélation positif de la série temporelle des prix.

Le plus grand avantage de la stratégie CTA est qu'elle permet d'obtenir des rendements absolus, que le marché actuel soit en hausse ou en baisse, en particulier lorsque le marché évolue rapidement entre les marchés haussiers et baissiers, ou lorsque la tendance du marché est manifestement lisse. cette stratégie est très vaste. En bref, il y a une tendance. En termes de profit, il y en a. Cependant, si le marché est dans un état volatil ou si la tendance n'est pas évidente, cette stratégie peut conduire à acheter à des niveaux élevés et à vendre à des niveaux bas, en effectuant des allers-retours constants pour arrêter les pertes.

1.3 Principes de profit des stratégies CTA sur les contrats à terme

La raison pour laquelle les stratégies CTA à terme peuvent rapporter de l'argent est principalement due aux raisons suivantes :

  1. Les mouvements de prix sont réflexifs et se poursuivent toujours sous la forme d’une tendance. Lorsque les investisseurs constatent une hausse des prix, ils achètent, ce qui entraîne une nouvelle hausse des prix. Il en va de même pour la baisse des prix. Étant donné que les investisseurs se comportent de manière plus irrationnelle, nous constatons parfois que les prix montent à un niveau anormal lorsqu’ils montent et chutent à un niveau anormal lorsqu’ils baissent.
  2. Chaque investisseur a une tolérance asymétrique au ratio profits/pertes et une tolérance au risque différente. Pour la plupart des investisseurs particuliers, ils préfèrent choisir une méthode de trading de suivi de tendance plus conservatrice, et le marché est plus susceptible d'évoluer selon une tendance.
  3. La formation des prix est déterminée par les transactions, et les transactions sont menées par les gens. Cependant, la nature humaine est difficile à changer, c'est pourquoi des modèles fixes apparaissent à plusieurs reprises. La stratégie est efficace lorsqu'elle est testée rétrospectivement sur des données historiques. Cela indique qu'elle peut être efficace à l'avenir.

Une autre caractéristique du trading de suivi de tendance est que vous perdez une petite somme d'argent lorsqu'il n'y a pas de marché et que vous gagnez beaucoup d'argent lorsque le marché arrive. Cependant, tous ceux qui ont fait du trading savent que le marché est dans un état volatil la plupart du temps. du temps, et ce n'est que dans un court laps de temps que cela devient une tendance. Citations. Par conséquent, la stratégie de suivi de tendance a un taux de gain plus faible lors du trading, mais dans l'ensemble, le profit et la perte de chaque transaction sont relativement importants.

Étant donné que les stratégies de suivi de tendance ont des rendements instables, de nombreuses institutions d’investissement construiront un portefeuille d’investissement en utilisant plusieurs variétés et plusieurs stratégies, qui comprendront également un certain nombre de stratégies d’inversion. La stratégie d'inversion est que la série temporelle des prix a un coefficient d'autocorrélation négatif, ce qui signifie vendre haut et acheter bas.

Corrélation entre les CTA et les actifs traditionnels
img

Si l'on regarde le graphique ci-dessus, en théorie, face à différents changements de prix du marché en même temps, plusieurs stratégies avec des styles différents ou de faibles corrélations produiront des signaux de trading parfois identiques et parfois différents. Lorsque plusieurs courbes de rendement se chevauchent, les rendements globaux se complètent et la courbe de rendement devient plus plate, réduisant ainsi la volatilité des rendements.

De ce point de vue, on peut conclure qu'au lieu de développer une stratégie de niveau maître, il est préférable de développer plusieurs sous-stratégies médiocres. Alors, comment contrôler ces stratégies ? Ici, nous pouvons faire référence à l'algorithme de forêt aléatoire dans l'apprentissage automatique. La forêt aléatoire n'est pas un algorithme indépendant, c'est un cadre de prise de décision qui comprend plusieurs arbres de décision. Elle équivaut à la stratégie parente au-dessus de la sous-stratégie de l’arbre de décision. Organisez et contrôlez des groupes de politiques enfants via des politiques parentes.

Ensuite, nous devons concevoir une stratégie principale. Nous pouvons évaluer la liquidité, la rentabilité et la stabilité de diverses matières premières sur l'ensemble du marché à terme des matières premières, éliminer les portefeuilles de contrats à terme sur matières premières à faible volatilité, puis procéder à une neutralité sectorielle. Grâce à la sélection diversifiée des Enfin, le portefeuille multi-variétés de contrats à terme sur matières premières est construit par correspondance de la valeur de marché pour la négociation.

Chaque produit peut également être configuré avec des stratégies à paramètres multiples. Vous pouvez choisir une combinaison de paramètres qui présente de bonnes performances de backtest. Lorsque la tendance du marché est évidente, les stratégies à paramètres multiples fonctionnent généralement de manière cohérente, ce qui équivaut à ajouter des positions. Lorsque le marché est dans une Dans un marché volatil, des stratégies à paramètres multiples peuvent être utilisées pour augmenter les performances. Les stratégies se comportent souvent de manière incohérente, de sorte que chacune d'entre elles prend une position longue ou courte pour couvrir les risques, ce qui équivaut à réduire les positions. Cela peut réduire davantage le taux de rendement maximal du portefeuille tout en maintenant le taux de rendement global inchangé.

2. Étude de cas de la stratégie CTA sur les contrats à terme classiques

Newton a dit un jour : Si je peux voir plus loin que les autres, c'est parce que je suis debout sur les épaules de géants.

Les stratégies CTA disponibles publiquement sur le marché incluent la stratégie de moyenne mobile, la stratégie de bande de Bollinger, la méthode de trading de tortue, la stratégie de momentum, la stratégie d'arbitrage, etc. Les stratégies de trading quantitatives ont toutes une caractéristique : elles disparaissent au grand jour. Une fois la stratégie rendue publique, elle devient progressivement inefficace. Mais cela n’empêche pas notre apprentissage de ces stratégies et notre capacité à en tirer parti, de sorte que nous pouvons envisager les problèmes du point de vue d’un géant.

2.1 Analyse des fondamentaux des contrats à terme (inventaire, base, prix)

L'analyse fondamentale ne se préoccupe pas des tendances de prix à court terme. Elle part du principe que la valeur se reflétera éventuellement dans le prix. Il s'agit plutôt d'analyser les facteurs à l'origine du prix et de juger de la valeur de cette variété. En général, une méthode d'analyse descendante est adoptée : à partir de facteurs macroéconomiques, de facteurs de variété et d'autres facteurs.

img

Si l'on considère le tableau ci-dessus, on constate que de nombreux facteurs influent sur les prix des matières premières, soit des dizaines d'éléments au total. Si l'on analyse plus en détail, on constate qu'il y en a des dizaines d'autres, et ces données changent constamment. Il est impossible pour les investisseurs particuliers d’obtenir de telles quantités de données, et encore moins de procéder à une analyse objective.

En fait, l'analyse fondamentale des contrats à terme sur matières premières ne consiste pas à analyser tous les facteurs. Il suffit de saisir les éléments clés de l'analyse fondamentale pour trouver des modèles à partir d'informations complexes.

Facteurs macroéconomiques
Les données macroéconomiques sont complexes et changeantes. Chaque jour et à tout moment, de nombreuses données économiques sont publiées par les responsables politiques, les banques centrales et les banques d'investissement de divers pays, qu'elles soient officielles ou non. Outre les crises politiques et économiques, l’analyse macroéconomique est un bon sujet de conversation mais pas très pratique. Peter Lynch, célèbre expert américain en gestion de fonds, a exprimé un jour son opinion : « Je ne passe pas plus de quinze minutes par an à analyser les tendances économiques. »

Facteurs de diversité
Dans l'analyse fondamentale, l'analyse des produits analyse principalement les primes et les remises, les relations entre l'offre et la demande, les stocks de matières premières, les bénéfices de l'industrie, etc. On peut dire que la maîtrise de l'analyse des facteurs de produits à terme sur matières premières peut essentiellement déterminer la plupart des tendances du marché.

Les amis qui ont fait du trading à terme savent que les contrats à terme sur matières premières nationales peuvent être simplement divisés en : produits industriels et produits agricoles. Les méthodes d'analyse des produits industriels et des produits agricoles sont différentes. Nous allons expliquer les deux aspects de l'offre et de la demande. Pour les produits industriels, l'offre est relativement stable. Sauf rupture technologique majeure, il est peu probable que la capacité de production augmente. augmentation à court terme. Les changements sont importants au fil du temps, de sorte que le facteur qui affecte les prix des produits industriels est principalement la demande. La demande de produits agricoles est relativement stable. À long terme, la demande de produits agricoles évolue, mais à court terme, elle tend à être stable. Par conséquent, le facteur qui affecte le prix des produits agricoles est principalement l'approvisionnement.

Ainsi, selon les lois de l'économie, c'est la relation entre l'offre et la demande qui détermine en fin de compte le prix d'un bien. En théorie, tant que nous pouvons obtenir des données sur l'offre et la demande, nous pouvons évaluer le prix futur du bien. Pour les produits industriels, les données sur l'offre sont relativement faciles à obtenir, mais celles sur la demande sont difficiles à obtenir. Pour les produits agricoles, les données sur la demande sont relativement faciles à obtenir, mais celles sur l'offre sont difficiles à obtenir.

En fait, nous pouvons aller plus loin et faire des soustractions. Le résultat mutuel de l'offre et de la demande sur le marché économique est l'inventaire. Nous pouvons utiliser les données d'inventaire pour évaluer la force de la relation entre l'offre et la demande du marché. Si le stock d’un certain produit est très élevé, cela signifie que le pouvoir de l’offre du marché est supérieur à la demande, et le prix du produit baissera si les conditions extérieures restent inchangées. Si le stock d’un certain produit est très bas, cela signifie que la force de la demande du marché est supérieure à l’offre, et le prix du produit augmentera bientôt si les conditions extérieures restent inchangées.

Outre l'analyse des stocks de matières premières, il est également nécessaire d'analyser la différence de prix entre le marché au comptant et le marché à terme, ce qu'on appelle la base. Si le prix à terme est supérieur au prix au comptant, on parle de prime ; si le prix à terme est inférieur au prix au comptant, on parle de décote. Selon le système de livraison à terme, à la date de livraison à terme, le prix à terme doit être égal au prix au comptant.

img

Qu'il s'agisse d'une prime ou d'une décote, en raison des contraintes du système de livraison à terme, le prix à terme à la date de livraison devrait en théorie être égal au prix au comptant. À mesure que la date de livraison approche, le prix au comptant et le prix à terme auront tendance à être cohérents, l'un étant le retour des contrats à terme au comptant, l'autre étant le retour au comptant des contrats à terme.

Sur la base des principes ci-dessus, nous pouvons utiliser l’inventaire et la base pour déterminer simultanément les prix à terme futurs. Si le stock d’un produit est faible et si le prix à terme est bien inférieur au prix au comptant, nous pouvons alors conclure que la demande sur le marché au comptant est supérieure à l’offre et que la probabilité d’augmentation future du prix au comptant est élevée. À mesure que la date de livraison approche, les prix à terme augmenteront pour correspondre au prix au comptant, et la probabilité d’une augmentation des prix à terme à l’avenir est plus grande.

Enfin, nous avons déterminé la direction la plus probable des prix futurs grâce aux stocks et à la base, mais il n'y a pas de points d'achat et de vente plus précis, une analyse technique est donc nécessaire pour donner des signaux d'entrée et de sortie clairs. L'ensemble du cadre de l'analyse fondamentale est le suivant : faible inventaire + forte remise + analyse technique signal haussier = long ; inventaire élevé + prime importante + analyse technique signal baissier = short.

2.2 Règles de trading des tortues

Lorsqu'il s'agit de stratégies de trading, nous devons parler des règles de trading représentatives des tortues. Les règles de trading de la tortue proviennent de l'une des expériences les plus célèbres de l'histoire du trading, lorsque le spéculateur sur les matières premières Richard Dennis a voulu découvrir si les grands traders naissent ou sont faits. À cette fin, il a recruté en 1983 13 personnes et leur a enseigné les concepts de base du trading à terme, ainsi que ses propres méthodes et principes de trading. Ces étudiants sont appelés « tortues de mer ».

Au cours des quatre années suivantes, les Tortues ont réalisé un rendement annuel composé moyen de 80 %. Dennis a également démontré qu’en utilisant un système et des règles simples, les personnes ayant peu ou pas d’expérience de trading peuvent devenir d’excellents traders. Cependant, certaines Tortues vendent les règles de trading des Tortues sur le site Web pour faire des bénéfices. Pour mettre fin à ce comportement, deux Tortues originales, Curtis Faith et Arthur Maddock, ont décidé de rendre les règles de trading des Tortues accessibles au public gratuitement sur un site Web.

Une fois la vérité révélée, les gens ont découvert que les règles de trading de la tortue adoptaient un canal Donchian optimisé et utilisaient l'indicateur ATR pour la gestion des positions. Après des décennies de tests historiques, il est devenu une méthode de trading que les investisseurs particuliers ordinaires peuvent utiliser pour gagner de l'argent facilement, et il est toujours efficace pour certains produits.

Principes fondamentaux de la tortue

  • Obtenez l’avantage : trouvez une stratégie de trading qui a une valeur attendue positive, car elle générera des rendements positifs à long terme.
  • Gérez les risques : contrôlez les risques et maintenez votre position, sinon vous risquez de ne pas voir le jour où vous obtiendrez des résultats.
  • Un engagement sans faille : ce n’est qu’en mettant en œuvre votre stratégie de manière résolue que vous pourrez véritablement obtenir des résultats systématiques.
  • Simplicité et clarté : à long terme, les systèmes simples sont plus viables que les systèmes complexes.

Alors, regardons maintenant ce que disent réellement les règles de trading des tortues.

  1. Les marchés : quoi acheter et quoi vendre, essentiellement, sur quels marchés négocier. Les Tortues étaient des négociants à terme, et elles ne choisissaient que les marchés avec de gros volumes de négociation et une forte liquidité, car choisir des marchés avec de faibles volumes de négociation augmenterait le risque de perdre argent. Le glissement supplémentaire lors de la sortie du marché vous fera également manquer de nombreuses opportunités de tendance.
  2. Taille de la position - Le montant à acheter ou à vendre est une partie très importante de l'ensemble de la stratégie, mais la plupart des gens l'ignorent généralement ou le traitent de manière incorrecte. Les règles de trading de la tortue utilisent l'ATR, ou l'indicateur Average True Range, pour calculer les positions d'ouverture, ajouter des signaux et des signaux de stop-loss. Il s'agit d'une conception très astucieuse, qui vise à ajuster la taille de la position en fonction de la volatilité absolue du marché. Lorsque la volatilité du marché est forte, la taille de la position est réduite, et lorsque la volatilité du marché est faible, la taille de la position est augmentée . Elle définit d'abord une unité, la formule de cette unité est : (total des actifs*1%)/ATR. La position initiale est de 1 unité. Même si la baisse du produit ce jour-là atteint le niveau ATR, la perte ce jour-là peut être contrôlée dans les 1 % du total des actifs. Si le prix augmente de 0,5 unité, la position longue sera augmentée de 1 unité, jusqu'à un maximum de 4 unités.
  3. Entrée sur le marché - L'entrée de la Tortue sur le marché s'appuie sur le canal Donchian. Lorsque le prix dépasse le prix le plus élevé des 20 ou 55 lignes K précédentes, elle entre sur le marché pour faire des positions longues. Lorsque le prix tombe en dessous du prix le plus bas des 20 ou 55 lignes K précédentes, il entre sur le marché pour faire des longs. , il suffit d'entrer sur le marché et de vendre à découvert. Entrez dans la transaction lorsque le signal apparaît, sans attendre la clôture ou la prochaine ligne K.
  4. Stop loss – À long terme, les transactions sans stop loss ne réussiront pas, mais la plupart des traders conservent des positions perdantes dans l'espoir que le marché se retourne. Les Tortues avaient des règles strictes sur le moment de sortie d'une position perdante. Si une position longue était détenue et que le prix baissait de 2 unités, la position longue était clôturée avec un stop loss. Si vous détenez une position courte et que le prix augmente de 2 unités, la position courte sera fermée avec un stop loss.
  5. Take profit - Le take profit de la Tortue signifie perdre beaucoup de bénéfices flottants, ce qui est également la partie que de nombreux traders trouvent difficile à accepter. Si vous détenez actuellement une position longue et que le prix tombe en dessous de la piste inférieure du canal Donchian à 10 jours, fermez toutes les positions longues ; si vous détenez actuellement une position courte et que le prix monte au-dessus de la piste supérieure du canal Donchian à 10 jours Canal Donchian, fermeture de toutes les positions courtes.

Nous pouvons voir que même si les règles de trading de la tortue semblent simples, elles constituent en fait le prototype d'un véritable système de trading. Elles couvrent tous les aspects d'un système de trading complet et ne laissent aucune place aux traders. Il y a de la place pour l'imagination subjective et la prise de décision, qui permet de faire ressortir les avantages du fonctionnement programmé du système. Y compris : les règles d’entrée et de sortie, la gestion des fonds et le contrôle des risques, etc.

Le plus grand avantage de la méthode de trading de la tortue est qu'elle nous aide à établir une méthode de trading efficace. Il s'agit d'une stratégie qui combine l'ouverture de lots, le stop-profit et le stop-loss dynamiques et le suivi des tendances du marché, en particulier l'utilisation de la valeur et de la position de l'ATR gestion. Le concept mérite d'être appris. Bien sûr, il y a aussi un problème commun avec les stratégies de suivi de tendance, qui est la prise de bénéfices non réalisés. Les bénéfices flottants obtenus en poursuivant la hausse pourraient très probablement être perdus en raison de la forte baisse qui s'ensuit. Il est très fort dans la grande tendance, mais fonctionne mal dans un marché volatil.

3. Développement pratique des stratégies futures du CTA

3.1 Développement d'une stratégie de tendance CTA basée sur la langue Mai

À la fin du siècle dernier, une méthode de trading magique a commencé à devenir populaire dans le domaine de l'investissement financier aux États-Unis. Après que des milliers de personnes l'ont pratiquée, les gens ont découvert que cette méthode était efficace et avait une grande valeur pratique. , il a été reconnu par de nombreux experts en investissement. Il est reconnu par les traders professionnels et peut toujours être parfaitement appliqué à presque tous les domaines d'investissement financier, qu'il s'agisse de devises, d'or, d'actions, de contrats à terme, de pétrole brut ou d'indices et d'obligations. la méthode d'opération du chaos.

Le mot chaos fait à l'origine référence à la description de l'état chaotique de l'univers. L'idée est que le résultat est inévitable, mais qu'il ne peut pas être calculé en raison des connaissances existantes, car le calcul lui-même modifie également le résultat, ainsi que le maximum ou le minimum le résultat peut apparaître à la fin, mais il n'y a pas d'inévitabilité. Cela est très similaire au trading sur le marché, où les participants modifient le marché à mesure qu'ils l'analysent et achètent et vendent des transactions. Le marché est en constante évolution. Lorsque les participants découvrent une nouvelle forme de marché, le marché apprend également qu'elle est reconnue par les participants, et la mutation se produit alors. Et il aura certainement tendance à muter dans une direction inconnue des participants. Il a suffisamment de sagesse pour empêcher les participants de saisir ses modèles changeants. En d'autres termes, le marché n'est pas stable et la compréhension du passé du marché ne peut pas représenter l'avenir.

La méthode opérationnelle du chaos est un ensemble complet d'idées d'investissement, de stratégies de trading et de signaux d'entrée et de sortie inventés par Bill Williams. Actuellement, de nombreux investisseurs internationaux utilisent des méthodes d'opérations chaotiques pour participer aux transactions sur le marché. En raison du retard de développement du marché financier de mon pays et du fait que la théorie du chaos est une idée relativement nouvelle, peu de personnes en Chine étudient les méthodes d'opérations chaotiques. Étant donné que la méthode d'opération du chaos est une stratégie de trading hautement universelle qui peut être appliquée à presque tous les domaines d'investissement financier, y compris les actions, les obligations, les contrats à terme, les devises et les monnaies numériques, ce cours utilise une version simplifiée de la stratégie du chaos comme point de départ. Améliorer l’intérêt et le rendement des investissements de chacun.

Comme son nom l'indique, la base théorique de la méthode d'opération du chaos est la théorie du chaos, proposée par le météorologue Edward Lorenz et l'une des plus grandes découvertes scientifiques de la fin du 20e siècle. C'est lui qui a proposé le fameux « effet papillon ». Bill Williams a appliqué de manière créative la théorie du chaos au domaine de l’investissement financier et l’a combinée à la géométrie fractale, à la dynamique non linéaire et à d’autres disciplines pour créer une série d’indicateurs d’analyse technique très efficaces.

L'ensemble de la méthode d'opération du chaos est composé de cinq dimensions (indicateurs techniques) :

  • Alligator

  • La fractale

  • L'élan

  • Accélération

  • La ligne d'équilibre

    img

Regardons l'image ci-dessus. La ligne Alligator est un ensemble de lignes d'équilibre qui utilisent la géométrie fractale et la dynamique non linéaire. Son essence est la moyenne mobile pondérée exponentielle étendue, qui est un type de moyenne mobile, mais la méthode de calcul est légèrement plus compliquée que la moyenne mobile ordinaire. Certains. Voyons ensuite comment définir la ligne Alligator dans le langage Mai :

// 参数 N1:=11; N2:=21; // 定义价格中线 N3:=N1+N2; N4:=N2+N3; HL:=(H+L)/2; // 鳄鱼线 Y^^SMA(REF(HL,N3),N4,1); R:=SMA(REF(HL,N2),N3,1); G:=SMA(REF(HL,N1),N2,1);

Tout d'abord, nous définissons deux paramètres externes N1 et N2, puis nous calculons la moyenne HL du prix le plus élevé et du prix le plus bas en fonction des paramètres externes. Ensuite, nous calculons la moyenne HL avec différents paramètres respectivement. Pour le baiser sur les lèvres, c'est la petit cycle de la ligne médiane. Pour faire à nouveau la moyenne, les dents sont la moyenne de la période moyenne de la ligne médiane, et la mâchoire est la moyenne de la grande période de la ligne médiane. Dans cette stratégie, nous utilisons les mâchoires.

Le concept de fractale est défini de manière très vivante dans la méthode d'opération du chaos. Nous pouvons utiliser une analogie : ouvrez votre paume avec vos doigts tournés vers le haut. Le majeur est la fractale supérieure, l'auriculaire et l'annulaire sont à gauche et l'index le doigt et le pouce à droite représentent la zone non blessée. Ligne K du nouveau sommet. Une fractale de base est composée de ces 5 lignes K. Vous pouvez ensuite définir une fractale en utilisant le code suivant :

// 分形 TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2; BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2; TOP:=REF(H,TOP_N); BOTTOM:=REF(L,BOTTOM_N); MAX_YRG^^MAX(MAX(Y,R),G); MIN_YRG^^MIN(MIN(Y,R),G); TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP); BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

Après avoir calculé la ligne Alligator et la fractale, nous pouvons écrire une stratégie d'opération de chaos simple basée sur ces deux conditions, en utilisant un ensemble de moyennes mobiles pondérées de manière exponentielle comme prix de référence pour le calcul de la ligne Alligator et des indicateurs fractals. Bien sûr, la stratégie d’opération du chaos d’origine est plus compliquée. Le code est le suivant :

// 如果当前无多单,并且收盘价升破上分形,并且上分形在鳄鱼线上方时,多头开仓 BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1); // 如果当前无空单,并且收盘价跌破下分形,并且下分形在鳄鱼线下方时,空头开仓 SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1); // 如果收盘价跌破鳄鱼的下巴时,多头平仓 C<Y,SP(BKVOL); // 如果收盘价升破鳄鱼的下巴时,空头平仓 C>Y,BP(SKVOL);

Pour faciliter la compréhension, j'ai inclus des commentaires détaillés dans le code. Nous pouvons simplement énumérer la logique de trading de cette stratégie comme suit :

  • Ouvrir une position longue : s'il n'y a pas d'ordre long actuellement et que le cours de clôture franchit la fractale supérieure et que la fractale supérieure est au-dessus de la ligne Alligator.
  • Ouvrir une position courte : s'il n'y a pas d'ordre court actuellement et que le prix de clôture tombe en dessous du fractal inférieur et que le fractal inférieur est en dessous de la ligne Alligator.
  • Sortie de position longue : Si le cours de clôture tombe en dessous de la mâchoire de l'Alligator.
  • Sortie de position courte : Si le cours de clôture dépasse la mâchoire de l'alligator.

Ensuite, examinons les résultats du backtest de cette stratégie simple d’opération du chaos. Afin de rendre le backtest plus proche de l'environnement de trading réel, les frais de transaction sont fixés au double de ceux de la bourse, et le glissement de 2 sauts est ajouté pour l'ouverture et la fermeture des positions. Le type de données pour le backtesting est l'indice des barres d'armature, le type de trading est le rebar main continuous et la position d'ouverture est fixée à 1 lot. Vous trouverez ci-dessous un rapport préliminaire de performance du backtest au niveau d'une heure.

img
img
img

À en juger par la courbe de capital et les données de performance des backtests, la stratégie fonctionne bien et la courbe de capital globale est régulièrement à la hausse. Toutefois, les caractéristiques du marché des barres d’armature ont changé depuis fin 2016, passant d’une tendance unilatérale à forte volatilité à une large gamme de fluctuations. À en juger par la courbe des capitaux, les bénéfices sont manifestement faibles depuis 2017.

En bref, l'essence de la méthode d'opération du chaos est de trouver le point de retournement. Vous n'avez pas à vous soucier de l'évolution du marché, ni de savoir s'il s'agit d'une véritable ou d'une fausse percée. Si vous franchissez la fractale, vous pouvez entrer le marché directement. N'essayez jamais de prédire le marché, mais soyez un observateur et un suiveur.

3.2 Développement d'une stratégie d'arbitrage CTA basée sur le langage JavaScript

Dans son livre « L’Alchimie de la Finance » écrit en 1987, Soros a avancé une proposition importante : « Je crois que les prix du marché sont toujours erronés dans le sens où ils sont biaisés en fonction de l’avenir. » Il estime que l'hypothèse d'efficience du marché n'est qu'une hypothèse théorique. En fait, les acteurs du marché ne sont pas toujours rationnels et, à tout moment, il leur est impossible d'obtenir pleinement et d'interpréter objectivement toutes les informations. De plus, même si les mêmes Informations, les retours de chacun sont différents. En d’autres termes, le prix lui-même inclut déjà les attentes erronées des acteurs du marché, de sorte que les prix du marché sont toujours erronés par essence. Cela pourrait être une source de profit pour les arbitragistes.

Sur la base des principes ci-dessus, nous savons que dans un marché à terme inefficace, les impacts du marché sur les contrats de livraison à différentes périodes ne sont pas toujours synchronisés et leur tarification n'est pas totalement efficace. Ensuite, en fonction des prix des contrats de livraison du même objet de négociation sur différentes périodes, s'il existe une grande différence de prix entre les deux prix, vous pouvez acheter et vendre des contrats à terme de différentes périodes en même temps pour effectuer un arbitrage inter-périodes.

Tout comme les contrats à terme sur matières premières, les monnaies numériques sont également associées à une combinaison de contrats d’arbitrage inter-périodes. Par exemple, dans la bourse OkEX, il existe : ETC Weekly, ETC Biweekly et ETC Quarterly. Par exemple, supposons que la différence de prix entre l’ETC hebdomadaire et l’ETC trimestriel reste autour de 5 pendant une longue période. Si le spread atteint 7 un jour donné, nous nous attendons à ce qu’il revienne à 5 à un moment donné dans le futur. Vous pouvez ensuite vendre des ETC chaque semaine et acheter des ETC chaque trimestre pour réduire le spread. vice versa.

Bien que cette différence de prix existe, l’arbitrage manuel implique souvent de nombreuses incertitudes en raison de l’opération manuelle fastidieuse, de la faible précision et de l’impact des variations de prix. Le charme de l'arbitrage quantitatif réside dans la capture d'opportunités d'arbitrage grâce à des modèles quantitatifs et à la formulation de stratégies de trading d'arbitrage, ainsi que dans la passation automatique d'ordres de trading sur les bourses via des algorithmes programmés, afin de saisir rapidement et avec précision les opportunités et de réaliser des bénéfices de manière efficace et stable.

Ce cours vous apprendra à utiliser la plateforme de trading quantitative Inventor et le contrat à terme ETC sur la bourse OkEX dans le trading de devises numériques, et à utiliser une stratégie d'arbitrage simple pour démontrer comment saisir des opportunités d'arbitrage instantanées et saisir chaque opportunité pour voir Obtenez des bénéfices tout en couverture des risques éventuels.

Créer une stratégie d'arbitrage inter-périodes pour les crypto-monnaies
Difficulté : Normale
Environnement stratégique

  • Objet de la transaction : Ethereum Classic (ETC)
  • Données sur les différences de prix : ETC hebdomadaire - ETC trimestriel (test de cointégration omis)
  • Cycle de négociation : 5 minutes
  • Correspondance de position : 1:1
  • Type de transaction : Même produit sur plusieurs périodes

Logique de stratégie

  • Conditions d'ouverture du spread long : Si le compte courant n'a pas de positions et que le spread est inférieur à la piste inférieure de la boîte, positionnez-vous longtemps sur le spread. C'est-à-dire : acheter des ETC pour la semaine et vendre des ETC pour le trimestre.
  • Conditions d'ouverture d'une position short spread : Si le compte courant n'a pas de positions et que le spread est supérieur à la piste supérieure de la Boll, shortez le spread. C'est-à-dire : vendre des ETC pour la semaine et acheter des ETC pour le trimestre.
  • Conditions de clôture d'un spread long : Si le compte courant détient une position longue hebdomadaire en ETC et une position courte trimestrielle en ETC, et que le spread est supérieur à la piste médiane de boll, le spread long sera fermé. C'est-à-dire : vendre des ETC pour la semaine et acheter des ETC pour le trimestre.
  • Conditions de clôture d'un spread court : Si le compte courant détient une position courte pour ETC cette semaine et une position longue pour ETC au cours du trimestre, et que le spread est inférieur à la piste médiane de boll, le spread court sera fermé. C'est-à-dire : acheter des ETC pour la semaine et vendre des ETC pour le trimestre.

Ce qui précède est une description simple de la logique de la stratégie d'arbitrage inter-périodes de la monnaie numérique. Alors, comment mettre en œuvre vos idées dans le programme ? Nous avons d’abord essayé de construire le cadre sur la plateforme de trading quantitatif Inventor.

function Data() {} // 基础数据函数 Data.prototype.mp = function () {} // 持仓函数 Data.prototype.boll = function () {} // 指标函数 Data.prototype.trade = function () {} // 下单函数 Data.prototype.cancelOrders = function () {} // 撤单函数 Data.prototype.isEven = function () {} // 处理单只合约函数 Data.prototype.drawingChart = function () {} // 画图函数 function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 计算boll技术指标 data.trade(); // 计算交易条件下单 data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约 } //入口函数 function main() { while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

Imaginez à quoi ressemble notre processus de transaction dans le trading de superviseur ? Il n'y a pas de différence essentielle dans le trading système, ce n'est rien de plus que : obtenir des données, calculer des données, passer des commandes et traiter après avoir passé des commandes. Il en va de même dans le programme. Tout d'abord, le programme exécutera la fonction principale sur la ligne 20. Il s'agit d'une convention. Lorsque le programme termine le prétraitement de la stratégie de trading (le cas échéant), il entrera dans un mode de boucle infinie, c'est-à-dire un mode d'interrogation circulaire. En mode d'interrogation, la fonction onTick sera exécutée de manière répétée.

Ensuite, dans la fonction onTick, nous avons le processus de trading dans le trading subjectif : d'abord obtenir les données de prix de base, puis obtenir le solde du compte, puis calculer l'indicateur, puis commencer à calculer les conditions de trading et passer une commande, et enfin le traitement après avoir passé une commande. la commande, y compris : annuler des commandes, dessiner des images et traiter des contrats individuels.

En comparant les idées stratégiques et les processus de trading, vous pouvez facilement créer un cadre stratégique. L’ensemble de la stratégie peut être simplifié en trois étapes :

  • Traitement pré-transactionnel.
  • Obtenir et calculer des données.
  • Passez une commande et gérez le suivi.

Une fois le cadre de stratégie de trading construit, vous devez remplir le code de détail nécessaire dans le cadre de stratégie en fonction du processus de trading réel et des détails de la transaction.

1. Traitement pré-transactionnel

1. Déclarer les variables globales nécessaires

  • Déclarer un objet graphique pour configurer le graphique
    var chart = {}
  • Appelez la fonction Chart pour initialiser le graphique
    var ObjChart = Chart ( chart )
  • Déclarez un tableau vide pour stocker la séquence de différence de prix
    var bars = []
  • Déclarer une variable pour enregistrer l'horodatage des données historiques
    var oldTime = 0

2. Configurer les paramètres externes de la stratégie

var tradeTypeA = "this_week"; // 套利A合约 var tradeTypeB = "quarter"; // 套利B合约 var dataLength = 10; //指标周期长度 var timeCycle = 1; // K线周期 var name = "ETC"; // 币种 var unit = 1; // 下单量

3. Définir les fonctions de traitement des données

  • Fonction de données de base : Données ( )
    Créez un constructeur Data et définissez ses propriétés internes. Comprend : les données de compte, les données de position, l'horodatage des données de la ligne K, le prix acheteur/vendeur du contrat d'arbitrage A/B et les spreads d'arbitrage à terme/inverse.
function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约 this.accountData = _C(exchange.GetAccount); // 获取账户信息 this.positionData = _C(exchange.GetPosition); // 获取持仓信息 var recordsData = _C(exchange.GetRecords); //获取K线数据 exchange.SetContractType(tradeTypeA); // 订阅套利A合约 var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据 exchange.SetContractType(tradeTypeB); // 订阅套利B合约 var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据 this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间 this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价 this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价 this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价 this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价 // 正套价差(合约A卖一价 - 合约B买一价) this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price; // 反套价差(合约A买一价 - 合约B卖一价) this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price; }
  • Obtenir la fonction de position : mp ( )
    Parcourez l'ensemble du tableau de positions et renvoyez le nombre de positions du contrat et de la direction spécifiés. S'il n'y en a pas, renvoyez false
Data.prototype.mp = function (tradeType, type) { var positionData = this.positionData; // 获取持仓信息 for (var i = 0; i < positionData.length; i++) { if (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { return positionData[i].Amount; } } } } return false; }
  • Fonctions K-line et indicatrice : boll ( )
    Synthétiser une nouvelle séquence K-line basée sur les données de spread d'arbitrage forward/reverse. Et renvoie les données du rail supérieur, du rail médian et du rail inférieur calculées par l'indicateur de capsule.
Data.prototype.boll = function (num, timeCycle) { var self = {}; // 临时对象 // 正套价差和反套价差中间值 self.Close = (this.basb + this.sabb) / 2; if (this.timeA == this.timeB) { self.Time = this.time; } // 对比两个深度数据时间戳 if (this.time - oldTime > timeCycle * 60000) { bars.push(self); oldTime = this.time; } // 根据指定时间周期,在K线数组里面传入价差数据对象 if (bars.length > num * 2) { bars.shift(); // 控制K线数组长度 } else { return; } var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标 return { up: boll[0][boll[0].length - 1], // boll指标上轨 middle: boll[1][boll[1].length - 1], // boll指标中轨 down: boll[2][boll[2].length - 1] // boll指标下轨 } // 返回一个处理好的boll指标数据 }
  • Fonction de commande : trade ( )
    Transmettez le nom du contrat de commande et le type de commande, puis passez une commande au prix de contrepartie et renvoyez le résultat après avoir passé la commande. Comme il est nécessaire de passer deux ordres dans des directions différentes en même temps, le prix d'achat/vente est converti dans la fonction en fonction du nom du contrat d'ordre.
Data.prototype.trade = function (tradeType, type) { exchange.SetContractType(tradeType); // 下单前先重新订阅合约 var askPrice, bidPrice; if (tradeType == tradeTypeA) { // 如果是A合约下单 askPrice = this.askA; // 设置askPrice bidPrice = this.bidA; // 设置bidPrice } else if (tradeType == tradeTypeB) { // 如果是B合约下单 askPrice = this.askB; // 设置askPrice bidPrice = this.bidB; // 设置bidPrice } switch (type) { // 匹配下单模式 case "buy": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); case "sell": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closebuy": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closesell": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); default: return false; } }
  • Fonction d'annulation de commande : cancelOrders()
    Obtenez un tableau de toutes les commandes non exécutées et annulez-les une par une. Et s'il y a une commande non exécutée, elle renvoie faux, et s'il n'y a pas de commande non exécutée, elle renvoie vrai.
Data.prototype.cancelOrders = function () { Sleep(500); // 撤单前先延时,因为有些交易所你懂的 var orders = _C(exchange.GetOrders); // 获取未成交订单数组 if (orders.length > 0) { // 如果有未成交的订单 for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组 exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单 Sleep(500); //延时0.5秒 } return false; // 如果取消了未成交的单子就返回false } return true; //如果没有未成交的订单就返回true }
  • Gestion d'un seul contrat : isEven()
    Lorsqu'il s'agit d'une situation à jambe unique dans le cadre d'un arbitrage, nous fermons simplement toutes les positions pour la gérer. Bien entendu, vous pouvez également passer à un mode de commande complémentaire.
Data.prototype.isEven = function () { var positionData = this.positionData; // 获取持仓信息 var type = null; // 转换持仓方向 // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2 if (positionData.length % 2 != 0 || positionData.length != 2) { for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组 if (positionData[i].Type == 0) { // 如果是多单 type = 10; // 设置下单参数 } else if (positionData[i].Type == 1) { // 如果是空单 type = -10; // 设置下单参数 } // 平掉所有仓位 this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } }
  • Fonction de dessin : drawingChart()
    Appelez la méthode ObjChart.add() pour dessiner les données de marché et les données d'indicateur nécessaires dans le graphique : piste supérieure, piste médiane, piste inférieure et spread positif/négatif.
Data.prototype.drawingChart = function (boll) { var nowTime = new Date().getTime(); ObjChart.add([0, [nowTime, boll.up]]); ObjChart.add([1, [nowTime, boll.middle]]); ObjChart.add([2, [nowTime, boll.down]]); ObjChart.add([3, [nowTime, this.basb]]); ObjChart.add([4, [nowTime, this.sabb]]); ObjChart.update(chart); }

4. Dans la fonction d'entrée main(), exécutez le code de prétraitement avant transaction. Ce code n'est exécuté qu'une seule fois après le démarrage du programme. inclure:

  • Filtrer les informations moins importantes dans la consoleSetErrorFilter ( )
  • Définir la monnaie numérique à échangerexchange.IO ( )
  • Effacez le graphique précédemment dessiné avant le démarrage du programmeObjChart.reset ( )
  • Effacer les informations de la barre d'état précédente avant le démarrage du programmeLogProfitReset ( )

Après avoir défini le prétraitement de pré-trading ci-dessus, nous passerons à l'étape suivante, entrerons dans le mode d'interrogation et exécuterons à plusieurs reprises la fonction onTick(). Et définissez le temps de veille lorsque Sleep() interroge, car certaines API d'échange de crypto-monnaie ont une limite d'accès intégrée dans une certaine période de temps.

function main() { // 过滤控制台中不是很重要的信息 SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP"); exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种 ObjChart.reset(); //程序启动前清空之前绘制的图表 LogProfitReset(); //程序启动前清空之前的状态栏信息 while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

2. Obtenir et calculer des données

  1. Obtenez des objets de données de base, des soldes de compte et des données d'indicateur Boll à utiliser dans la logique de trading.
function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据 if (!boll) return; // 如果没有boll数据就返回 }

3. Passez une commande et assurez-en le suivi

  1. Selon la logique stratégique ci-dessus, exécutez les opérations d’achat et de vente. Tout d'abord, il détermine si les conditions de prix et d'indicateur sont remplies, puis détermine si les conditions de position sont remplies et enfin exécute la fonction d'ordre trade ( ).
// 价差说明 // basb = (合约A卖一价 - 合约B买一价) // sabb = (合约A买一价 - 合约B卖一价) if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨 if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "closebuy"); // 合约A平多 } if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "closesell"); // 合约B平空 } } else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨 if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "closesell"); // 合约A平空 } if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "closebuy"); // 合约B平多 } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额 if (data.basb < boll.down) { // 如果basb价差低于下轨 if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "buy"); // 合约A开多 } if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "sell"); // 合约B开空 } } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨 if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "sell"); // 合约A开空 } if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "buy"); // 合约B开多 } } }
  1. Une fois la commande passée, il est nécessaire de gérer les situations anormales telles que les commandes non exécutées et le maintien d'un seul contrat. et dessiner des graphiques.
data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约

Ci-dessus, nous avons créé une stratégie simple d’arbitrage inter-période de monnaie numérique en un peu plus de 200 lignes. Le code complet est le suivant :

// 全局变量 // 声明一个配置图表的 chart 对象 var chart = { __isStock: true, tooltip: { xDateFormat: '%Y-%m-%d %H:%M:%S, %A' }, title: { text: '交易盈亏曲线图(详细)' }, rangeSelector: { buttons: [{ type: 'hour', count: 1, text: '1h' }, { type: 'hour', count: 2, text: '3h' }, { type: 'hour', count: 8, text: '8h' }, { type: 'all', text: 'All' }], selected: 0, inputEnabled: false }, xAxis: { type: 'datetime' }, yAxis: { title: { text: '价差' }, opposite: false, }, series: [{ name: "上轨", id: "线1,up", data: [] }, { name: "中轨", id: "线2,middle", data: [] }, { name: "下轨", id: "线3,down", data: [] }, { name: "basb", id: "线4,basb", data: [] }, { name: "sabb", id: "线5,sabb", data: [] }] }; var ObjChart = Chart(chart); // 画图对象 var bars = []; // 存储价差序列 var oldTime = 0; // 记录历史数据时间戳 // 参数 var tradeTypeA = "this_week"; // 套利A合约 var tradeTypeB = "quarter"; // 套利B合约 var dataLength = 10; //指标周期长度 var timeCycle = 1; // K线周期 var name = "ETC"; // 币种 var unit = 1; // 下单量 // 基础数据 function Data(tradeTypeA, tradeTypeB) { // 传入套利A合约和套利B合约 this.accountData = _C(exchange.GetAccount); // 获取账户信息 this.positionData = _C(exchange.GetPosition); // 获取持仓信息 var recordsData = _C(exchange.GetRecords); //获取K线数据 exchange.SetContractType(tradeTypeA); // 订阅套利A合约 var depthDataA = _C(exchange.GetDepth); // 套利A合约深度数据 exchange.SetContractType(tradeTypeB); // 订阅套利B合约 var depthDataB = _C(exchange.GetDepth); // 套利B合约深度数据 this.time = recordsData[recordsData.length - 1].Time; // 获取最新数据时间 this.askA = depthDataA.Asks[0].Price; // 套利A合约卖一价 this.bidA = depthDataA.Bids[0].Price; // 套利A合约买一价 this.askB = depthDataB.Asks[0].Price; // 套利B合约卖一价 this.bidB = depthDataB.Bids[0].Price; // 套利B合约买一价 // 正套价差(合约A卖一价 - 合约B买一价) this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price; // 反套价差(合约A买一价 - 合约B卖一价) this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price; } // 获取持仓 Data.prototype.mp = function (tradeType, type) { var positionData = this.positionData; // 获取持仓信息 for (var i = 0; i < positionData.length; i++) { if (positionData[i].ContractType == tradeType) { if (positionData[i].Type == type) { if (positionData[i].Amount > 0) { return positionData[i].Amount; } } } } return false; } // 合成新K线数据和boll指标数据 Data.prototype.boll = function (num, timeCycle) { var self = {}; // 临时对象 // 正套价差和反套价差中间值 self.Close = (this.basb + this.sabb) / 2; if (this.timeA == this.timeB) { self.Time = this.time; } // 对比两个深度数据时间戳 if (this.time - oldTime > timeCycle * 60000) { bars.push(self); oldTime = this.time; } // 根据指定时间周期,在K线数组里面传入价差数据对象 if (bars.length > num * 2) { bars.shift(); // 控制K线数组长度 } else { return; } var boll = TA.BOLL(bars, num, 2); // 调用talib库中的boll指标 return { up: boll[0][boll[0].length - 1], // boll指标上轨 middle: boll[1][boll[1].length - 1], // boll指标中轨 down: boll[2][boll[2].length - 1] // boll指标下轨 } // 返回一个处理好的boll指标数据 } // 下单 Data.prototype.trade = function (tradeType, type) { exchange.SetContractType(tradeType); // 下单前先重新订阅合约 var askPrice, bidPrice; if (tradeType == tradeTypeA) { // 如果是A合约下单 askPrice = this.askA; // 设置askPrice bidPrice = this.bidA; // 设置bidPrice } else if (tradeType == tradeTypeB) { // 如果是B合约下单 askPrice = this.askB; // 设置askPrice bidPrice = this.bidB; // 设置bidPrice } switch (type) { // 匹配下单模式 case "buy": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); case "sell": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closebuy": exchange.SetDirection(type); // 设置下单模式 return exchange.Sell(bidPrice, unit); case "closesell": exchange.SetDirection(type); // 设置下单模式 return exchange.Buy(askPrice, unit); default: return false; } } // 取消订单 Data.prototype.cancelOrders = function () { Sleep(500); // 撤单前先延时,因为有些交易所你懂的 var orders = _C(exchange.GetOrders); // 获取未成交订单数组 if (orders.length > 0) { // 如果有未成交的订单 for (var i = 0; i < orders.length; i++) { //遍历未成交订单数组 exchange.CancelOrder(orders[i].Id); //逐个取消未成交的订单 Sleep(500); //延时0.5秒 } return false; // 如果取消了未成交的单子就返回false } return true; //如果没有未成交的订单就返回true } // 处理持有单个合约 Data.prototype.isEven = function () { var positionData = this.positionData; // 获取持仓信息 var type = null; // 转换持仓方向 // 如果持仓数组长度余2不等于0或者持仓数组长度不等于2 if (positionData.length % 2 != 0 || positionData.length != 2) { for (var i = 0; i < positionData.length; i++) { // 遍历持仓数组 if (positionData[i].Type == 0) { // 如果是多单 type = 10; // 设置下单参数 } else if (positionData[i].Type == 1) { // 如果是空单 type = -10; // 设置下单参数 } // 平掉所有仓位 this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } } // 画图 Data.prototype.drawingChart = function (boll) { var nowTime = new Date().getTime(); ObjChart.add([0, [nowTime, boll.up]]); ObjChart.add([1, [nowTime, boll.middle]]); ObjChart.add([2, [nowTime, boll.down]]); ObjChart.add([3, [nowTime, this.basb]]); ObjChart.add([4, [nowTime, this.sabb]]); ObjChart.update(chart); } // 交易条件 function onTick() { var data = new Data(tradeTypeA, tradeTypeB); // 创建一个基础数据对象 var accountStocks = data.accountData.Stocks; // 账户余额 var boll = data.boll(dataLength, timeCycle); // 获取boll指标数据 if (!boll) return; // 如果没有boll数据就返回 // 价差说明 // basb = (合约A卖一价 - 合约B买一价) // sabb = (合约A买一价 - 合约B卖一价) if (data.sabb > boll.middle && data.sabb < boll.up) { // 如果sabb高于中轨 if (data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "closebuy"); // 合约A平多 } if (data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "closesell"); // 合约B平空 } } else if (data.basb < boll.middle && data.basb > boll.down) { // 如果basb低于中轨 if (data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "closesell"); // 合约A平空 } if (data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "closebuy"); // 合约B平多 } } if (accountStocks * Math.max(data.askA, data.askB) > 1) { // 如果账户有余额 if (data.basb < boll.down) { // 如果basb价差低于下轨 if (!data.mp(tradeTypeA, 0)) { // 下单前检测合约A是否有多单 data.trade(tradeTypeA, "buy"); // 合约A开多 } if (!data.mp(tradeTypeB, 1)) { // 下单前检测合约B是否有空单 data.trade(tradeTypeB, "sell"); // 合约B开空 } } else if (data.sabb > boll.up) { // 如果sabb价差高于上轨 if (!data.mp(tradeTypeA, 1)) { // 下单前检测合约A是否有空单 data.trade(tradeTypeA, "sell"); // 合约A开空 } if (!data.mp(tradeTypeB, 0)) { // 下单前检测合约B是否有多单 data.trade(tradeTypeB, "buy"); // 合约B开多 } } } data.cancelOrders(); // 撤单 data.drawingChart(boll); // 画图 data.isEven(); // 处理持有单个合约 } //入口函数 function main() { // 过滤控制台中不是很重要的信息 SetErrorFilter("429|GetRecords:|GetOrders:|GetDepth:|GetAccount|:Buy|Sell|timeout|Futures_OP"); exchange.IO("currency", name + '_USDT'); //设置要交易的数字货币币种 ObjChart.reset(); //程序启动前清空之前绘制的图表 LogProfitReset(); //程序启动前清空之前的状态栏信息 while (true) { // 进入轮询模式 onTick(); // 执行onTick函数 Sleep(500); // 休眠0.5秒 } }

Le trading d'arbitrage est né de la stratégie de trading d'actions de Morgan Stanley. Son concept est le suivant : les fluctuations de la différence de prix de deux produits fortement corrélés sont conformes au « processus popcorn », c'est-à-dire que la différence de prix revient constamment à la moyenne à partir de la position qui s'écarte de la moyenne historique , et puis un autre écart par rapport à la moyenne.

À partir de là, nous pouvons réaliser un profit en achetant à bas prix et en vendant à prix élevé en fonction de la différence de prix. Ensuite, selon le principe de l'écart type en statistique, les bandes de Bollinger sont composées d'un rail médian et de rails supérieur et inférieur calculés par l'écart type, formant trois mailles. Il est très utile dans le trading d'arbitrage de spread.

Après les tests, il a été constaté que si la stratégie est suivie, sans tenir compte des frais de traitement et des coûts d'impact, bien que le bénéfice à chaque fois ne soit pas très élevé, le bénéfice global est relativement stable. Il convient de noter que, s'agissant d'un arbitrage statistique, il existe un risque que l'écart de prix s'élargisse dans la direction opposée, et nous devons prendre en compte la question du stop loss lors de sa conception. Deuxièmement, nous devons également prêter attention aux coûts d'impact. Lorsque la liquidité des deux contrats impliqués dans la transaction diminue, cela aura un impact significatif sur les rendements, et les investisseurs devraient l'éviter si nécessaire.

4. Itération avancée du développement de la stratégie CTA

4.1 Éviter les pièges des stratégies CTA à terme

Dans les deux derniers cours, nous avons écrit une stratégie de tendance en langage Mai et une stratégie d'arbitrage en JavaScript, et nous n'avons trouvé aucun problème dans le backtesting de la stratégie. Cependant, le trading quantitatif ne consiste pas seulement à écrire un programme, puis à le trader directement une fois le backtesting réussi.
En fait, le backtesting n'est qu'une simulation d'une stratégie, qui sert uniquement à évaluer les performances de la stratégie dans les données historiques, permettant aux traders d'évaluer et d'abandonner rapidement certaines stratégies de trading.

Dans de nombreux cas, les stratégies qui semblent excellentes lors des backtests ne parviennent souvent pas à répondre aux normes de backtest dans le trading réel. Il existe de nombreuses raisons, dont certaines échappent au contrôle du trader, mais certains des échecs sont dus à des erreurs courantes ou potentielles .

Données statiques vs données dynamiques
Lorsque nous effectuons une analyse quantitative, nous devons d'abord avoir une notion de données statiques et de données dynamiques. Dans le cadre du backtesting, nous utilisons des données historiques statiques. Les prix de chaque ligne K sont complets et chaque signal de trading peut être vendu à 100 %. Mais les données du marché réel sont dynamiques. Par exemple, si le prix le plus élevé est supérieur au prix le plus élevé dans l'heure qui suit l'ouverture, alors achetez. Cependant, si la ligne K actuelle n'a pas été complétée, alors le prix le plus élevé est dynamique et le signal de trading peut clignoter dans les deux sens. . Cette situation indique que la stratégie utilise des fonctions futures pour déterminer les conditions des transactions d’achat et de vente.

Fonction future
Qu'est-ce qu'une fonction future ? Voyons d'abord comment l'Encyclopédie Baidu l'explique : si une quantité dépend d'une autre quantité, telle que la quantité A et la quantité B, et qu'un changement dans B entraîne un changement dans A, alors A est une fonction de B. Si B est une fonction ultérieure quantité, A est Pour une quantité antérieure, A change avec B, et A est la fonction future de B. Tout le monde peut être confus.

En termes simples, il s'agit d'une fonction qui fait référence à des données futures, comme l'utilisation du prix de demain pour prédire le prix de demain. Si un indicateur technique contient une fonction future, son signal est incertain. Souvent, un signal de trading est émis à l'instant T, mais lorsque la ligne K suivante apparaît, le signal disparaît ou change de position.

Le prix de clôture est une fonction future. Avant que la dernière ligne K ne soit terminée, le prix de clôture change toujours. Vous devez attendre que la ligne K soit terminée pour déterminer le prix de clôture. Étant donné que le cours de clôture lui-même est une fonction du futur, tous les indicateurs techniques basés sur le cours de clôture sont également des fonctions du futur.

Par conséquent, si un indicateur technique utilise un prix de clôture confirmé comme donnée de base et que les signaux d'achat et de vente ne changent pas quel que soit le temps écoulé, on peut dire que cet indicateur technique ne fait pas référence à une fonction future. Cependant, les données de base qu'il utilise sont le prix de clôture qui n'a pas encore été confirmé, donc cet indicateur technique fait référence à la fonction future, et les signaux d'achat et de vente peuvent changer dans les applications réelles.

Prix ​​passés
La fonction future utilise les prix futurs, mais elle peut également utiliser les prix passés. Il s'agit d'un problème que de nombreux novices ont tendance à négliger. Pour mieux illustrer ce problème à l’avenir, prenons un exemple : si le prix le plus élevé actuel est supérieur au prix le plus élevé dans l’heure suivant l’ouverture, achetez au prix d’ouverture. De toute évidence, il n’y a rien de mal avec les conditions de ce signal d’achat et de vente, mais le prix utilisé pour passer l’ordre est le prix passé.

Dans le backtest, la stratégie est normale, car le moteur de backtest basé sur des données statiques peut terminer la transaction 100 % du temps tant qu'il y a un signal d'achat. Cependant, sur le marché réel, lorsque le prix le plus élevé est supérieur au prix le plus élevé, le prix le plus élevé est supérieur au prix le plus élevé. prix le plus élevé dans l'heure suivant l'ouverture, À ce stade, vous ne pouvez certainement plus utiliser le prix d'ouverture passé pour passer des commandes.

Vide de prix
Le soi-disant vide de prix fait référence au prix affiché sur le graphique K-line, mais le prix ne peut pas être négocié sur le marché réel. Il se divise principalement en les situations suivantes :

  1. Quiconque a fait du trading sait qu’il est difficile d’acheter lorsque le prix atteint sa limite supérieure, et qu’il est difficile de vendre lorsque le prix atteint sa limite inférieure. Il est toutefois possible de trader dans le backtest.
  2. Le mécanisme de correspondance de l'échange est le suivant : priorité au prix et priorité au temps. Certains produits ont souvent un nombre énorme de commandes. Si vous passez un ordre d'achat ou de vente en temps réel, vous devez attendre derrière les ordres des autres et attendre que les ordres des autres soient exécutés avant de pouvoir terminer la transaction. Dans certains cas, le le prix peut avoir changé avant que vous puissiez finaliser la transaction. Cependant, lors du backtesting, si votre stratégie consiste à passer des commandes, la transaction sera alors finalisée en temps opportun, ce qui est différent de l'environnement de trading réel.
  3. Si vous utilisez une stratégie d'arbitrage, le profit du backtesting est très élevé, car à chaque fois que vous effectuez un backtesting, vous supposez que vous avez saisi ces différences de prix. En réalité, de nombreux spreads ne sont pas disponibles, ou bien une seule jambe est disponible. En règle générale, celui qui n'est pas favorable à votre direction sera négocié en premier, vous devez donc remplir l'autre jambe immédiatement. À ce stade, le glissement a Cela s'est déjà produit. Il ne s'agit pas de 1 ou 2 points, mais de la stratégie d'arbitrage elle-même qui gagne de l'argent grâce à la différence de prix de ces points. Cette situation ne peut pas être simulée dans le cadre d'un backtesting. Le bénéfice réel n’est pas aussi bon que le backtest.
  4. Bien que les événements cygnes noirs ne soient pas courants, ils ont néanmoins un impact important sur le trading quantitatif. Par exemple, dans l'événement cygne noir du franc suisse, le graphique montre qu'il y a à la fois une ouverture élevée et une clôture basse. En fait, dans les cas extrêmes conditions du marché du jour, Le prix au milieu est un vide, un grand nombre d'ordres stop-loss provoquent des bousculades, la liquidité est nulle et les transactions sont très difficiles, mais les stop loss peuvent être atteints en backtesting.
    img

Surapprentissage
Le sur-ajustement est une erreur courante commise par les débutants en trading quantitatif. Qu'est-ce que le sur-ajustement ? Prenons un exemple simple : lors des examens à l'école, certaines personnes utilisent la tactique consistant à poser beaucoup de questions et à mémoriser chaque question. Si les questions sont légèrement modifiées pendant l'examen, il ne pourra pas y répondre. Parce qu’il a mémorisé l’approche de chaque question d’une manière très compliquée, mais n’a pas fait abstraction des règles générales.
img

Comme le montre l’image ci-dessus, tant qu’un modèle est suffisamment complexe, il peut parfaitement s’adapter aux données. Il en va de même pour le surajustement dans le trading quantitatif. Si votre stratégie est complexe et comporte de nombreux paramètres externes, alors dans le backtest limité des données historiques, il y aura toujours un ou plusieurs paramètres qui peuvent parfaitement s'adapter à la stratégie. En ligne avec les conditions historiques du marché .

Cependant, dans le futur, les variations de prix peuvent dépasser les limites de votre stratégie. En fait, l'essence du développement d'une stratégie de trading quantitative est le processus de mise en correspondance de données locales non aléatoires à partir d'une grande quantité de données apparemment aléatoires. Par conséquent, Il faut utiliser les statistiques. Comment pouvons-nous utiliser les connaissances pour éviter ce piège ?

Une solution de compromis consiste à utiliser à la fois des données dans l’échantillon et hors échantillon. Divisez l'ensemble des données en deux parties, utilisez les données de l'échantillon comme ensemble d'entraînement et soyez responsable du backtesting des données. Les données hors échantillon sont utilisées comme ensemble de test pour la vérification. S’il y a peu de données historiques, vous pouvez également utiliser la méthode des tests croisés.

Si vous constatez que les données hors échantillon ne fonctionnent pas bien, mais que vous pensez qu'il est dommage de rejeter le modèle ou que vous n'êtes pas prêt à admettre que votre modèle n'est pas bon, vous continuez à optimiser le modèle à la sortie. -des données hors échantillon jusqu'à ce qu'elles fonctionnent aussi bien sur les données hors échantillon, alors celui qui est blessé à la fin est Ce doit être votre vrai argent.

Biais de survie
Le biais de survie peut être expliqué par les exemples suivants :

  1. Si vous vous placez au bon endroit, même les cochons peuvent voler.
  2. Tous les avis sur les parachutes vendus en ligne sont positifs, car personne n'a de problèmes avec ses parachutes.
  3. Les journalistes ont interrogé les gens dans le bus pour voir s'ils avaient acheté des billets, car ceux qui ne pouvaient pas acheter de billets ne pouvaient pas du tout monter dans le bus.
  4. Les médias font la promotion de la possibilité de gagner à la loterie, car ils ne font pas activement la promotion des personnes qui n’ont pas gagné à la loterie.

Les exemples ci-dessus montrent que les informations que les gens reçoivent habituellement ont en fait été filtrées, ce qui conduit à ignorer de manière sélective une grande quantité de données ou d'échantillons. Le résultat est que les conclusions basées sur le biais de survie s'écartent de la réalité. Ensuite, dans le trading quantitatif, nous devons également déterminer si le résultat du backtest est dû à la chance. Dans de nombreux cas, le résultat du backtest peut être la meilleure performance de l'ensemble du backtest. Faites attention à l'image suivante :
img

L'image de gauche montre une très bonne stratégie de trading. Elle présente une bonne courbe de capital, aucun retrait important et permet d'obtenir des rendements stables. Mais regardez l'image de droite, c'est tout simplement la plus performante parmi ces centaines de backtests de trading. D'un autre côté, lorsque nous observons le marché financier, il y a toujours plus d'étoiles que d'étoiles de longue date. Si la stratégie du trader est en phase avec les conditions du marché, alors les conditions du marché de chaque année peuvent créer un lot d'étoiles, mais il Il est rare de voir une star qui puisse vivre plus de trois années consécutives. Une personne qui fête son anniversaire avec des bénéfices stables.

Impact sur les coûts
À moins que vous ne passiez un ordre en attente, vous risquez de subir des fluctuations de prix lors de vos transactions. Pour les produits négociés activement, le cours acheteur et le cours vendeur présentent généralement une différence d'un point. Pour les produits négociés moins activement, l'écart peut être plus important. Chaque fois que vous souhaitez trader activement, vous avez besoin d'au moins un spread, voire plus. Cependant, dans le cadre du backtesting, nous n'avons pas besoin de prendre en compte le problème de la transaction. Tant qu'il y a un signal, la transaction peut être finalisée. Par conséquent, afin de simuler l'environnement commercial réel, il faut ajouter au moins un glissement.

En particulier pour les stratégies avec une fréquence de trading relativement élevée, lors du backtesting de la stratégie, si le glissement n'est pas inclus, la courbe de capital sera toujours inclinée vers le haut. Une fois qu'un glissement raisonnable est ajouté, il se transformera immédiatement en perte. De plus, ce phénomène n'est pas uniquement dû à la propagation des transactions. Dans un environnement commercial réel, des problèmes tels que le délai de réseau, les systèmes logiciels et matériels et la réponse du serveur doivent également être pris en compte.

Capacité politique
La même stratégie peut avoir des effets très différents, voire complètement opposés, sur des marchés efficients et inefficaces. Par exemple, sur des marchés inefficaces tels que le marché boursier national, les contrats à terme sur matières premières et les monnaies numériques étrangères, la capacité des stratégies à haute fréquence n'est pas très grande en raison de la faible base de volume des transactions. Si davantage de personnes les utilisent, il y aura Il n'y aura pas de marge bénéficiaire et même les stratégies originales à haute fréquence ne seront pas rentables. Une stratégie rentable se transforme en une stratégie déficitaire. Mais dans un marché des changes efficace, il existe de la place pour de nombreux types différents de stratégies à haute fréquence.

Les problèmes et les pièges qui peuvent survenir lors du développement et de l'utilisation d'une stratégie sont décrits ci-dessus. Pour un développeur de système de trading expérimenté, le backtesting est indispensable. Parce qu’il peut vous indiquer si une idée de stratégie peut être vérifiée comme étant efficace dans des transactions historiques. Mais bien souvent, les backtests ne sont pas garants d’une rentabilité future. Parce qu’il y a trop d’écueils dans le backtesting, vous ne le comprendrez pas à moins de dépenser de l’argent pour en tirer quelques leçons. Et ces leçons s’apprennent avec de l’argent réel. Ce cours peut au moins vous aider à éviter de nombreux détours et pièges quantitatifs.

4.2 Établir une gestion optimale des positions

Dans Souvenirs d'un opérateur boursier, il y a un épisode intéressant : Old Turkey (initialement nommé Partridge), qui travaillait dans la même société de valeurs mobilières que le protagoniste Livermore, faisait toujours de gros achats et ventes. Chaque fois que quelqu'un lui suggérait de le vendre après réaliser un bénéfice, puis le racheter une fois que le prix de l'action aura baissé. Le vieux Dindon dit toujours avec sérieux : Non, vous savez, c’est un marché haussier !

Même Livermore a fini par soupirer : il n’y a rien de bien à prévoir correctement la tendance. Sur le marché, on trouve toujours de nombreuses personnes qui ont été optimistes dans un marché haussier et pessimistes dans un marché baissier. Mais ils savent toujours négocier avec le marché, en essayant d’acheter au plus bas et de vendre au plus haut. Tout comme les vieux dindes, ceux qui gagnent vraiment beaucoup d'argent sont ceux qui voient le marché correctement et maintiennent fermement leurs positions. C'est aussi la chose la plus difficile à apprendre. Cela implique non seulement de sélectionner des cibles et un calendrier, mais aussi une question plus importante : quelle est l’ampleur de la position (du risque) à détenir (à prendre) ?

Les traders qui échouent ont tous une pensée unilatérale. Lors du trading, les personnes avides ne regardent que les avantages et non les risques, tandis que les personnes timides ne regardent que les risques et non les avantages. Ceux qui sont à la fois avides et timides oublient les risques lorsque le Le marché est en hausse. Oubliez les gains en baisse. Mais les traders qui réussissent prennent en compte à la fois le risque et la récompense, c'est-à-dire que pour chaque dollar gagné, ils prennent plusieurs dollars de risque. L’indicateur permettant de mesurer le rendement et le risque est alors le ratio rendement-risque.

Beaucoup de gens savent que plus le profit est grand, plus le risque est grand, c'est-à-dire que le rendement est proportionnel au risque. De l’avis de certaines personnes, la relation entre le rendement et le risque devrait être la suivante, l’axe horizontal représentant le pourcentage de risque et l’axe vertical représentant le pourcentage de profit :
img

Cependant, dans les transactions réelles, les rendements et les risques sont loin d’être aussi simples qu’une ligne droite entre deux points ; du moins, ils n’évoluent pas toujours de manière linéaire. Le véritable risque est la perte maximale que vous pouvez subir en fonction du rendement attendu, ce que nous appelons la volatilité maximale. Même si parfois la perte flottante maximale n’est pas nécessairement égale à la perte de clôture résultant des résultats de la transaction, la perte flottante maximale est réelle.

Nous pouvons donc en déduire que le ratio bénéfice/risque de la figure ci-dessus n'est pas une représentation fidèle. Dans un environnement de trading réel, le ratio bénéfice/risque devrait être celui indiqué dans la figure ci-dessous :
img

Regardons l’image ci-dessus. La courbe jaune représente la fluctuation de la valeur nette sous différents risques. À mesure que le rendement attendu continue d’augmenter, le risque augmente également progressivement. Si nous fixons la faillite à 0,5, ce qui signifie que la perte maximale atteint 50 %, alors il s'agit d'une stratégie de trading ratée. Bien que le rendement final de cette stratégie soit positif, elle a en réalité fait faillite au milieu.

Même si votre stratégie est une stratégie d’attentes positives, elle fera quand même faillite en raison d’une mauvaise gestion de position. De ce point de vue, le montant à acheter ou à vendre est plus important que le moment où acheter ou vendre. La gestion scientifique des positions est devenue une question fondamentale dans les transactions financières. Alors, avant d'essayer de résoudre ce problème, voyons comment placer des paris de manière scientifique dans les jeux de hasard.
img

Prenons l'exemple du tirage au sort. En supposant que les deux faces d'une pièce aient le même poids, si le recto apparaît, le bénéfice est de 2 yuans, et si le verso apparaît, la perte est de 1 yuan. un jeu à espérance positive, avec un taux de gain de 50 % et une perte de 2 yuans. La question se pose alors : vous avez maintenant 100 yuans, comment pouvez-vous placer des paris à plusieurs reprises pour que ces 100 yuans atteignent 1 million de yuans le plus rapidement possible.

Si nous n’y réfléchissons pas attentivement, nous penserons que puisque le bénéfice de chaque pari est de 50 %,*2-50%*1, soit 50 %. Afin de réaliser rapidement le profit maximum, vous devez investir autant de capital que possible dans chaque jeu. La mise doit être de 100 %.

Mais il est évidemment déraisonnable d’investir 100 % du capital dans chaque jeu de hasard, car si vous perdez une seule fois, le capital aura disparu, même si la possibilité est très faible. Parce que tant que vous jouez suffisamment de fois, vous risquez de perdre de l’argent.

Quelqu'un pourrait se demander, puisqu'un pari à 100 % n'est pas raisonnable, qu'en est-il d'un pari à 90 % ou moins ? En fait, pour résoudre ce problème, nous pouvons faire une expérience pour simuler ce jeu de hasard et voir quels sont les résultats de chaque pari. Comme le montre l'image suivante :

img

D'après la figure, nous pouvons voir que lorsque nous réduisons progressivement la position de 90 %, 80 %, 70 %, 60 % et 50 %, les résultats du même pari sont complètement différents. Les amis prudents ont peut-être déjà remarqué que à mesure que la position diminue progressivement, les fonds finaux augmentent en réalité progressivement.

Certains pourraient se demander s'il est préférable de miser de plus petites sommes à chaque fois, par exemple 10 %. Vous ne pouvez pas calculer tous les ratios de mise, n'est-ce pas ? C'est le problème que la célèbre formule de Kelly est censée résoudre. En statistique, la formule de Kelly peut maximiser le taux de croissance à long terme d'une stratégie avec des paris répétés attendus positifs en calculant le ratio de paris optimal dans chaque pari.

De plus, en supposant que le capital et le risque peuvent être divisés à l’infini, l’utilisation de la formule de Kelly rendra impossible la faillite dans n’importe quel risque. En particulier dans l’application concrète des transactions financières, il s’agit d’une stratégie de gestion de position qui combine à la fois l’attaque et la défense. Voyons comment la formule de Kelly est calculée, regardez l'image suivante :

img

  • f est le ratio de pari optimal du capital existant
  • b est la cote, qui peut également être appelée le ratio de profit et de perte dans le trading.
  • p est le taux de réussite
  • q est le taux d'échec

Ensuite, nous pouvons utiliser la formule de Kelly pour calculer l'exemple de jeu dans cette classe. Avec un capital initial de 100 yuans, si le taux de gain est de 50 % et les cotes sont de 2, quel ratio de mise doit être utilisé pour tirer le meilleur parti du capital rentable ? La vitesse la plus rapide atteint 1 million de yuans. En utilisant la formule de Kelly, le processus de calcul est le suivant :

(0.5*(2+1) -1)/2=0.25

Un taux de gain de 50 % est égal à 0,5, multiplié par la cote 2 plus 1, puis soustrait par 1 et enfin divisé par 2. Le résultat est de 0,25, ce qui signifie que dans chaque pari, 25 % du capital est utilisé pour les paris. peut atteindre 1 million de yuans à la vitesse la plus rapide. Nous pouvons le simuler manuellement en fonction des résultats du calcul pour voir s'il est correct.

img

L'image ci-dessus est le résultat d'une simulation manuelle. Veuillez regarder la dernière ligne. Pour le même pari, après plus de 100 tours, 25 % des positions ont atteint 1 million de yuans en premier. Les résultats de 90 %, 80 %, 70 % et 60 % des positions sont négatifs, ce qui démontre pleinement que même une stratégie de trading avec une attente positive fera faillite en raison d'une mauvaise gestion des positions.

On voit aussi que 50% des positions ne perdront ni ne gagneront au final, ce qui est également conforme au résultat de la loi des grands nombres. Pour illustrer davantage le problème, une position de 10 % a également été ajoutée lors de la simulation manuelle. Bien que le résultat final ait été positif, l'effet était de plusieurs ordres de grandeur pire que celui de la position de 25 %.

Vous avez vu la puissance de la formule Kelly. Si vous choisissez une position principale de 10 % dans une application réelle, alors dans plus de 100 paris, votre capital deviendra supérieur à 30 000. Bien que le profit soit énorme, cependant, comparé au résultat de une position principale de 25 %, c'est l'équivalent de ne pas gagner d'argent. C'est le pouvoir de la connaissance.

Si vous souhaitez utiliser la formule Kelly pour gagner de l'argent dans la vie, vous devez remplir les conditions d'application de la formule Kelly. Il ne fait aucun doute que ce pari doit provenir du marché financier. En particulier dans le trading quantitatif, en testant rétrospectivement les données historiques, le taux de gain et les cotes correspondants peuvent être calculés approximativement.

Bien entendu, l’application concrète de la formule de Kelly aux transactions financières n’est pas si simple. Il reste encore de nombreux détails à régler, comme le coût des fonds dans les transactions à effet de levier, l’impossibilité de séparer les fonds et les positions dans les transactions réelles, et la différence entre le taux de gain et la position dans les transactions. Les cotes changent de manière dynamique, etc. Mais quoi qu’il en soit, la formule Kelly nous montre comment établir la meilleure méthode de gestion de position.

Related Recommendations
Comment
All comments (3)

    学习学习

    4 years ago

    学习

    5 years ago

    学习

    6 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)