量化交易 第八课 多因子策略流程
第八课 多因子策略流程
- 策略流程
- 多因子策略流程
- 因子挖掘
- 回测
- 平台介绍
- 获取函数
- 获取合约历史数据
- 获取交易日列表
- 查询财务数据
策略流程
如果我们想要构建一个多因子策略, 那么因子的挖掘与选择就至关重要. 让我们再来看一下策略的流程图:
多因子策略流程
因子挖掘
因子数据的处理:
- 去极值
- 标准化
- 中性化
单因子的有效性检测:
- 因子 IC 分析
- 因子收益率分析
- 因子的方向
多因子相关性和组合分析:
- 因子相关性
- 因子合成
回测
- 多因子选股的权重
- 调仓周期
平台介绍
我们将使用 RiceQuant 提供的投资研究平台进行接下来的讲解.
投资研究平台是基于 IPython NoteBook 搭建的 Ricequant 研究平台, 为策略研究提供了丰富的工具.
网址:
https://www.ricequant.com/quant/notebook
获取函数
获取合约历史数据
get_price - 获取合约历史数据
get_price(order_book_ids, start_date, end_date=None, frequency='1d', fields=None, adjust_type='pre', skip_suspended=False,expect_df=False
获取指定合约或合约列表的历史数据(包含起止日期,日线或分钟线).目前仅支持中国市场。在编写策略的时候推荐使用history_bars.
参数:
参数 | 类型 | 说明 |
---|---|---|
order_book_id | str OR str list | 合约代码,可传入order_book_id, order_book_id list |
start_date | str, datetime.date, datetime.datetime, pandasTimestamp | 开始日期,默认为’2013-01-04’。交易使用时,用户必须指定 |
end_date | str, datetime.date, datetime.datetime, pandasTimestamp | 结束日期,默认为’2014-01-04’。交易使用时,默认为策略当前日期前一天 |
frequency | str | 历史数据的频率。 现在支持日/分钟级别的历史数据,默认为’1d’。使用者可自由选取不同频率,例如’5m’代表5分钟线 |
fields | str OR str list | 返回字段名称 |
adjust_type | str | 前复权处理。前复权 - pre,后复权 - post,不复权 - none,回测使用 - internal需要注意,internal数据与回测所使用数据保持一致,仅就拆分事件对价格以及成交量进行了前复权处理,并未考虑分红派息对于股价的影响。所以在分红前后,价格会出现跳跃。 |
skip_suspended | bool | 是否跳过停牌数据。默认为False,不跳过,用停牌前数据进行补齐。True则为跳过停牌期。注意,当设置为True时,函数order_book_id只支持单个合约传入 |
country | str | 默认是中国市场(‘cn’),目前仅支持中国市场10 |
返回:
- 传入一个order_book_id,多个fields,函数会返回pandas DataFrame
- 传入一个order_book_id,一个field,函数会返回pandas Series
- 传入多个order_book_id,一个field,函数会返回pandas DataFrame
- 传入多个order_book_id,函数会返回pandas Panel
案例:
获取单一股票历史日线行情(返回pandas DataFrame):
[In]get_price('000001.XSHE', start_date='2015-04-01', end_date='2015-04-12')
[Out]
open close high low total_turnover volume limit_up limit_down
2015-04-01 10.7300 10.8249 10.9470 10.5469 2.608977e+09 236637563.0 11.7542 9.6177
2015-04-02 10.9131 10.7164 10.9470 10.5943 2.222671e+09 202440588.0 11.9102 9.7397
2015-04-03 10.6486 10.7503 10.8114 10.5876 2.262844e+09 206631550.0 11.7881 9.6448
2015-04-07 10.9538 11.4015 11.5032 10.9538 4.898119e+09 426308008.0 11.8288 9.6787
2015-04-08 11.4829 12.1543 12.2628 11.2929 5.784459e+09 485517069.0 12.5409 10.2620
2015-04-09 12.1747 12.2086 12.9208 12.0255 5.794632e+09 456921108.0 13.3684 10.9403
2015-04-10 12.2086 13.4294 13.4294 12.1069 6.339649e+09 480990210.0 13.4294 10.9877
获取股票列表历史日线收盘价(返回pandas DataFrame):
[In]get_price(['000024.XSHE', '000001.XSHE', '000002.XSHE'], start_date='2015-04-01', end_date='2015-04-12', fields='close')
[Out]
000024.XSHE 000001.XSHE 000002.XSHE
2015-04-01 32.1251 10.8249 12.7398
2015-04-02 31.6400 10.7164 12.6191
2015-04-03 31.6400 10.7503 12.4891
2015-04-07 31.6400 11.4015 12.7398
2015-04-08 31.6400 12.1543 12.8327``
2015-04-09 31.6400 12.2086 13.5941
2015-04-10 31.6400 13.4294 13.2969
获取股票列表历史日线行情(返回pandas DataPanel):
[In]get_price(['000024.XSHE', '000001.XSHE', '000002.XSHE'], start_date='2015-04-01', end_date='2015-04-12')
[Out]
<class 'rqcommons.pandas_patch.HybridDataPanel'>
Dimensions: 8 (items) x 7 (major_axis) x 3 (minor_axis)
Items axis: open to limit_down
Major_axis axis: 2015-04-01 00:00:00 to 2015-04-10 00:00:00
Minor_axis axis: 000024.XSHE to 000002.XSHE
获取交易日列表
get_trading_dates - 获取交易日列表
get_trading_dates(start_date, end_date, market='cn')
参数:
参数 | 类型 | 说明 |
---|---|---|
start_date | str, datetime.date, datetime.datetime, pandasTimestamp | 开始日期 |
end_date | str, datetime.date, datetime.datetime, pandasTimestamp | 结束日期 |
market | str | 默认是中国内地市场(‘cn’) 。可选’cn’ - 中国内地市场;‘hk’ - 香港市场 |
返回:
datetime.date list - 交易日期列表
范例:
[In]
get_trading_dates(start_date='20160505', end_date='20160505')
[Out]
[datetime.date(2016, 5, 5)]
查询财务数据
get_fundamentals - 查询财务数据
get_fundamentals(query, entry_date=None, interval='1d', report_quarter=False,expect_df=False)
获取历史财务数据表格。目前支持中国市场超过 400 个指标,具体请参考财务数据文档。目前仅支持中国市场。需要注意,一次查询过多股票的财务数据会导致系统运行缓慢。
注:get_fundamentals 即将废弃,请使用get_factor 获取财务数据.
参数:
参数 | 类型 | 说明 |
---|---|---|
query | SQLAlchemyQueryObject | SQLAlchmey 的 Query 对象。其中可在’query’内填写需要查询的指标,'filter’内填写数据过滤条件。具体可参考 sqlalchemy’s query documentation 学习使用更多的方便的查询语句。从数据科学家的观点来看,sqlalchemy 的使用比 sql 更加简单和强大 |
entry_date | str, datetime.date, datetime.datetime, pandasTimestamp | 查询财务数据的基准日期,应早于策略当前日期。默认为策略当前日期前一天。 |
interval | str | 查询财务数据的间隔,默认为’1d’。例如,填写’5y’,则代表从 entry_date 开始(包括 entry_date)回溯 5 年,返回数据时间以年为间隔。‘d’ - 天,‘m’ - 月, ‘q’ - 季,‘y’ - 年 |
report_quarter | bool | 是否显示报告期,默认为 False,不显示。‘Q1’ - 一季报,‘Q2’ - 半年报,‘Q3’ - 三季报,‘Q4’ - 年报 |
expect_df | bool | 默认返回原有的 Panel 数据结构。如果调为真,则返回 pandas dataframe |
返回:
- pandas DataPanel
- 如果查询结果为空,返回空pandas DataFrame
- 如果给定间隔为 1d, 1m, 1q, 1y,返回 pandas DataFrame
范例:
获取财务数据中的 pe_ratio 和 revenue 指标:
# 并且通过filter过滤掉得到符合一定范围的pe_ratio的结果
# 最后只拿到按照降序排序之后的前10个
fundamental_df = get_fundamentals(query(fundamentals.income_statement.revenue, fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio > 25).filter(fundamentals.eod_derivative_indicator.pe_ratio < 30).order_by(fundamentals.income_statement.revenue.desc()).limit(10))
context.stocks = fundamental_df.columns.values
update_universe(context.stocks)
获取某些指定股票的历史财务数据:
def init(context):context.stocks = industry('A01')logger.info("industry stocks: " + str(context.stocks))#每个表都有一个stockcode在用来方便通过股票代码来过滤掉查询的数据,比如次数是只查询'A01'板块的revenue 和 pe_ratio#最后加入 entry_date 参数获取2015年12月31日的数据context.fundamental_df = get_fundamentals(query(fundamentals.income_statement.revenue, fundamentals.eod_derivative_indicator.pe_ratio).filter(fundamentals.eod_derivative_indicator.pe_ratio > 5).filter(fundamentals.eod_derivative_indicator.pe_ratio < 300).filter(fundamentals.income_statement.stockcode.in_(context.stocks)),entry_date='20151231')logger.info(context.fundamental_df)update_universe(context.fundamental_df.columns.values)
量化交易 第八课 多因子策略流程相关推荐
- 量化交易 实战第九课 多因子相关性分析
量化交易 实战第九课 多因子相关性分析 概述 研报分析结果 代码实现 导包 总资产回报率 IC 资本回报率 IC 计算相关性 概述 相关性 (Correlation) 在统计中是与独立性 (Indep ...
- 量化交易 第十三课 多因子筛选分析简介
第十三课 多因子筛选分析简介 概述 流程 挖掘因子的过程 有效性分析 因子方向 概述 多因子选股模型在模型搭建中, 往往会涉及到非常多的股价影响因子, 并可能导出数量极多的备选模型. 因此, 对于多因 ...
- 量化交易 实战第一课 策略入门
量化交易 实战第一课 策略入门 概述 要求 指标 市净率 股票市值 代码实现 概述 不管是技术分析还是基本面分析, 我们在进行投资的时候会选择某些表现好的股票来作为一个股票池. 从中进行交易的判断 ( ...
- 量化交易 实战第二课 金融时间序列分析 Part 1
量化交易 实战第一课 金融时间序列分析 Part 1 概述 平台 获取股票数据 需求 函数 index_components - 获取指数成分股列表 get_price - 合约历史数据 代码 统计分 ...
- 量化交易 聚宽 动量与反转策略
量化交易 聚宽 动量与反转策略 # 导入函数库 from jqdata import *# 初始化函数,设定基准等等 def initialize(context):# 设定沪深300作为基准set_ ...
- 量化交易:大盘拟合稳定突破策略
作者: 阿布 阿布量化版权所有 未经允许 禁止转载 abu量化系统github地址(欢迎+star) 本节ipython notebook 上一节讲解的是A股市场的回测,本节讲解港股市场的回测示例. ...
- 量化交易主要有哪些经典的策略?
一.交易策略 一个完整的交易策略一般包括交易标的的选择,进出场时机的选择,仓位和资金管理等几个方面. 按照人的主观决断和计算机算法执行在策略各方面的决策中的参与程度的不同,可以将交易策略分为主观策略和 ...
- 量化交易入门——平台框架、技术类策略、量化心得
量化平台分类: 本地:MC.TB.WH.TS.MT4 云端:聚宽.优矿.米筐.bigquant SDK/量化API: 万得.东财choice.掘金量化 开源框架:PyCTP.Vnpy.zipline. ...
- 【Python 量化交易】什么是择时策略
量化金融:什么是择时策略? 什么是市场择时? 市场择时概要 择时成本 损失机会的代价 交易成本的代价 真实例子 什么是市场择时? 市场择时,也可以叫做市场选时,是一种投资或者交易的策略.是一种基于某种 ...
- python量化交易:Joinquant_量化交易基础【九】:策略评价与建立模拟
本文是量化交易零基础入门教程的第九篇. 摘要 评价策略回测的指标 建立模拟交易 未来函数 运行过慢 过拟合 策略失效 收益与风险的取舍 自测与自学 在学习了如何编写策略后,我们将介绍下评价策略回测的指 ...
最新文章
- 重磅!Nature子刊发布稳定学习观点论文:建立因果推理和机器学习的共识基础...
- Hibernate openSession() 和 getCurrentSession的区别 .
- python注释以符号什么开始_python注释以什么符号开始
- 使用 Boost.MPI 的 gather() 的示例
- Xcode6中如何对scrollview进行自动布局(autolayout)
- 焊接符号标注图解示例_【干货】焊接图纸符号汇总 ,学习收藏!!
- ProcessOn使用
- 通过beforeClass和afterClass设置增强Spring Test Framework
- 开启企业级市场转型之路 群晖亮出安全“杀手锏”
- Mac Backup软件:不要冒险您的数据!
- javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint
- 「Leetcode」242. 有效的字母异位词:可以拿数组当哈希表来用,但哈希值不要太大!
- 传富士康将在印度建世界最大代工厂
- Flume系列一之架构介绍和安装
- 附上一张公司项目解决方案的工程图
- 网管工具 dstat
- 高三计算机专业vb试题二答案,高三计算机专业VB试题(二).doc
- lldp协议代码阅读_LLDP 链路层发现协议
- 软件测试工程师简历项目经验怎么写?
- LBT(CCA) in LAA/Multefire (二)