FMZ lance le moteur de détection natif Python

Auteur:Le petit rêve, Créé: 2018-04-13 09:48:31, Mis à jour: 2019-08-19 16:30:05

FMZ lance le moteur de détection natif Python

Le moteur de test de retour FMZ Le moteur de révision FMZ Python Il est également compatible avec Python 2 et Python 3, Windows, Linux, Mac Prise en charge de python2 et python3, prise en charge des systèmes Windows, Linux, Apple Mac OS

installer

Installation Dans la ligne de commande, entrez la commande suivante:

pip install https://github.com/fmzquant/backtest_python/archive/master.zip
  • Attention: Lors de l'installation d'un système Apple Mac, si des restrictions de sécurité sont imposées, il est nécessaire d'ajouter la commande sudo avant la commande pip, qui vous demandera de saisir le mot de passe du système avant l'exécution de toute la commande d'installation.

un exemple simple

Un exemple simple

'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
'''
from fmz import *
task = VCtx(__doc__) # initialize backtest engine from __doc__
print exchange.GetAccount()
print exchange.GetTicker()
print task.Join() # print backtest result

La chaîne de configuration peut être générée automatiquement en enregistrant la configuration de backtest dans la page d'édition de stratégie. Les chaînes de configuration peuvent être générées automatiquement en sauvegardant les paramètres de retouche dans l'interface d'édition de stratégie

meta

la documentation

Documentation de l'API: (c'est-à-dire le document qui appelle une fonction telle que GetAccount dans le cas)

Le code Python est une simple annotation:

'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
'''
from fmz import *                                                  # 引用 发明者量化 库
task = VCtx(__doc__) # initialize backtest engine from __doc__     # 调用 VCtx 函数 根据 __doc__初始化。
print exchange.GetAccount()                                        # 测试 GetAccount 函数,并打印 回测系统测试交易所账户信息
print exchange.GetTicker()                                         # 测试 GetTicker 函数,并打印 回测系统 行情信息
print task.Join() # print backtest result                          # 调用 初始化后的 task 对象 显示回测结果
  • Je suis désolé.

    是两个下划线。__doc__用来访问模块,类声明或者函数的声明中第一个未被赋值的字符串,
    可以是被""" ""","" "",' ',括起来的,作用就是把 代码中 '''backtest   ...  ''' 的回测配置信息  传入 VCtx 类构造函数构造对象。
    
  • Modifiez le code de test pour voir comment les fonctions Log, GetTicker sont appelées.

    # coding=UTF-8
    
    '''backtest
    start: 2018-02-19 00:00:00
    end: 2018-03-22 12:00:00
    period: 15m
    exchanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}]
    '''
    
    from fmz import *                                                # 引用 发明者量化 库
    task = VCtx(__doc__) # initialize backtest engine from __doc__     # 调用 VCtx 函数 根据 __doc__初始化。
    print exchange.GetAccount()                                        # 测试 GetAccount 函数,并打印 回测系统测试交易所账户信息
    Log("\n 调用Log")
    Log("调用 exchange.GetTicker() : ", exchange.GetTicker())
    print task.Join() # print backtest result                          # 调用 初始化后的 task 对象 显示回测结果
    
    • L'exécution du code print exchange.GetAccount () est la suivante:
    {'Balance': 3.0, 'Stocks': 0.0, 'FrozenBalance': 0.0, 'FrozenStocks': 0.0}
    
    • L'appel à l'aide de l'appareil est effectué par l'intermédiaire de l'appareil.

    Le contenu de la sortie est dans la structure de la sortie de données print task.Join:

    {
        "Chart": {
     	   "Cfg": "",
     	   "Datas": []
        },
        "Elapsed": 42000000,
        "Finished": true,
        "Indicators": {},
        "LoadBytes": 441845,
        "LoadElapsed": 24000000,
        "LogsCount": 2,
        "Profit": 0.0,
        "ProfitLogs": [],
        "Progress": 100.0,
        "RuntimeLogs": [                                                  # 调用输出内容在此处
     	   [1, 1518969600200, 5, "", 0, 0.0, 0.0, "\n 调用Log", "", ""],
     	   [2, 1518969600400, 5, "", 0, 0.0, 0.0, "调用 exchange.GetTicker() :  {'Sell': 0.02113476, 'Volume': 519.6953, 'Buy': 0.02113474, 'Last': 0.02113475, 'High': 0.02113476, 'Time': 1518969600000L, 'Low': 0.02113474}", "", ""]
        ],
        "Snapshort": [{
     	   "Balance": 3.0,
     	   "BaseCurrency": "LTC",
     	   "Commission": 0.0,
     	   "FrozenBalance": 0.0,
     	   "FrozenStocks": 0.0,
     	   "Id": "OKEX",
     	   "QuoteCurrency": "BTC",
     	   "Stocks": 0.0,
     	   "Symbols": {
     		   "LTC_BTC_OKEX": {
     			   "Last": 0.01893785
     		   }
     	   },
     	   "TradeStatus": {}
        }],
        "Status": "",
        "Task": {
     	   "Args": null,
     	   "Exchanges": [{
     		   "Balance": 3,
     		   "BaseCurrency": "LTC",
     		   "BasePeriod": 300000,
     		   "BasePrecision": 4,
     		   "DepthDeep": 5,
     		   "FaultTolerant": 0,
     		   "FeeDenominator": 5,
     		   "FeeMaker": 75,
     		   "FeeMin": 0,
     		   "FeeTaker": 80,
     		   "Id": "OKEX",
     		   "Label": "OKEX",
     		   "PriceTick": 1e-08,
     		   "QuoteCurrency": "BTC",
     		   "QuotePrecision": 8,
     		   "SlipPoint": 0,
     		   "Stocks": 0
     	   }],
     	   "Options": {
     		   "DataServer": "q.botvs.net",
     		   "MaxChartLogs": 800,
     		   "MaxProfitLogs": 800,
     		   "MaxRuntimeLogs": 800,
     		   "NetDelay": 200,
     		   "Period": 900000,
     		   "RetFlags": 189,
     		   "SnapshortPeriod": 300000,
     		   "TimeBegin": 1518969600,
     		   "TimeEnd": 1521691200,
     		   "UpdatePeriod": 5000
     	   }
        },
        "TaskStatus": 1,
        "Time": 1521691200000
    }
    
  • Comment utiliser une stratégie pour faire des retours dans un moteur de retours local

