
Dans les articles précédents, nous avons appris que le trading dit programmé et quantitatif est un programme de script qui effectue certaines opérations sur la base des données obtenues de la bourse après une série de calculs, de jugements et de déclencheurs pour faire fonctionner le compte de bourse pour le trading. Ces actions d’obtention de données et d’exploitation de comptes sont toutes réalisées via l’interface API d’échange. En termes simples, il s’agit de l’interaction entre le programme de script et l’échange. Puisqu’il s’agit d’une interaction, il doit y avoir une interaction normale et une interaction anormale. Lorsqu’une interaction anormale se produit, l’interface renvoie les informations d’exception.
Bien entendu, les systèmes de trading programmés et quantitatifs présents sur le marché, ou les programmes développés par nos soins, comporteront diverses invites et messages d’erreur. Ces messages d’erreur ne se limitent pas aux messages d’erreur signalés par l’interface API d’échange. Il existe également des éléments tels que : des erreurs d’exception d’exécution du programme, des erreurs de configuration, des erreurs de syntaxe du programme, etc.
Sur la plateforme de trading quantitative Inventor, les messages d’erreur peuvent être grossièrement divisés en plusieurs catégories :

Le code manque de caractères tels que des parenthèses. Ce type d’erreur est généralement visible sur la page d’édition de la politique et la politique ne peut pas être exécutée (une erreur sera signalée directement pendant l’exécution, comme indiqué dans la figure ci-dessous).
Donc, après avoir écrit la stratégie, j’ai l’habitude de jeter un œil à la page d’édition de la stratégie de la plateforme pour voir s’il y a un petit XX rouge. Si c’est le cas, il doit y avoir une erreur évidente.


De telles erreurs entraîneront l’échec du programme et son exécution cessera.
Sur la plateforme FMZ, les paires de trading sont définies de manière uniforme commeX_YDans ce format, X représente le nom de la devise de négociation et Y représente le nom de la devise libellée (la devise libellée des paires de contrats à terme basés sur des devises est généralement exprimée en USD, ce qui a été introduit dans les articles précédents). Par exempleBTC_USDT, si j’écris la paire de trading au hasard,BTC-USDT。

Erreur signalée dans le système de backtesting de la plateforme FMZ :

Signaler une erreur dans le trading réel :

De plus, une erreur courante que rencontrent les débutants :
https://www.fmz.com
Ce type d’erreur est provoqué par le changement du mot de passe du compte de la plateforme FMZ, ce qui entraîneAPI KEYNon valide (la CLÉ API de l’utilisateur est cryptée sur le navigateur puis configurée sur la plateforme FMZ), la stratégie ne peut pas être démarrée et une erreur est signalée.
Des erreurs d’appel d’interface sont souvent rencontrées lors de l’exécution de stratégies. Dans les articles précédents, nous avons appris que les interfaces de la plateforme FMZ sont divisées enInterface de génération de requêtes réseau、Interface qui ne génère pas de requêtes réseau. Les erreurs d’interface n’entraînent pas l’arrêt du programme de stratégie. Cela est généralement dû à une exception d’appel d’interface, qui renvoie des données incorrectes. La stratégie n’a alors pas de tolérance aux pannes et l’erreur d’exception du programme provoquée par les données incorrectes entraîne l’arrêt du programme. (le concept de tolérance aux pannes a été abordé dans des articles précédents). mentionné).
Voici quelques messages d’erreur d’interface qui génèrent des requêtes réseau :
Délai d’expiration du réseau

L’un des messages d’erreur que les débutants rencontrent souvent est l’utilisation de périphériques réseau domestiques (leurs propres ordinateurs ou serveurs domestiques). Étant donné que la plupart des échanges sont bloqués, de nombreux échanges sont pratiquement inaccessibles depuis le réseau national et l’interface d’accès signalera un délai d’attente. (mentionné dans les articles précédents)
Erreur http 429
https://www.fmz.com
L’un des messages d’erreur classiques. La raison est que l’interface d’échange est appelée trop fréquemment, dépassant la limite de fréquence de l’échange. (mentionné dans les articles précédents)
Certains nouveaux étudiants pourraient dire : « Je vais postuler pour davantage d’échanges. »API KEYOu je peux simplement demander quelques comptes d’échange supplémentaires. Il faut savoir que les échanges limitent généralement la fréquence d’accès des interfaces en fonction des adresses IP. En termes simples, tant que toutes les requêtes envoyées depuis une adresse IP sont comptabilisées sur cette adresse IP, si la limite est dépassée et que cette IP envoie à nouveau une requête , le serveur Exchange refusera l’accès. .
Rapport d’erreurs au niveau de l’entreprise de l’interface d’échange
Le délai d’attente et le 429 mentionnés ci-dessus sont des erreurs au niveau du réseau. Des erreurs seront également signalées si des problèmes surviennent au niveau de l’interface commerciale de la bourse. Par exemple, je souhaite obtenir des cotations au comptant, mais j’ai défini une paire de négociation qui n’existe pas. Je l’ai testé dans l’outil de débogage de la plateforme FMZ. L’outil de débogage est un outil de test très pratique, qui convient parfaitement aux tests en temps réel des appels de fonctions, de l’acquisition de données et d’autres besoins.

