Les ressources ont été chargées... Je charge...

FMZ Stratégie de la plate-forme de quantification de l'écriture de tutoriels pour les débutants (obligatoire)

Auteur:Le foin, Créé: 2019-08-13 17:47:27, Mis à jour: 2021-08-06 10:29:46

L'inconvénient de ce mécanisme est évident: sur une ligne K, il n'y a qu'une seule transaction, généralement basée sur le prix de clôture de la ligne K. Et une ligne K n'a accès qu'à quatre prix de rachat et d'achat, et aucune information n'est obtenue sur la façon dont les prix changent sur une ligne K, que le prix le plus élevé se produise d'abord ou le prix le plus bas se produise d'abord.

La plate-forme FMZ utilise deux types de régression à l'échelle de l'analogie et à l'échelle du disque réel. La régression à l'échelle de l'analogie génère une simulation basée sur le tick du cycle de la ligne K de base, qui générera 14 points de régression sur chaque cycle de la ligne K de base.Le niveau de disque réel est un vrai tick collecté, environ une fois toutes les quelques secondes, qui supporte actuellement une partie de la profondeur réelle (contient 20 fichiers) et de la transaction réelle par pioche.Les données sont volumineuses et le taux de retouche lent, ce qui ne permet pas de retoucher des temps particulièrement longs. Le mécanisme de retouche FMZ permet à la stratégie d'effectuer plusieurs transactions sur une ligne K, évitant ainsi de ne pouvoir conclure que des transactions à prix de vente, et est plus précis et prend en compte le taux de retouche.https://www.fmz.com/digest-topic/4009

Le cadre de stratégie de la répétition est le même que pour le disque dur, c'est un cycle mort. Comme la répétition saute sur différents points de répétition, il est possible de ne pas utiliser Sleep, qui saute automatiquement au point de temps suivant à la fin d'un cycle.Sleep(10)Il a été arrêté à l'hôpital.

Capture d'écran du test

Le moteur de retouche se base sur le prix d'achat et le prix d'échange de l'utilisateur au moment du retouche. Si le prix d'achat est supérieur à celui de la vente, une transaction est vendue. Si la transaction n'est pas effectuée, une liste d'attente est générée.

Paramètres de page de révision

img

  • 1.回测页面的选择,左侧是策略编辑页面。
  • 2.回测起始结束时间,由于数据不完整,回测可能直接从有数据的时间开始。
  • 3.回测GetRecords()Les cycles par défaut des fonctions peuvent également être spécifiés dans le code.
  • 4.回测机制的选择。
  • 5.展示或隐藏跟多回测设置。
  • 6.最大日志数、收益数据数、图表数据数等,为了防止数据量过大导致浏览器卡死。
  • 6.底层tick生成依据K线周期。
  • 7.交易滑点。
  • 7.容错,会模拟API请求出错情况,检查策略容错能力。
  • 8.是否绘制行情图标,回测中如果使用了TA指标函数,会自展示在图标上,买卖也会标记。
  • 9.手续费设置
  • 10. Ajouter des échanges - paires de transactions et actifs.
  • 11.回测参数设置,如果参数是数字还支持一键优化参数,自动按照一定范围遍历参数回测。

Différences entre le retest et le disque

  • 1.回测时有效的行情只有GetTicker和GetRecords,其它如获深度、成交历史都不是真实的(因为数据量太大,实盘级回测目前已经支持这些数据,但只有最近数据)。
  • 2.回测添加的交易所都是独立账户,目前不支持切换交易对。因此无法在一个账户里操作两个交易对。
  • 3.回测中无法使用网络请求。
  • 4.回测无法使用IO扩展,只能操作最基础的API。
  • 5.回测只能获取标准的数据,像Info之类的牵扯到实盘的数据不存在。
  • 6.回测中也有可能不成交,注意冻结订单情况。
  • 7.商品期货回测不支持市价单。

Les erreurs stratégiques et les erreurs courantes

Comme nous l'avons dit plus haut, il est possible d'avoir des erreurs d'accès en utilisant l'API sur le disque dur.nullLa stratégie consiste à faire preuve de tolérance aux erreurs, car cela entraînerait des erreurs et l'arrêt du disque dur.

Le mal-entendu est fréquent

