python量化交易:数据获取接口(代码片段)

传智教育官方博客 传智教育官方博客     2023-02-17     556

关键词:

**同学们前面两期量化交易内容:**
  1. Python量化交易入门
  2. 量化交易的历史
  3. Python量化交易项目怎么做
  4. Python量化交易之回测框架介绍
  5. Python量化交易:策略创建运行流程


学习目标:

应用industry实现行业股票列表的获取
应用history_bars实现股票合约历史行情数据获取
应用get_fundamentals实现股票基本面数据获取
使用query的过滤条件完成股票数据的过滤
应用scheduler定时器实现股票数据定期获取


一、数据接口种类

获取指定行业、板块股票列表
history_bars - 指定股票合约历史数据
get_fundamentals - 查询财务数据

二、获取韩各样、板块以及概念股票列表

2.1 关于股票代码以及代码补齐

RiceQuant上的股票代码标记:


股票自动搜索及补全
Windows 用户 : 输入ctrl + i
Mac 用户 :输入command + i
Linux 用户 :输入ctrl + i

当您输入了这个组合键之后,Ricequant在线IDE就会进入股票代码搜索和自动完成模式,接着您可以输入任何一种进行搜索和自动补全:

股票数字代码 - 自动补全为股票数字代码,比如"000024.XSHE":
股票中文全称 - 自动补全为股票中文全称,比如"招商地产"
股票拼音缩写 - 这里比较特殊,自动补全为股票中文全称,因为股票拼音缩写并不是独一无二的,比如ZSDC补全为"招商地产"

2.2 获取行业

industry - 行业股票列表

industry(code)

获得属于某一行业的所有股票列表。

参数

返回

获得属于某一行业的所有股票的order_book_id list。

范例

def init(context):
    stock_list = industry('A01')
    logger.info("农业股票列表:" + str(stock_list))

2.3 获取板块

sector - 板块股票列表

sector(code)

获得属于某一板块的所有股票列表。

参数

返回

属于该板块的股票order_book_id或order_book_id list.

范例

def init(context):
    ids1 = sector("consumer discretionary")
    ids2 = sector("非必需消费品")
    ids3 = sector("ConsumerDiscretionary")
    assert ids1 == ids2 and ids1 == ids3
    logger.info(ids1)

支持的行业获取如下,想要了解全球行业划分标准参考全球行业标准分类:

2.4 获取概念

参考:https://www.ricequant.com/api/python/chn#data-methods-concept

2.5 获取指数成分股

index_components - 指数成分股

index_components(order_book_id, date=None)

获取某一指数的股票构成列表,也支持指数的历史构成查询。

返回
构成该指数股票的order_book_id list

常见的指数获取代码为

2.6 自定义股票池,提供给handle_bar使用

我们可以通过context的参数,相当于提供一个全局变量来获取

def init(context):
    # 在context中保存全局变量
    context.s1 = "000001.XSHE"

    # context.s2 = "601390.XSHG"
    # 获取行业
    # context.stock_list = industry("C39")
    # 获取指数成分股
    context.hs300 = index_components("000300.XSHG")


def before_trading(context):
    logger.info(context.hs300)
    logger.info("before_trading")

三、获取股票合约数据

3.1 history_bars - 某一合约历史数据

history_bars(order_book_id, bar_count, frequency, fields=None, skip_suspended=True, include_now=False)

获取指定合约的历史行情,同时支持日以及分钟历史数据。不能在init中调用。

参数


返回
ndarray ,方便直接与talib等计算库对接,效率较history返回的DataFrame更高。

获取的字段内容如下

3.2 代码以及注意的问题

因为撮合逻辑是当前bar收盘或者下一个bar开盘,所以history_bars()可以获取到包含当前bar及之前所有的bar数据
获取当天的数据
获取前十天的数据
获取每天的每分钟分钟的数据?获取每分钟之前的几分钟数据?

# 如果想在今天运行,获取从几天开始前几天一些数据
# 获取前5天的收盘价,开盘价
# 股票代号,间隔,频率,交易指标
data = history_bars(context.s1, 5, '1d', 'close')

# 获取多个指标
data = history_bars(context.s1, 5, '1d', ['close', 'open'])

# 如果回测是每日的,不支持获取分钟数据
data = history_bars(context.s1, 5, '1m', ['close', 'open'])

问题:这里的频率跟回测的频率区别?

3.3 其它-通过bar_dict获取

获取合约当前价格的bar_dict,

Bar对象


注意,在股票策略中bar对象可以拿到所有股票合约的bar信息

只能获取当前的交易信息

logger.info(bar_dict[context.s1].close)

注:只能获取当前运行日期的,不能获取之前日期

四、获取财务数据

4.1 get_fundamentals - 查询财务数据

get_fundamentals(query, entry_date=None, interval='1d', report_quarter=False)

获取历史财务数据表格。目前支持中国市场超过400个指标,具体请参考 财务数据文档 。目前仅支持中国市场。需要注意,一次查询过多股票的财务数据会导致系统运行缓慢。(entry_date在回测当中不去要提供)

