Read this in other languages: English.
ZVT是在fooltrader的基础上重新思考后编写的量化项目,其包含可扩展的数据recorder,api,因子计算,选股,回测,交易,以及统一的可视化,定位为中低频 多级别 多因子 多标的 全市场分析和交易框架。
一个系统,如果5分钟用不起来,那肯定是设计软件的人本身就没想清楚,并且其压根就没打算自己用。
假设你已经在>=python3.6的环境中(建议新建一个干净的virtual env环境)
pip3 install zvt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
pip3 show zvt
如果不是最新版本
pip install --upgrade zvt -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
请根据需要决定是否使用豆瓣镜像源
进入ipython,体验一把
In [1]: import os
In [2]: os.environ["TESTING_ZVT"] = "1"
In [3]: from zvt import *
{'data_path': '/Users/xuanqi/zvt-test-home/data',
'domain_module': 'zvt.domain',
'email_password': '',
'email_username': '',
'http_proxy': '127.0.0.1:1087',
'https_proxy': '127.0.0.1:1087',
'jq_password': '',
'jq_username': '',
'log_path': '/Users/xuanqi/zvt-test-home/logs',
'smtp_host': 'smtpdm.aliyun.com',
'smtp_port': '80',
'ui_path': '/Users/xuanqi/zvt-test-home/ui',
'wechat_app_id': '',
'wechat_app_secrect': '',
'zvt_home': '/Users/xuanqi/zvt-test-home'}
In [5]: from zvt.api import *
In [6]: df = get_kdata(entity_id='stock_sz_000338',provider='joinquant')
n [8]: df.tail()
Out[8]:
id entity_id timestamp provider code name level open close high low volume turnover change_pct turnover_rate
timestamp
2019-10-29 stock_sz_000338_2019-10-29 stock_sz_000338 2019-10-29 joinquant 000338 潍柴动力 1d 12.00 11.78 12.02 11.76 28533132.0 3.381845e+08 None None
2019-10-30 stock_sz_000338_2019-10-30 stock_sz_000338 2019-10-30 joinquant 000338 潍柴动力 1d 11.74 12.05 12.08 11.61 42652561.0 5.066013e+08 None None
2019-10-31 stock_sz_000338_2019-10-31 stock_sz_000338 2019-10-31 joinquant 000338 潍柴动力 1d 12.05 11.56 12.08 11.50 77329380.0 9.010439e+08 None None
2019-11-01 stock_sz_000338_2019-11-01 stock_sz_000338 2019-11-01 joinquant 000338 潍柴动力 1d 11.55 12.69 12.70 11.52 160732771.0 1.974125e+09 None None
2019-11-04 stock_sz_000338_2019-11-04 stock_sz_000338 2019-11-04 joinquant 000338 潍柴动力 1d 12.77 13.00 13.11 12.77 126673139.0 1.643788e+09 None None
财务数据
In [12]: from zvt.domain import *
In [13]: df = get_finance_factor(entity_id='stock_sz_000338',columns=FinanceFactor.important_cols())
In [14]: df.tail()
Out[14]:
basic_eps total_op_income net_profit op_income_growth_yoy net_profit_growth_yoy roe rota gross_profit_margin net_margin timestamp
timestamp
2018-10-31 0.73 1.182000e+11 6.001000e+09 0.0595 0.3037 0.1647 0.0414 0.2164 0.0681 2018-10-31
2019-03-26 1.08 1.593000e+11 8.658000e+09 0.0507 0.2716 0.2273 0.0589 0.2233 0.0730 2019-03-26
2019-04-29 0.33 4.521000e+10 2.591000e+09 0.1530 0.3499 0.0637 0.0160 0.2166 0.0746 2019-04-29
2019-08-30 0.67 9.086000e+10 5.287000e+09 0.1045 0.2037 0.1249 0.0315 0.2175 0.0759 2019-08-30
2019-10-31 0.89 1.267000e+11 7.058000e+09 0.0721 0.1761 0.1720 0.0435 0.2206 0.0736 2019-10-31
跑个策略
In [15]: from zvt.samples import *
In [16]: t = MyMaTrader(codes=['000338'], level=IntervalLevel.LEVEL_1DAY, start_timestamp='2018-01-01',
...: end_timestamp='2019-06-30', trader_name='000338_ma_trader')
In [17]: t.run()
项目支持多环境切换,默认情况下,不设置环境变量TESTING_ZVT即为正式环境
In [1]: from zvt import *
{'data_path': '/Users/xuanqi/zvt-home/data',
'domain_module': 'zvt.domain',
'email_password': '',
'email_username': '',
'http_proxy': '127.0.0.1:1087',
'https_proxy': '127.0.0.1:1087',
'jq_password': '',
'jq_username': '',
'log_path': '/Users/xuanqi/zvt-home/logs',
'smtp_host': 'smtpdm.aliyun.com',
'smtp_port': '80',
'ui_path': '/Users/xuanqi/zvt-home/ui',
'wechat_app_id': '',
'wechat_app_secrect': '',
'zvt_home': '/Users/xuanqi/zvt-home'}
请在提示的zvt_home目录中找到config.json更改配置。
如果你不想使用使用默认的zvt_home目录,请设置环境变量ZVT_HOME再运行。
注意:
可视化方面,master分支只保留行情指标功能,其他复杂功能在draft分支里面存档 项目将专注于一般行情软件难以实现的自定义统计指标,回测,交易通知上面
文档地址(两个是一样的,只是为了方便有些不方便访问github的同学)
http://zvt.foolcage.com
https://zvtvz.github.io/zvt
目前整个框架基本稳定下来,文档完善中。
- 丰富全面开箱即用且可持续增量更新的数据
- A股数据:行情,财务报表,大股东行为,高管交易,分红融资详情,个股板块资金流向,融资融券,龙虎榜等数据
- 市场整体pe,pb,资金流,融资融券,外资动向等数据
- 数字货币数据
- 数据的标准化,多数据源(provider)交叉验证,补全
- 简洁可扩展的数据框架
- 统一简洁的API,支持sql查询,支持pandas
- 可扩展的factor,对单标的和多标的的运算抽象了一种统一的计算方式
- 支持多标的,多factor,多级别的回测方式
- 支持交易信号和策略使用到的factor的实时可视化
- 支持多种实盘交易(实现中)
项目数据支持多provider,在数据schema一致性的基础上,可根据需要进行选择和扩展,目前支持新浪,东财,网易,交易所,ccxt等免费数据。
但免费数据的缺点是显而易见的:不稳定,爬取清洗数据耗时耗力,维护代价巨大,且随时可能不可用。
个人建议:如果只是学习研究,可以使用免费数据;如果是真正有意投身量化,还是选一家可靠的数据提供商。
项目支持聚宽的数据,可戳以下链接申请使用(目前可免费使用一年)
https://www.joinquant.com/default/index/sdk?channelId=953cbf5d1b8683f81f0c40c9d4265c0d
需要提高每日使用限额或者购买也可加我微信(foolcage),申请相应的优惠
项目中大部分的免费数据目前都是比较稳定的,且做过严格测试,特别是东财的数据,可放心使用
添加其他数据提供商�,请参考数据扩展教程
git clone https://github.com/zvtvz/zvt.git
设置项目的virtual env(python>=3.6),安装依赖
pip3 install -r requirements.txt
解压data sample,用于快速跑测试
python3 init_data_sample.py
更改DATA_PATH(否则会污染datasample,datasample只用于测试用)
DATA_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'data'))
东财数据: https://pan.baidu.com/s/1CMAlCRYwlhGVxS6drYUEgA 提取码: q2qn
日线数据(网易): https://pan.baidu.com/s/1kMhEVO0kH_Pn6wXKyqvJEA 提取码: ijxg
资金流,板块数据(新浪): https://pan.baidu.com/s/1eusW65sdK_WE4icnt8JS1g 提取码: uux3
市场概况,沪/深港通,融资融券数据(聚宽): https://pan.baidu.com/s/1ijrgjUd1WkRMONrwRQU-4w 提取码: dipd
把下载的数据解压到DATA_PATH
增量更新数据,只需要运行recorders里面的脚本
期待能有更多的开发者参与到 zvt 的开发中来,我会保证尽快 Reivew PR 并且及时回复。但提交 PR 请确保
- 通过所有单元测试,如若是新功能,请为其新增单元测试
- 遵守开发规范
- 如若需要,请更新相对应的文档
也非常欢迎开发者能为 zvt 提供更多的示例,共同来完善文档,文档项目位于 zvt/docs
QQ群:300911873
个人微信:foolcage 添加暗号:zvt
知乎专栏会结合zvt写一些日常使用的例子: https://zhuanlan.zhihu.com/automoney