# !/usr/local/bin/python
# -*- coding: UTF-8 -*-
'''backtest
start: 2018-02-19 00:00:00
end: 2018-03-22 12:00:00
period: 15m
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD","balance":10000,"stocks":3}]
'''
import sys
sys.path.append("/usr/local/lib/python2.7/site-packages")    # 测试时添加了路径,如不需要可以删除

from fmz import *
import math
import talib

task = VCtx(__doc__) # initialize backtest engine from __doc__

# ------------------------------ 策略部分开始 --------------------------
print exchange.GetAccount()     # 调用一些接口,打印其返回值。
print exchange.GetTicker()

def adjustFloat(v):             # 策略中自定义的函数
    v = math.floor(v * 1000)
    return v / 1000

def onTick(e):
    Log("onTick")
    # ....

#
# ...
# 
# 此处省略 自定义函数实现等代码。

def main():
    InitAccount = GetAccount()
    
    while True:
        onTick(exchange)
        Sleep(1000)
# ------------------------------ 策略部分结束 --------------------------

try:
    main()                     # 回测结束时会 raise EOFError() 抛出异常,来停止回测的循环。所以要对这个异常处理,在检测到抛出的异常后调用 task.Join() 打印回测结果。
except:
    print task.Join()          # print backtest result  , 打印回测结果。

Plus de

