前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何从tushare获取股票历史数据写入自己的MySQL数据库[通俗易懂]

如何从tushare获取股票历史数据写入自己的MySQL数据库[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-12 01:20:47
发布于 2022-09-12 01:20:47
8.1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

如何从tushare获取股票历史数据写入自己的MySQL数据库

点击 https://tushare.pro/register?reg=414428 ,免费注册后即可获取 tushare 的 token,就可以下载各种金融数据了。

1. tushare推荐方法

如果你需要读取全部股票的历史数据,tushare 给的建议是按 “天” 获取。因为 tushare api 限制一次获取最高5000条记录,而A股市场目前有3000多只股票,提取一次数据不会超过 api 的限制记录数。

代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tushare as ts
pro = ts.pro_api()
df = pro.daily(trade_date='20200325')

然后通过日期循环,就可以获取所有股票的历史数据了。 日期信息可以通过交易日历获得:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#获取2020010120200401之间所有有交易的日期
df = pro.trade_cal(exchange='SSE', is_open='1', 
                            start_date='20200101', 
                            end_date='20200401', 
                            fields='cal_date')
print(df.head())

输出

cal_date 0 20200102 1 20200103 2 20200106 3 20200107 4 20200108

为了保持数据提取的稳定性,tushare 建议先建立一个专门的函数,实现一个重试机制,见下面代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def get_daily(self, ts_code='', trade_date='', start_date='', end_date=''):
    for _ in range(3):
        try:
            if trade_date:
                df = self.pro.daily(ts_code=ts_code, trade_date=trade_date)
            else:
                df = self.pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)
        except:
            time.sleep(1)
        else:
            return df

然后通过循环调取数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for date in df['cal_date'].values:
     df = get_daily(date)

上述方法使用的是 pro.daily() 函数,目前 tushare 提供了一个新的“通用行情接口” pro_bar() ,而且内部已经存在重试机制,所以现在可以直接用 ts.pro_bar() 函数来获取历史数据了。

2.获取个别数据

如果不需要那么多的数据,只要个别股票的所有数据,还可以按tscode来获取。 使用 ts.pro_bar() 代替 pro.daily() 。

上一篇 《学习python想连接MySQL,没有练习数据怎么办?》 已经把股票基础信息保存在MySQL数据库里了,本篇需要从 stock_basic 里获取上市公司的上市日期。

2.1. 在数据库stock下,增加表 stock _all

用 Navicat 看着更方便,设 ts_code + trade_date 作为主键,避免数据重复。

2.2. 代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
#
# Author: wxb
# Purpose: 初始化数据库 stock_all,数据来源 tushare, 数据接口说明 https://waditu.com/document/2?doc_id=109
# Latest Version: V1.0 @ 2021/1/10 15:20
# File: init_stock_all.py

import sys
import time
import pymysql
import tushare as ts


def str_date_to_num(str_date):
    # 把字符串日期转换为以‘秒’为单位的整数
    tmp_date = time.strptime(str_date, "%Y%m%d")
    second = int(time.mktime(tmp_date))
    return second

def num_to_str_date(second):
    # 把以‘秒’为单位的日期整数转换为字符串日期
    tmp_date = time.localtime(second)
    str_date = time.strftime("%Y%m%d", tmp_date)
    return str_date


