1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Tushare库之日线行情

Tushare库之日线行情

时间:2022-10-20 18:58:08

相关推荐

Tushare库之日线行情

接口:daily

更新时间:交易日每天15点~16点之间

调取说明:每分钟内最多调取200次,超过5000积分无限制

描述:获取股票行情数据,或通过通用行情接口获取数据,包含了前后复权数据.

输入参数

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

输出参数

接口示例

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

或者

df = pro.query('daily', ts_code='000001.SZ', start_date='0701', end_date='0718')

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

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

数据样例

ts_code trade_date open high low close pre_close change pct_chg vol amount0 000001.SZ 0718 8.75 8.85 8.69 8.70 8.72 -0.02 -0.23 525152.77 460697.3771 000001.SZ 0717 8.74 8.75 8.66 8.72 8.73 -0.01 -0.11 375356.33 326396.9942 000001.SZ 0716 8.85 8.90 8.69 8.73 8.88 -0.15 -1.69 689845.58 603427.7133 000001.SZ 0713 8.92 8.94 8.82 8.88 8.88 0.00 0.00 603378.21 535401.1754 000001.SZ 0712 8.60 8.97 8.58 8.88 8.64 0.24 2.78 1140492.31 1008658.8285 000001.SZ 0711 8.76 8.83 8.68 8.78 8.98 -0.20 -2.23 851296.70 744765.8246 000001.SZ 0710 9.02 9.02 8.89 8.98 9.03 -0.05 -0.55 896862.02 803038.9657 000001.SZ 0709 8.69 9.03 8.68 9.03 8.66 0.37 4.27 1409954.60 1255007.6098 000001.SZ 0706 8.61 8.78 8.45 8.66 8.60 0.06 0.70 988282.69 852071.5269 000001.SZ 0705 8.62 8.73 8.55 8.60 8.61 -0.01 -0.12 835768.77 722169.579

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

效果图:

代码:

# -*- coding: utf-8 -*-"""Created on 3月11日 23点06分@author: fanbinglin"""#%%导入模块# from datetime import datetime,timedelta,time#时间处理函数import time#时间处理函数import pymysql #mysql操作库import pandas as pdimport numpy as npimport tushare as tsimport sysimport 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)mit()except:db.rollback()# 关闭数据库连接finally:db.close()return retelse:for line in sql:try:cursor.execute(line)except:cursor.rollback()# 关闭数据库连接mit()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)mit()# 关闭数据库连接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 Falseif __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='0101', 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 = '0201'end = '0529'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 = '1991'end = '0102'else:dfMask = list(df[(df.open < 18)&(~df.ts_code.str.contains('^3'))].ts_code)start = '0522'end = '0602'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 = '0529'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 : fblSource Server Version : 80011Source Host : localhost:3306Source Database : financeTarget Server Type : MYSQLTarget Server Version : 80011File Encoding : 65001Date: -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、爬虫、拆机、装系统技术交流群】,点击链接加入群聊【计算机技术交流】:/?_wv=1027&k=5V7RB2c

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。