Je suis désolée./Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py:793: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS ajoute une surcharge significative et sera désactivée par défaut à l'avenir. Attention à la réaction de l'utilisateur. Traceback (le dernier appel le plus récent): Fichier "/Users/taoxing/Desktop/quant/trading_api_study/fmz/fmz_extend_api_demo/app.py", ligne 152, dans db.create_all (en anglais) Le fichier "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", ligne 963, dans le cadre de la création de tout L'exécution de l'opération est effectuée par l'utilisateur. Le fichier "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", ligne 955, dans _execute_for_all_tables, est également disponible. Op ((bind=self.get_engine ((app, bind), **extra) est un logiciel de connexion pour les appareils mobiles. Fichier "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", ligne 896, dans le moteur de recherche retour connector.get_engine Fichier "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", ligne 556, dans le moteur de recherche Je ne peux pas vous aider. Je peux vous aider. Le fichier "/Users/taoxing/opt/anaconda3/envs/ai4f/lib/python3.8/site-packages/flask_sqlalchemy/__init__.py", ligne 861, dans appliquer le pilote Il est possible d'envoyer des messages à l'adresse suivante: AttributeError: ne peut pas définir l'attribut Il y a des gens qui se disent que c'est une erreur, ils demandent à Dieu de les guider!

le guanyuwanglei 我想运行实盘机器人,添加Wex.app交易所相当于实盘模拟交易是吧?谢谢

le guanyuwangleiMais il y a seulement un point de données de récupération de disque réel, quels paramètres peuvent être optimisés pour obtenir plus de données de disque réel? /upload/asset/105f604eaceb0d3928a90.png /upload/asset/1066714d9a32c82eab7f1.png

le guanyuwangleiBonjour, je souhaite utiliser une paire de transactions de jetons cash husd/usdt, j'ai essayé exchange.IO (("currency", "HUSD_USDT"), exchange.IO (("currency", "HUSD/USDT"), exchange.IO (("currency", "HUSDUSDT"), non exécuté ou échec de souscription de variété, s'il vous plaît, quelle est la bonne orthographe? merci

Une tendresse quotidienneLes résultats de ce test sont incroyables, comment les visualiser?

le guanyuwangleiS'il vous plaît, sur Windows, Exchange ne peut pas trouver la solution, merci

- Je vous en prie.Si le système de retouche prend en charge relativement peu de paires de transactions, est-ce que ce projet open source permet à ses développeurs d'ajouter des paires de transactions?

1058715329Quand est-ce que l'optimisation des paramètres locaux peut être prise en charge?

Une feuille de savoirJ'ai téléchargé la bibliothèque de fmz, mais j'ai eu une erreur lors de l'utilisation et je ne peux pas trouver où se trouve le package.

Nous sommesComment définir le mode Tick? Par défaut, il semble que vous utilisez un Tick de niveau analogique, comment passer à un Tick de niveau réel

le chinoisSi vous voulez savoir où la fonction principale d'une stratégie devrait être dans cet exemple, vous devez savoir où la fonction principale d'une stratégie devrait être dans cet exemple.

le chinoisJe suis en train de changer le programme BTC_USDT et j'ai une erreur.

Je suis Teddy.Est-ce que je devrais écrire print (exchange.GetTicker))) dans Python 3?

le nombre de cyclesLes retours sur la plateforme ne sont pas un problème, les retours locaux font souvent des erreurs.

liputDans fmz, on écrit la main fonction elle-même, et on voit que la plupart des stratégies s'écrivent elles-mêmes while True, puis on appelle la stratégie en boucle. Mais quand on utilise le moteur de redirection natif de python, while True laisse le programme fonctionner, ne peut pas s'arrêter de fonctionner à l'heure de début et à l'heure de fin indiquée par __doc__, et donne une sortie de Log. De plus, je vois sur d'autres plates-formes de quantification que les fonctions spécifiées sont généralement écrites uniquement par le développeur, puis rappelées par la plate-forme. fmz permet d'écrire directement les entrées principales, y a-t-il des avantages ou des considérations de conception ou d'architecture?

liputLes variables d'entrée d'interaction dans le code, comment les écrire dans _doc__, ou les saisir comme des paramètres?

liputLe code a été modifié en fmz, l'exemple de code dans la documentation doit être renommé par package.

Oui Ouile main (()) est normal L'expérience montre qu'il y a des erreurs dans les échanges d'appels. Fichier "D:/workspace/strategy/strategy_001.py", ligne 101, dans la partie principale compte = self._exchange.GetAccount (() Fichier "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", ligne 716, dans le compte GetAccount Je ne sais pas. Fichier "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botvs.py", ligne 569, dans EOF Raise EOFError (en anglais seulement)