if __name__ == '__main__':
    # 设置 TUSHARE_token, 初始化API接口
    ts.set_token('你从tushare获得的token')
    pro = ts.pro_api()
    # 建立数据库连接
    db = pymysql.connect(host='127.0.0.1', user='root', password='你的MySQL密码', database='stock', charset='utf8')
    cursor = db.cursor()
    # 举例用的2个股票代码
    stock_pool = ['000001.SZ', '000002.SZ']
    for tscode in stock_pool:
        # 从 stock_basic 表中获取上市日期
        sql_query = f'SELECT `list_date` FROM stock_basic WHERE `ts_code` = "{tscode}"'
        # print(sql_query)
        cursor.execute(sql_query)
        data = cursor.fetchone()
        if not data:
            print(f'Failed to get the list_date of "{tscode}"')
            continue
        # 设置起始日期
        start_date = data[0]
        # 设置当前日期为结束日期
        end_date = time.strftime('%Y%m%d', time.localtime())
        print(f'"{tscode}" : {start_date} - {end_date}')

        # 因为tushare api对提取有限制,每次最多提取5000条数据,这里要进行分次提取
        # 字符串日期转换成数字用于计算
        s_dt = str_date_to_num(start_date) - 1 * (24 * 60 * 60)
        e_dt = str_date_to_num(end_date)
        # 每次提取日期范围5000天,因为含有非交易日,所以返回数据不会超过5000条记录
        # 因为日期转换返回的是'秒',所以这里要乘以“ 24小时 * 3600/小时 ”
        step = 5000 * (24 * 60 * 60)
        tot_records = 0    # 写入数据库的记录数
        tot_rows = 0    # 从api读到的记录数
        for dt in range(s_dt, e_dt, step):
            sdate = num_to_str_date(dt + 1 * (24 * 60 * 60))
            t_dt1 = dt + step
            t_dt2 = t_dt1 if t_dt1 < e_dt else e_dt
            edate = num_to_str_date(t_dt2)
            try:
                # 获取stock日线行情,同时要求返回复权因子
                df = ts.pro_bar(ts_code=tscode, start_date=sdate, end_date=edate, adj='', adjfactor=True)
            except Exception as e:
                print(e)
                continue
            # 如果没有数据返回,继续
            if df is None:
                continue
            # 返回 rows 个记录,写入数据库
            rows = df.shape[0]
            tot_rows += rows
            print('"%s" : %4s records returned for date range %s - %s' % (tscode, rows, sdate, edate))
            values = []
            for index in range(rows):
                stk_data = tuple(df.loc[index])
                # if index <= 10: print(stk_data)
                values.append(stk_data)
            try:
                sql_insert = 'INSERT INTO `stock_all` (`ts_code`, `trade_date`, `open`, `high`, `low`, `close`, `pre_close`, `change`, `pct_chg`, `vol`, `amount`, `adj_factor`) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)'
                tot_records += cursor.executemany(sql_insert, values)
                db.commit()
            except Exception as e:
                print(e)
                db.rollback()
        print(f'"{tscode}" : {tot_records} of {tot_rows} records were inserted.\n')
    cursor.close()
    db.close()
    print('Done!')

2.3. 数据

获取的是不复权的数据

所有复权因子也有了

