接口:daily
更新时间:交易日每天15点~16点之间
调取说明:每分钟内最多调取200次,超过5000积分无限制
描述:获取股票行情数据,或通过通用行情接口获取数据,包含了前后复权数据.

输入参数

名称 类型 必选 描述
ts_code str N 股票代码(二选一)
trade_date str N 交易日期(二选一)
start_date str N 开始日期(YYYYMMDD)
end_date str N 结束日期(YYYYMMDD)

注:日期都填YYYYMMDD格式,比如20181010

输出参数

名称 类型 描述
ts_code str 股票代码
trade_date str 交易日期
open float 开盘价
high float 最高价
low float 最低价
close float 收盘价
pre_close float 昨收价
change float 涨跌额
pct_chg float 涨跌幅 (未复权,如果是复权请用 通用行情接口 )
vol float 成交量 (手)
amount float 成交额 (千元)

接口示例


pro = ts.pro_api()df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20180718')

或者


df = pro.query('daily', ts_code='000001.SZ', start_date='20180701', end_date='20180718')

也可以通过日期取历史某一天的全部历史


df = pro.daily(trade_date='20180810')

数据样例

 ts_code trade_date  open  high   low  close  pre_close  change    pct_chg  vol        amount
0  000001.SZ   20180718  8.75  8.85  8.69   8.70       8.72   -0.02       -0.23   525152.77   460697.377
1  000001.SZ   20180717  8.74  8.75  8.66   8.72       8.73   -0.01       -0.11   375356.33   326396.994
2  000001.SZ   20180716  8.85  8.90  8.69   8.73       8.88   -0.15       -1.69   689845.58   603427.713
3  000001.SZ   20180713  8.92  8.94  8.82   8.88       8.88    0.00        0.00   603378.21   535401.175
4  000001.SZ   20180712  8.60  8.97  8.58   8.88       8.64    0.24        2.78  1140492.31  1008658.828
5  000001.SZ   20180711  8.76  8.83  8.68   8.78       8.98   -0.20       -2.23   851296.70   744765.824
6  000001.SZ   20180710  9.02  9.02  8.89   8.98       9.03   -0.05       -0.55   896862.02   803038.965
7  000001.SZ   20180709  8.69  9.03  8.68   9.03       8.66    0.37        4.27  1409954.60  1255007.609
8  000001.SZ   20180706  8.61  8.78  8.45   8.66       8.60    0.06        0.70   988282.69   852071.526
9  000001.SZ   20180705  8.62  8.73  8.55   8.60       8.61   -0.01       -0.12   835768.77   722169.579

这个是股票分析最重要的接口,我经常将每日的行情下下来放到数据库中(将代码加入到定时任务,每天自动更新数据)。

效果图:

代码:

