第八课 多因子策略流程

  • 策略流程
  • 多因子策略流程
    • 因子挖掘
    • 回测
  • 平台介绍
  • 获取函数
    • 获取合约历史数据
    • 获取交易日列表
    • 查询财务数据

策略流程

如果我们想要构建一个多因子策略, 那么因子的挖掘与选择就至关重要. 让我们再来看一下策略的流程图:

多因子策略流程

因子挖掘

因子数据的处理:

  • 去极值
  • 标准化
  • 中性化

单因子的有效性检测:

  • 因子 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)

量化交易 第八课 多因子策略流程相关推荐

  1. 量化交易 实战第九课 多因子相关性分析

    量化交易 实战第九课 多因子相关性分析 概述 研报分析结果 代码实现 导包 总资产回报率 IC 资本回报率 IC 计算相关性 概述 相关性 (Correlation) 在统计中是与独立性 (Indep ...

  2. 量化交易 第十三课 多因子筛选分析简介

    第十三课 多因子筛选分析简介 概述 流程 挖掘因子的过程 有效性分析 因子方向 概述 多因子选股模型在模型搭建中, 往往会涉及到非常多的股价影响因子, 并可能导出数量极多的备选模型. 因此, 对于多因 ...

  3. 量化交易 实战第一课 策略入门

    量化交易 实战第一课 策略入门 概述 要求 指标 市净率 股票市值 代码实现 概述 不管是技术分析还是基本面分析, 我们在进行投资的时候会选择某些表现好的股票来作为一个股票池. 从中进行交易的判断 ( ...

  4. 量化交易 实战第二课 金融时间序列分析 Part 1

    量化交易 实战第一课 金融时间序列分析 Part 1 概述 平台 获取股票数据 需求 函数 index_components - 获取指数成分股列表 get_price - 合约历史数据 代码 统计分 ...

  5. 量化交易 聚宽 动量与反转策略

    量化交易 聚宽 动量与反转策略 # 导入函数库 from jqdata import *# 初始化函数,设定基准等等 def initialize(context):# 设定沪深300作为基准set_ ...

  6. 量化交易:大盘拟合稳定突破策略

    作者: 阿布 阿布量化版权所有 未经允许 禁止转载 abu量化系统github地址(欢迎+star) 本节ipython notebook 上一节讲解的是A股市场的回测,本节讲解港股市场的回测示例. ...

  7. 量化交易主要有哪些经典的策略?

    一.交易策略 一个完整的交易策略一般包括交易标的的选择,进出场时机的选择,仓位和资金管理等几个方面. 按照人的主观决断和计算机算法执行在策略各方面的决策中的参与程度的不同,可以将交易策略分为主观策略和 ...

  8. 量化交易入门——平台框架、技术类策略、量化心得

    量化平台分类: 本地:MC.TB.WH.TS.MT4 云端:聚宽.优矿.米筐.bigquant SDK/量化API: 万得.东财choice.掘金量化 开源框架:PyCTP.Vnpy.zipline. ...

  9. 【Python 量化交易】什么是择时策略

    量化金融:什么是择时策略? 什么是市场择时? 市场择时概要 择时成本 损失机会的代价 交易成本的代价 真实例子 什么是市场择时? 市场择时,也可以叫做市场选时,是一种投资或者交易的策略.是一种基于某种 ...

  10. python量化交易:Joinquant_量化交易基础【九】:策略评价与建立模拟

    本文是量化交易零基础入门教程的第九篇. 摘要 评价策略回测的指标 建立模拟交易 未来函数 运行过慢 过拟合 策略失效 收益与风险的取舍 自测与自学 在学习了如何编写策略后,我们将介绍下评价策略回测的指 ...

最新文章

  1. 重磅!Nature子刊发布稳定学习观点论文:建立因果推理和机器学习的共识基础...
  2. Hibernate openSession() 和 getCurrentSession的区别 .
  3. python注释以符号什么开始_python注释以什么符号开始
  4. 使用 Boost.MPI 的 gather() 的示例
  5. Xcode6中如何对scrollview进行自动布局(autolayout)
  6. 焊接符号标注图解示例_【干货】焊接图纸符号汇总 ,学习收藏!!
  7. ProcessOn使用
  8. 通过beforeClass和afterClass设置增强Spring Test Framework
  9. 开启企业级市场转型之路 群晖亮出安全“杀手锏”
  10. Mac Backup软件:不要冒险您的数据!
  11. javax.validation.UnexpectedTypeException: HV000030: No validator could be found for constraint
  12. 「Leetcode」242. 有效的字母异位词:可以拿数组当哈希表来用,但哈希值不要太大!
  13. 传富士康将在印度建世界最大代工厂
  14. Flume系列一之架构介绍和安装
  15. 附上一张公司项目解决方案的工程图
  16. 网管工具 dstat
  17. 高三计算机专业vb试题二答案,高三计算机专业VB试题(二).doc
  18. lldp协议代码阅读_LLDP 链路层发现协议
  19. 软件测试工程师简历项目经验怎么写?
  20. LBT(CCA) in LAA/Multefire (二)

热门文章

  1. 在线超级外链发布工具
  2. ActiveSync的使用
  3. 为什么每个阿里新人都要上“百阿”?
  4. 自定义启动 android_什么是自定义Android启动器,以及为什么可能要使用一个
  5. 游戏蛮牛Egret游戏引擎视频教程
  6. Spring Boot整合mybatis报错Invalid bound statement (not found)
  7. 关于城市智慧道路建设的思考
  8. 苹果电脑连接打印机操作
  9. Linux技术简历项目经验示例(二)
  10. 微分方程建模——以传染病模型为例