Les erreurs courantes:

  • L'API accède à une erreur de réseau, le retard d'accès à l'interface renvoie à zéro, ce qui signifie que l'utilisation est une erreur.
  • L'échange limite les erreurs telles que les restrictions d'ip, la précision de la commande, la fréquence d'accès, les erreurs de paramètres, les insuffisances d'actifs, l'impossibilité de négocier sur le marché, l'annulation d'ordres passés, etc. Vous pouvez consulter la documentation de l'API en fonction des codes d'erreur.
  • Les échanges renvoient parfois des erreurs de données, telles que la profondeur de retour vide, les informations de compte retardées, l'état de l'ordre retardé, etc.
  • Une erreur logique de programmation.

Avant d'utiliser l'API pour retourner les données, il est nécessaire de juger si elles sont nuls ou non. Voici une méthode couramment utilisée pour regrouper les données:

//1.判断为null进行处理
var ticker = exchange.GetTicker();
while(ticker == null){
     Log('ticker 获取出错');
     ticker = exchange.GetTicker();
 }
 Log(ticker.Last);
 // 2.判断不为null再进行引用
 var ticker = exchange.GetTicker();
 if(!ticker){
     Log(ticker.Last);
 }
 // 3._C()函数重试
 var ticker = _C(exchange.GetTicker);
 Log(ticker.Last);
 // 4. try catch容错
 try{
     var ticker = exchange.GetTicker();
     Log(ticker.Last);
 }
 catch(err){
     Log('ticker 获取出错');
 } 

Si vous voulez obtenir des informations erronées, vous pouvez les utiliserGetLastError(), qui renvoie la dernière chaîne d'informations d'erreur, et peut traiter les erreurs différemment.

Questions fréquemment posées

Les articles publiés sur les forums sont souvent mal résumés:https://www.fmz.com/bbs-topic/1427Vous trouverez ci-dessous un résumé des problèmes que vous pouvez rencontrer en utilisant Ctrl+F.

Comment mettre en place des gardiens?

Pour plus de détails, voir la section Ajouter des hôtes.

Comment trouver des stratégies d'écriture pour les gens?

https://www.fmz.com/marketsCertains offrent des services de rédaction ou de conseil en groupe, mais ils ont besoin de contacts personnels à leurs propres risques.

Accéder à toutes les interfaces indique une date d'expiration

L'accès à l'interface de l'échange est retardé, ce qui n'est pas un problème si cela se produit de temps en temps, mais si vous êtes toujours invité à utiliser un serveur à l'étranger si le réseau dans lequel vous vous trouvez ne peut pas être accédé.

Une erreur est survenue.

Les erreurs du système de retouche, généralement des erreurs de stratégie, provoquent des tentatives de mise en place d'une position nulle ou d'un nombre insuffisant de positions.

symbole non défini

Les échanges de contrats à terme sont réévalués, il n'y a pas de contrats définis dans le code, voir la fonction exchange.SetContractType

BITMEX 429 erreur, {error:{message:Rate limit exceeded retry in 1 seconds......}}

Les fréquences d'accès aux interfaces des bourses sont trop élevées.

L'heure est hors de portée.

Le serveur doit être mis à jour en fonction de la durée du serveur, il ne peut pas être trop dévié.

