Eiten - 每个人的算法投资策略
Eiten 是一个由 Tradytics 开发的开源工具包,它实现了各种统计和算法投资策略,如 Eigen Portfolios、Minimum Variance Portfolios、Maximum Sharpe Ratio Portfolios 和基于 Genetic Algorithms 的投资组合。它允许你使用自己选择的股票构建超过市场表现的投资组合。Eiten 包含的严格测试框架使你对自己的投资组合充满信心。
如果你想深入讨论这些工具并了解我们正在研究的更多工具,请随时加入我们的 Discord 频道,在那里我们有更多的工具。
文件描述
路径 | 描述 |
---|---|
eiten | 主文件夹。 |
└ figures | 此 GitHub 仓库的图表。 |
└ stocks | 保存你想用来创建投资组合的股票列表的文件夹。 |
└ strategies | 使用 Python 实现的一些策略。 |
backtester.py | 回测模块,既可以进行历史回测也可以进行前瞻性测试。 |
data_loader.py | 从 Yahoo Finance 加载数据的模块。 |
portfolio_manager.py | 接受多个参数并为你生成多个投资组合的主文件。 |
simulator.py | 使用历史收益和蒙特卡洛模拟来预测投资组合未来价格的模拟器。 |
strategy_manager.py | 管理‘strategies’文件夹中实现的策略。 |
必需包
你需要安装以下软件包来训练和测试模型。
你可以使用以下命令来安装所有软件包。请注意,该脚本是使用 Python3 编写的。
pip install -r requirements.txt
构建你的投资组合
让我们看看如何使用工具包中给出的所有策略来构建我们的投资组合。你首先需要做的是修改 stocks 文件夹中的 stocks.txt 文件,并添加你选择的股票。推荐将列表保持在 5 到 50 支股票之间。我们已经列出了一些包括 AAPL、MSFT、TSLA 在内的科技股票。让我们现在构建投资组合。这是你需要运行的主要命令。
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
此命令将使用过去 5 年的每日数据(不包括最后 90 天),并为你构建多个投资组合。基于这些投资组合,它将在 90 天的样本外数据上进行测试,并显示每个投资组合的表现。最后,它还会将表现与你选择的市场指数进行比较,这里是 QQQ。让我们详细了解每个参数。
- is_test:该值决定程序是否会保留一些单独的数据供将来测试。当启用此选项时,future_bars 的值应大于 5。
- future_bars:这些是投资组合构建时工具将排除的条目,并将在排除集上进行前瞻性测试。这也称为样本外数据。
- data_granularity_minutes:你想使用多少粒度的数据来构建投资组合。对于长期投资组合,你应使用每日数据,但对于短期,你可以使用每小时或每分钟级别的数据。可能的值为 3600、60、30、15、5、1。3600 表示每日。
- history_to_use:是使用特定数量的历史条目还是使用我们从 Yahoo Finance 接收到的所有数据。对于分钟级别数据,我们仅接收一个月的历史数据。对于每日数据,我们接收 5 年的历史数据。如果要使用所有可用数据,则该值应为 all,但如果要使用较少的历史记录,可以将其设置为整数值,例如 100,这将仅使用最近的 100 条记录来构建投资组合。
- apply_noise_filtering:这使用 随机矩阵理论 从随机性中过滤出协方差矩阵,从而获得更好的投资组合。值为 1 表示启用,为 0 表示禁用。
- market_index:你想使用哪个指数来比较你的投资组合。这通常应为 SPY,但由于我们分析了科技股,因此使用 QQQ。
- only_long:是否仅使用做多投资组合,还是也允许卖空。使用算法技巧的仅做多投资组合已显示出更好的表现。
- eigen_portfolio_number:要使用哪个 eigen 投资组合。任何介于 1 到 5 之间的值都应有效。第一个 eigen 投资组合(1)代表市场投资组合,应与基础指数(如 SPY 或 QQQ)表现一致。第二个是正交且与市场无关,风险和回报最大。接下来的风险和回报逐渐减少。阅读更多关于 eigen-investing 的内容。
- stocks_file_path:包含你要用来构建投资组合的股票列表的文件。
一些投资组合构建示例
以下是构建不同类型投资组合的一些示例。
- 通过分析最近90天的数据并将最近30天作为测试数据来构建多头和空头投资组合。这将给我们60天的投资组合构建数据和30天的测试数据。
python portfolio_manager.py --is_test 1 --future_bars 30 --data_granularity_minutes 3600 --history_to_use 90 --apply_noise_filtering 1 --market_index QQQ --only_long 0 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
- 仅在最近30天的60分钟条形图上构建多头投资组合。无需未来测试。将结果与SPY指数进行比较,而不是QQQ。
python portfolio_manager.py --is_test 0 --future_bars 0 --data_granularity_minutes 60 --history_to_use all --apply_noise_filtering 1 --market_index SPY --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
- 不要对协方差矩阵应用噪声过滤。使用第一特征投资组合(市场组合)并与SQQQ进行比较,
python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 0 --market_index SQQQ --only_long 1 --eigen_portfolio_number 1 --stocks_file_path stocks/stocks.txt
投资组合策略
该工具包目前支持四种不同的投资组合策略。
- 特征投资组合
- 这些投资组合通常与市场不相关且正交,因此可以带来高回报和 alpha。然而,由于它们与市场不相关,也可能带来巨大风险。第一特征投资组合被认为是市场投资组合,通常被忽略。第二个与其他投资组合不相关,提供最高的风险和回报。随着编号的增加,风险和回报都在减少。
- 最小方差投资组合 (MVP)
- MVP 试图最小化投资组合的方差。这些投资组合风险和回报最低。
- 最大夏普比率投资组合 (MSR)
- MSR 通过优化问题试图最大化投资组合的夏普比率。在优化过程中使用过去的收益,这意味着如果未来的收益与过去不同,结果可能会有所不同。
- 基于遗传算法 (GA) 的投资组合
- 这是我们基于 GA 的投资组合的实现,再次试图以稍微更健壮的方式最大化夏普比率。这通常比其他投资组合更加健壮。
当您运行上述命令时,我们的工具将从所有这些策略中生成投资组合并提供给您。让我们看看一些结果投资组合。
结果投资组合
为了这些结果,我们将使用 stocks/stocks.txt 文件中的9只股票。当我们运行上述命令时,我们首先获得所有四种策略的投资组合权重。为了测试目的,以上命令使用了截至4月29日的过去五年的每日数据。今年剩余的数据用于前瞻性测试,即在构建投资组合时这些策略无法访问此数据。
如果我的投资组合需要不同的股票怎么办?:您需要做的只是更改 stocks.txt 文件中的股票并再次运行工具。以下是我们为了获得投资组合再次运行的最终命令:
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
投资组合权重
我们可以看到,特征投资组合给了 TSLA 很大的权重,而其他投资组合则更均匀地分配了权重。这里发生的一个有趣现象是SQQQ 的对冲,所有策略都自动学会了对冲。每个工具都给 SQQQ 分配了一些正权重,同时也给其他股票分配了正权重,这表明这些策略正在自动试图对冲投资组合的风险。显然,这并不完美,但事实它正在发生是令人着迷的。让我们看看在2020年4月29日之前的最近五年回测结果。
回测结果
回测结果看起来相当鼓舞人心。黑色虚线是市场指数,即QQQ。其他线条代表策略。我们自定义的遗传算法实现似乎有最好的回测结果,因为它是其他策略的高级版本。权重最高的特征投资组合 TSLA 的波动性最大,但它的利润也非常高。最后,正如预期的那样,MVP 的方差最小,最终利润最少。然而,由于方差极低,对于那些想要保持安全的人来说它是一个不错的投资组合。最有趣的部分来了,让我们看看这些投资组合的前瞻性或未来测试结果。
前瞻测试结果
这些结果是从2020年4月29日至2020年9月4日的。特征投资组合表现最好,但波动性也很大。此外,大部分回报是由于最近几个月 TSLA 的飙升。之后,我们的 GA 算法运行得相当有效,因为它击败了市场指数。再次如预期,MVP 的风险和回报最低,在4-5个月内缓慢上升。这展示了这些算法投资组合优化策略的有效性和力量,我们为不同类型的风险和回报配置开发了不同的投资组合。
结论与讨论
我们很高兴与交易社区分享这个工具包,并希望大家喜欢并为其作出贡献。正如每个交易中的情况一样,这些策略并不完美,但它们基于严谨的理论和一些优秀的实证结果。请在使用这些策略进行交易时注意,并始终管理好您的风险。上述结果并未挑选市场,但市场在过去几个月里非常看涨,这导致了上述强劲的结果。我们希望社区能尝试不同的策略并与我们分享。
特别感谢
特别感谢Scott Rome's博客。特征组合和最小方差组合的概念来自他的博客帖子。协方差矩阵特征值筛选的代码也大部分来自他的一篇帖子。
许可
由Tradytics出品
版权所有 (c) 2020至今, Tradytics.com