topscienQuel est le rôle de cette chose?

Je suis Lizza.Je n'ai pas bien compris comment faire, mais le référencement local a-t-il besoin de communiquer avec la plateforme botvs?

Le petit rêveEssayez avec le dernier pack fmz.

Le petit rêveL'hébergeur est gratuit, mais le déploiement d'une clé est une location automatique d'un serveur d'Ali Cloud, le coût étant le coût du serveur.

le guanyuwangleiC'est évident, c'est le gestionnaire qui paie, et le robot peut choisir de tester WexApp, ou choisir de faire des transactions en direct sur de vrais échanges, non?

Le petit rêveUn hôte de déploiement, déployé sur le serveur Ali Cloud, est payant et sera facturé sur le solde de votre compte. Le robot fonctionne uniquement sur l'analogue wexApp, les frais du robot ne sont pas facturés et ne sont pas liés aux frais d'un hôte de déploiement.

le guanyuwangleiC'est-à-dire qu'avec un seul clic, vous pouvez déployer un serveur, choisir entre WexApp, un robot et un échange analogique, et tester l'effet d'analyses, n'est-ce pas?

Le petit rêveLe simple fait de déployer un serveur à louer est une autre charge supplémentaire. Il n'y a pas de frais de disque réel pour le robot, l'utilisation du disque WexApp indique simplement que le robot fonctionne gratuitement (le robot de crypto-monnaie est facturé pour l'ajout de n'importe quel objet d'un disque d'échange non WexApp).

le guanyuwangleiUne clé pour louer un gestionnaire et utiliser l'échange wexApp gratuitement? /upload/asset/1066e4b56fa103356dbc1.png

Le petit rêveWexApp est un simulateur gratuit de FMZ.

Le petit rêveJe suis désolée.

Le petit rêveLes données de retouche au niveau du disque réel sont relativement grandes, le paramètre indiqué ci-dessus est déjà optimal.

le guanyuwangleiAu lieu de cela, pour les périodes récentes, la paire de transactions, exchange.SetCurrency ("BTC_USDT"), peut être mise en ligne, merci beaucoup.

Le petit rêveEssayez de changer la période la plus récente.

le guanyuwangleiIl s'agit d'un projet de loi qui vise à améliorer l'accès à l'information. Dans le code, définissez ceci comme exchange.SetCurrency (("BTC_USDT") Mais l'invite de l'abonnement à la variété de soupçons échoue BTC_USDT_OKEX soupçon ou rien n'apparaît, déconnectez-vous immédiatement

le guanyuwangleiMerci beaucoup.

Le petit rêveLes données du centre de données FMZ, utilisées pour la mise à jour des disques, la mise à jour des plates-formes et les moteurs de mise à jour locaux, offrent un nombre limité de paires de transactions, mais pas toutes les paires.

le guanyuwangleiLes vrais commerces peuvent-ils obtenir ce genre de transactions?

Le petit rêveLe système de retouche n'a pas de données sur cette paire de transactions pour le moment.

Le petit rêveLe résultat de la retouche est une forme de données, si vous voulez visualiser, vous devez écrire votre propre code de résolution. Sinon, vous pouvez utiliser un système de retouche en ligne.

le guanyuwangleiA5: = MA (C,5); A10: = MA (C,10); angle: IF (CROSS) (A5, A10), ATAN (A5/REF) (A5, 1) - 1) * 100) - ATAN (A10/REF) (A10, 1) - 1) * 100), 0* 180/3.1416; Je ne sais pas comment faire pour obtenir cette formule.

Le petit rêveLa formule doit être calculée en fonction des besoins, dans la stratégie, et la formule peut être recherchée sur Baidu.

le guanyuwangleiS'il vous plaît, comment calculer macd angle de la fourchette métallique \ fourchette morte, y a-t-il une formule pour cela?

le guanyuwangleiS'il vous plaît, importer des modèles de statistiques dans l'éditeur de stratégie est invalide, s'il vous plaît, où est-ce que je peux importer des bibliothèques tierces? Je peux importer dans pycharm, mais comment importer dans l'éditeur?

