* support optimization based strategy * fix riskdata not found & update doc * refactor signal_strategy * add portfolio example * Update examples/portfolio/prepare_riskdata.py Co-authored-by: you-n-g <you-n-g@users.noreply.github.com> * fix typo Co-authored-by: you-n-g <you-n-g@users.noreply.github.com> * fix typo Co-authored-by: you-n-g <you-n-g@users.noreply.github.com> * update doc * fix riskmodel doc Co-authored-by: you-n-g <you-n-g@users.noreply.github.com> Co-authored-by: you-n-g <you-n-g@users.noreply.github.com>
Portfolio Optimization Strategy
Introduction
In qlib/examples/benchmarks we have various alpha models that predict
the stock returns. We also use a simple rule based TopkDropoutStrategy to
evaluate the investing performance of these models. However, such a strategy
is too simple to control the portfolio risk like correlation and volatility.
To this end, an optimization based strategy should be used to for the
trade-off between return and risk. In this doc, we will show how to use
EnhancedIndexingStrategy to maximize portfolio return while minimizing
tracking error relative to a benchmark.
Preparation
We use China stock market data for our example.
-
Prepare CSI300 weight:
wget http://fintech.msra.cn/stock_data/downloads/csi300_weight.zip unzip -d ~/.qlib/qlib_data/cn_data csi300_weight.zip rm -f csi300_weight.zip -
Prepare risk model data:
python prepare_riskdata.py
Here we use a Statistical Risk Model implemented in qlib.model.riskmodel.
However users are strongly recommended to use other risk models for better quality:
- Fundamental Risk Model like MSCI BARRA
- Deep Risk Model
End-to-End Workflow
You can finish workflow with EnhancedIndexingStrategy by running
qrun config_enhanced_indexing.yaml.
In this config, we mainly changed the strategy section compared to
qlib/examples/benchmarks/workflow_config_lightgbm_Alpha158.yaml.