Tushare股票分析笔记-第二节-获取日线行情(未复权)2021-02-18

2 篇文章 0 订阅
1 篇文章 0 订阅
本文档介绍了如何使用Tushare API获取股票日线未复权数据并存储到MySQL数据库中。首先,通过trade_cal接口获取交易日历,然后循环调用daily接口获取每日交易数据,每17点执行程序以避免访问限制。数据包含开盘价、最高价、最低价等字段。最后,将数据写入预定义的stock_daily_2020表,删除可能引起SQL错误的change字段。
摘要由CSDN通过智能技术生成

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 分享此链接,成功注册一个有效用户。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值