注意这里的数据指标类别虽然有400多种,但是RQ平台的这些指标数据质量不高,很多指标没有经过运算处理成需要的指标,跟我们在讲金融数据处理的时候列出来的那些财务指标差别比较大

参数

返回

pandas DataPanel 如果查询结果为空,返回空pandas DataFrame 如果给定间隔为1d, 1m, 1q, 1y,返回pandas DataFrame

4.2 如何获取指标-query查询


通过fundamentals获取以上的属性

q = query(fundamentals.eod_derivative_indicator.pe_ratio)

4.3 过滤指标条件

query().filter:过滤大小
query().order_by:排序
query().limit():限制数量
fundamentals.stockcode.in_():在指定的股票池当中过滤

# 增加条件过滤掉不符合的股票代码
# 默认直接获取A股是所有的股票这个指标数据
# order_by默认是升序
# limit:选择固定数量的股票,获取20个股票交易
q = query(fundamentals.eod_derivative_indicator.pe_ratio,
             fundamentals.eod_derivative_indicator.pcf_ratio).filter(
                 fundamentals.eod_derivative_indicator.pe_ratio > 20,
                 fundamentals.eod_derivative_indicator.pcf_ratio > 15,
                 ).order_by(
                     fundamentals.eod_derivative_indicator.pe_ratio
                     ).limit(20)

# 想要从沪深300指数的一些股票去进行筛选
# 通过fundamentals.stockcode去限定股票池
    q = query(fundamentals.eod_derivative_indicator.pe_ratio,
             fundamentals.eod_derivative_indicator.pcf_ratio).filter(
                 fundamentals.eod_derivative_indicator.pe_ratio > 20,
                 ).order_by(
                     fundamentals.eod_derivative_indicator.pe_ratio
                     ).filter(
                         fundamentals.stockcode.in_(context.hs300)
                         ).limit(20)


# 获取财务数据,默认获取的是dataframe,entry_date在回测当中不去要提供
fund = get_fundamentals(q)
# 注释:每个表都有一个stockcode在用来方便通过股票代码来过滤掉查询的数据

问题:一般选择一些满足财务数据的股票时间并不是每天去获取,而是间隔一周、一个月去获取一次?怎么取获取呢?

五、scheduler定时器定时数据获取

scheduler.run_daily - 每天运行
scheduler.run_weekly - 每周运行
scheduler.run_monthly - 每月运行

5.1 API介绍

5.1.1 scheduler.run_daily - 每天运行

scheduler.run_daily(function)
每日运行一次指定的函数,只能在init内使用。

注意,schedule一定在其对应时间点的handle_bar之前执行,如果定时运行函数运行时间较长,则中间的handle_bar事件将会被略过。

参数:
返回

5.1.2 scheduler.run_monthly - 每月运行

scheduler.run_monthly(function,tradingday=t)

每月运行一次指定的函数,只能在init内使用。

注意:

tradingday的负数表示倒数。
tradingday表示交易日,如某月只有三个交易日,则此月的tradingday=3与tradingday=-1表示同一。

参数:

返回

5.2 添加定时器之后的策略运行顺序

比如我们添加了这样一段代码:

def init(context):
    # 定义一个每天运行一个定时器
    scheduler.run_daily(get_data)
    # 每个一个月去获取财务数据,每隔一周去获取财务数据
    scheduler.run_monthly(get_data, tradingday=1)

5.3 代码

def get_data(context, bar_dict):
    # logger.info("-------")
    # 进行每月的第一天去调整要买卖的股票
    q = query(fundamentals.eod_derivative_indicator.pe_ratio,
             fundamentals.eod_derivative_indicator.pcf_ratio).filter(
                 fundamentals.eod_derivative_indicator.pe_ratio > 20,
                 ).order_by(
                     fundamentals.eod_derivative_indicator.pe_ratio
                     ).filter(
                         fundamentals.stockcode.in_(context.hs300)
                         ).limit(20)

    # 获取财务数据
    data = get_fundamentals(q)

    logger.info("这个月更新的股票池")
    logger.info(data.T)

python量化交易实战:获取股票数据并做分析处理(代码片段)

...e。使用tushare获取历史股票数据tushare是一个免费、开源的Python财经数据接口包。其主要实现对股票等金融数据从数据采集、清洗加工到数据存储的过程,能够为金融分析人员提供快速、整洁和多样的便于分析的数据,以... 查看详情

python量化交易:投资组合(代码片段)

**同学们前面两期量化交易内容:**Python量化交易入门量化交易的历史Python量化交易项目怎么做Python量化交易之回测框架介绍Python量化交易:策略创建运行流程Python量化交易:数据获取接口Python量化交易:回测交易... 查看详情

如何用python实现股票量化交易?(代码片段)

...盈利的。一般也会做一些量化分析操作,使用编程如python/matla 查看详情

python量化交易08——利用tushare获取日k数据(代码片段)

