相當(dāng)好用!教你如何使用Eiten做A股投資組合優(yōu)化

上一篇文章:《Eiten 一個(gè)構(gòu)建美股投資組合的好幫手》中,我們講解了Eiten這一個(gè)開(kāi)源工具包,以及如何使用它來(lái)構(gòu)建美股的投資組合。
所謂的投資組合優(yōu)化,就是決定你的股票池的權(quán)重分配比例,這一步是在選股完畢之后進(jìn)行的。關(guān)于選股,你可以閱讀我們之前的文章:量化投資單因子回測(cè)神器 — Alphalens。
本篇文章我們將介紹如何使用Eiten做A股的投資組合優(yōu)化,文中的股票都是隨機(jī)選取的,請(qǐng)勿參考。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn): Python 編程的最好搭檔—VSCode 詳細(xì)指南 。
請(qǐng)選擇以下任一種方式輸入命令安裝依賴 :
1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
git clone https://github.com/tradytics/eiten.git
cd eiten
pip install -r requirements.txt
pip install yfinance --upgrade --no-cache-dir
目錄結(jié)構(gòu)如下:
| 路徑 | 描述 |
|---|---|
| eiten | 主目錄 |
| └ figures | 倉(cāng)庫(kù)用到的圖表(無(wú)需關(guān)注) |
| └ stocks | 你的用于創(chuàng)建投資組合的股票列表 |
| └ strategies | python編寫的策略代碼 |
| backtester.py | 回測(cè)模塊 |
| data_loader.py | 數(shù)據(jù)加載工具 |
| portfolio_manager.py | 生成投資組合的代碼 |
| simulator.py | 使用歷史回報(bào)生成投資組合的模擬器 |
| strategy_manager.py | 策略管理器 |
2.使用方法—A股
把你想要構(gòu)建投資組合的候選股票列表寫入 stocks/stocks.txt 中。A股的股票代碼形式如下:
上海市場(chǎng),股票代碼后綴加 .SS, 如: 600519.SS 及 688111.SS
深圳市場(chǎng),股票代碼后綴加 .SZ 如: 000858.SZ 及 300498.SZ
比如我在 stocks/stocks.txt 中放入以下10只股票(隨機(jī)選取的,請(qǐng)勿參考)進(jìn)行投資組合優(yōu)化:
600519.SS
601318.SS
600036.SS
000858.SZ
601012.SS
000333.SZ
600276.SS
002415.SZ
601166.SS
601888.SS
在終端輸入以下命令運(yùn)行,試試效果:
python portfolio_manager.py --is_test 1 --future_bars 20 --data_granularity_minutes 3600 --history_to_use 250 --apply_noise_filtering 1 --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
參數(shù)說(shuō)明:
is_test: 該值決定了程序是否要保留一些數(shù)據(jù)用于未來(lái)的測(cè)試。當(dāng)這個(gè)值為True時(shí),future_bars的值應(yīng)該大于5。
future_bars: 構(gòu)建投資組合時(shí)將排除的最近n條K線。這也被稱為樣本外的數(shù)據(jù)。
data_granularity_minutes: 你想什么頻率的數(shù)據(jù)來(lái)建立你的投資組合。對(duì)于長(zhǎng)期投資組合,你應(yīng)該使用每日數(shù)據(jù)(3600),但對(duì)于短期策略,你可以使用分鐘的數(shù)據(jù)(60、30、15、5、1)。
history_to_use: 是使用特定數(shù)量的數(shù)據(jù)還是使用我們從雅虎財(cái)經(jīng)下載的所有數(shù)據(jù)。對(duì)于分鐘級(jí)別的數(shù)據(jù),我們只下載了一個(gè)月的歷史數(shù)據(jù)。對(duì)于日線,我們下載了5年的歷史數(shù)據(jù)。如果你想使用所有可用的數(shù)據(jù),該值應(yīng)該是 all,但如果你想使用較小的數(shù)據(jù)量,你可以將其設(shè)置為一個(gè)整數(shù),例如100,這將只使用最后100條k線來(lái)建立投資組合。在本文例子中,我們只用250條K線,因?yàn)檠呕⒇?cái)經(jīng)上滬深300指數(shù)只保存了1年半的數(shù)據(jù)。
apply_noise_filtering: 它使用隨機(jī)矩陣?yán)碚搧?lái)過(guò)濾掉隨機(jī)性的協(xié)方差矩陣,從而產(chǎn)生更好的投資組合。值為1將啟用它。
market_index: 你想用哪個(gè)指數(shù)來(lái)作為你的投資組合的基準(zhǔn)值, 這里我使用了滬深300指數(shù)(000300.SS)。
only_long: 是否只做多。
eigen_portfolio_number: 針對(duì)Eigen策略,數(shù)字越小,風(fēng)險(xiǎn)和回報(bào)都會(huì)降低。
stocks_file_path: 你想用來(lái)建立投資組合的股票列表。
執(zhí)行后首先你會(huì)在終端中看到輸出的所有策略給每只股票分配的權(quán)重:
上滑查看更多代碼
-------- Weights for Eigen Portfolio --------
Symbol: 000333.SZ, Weight: 0.3399
Symbol: 000858.SZ, Weight: 0.0496
Symbol: 002415.SZ, Weight: -0.0787
Symbol: 600036.SS, Weight: 0.3179
Symbol: 600276.SS, Weight: 0.1612
Symbol: 600519.SS, Weight: 0.0292
Symbol: 601012.SS, Weight: 0.7539
Symbol: 601166.SS, Weight: 0.3149
Symbol: 601318.SS, Weight: 0.2433
Symbol: 601888.SS, Weight: -1.1312
-------- Weights for Minimum Variance Portfolio (MVP) --------
Symbol: 000333.SZ, Weight: -0.0335
Symbol: 000858.SZ, Weight: -0.0812
Symbol: 002415.SZ, Weight: 0.1281
Symbol: 600036.SS, Weight: -0.2021
Symbol: 600276.SS, Weight: 0.0767
Symbol: 600519.SS, Weight: 0.2759
Symbol: 601012.SS, Weight: 0.1913
Symbol: 601166.SS, Weight: 0.3773
Symbol: 601318.SS, Weight: 0.3735
Symbol: 601888.SS, Weight: -0.1058
-------- Weights for Maximum Sharpe Portfolio (MSR) --------
Symbol: 000333.SZ, Weight: 1.6382
Symbol: 000858.SZ, Weight: 0.1264
Symbol: 002415.SZ, Weight: 1.0846
Symbol: 600036.SS, Weight: -0.5394
Symbol: 600276.SS, Weight: 0.2878
Symbol: 600519.SS, Weight: -1.3160
Symbol: 601012.SS, Weight: 0.4310
Symbol: 601166.SS, Weight: 0.7743
Symbol: 601318.SS, Weight: -1.2865
Symbol: 601888.SS, Weight: -0.2004
-------- Weights for Genetic Algo (GA) --------
Symbol: 000333.SZ, Weight: -0.1276
Symbol: 000858.SZ, Weight: -0.8724
Symbol: 002415.SZ, Weight: -1.0129
Symbol: 600036.SS, Weight: -1.5845
Symbol: 600276.SS, Weight: -0.3169
Symbol: 600519.SS, Weight: 1.7996
Symbol: 601012.SS, Weight: 0.0641
Symbol: 601166.SS, Weight: 0.9515
Symbol: 601318.SS, Weight: 0.4069
Symbol: 601888.SS, Weight: 0.2969
第二張圖,你能看到每個(gè)策略的回測(cè)效果,可以看到,這10只股票的組合,使用GA策略的效果會(huì)比滬深300好一點(diǎn):

