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

  1. #-*- coding: utf-8 -*-
  2. import numpy as np
  3. import pandas as pd
  4. import tushare as ts
  5. import datetime
  6. import time
  7. import tushare as ts
  8. import os
  9.  
  10. data_dir = '/home/vnpy/share/' #下载数据的存放路径
  11.  
  12. #ts.get_sz50s() #获取上证50成份股 返回值为DataFrame:code股票代码 name股票名称
  13.  
  14. #cal_dates = ts.trade_cal() #返回交易所日历,类型为DataFrame, calendarDate isOpen
  15. cal_dates = pd.read_csv(data_dir+'trade_cal.csv')
  16.  
  17. #本地实现判断市场开市函数
  18. #@date: str类型日期 eg.'2017-11-23'
  19. def is_open_day(date):
  20. if date in cal_dates['calendarDate'].values:
  21. return cal_dates[cal_dates['calendarDate']==date].iat[0,2]==1
  22. return False
  23.  
  24. #从TuShare获取tick data数据并保存到本地
  25. #@symbol: str类型股票代码 eg.600030
  26. #@date: date类型日期
  27. def get_save_tick_data(symbol, date):
  28. global sleep_time,data_dir
  29. res=True
  30. sleep_time=2
  31. str_date=str(date)
  32. dir=data_dir+symbol+'/'+str(date.year)+'/'+str(date.month)
  33. file=dir+'/'+symbol+'_'+str_date+'.csv'
  34. if is_open_day(str_date):
  35. if not os.path.exists(dir):
  36. os.makedirs(dir)
  37. if not os.path.exists(file):
  38. try:
  39. d=ts.get_tick_data(symbol,str_date,pause=0.1)
  40. except IOError, msg:
  41. print str(msg).decode('UTF-8')
  42. sleep_time=min(sleep_time*2, 128)#每次下载失败后sleep_time翻倍,但是最大128s
  43. print 'Get tick data error: symbol: '+ symbol + ', date: '+str_date+', sleep time is: '+str(sleep_time)
  44. return res
  45. else:
  46. d.to_csv(file)
  47. #hdf5_file=pd.HDFStore(file, 'w',complevel=4, complib='blosc')
  48. #hdf5_file['data']=d
  49. #hdf5_file.close()
  50. sleep_time=max(sleep_time/2, 2) #每次成功下载后sleep_time变为一半,但是至少2s
  51. print "Successfully download and save file: "+file+', sleep time is: '+str(sleep_time)
  52. return res
  53. else:
  54. print "Data already downloaded before, skip " + file
  55. res=False
  56. return res
  57.  
  58. #获取从起始日期到截止日期中间的的所有日期,前后都是封闭区间
  59. def get_date_list(begin_date, end_date):
  60. date_list = []
  61. while begin_date <= end_date:
  62. #date_str = str(begin_date)
  63. date_list.append(begin_date)
  64. begin_date += datetime.timedelta(days=1)
  65. return date_list
  66.  
  67. #获取感兴趣的所有股票信息,这里获取沪深全部股票
  68. def get_all_stock_id():
  69. #stock_info=ts.get_hs300s()
  70. stock_info = pd.read_csv(data_dir+'stock_basics.csv')
  71. return stock_info['code'].values
  72.  
  73. # 补全股票代码(6位股票代码)
  74. # input: int or string
  75. # output: string
  76. def getSixDigitalStockCode(code):
  77. strZero = ''
  78. for i in range(len(str(code)), 6):
  79. strZero += '0'
  80. return strZero + str(code)
  81.  
  82. #从TuShare下载感兴趣的所有股票的历史成交数据,并保存到本地HDF5压缩文件
  83. #dates=get_date_list(datetime.date(2017,11,6), datetime.date(2017,11,12))
  84. dates=get_date_list(datetime.date(2018,1,1), datetime.date(2018,7,9))
  85. stocks=get_all_stock_id()
  86. for stock in stocks:
  87. for date in dates:
  88. if get_save_tick_data(getSixDigitalStockCode(stock), date):
  89. time.sleep(sleep_time)

  

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

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

  1. #-*- coding: utf-8 -*-
  2. import pandas as pd
  3. import datetime
  4. import os
  5.  
  6. #根据分笔成交数据生成1分钟线
  7. def gen_min_line(symbol, date):
    global data_dir
  8. data_dir = '/home/vnpy/share/'
  9. str_date=str(date)
  10. dir=data_dir+symbol+'/'+str(date.year)+'/'+str(date.month)
  11. tickfile=dir+'/'+symbol+'_'+str_date+'.csv'
  12. minfile=dir+'/'+symbol+'_'+str_date+'_1m.csv'
  13. print tickfile,minfile
  14. if (os.path.exists(tickfile)) and (not os.path.exists(minfile)):
  15. df=pd.read_csv(tickfile)
  16. print "Successfully read tick file: "+tickfile
  17. if df.shape[0]<10: #TuShare即便在停牌期间也会返回tick data,并且只有三行错误的数据,这里利用行数小于10把那些unexpected tickdata数据排除掉
  18. print "No tick data read from tick file, skip generating 1min line"
  19. return 0
  20. df['time']=str_date+' '+df['time']
  21. df['time']=pd.to_datetime(df['time'])
  22. df=df.set_index('time')
  23. price_df=df['price'].resample('1min').ohlc()
  24. price_df=price_df.dropna()
  25. vols=df['volume'].resample('1min').sum()
  26. vols=vols.dropna()
  27. vol_df=pd.DataFrame(vols,columns=['volume'])
  28. amounts=df['amount'].resample('1min').sum()
  29. amounts=amounts.dropna()
  30. amount_df=pd.DataFrame(amounts,columns=['amount'])
  31. newdf=price_df.merge(vol_df, left_index=True, right_index=True).merge(amount_df, left_index=True, right_index=True)
  32. newdf.to_csv(minfile)
  33. print "Successfully write to minute file: "+minfile
  34.  
  35. dates=get_date_list(datetime.date(2018,1,1), datetime.date(2018,7,9))
  36. stocks=get_all_stock_id()
  37. for stock in stocks:
  38. for date in dates:
  39. 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. 几种常见算法的Python实现

    1.选择排序 选择排序是一种简单直观的排序算法.它的原理是这样:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的后 ...

  2. python的Web框架:初识Django

    web应用程序 本质 socket服务端 浏览器本质是一个socket客户端 1. 服务器程序 socket请求 接受HTTP请求,发送HTTP响应. 比较底层,繁琐,有专用的服务器软件,如:Apac ...

  3. 出现HTTP 错误 404.0 - Not Found的解决方法

    1.修改配置文件<system.webServer><modules runAllManagedModulesForAllRequests="true" /> ...

  4. Java基础——Servlet(二)

    好久没有写博客了,最近有在学习.可能是遇到瓶颈了,学到Servlet这里觉得有些吃力.前几天已经学完一遍了,但是学完之后觉得还是很迷茫.去知乎和百度上搜索,遇到的都是一些概念之类的讲解.核心的介绍说, ...

  5. zookeeper 知识点汇总

    目录 Zookeeper 是什么 Zookeeper 树状模型 Zookeeper 集群结构 如何使用 ZooKeeper 运行 Zookeeper 步骤1 修改 ZooKeeper 配置文件 步骤 ...

  6. 设计模式-生成器(Builder)

     一.概念 将一个复杂对像的构建与它的表示分离,使得同样的构建过程创建不同的表示,又叫建造模式. 生成器模式的重心在于分离构建算法和具体的构造实现,从而使得构建算法可以重用.采用不同的构建实现,产生不 ...

  7. Mysql数据库 的库表简易操作

    一. 库的操作 1.创建数据库 创建数据库: create database 库名 charset utf8;   charset uft8  可选项 1.2 数据库命名规范: 可以由字母.数字.下划 ...

  8. 【代码笔记】iOS-json文件的使用

    一,工程图. 二,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the ...

  9. 自定义多选框(checkbox)和单选框(radio)css样式

    直接上代码: input[type="radio"],input[type="checkbox"]{ -webkit-appearance: none; out ...

  10. css3统一元素的宽和高

    通常我们设置元素的宽和高样式经常会出现一些问题,比如以下css的设置: 比如以下的代码: <!DOCTYPE html> <html> <head> <met ...