米筐优化器 API 手册

portfolio_optimize

rqoptimizer.portfolio_optimize(order_book_ids, date, objective=<rqoptimizer.objective.MinVariance object>, bnds=None, cons=None, benchmark=None, cov_model=<CovModel.FACTOR_MODEL_DAILY: 'factor_model/daily'>, factor_risk_aversion=1.0, specific_risk_aversion=1.0)

组合优化,根据给定的约束及目标函数计算最优组合权重。 支持下列目标函数:

支持以下约束类型:
Parameters
  • order_book_ids – 候选合约

  • date – 优化日期;优化结果用于指导此日的调仓;_优化过程中所使用的所有数据均在此日开盘之前_。

  • objective (OptimizationObjective) – 目标函数,默认为MinVariance(风险最小化)。

  • bnds ({order_book_id | "*": (lower_limit, upper_limit)}) – 个股权重上下界。字典,key 为 order_book_id, value 为 (lower_limit, upper_limit) 组成的 tuple。 lower_limit/upper_limit 取值可以是 [0, 1] 的数或 None。当取值为 None 时,表示对应的界不做限制。 当 key 为 ‘*’ 时,表示所有未在此字典中明确指定的其他合约。 所有合约默认上下界为 [0, 1]。

  • cons ([OptimizationConstraint]) – 约束列表

  • benchmark (str | OptimizeBenchmark) – 基准, 指数使用指数代码,自定义基准需要继承自 OptimizeBenchmark 的类实例

  • cov_model – 协方差模型,支持 daily/monthly/quarterly

  • factor_risk_aversion – 因子风险厌恶系数,默认为1

  • specific_risk_aversion – 特异风险厌恶系数,默认为1

Returns

pd.Series 组合最优化权重

优化目标

class rqoptimizer.MinVariance

风险最小化

class rqoptimizer.MinActiveVariance

主动风险最小化

class rqoptimizer.MeanVariance(*, expected_returns=None, window=252, risk_aversion_coefficient=1)

收益/风险优化

Parameters
  • expected_returns (None | pd.Series) – 预期收益率。当不传入时,默认使用历史收益率估计。

  • window – 使用历史收益率估计预期主动收益时,取历史收益率的长度,默认为252,即一年

  • risk_aversion_coefficient – 风险厌恶系数

class rqoptimizer.ActiveMeanVariance(*, expected_active_returns=None, window=252, risk_aversion_coefficient=1)

主动收益/主动风险优化

Parameters
  • expected_active_returns (None | pd.Series) – 预期主动收益率。当不传入时,默认使用历史收益率估计。

  • window – 使用历史收益率估计预期主动收益时,取历史收益率的长度,默认为252,即一年

  • risk_aversion_coefficient – 风险厌恶系数

class rqoptimizer.RiskParity

风险平价

class rqoptimizer.MinTrackingError

最小追踪误差

class rqoptimizer.MaxInformationRatio(*, expected_active_returns=None, window=252)

最大信息比率

Parameters
  • expected_active_returns (None | pd.Series) – 预期主动收益率。不传入时,使用历史收益率估计。

  • window – 使用历史收益率估计预期主动收益时,取历史收益的长度,默认为252,即一年

class rqoptimizer.MaxSharpeRatio(*, expected_returns=None, window=252)

最大化夏普比率

Parameters
  • expected_returns (None | pd.Series) – 预期收益率。当不传入时,默认使用历史收益率估计。

  • window – 使用历史收益率估计预期主动收益时,取历史收益率的长度,默认为252,即一年

class rqoptimizer.MinStyleDeviation(target_style, *, relative=False, priority=None)

风格偏离最小化

Parameters
  • target_style – pd.Series, 目标风格

  • relative – bool, 是否为相对于基准

  • priority – pd.Series, 优先级,可以为每个风格指定一个0-9的优先级,9为最高优先级,0为最低优先级;未指定的风格默认优先级为5

约束

class rqoptimizer.TrackingErrorLimit(upper_limit, *, hard=True)

追踪误差约束。基准为优化时指定的基准。

Parameters
  • upper_limit – 追踪误差上界

  • hard – 软约束/硬约束

class rqoptimizer.TurnoverLimit(current_holding, upper_limit, *, hard=True)

换手率约束

Parameters
  • current_holding – 当前持仓

  • upper_limit – 换手率上界

  • hard – 软约束/硬约束

class rqoptimizer.BenchmarkComponentWeightLimit(lower_limit, *, hard=True)

基准成分股权重限制。基准为优化时指定的基准。

Parameters
  • lower_limit – 基准成分股权重之和下界

  • hard – 软约束/硬约束