Il n’y a aucune différence entre les résultats d’exécution de l’outil de débogage et l’exécution réelle.

Huobi 错误 GetTicker: Invalid ticker: {"Info":{"err-code":"invalid-parameter","err-msg":"invalid symbol","status":"error","ts":1620872079355},"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}
Le message d’erreur ici signifie que la paire de transactions n’est pas valide (comme on peut le voir ici)"err-msg":"invalid symbol")。
Par exemple, il existe de nombreuses erreurs commerciales de ce type. Par exemple, lors de la définition de l’effet de levier, certaines bourses ne prennent pas en charge les valeurs d’effet de levier avec des parties décimales. À ce stade, si la valeur de l’effet de levier contient une partie décimale, cela entraînera également une erreur d’appel d’interface.
Répertorier un appel d’interface qui ne génère pas de demande réseau
Définir le code du contrat à terme Certaines interfaces ne définissent que certaines variables globales dans le système et ne génèrent pas de requêtes réseau, par exemple :

Cependant, des erreurs se produiront si les paramètres sont transmis de manière incorrecte ou écrits de manière aléatoire.

Cependant, quel que soit le type d’erreur, le message d’erreur affiché est l’information clé pour trouver le problème, et le problème peut généralement être identifié à partir du message d’erreur. Vous pouvez utiliser des outils de traduction pour traduire les messages d’erreur et extraire des informations clés. Par exemple, dans l’exemple ci-dessus"err-msg":"invalid symbol", traduction : “err msg” : “Symbole non valide”. Vous savez probablement que les paramètres des paires de trading sont erronés, car les symboles anglais sont généralement utilisés pour représenter les codes de trading et les paires de trading.
Nous allons discuter brièvement des informations d’erreur. Il existe un article qui continuera à recueillir les questions courantes pour les requêtes : https://www.fmz.com/bbs-topic/1427
Le système de backtesting est également un élément clé d’un outil quantitatif. Le système de backtesting permet de tester facilement les prototypes de stratégie et de tester de manière préliminaire les bugs potentiels et les problèmes logiques de la stratégie. Nous devons être rationnels à propos du système de backtesting. Le système de backtesting peut refléter dans une certaine mesure certains problèmes de la stratégie.
Ci-dessous, nous expliquerons brièvement le système de backtesting sur la plateforme FMZ du point de vue des différents langages de stratégie pris en charge par FMZ. (Certaines introductions au système de backtesting ont été mentionnées dans des articles précédents)
Le backtest côté navigateur utilise les ressources matérielles locales.
Lors du backtesting sur un dépositaire, vous pouvez choisir à quel dépositaire l’allouer (soit votre propre dépositaire, soit le dépositaire public de la plateforme FMZ). Compte tenu de la lourde charge qui pèse sur les dépositaires publics de la plateforme FMZ, il est recommandé d’utiliser le dépositaire local pour le backtesting (cela sera également plus rapide. Lors du backtesting avec le dépositaire public, lorsqu’il y a trop de tâches qui dépassent la charge, certains backtesting les tâches seront annulées, ce qui entraînera des retards dans les tests rétrospectifs). (interruption de la mesure).
Contrairement aux langages de script, les politiques C++ doivent être compilées avant de pouvoir être exécutées. La stratégie du langage C++ sera d’abord compilée sur la plateforme FMZ (serveur) (en cas de problème avec le code, la compilation peut échouer et un message d’erreur apparaîtra). Après compilation, backtest sur la plateforme FMZ (serveur).
L’implémentation sous-jacente est JavaScript, et le backtesting est également effectué côté navigateur.
L’implémentation sous-jacente est JavaScript, et le backtesting est également effectué côté navigateur.
Le système de backtesting de la plateforme de trading quantitative Inventor dispose de deux modes de backtesting (celui-ci ne fait pas de distinction entre les langages de stratégie, celui-ci correspond aux paramètres de backtesting, et le backtesting de stratégie dans différents langages est le même).