总有同学问我要数据...很多第三方接口都能直接获取数据的,本次介绍怎么用Tushare库获取A股日k线行情的数据。Tushare有两个版本,老版现在快弃用了。新版的官网链接在这:Tushare数据需要注册一个账号,然后改... 查看详情

币圈量化交易萌新看过来--带你走近币圈量化(代码片段)

报错信息前几篇文章我们已经了解过所谓程序化、量化交易就是一个脚本程序根据从交易所获取到的数据,经过一系列的计算、判断、触发做出一些操作,操作交易所账户进行交易。这些获取数据、操作账户的行为都是... 查看详情

金融量化利用ccxt爬取交易所的交易历史烛线图数据信息(代码片段)

1问题爬取各个交易所的烛线图数据,采用ccxt框架的fetch_ohlcv接口。接口手册:http://cw.hubwiz.com/card/c/ccxt-dev-manual/1/7/1/2Python实现importpandasaspdimporttimeimportosimportdatetimeimportccxtpd.set_option('expan 查看详情

跟chatgpt学量化,菜鸟炒股也不怕(代码片段)

你是一个python资深量化开发工程师,请介绍量化交易的基本框架量化交易的基本框架包括以下几个步骤:数据获取:获取市场数据和公司财务数据等,可以使用API接口、爬虫等方式获取。数据清洗和预处理:... 查看详情

python量化交易学习笔记(十四)demo52——程序化交易,交易时间段内自动买入跟踪股票(代码片段)

本文记录使用easytrader+easyquotation实现策略的程序化交易的流程。上一篇已经记录了使用easytrader进行程序化交易的过程,本文主要对easyquotation获取实时数据实现策略进行介绍。easyquotation安装  pipinstalleasyquotation  选择行情数... 查看详情

量化交易平台——中层引擎设计(代码片段)

转并修改于:用python的交易员【前言】中层引擎在设计上主要是为了进一步封装底层接口所暴露出的API函数,使得其更容易被上层的GUI和策略组件调用。本篇的内容会相对简单,主要以LTS接口DEMO为例介绍一些设计方面的思路。... 查看详情

中国的python量化交易工具链都有哪些

万得的PythonAPI,可以用来获取实时数据、历史数据以及下单交易优点:万得大而全缺点:下单交易功能不是事件驱动(例如成交回报需要用户去查询,而不是主推)同花顺iFinD的PythonAPI,类似万得的API优点:比万得便宜,同花顺... 查看详情

ricequant米筐量化回测框架介绍(代码片段)

RiceQuant米筐量化回测框架介绍一、RiceQuant平台网址:https://www.ricequant.com/welcome/二、策略创建流程1.1创建策略1.2策略界面2完成一个策略所需做的事选择策略的运行基本条件:运行区间、初始资金回测频率编写策略:选择的股票池... 查看详情

python量化交易10——资产组合比例优化(camp,var,cvar)(代码片段)

...价模型,可是怎么用代码实现却一直没人教。本期用Python代码案例配置一个资产组合,并且做CAMP模型,计算VAR和CVAR等指标。(本期案例中涉及到的公司仅用于案例研究,不构成任何建议。)数据获取用证... 查看详情

量化交易如何获取实时行情数据?

问一下各位量化交易的朋友,你们是怎样实时获取数据的呢?是怎样高效地接收处理这么多股票、期货的逐笔成交、分时数据的呢?你去搜一下“量亿数据”,专门为量化交易者提供实时行情数据。参考技术ABIGI行情有实时行情... 查看详情

lean—优秀好用的开源量化交易平台(代码片段)

...一款非常强大的开源量化交易平台,可以回测或运行Python或者C#写的策略,并在代码仓库中内置了上百个C#和Python的策略算法。这个开源的算法交易引擎,专为让用户方便轻松地进行策略研究、回测和实时交易而构建... 查看详情

实时获取股票数据,免费!——python爬虫sinastock实战

...下方链接报名:量化投资速成营(入门课程)Python股票量化投资Python期货量化投资Python数字货币量化投资C++语言CTP期货交易系统开发数字货币JavaScript语言量化交易系统开发实时股票数据的重要性对于四大可交易... 查看详情

基于强化学习的期权量化交易回测系统4(代码片段)

获取50ETF指数行情数据50ETF期权的标的物是50ETF指数,我们可以使用akshare来获取该指数的日行情数据,如下所示:classSh50etfIndexDataSource(object): ......defget_daily_data(self,start_date,end_date):df=ak.stock_zh_index_dai 查看详情

ccxt:加密货币量化交易神器(代码片段)

CCXT框架是一个Python/Javascript/PHP的一个交易API框架,对接超过130多个交易所。可用于世界各地的加密货币交易所的连接和交易,以及转账支付处理,可用于存储数据,分析,可视化,指标开发,算法交易... 查看详情

基于强化学习的期权量化交易回测系统3(代码片段)

在本篇博文中,我们将获取50EFT期权的日行情数据和50ETF的日行情数据,作为环境的状态数据,可以在强化学习环境SopEnv中逐日显示出来。数据集对象定义我们定义50ETF日行情数据集类D50etfDataset,在其中统一管理50E... 查看详情