Tushare股票分析笔记-第二节
本节的内容获取日线行情(未复权),交易日每天15点~16点之间,因此一般在17点执行该程序。更新频率为one day or week
主要包括以下几个知识点,希望对您能有所帮助:
(1)根据start_date和end_date,调用pro.trade_cal()接口,添加is_open=‘1’,拿到一段历史的交易日明细;
(2)根据接口返回的数据类型在Mysql新建数据表,建表程序见文档;不知道为什么change字段存入mysql总是报sql语法错误,先删掉该字段。
(3)根据trade_date循环调用获得每日交易数据,调用pro.daily()接口。如果交易日数量多,Tushare对访问有限制。加入了time.sleep(1)来控制访问频率,避免被Tushare服务器拒绝。
(4)加入str.format()来打印每个交易日获取数据成功的消息。
(5)由于ts_code和trade_date都会有重复,因此将这两个字段都设置为主键。
第一部分:数据库建表执行程序
CREATE TABLE `stock_daily_2020` (
`ts_code` varchar(50) NOT NULL COMMENT '股票代码',
`trade_date` varchar(50) NOT NULL COMMENT '交易日期',
`open` float(7,2) DEFAULT NULL COMMENT '开盘价',
`high` float(7,2) DEFAULT NULL COMMENT '最高价',
`low` float(7,2) DEFAULT NULL COMMENT '最低价',
`close` float(7,2) DEFAULT NULL COMMENT '收盘价',
`pre_close` float(7,2) DEFAULT NULL COMMENT '昨收价',
`pct_chg` float(7,2) DEFAULT NULL COMMENT '涨跌幅 (未复权)',
`vol` float(10,2) DEFAULT NULL COMMENT '成交量 (手)',
`amount` float(15,2) DEFAULT NULL COMMENT '成交额 (千元)',
PRIMARY KEY (`ts_code`,`trade_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二部分:主程序
"""
接口:daily
描述:获取日线行情(未复权),交易日每天15点~16点之间
更新频率:one day or week
"""
# -*- coding:utf-8 -*-
import tushare as ts
import pymysql
import pandas as pd
import time
# 根据start_date和end_date,拿到一段历史的交易日明细
def get_trade_data(start_date, end_date):
# 只需要在第一次或者token失效后调用
# ts.set_token('your token')
pro = ts.pro_api()
# 查询交易日历数据
df = pro.trade_cal(exchange='', is_open='1', start_date=start_date, end_date=end_date)
return df
# 根据trade_date循环调用获得每日交易数据:
def get_daily(trade_date):
pro = ts.pro_api()
df_daily = pro.daily(trade_date=trade_date)
print('{}的数据获取成功'.format(trade_date), '=== !!!获取成功!!! ==== 共有', df_daily.shape[0], '条股票数据')
time.sleep(1)
return df_daily
# 连接数据库,更新数据,需要给出近期的start_date和end_date
def write_data(start_date, end_date):
start_date = start_date
end_date = end_date
# 创建每日行情的空dateframe
df_data = pd.DataFrame(
columns=['ts_code', 'trade_date', 'open', 'high', 'low', 'close', 'pre_close', 'change', 'pct_chg', 'vol',
'amount'])
# 获取交易日的列表
df_list = get_trade_data(start_date, end_date)
for data in df_list['cal_date'].values:
df_daily = get_daily(data)
df_data = df_data.append(df_daily)
print('<=== !!!全部获取成功!!! ====> 总共有', df_data.shape[0], '条股票数据')
# 注意接口提供的数据为float64类型,change字段存入mysql有问题,先删掉
df_data.drop(['change'], axis=1, inplace=True)
# df转换为元组
tuples = [tuple(x) for x in df_data.values]
# 连接数据库,并写入
db = pymysql.connect(host="localhost",
user="root",
password="root",
db="STOCK",
charset='utf8')
cur = db.cursor()
sql = """
insert into stock_daily_2020(ts_code,trade_date,open,high,low,close,pre_close,pct_chg,vol,amount) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
"""
cur.executemany(sql, tuples)
print('<=== !!!写入Mysql完毕!!! ====> ')
cur.close()
db.commit()
db.close()
if __name__ == '__main__':
write_data('20200201', '20201231')
文末:
如果对您有所帮忙,希望相互关注,我将会持续更新,一直到这个系统的前端和后端全部搭建完成。
如果您还没有注册Tushare数据平台,欢迎点击下面的这个链接。您的注册,也会让我获得一定的积分。感谢!
https://tushare.pro/register?reg=401060 分享此链接,成功注册一个有效用户。