使用TuShare下载历史逐笔成交数据并生成1分钟线
使用如下代码从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分钟线的更多相关文章
- 下载历史版本App超详细教程
有些时候我们需要下载旧版本的 App 进行研究或者其他用途,然而在 iOS 下,苹果的 App Store 里面默认只能下载最新版本的 App,对滴,就是这么任性,不服不行.然而在 Android 里 ...
- Python获取股票历史、实时数据与更新到数据库
要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...
- 如何在Maven官网下载历史版本
如何在Maven官网下载历史版本 历史版本一般会隔一段时间,便找不到,官网会及时显示的是最新版本.不多说,直接进入. https://archive.apache.org/dist/maven/bin ...
- 下载历史版本App
文/timhbw(简书作者)原文链接:http://www.jianshu.com/p/edfed1b1822c著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 1.软件准备 [必备]C ...
- 青花瓷运用->下载历史版本App
1.软件准备 [必备]Charles4.0.1 下载密码: jfnk [不需要,配合Charles食用效果更佳]Paw2.3.1 下载密码: t3my 2.正式开始 2.1 打开Charles青花瓷 ...
- 利用PHP从淘宝采集评论和成交数据
如果不想通过淘宝开放平台API获取数据,那么另外一个很好的办法就是采集了.一般来说,采集一个网页上的内容,只需要用CURL获取源代码,然后用正则表达式取出需要的内容就可以,不过如果这样载入一个淘宝的页 ...
- 搭建mysql5.626及如何去官网下载历史版本数据库
MySQL官网下载历史版本 网上搜索MySQL官网 2 查询所有的归档文件 点击进入服务器列表 列表中默认只有Windows 版本的,可选择其它版本,但无法进行查询 查看网页元素 发现 ...
- 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:// ...
- 使用git下载源码及数据文件
初学git,用来下载github上的数据和源代码,具体步骤如下. 1.百度搜索git并下载:本想从github直接下载安装,无奈国外服务器的下载速度太慢,建议国内的直接搜索下载完整安装版. 2.完成g ...
随机推荐
- 几种常见算法的Python实现
1.选择排序 选择排序是一种简单直观的排序算法.它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后 ...
- python的Web框架:初识Django
web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...
- 出现HTTP 错误 404.0 - Not Found的解决方法
1.修改配置文件<system.webServer><modules runAllManagedModulesForAllRequests="true" /> ...
- Java基础——Servlet(二)
好久没有写博客了,最近有在学习.可能是遇到瓶颈了,学到Servlet这里觉得有些吃力.前几天已经学完一遍了,但是学完之后觉得还是很迷茫.去知乎和百度上搜索,遇到的都是一些概念之类的讲解.核心的介绍说, ...
- zookeeper 知识点汇总
目录 Zookeeper 是什么 Zookeeper 树状模型 Zookeeper 集群结构 如何使用 ZooKeeper 运行 Zookeeper 步骤1 修改 ZooKeeper 配置文件 步骤 ...
- 设计模式-生成器(Builder)
一.概念 将一个复杂对像的构建与它的表示分离,使得同样的构建过程创建不同的表示,又叫建造模式. 生成器模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用.采用不同的构建实现,产生不 ...
- Mysql数据库 的库表简易操作
一. 库的操作 1.创建数据库 创建数据库: create database 库名 charset utf8; charset uft8 可选项 1.2 数据库命名规范: 可以由字母.数字.下划 ...
- 【代码笔记】iOS-json文件的使用
一,工程图. 二,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the ...
- 自定义多选框(checkbox)和单选框(radio)css样式
直接上代码: input[type="radio"],input[type="checkbox"]{ -webkit-appearance: none; out ...
- css3统一元素的宽和高
通常我们设置元素的宽和高样式经常会出现一些问题,比如以下css的设置: 比如以下的代码: <!DOCTYPE html> <html> <head> <met ...