@公眾號(hào): 二七阿爾量化
第三張圖,我們?cè)O(shè)定了最后20個(gè)交易日用于測(cè)試,這是測(cè)試結(jié)果,由于近期市場(chǎng)處于下跌趨勢(shì),這10只股票也產(chǎn)生了劇烈波動(dòng),效果一般。
第四張圖是對(duì)未來(lái)的一個(gè)預(yù)估,沒(méi)有太大參考性。
3.四種策略的原理
可以看到輸出的報(bào)告中包含了4種策略:
Eigen Portfolios 特征投資組合 (藍(lán)色)
這些投資組合通常與市場(chǎng)相關(guān)性較低,會(huì)產(chǎn)生相對(duì)的高回報(bào)和阿爾法。然而,由于它們與市場(chǎng)相關(guān)性不高,它們也可能帶來(lái)很大的風(fēng)險(xiǎn)。數(shù)字越小,風(fēng)險(xiǎn)和回報(bào)都會(huì)降低。
Minimum Variance Portfolio (MVP) 最小方差投資組合 (橙色)
MVP 試圖最小化投資組合的收益方差。這些投資組合的風(fēng)險(xiǎn)和回報(bào)最低。
Maximum Sharpe Ratio Portfolio (MSR) 最大夏普比率投資組合 (綠色)
MSR 試圖最大化投資組合的夏普比率。它在優(yōu)化過(guò)程中使用過(guò)去的回報(bào),這意味著如果過(guò)去的回報(bào)與未來(lái)的回報(bào)不同,那么未來(lái)的結(jié)果可能會(huì)有所不同。
Genetic Algorithm (GA) based Portfolio 基于遺傳算法 (GA) 的投資組合 (紅色)
這是 Eiten 模塊內(nèi)實(shí)現(xiàn)的基于 GA 的投資組合。通常能提供比其他策略更強(qiáng)大的投資組合。
我們的文章到此就結(jié)束啦,如果你喜歡今天的量化投資內(nèi)容,請(qǐng)持續(xù)關(guān)注二七阿爾量化。
有任何問(wèn)題,可以在公眾號(hào)后臺(tái)回復(fù):加群,回答相應(yīng)紅字驗(yàn)證信息,進(jìn)入互助群詢問(wèn)。
希望你能在下面點(diǎn)個(gè)贊和在看支持我繼續(xù)創(chuàng)作,謝謝!
歡迎關(guān)注公眾號(hào):二七阿爾量化
