第五篇 Data Feeds (1)数据接口

本文介绍了量化交易中获取金融数据的重要性,特别是免费数据源akshare和tushare。akshare提供多样化的数据源,而tushare提供丰富数据内容并支持图形化。数据加载时需要注意时间序列的顺序,以及复权类型的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.获取金融数据

在整个量化交易中,最重要的莫过于数据。数据就是信息,如果数据不够准确,建立在错误的数据上的交易思维也很难正确。有位名人讲过:无数据,不量化。

数据有收费和免费的。收费自然有收费的好处,收费的一般数据质量过关,数据应该也比较及时。数据收费市场目前相对杂乱,有的可能几百,有的收几千。

如果确定要走量化交易之路,在技术达到要求后,应该还是购买收费的数据为好。免费的收据存在很大的不确定性,接口关了,数据缺失等意外情况很可能会发生。

无论采取何种框架,无论使用何种编程语言,都要保证数据质量。

为了方便学习,接下来介绍两种数据源数据源。这里只是介绍最简单的方法,更多方法参考官方网址。

注意事项

  • 数据格式
  • 数据字段
  • 数据形式
  • 时间序列

1.1akshare

akshare官网:Welcome to AKShare’s Online Documentation! — AKShare 1.6.57 文档

安装:

pip install akshare
1.1.1ahshare介绍
  • AKShare 是基于 Python 的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。

  • AKShare 的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行各数据源之间的交叉验证,进而再加工,从而得出科学的结论。

1.1.2ahshare优点

akshare采用的数据源多种,网易,东方财富,新浪等主流财经媒体。

akshare数据采用的pandas的Dateframe格式,可以直接使用。

1.1.3使用

以历史行情为例

在官网左侧导航栏中以此点击AKShare 数据字典----->AKShare股票数据------->A股------->历史行情数据(如下图)

在这里插入图片描述

import akshare as ak
# 使用的是东财数据接口,开始结束为空则为全部,
# adjust默认返回不复权数据;qfq前复权;hfq后复权数据
stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20170301", end_date='20210907', adjust="")
print(stock_zh_a_hist_df)

输出如下

      日期          开盘    收盘   最高  ...   振幅  涨跌幅 涨跌额 换手率
0     2017-03-01   9.49   9.49   9.55  ...  0.84  0.11  0.01  0.21
1     2017-03-02   9.51   9.43   9.54  ...  1.26 -0.63 -0.06  0.24
2     2017-03-03   9.41   9.40   9.43  ...  0.74 -0.32 -0.03  0.20
3     2017-03-06   9.40   9.45   9.46  ...  0.74  0.53  0.05  0.24
4     2017-03-07   9.44   9.45   9.46  ...  0.63  0.00  0.00  0.17
          ...    ...    ...    ...  ...   ...   ...   ...   ...
1100  2021-09-01  17.48  17.88  17.92  ...  5.11  0.45  0.08  1.19
1101  2021-09-02  18.00  18.40  18.78  ...  5.48  2.91  0.52  1.25
1102  2021-09-03  18.50  18.04  18.50  ...  4.35 -1.96 -0.36  0.72
1103  2021-09-06  17.93  18.45  18.60  ...  4.55  2.27  0.41  0.78
1104  2021-09-07  18.60  19.24  19.56  ...  6.56  4.28  0.79  0.84

字段说明

在这里插入图片描述

既然是pandas的DataFrame格式,可以直接用pandas的方法进行操作,比例设置索引,列排序等

akhist.py

from akshare import stock_zh_a_hist
import pandas as pd

stock_history = stock_zh_a_hist(symbol='601318',period='daily',adjust='').iloc[:,0:6]

# 列名
stock_history.columns = [
    'date',
    'open',
    'close',
    'high',
    'low',
    'volume',

]
# 对列进行重新排序设置成OHLC
stock_history = stock_history[['date','open','high','low','close','volume']]

# 设置以日期为索引
stock_history.set_index('date',drop=True,inplace=True)

# 保存成csv文件
stock_history.to_csv('./601318.csv')
print(stock_history)

输出如下

          open   high    low  close   volume
date
2007-03-01  50.00  50.97  45.80  46.79  1977634
2007-03-02  47.00  47.44  45.88  46.41   425048
2007-03-05  45.98  46.17  43.53  44.38   419197
2022-07-15  43.61  44.09  42.70  42.71   694042
2022-07-18  42.75  43.69  42.72  43.45   355244
2022-07-19  43.42  43.77  42.90  43.40   356106
2022-07-20  43.78  43.83  43.36  43.40   249566
2022-07-21  43.23  43.25  42.65  42.74   405568

生成csv文件如下:

在这里插入图片描述

从akshare左侧导航栏中,我们可以很快找到所需要的数据接口。

1.2tushare

1.2.1介绍

  • 拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据

  • SDK开发包支持语言,同时提供HTTP Restful接口,最大程度方便不同人群的使用

  • 提供多种数据储存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,为数据获取提供了性能保证

1.2.2使用

安装:

pip install tushare

tushare有积分制,不同的积分使用的数据量,次数不同,积分越高权限越大。

首次注册就有50积分,如果想要更多积分,可以加入其网站群,有相关规则可以提高自己的积分。

tushare下载的数据也是pandas的DateFrame格式。

在使用tushare中是需要独特的密码的。

注册以后,点击顶部右侧图像,选择个人主业,点击接口TOKEN
在这里插入图片描述

出现下图
在这里插入图片描述

点击右侧复制密码,参照数据接口的使用,用法跟akshare类似。

tushare特色功能图形化:

有个图形化获取工具,在主页点击数据工具

在这里插入图片描述

既可以运行,也可以生成代码。简单方便

生成的代码如下:

tuhist.py

