使用如下代码从TuShare下载沪深300每只股票的历史成交记录并按股票、日期保存到本地。主要是为了以后查询方便快速。

#-*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import tushare as ts
import datetime
import time
import tushare as ts
import os data_dir = '/home/vnpy/share/' #下载数据的存放路径 #ts.get_sz50s() #获取上证50成份股 返回值为DataFrame:code股票代码 name股票名称 #cal_dates = ts.trade_cal() #返回交易所日历,类型为DataFrame, calendarDate isOpen
cal_dates = pd.read_csv(data_dir+'trade_cal.csv') #本地实现判断市场开市函数
#@date: str类型日期 eg.'2017-11-23'
def is_open_day(date):
if date in cal_dates['calendarDate'].values:
return cal_dates[cal_dates['calendarDate']==date].iat[0,2]==1
return False #从TuShare获取tick data数据并保存到本地
#@symbol: str类型股票代码 eg.600030
#@date: date类型日期
def get_save_tick_data(symbol, date):
global sleep_time,data_dir
res=True
sleep_time=2
str_date=str(date)
dir=data_dir+symbol+'/'+str(date.year)+'/'+str(date.month)
file=dir+'/'+symbol+'_'+str_date+'.csv'
if is_open_day(str_date):
if not os.path.exists(dir):
os.makedirs(dir)
if not os.path.exists(file):
try:
d=ts.get_tick_data(symbol,str_date,pause=0.1)
except IOError, msg:
print str(msg).decode('UTF-8')
sleep_time=min(sleep_time*2, 128)#每次下载失败后sleep_time翻倍,但是最大128s
print 'Get tick data error: symbol: '+ symbol + ', date: '+str_date+', sleep time is: '+str(sleep_time)
return res
else:
d.to_csv(file)
#hdf5_file=pd.HDFStore(file, 'w',complevel=4, complib='blosc')
#hdf5_file['data']=d
#hdf5_file.close()
sleep_time=max(sleep_time/2, 2) #每次成功下载后sleep_time变为一半,但是至少2s
print "Successfully download and save file: "+file+', sleep time is: '+str(sleep_time)
return res
else:
print "Data already downloaded before, skip " + file
res=False
return res #获取从起始日期到截止日期中间的的所有日期,前后都是封闭区间
def get_date_list(begin_date, end_date):
date_list = []
while begin_date <= end_date:
#date_str = str(begin_date)
date_list.append(begin_date)
begin_date += datetime.timedelta(days=1)
return date_list #获取感兴趣的所有股票信息,这里获取沪深全部股票
def get_all_stock_id():
#stock_info=ts.get_hs300s()
stock_info = pd.read_csv(data_dir+'stock_basics.csv')
return stock_info['code'].values # 补全股票代码(6位股票代码)
# input: int or string
# output: string
def getSixDigitalStockCode(code):
strZero = ''
for i in range(len(str(code)), 6):
strZero += '0'
return strZero + str(code) #从TuShare下载感兴趣的所有股票的历史成交数据,并保存到本地HDF5压缩文件
#dates=get_date_list(datetime.date(2017,11,6), datetime.date(2017,11,12))
dates=get_date_list(datetime.date(2018,1,1), datetime.date(2018,7,9))
stocks=get_all_stock_id()
for stock in stocks:
for date in dates:
if get_save_tick_data(getSixDigitalStockCode(stock), date):
time.sleep(sleep_time)

  

因为TuShare并没有提供1分钟线的信息,所以需要根据下载到的每日成交信息生成1分钟线信息。

代码如下: 其实就是不用for和列,直接 newdf = df.resample ... 保存列头一致就好了

#-*- coding: utf-8 -*-
import pandas as pd
import datetime
import os #根据分笔成交数据生成1分钟线
def gen_min_line(symbol, date):
global data_dir
data_dir = '/home/vnpy/share/'
str_date=str(date)
dir=data_dir+symbol+'/'+str(date.year)+'/'+str(date.month)
tickfile=dir+'/'+symbol+'_'+str_date+'.csv'
minfile=dir+'/'+symbol+'_'+str_date+'_1m.csv'
print tickfile,minfile
if (os.path.exists(tickfile)) and (not os.path.exists(minfile)):
df=pd.read_csv(tickfile)
print "Successfully read tick file: "+tickfile
if df.shape[0]<10: #TuShare即便在停牌期间也会返回tick data,并且只有三行错误的数据,这里利用行数小于10把那些unexpected tickdata数据排除掉
print "No tick data read from tick file, skip generating 1min line"
return 0
df['time']=str_date+' '+df['time']
df['time']=pd.to_datetime(df['time'])
df=df.set_index('time')
price_df=df['price'].resample('1min').ohlc()
price_df=price_df.dropna()
vols=df['volume'].resample('1min').sum()
vols=vols.dropna()
vol_df=pd.DataFrame(vols,columns=['volume'])
amounts=df['amount'].resample('1min').sum()
amounts=amounts.dropna()
amount_df=pd.DataFrame(amounts,columns=['amount'])
newdf=price_df.merge(vol_df, left_index=True, right_index=True).merge(amount_df, left_index=True, right_index=True)
newdf.to_csv(minfile)
print "Successfully write to minute file: "+minfile dates=get_date_list(datetime.date(2018,1,1), datetime.date(2018,7,9))
stocks=get_all_stock_id()
for stock in stocks:
for date in dates:
gen_min_line(stock, date)

  

  refer to:https://blog.csdn.net/wqfhenanxc/article/details/78525730

