量化交易的分析基础是数据,包括股票历史交易数据、上市公司基本面数据、宏观和行业数据等。随着信息流量的日益膨胀,学会获取、查询和加工数据信息变得越来越重要。对于鼓捣量化交易的人来说,怎么能说不会玩数据库呢?目前常用的开源(免费)数据库有MySQL、Postgresql 、Mongodb 和 SQLite (Python自带),在2018-2019年DB-Engines 排行榜上位居前十(见下图),可见其使用量和受欢迎程度较高。这几个数据库各有自己的特点和适用环境,关于该学习哪一个或如何学习网上有很多相关资料。本文主要为大家简单介绍如何使用 Python 操作 mysql 数据库(其他数据库类似),利用 pandas 的 dataframe 实现与mysql的交互,一步步搭建自己的量化分析数据库。
mysql数据库安装建立数据库tushare_db这个我就不介绍了,网上很多教程,直接开始
首先,使用 tushare 获取3000多只股票行情数据到本地,直接使用pandas的to_sql函数,将数据存入本地mysql数据库中,方便进一步查询和操作。
#先引入需要用到的库import tushare as tsimport pandas as pdimport numpy as npfrom sqlalchemy import create_engine#连接数据库engine = create_engine('mysql+pymysql://root:123456@localhost/tushare_db')#设置token(大家去tushare上免费注册就可以获取了)#tushare的注册地址 https://tushare.pro/register?reg=232583token='自己的token'pro = ts.pro_api(token)
#数据获取函数,默认时间可以随时改动#如果报错,把tushare升级到最新def get_data(code,start='20200101',end='20200310'): #使用pro_bar通用行情接口 df=ts.pro_bar(ts_code=code, adj='qfq', start_date=start, end_date=end) return df#交易代码获取函数,获取最新交易日的代码#获取当前交易日最新的股票代码和简称def get_code(): codes = pro.stock_basic(list_status='L').ts_code.values return codesdef insert_sql(data,db_name,if_exists='append'): #使用try...except..continue避免出现错误,运行崩溃 try: data.to_sql(db_name,engine,index=False,if_exists=if_exists) # print(code+'写入数据库成功') except: print(code+'error写入出错')
我们总共建立了3个函数,第一个时获取行情数据,第二个时获取股票代码,第三个时插入数据库
#下载20200101-20200310数据并插入数据库stock_data#此步骤比较耗费时间,大致30-35分钟左右#调取说明:基础积分每分钟内最多调取500次,每次5000条数据。for code in get_code(): data=get_data(code) # print(data) insert_sql(data,'stock_data')#更新2019年和以前的数据把上面的日期改下就行了。#接下来查询下2020年3月10日的收盘数据df2=pd.read_sql("select * from stock_data where trade_date='20200310' ",engine)print(df2)
#今天先讲到这里,下次讲解通过下载的数据如何可视化分析。欢迎大家关注