多因子选股模型是一种常见的量化投资模型,多因子选股模型构建需要获取因子数据。下面就是介绍如何获取因子数据并储存起来的。
一、获取数据方法
本文从tushare官网(tushare数据接口)获取股票数据,使用Python语言。
import tushare as ts
ts.set_token("36c4bc12e6659f16e1bd6f8b4fed981d2a09ade336bb22cec25644cc")
pro = ts.pro_api()
df = pro.daily(trade_date='20200325')
二、存数据之存入MySQL数据库
1.连接MySQL数据库
连接MySQL数据库,首先需要电脑有MySQL数据库,可以自行下载并配置环境变量。
首先需要连接数据库,可以执行数据库建表,查询,添加,删除等操作。在对数据库操作完成后需要关闭数据库连接。
代码如下(示例):
# 初始化数据库连接
mydb = pymysql.connect(host='localhost',user='root',password='自己的密码',database='myDb')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = mydb.cursor()
#sql查询语句
sql = select * from myDb
# 使用 execute() 方法执行 SQL 语句
cursor.execute(sql)
# 关闭数据库连接
mydb.close()
2.建表添加数据
#建表---股票基础信息(stock_basic_info)
sql = """CREATE TABLE STOCK_BASIC_INFO (
id int , ts_code CHAR(30) NOT NULL,
symbol CHAR(20) comment '股票代码',name CHAR(20) comment '股票名称',
area CHAR(20) comment '地域',industry CHAR(20) comment '所属行业',
fullname CHAR(60) comment '股票全称',enname CHAR(60) comment '英文全称',
list_status CHAR(20) comment '上市状态',market CHAR(20) comment '市场类型')"""
cursor.execute(sql)
#根据tushare接口查询数据,并将数据添加至所建的表里
#查询当前所有正常上市交易的股票列表
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,fullname,enname,list_status,market')
#通过循环语句逐行添加数据
for index,row in data.iterrows():
sql = "INSERT INTO STOCK_BASIC_INFO(id ,ts_code, \
symbol,name,area,industry,fullname,list_status ,market) \
VALUES ('%d','%s', '%s', '%s', '%s', '%s','%s', '%s', '%s')" % \
(index,row['ts_code'],row['symbol'],row['name'],row['area'],row['industry'],row['fullname'],row['list_status'],row['market'])
# print(index)
#执行sql语句
cursor.execute(sql)
# 执行sql语句
mydb.commit()
3.读入数据
代码如下(示例):
#读取数据
stock_data = pd.read_sql('SELECT * FROM stock_data.stock_basic_info',mydb)
二、存数据之存csv文件
1.存为csv文件
代码如下(示例):
import tushare as ts
pro = ts.pro_api()
# 读取交易日历
df_tradeData = pro.trade_cal(exchange='', start_date='20180101', end_date='20181231')
# 保存交易日历
df_tradeData.to_csv(r'.\tradeDate.csv',index=False)
2.读入数据
代码如下(示例):
#读取.csv文件数据
df_Date = pd.read_csv(r'.\tradeDate.csv')
print(df_Date)