GetOrder ((455284455): Erreur: ID de commande invalide ou commande annulée.

Certains échanges ont annulé des commandes et n'ont pas accès à cette information, car ils ne la conservent pas.

Je suis désolée. Je suis désolée.

Une paire de transactions invalide est vérifiée pour vérifier si une erreur de configuration de la paire de transactions a été commise.

Déchiffrement de clé secrète échoué

Si vous avez modifié le mot de passe FMZ après la configuration d'APIKEY, essayez d'ajouter une page d'échange dans FMZ et de reconfigurer l'APIKEY de l'échange.

Signature not valid: Temps de soumission invalide ou format de temps incorrect

Il est recommandé d'utiliser un serveur Linux ou un logiciel de synchronisation de temps d'installation sur les systèmes Windows où le problème se pose.

Pourquoi mettre en place un agent global et empêcher les administrateurs d'accéder à l'API de l'échange?

Les agents mondiaux n'ont pas de ports réseau pour les hôtes d'agents, il est préférable de déployer des hôtes de serveurs étrangers en raison de problèmes de latence.

Comment les stratégies sont-elles conservées localement plutôt que sur les FMZ téléchargées?

L'utilisation de Python permet d'importer des fichiers locaux, d'enregistrer des stratégies normalement écrites selon l'API FMZ dans un fichier sur son propre serveur sous le chemin d'exécution, et de lire directement l'exécution.

#!python2.7

def run(runfile):
      with open(runfile,"r") as f:
            exec(f.read())
            
def main():
    run('my.py')

Comment utiliser le testnet de l'échange ou modifier l'adresse de base de l'API

Vous pouvez utiliser l'exchange.SetBase (*) pour passer directement à l'adresse de base de l'API correspondante:

exchange.SetBase("https://www.okex.me")

Plus de

le gaoencheerapes

La scienceJ'ai écrit une simple déclaration de sortie Log et j'ai suivi l'opération à la fin de la phrase. La première étape consiste à utiliser un ordinateur portable comme serveur et à exécuter le programme administrateur. La deuxième étape consiste à écrire un simple logiciel de test.py pour l'exportation des informations de Log (la fonction d'interface API de FMZ); La troisième étape, comme à la fin du texte, est d'écrire un runfile et d'appeler test.py via run.py.

- Je vous en prie.J'ai acheté un cours de quantification du cloud sur NetEase, mais je n'ai pas trouvé où aller maintenant.

MonurajakBeaucoup

MonurajakJe vous en prie.

Je ne sais pas.Apprendre

- Je ne sais pas.Il y a une petite erreur d'orthographe, GetAccount obtient le compte.

Je vous en prie, capitaine.getorder outtime: le temps d'expiration de l'ordre, l'échange d'Okex, comment faire?

Les 12 tours de l'OumuamuaLe taux d'actifs garantis n'est-il pas disponible et sera imposé à 0% au niveau des taux d'actifs garantis?

Le projet de loiJ'utilise un diagramme de k minutes, donc le temps de sommeil du cycle mort de Python peut être réglé à 0,1 s, c'est-à-dire à 100 s. J'ai vu que vous y avez écrit un sommeil de 10 s, c'est-à-dire que 0,1 s ne dépasse pas la limite de l'API de huobi HM.

Le bâtiment de l'EstExchange.SetDirection (("closebuy"); // Si c'est un contrat à durée indéterminée, installez directement exchange.SetDirection (("sell") J'ai essayé le contrat permanent OKex ici, et si vous le mettez sur sell, il est immédiatement vide, pas très bon marché.

Le bâtiment de l'EstExchange.SetDirection (("closebuy"); // Si c'est un contrat à durée indéterminée, installez directement exchange.SetDirection (("sell") J'ai essayé le contrat permanent OKex ici, et si vous le mettez sur sell, il est immédiatement vide, pas très bon marché.

Le bâtiment de l'EstIl y a deux fautes d'orthographe dans le code de GetOrders. Une fonction est écrite comme une fonction, l'autre comme une condition de la boucle for.

Le bâtiment de l'EstC'est moi qui ai fait une erreur. exchange.Buy ((-1, 0.5), la paire de transactions est ETH_BTC, le prix de vente représente l'achat d'ETH de 0.5BTC exchange.Buy ((price, 0.5), si c'est une liste de prix limitée, représente l'achat de 0.5ETH au prix de ce prix.

Le bâtiment de l'Estexchange.Buy ((-1, 0.5), la paire de transactions est ETH_BTC, ce qui représente l'achat d'ETH de 0.5BTC au prix du marché C'est le prix du marché pour acheter 0.5 ETH de lithium.

- Je vous en prie.Merci beaucoup.

Le foinIl est disponible en ligne depuis le début de l'année.

Le foinNous avons ajouté WeChat à la page d'accueil pour vous intégrer.

- Je ne sais pas.J'ai des problèmes à vous demander si vous avez un groupe de discussion officiel?

Le foinModifié

Le foinEncore une fois

Le foinVous pouvez utiliser GetRawJSON ou voir les informations dans les champs d'info.

Le bâtiment de l'EstC'est bien, c'est bien, et il y a aussi la réponse de l'administrateur.

Le foinOh, c'est corrigé, merci de souligner l'erreur.

Le foinCertains contrats perpétuels permettent de détenir des titres bidirectionnels et nécessitent une mise à niveau.