点击 https://tushare.pro/register?reg=414428 ,免费注册后即可获取 token,就能下载各种金融数据了。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/152730.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
❤️ 炒 股 实 战丨原 地 起 飞 ❤️
郑重声明: 1、个人版可以免费获取交易数据进行分析,企业级大规模调用数据需要购买积分(大家玩玩即可) 2、为避免广告代言,本文将不会出现任何logo、链接和包,需要玩的主页私聊我! 🍅 作者主页:不吃西红柿 🍅 简介:CSDN博客专家🏆、信息技术智库公号作者✌简历模板、PPT模板、技术交流、面试套路尽管【关注】私聊我。 本文主要介绍三部分:数据采集,数据预处理,利用SVM算法进行建模。 作为一个新手,你需要以下3个步骤: 1、用户注册 > 2、获取token > 3、调取数据 数据内容:包含股票
不吃西红柿
2022/07/29
2790
❤️ 炒 股 实 战丨原 地 起 飞 ❤️
获取A股行情数据方法[通俗易懂]
做股票量化分析,获取股票行情数据是第一步,结合网上的信息,和我用过的一些东西,做个总结。以后有新信息,逐步完善。
全栈程序员站长
2022/07/25
8.7K0
【说站】python中使用动量交易策略
动量交易策略,动量是物体质量和速度的乘积,动量一方面描述了物体的运动状态,另一方面也描述了惯性的大小。
很酷的站长
2022/11/23
5250
【说站】python中使用动量交易策略
如何获取沪深股市历史数据并入库
作为一个技术男,一开始总想着怎么去爬数据。然而一旦发现有免费的数据接口时,瞬间感觉爬来的不香了。。。
全栈程序员站长
2022/09/12
9410
如何获取沪深股市历史数据并入库
量化交易数据获取:tushare基本介绍和基本操作
TOC 基本介绍 官网:https://waditu.com/ [SwVUbXt5eRv2FMJ] [skaVu1BHyt8XKjp]平台介绍 沪深股票数据是Tushare最传统最有历史的数据服务项目,从一开始就为广大的投资者,尤其是量化投资者提供了稳定、便捷的接口。Tushare Pro版在继承了旧版API的便捷易用性的同时又加强了数据的广度和深度。最为关键的是,数据来源和采集方式也发生了根本的变化,除了公开渠道的数据源,最关键性的变化是Tushare构建起来了自有的数据存储和数据治理体系,同时依托平台化
AI拉呱
2021/02/18
1.6K0
我常用的几个Python金融数据接口库,非常好用~
在金融分析和量化投资领域,Python已成为最受欢迎的编程语言之一。这主要归功于其丰富的库和框架,它们提供了处理和分析金融数据所需的工具,而且还有大量免费实时的金融股票数据供你分析研究。
派大星的数据屋
2024/09/29
9780
我常用的几个Python金融数据接口库,非常好用~
python实现量化交易策略
相信大家都听说过股票,很羡慕那些炒股大佬,觉得量化投资非常高深,本文教大家用python实现简单的量化交易策略。在这强调一下,本文仅供交流学习参考,不构成任何投资建议。炒股有风险,投资需谨慎。
全栈程序员站长
2022/09/13
1.3K0
个人量化投资体系搭建(一)
作为一名技术人员利用量化交易来进行投资,才能让自己更理智的面对动荡不安的A股。如何建立起一个成熟的投资策略,是非常重要的,关键时刻也许可以让我们避免被割。
zucchiniy
2020/09/23
1.8K0
最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格
时间序列数据在数据科学领域无处不在,在量化金融领域也十分常见,可以用于分析价格趋势,预测价格,探索价格行为等。
一墨编程学习
2019/07/18
6.1K1
最简洁的Python时间序列可视化:数据科学分析价格趋势,预测价格,探索价格
【手把手教你】搭建自己的量化分析数据库
数据是金融量化分析的重要基础,包括股票历史交易数据、上市公司基本面数据、宏观和行业数据等。随着信息流量的日益膨胀,学会获取、查询和加工数据信息变得越来越重要。对于鼓捣量化交易的人来说,怎么能说不会玩数据库呢?目前常用的开源(免费)数据库有MySQL、Postgresql 、Mongodb 和 SQLite (Python自带),在2018-2019年DB-Engines 排行榜上位居前十(见下图),可见其使用量和受欢迎程度较高。这几个数据库各有自己的特点和适用环境,关于该学习哪一个或如何学习网上有很多相关资料。本文主要为大家简单介绍如何使用 Python 操作 Postgresql 数据库(其他数据库类似),利用 psycopg2 和 sqlalchemy 实现 postgresql 与 pandas 的 dataframe 进行交互,一步步搭建自己的量化分析数据库。
Python进阶者
2019/05/27
3.6K0
python 获取股票数据 tushare使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2K0
python拉取股票数据存入mysql
用python拉取 https://tushare.pro/register?reg=129295 中的股票数据并存入mysql. # encoding:utf-8 import tushare as
xiny120
2019/06/11
2.6K0
4行Python代码实时获取股市数据
最近股市特别火,正在学/学会Python的读者想尝试一下股市交易或者练练项目,获取数据便必不可少。这不,行哥给大家介绍一个专门获取股市数据的方法,有了数据之后数据分析、机器学习还不赶紧跑起来?毕竟这社会毒打实践课经历一次就少一次
行哥玩Python
2020/07/14
3.9K0
4行Python代码实时获取股市数据
Python获取股票历史数据
闲了的时候还是要学一点金融知识,先不说金融懂多少,但是通过金融的目的来编程其实也还行。总之美好的一天不要浑浑噩噩的度过。我觉得都是值得回忆的美好岁月。我们都知道股票市场有很多交易数据,有人亏损有人盈利。但是赚的人肯定是赚了很久了。赔的人也许会一直亏,但也可能厚积薄发。作为一只初来乍到的程序员,咋没有那种科班背景,所以很多时候唯一能派上用场的的好好学习。那么最基础的肯定需要知道基本知识吧,因为我本人是一只目的和好奇心驱动的猿,所以让我系统的学习某个专业会让我很难接受,主要是学过之后不一定能够形成系统的认知能力。可能效果总比我这样凭感觉的好的多的多。后期再看情况,先不扯这些话题。今天的目标就是记录一下我是如何获取股票数据的。没错我用的是开源的组件,没有写爬虫。因为股票数据是有专业的组织开放的api,里边比较好的是tushare和baostack。然后之前使用tushare还好,还是自从他们升级之后就需要积分了,然后发现自己的积分不够。所以我采用了baostack,但是baostack的问题是“数据不全”。其实也不是数据不全,而是获取全部股票信息的时候返回的数据总是隔三差五。让我对此产生了怀疑。纠结之下发现tushare能够获取全部股票列表,然后我把之前baostack中没有返回的股票代码作为参数调baostack其实也是能返回数据的。那么就是baostack的rs=bs.query_stock_basic()接口的问题?反正已经呵呵哒了,所以我最终采用的策略是使用tushare获取上证和深证的股票,然后调用baostack获取股票的历史交易数据并保存到文件中。
写一点笔记
2020/08/25
3.9K0
Python获取股票历史数据
使用python进行量化交易
pip install tushare,tushare需要使用tushare官网注册后提供的token
sofu456
2024/05/25
2940
用GPT和机器学习炒股?附代码
在机器学习领域,监督学习是一种很重要的学习模式。它指的是我们在数据有正确标签的情况下建立模型,并通过这一正确标签让模型进行自我修正,使其预测结果不断地朝着正确的方向迈进。
统计学家
2023/11/28
6280
用GPT和机器学习炒股?附代码
零代码量化投资:用ChatGPT获取个股的日线行情
Tushare是一个免费开源的金融数据集,包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类。注册地址:https://tushare.pro/register?reg=600134 reg=600134
AIGC部落
2024/06/24
1240
零代码量化投资:用ChatGPT获取个股的日线行情
基于python的证券数据可视化入门(数据不好找,模型不好整)
人工智能的触手遍及各种行业,其中最让人眼红的莫过于金融行业。伸手就能割韭菜,何乐不为!但是,要怎么样才能真正割好韭菜,各路大神也是挠破头了吧。。。现在入门还算迟吗?
一个有趣的灵魂W
2021/01/21
1K0
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
知识图谱存储方式主要包含资源描述框架(Resource Description Framework,RDF)和图数据库(Graph Database)。
汀丶人工智能
2023/07/08
1.6K0
手把手教学小型金融知识图谱构建:量化分析、图数据库neo4j、图算法、关系预测、命名实体识别、Cypher Cheetsheet详细教学等
Tushare免费获取股票数据:实时数据,历史数据,行情数据
引导用户顺利开始使用Tushare Pro数据,以下步骤将带您开始Tushare数据之旅:
不吃西红柿
2022/07/29
1.9K0
Tushare免费获取股票数据:实时数据,历史数据,行情数据
推荐阅读
相关推荐
❤️ 炒 股 实 战丨原 地 起 飞 ❤️
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验