多线程增量下载K线数据
创始人
2024-01-25 18:34:28

准备一份股票列表的CSV文件,文件格式如下

codenameclosecmvdate_ipo
300434金石亚药12.89427982959020150424
300380安硕信息19.31241993416320140128
688123聚辰股份132.821114087266620191223
300586美联新材20.34790882138120170104
300534陇神戎发12.96389465063120160913
300813泰林生物60.55160529663520200114
688259创耀科技88.76157821235820220112
301211亨迪药业30.43177175385520211222
688099晶晨股份75.53121409395420190808

范例CSV下载

程序所在目录下,手工建好3个目录
data/day
data/week
data/month

导入必要的包

import akshare as ak
import numpy as np
import pandas as pd
import warnings
import time
import datetime as dtwarnings.filterwarnings("ignore")

读取股票列表

#需要下载的股票列表
#将 yyyymmdd形式的日期字符串,转换为yyyy-mm-dd形式
def f_str2dtstr(x):try:return dt.datetime.strptime(x,'%Y%m%d').strftime('%Y-%m-%d')            except:return np.NaNdf = pd.read_csv('wz.csv',dtype={'code':str,'name':str,'close':float,'cmv':float,'date_ipo':str})
#print(df)
df['date_ipo'] = df['date_ipo'].apply(lambda x: f_str2dtstr(x))
df

 设置线程工作相关参数

import threading
job_per_thread = 15 
remainder = len(df) % job_per_thread 
count_thread = 0
if remainder  == 0: count_thread = int(len(df)/job_per_thread)
else: count_thread = int((len(df)-job_per_thread)/job_per_thread) +1
print(job_per_thread) # 每个线程处理多少个股票数据
print(count_thread)   # 余数,最后一个线程处理多少个股票数据
print(remainder)      # 线程数量

线程处理函数

  • 参数为线程编号(第X号线程,根据循环的变量来的)
  • 网络读取数据,纠错5次
  • 日线,月线,周线全部下载
  • 增量下载、任意时间下载(对比本地数据,删除本地第一条数据,以新下载的为准)
def proc_get(m):if remainder  == 0:count_job = job_per_threadelse: if m == (count_thread-1):count_job = remainderelse:count_job = job_per_threadfor i in range(0,count_job):code   = df.iloc[m*job_per_thread+i,0]date_s = '1970-01-01'd = pd.DataFrame(data=None,columns=['date','open','high','low','close','volume','turnover'])p_s = ['weekly','daily', 'monthly']for k in range(0,len(p_s)):item_p = p_s[k]path_file = "./data/"if item_p == 'daily':path_file = path_file+"day/"elif item_p == 'weekly':path_file = path_file+"week/"elif item_p == 'monthly':path_file = path_file+"month/"else:break            path_file = path_file+"%s.csv"%(code)try:d = pd.read_csv("./data/day/%s.csv"%(code),dtype={'code':str,'code':str,'date':str})except:passif len(d) > 0:#print(d.iloc[-1,0])date_s = d.iloc[-1,0]date_e = dt.datetime.now().strftime('%Y%m%d')if  dt.datetime.strptime(date_s,'%Y-%m-%d') < dt.datetime.strptime(date_e,'%Y%m%d') :for j in range(0,5):try:a = ak.stock_zh_a_hist(symbol=code,period=item_p,start_date=date_s,end_date=date_e,adjust="qfq")a = a[['日期','开盘','最高','最低','收盘','成交量','换手率']]a.columns=['date','open','high','low','close','volume','turnover']#print(a)if len(d) > 0:d = pd.concat([d.iloc[0:-2,:],a],axis=0,ignore_index=True)else:d = abreakexcept:print(code)time.sleep(3)if len(d) > 0:d.to_csv(path_file,index=False,date_format="%Y-%m-%d") 

开启多线程 

threads = []
for m in range(0,count_thread):t = threading.Thread(target=proc_get,args=(m,)) #注意即使一个参数,参数也要有,结尾#print(m)#print(t)threads.append(t)t.start()
for t in threads:t.join()

说明: 

网络下载数据失败的代码会被打印出来
一般情况下超过5次的就是真的没数据 
没数据的一般是一些生成了股票代码但没交易的新股
得空就更新一下你的K线数据呗,增量挺快的
数据全部取得是前复权的
未复权,包含前收盘价的数据可以换一个源取,有兴趣的可以做一下。
任何疑问 turui@163.net
当前接口获取的数据,起码比巨宽的强
以SH000300数据为例,巨宽的数据从2005.04.08才有
看到这种形状,赶紧入吧,涨停板等着你
数据

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
超纤皮是什么皮 超纤皮好不好 相信大家买车的时候,很多人都会选择皮座椅,因为不但有档次,而且手感也会比织物的好。但是大家想过没有,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
超纤皮是什么皮 超纤皮好不好 相信大家买车的时候,很多人都会选择皮座椅,因为不但有档次,而且手感也会比织物的好。但是大家想过没有,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...