Python量化交易之一_获取数据

1. 股票数据分析

 股票数据分析和一般数据分析一样,用到数据清洗分析,机器学习深度学习,自然语言处理等技术,当我们从其它数据分析转向股票数据分析时,主要关注二者的不同点:

(1) 量化交易

 量化交易是通过对历史数据、实时数据的分析选择最佳的交易品种(择股)和交易时机(择时)。一般利用统计和分析方法构建股票组合,期望组合能够获得超越基准收益。在设计交易的策略的过程中,需要加大盈利的可能性,同时控制风险,即使不能保证每一次预测都准确,但在交易次数和交易量足够多的情况下,尽量使赢面更大。

(2) 获取数据

  股票数据包括基本面,消息面,技术面数据,数据量大,维度高,本篇我们先关注以数值类型为主的股票数据。

(3) 指标计算

 股票指标往往是决策的重要依据,建模使用的重要特征,有的也是判断策略好坏的标准。Python有很多成熟、稳定的三方库提供指标计算功能,开发者无需自已动手实现,只需要关注功能和用法即可。

(4) 回溯测试

 同一策略在不同时间、不同地域、不同周期结果也不相同,回溯测试是用历史数据测试投资策略,量化交易平台一般都提供回溯测试环境。

 本篇主要介绍获取数据的方法,之后几篇会继续介绍指标计算库和函数,以及常用的回溯分析框架。

 需要获取的数据有基本面数据、实时数据、历史数据、各个角度的股票分类数据等等,有国内的、国外的,收费的,免费的。本文主要介绍免费接口。

2. 下载历史数据

 历史数据的数据量大,下载时间长。也是用于数据分析、训练模型最关键的数据。历史数据的下载和存储是获取数据的重点,下面介绍几种常用方法。

(1)tushare模块

  tushare主要用于下载A股数据,也是国内主流的Python股票数据三方库。它从新浪财经、腾讯财经、上交所和深交所获取数据,处理之后,供用户下载,比如:它提供前/后复权数据,简化了数据处理工作,并且有详细的中文说明文档。

 可能由于使用的人太多,下载历史数据量动辄上G,后来需要注册用户才能下载所有时段历史数据,并且按用户级别对流量做了限制。在不注册的情况下只能下载最近两年的数据。限制主要针对下载历史数据和一些新上线的功能,不影响获取股票基本信息、当前数据等基本功能。

 安装方法如下:

$ sudo pip install tushare

 源码下载:

$ git clone https://github.com/waditu/tushare

 在下载历史数据之前,先做一些准备,假设将数据下载到当前目录下的tmp目录中。

import os
import pandas as pd
import urllib
import tushare as ts
import pandas_datareader.data as web

DATA_DIR = 'tmp'
if not os.path.exists(DATA_DIR):
    os.mkdir(DATA_DIR)

 tushare使用方法如下:

def download_tushare(datadir, code, dtype, start):
    print('download: %s'%code)
    path = os.path.join(datadir, code + '_ts.csv')
    df = ts.get_hist_data(code, start = start)
    df.to_csv(path, encoding='gbk')
    return path

path = download_tushare(DATA_DIR, '002230', 'sz', '2009-01-01')
df = pd.read_csv(path, encoding='gbk')
df.tail()

 数据格式如下图所示:

 Tushare返回Pandas格式数据。除了个股的量价信息以外,还包括5,10,20日均线数据。ts.get_hist_data()接口默认抓取日K线数据,也可通过参数ktype设置抓取周、月、分钟K线,指定开始终止时间;除具体各股,将code设为sh,sz,hs300等还可抓取指数数据。

 例程中尽管设定了开始时间,但仍然只能下载两年半的数据。

 读者可以通过以下链接注册tushare用户:https://tushare.pro/register?reg=276806,以获得更高使用权限。

(2)网易API

 除了调用Python的三方模块,也可以使用网站提供的API接口下载数据,和讯、新浪、雪球网都提供股票数据下载。本文介绍网易接口,它的优点是提供所有时段历史数据下载,速度快,且格式解析方便,使用Python提供的网络三方模块,代码也非常简单。A股历史数据约不到1G,十几分钟可下载完成。

 使用方法如下:

def download_163(datadir, code, dtype, start):
    print('download: %s'%code)
    #上证指数000001前加0,沪深300指数000300股票前加0,
    #深证成指399001前加1,中小板指399005前加1,创业板指399006前加1
    if dtype == '0':
        url = 'http://quotes.money.163.com/service/chddata.html?code=0'+code+'&start='+start+\
        '&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
    else:
        url = 'http://quotes.money.163.com/service/chddata.html?code=1'+code+'&start='+start+\
        '&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;TURNOVER;VOTURNOVER;VATURNOVER;TCAP;MCAP'
    path = os.path.join(datadir, code + '_163.csv')
    urllib.request.urlretrieve(url, path)
    return path

path = download_163(DATA_DIR, '002230', '1', '2009-01-01')
df = pd.read_csv(path, encoding='gbk')
df.tail()

 数据格式如下图所示:

 本例中下载的数据被保存成csv格式数据表文件。

(3)pandas_reader模块

 pandas_datareader也是一个远程获取金融数据的三方库,它从雅虎、谷歌金融等渠道获取数据。需要注意的是,在Yahoo Finance对API进行升级后需要下载最新pandas_datareader才能正常使用。

 安装方法如下:

$ sudo pip install pandas_datareader

 源码下载

$ git clone https://github.com/pydata/pandas-datareader.git

 使用方法如下:

def download_datareader(datadir, code, dtype, start):
    print('download: %s'%code)
    path = os.path.join(datadir, code + '_dr.csv')
    # 美股直接输入股票代码如: GOOG 
    # 港股输入代码+对应股市,如腾讯:0700.hk 
    # 国内股票需要区分上证和深证,股票代码后面加.ss或者.sz
    if dtype == 'sz':        
        code2 = code + ".sz"
    else:
        code2 = code + ".ss"
    df = web.DataReader(code2, "yahoo", start = start)
    df.to_csv(path, encoding='gbk')
    return path                   

path = download_datareader(DATA_DIR, '002230', 'sz', '2009-01-01')
df = pd.read_csv(path, encoding='gbk')
df.head()

 数据格式如下图所示:

 pandas_datareader返回的是主流的金融数据格式,和很多国外的回溯框架一致,不用转换格式就能直接使用。它支持美股、港股、A股等。提供所有时段数据下载。

 可以看到,每个工具提供的数据格式都有差异,笔者认为历史数据中最重要的是日K效线中的时间、开盘、收盘、最高、最低、成交量数据。其它数据都可以从基本面信息或者用金融三方库计算得到,在下篇可以看到,Python金融工具库用法非常简单。上述几个工具比较之下,更推荐使用pandas_datareader下载历史数据。

3. 其它数据

 除历史数据以外,其它数据的数据量并不太大,下载数据更多地考虑易用性,推荐使用tushare库。相对来说tushare对国内股票支持做得相对比较全面。下面列出一些常用的tushare方法供读者参考。

  • ts.get_stock_basics()
    返回各股票的总股本、总资产、位置、领域等等信息

  • ts.get_sz50s()
    上证50列表

  • ts.get_hs300s()
    上证300列表

  • ts.get_zz500s()
    中证500列表

  • ts.get_today_all()
    当日数据,如当日为节假日,则返回上一交易日数据。

  • ts.get_index()
    大盘指数行情

更多用法详见:http://tushare.org/index.html

发布了322 篇原创文章 · 获赞 246 · 访问量 119万+

猜你喜欢

转载自blog.csdn.net/xieyan0811/article/details/100591977