本期目标:

从聚宽数据API中获取期权行情数据并写入到云数据库(MySql)中,通过superset访问存储在数据库中的数据。

本期导读:

  • 聚宽金融数据API
  • 获取ETF期权日终行情
  • 数据写入到MySql数据库
  • Superset中访问数据库
  • 下节预告

一、聚宽金融数据API

聚宽量化平台(https://www.joinquant.com/help/api/help?name=JQData)提供了为期一年的免费数据使用权限,注册用户每天可以免费提取100万条数据。

  • 首先根据官网的指引进行用户注册和登录并提交试用申请,请参考如下文档:




bat里给python脚本传参 bat调用python脚本_数据


图一 聚宽api官方文档

  • 参考聚宽文档中的‘如何安装使用JQData’进行环境配置。登录你的阿里云服务器,进入命令行工具(黑窗口),运行命令:‘pip install jqdatasdk’,进行聚宽API接口的安装,安装完成后输入命令:‘pip list’查看是否安装成功。


bat里给python脚本传参 bat调用python脚本_bat里给python脚本传参_02


图二 查看聚宽数据接口是否安装成功

  • 测试聚宽账号

命令行中(黑窗口)运行命令:‘python’进入python交互式运行环境,然后按照官方文档的指引,进行登录验证:


bat里给python脚本传参 bat调用python脚本_鱼c论坛python课后作业_03


图三 官方登录验证文档

二、获取ETF期权日终行情

按照官方文档中的期权日行情获取指引文档,在上一步打开的python交互式运行环境中尝试获取合约代码为‘10001313.XSHG’的期权合约最近10个交易日的日终行情。


bat里给python脚本传参 bat调用python脚本_python 调用bat失败_04


图四 获取期权日行情数据指引文档

按照上述文档依次执行命令:

-‘from jqdatasdk import opt’
-‘q=query(opt.OPT_DAILY_PRICE).filter(opt.OPT_DAILY_PRICE.code=='10001313.XSHG').order_by(opt.OPT_DAILY_PRICE.date.desc()).limit(10)’
-‘df=opt.run_query(q)’
-‘print(df)’


bat里给python脚本传参 bat调用python脚本_数据_05


图五 获取ETF期权日终行情

上述结果表明可以使用python命令从聚宽API接口中获取行情数据。

三、数据写入到MySql数据库

下面是通过python代码连接数据库和写入数据的代码:


bat里给python脚本传参 bat调用python脚本_数据_06


图六 python连接数据库

  • 首先导入连接数据库需要的工具sqlalchemy:

‘from sqlalchemy import create_engine’,如果提示没有对应库,请先使用pip工具进行安装。

  • 指定数据库表名、数据库名和数据库连接串

‘TABLE_NAME = ‘opt_daily_price’’

‘DATABASE_SCHEMA = ‘options_data’’

‘DATABASE_CONNECT_STR = 'mysql+pymysql://数据库用户名:数据库密码@云数据库内网地址/数据库名?charset=utf8'’

数据库表名和数据库名需要提前在数据库中创建(可回顾第二章中创建数据库表相关内容)

  • 创建数据库连接并写入数据库

‘engine=create_engine(DATABASE_CONNECT_STR)’

‘data_array.to_sql(TABLE_NAME,engine,schema=DATABASE_SCHEMA,if_exists='append',index=F alse,index_label=False)’

其中,data_array是需要写入的数据。完整的python连接mysql数据库的文档可参考:https://zhuanlan.zhihu.com/p/72347359

  • 下载完整python代码并修改运行

本节的python代码下载链接:https://pan.baidu.com/s/1Y-73ORHA6iKQvuDuQy6VYg 密码:bk08

下载python代码进行修改,替换掉代码中用户名、密码、数据库地址等信息后将脚本保存到自己的阿里云服务器上。在服务器本机创建bat脚本调用python脚本,bat脚本内容为:

python C:DataCrawlerCodeget_option_daily_price.py 510050.XSHG

(关于‘如何新建bat脚本’请自行百度学习)上面bat命令中的目录C:DataCrawlerCode为python脚本实际所在的文件目录,请根据自己实际情况替换。

双击bat脚本即可自动从聚宽api中下载当日所有以510050.XSHG为标的的ETF期权合约日终行情数据。在Windows计划任务中创建定时任务每日定时自动运行该bat脚本即可实现每日自动爬取期权合约数据至你的云数据库。

若需要补充某天(如2020年1月1日)的历史数据只需稍微修改上述bat脚本为:

python C:DataCrawlerCodeget_option_daily_price.py 510050.XSHG 2020-01-01

上述命令也可以直接在命令行窗口(黑窗口)中‘回车’运行。

四、Superset中访问数据库

登录superset平台进入【source】-【database】数据库连接配置界面。


bat里给python脚本传参 bat调用python脚本_bat里给python脚本传参_07


图七 superset数据库连接配置

点击➕号新建数据库连接


bat里给python脚本传参 bat调用python脚本_数据库_08


图八 新建数据库连接

配置数据库连接,其中URI是mysql数据库连接串,标准结构为:‘mysql://用户名:密码@数据库内网地址/数据库名?charset=utf8’,替换其中的用户名、密码、数据库内网地址和数据库名为你自己的即可(可回顾第二章‘创建数据库表’相关内容)。


bat里给python脚本传参 bat调用python脚本_python 调用bat失败_09


图九 数据库连接配置

五、下期预告

介绍国内ETF期权合约基本知识和属性。

六、课后作业

需要说明的是国内ETF期权目前只有三个标的,分别为‘华夏上证50ETF(510050.XSHG),华泰柏瑞沪深300ETF(510300.XSHG),嘉实沪深300ETF(159919.XSHE)’,括号内为ETF基金的代码,其中XSHG表示上交所,XSHE代表深交所,本文后续所有数据分析案例均使用上述三个品种的ETF期权合约交易数据进行。

请参照上面下载的脚本开发python脚本,并创建定时任务,将聚宽官方文档中的其他期权数据每日自动下载到云数据库以便本课程后续实操,每一个类型的期权数据均需下载510050.XSHG、510300.XSHG、159919.XSHE三个标的的期权合约数据;同时还要下载510050.XSHG、510300.XSHG、159919.XSHE三个ETF基金标的本身的每日收盘价数据。