Guide de démarrage rapide QTEASY
Installation et dépendances
Installation via pip
$ pip install qteasy
Version de Python
pythonversion >= 3.6, <3.13
Installation des dépendances
Toutes les dépendances nécessaires à qteasy peuvent être installées en même temps que pip, mais dans certains cas spécifiques, vous devez spécifier les dépendances facultatives lors de l’installation, afin de les installer en même temps que qteasy, ou de les installer manuellement :
pymysql, À partir dev1.4,pymysqletdb-utilssont devenus des dépendances par défaut deqteasy, pas besoin de les installer séparémentpyarrow, Utilisé pour manipuler les fichiersfeather, stocker les données locales dans des fichiersfeather,pyarrowpeut être installé automatiquement lors de l’installation$ pip install 'qteasy[feather]' # 安装qteasy时自动安装pyarrow $ pip install pyarrow # 手动安装pyarrow
pytables, Utilisé pour manipuler les fichiersHDF, stocker les données locales dans des fichiersHDF,pytablesne peut pas être installé automatiquement, vous devez l’installer manuellement avecconda:$ conda install pytables # 安装pytables
ta-lib, pour utiliser toutes les stratégies de trading intégrées, la méthode suivante peut être utilisée pour installer l’APIta-lib, mais elle dépend également du packageTA-Liben C, veuillez vous référer à la méthode d’installation dans FAQ$ pip install 'qteasy[talib]' # 安装qteasy时自动安装ta-lib $ pip install ta-lib # 手动安装ta-lib
10 minutes pour comprendre les fonctionnalités de qteasy
Importer qteasy
La méthode d’importation de base du module est la suivante
import qteasy as qt
print(qt.__version__)
Télécharger des données historiques financières
Pour télécharger des données de prix financières, utilisez la fonction qt.refill_data_source(). Le code suivant télécharge les données K-line quotidiennes de toutes les actions et tous les indices de 2021 et 2022, et télécharge également les données d’informations de base de toutes les actions et fonds. (En fonction de la vitesse du réseau, le téléchargement des données peut prendre environ dix minutes. Si elles sont stockées dans un fichier csv, elles occuperont environ 200 Mo d’espace disque) :
qt.refill_data_source(
tables=['stock_daily', # 股票的日线价格
'index_daily', # 指数的日线价格
'basics'], # 股票和基金的基本信息
start_date='20210101', # 下载数据的起止时间
end_date='20221231',
)
Une fois les données téléchargées localement, vous pouvez utiliser qt.get_history_data() pour obtenir les données. Si vous obtenez les données historiques de plusieurs actions en même temps, les données historiques de chaque action seront enregistrées séparément dans un dict.
qt.get_history_data(htypes='open, high, low, close',
shares='000001.SZ, 000300.SH',
start='20210101',
end='20210115')
Exécuter le code ci-dessus renverra un objet Dict contenant les données K-line de deux actions « 000001.SZ » et « 000005.SZ » (les données sont stockées sous forme de DataFrame) :
{'000001.SZ':
open high low close
2021-01-04 19.10 19.10 18.44 18.60
2021-01-05 18.40 18.48 17.80 18.17
2021-01-06 18.08 19.56 18.00 19.56
...
2021-01-13 21.00 21.01 20.40 20.70
2021-01-14 20.68 20.89 19.95 20.17
2021-01-15 21.00 21.95 20.82 21.00,
'000300.SH':
open high low close
2021-01-04 5212.9313 5284.4343 5190.9372 5267.7181
2021-01-05 5245.8355 5368.5049 5234.3775 5368.5049
2021-01-06 5386.5144 5433.4694 5341.4304 5417.6677
...
2021-01-13 5609.2637 5644.7195 5535.1435 5577.9711
2021-01-14 5556.2125 5568.0179 5458.6818 5470.4563
2021-01-15 5471.3910 5500.6348 5390.2737 5458.0812}
En plus des données de prix, qteasy peut également télécharger et gérer une grande quantité de données financières, y compris les rapports financiers, les indicateurs techniques, les données fondamentales, etc. Pour plus de détails, veuillez consulter [QTEASY教程:金融数据下载及管理](
Après le téléchargement des données des actions, vous pouvez afficher le graphique K-line des données des actions en utilisant qt.candle().
data = qt.candle('000300.SH', start='2021-06-01', end='2021-8-01', asset_type='IDX')

La fonction K-line candle de qteasy prend en charge la recherche de codes de sécurité précis en utilisant des codes d’actions/indices à six chiffres, et prend également en charge l’affichage de graphiques K-line en utilisant des noms d’actions/indices. qt.candle() prend en charge les fonctions suivantes :
Afficher les graphiques K-line des actions, des fonds et des contrats à terme
Afficher les prix ajustés
Afficher les graphiques K-line par minute, par semaine ou par mois
Afficher différentes moyennes mobiles et indicateurs tels que MACD/KDJ
Pour plus de détails, veuillez consulter la documentation, voici un exemple (veuillez d’abord télécharger les données historiques correspondantes avec qt.refill_data_source()) :
# 场内基金的小时K线图
qt.candle('159601', start = '20220121', freq='h')
# 沪深300指数的日K线图
qt.candle('000300', start = '20200121')
# 股票的30分钟K线,复权价格
qt.candle('中国电信', start = '20211021', freq='30min', adj='b')
# 期货K线,三条移动均线分别为9天、12天、26天
qt.candle('沪铜主力', start = '20211021', mav=[9, 12, 26])
# 场外基金净值曲线图,复权净值,不显示移动均线
qt.candle('000001.OF', start='20200101', asset_type='FD', adj='b', mav=[])





Le graphique K-line généré peut être un graphique K-line dynamique interactif (veuillez noter que le graphique K-line est dessiné en utilisant matplotlib, et les fonctionnalités d’affichage varient selon les terminaux utilisés, certains terminaux ne prennent pas en charge les graphiques dynamiques, veuillez vous référer à la documentation matplotlib
Lors de l’utilisation du graphique K-line dynamique, l’utilisateur peut contrôler la plage d’affichage du graphique K-line à l’aide de la souris et du clavier :
Faites glisser la souris vers la gauche ou la droite sur le graphique : pour déplacer le graphique K-line pour afficher des K-line plus anciens ou plus récents
Faites défiler la souris sur le graphique : pour zoomer ou dézoomer le graphique K-line
Utilisez les touches fléchées gauche et droite du clavier : pour déplacer la plage d’affichage du graphique K-line pour afficher des K-line plus anciens ou plus récents
Utilisez les touches fléchées haut et
Double-cliquez sur le graphique K-line
Double-cliquez sur la zone d’indicateur du graphique K-line pour

Pour plus de détails sur l’objet DataSource, veuillez consulter [qteasy教程](
Créer une stratégie d’investissement
Toutes les stratégies de trading dans qteasy sont implémentées par l’objet qteasy.Operator (trader), l’objet Operator est un conteneur de stratégie, un trader peut gérer simultanément plusieurs stratégies de trading différentes.
qteasy propose deux façons de créer des stratégies de trading, veuillez consulter le tutoriel d’utilisation pour plus de détails :
Utiliser une combinaison de stratégies de trading intégrées
Créer des stratégies en utilisant des classes de stratégie personnalisées
Créer une stratégie de trading de sélection de temps de moyenne mobile DMA
Ici, nous utiliserons une stratégie de sélection de temps de moyenne mobile DMA intégrée pour créer un système de trading de sélection de temps de marché le plus simple. Pour une liste complète des stratégies de trading intégrées et des explications détaillées, veuillez consulter la documentation.
Lors de la création de l’objet Operator, passez les paramètres : strategies='DMA', pour créer une nouvelle stratégie de trading de sélection de temps de moyenne mobile DMA. Une fois l’objet Operator créé, vous pouvez utiliser op.info() pour afficher ses informations.
import qteasy as qt
op = qt.Operator(strategies='dma')
op.info()
Vous pouvez maintenant voir qu’il y a une stratégie de trading dans op, l’ID est dma, lorsque vous définissez ou modifiez les paramètres de la stratégie au niveau de l’objet Operator, vous devez faire référence à cet ID.
DMA est une stratégie de sélection de temps de moyenne mobile intégrée, elle détermine les points longs ou courts ou d’achat et de vente en calculant la différence entre les deux moyennes mobiles rapides et lentes du prix de clôture quotidien des actions DMA et en croisant la moyenne mobile AMA :
Vous pouvez utiliser la fonction qt.built_ins() pour afficher les détails de la stratégie DMA, et vous pouvez utiliser la fonction qt.built_ins() pour obtenir ou filtrer les stratégies de trading intégrées dont vous avez besoin, par exemple :
qt.built_in_doc('dma')
Résultat :
DMA择时策略
策略参数:
s, int, 短均线周期
l, int, 长均线周期
d, int, DMA周期
信号类型:
PS型:百分比买卖交易信号
信号规则:
在下面情况下产生买入信号:
1, DMA在AMA上方时,多头区间,即DMA线自下而上穿越AMA线后,输出为1
2, DMA在AMA下方时,空头区间,即DMA线自上而下穿越AMA线后,输出为0
3, DMA与股价发生背离时的交叉信号,可信度较高
策略属性缺省值:
默认参数:(12, 26, 9)
数据类型:close 收盘价,单数据输入
采样频率:天
窗口长度:270
参数范围:[(10, 250), (10, 250), (8, 250)]
策略不支持参考数据,不支持交易数据
Par défaut, la stratégie a trois paramètres ajustables : (12,26,9), mais vous pouvez fournir trois entiers arbitraires supérieurs à 2 et inférieurs à 250 en tant que paramètres de stratégie, pour s’adapter à des actions de différentes activités de trading, ou pour s’adapter à différents cycles de trading.
Backtest et évaluation des performances de la stratégie de trading
qteasy peut utiliser des données historiques pour backtester les performances de la stratégie de trading et afficher les graphiques comme suit :

Vous pouvez utiliser op.run(mode=1) pour backtester les performances de la stratégie DMA que vous venez de créer avec les paramètres par défaut sur les données historiques.
res = op.run(
mode=1, # 历史回测模式
asset_pool='000300.SH', # 投资资产池
asset_type='IDX', # 投资资产类型
invest_cash_amounts=[100000], # 投资资金
invest_start='20220501', # 投资回测开始日期
invest_end='20221231', # 投资回测结束日期
cost_rate_buy=0.0003, # 买入费率
cost_rate_sell=0.0001, # 卖出费率
visual=True, # 打印可视化回测图表
trade_log=True # 打印交易日志
)
Les résultats de sortie sont les suivants :
====================================
| |
| BACK TESTING RESULT |
| |
====================================
qteasy running mode: 1 - History back testing
time consumption for operate signal creation: 4.4 ms
time consumption for operation back looping: 82.5 ms
investment starts on 2022-05-05 00:00:00
ends on 2022-12-30 00:00:00
Total looped periods: 0.7 years.
-------------operation summary:------------
Only non-empty shares are displayed, call
"loop_result["oper_count"]" for complete operation summary
Sell Cnt Buy Cnt Total Long pct Short pct Empty pct
000300.SH 6 6 12 56.4% 0.0% 43.6%
Total operation fee: ¥ 257.15
total investment amount: ¥ 100,000.00
final value: ¥ 105,773.09
Total return: 5.77%
Avg Yearly return: 8.95%
Skewness: 0.58
Kurtosis: 3.54
Benchmark return: -3.46%
Benchmark Yearly return: -5.23%
------strategy loop_results indicators------
alpha: 0.142
Beta: 1.003
Sharp ratio: 0.637
Info ratio: 0.132
250 day volatility: 0.138
Max drawdown: 11.92%
peak / valley: 2022-08-17 / 2022-10-31
recovered on: Not recovered!
===========END OF REPORT=============

Optimisation des paramètres de la stratégie de trading
Les performances de la stratégie de trading dépendent des paramètres, si vous entrez des paramètres différents, les rendements de la stratégie peuvent varier considérablement. qteasy peut utiliser plusieurs algorithmes d’optimisation différents pour rechercher les meilleurs paramètres de stratégie,
Pour utiliser la fonction d’optimisation de la stratégie, vous devez définir le drapeau d’optimisation de la stratégie de trading opt_tag=1, et configurer la variable d’environnement mode=2 :
op.set_parameter('dma', opt_tag=1)
res = op.run(mode=2, # 优化模式
opti_start='20220501', # 优化区间开始日期
opti_end='20221231', # 优化区间结束日期
test_start='20220501', # 测试区间开始日期
test_end='20221231', # 测试区间结束日期
opti_sample_count=1000, # 优化样本数量
visual=True, # 打印优化结果图表
parallel=False) # 不使用并行计算
qteasy effectuera des backtests répétés sur la même période de données historiques (période d’optimisation), trouvera les 30 meilleurs résultats de paramètres, et testera ces 30 groupes de paramètres sur une autre période de données historiques (période de test) pour afficher les résultats du test indépendant :
====================================
| |
| OPTIMIZATION RESULT |
| |
====================================
qteasy running mode: 2 - Strategy Parameter Optimization
... # 省略部分输出
# 以下是30组优化的策略参数及其结果(部分结果省略)
Strategy items Sell-outs Buy-ins ttl-fee FV ROI Benchmark rtn MDD
0 (35, 69, 60) 1.0 2.0 71.45 106,828.20 6.8% -3.5% 9.5%
1 (124, 104, 18) 3.0 2.0 124.86 106,900.59 6.9% -3.5% 7.4%
2 (126, 120, 56) 1.0 1.0 72.38 107,465.86 7.5% -3.5% 7.5%
...
27 (103, 84, 70) 1.0 1.0 74.84 114,731.44 14.7% -3.5% 8.8%
28 (143, 103, 49) 1.0 1.0 74.33 116,453.26 16.5% -3.5% 4.3%
29 (129, 92, 56) 1.0 1.0 74.55 118,811.58 18.8% -3.5% 4.3%
===========END OF REPORT=============

将优化后的参数应用到策略中,并再次回测,可以看到结果明显提升:
op.set_parameter('dma', pars=(143, 99, 32))
res = op.run(
mode=1, # 历史回测模式
asset_pool='000300.SH', # 投资资产池
asset_type='IDX', # 投资资产类型
invest_cash_amounts=[100000], # 投资资金
invest_start='20220501', # 投资回测开始日期
invest_end='20221231', # 投资回测结束日期
cost_rate_buy=0.0003, # 买入费率
cost_rate_sell=0.0001, # 卖出费率
visual=True, # 打印可视化回测图表
trade_log=True # 打印交易日志
Les résultats sont les suivants :

Pour plus d’informations sur l’interprétation des résultats de l’optimisation de la stratégie, et pour plus d’informations sur l’optimisation des paramètres, veuillez consulter la documentation détaillée
Déploiement et démarrage de l’exécution
Après avoir configuré l’objet Operator et défini la stratégie, qteasy peut fonctionner automatiquement à intervalles réguliers, surveiller automatiquement, télécharger automatiquement les données en temps réel et générer des ordres de trading en fonction des résultats de la stratégie, simuler le processus de trading et enregistrer les résultats de trading.
Une fois que le trading en direct de Qteasy est démarré, un thread distinct s’exécute en arrière-plan dans le terminal, le moment de l’exécution est également conforme au marché boursier réel, il ne fonctionne pas lorsque le marché boursier est fermé, le système est réveillé à 9h15 le matin pour commencer à extraire les prix des actions en temps réel, et à 9h30 pour commencer à exécuter la stratégie de trading, l’heure et la fréquence d’exécution de la stratégie de trading sont définies dans les attributs de la stratégie. Si les résultats de l’exécution de la stratégie génèrent des signaux de trading, des ordres simulés sont passés en fonction des signaux de trading, les ordres passés sont exécut
import qteasy as qt
# 创建一个交易策略alpha
alpha = qt.get_built_in_strategy('ndayrate') # 创建一个N日股价涨幅交易策略
# 设置策略的运行参数
alpha.strategy_run_freq = 'd' # 每日运行
alpha.data_freq = 'd' # 策略使用日频数据
alpha.window_length = 20 # 数据窗口长度
alpha.sort_ascending = False # 优先选择涨幅最大的股票
alpha.condition = 'greater' # 筛选出涨幅大于某一个值的股票
alpha.ubound = 0.005 # 筛选出涨幅大于0.5%的股票
alpha.sel_count = 7 # 每次选出7支股票
# 创建一个交易员对象,运行alpha策略
op = qt.Operator(alpha, signal_type='PT', op_type='step')
# 设置策略运行参数
# 交易股票池包括所有的银行股和家用电器股
asset_pool = qt.filter_stock_codes(industry='银行, 家用电器', exchange='SSE, SZSE')
qt.configure(
mode=0, # 交易模式为实盘运行
asset_type='E', # 交易的标的类型为股票
asset_pool=asset_pool, # 交易股票池为所有银行股和家用电器股
trade_batch_size=100, # 交易批量为100股的整数倍
sell_batch_size=1, # 卖出数量为1股的整数倍
)
Après avoir terminé la configuration ci-dessus, utilisez le code suivant pour exécuter la stratégie de trading.
Le trading en direct de Qteasy utilise le concept de « compte », tout comme l’ouverture d’un compte sur le marché boursier, un compte peut avoir son propre capital, ses positions en actions, et calculer les profits et les pertes séparément. Vous pouvez arrêter le programme à tout moment pendant Au cours de l’exécution, tous les enregistrements de trading seront sauvegardés, la prochaine fois que vous redémarrez, vous pouvez reprendre à partir de l’endroit où vous vous êtes arrêté la dernière fois en référençant l’ID de compte (account ID) utilisé lors de la dernière exécution, y compris les paramètres de la stratégie de trading et d’autres informations seront redémarrés à partir de l’endroit où vous vous êtes arrêté la dernière fois. Par conséquent, vous devez spécifier un compte lors du démarrage, si vous ne souhaitez pas continuer avec le compte précédent, vous pouvez créer un nouveau compte pour exécuter, ou supprimer tous les enregistrements sous le compte actuel et recommencer le trading.
Lors du démarrage du trading en direct, vous pouvez spécifier le nom du compte à utiliser en utilisant la variable de configuration système live_trade_account_name de qteasy, le système créera automatiquement un nouveau compte et lui attribuera un ID de compte ; si vous souhaitez utiliser un compte existant, vous pouvez spécifier l’ID de compte lors du démarrage en utilisant live_trade_account_id.
qt.run(
op,
live_trade_account_id=None, # 不指定实盘交易账户,给出账户名称并创建一个新的账户
live_trade_account_name='new_account'
# 如果想要使用已有的账户,应该指定账户ID同时不给出account_name:
# live_trade_account_id=1
# live_trade_account_name=None
live_trade_ui_type='tui', # 使用TUI界面监控实盘交易,默认使用CLI界面
)
Si vous souhaitez démarrer le trading en direct de qteasy via la ligne de commande dans le Terminal et commencer le trading en direct directement, vous pouvez créer un fichier de script et démarrer le trading via la ligne de commande dans le Terminal. qteasy fournit plusieurs exemples de fichiers de script de trading en direct, vous pouvez trouver ces fichiers de script dans le dossier examples du répertoire d’installation de qteasy, et démarrer le trading en direct en utilisant la commande suivante :
(base) $ cd qteasy/examples
(base) $ python -m live_grid_multi --account 18 --ui cli
La commande ci-dessus démarrera un trading en direct, utilisera l’ID de compte 18, et utilisera l’interface CLI pour surveiller le trading en direct.
qteasy propose deux interfaces utilisateur différentes pour exécuter le trading en direct :
TraderShellInterface de ligne de commande interactive, vous pouvez entrer des commandes dans la ligne de commande pour afficher les journaux de trading, les positions, les changements de fonds du compte, etc. :

TraderApp(ajouté dans la version 1.2.0) Interface graphique interactive, vous pouvez afficher les journaux de trading, les positions, les changements de fonds du compte, etc. dans l’interface graphique

Les deux méthodes ci-dessus peuvent être utilisées pendant le trading en direct, et vous pouvez accéder à des interfaces interactives différentes en fonction des paramètres de configuration de qteasy, pour plus d’informations sur le trading en direct, veuillez consulter la documentation QTEASY