米筐优化器 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, solver=None, risk_model=<RiskModel.V1: 'v1'>, **solver_options)¶ 组合优化,根据给定的约束及目标函数计算最优组合权重。 支持下列目标函数:
MinVariance
: 风险最小化MinActiveVariance
: 主动风险最小化MeanVariance
: 均值(收益)方差(风险)模型ActiveMeanVariance
: 主动收益/主动风险模型RiskParity
: 风险平价MinTrackingError
: 最小追踪误差MaxInformationRatio
: 最大信息比率MaxSharpeRatio
: 最大夏普率MaxIndicator
: 指标值最大化MinStyleDeviation
: 风格偏离最小化
- 支持以下约束类型:
TrackingErrorLimit
: 跟踪误差约束TurnoverLimit
: 换手率约束BenchmarkComponentWeightLimit
: 成分股权重约束,即要求优化结果中,基准成分股的权重之和的下限IndustryConstraint
: 行业权重约束,默认行业分类为申万一级。可选中信一级及申万一级(拆分非银金融行业)StyleConstraint
: 风格约束:class:`IndustryComponentLimit: 行业内个股权重约束
- 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
solver – 使用指定的solver求解,默认为 None,表示使用默认的 solver
risk_model – 风险模型版本,支持 v1/v2
solver_options – solver 参数,如对于 MOSEK,可以传入 mosek_params={…}
- 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
-
abstract
示例
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 市值