# 导入tushare
import tushare as ts
# 初始化pro接口
pro = ts.pro_api('自己的接口TOKEN')

# 拉取数据
df = pro.daily(**{
    "ts_code": "000001.SZ",
    "trade_date": "",
    "start_date": "",
    "end_date": "",
    "offset": "",
    "limit": ""
}, fields=[
    "ts_code",
    "trade_date",
    "open",
    "high",
    "low",
    "close",
    "vol"
])
print(df)

运行结果:

        ts_code trade_date   open   high    low  close         vol
0     000001.SZ   20220715  13.48  13.56  13.22  13.24  1598637.40
1     000001.SZ   20220714  13.70  13.71  13.29  13.37  2632120.87
2     000001.SZ   20220713  14.42  14.47  13.89  13.97  2175996.06
3     000001.SZ   20220712  14.41  14.73  14.38  14.42   742882.42
4     000001.SZ   20220711  14.50  14.57  14.36  14.46   611691.94
...         ...        ...    ...    ...    ...    ...         ...
4995  000001.SZ   20010417  16.98  17.00  16.66  16.76    89307.99
4996  000001.SZ   20010416  17.00  17.11  16.80  16.90   175754.28
4997  000001.SZ   20010413  16.48  16.97  16.40  16.85   222942.73
4998  000001.SZ   20010412  16.50  16.66  16.33  16.44    72915.15
4999  000001.SZ   20010411  16.70  16.70  16.38  16.49    39723.27

[5000 rows x 7 columns]

注意:trade_date 列是时间倒序,需要处理,导入backtrader中时间序列是正序的。

1.3前复权后复权

复权就是对股价和成交量进行权息修复,按照股票的实际涨跌绘制股价走势图,并把成交量调整为相同的股本口径,然后用相同成本进行比较。复权可以消除由于除权除息造成的价格走势畸变,保持股价走势的连续性

  • 前复权以目前价为基准复权,可以很清楚的看到成本分布情况,如相对最高、最低价,成本密集区域,以及目前股价所处的位置是高还是低。如果进行技术分析,最好用前复权,这样当前的价格是最新的实际价格,且K线均线的走势是连续性的,不影响看盘 。

  • 后复权保持上市第一天的价格不变,根据分红配股数据处理之后的价格,这会导致最后一天的价格显示出来不是实际成交价,但可以看出股票真实价值的增加及持股者的真实收益率。如果进行价值投资,建议采用后复权,这样计算的收益率是相对正确的,查询也比较直观 。

那我们采用股票数据是用前复权还是后复权的形式呢。

量化交易是一门严谨的科学,但又是艺术的。自己的量化投资成功就是大道,不必采用名家之言。网上关于采取前后复权,是否复权的文章众说纷纭,但都是一家之谈基于自己的交易逻辑而已。

回测本身就是检测自己的思维逻辑,交易理念。即是检验,自然包括各种情况的检验。所以,不必太纠结这个问题。让自己检测的交易成果数据来选择。数据的展示的形式也可以作为复权的检验。

在使用数据源时,注意数据形式,是复权还是不复权,是前复权还是后复权。

2.加载数据

backtrader自身附带了data feed解析器,可以不同的数据源加载数据。如下例

import backtrader as bt
import backtrader.feeds as btfeeds

data = btfeeds.YahooFinanceCSVData(dataname='wheremydatacsvis.csv')

cerebro = bt.Cerebro()

cerebro.adddata(data)  # a 'name' parameter can be passed for plotting purposes

在国内使用更多的是csv格式,Pandas DateFrame读取的数据以及在线api,一些数据库存储的。国外数据源对国内量化交易者不太友好。

数据加载后,会按照顺序保存在self.datas, self.datas是一个列表可循环。self.datas[0]表示第一个加载的行情数据,self.datas[1]表示第二个加载的行情数据。数据加载时,可以对加载的数据起个名称,在框架内使用名称获取数据的相关信息。

加载数据别名

  • self.data 和 self.data0 都是第一个加载的数据。等价于self.datas[0]

  • self.dataX 等价于 self.datas[X]

2.1加载数据常用参数参数

  • dataname 默认是None,必须提供。加载的文件对象

  • name 默认是空,数据的名字,方便内部根据名字对数据进行操作。

  • fromdate 开始时间。数据小于这个时间的数据会被忽略

  • todate 结束时间。数据大于这个时间的数据会被忽略

  • timeframe 时间颗粒度。默认值是天TimeFrame.Days。可以改成Ticks,Seconds,Minutes,Days,Weeks,Months,Year

  • compression 压缩。压缩就是把很多bar压缩成一个bar.例如我们看K线图,可以选择日,在选择看周线。把5个交易日压缩成了一个周单位。压缩只有在Resampling/Replaying时才有效。

  • sessionstart sessionend 指标开始/结束时间。只在resampling有效

2.2 CSV 常用参数

  • headers 默认为True 指示csv数据是否具有标题行。例如open,high,low.close的标题

  • separator 分隔符 默认"," 分割csv文件

2.3 注意事项

加载的数据是按照时间顺序排列的。有些数据源可能是倒序,数据排列需要提前处理。akshare案例date列显示按照时间顺序的,tushare案例trade_date列则是按照时间倒序的,所以tushare需要提前处理。

sessionstart sessionend 指标开始/结束时间。只在resampling有效

2.2 CSV 常用参数

  • headers 默认为True 指示csv数据是否具有标题行。例如open,high,low.close的标题

  • separator 分隔符 默认"," 分割csv文件

2.3 注意事项

加载的数据是按照时间顺序排列的。有些数据源可能是倒序,数据排列需要提前处理。akshare案例date列显示按照时间顺序的,tushare案例trade_date列则是按照时间倒序的,所以tushare需要提前处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南万寿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值