class rqoptimizer.IndustryConstraint(industries, *, lower_limit=None, upper_limit=None, relative=False, classification=<IndustryClassification.SWS: 'shenwan'>, hard=True)

行业权重约束

Parameters
  • industries – 行业名,可以为单个或多个行业

  • lower_limit – 行业权重下界。当 relative 为 True 时,支持 ‘-5%’/’+5%’ 形式

  • upper_limit – 行业权重上界。与下界类似。

  • relative – 是否为相对于基准

  • classification – 行业分类标准; 可以传入 dict | pd.Series,作为自定义行业分类

  • hard – 软约束/硬约束

class rqoptimizer.WildcardIndustryConstraint(*, exclude=None, lower_limit=None, upper_limit=None, relative=False, classification=<IndustryClassification.SWS: 'shenwan'>, hard=True)

指定除 exclude 列表外其他行业的权重限制。与 IndustryConstraint 配合可方便的实现对所有行业权重的限制。

Parameters
  • exclude – 排除列表

  • lower_limit – 行业权重下界。当 relative 为 True 时,支持 ‘-5%’/’+5%’ 形式

  • upper_limit – 行业权重上界。与下界类似。

  • relative – 是否为相对于基准

  • classification – 行业分类标准;可以传入 dict | pd.Series,作为自定义行业分类

  • hard – 软约束/硬约束

class rqoptimizer.StyleConstraint(styles, *, lower_limit=None, upper_limit=None, relative=False, hard=True)

风格约束

Parameters
  • styles – 风格列表,可以为单个或多个风格名。支持以下风格:beta, book_to_price, earnings_yield, growth, leverage, liquidity, momentum, non_linear_size, residual_volatility, size

  • lower_limit – 下界。当 relative 为 True 时,支持 ‘-5%’/’+5%’ 形式

  • upper_limit – 上界。与下界类似。

  • relative – 是否为相对于基准

  • hard – 软约束/硬约束

class rqoptimizer.IndustryComponentLimit(industry, *, lower_limit=None, upper_limit=None, classification=<IndustryClassification.SWS: 'shenwan'>, hard=True)

行业内个股权重约束

Parameters
  • industry – 行业名

  • lower_limit – 个股占行业权重下界

  • upper_limit – 个股占行业权重上界

  • classification – 行业分类标准

  • hard – 软约束/硬约束

rqoptimizer.WildcardStyleConstraint(exclude=None, lower_limit=None, upper_limit=None, relative=False, hard=True)

指定除 exclude 外的其他风格上下界,与 WildcardIndustryConstraint 类似。

Parameters
  • exclude (str | [str] | None) – 排除列表, 可以为字符串或列表,默认为空,即不排除任何一个风格

  • lower_limit – 下界。当 relative 为 True 时,支持 ‘-5%’/’+5%’ 形式

  • upper_limit – 上界。与下界类似。

  • relative – 是否为相对于基准

  • hard – 软约束/硬约束

自定义基准

当需要使用自定义基准时,需要继承 OptimizeBenchmark

class rqoptimizer.OptimizeBenchmark

自定义基准抽象类

abstract get_expected_returns(date, window=252)

获得 date 日期的年化期望收益。 仅当使用 MaxInformationRatio / ActiveMeanVariance 目标函数, 且不指定 expected_active_returns 时需要实现此函数

Parameters
  • date – datetime.date

  • window – 回溯窗口大小

Returns

float

abstract get_weight(date)

获取 date 日期的持仓权重。此函数必需实现。

Parameters

date – datetime.date

Returns

pd.Series, index 为order_book_id

示例

from rqoptimizer import *

class Benchmark(OptimizeBenchmark):
    def get_weight(self, date):
        return rqdatac.index_weights('000905.XSHG', date)

portfolio_optimize(order_book_ids, date, benchmark=Benchmark(), ...)

常量

CovModel 协方差模型
  • FACTOR_MODEL_DAILY 日度协方差模型

  • FACTOR_MODEL_MONTHLY 月度协方差模型

  • FACTOR_MODEL_QUARTERLY 季度协方差模型

IndustryClassification 行业分类标准:
  • SWS 申万一级

  • ZX 中信一级

  • SWS_1 申万一级,对非银金融进一步细分

风格因子:
  • beta 贝塔

  • book_to_price 账面市值比

  • earnings_yield 盈利率

  • growth 成长性

  • leverage 杠杆率

  • liquidity 流动性

  • momentum 动量

  • non_linear_size 非线性市值

  • residual_volatility 残余波动率

  • size 市值

异常

class rqoptimizer.InvalidArgument

参数错误

class rqoptimizer.OptimizationFailed

优化失败