# -*- coding: utf-8 -*-
"""
Created on 2019年3月11日 23点06分
@author: fanbinglin
"""
#%%导入模块
# from datetime import  datetime,timedelta,time#时间处理函数
import time#时间处理函数
import pymysql #mysql操作库
import pandas as pd
import numpy as np
import tushare as ts
import sys
import os
#%%全局对象#生产环境mysql配置
mysqlSetting_server={'host':"ip",'port':3306,'user':"root", 'passwd':"**********", 'db':"Finance", 'charset':'utf8'
}
#本地
mysqlSetting_local={'host':"localhost",'port':3306,'user':"root", 'passwd':"***********", 'db':"Finance", 'charset':'utf8'
}#执行sql语句
def exeSql(mysqlSetting,sql,mode = 0):# 打开数据库连接db = pymysql.connect(host=mysqlSetting['host'], port=mysqlSetting['port'],user=mysqlSetting['user'], \passwd=mysqlSetting['passwd'], db=mysqlSetting['db'], charset=mysqlSetting['charset'] )# 使用cursor()方法获取操作游标 cursor = db.cursor()if mode == 0:ret = 0try:cursor.execute(sql)ret = cursor.fetchall()print(ret)db.commit()except:db.rollback()# 关闭数据库连接finally:db.close()return retelse:for line in sql:try:cursor.execute(line)except:cursor.rollback()# 关闭数据库连接db.commit()db.close()
#DataFrame对象落地数据库
def df2sql(mysqlSetting,df,tableName):# 打开数据库连接db = pymysql.connect(host=mysqlSetting['host'], port=mysqlSetting['port'],user=mysqlSetting['user'], \passwd=mysqlSetting['passwd'], db=mysqlSetting['db'], charset=mysqlSetting['charset'] )# 使用cursor()方法获取操作游标 cursor = db.cursor()     #添加操作的sql语句sqlInsert="REPLACE INTO "+tableName+" ("for _,column in enumerate(df.columns):if _<len(df.columns)-1:sqlInsert =sqlInsert+column+','else:sqlInsert =sqlInsert+column+') VALUES 'for index,row in df.iterrows():sqlInsertNew=sqlInsert+'('for i,column in enumerate(df.columns):    if i<len(df.columns)-1:if pd.isnull(row[column]) or row[column] == 0:sqlInsertNew=sqlInsertNew+'NULL'+','else:sqlInsertNew=sqlInsertNew+'\''+str(row[column])+'\''+','#sqlInsertNew=sqlInsertNew+'\''+str(row[column])+'\''+','else:if pd.isnull(row[column]) or row[column] == 0:sqlInsertNew=sqlInsertNew+'NULL'         else:sqlInsertNew=sqlInsertNew+'\''+str(row[column])+'\''  #sqlInsertNew=sqlInsertNew+'\''+str(row[column])+'\''sqlInsertNew=sqlInsertNew+');'#print(sqlInsertNew)cursor.execute(sqlInsertNew)db.commit()# 关闭数据库连接db.close()
def saveFile(filename,content,mode):try:#with open(filename,mode,encoding='utf-8') as f:#二进制文件不能保存为utf-8格式with open(filename,mode) as f:f.write(content)f.close()print('\t'+filename + "保存成功!")except:print('\t'+filename + "保存失败!")f.close()def readFile(filename):try:with open(filename,"r",encoding='utf-8') as f:return f.read()except:return False
if __name__ == '__main__':print(sys.argv)mode = 5 #0:(2,5)-all 1:自选股票  other:allinsertPara = 0if len(sys.argv) > 1:insertPara = int(sys.argv[1])ts.set_token('357f92fd3836f2d018d20b9b840897abb3e5c9a62e17895b413e05fe')today = time.strftime('%Y%m%d')pro = ts.pro_api()calendar = pro.query('trade_cal', start_date='20190101', end_date=today)trade_cal = calendar[calendar.is_open==1]df = pro.daily(trade_date=trade_cal.cal_date.values[-1])  #今天if not len(df):df = df = pro.daily(trade_date=trade_cal.cal_date.values[-2]) #如果今天没数据,就请求上一个交易日df.rename(columns = {0:'ts_code',1:'ts_name',2:'trade_date',3:'ts_open',4:'ts_high',5:'ts_low',6:'ts_close',7:'pre_close',8:'ts_change',9:'pct_chg',10:'vol',11:'amount'},inplace = True)issueCode2IssueName = dict(pro.query('stock_basic', exchange='', list_status='L', fields='ts_code,name').values)if mode == 0:dfMask = list(df[(2 <df.open < 5)&(~df.ts_code.str.contains('^3'))].ts_code)start = '20190201'end = '20190529'elif mode == 1:# dfMask = ['600175.SH','600868.SH','000883.SZ','600425.SH','002145.SH','600869.SH','601991.SH']dfMask = ['600175.SH','600868.SH','000883.SZ']start = '19920101'end = '20150102'else:dfMask = list(df[(df.open < 18)&(~df.ts_code.str.contains('^3'))].ts_code)start = '20190522'end = '20190602'stockListDict = {k:v for k,v in issueCode2IssueName.items() if k in dfMask}createTableSql = r'create table IF NOT EXISTS myPrice(ts_code char(255),ts_name char(255),trade_date char(255),ts_open char(255),ts_high char(255),ts_low char(255),ts_close char(255),pre_close char(255),ts_change char(255),pct_chg char(255),vol char(255),amount char(255),PRIMARY KEY (ts_code,trade_date));'exeSql(mysqlSetting_local,createTableSql)end = '20190529'length = len(stockListDict)count = 1if insertPara == 0:#大量插入,按issuCode来请求,一般是第一次请求for issueCode,issueName in stockListDict.items():data = pro.query('daily',ts_code=issueCode,start_date = start,end_date = end)print("id = {id},name = {name},index = {index},totleLen = {length}".format(id = issueCode,name = issueName,index = count,length = length))data.rename(columns={'open':'ts_open','high':'ts_high','low':'ts_low','close':'ts_close','change':'ts_change'},inplace=True)data['ts_name'] = issueCode2IssueName[issueCode]df2sql(mysqlSetting_local,data,'myPrice')count += 1if insertPara == 1:#按交易日来,一般是用来增量增加for date in trade_cal.cal_date.values[-1:-5:-1]:data = pro.daily(trade_date=date)dfMask = list(df[(df.open < 18)&(~df.ts_code.str.contains('^3'))].ts_code)dataMask = data[data.ts_code.isin(dfMask)].ts_codestockListDict = {k:v for k,v in issueCode2IssueName.items() if k in dfMask}print("date = {}".format(date))dataInsert = data[data.ts_code.isin(stockListDict.keys())].copy()dataInsert.rename(columns={'open':'ts_open','high':'ts_high','low':'ts_low','close':'ts_close','change':'ts_change'},inplace=True)dataInsert['ts_name'] = dataInsert['ts_code'].map(lambda x:stockListDict[x])df2sql(mysqlSetting_local,dataInsert,'myPrice')saveTimte = time.strftime('%Y/%m/%d %H:%M:%S')saveFile(r'F:\Code\Python\python3.6.5\项目\金融数据\history\history.log',saveTimte + '\n','a+')