使用TuShare下载历史逐笔成交数据并生成1分钟线的更多相关文章

  1. 下载历史版本App超详细教程

    有些时候我们需要下载旧版本的 App 进行研究或者其他用途,然而在 iOS 下,苹果的 App Store 里面默认只能下载最新版本的 App,对滴,就是这么任性,不服不行.然而在 Android 里 ...

  2. Python获取股票历史、实时数据与更新到数据库

    要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...

  3. 如何在Maven官网下载历史版本

    如何在Maven官网下载历史版本 历史版本一般会隔一段时间,便找不到,官网会及时显示的是最新版本.不多说,直接进入. https://archive.apache.org/dist/maven/bin ...

  4. 下载历史版本App

    文/timhbw(简书作者)原文链接:http://www.jianshu.com/p/edfed1b1822c著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 1.软件准备 [必备]C ...

  5. 青花瓷运用->下载历史版本App

    1.软件准备 [必备]Charles4.0.1 下载密码: jfnk [不需要,配合Charles食用效果更佳]Paw2.3.1 下载密码: t3my 2.正式开始 2.1 打开Charles青花瓷 ...

  6. 利用PHP从淘宝采集评论和成交数据

    如果不想通过淘宝开放平台API获取数据,那么另外一个很好的办法就是采集了.一般来说,采集一个网页上的内容,只需要用CURL获取源代码,然后用正则表达式取出需要的内容就可以,不过如果这样载入一个淘宝的页 ...

  7. 搭建mysql5.626及如何去官网下载历史版本数据库

    MySQL官网下载历史版本 网上搜索MySQL官网 2 查询所有的归档文件   点击进入服务器列表   列表中默认只有Windows 版本的,可选择其它版本,但无法进行查询   查看网页元素   发现 ...

  8. Jenkins下载历史Build版本的归档文件

    /root/.jenkins/jobs/zgg-crm-pre/builds//com.zgg$crm/archive/com.zgg/crm/0.0.1/crm-0.0.1.war https:// ...

  9. 使用git下载源码及数据文件

    初学git,用来下载github上的数据和源代码,具体步骤如下. 1.百度搜索git并下载:本想从github直接下载安装,无奈国外服务器的下载速度太慢,建议国内的直接搜索下载完整安装版. 2.完成g ...

随机推荐

  1. 监控prometheus

    一.prometheus-webhook-daingtalak github地址:[Releases · timonwong/prometheus-webhook-dingtalk · GitHub] ...

  2. SHELL脚本攻略(学习笔记)--2.1 cat

    cat命令 输出一个或多个文件的内容. cat [OPTION]... [FILE]... 选项说明 -n:显示所有行的行号 -b:显示非空行的行号 -E:在每行行尾加上$符号 -T:将TAB符号输出 ...

  3. nodejs 的序列化与反序列化

    1.序列化 stringify函数的作用就是序列化对象,也就是说将对象类型转换成一个字符串类型(默认的分割符("&")和分配符("=")),先介绍它的基 ...

  4. kooboocms遇到的问题

    1.工作流:需要在网站的内容设置里启用工作流,然后添加一个工作流,再在内容文件夹里设置工作流属性(经测试,工作流对网络用户才有效,也就是说必须把用户添加到该网站下) 2.网络用户页面bug:在行 1. ...

  5. Net 使用UEditor笔记

    WebForm使用Ueditor获取编辑器的值有两种方法:1.通过前台js 获取 function test() { alert(UE.getEditor('控件Id').getContent()); ...

  6. Java基础之多态性

    class A { public void fun1(){ System.out.println("A--->public fun1()"); } public void f ...

  7. [日常] Go语言圣经-Panic异常,Recover捕获异常习题

    Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的pan ...

  8. [android] 看博客学习Android常见的几种RuntimeException

    异常分为两种: 1.编译时异常 当编译时异常抛出时,需要对其进行处理声明,否则编译不通过 2.运行时异常 编译时不检测,运行时 如果抛出,程序会立刻停止 NullPointerException 空指 ...

  9. Cookies读写

    /** * Minified by jsDelivr using Terser v3.14.1. * Original file: /npm/js-cookie@2.2.0/src/js.cookie ...

  10. NIO,AIO,BIO

    同步和异步:同步和异步关注的是消息通信机制, 同步:就是在发出一个“调用”时,在没有得到结果之前,该“调用”就不返回,但是一旦调用返回,就得到返回值了;换句话说:就是由“调用者”主动等待“调用”结果 ...