Le petit rêveC'est l'heure de début de la ligne K fixe, et si vous avez besoin d'une ligne K quotidienne à partir de zéro, vous pouvez synthétiser la ligne K en une heure.

le guanyuwangleiS'il vous plaît, est-ce que la clôture indiquée dans le code et la clôture indiquée dans le récapitulatif sont tous les deux à 8h00 heure de Beijing? Si l'heure de clôture n'est pas 8h00, s'il vous plaît demander comment le configurer, merci /upload/asset/1067eabe09e92d1610d71.png

Le petit rêveVous pouvez trouver des exemples de stratégies sur Strategy Square, et si vous comprenez tout, vous pouvez écrire des stratégies simples à la main.

le guanyuwangleiJ'ai fini de lire les manuels de base, les méthodes d'utilisation de FMZ et la documentation API, je devrais voir les connaissances à venir?

Le petit rêveJe suis désolée.

le guanyuwangleiMerci beaucoup.

Le petit rêveCette fonction peut être exécutée directement à la ligne de commande.

le guanyuwangleiLe code que j'exécute dans un fichier.py nécessite l'importation de ccxt, sinon l'exchange ne peut pas le reconnaître. L'éditeur Python Consle peut fonctionner normalement.

Le petit rêveIl n'y a pas d'utilisation, un programme Python ordinaire peut être exécuté.

le guanyuwangleiIl est possible de télécharger le fichier /upload/asset/106d6ff1919bdac419875.png L'échange d'importation de ccxt fonctionne, fmz utilise ccxt? Vous ne l'avez pas remarqué?

Le petit rêveJe viens de tester ceci: Nom du fichier testBackTest Je ne sais pas. Importé de fmz * Le test est effectué par le testateur. Je suis désolée. end: 2018-03-22 12:00:00 période: 15 m Les échanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] Je ne sais pas. # créer un backtest Print (exchange.GetAccount) est une plateforme de messagerie en ligne. Je suis en train d'écrire un article sur ce sujet. Je ne sais pas. Je ne peux pas vous dire ce que je fais.

Le petit rêveJe viens de télécharger le test de la dernière version de fmz python.

le guanyuwanglei/upload/asset/1068d63bc6203599fc1c8.png Vous pouvez télécharger le fichier Modifier l'initialisation, mais l'exchange, Log ne peut toujours pas être reconnu

Le petit rêveJe ne sais pas. Importé de fmz * Le test est effectué par le testateur. Je suis désolée. end: 2018-03-22 12:00:00 période: 15 m Les échanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] Je ne sais pas. # Créer un environnement de retouche Je ne sais pas. Il s'agit d'un processus de réinitialisation qui permet de configurer les informations relatives aux échanges, aux paires de transactions, etc. comme lors d'une révision en ligne.

le guanyuwangleiIl est également possible de télécharger des fichiers sur les réseaux sociaux, y compris les réseaux sociaux. L'échange n'est pas reconnu, le paquet fmz est déjà installé dans Python.

Le petit rêveLe blogueur a écrit:

Le petit rêvePour l'instant, cela n'est pas possible, car les données de retouche sont obtenues à partir de FMZ. Cependant, le code est open source et peut être modifié et remplacé à volonté.