Pour obtenir des instructions sur le système de backtesting, veuillez vous référer aux informations du didacticiel de la plateforme :
https://www.fmz.com/bbs-topic/4158#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B
K线中一根柱子不是有高开低收么,构成了一个价格框架,在这个K线代表的时间范围内,价格都在这个价格框架内,所以只要生成的价格在这个K线高开低收框架范围内,这个模拟出来的价格就是合理的。
Tout comme la simulation de la figure : https://www.fmz.com Bien entendu, lorsque le système de backtesting réel implémente cette simulation, la situation est légèrement plus compliquée que celle illustrée dans la figure. Nous n’entrerons pas dans les détails ici. Il suffit de comprendre le mécanisme de backtesting au niveau de la simulation. Connaissant ce principe, nous devons prêter attention aux inconvénients du backtesting au niveau de la simulation, bien que le backtesting au niveau de la simulation soit très rapide (car les prix générés par la simulation ne sont pas les prix réels publiés un par un seconde par seconde). Mais si la stratégie convientTendance de changement de tick simuléeCela permettra à la stratégie de fonctionner très bien (mais dans des situations réelles, le prix peut ne pas évoluer de cette manière, bien que le prix soit dans le cadre de cette colonne K-line). La ligne K utilisée pour générer des données de ticks simulées est appelée ligne K sous-jacente et la période de cette ligne K est appeléeCycle K-line inférieur, définissez-le comme indiqué dans la page de configuration de la stratégie :
Le réglage de 1 minute ici signifie que les données de la ligne K avec une période de 1 minute sont utilisées comme source de données pour générer des ticks simulés.
Un autre point est que pour les stratégies à haute fréquence, il n’est évidemment pas approprié d’utiliser des backtestings au niveau de la simulation. Toutefois, pour les stratégies de tendance, l’utilisation de backtesting au niveau de la simulation peut toujours refléter dans une certaine mesure la performance de la stratégie.

D’où proviennent les données du système de backtesting de la plateforme de trading quantitative Inventor ? Le système de backtesting utilise par défaut les données du centre de données de la plateforme FMZ. Le centre de données de la plateforme FMZ collecte automatiquement les données de marché de chaque devise de chaque bourse et les fournit au système de backtesting de la plateforme.

La documentation de l’API FMZ contient également quelques instructions sur les sources de données personnalisées : https://www.fmz.com/api#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%BA%90
Il existe également quelques solutions dans la bibliothèque FMZ :

Les débutants intéressés peuvent l’étudier et s’y référer.
Le trading programmatique et quantitatif sont indissociablesétude、test、pense。 On ne peut pas penser aux problèmes dans le vide, ce serait inefficace. La manière la plus efficace de résoudre et de réfléchir aux problèmes estTrouver des informations,AlorsEssayez-le vous-même、Analyse de la penséeSi le problème n’est pas résolu, veuillez répéter les étapes ci-dessus.
Mais généralement, lorsqu’un débutant rencontre un problème, il ressent :
« Oh~ La programmation, la quantification et la rédaction de stratégies sont trop difficiles. » « Je l’observe depuis longtemps, mais je suis toujours confus ! » « Je n’ai pas encore commencé et j’ai envie d’abandonner ! » ….
Il est en fait très simple de démarrer sur la plateforme FMZ. Tout d’abord, vous devez être capable de trouver des informations. De nombreuses informations sont disponibles pour référence dans la plateforme de trading quantitatif Inventor Strategy Plaza, la communauté et la bibliothèque.

Ensuite, il y a la capacité pratique. L’utilisation du système de backtesting et des outils de débogage peut faciliter les tests. Cela ne signifie pas qu’il faut tester une stratégie complète. En fait, si vous n’avez absolument aucune connaissance de base, vous pouvez même apprendre les bases de la programmation JavaScript sur le système de backtesting quantitatif FMZ.
Il s’agit du site Web de didacticiel où j’apprends souvent JS : https://www.runoob.com/js/js-loop-for.html Il ne se limite pas à JS, toutes sortes de connaissances informatiques peuvent être recherchées et apprises ici. Par exemple, je ne sais pas comment utiliser l’expression régulière de JS, que dois-je faire ? Bien sûr, vérifiez d’abord les informations, puis essayez-les~
J’ai vu un exemple comme celui-ci :
Je veux le tester, et je peux même utiliser le système de backtesting de la plateforme FMZ pour tester et apprendre.
Mettre en place un échange aléatoire sur le système de backtest

Testez le code suivant :
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
function main() {
var strEmailAddress1 = "13512345678"
Log(strEmailAddress1, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress1))
var strEmailAddress2 = "[email protected]"
Log(strEmailAddress2, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress2))
}

Regardez, quel formidable outil d’apprentissage ! Par exemple, je veux apprendre à écrire une logique de boucle en JavaScript, alors essayons :
Parcourez les éléments d’une variable de tableau dans l’ordre dans lequel ils apparaissent dans le tableau :
function main() {
var arr = [{coinName: "BTC", price: 10000}, {coinName: "LTC", price: 100}, {coinName: "ETH", price: 2000}, {coinName: "ETC", price: 500}]
for (var i = 0 ; i < arr.length ; i++) {
Log(arr[i])
}
}

Vous sentez-vous motivé à étudier instantanément ? En fait, sur FMZ, vous pouvez regarder le didacticiel JavaScript tout en apprenant les bases de JavaScript sur le système de backtesting. La syntaxe JavaScript est presque maîtrisée. Pour passer à l’étape suivante, vous devez utiliser l’interface d’échange pour obtenir des données à tester. Vous pouvez également utiliser la plateforme FMZOutils de débogageEffectuer des tests d’interface réels.
Il faut alors réfléchir davantage, tirer des conclusions à partir d’un exemple, tester et vérifier, comparer et analyser, etc. De cette façon, vous pouvez démarrer très rapidement.