这里的token是我的账号生成的,如果你也想注册,麻烦用 推荐 https://tushare.pro/register?reg=241422 链接。

这里需要提前在本地装好Mysql数据库并根据代码建立好数据库和数据表,如果不会装数据库请参看之前的博客文章。

数据库代码:

/*
Navicat MySQL Data TransferSource Server         : fbl
Source Server Version : 80011
Source Host           : localhost:3306
Source Database       : financeTarget Server Type    : MYSQL
Target Server Version : 80011
File Encoding         : 65001Date: 2019-08-01 23:18:12
*/SET FOREIGN_KEY_CHECKS=0;-- ----------------------------
-- Table structure for myprice
-- ----------------------------
DROP TABLE IF EXISTS `myprice`;
CREATE TABLE `myprice` (`ts_code` char(255) NOT NULL,`ts_name` char(255) DEFAULT NULL,`trade_date` char(255) NOT NULL,`ts_open` char(255) DEFAULT NULL,`ts_high` char(255) DEFAULT NULL,`ts_low` char(255) DEFAULT NULL,`ts_close` char(255) DEFAULT NULL,`pre_close` char(255) DEFAULT NULL,`ts_change` char(255) DEFAULT NULL,`pct_chg` char(255) DEFAULT NULL,`vol` char(255) DEFAULT NULL,`amount` char(255) DEFAULT NULL,PRIMARY KEY (`ts_code`,`trade_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

喜欢折腾代码的加群(群号:822286811)一起交流学习【python、VBA、Shell、Linux、dos、爬虫、拆机、装系统技术交流群】,点击链接加入群聊【计算机技术交流】:https://jq.qq.com/?_wv=1027&k=5V7RB2c

Tushare库之日线行情相关推荐

  1. 使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(二)-使用ta-lib库获取日线行情.5日均线.10日均线行情并显示 这个文章其实和我的上一篇文章,https://blog.csdn.net/lost0910 ...

  2. 如何在Python中使用Tushare进行股票日线行情获取并存储至数据库

    Tushare ID:457662 想必很多想从事量化或者有金融爱好的小伙伴们想利用自己的程序对股票走势进行分析. 在最基础的日线行情获取上,很多人就遇到了不小的难题,光是海量的爬虫代码就让人望而生畏 ...

  3. Tushare积分不够2000利用日线行情数据计算涨跌停价格

    Tushare积分不够2000利用日线行情数据计算涨跌停数据 股票的涨跌幅规则 计算逻辑 代码 股票的涨跌幅规则 众所周知A股股票的涨跌幅是有限制的.目前创业板和科创板的涨跌幅涨跌幅限制比例为20%, ...

  4. 使用Python对股票数据进行数据分析(一)-计算日线行情、5日均线、10日均线行情并显示

    使用Python对股票数据进行数据分析(一)-计算日线行情.5日均线.10日均线行情并显示 各种炒股软件上可以显示各种技术指标,可以帮助投资者进行技术分析.这些股市中的这些指标都是怎么计算出来的呢?这 ...

  5. 关于Tushare库的使用

    Tushare库的使用 1.获取历史数据 1.1获取股票历史行情数据 1.2获取涨停跌停股票数据 1.3获取期货合约信息 1.4获取期货历史行情数据 1.5获取期权合约数据 1.6获取期权历史行情数据 ...

  6. python处理期货数据分析_量化交易分析第一步利用Tushare轻松获取股票期货行情数据...

    Tushare简介 Tushare是一个免费开源的python财经数据接口包,主要能够实现对股票.期货等金融数据从数据采集.清洗加工到数据存储的过程,能够为金融分析人员提供快速.整洁和多样的便于分析的 ...

  7. 【机器学习】使用CatBoost库分析股票行情(指标为RSI、Boll、MACD和MA)并输出因子占比分析

    文章目录 前言 一.CatBoost是什么? 二.准备工作 2.1 MyTT 2.2 获取日K数据 2.3 安装CatBoost 三. 使用CatBoost库分析股票行情(完整源码) 总结 前言 随着 ...

  8. 使用tushare进行股票日线数据下载

    Tushare是一个免费.开源的python财经数据接口包.主要实现对股票等金融数据从数据采集.清洗加工 到 数据存储的过程,能够为金融分析人员提供快速.整洁.和多样的便于分析的数据,为他们在数据获取 ...

  9. Python之tushare:tushare库的简介、安装、使用方法之详细攻略

    Python之tushare:tushare库的简介.安装.使用方法之详细攻略 目录 tushare库的简介 tushare库的安装 tushare库的使用方法 1.基础用法 tushare库的简介 ...

  10. 【手把手教你如何从Tushare库下载股票数据,并保存在硬盘当中,第一篇数据过滤】

    手把手教你如何从Tushare库下载股票数据,并保存在硬盘当中.第一篇数据过滤 前言 一.Tushare是什么? 二.代码 1.引入库 2.交易日的逻辑 3.先把每天个股的基础数据调出来 3.接下来我 ...

最新文章

  1. python int函数详解_Python内置函数OCT详解
  2. html微信窗口阻止滚动条,解决微信浏览器页面可以随意拉伸,导致页面内部滚动条滚动体验不好的问题...
  3. 离线数据同步神器:DataX,支持几乎所有异构数据源的离线同步到MaxCompute
  4. 寺库等奢侈品电商补贴下的奢侈品市场,会是怎样的未来
  5. unzip 分包_建筑总包企业计量分包成本时,未取得相应分包发票,增值税如何处理?...
  6. 信息系统项目管理师十大常见问题汇总
  7. C#窗体中的textBox怎么设置为密码框
  8. 电脑间用网线传输文件的方法Win10-Win10(Win7)
  9. pyspark randomSplit代码示例
  10. 深入学习jQuery的三种常见动画效果
  11. Meanshift 均值飘移实现图像聚类 MATLAB实现(4)
  12. Pyqt 打开外部链接的几种方法
  13. @程序员,敏捷开发防坑指南请查收!
  14. 蓝桥杯 ALGO-58 算法训练 字串逆序
  15. ExtJs 4.1.1 文件结构解析
  16. 前端JavaScript 加载优化
  17. [ openwrt ] 添加一个通过GPIO控制的LED
  18. zxr10交换机配置手册vlan_中兴交换机配置命令
  19. Windows10专业版系统镜镜像
  20. ubuntu20.04安装与卸载搜狗拼音输入法

热门文章

  1. 图解深度学习-梯度下降法优化器可视化(SGD, Momentum,Adam, Adagrad and RMSProp)
  2. PreferenceActivity(首选项设置页)
  3. c语言单片机当型编程,手把手教你学单片机的C语言程序设计(十四).pdf
  4. 智能小车之电源板电路设计分析
  5. 数据结构课程设计(已完结)
  6. 小学计算机课的微案例,全国中小学信息技术课程教学案例大赛获奖作品 趣味造型制作.doc...
  7. “物联网开发实战”学习笔记-(一)硬件开发环境的搭建
  8. 利用FreeMarker生成java源代码
  9. db9针232接口波特率标准_DB9 公头母头引脚定义及连接
  10. vue 字符存在_vue中如何渲染字符串,字符串是组件类型的