Le petit rêveJe ne sais pas. /* test de retour Je vous en prie, faites-moi confiance. End: 2019-10-20 00:00:00 Je suis désolé période: 1h Les échanges: [{"eid:"Bitfinex","currency:"BTC_USD"}] mode: 1 Je suis désolé. Je ne sais pas. Par l'intermédiaire de l'option ``mode `` dans l'information de configuration, vous pouvez la configurer sur la page de réinitialisation, puis enregistrer directement l'option de réinitialisation sur la page d'édition de la politique pour accéder à la chaîne d'information de configuration.

À la suiteJe ne sais pas.

le chouJe sais.

XénideLe sommet

Le petit rêveBon, cette note n'est pas prise en charge pour le moment.

Une feuille de savoirBien, merci.

Le petit rêveNous avons trouvé un problème et nous le traitons.

Une feuille de savoirOui, c'est le cas pour mac os 10.14.4.

Le petit rêveVotre système d'exploitation est Mac OSX?

Une feuille de savoirJ'utilise conda pour gérer la version de python, je confirme avoir téléchargé la version de python de fmz, la version locale est également disponible. Mais j'ai vu que c'est écrit sur le site officiel pour soutenir python3, mais j'ai eu ce problème quand j'ai essayé.

Le petit rêveSi vous avez plusieurs versions de python, vérifiez où le package est installé.

Le petit rêveLe message a été mis à jour, vous pouvez consulter le dernier exemple.

Le petit rêveLa fonction main est écrite, elle est appelée directement.

le chinois https://github.com/fmzquant/backtest_python/issues/4,看看这个有没有帮助

Le petit rêveLes informations erronées, en particulier, peuvent être vues sur la capture d'écran.

le chinoisC'est que le code d'exemple est devenu BTC_USDT et il est devenu erroné.

Le petit rêveIl s'agit de choisir quelle bourse réévaluer.

Le petit rêvePour voir plus précisément, le message d'erreur est le mauvais emplacement.

Le petit rêveFMZ utilise une architecture de consultation, ce qui donne une plus grande maîtrise des processus et une plus grande flexibilité dans la rédaction des stratégies.

Le petit rêveLe test de retour Je suis désolée. end: 2018-03-22 12:00:00 période: 15 m Les échanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] Je ne sais pas. Ce sont:

Le petit rêveIl y a quelques modifications.

Le petit rêveFichier Démarrer le chargement Cette configuration de compte simulé, si elle est écrite dans la classe, ne peut pas être chargée.

Oui OuiLa configuration devrait être correcte. Pourquoi ne peut-on pas écrire des références dans une classe?

Oui OuiLes données de votre compte sont-elles les lignes suivantes? Il y a une référence normale dans la fonction globale main. Mais il a fait une erreur en classe. Le test de retour Je suis désolée. end: 2018-03-22 12:00:00 période: 15 m Les échanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] Je ne sais pas. depuis botvs import * Task = VCtx (__doc__) # initialize backtest engine from __doc__ Le moteur de test est en cours de développement.

Le petit rêveJe ne sais pas. Déf GetAccount ((self): r = _ACCOUNT ()) Ret = self.lib.api_Exchange_GetAccount ((self.ctx, self.idx, ctypes.byref)) Si ret == API_ERR_SUCCESS: retour r.toObj Il s'agit d'un projet de loi qui vise à améliorer la qualité de vie des personnes. retourner Aucun EOF ((() Je ne sais pas. En regardant le code ci-dessous, il semble qu'il s'agisse d'une interface pour une DLL appelée api_Exchange_GetAccount, et vous recevez un message d'erreur indiquant qu'aucun appel n'a été renvoyé, ni aucun appel n'a été renvoyé, puis vous exécutez EOF.

Le petit rêveIl s'agit d'emballer le système de retouche dans une bibliothèque python, permettant à Python locale de faire des stratégies de retouche.

Le petit rêveIl y a une communication, une demande de données est faite lors de la retouche, mais le système de retouche est exécuté localement. Je ne sais pas. Le test de retour Je suis désolée. end: 2018-03-22 12:00:00 période: 15 m Les échanges: [{"eid":"OKEX","currency":"LTC_BTC","balance":3,"stocks":0}] Je ne sais pas. depuis botvs import * Task = VCtx (__doc__) # initialize backtest engine from __doc__ Le moteur de test est en cours de développement. Print exchange.GetAccount (en anglais seulement) Print exchange.GetTicker (en anglais seulement) Print task.Join ((() # print backtest result Je suis en train d'essayer de le faire. Je ne sais pas. Ce passage de code est similaire à une stratégie, le système de retouche est enveloppé dans une bibliothèque, test est appelé fonction du système de retouche au moment de l'exécution. Le '' 'backtest... '' ci-dessus est le paramètre de réglage de la vérification qui peut être généré sur la page de vérification de la politique BotVS.