量化交易多因子策略流程

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了量化交易多因子策略流程相关的知识,希望对你有一定的参考价值。

本文学习目标:说明多因子策略的流程。

一、多因子策略流程

重在因子的探索和处理

我们可以得出以下步骤

  • 因子挖掘
    • 因子数据的处理
      • 去极值
      • 标准化
      • 中性化
    • 单因子的有效性检测
      • 因子IC分析
      • 因子收益率分析
      • 因子的方向
    • 多因子相关性和和组合分析
      • 因子相关性
      • 因子合成
  • 回测
    • 多因子选股的权重
    • 调仓周期

二、多因子策略确定的事情

  • 1、选择哪些因子和因子的方向确定
  • 2、因子的权重(打分法和回归法)
  • 3、调仓周期

其中1步骤属于因子的探索和处理部分,2和3步骤属于选好因子回测部分

三、因子挖掘怎么做?

由于此部分不是回测,所以我们需要在单独的研究平台使用特定的接口进行分析。RQ平台提供了这样的研究平台供我们去挖掘因子

四、关于研究平台的获取函数

在研究因子的时候我们需要获取更多区间段历史的数据来进行研究,所以研究平台当中的函数会跟回测中不一样

关于研究平台文档:https://www.ricequant.com/api/research/chn

4.1 get_price - 获取合约历史数据

get_price(order_book_id, start_date='2013-01-04', end_date='2014-01-04', frequency='1d', fields=None, adjust_type='pre', skip_suspended =False, country='cn')

获取指定合约或合约列表的历史数据(包含起止日期,日线或分钟线)。目前仅支持中国市场。在编写策略的时候推荐使用history_bars

参数

参数类型说明
order_book_idstr OR str list合约代码,可传入order_book_id, order_book_id list
start_datestr, datetime.date, datetime.datetime, pandasTimestamp开始日期,默认为'2013-01-04'。交易使用时,用户必须指定
end_datestr, datetime.date, datetime.datetime, pandasTimestamp结束日期,默认为'2014-01-04'。交易使用时,默认为策略当前日期前一天
frequencystr历史数据的频率。 现在支持日/分钟级别的历史数据,默认为'1d'。使用者可自由选取不同频率,例如'5m'代表5分钟线
fieldsstr OR str list返回字段名称
adjust_typestr前复权处理。前复权 - pre,后复权 - post,不复权 - none,回测使用 - internal需要注意,internal数据与回测所使用数据保持一致,仅就拆分事件对价格以及成交量进行了前复权处理,并未考虑分红派息对于股价的影响。所以在分红前后,价格会出现跳跃。
skip_suspendedbool是否跳过停牌数据。默认为False,不跳过,用停牌前数据进行补齐。True则为跳过停牌期。注意,当设置为True时,函数order_book_id只支持单个合约传入
countrystr默认是中国市场('cn'),目前仅支持中国市场

返回

  • 传入一个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

4.2 get_trading_dates - 获取交易日列表

get_trading_dates(start_date, end_date, country='cn')

获取某个国家市场的交易日列表(起止日期加入判断)。目前仅支持中国市场。

参数

参数类型说明
start_datestr, datetime.date, datetime.datetime, pandasTimestamp开始日期
end_datestr, datetime.date, datetime.datetime, pandasTimestamp结束日期
countrystr默认是中国市场('cn'),目前仅支持中国市场

返回

datetime.date list - 交易日期列表(除去周末、节假日)

范例

[In]get_trading_dates(start_date='20160505', end_date='20160505')
[Out]
[datetime.date(2016, 5, 5)]

4.3 get_fundamentals - 查询财务数据

get_fundamentals(query, entry_date, interval=None, report_quarter=False)

获取历史财务数据表格。目前支持中国市场超过400个指标,具体请参考 财务数据文档 。目前仅支持中国市场。我们特别为该函数进行了优化,读取内存的操作会极大地提升数据的获取速度。 注意:

  • 使用get_fundamentals()查询财务数据时,我们是以所有年报的发布日期(announcement date)为准,因为只有财报发布后才成为市场上公开可以获取的数据。比如某公司第三季度的财报于11月10号发布,那么如果从查询日期为10月5号,也就是早于发布日期,那么返回的只是第二季度的财报数据。
  • 如需获取固定报告期的财务数据请使用get_financials()。

参数

参数类型说明
querySQLAlchemyQueryObjectSQLAlchmey的Query对象。其中可在'query'内填写需要查询的指标,'filter'内填写数据过滤条件。具体可参考 sqlalchemy's query documentation 学习使用更多的方便的查询语句。从数据科学家的观点来看,sqlalchemy的使用比sql更加简单和强大
entry_datestr, datetime.date, datetime.datetime, pandasTimestamp查询财务数据的基准开始日期
intervalstr查询财务数据的间隔。例如,填写'5y',则代表从entry_date开始(包括entry_date)回溯5年,返回数据时间以年为间隔。'd' - 天,'m' - 月(30天), 'q' - 季(90天),'y' - 年(365天)
report_quarterbool是否显示报告期,默认为False,不显示。'Q1' - 一季报,'Q2' - 半年报,'Q3' - 三季报,'Q4' - 年报

返回

pandas DataPanel - 财务数据查询结果。

范例

fundamentals是一个重要的对象,其中包括了股指指标表(eod_derivative_indicator),财务指标表(financial_indicator),利润表(income_statement),资产负债表(balance_sheet),现金流量表(cash_flow_statement)以及股票列表(stock_code)等内容。结合SQLAlchemy的查找方式,能够满足用户多种查找需求。

  • 获取某几只股票2015年1月10日及以前5年的营业收入(revenue)以及营业成本(cost_of_good_sold)
[In]dp = get_fundamentals(query(fundamentals.income_statement.revenue, fundamentals.income_statement.cost_of_goods_sold
).filter(fundamentals.income_statement.stockcode.in_(['002478.XSHE', '000151.XSHE'])), '2015-01-10', '5y')

[In]dp
[Out]
<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 5 (major_axis) x 2 (minor_axis)
Items axis: revenue to cost_of_goods_sold
Major_axis axis: 2015-01-09 to 2011-01-10
Minor_axis axis: 002478.XSHE to 000151.XSHE

[In]dp['revenue']
[Out]
            002478.XSHE        000151.XSHE
2015-01-09    2.937843e+09    1.733703e+09
2014-01-10    2.926316e+09    8.839355e+08
2013-01-10    2.616532e+09    9.488980e+08
2012-01-10    2.681016e+09    6.205934e+08
2011-01-10    2.034147e+09    4.998120e+08

以上是关于量化交易多因子策略流程的主要内容,如果未能解决你的问题,请参考以下文章

多因子策略介绍与应用

量化交易策略介绍及应用市值中性化选股

量化交易多因子策略与理论介绍

股票量化交易策略:多因子筛选练习

股票量化交易策略之选股模拟交易过程

量化交易之多因子策略