股票数据的获取一向是比较繁琐与复杂的,下面我来列举一下我尝试获得数据的几种方法。也欢迎大家来提出更多的好用的方法~
http://choice.eastmoney.com
这个网站对于炒过股票的小伙伴来说也许并不陌生,它在数据的获取上十分便捷,不过如果想要导出的数据量在千万级以上,那么它也许不是一个很好的选择。
使用流程:
【1】注册账号
【2】完成认证(学生证或者身份证都是可以的,认证过程是人工的,所以时间上大概要等2-3天)
【3】通过认证成为免费用户,可以拥有一个月的使用期限,在一个月中可以从Choice数据上面下载所需要的指标数据,但是无论是通过Excel插件还是API(也就是代码)的方式都有流量的限制,具体的流量我在后面会给出详细介绍。
(1)函数向导
通过点击所需要的指标,下方会生成函数,将函数复制到表格中,通过更改参数来实现目标。
(2)历史行情
历史行情没有什么好说的,只要跟着每一步的操作指示就好了。
(3)其他版块
其他版块用到的时候较少,大家自己慢慢探索~
用户进入“量化接口官网”—“下载中心”,找到合适自己电脑系统和编程语言的。
下载之后,按照文档里的提示步骤完成即可。
过程很简单,不过需要提前联系客服开通权限,否则是不能完成激活的。
【客服的服务态度真的是超级超级好,第一次感受到这么棒的服务,四个后台技术人员在群里帮忙解答我一个人提出来的问题,只要是在他们工作时间来提出问题,无论是安装、代码还是遇到的一些乱七八糟的问题都可以给出很快的解决答案,为他们点赞☺】
这一部分提供用户使用编程语言的方式来编写代码导出数据,导出数据的速度非常快,但是每一个版块的函数都是有限定流量的,点击流量查询即可。
注意,如果某一项的流量用尽之后,在下周才可以进行流量重置。
http://tushare.org/
Tushare是一个免费、开源的python财经数据接口包。
通过pip install tushare在电脑中安装接口包。
import tushare as ts
因为我需要的技术指标(technical index),在tushare里面是没有的,所以我又查找了生成这些技术指标的函数,后来我找到了talib库,这个库里面有很多量化分析会用到的指标,用起来真的超级方便,但是有一点需要注意,这里面生成的有些指标可能和股票软件中的这些指标数据会有偏差存在,所以如果所需要的数据并不是很多还是推荐从股票软件中直接导出。
talib中文文档
https://blog.csdn.net/luoganttcc/article/details/84028334talib中文文档
不过talib的安装要费些事,
下面是下载talib的网站,找到适合自己电脑系统和python版本的进行下载就好了:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
在安装成功之后,可以参考文档来编写代码进行数据的生成。
示例代码
见下
import talib
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from talib import *
import tushare as ts
stock_code = ['601398', '601328', '600036', '601998']
for i in range(len(stock_code)):
df = ts.get_h_data(stock_code[i], '1998-01-01', '2018-12-30')
# 调用talib计算指数移动平均线的值
df['EMA12'] = talib.EMA(df.close, timeperiod=6)
df['EMA26'] = talib.EMA(df.close, timeperiod=12)
# 调用talib计算MACD指标
df['MACD'], df['MACDsignal'], df['MACDhist'] = talib.MACD(df.close, fastperiod=12, slowperiod=26, signalperiod=9)
# 调用talib计算RSI指标
df['RSI'] = talib.RSI(df.open, timeperiod=12) # RSI的天数一般是6,12,24
# 调用talib计算ROC指标
df['ROC'] = talib.ROC(df.close, timeperiod=10)
# 调用talib计算KDJ指标
df['k'], df['d'] = talib.STOCH(df.high, df.low, df.close,
fastk_period=9,
slowk_period=3, slowk_matype=0,
slowd_period=3, slowd_matype=0)
df['j'] = 3*df.k - 2*df.d
# 调用talib计算ROLL指标
df['UP'], df['MB'], df['DN'] = talib.BBANDS(df.close, matype=talib.MA_Type.T3)
df['diff1'] = df['UP']-df['MB']
df['diff2'] = df['MB']-df['DN']
# 调用talib计算OBV指标
df['OBV'] = talib.OBV(df.close, df.volume)
# 设置csv_name
csv_name = '/Users/changan/stock' + stock_code[i][0:6] + '.csv'
print(csv_name)
df.to_csv(csv_name)
在文章结尾我会附上全部股票代码的csv文件的获取方式。
https://bigquant.com/
对于用过tushare的小伙伴们可能了解,如果通过ts.get_h_data函数来获取股票数据的话,有两点需要保证:
(1)每次获取数据的间隔在5分钟,(2)对网络的要求较高。
df = ts.get_h_data(stock_code[i], '1998-01-01', '2018-12-30')
而如果使用ts.get_hist_data函数来获取股票数据的话,虽然没有时间上的限制了,但是却只能读取近3年的数据。
df = ts.get_hist_data(stock_code[i], '1998-01-01', '2018-12-30')
所以我在使用tushare下载数据的时候就遇到了这个问题,我需要下载近3000支股票的数据,所以时间上的消耗可想而知,即使是在网络始终保持稳定的情况下,也需要至少 5*3000min = 15000min = 250h = 10.441666天 !!!
尤其是我家里的网络还极其不稳定,在下载了两支股票后,我放弃了这个方法。
在我比较迷茫的时候我想起来之前曾经用过的BigQuant,那个上面有自带的函数可以用来下载股票数据,起始日期是2005-01-01, 代码
见下.
stock_code = D.instruments()
for i in range(len(stock_code)):
df = D.history_data(stock_code[i],
start_date='2005-01-01', end_date='2019-01-17',
fields=['open','close', 'adjust_factor', 'volume'])
示例代码
见下.
import talib
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from talib import *
stock_code = D.instruments()
for i in range(len(stock_code)):
df = D.history_data(stock_code[i], start_date='2005-01-01', end_date='2019-01-17',
fields=['open','close', 'high', 'low', 'adjust_factor', 'volume', 'amount'])
df['open'] /= df['adjust_factor']
df['high'] /= df['adjust_factor']
df['low'] /= df['adjust_factor']
df['close'] /= df['adjust_factor']
# 计算change
df['change'] = df['close']/df['close'].shift(1)-1
# 调用talib计算指数移动平均线的值
df['EMA12'] = talib.EMA(df.close, timeperiod=6)
df['EMA26'] = talib.EMA(df.close, timeperiod=12)
# 调用talib计算MACD指标
df['MACD'], df['MACDsignal'], df['MACDhist'] = talib.MACD(df.close, fastperiod=12, slowperiod=26, signalperiod=9)
# 调用talib计算RSI指标
df['RSI'] = talib.RSI(df.open, timeperiod=14)
# 调用talib计算ROC指标
df['ROC'] = talib.ROC(df.close, timeperiod=10)
# 调用talib计算KDJ指标
df['k'], df['d'] = talib.STOCH(df.high, df.low, df.close,
fastk_period=9,
slowk_period=3, slowk_matype=0,
slowd_period=3, slowd_matype=0)
df['j'] = 3*df.k - 2*df.d
# 调用talib计算ROLL指标
df['ROLL_UP'], df['ROLL_MB'], df['ROLL_DN'] = talib.BBANDS(df.close, matype=talib.MA_Type.T3)
df['diff1'] = df['ROLL_UP']-df['ROLL_MB']
df['diff2'] = df['ROLL_MB']-df['ROLL_DN']
# 调用talib计算OBV指标
df['OBV'] = talib.OBV(df.close, df.volume)
# 设置csv_name
csv_name = stock_code[i][0:6] + '.csv'
print(csv_name)
df.to_csv(csv_name)
不过这些数据是下载不到电脑本地的,所有生成的文件都会显示在左侧的策略栏中,如下图所示。
然后再点击要下载的文件进行下载,这是一个及其繁琐枯燥无聊的过程,需要重复点击几个小时……不过好在这个方法是完全可行的。
需要注意的是,我咨询过客服,她告诉我上传和下载的文档大小都是有限制的,大小都不能超过10M,所以大家要合理导出数据。
【这里给出一个参考:包含28(变量)*3414(条)数据的csv大小是1,306KB】
股票数据格式如下:
(2005-01-01至2019-01-17)
股票包含深证000001 – 002783,300000 – 300330;
以及上证600000 – 601999, 603000 – 603999
共计2773支股票的数据
包含的变量如下:
[1]
MACD是计算两条不同速度(长期与中期)的异同移动平均线(EMA)的差离状况来作为研判行情的基础。
DIF
⒈首先分别计算出收市价SHORT日异同移动平均线与LONG日异同移动平均线,分别记为EMA(SHORT)与EMA(LONG)。
⒉求这两条异同移动平均线的差,即:DIF=EMA(SHORT)-EMA(LONG)
DIF组成的线叫做MACD线
DEA
⒊再计算DIFF的M日的平均的异同移动平均线,记为DEA。
DEA组成的线叫做Signal线
Histogram
⒋最后用DIFF减DEA,得Histogram,通常绘制成围绕零轴线波动的柱形图。
在绘制的图形上,DIF与DEA形成了两条快慢移动平均线,买进卖出信号也就决定于这两条线的交叉点。很明显,MACD是一个中长期趋势的投资技术工具。缺省时,系统在副图上绘制SHORT=12,LONG=26,MID=9时的DIFF线、DEA线、MACD线(柱状线)。
谢谢大家的阅读和支持,欢迎大家提出更多更好用的股票数据获取方法~