Eiten是Tradytics的一个开源工具包,它实现了各种统计和算法投资策略,如Eigen组合、最小方差组合、最大夏普比率组合和基于遗传算法的组合。
Eiten允许你用自己的股票组合建立自己的投资组合。Eiten中自带的严格测试框架使你能够对你的投资组合更有自信。
1.准备
开始之前,你要确保Python和pip已经成功安装在电脑上,如果没有,请访问这篇文章:超详细Python安装指南 进行安装。
(可选1) 如果你用Python的目的是数据分析,可以直接安装Anaconda:Python数据分析与挖掘好帮手—Anaconda,它内置了Python和pip.
(可选2) 此外,推荐大家用VSCode编辑器来编写小型Python项目:Python 编程的最好搭档—VSCode 详细指南
Windows环境下打开Cmd(开始—运行—CMD),苹果系统环境下请打开Terminal(command+空格输入Terminal),输入命令安装依赖:
git clone https://github.com/tradytics/eiten.git cd eiten pip install -r requirements.txt pip install yfinance --upgrade --no-cache-dir
目录结构如下:
路径 | 描述 |
---|---|
eiten | 主目录 |
└ figures | 仓库用到的图表(无需关注) |
└ stocks | 你的用于创建投资组合的股票列表 |
└ strategies | python编写的策略代码 |
backtester.py | 回测模块 |
data_loader.py | 数据加载工具 |
portfolio_manager.py | 生成投资组合的代码 |
simulator.py | 使用历史回报生成投资组合的模拟器 |
strategy_manager.py | 策略管理器 |
2.使用方法
把你想要构建投资组合的候选股票列表写入 stocks/stocks.txt 中,尽量保证股票数量在5~50只左右。
接下来就可以尝试构建投资组合了:
python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
各个参数的解释:
is_test: 该值决定了程序是否要保留一些数据用于未来的测试。当这个值为True时,future_bars的值应该大于5。
future_bars: 构建投资组合时将排除的最近n条K线。这也被称为样本外的数据。
data_granularity_minutes: 你想什么频率的数据来建立你的投资组合。对于长期投资组合,你应该使用每日数据,但对于短期策略,你可以使用分钟的数据(3600、60、30、15、5、1)。
history_to_use: 是使用特定数量的数据还是使用我们从雅虎财经下载的所有数据。对于分钟级别的数据,我们只下载了一个月的历史数据。对于日线,我们下载了5年的历史数据。如果你想使用所有可用的数据,该值应该是 all,但如果你想使用较小的数据量,你可以将其设置为一个整数,例如100,这将只使用最后100条k线来建立投资组合。
apply_noise_filtering: 它使用随机矩阵理论来过滤掉随机性的协方差矩阵,从而产生更好的投资组合。值为1将启用它。
market_index: 你想用哪个指数来作为你的投资组合的基准值。比如SPY/QQQ,由于我们分析的是科技股,所以例子中使用了QQQ。
only_long: 是否只做多。
eigen_portfolio_number: 可阅读这篇文章了解更多: eigen-portfolios.
stocks_file_path: 你想用来建立投资组合的股票列表的文件。
如果你出现了下面这样的报错:
As of November 1st, 2021 Yahooâs suite of services will no longer be accessi
ble from mainland China. Yahoo products and services remain unaffected in all other global locations. We thank you for your support and readership,
这是因为雅虎数据源从2021年开始不在向中国提供服务,你需要挂一个代理去下载数据,在data_loader.py的73行,增加proxy参数:
stock_prices = yf.download( tickers=symbol, period=period, interval=interval, auto_adjust=False, progress=False, proxy="http://127.0.0.1:10809" # 此处由你代理地址决定 )
然后重新执行命令便能生成不同策略的投资组合权重分配结果:
同时,程序会弹出一个图表,这个图表能输出所有策略的权重比:
各个策略的累计净值收益曲线(5年):
“未来测试”的累计投资回报(最近90天):
模拟未来的累计投资回报:
感谢大家的阅读,本文关于Eiten使用方式的介绍就到这里。
下篇文章我们就告诉大家如何将Eiten用于A股,敬请期待。
我们的文章到此就结束啦,如果你喜欢今天的 Python 教程,请持续关注Python实用宝典。
有任何问题,可以在公众号后台回复:加群,回答相应验证信息,进入互助群询问。
原创不易,希望你能在下面点个赞和在看支持我继续创作,谢谢!
Python实用宝典 ( pythondict.com )
不只是一个宝典
欢迎关注公众号:Python实用宝典