如何使用DolphinDB处理Tushare金融数据
本文介绍使用 DolphinDB 导入并分析 Tushare 沪深股票日线行情与每日指标数据的思路与示例,并包含作者与发布日期信息及 DolphinDB 的定位说明。
Source: https://dolphindb.cn/blogs/14
What this page covers
- Tushare 数据概况与字段构成。
- 在 DolphinDB 中创建数据库、分区规划与建表。
- 使用 Python API 获取与导入 Tushare 数据,并做导入核验。
- 金融分析示例:波动率、相关性、Alpha 因子与动量策略回测。
- 总结、后续链接与联系方式。
技能认证特训营第二期正式开启(限时报名)
页面顶部包含活动报名引导与福利优惠相关的链接信息。
- 提供“技能认证特训营第二期”的报名入口链接。
- 该入口以限时促销/报名提示形式呈现。
如何使用DolphinDB处理Tushare金融数据
本节给出文章标题、作者与发布日期,并介绍 DolphinDB 与本教程的总体目标与场景。
- 作者署名为 Junxi。
- 发布日期为 2021-05-14。
- DolphinDB 被描述为新一代时序数据库。
- DolphinDB 可作为分布式数据仓库或内存数据库使用。
- 教程目标包含把 Tushare 沪深股票数据导入 DolphinDB 并进行金融分析。
数据概况
本节说明教程使用的数据类型(沪深日线行情、每日指标)及其字段列表。
- 日线行情字段包括:ts_code、trade_date、open、high、low、close 等。
- 每日指标字段包括:turnover_rate、pe、pb、total_mv 等(文中出现 circ_mv 字段名)。
- 本教程处理的数据时间范围为 2008-2017 的日线行情与每日指标数据。
创建DolphinDB数据库
本节包含安装部署参考、database 函数与参数说明,以及分区规划与建库建表示例。
- 安装方式包含从官网下载安装包与 DolphinDB GUI。
- database 函数语法为:database(directory, [partitionType], [partitionScheme], [locations])。
- DFS 库的 directory 以“dfs://”开头,且本教程使用 DFS 数据库。
- 文中列出 6 种分区方式:SEQ、RANGE、HASH、VALUE、LIST、COMPO。
- 本教程场景中,分区字段选择 trade_date 的理由是按日期查询频率更高。
使用Python API把数据导入到DolphinDB
本节介绍 Tushare 获取方式与依赖安装,并使用 DolphinDB Python API 连接、写入分布式表及核验导入结果。
- Tushare 数据可通过 Python 包获取(返回 DataFrame),或通过 HTTP 获取(返回 JSON)。
- DolphinDB Python API 安装示例为在解压目录执行:python setup.py install。
- Tushare Pro 需要注册账号获取 token,并在示例中填写到 pro_api 调用中。
- 示例展示通过 Python API 连接 DolphinDB(包含 host、port、用户名与密码)。
- 导入后通过 count(*) 对 hushen_daily_line 与 hushen_daily_indicator 的记录数进行核验。
金融分析
本节基于导入数据给出多个量化分析示例,并包含对 pandas 在大数据处理方面局限的对比描述。
- 示例使用 mstd(pct_change/100,21) 且按 ts_code 分组计算 21 期滚动波动率。
- 示例通过 pivot by trade_date、ts_code 构造收益矩阵 retMatrix。
- 文中说明 select 生成表,而 exec 生成向量。
- 示例用 cross(corr, retMatrix, retMatrix) 计算相关性矩阵。
- 文中实现并讨论 WorldQuant 的 Alpha #001 与 Alpha #098 示例。
总结与后续链接/联系方式
本节总结 DolphinDB 的能力点(如分区、接口与性能表述),并提供后续链接与联系邮箱。
- 文中列举 DolphinDB 的编程 API:Python、C++、Java、C#、R 等。
- 文中列举插件:Excel add-in、ODBC、JDBC。
- 提供销售联系邮箱:sales@dolphindb.com。
- 提供官网链接:https://www.dolphindb.cn/。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 文章 | 发布日期 | 2021-05-14 | high |
| 文章 | 作者署名 | Junxi | high |
| DolphinDB | 定位/类型 | 新一代的时序数据库;可作为分布式数据仓库或内存数据库使用;自带丰富计算工具,可作为研究工具或研究平台 | medium |
| DolphinDB | 适用领域 | 量化金融、物联网等领域的海量数据分析 | medium |
| DolphinDB在量化金融问题 | 可解决问题示例 | 交易信号研究、策略回测、交易成本分析、股票相关性研究、市场风险控制等 | low |
| 本教程 | 导入数据范围与类型 | 将Tushare的沪深股票2008-2017日线行情数据与每日指标数据导入DolphinDB database,并使用DolphinDB进行金融分析 | high |
| Tushare | 描述/定位 | 金融大数据开放社区,拥有丰富的金融数据(股票、基金、期货、数字货币等行情数据),为量化从业人员和金融相关研究人员免费提供金融数据 | medium |
| Tushare沪深股票日线行情数据 | 字段列表 | ts_code, trade_date, open, high, low, close, pre_close, change, pct_change, vol, amount | high |
| Tushare每日指标数据 | 字段列表 | ts_code, trade_date, close, turnover_rate, turnover_rate_f, volume_ratio, pe, pe_ttm, pb, ps, ps_ttm, dv_ratio, dv_ttm, total_share, float_share, free_share, total_mv, cric_mv/circ_mv(文中出现circ_mv字段名) | medium |
| DolphinDB安装 | 获取方式 | 从官网下载安装包和DolphinDB GUI | high |
| DolphinDB部署参考 | 文档链接类型 | 单节点部署、单服务器集群部署、多服务器集群部署均有参考链接 | high |
| DolphinDB database函数 | 语法 | database(directory, [partitionType], [partitionScheme], [locations]) | high |
| DolphinDB数据库directory参数 | 取值含义 | 内存库directory为空;本地库为本地文件系统目录;DFS库以“dfs://”开头;本教程使用DFS数据库 | high |
| DolphinDB分区方式 | 类型数量与名称 | 6种:SEQ、RANGE、HASH、VALUE、LIST、COMPO | high |
| 分区规划建议(本教程场景) | 分区字段选择原因 | 查询分析中按日期查询频率最高,因此分区字段为trade_date;按天分区会导致分区过多且每分区数据量过少,任务管理开销大;按年范围分区更合理 | medium |
| 本教程分区方案 | 范围设置 | 为未来留空间,将时间范围设置为2008-2030年;每年1月1日到次年1月1日为一个分区(按年范围分区) | high |
| yearRange | 生成代码 | yearRange = date(2008.01M + 12*0..22) | high |
| DolphinDB DFS数据库 | dbPath示例 | dfs://tushare | high |
| DolphinDB分布式表(DFS Table) | 表名与用途 | hushen_daily_line用于存放日线行情数据;hushen_daily_indicator用于存放每日指标数据;两表位于同一数据库dfs://tushare且分区方案相同 | high |
| 建表代码片段(权限/账号信息) | 登录示例 | login("admin","123456") | high |
| Tushare数据获取方式 | 方式列表 | 通过Tushare Python包(返回Python DataFrame);通过HTTP协议直接获取(返回JSON) | high |
| Tushare | 安装参考 | 下载安装Python3.X和Tushare的教程参考Tushare官网文档链接 | high |
| DolphinDB Python API | 安装方式 | 从官网下载Python3 API安装包解压后,在目录执行:python setup.py install | high |
| DolphinDB Python API | 更新命令 | python setup.py install --force | high |
| Tushare Pro | token要求 | 需要注册Tushare账号才能获取token;示例代码pro = ts.pro_api("Your Token")需填写token | high |
| Tushare接口daily_basic与daily | 权限/积分要求 | 根据Tushare官网要求,需要达到600积分才能使用(文中说明并给出权限说明链接与积分获取办法链接) | high |
| DolphinDB Python API连接 | 连接示例(host/port/user/pass) | s.connect("localhost", 8848, "admin", "123456") | high |
| DolphinDB表加载(Python API) | 加载示例 | loadTable tableName="hushen_daily_line" 与 "hushen_daily_indicator",dbPath="dfs://tushare" | high |
| 导入数据日期范围(Python示例) | 循环日期区间 | 20080101 到 20171231 | high |
| hushen_daily_line | 记录数(count(*)) | 5,337,516 | high |
| hushen_daily_indicator | 记录数(count(*)) | 5,337,517 | high |
| 示例分析:滚动波动率 | 计算方法 | 使用mstd(pct_change/100,21)按ts_code分组(context by ts_code)计算21期滚动波动率mvol | high |
| 示例分析:两两相关性 | 收益矩阵构造 | retMatrix=exec pct_change/100 as ret ... pivot by trade_date, ts_code | high |
| DolphinDB exec | 与select的差异(文中描述) | select生成表;exec生成向量 | high |
| DolphinDB pivot by | 用途(文中描述) | 用于整理维度;与exec一起使用会生成矩阵 | medium |
| DolphinDB cross | 用于相关性矩阵计算 | corrMatrix=cross(corr, retMatrix, retMatrix) | high |
| DolphinDB cross(高阶函数) | 作用描述 | 以函数和对象为输入,把函数应用到每个对象上;模板函数在复杂批量计算中非常有用 | medium |
| 示例分析:最相关股票 | 输出目标 | 找到每只股票相关性最高的10只股票;并给出查询000001.SZ相关性最高10只股票的示例 | high |
| WorldQuant 101 Formulaic Alphas | 文中引用 | WorldQuant LLC论文《101 Formulaic Alphas》给出101个Alpha因子公式;文中实现Alpha #001和Alpha #098 | medium |
| Alpha #001 | 公式(文中给出) | rank(Ts_ArgMax(SignedPower((returns<0?stddev(returns,20):close), 2), 5))-0.5 | high |
| Alpha #098 | 公式(文中给出) | (rank(decay_linear(correlation(vwap, sum(adv5,26.4719), 4.58418), 7.18088))- rank(decay_linear(Ts_Rank(Ts_ArgMin(correlation(rank(open), rank(adv15), 20.8187), 8.62571), 6.95668) ,8.07206))) | high |
| 构建Alpha #001/#098所需字段 | 字段要求(文中说明) | 股票代码、日期、成交量、成交量加权平均价格、开盘价、收盘价;vwap可由收盘价与成交量计算;日线行情数据可用于构建 | high |
| Alpha实现复杂度(文中描述) | 核心代码行数与实现方式 | Alpha #001仅用2行核心代码;Alpha #98仅用4行核心代码;核心代码均用SQL实现;关键功能为context by子句的分组计算扩展 | medium |
| DolphinDB context by | 与group by差异(文中描述) | group by每组产生一行记录;context by输出与输入相同行数,便于多函数嵌套;横截面计算用trade_date分组,时间序列计算用ts_code分组 | high |
| Alpha #001计算耗时(本地服务器单线程) | 耗时 | 0.6627秒 | high |
| Alpha #098计算耗时(本地服务器单线程) | 耗时 | 1.806秒 | high |
| 动量策略回测(本文示例) | 策略调整/持有设置 | 最常用动量因子为过去一年扣除最近一个月收益率;策略通常月度调整且持有期一个月;本文示例为每天调整1/21投资组合并持有21天 | medium |
| 动量策略所需数据字段(文中说明) | 字段要求 | 股票代码、日期、每股价格(收盘价)、流通市值、股票日收益、每日交易量;需要连接hushen_daily_line与hushen_daily_indicator | high |
| equal join示例 | 连接字段 | ej(daily_line, daily_indicator, `ts_code`trade_date) | high |
| 动量策略可交易股票筛选条件(文中示例) | 筛选阈值 | signal无缺失、当日交易量vol>0、市值超过1亿元(circ_mv>10000,单位未在此处明确)、每股价格close>5 | medium |
| pandas处理金融数据(文中对比) | 内存与性能局限 | 内存峰值一般为数据的3-4倍;多线程处理较弱,不能充分利用多核CPU;不能按业务字段分区且不支持列式存储;查询需全表扫描,效率不高 | medium |
| DolphinDB作为数据库 | 存储能力 | 支持单表PB级存储和灵活的分区方式 | low |
| DolphinDB编程接口与插件(文中列举) | 接口/插件列表 | Python、C++、Java、C#、R等编程API;Excel add-in插件;ODBC、JDBC插件 | high |
| DolphinDB性能(文中描述) | 交互分析延时 | 面对庞大数据集仍可实现秒级/毫秒级的低延时交互分析(表述为能力宣称) | low |
| DolphinDB | 联系邮箱 | sales@dolphindb.com | high |
| DolphinDB官网 | 链接(文中出现) | https://www.dolphindb.cn/ (通过重定向链接呈现) | medium |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |