eiten - 适合所有人的统计和算法投资策略

Created at: 2020-09-08 11:09:46
Language: Python
License: GPL-3.0

Eiten - 适合所有人的算法投资策略

Eiten 是Tradytics 的开源工具包,可实现各种统计和算法投资策略,例如Eigen PortfoliosMinimum Variance PortfoliosMaximum Sharpe Ratio Portfolios和基于遗传算法的投资组合。它允许你使用自己的一组可以击败市场的股票来建立自己的投资组合。Eiten 中包含的严格测试框架使你对自己的投资组合充满信心。

如果你想深入讨论这些工具并讨论我们正在开发的更多工具,请随时加入我们的Discord频道,我们也有更多工具。

文件说明

小路 描述
艾登 主文件夹。
└ 数字 这个 github 存储库的数字。
└ 股票 用于保存要用于创建投资组合的股票列表的文件夹。
└ 策略 一堆用python实现的策略。
回测程序.py 对所有投资组合进行回测和向前测试的回测模块。
数据加载器.py 从雅虎财经加载数据的模块。
投资组合管理器.py 主文件接受一堆参数并为你生成几个投资组合。
模拟器.py 使用历史回报和蒙特卡罗来模拟投资组合未来价格的模拟器。
策略管理器.py 管理在“策略”文件夹中实施的策略。

所需的包

你需要安装以下软件包来训练和测试模型。

你可以使用以下命令安装所有软件包。请注意,该脚本是使用 python3 编写的。

pip install -r requirements.txt

建立你的投资组合

让我们看看如何使用工具包中给出的所有策略来构建我们的投资组合。你需要做的第一件事就是修改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:是使用特定数量的历史柱还是使用我们从雅虎财经收到的所有内容。对于分钟级数据,我们最多只能收到一个月的历史数据。我们每天都会收到 5 年的历史数据。如果你想使用所有可用数据,该值应该是全部,但如果你想使用较小的历史记录,你可以将其设置为整数值,例如100,这将仅使用最后 100 根柱线来构建投资组合。
  • apply_noise_filtering:这使用随机矩阵理论从随机性中过滤掉协方差矩阵,从而产生更好的投资组合。值为 1 将启用它,值为 0 将禁用它。
  • market_index:你想使用哪个指数来比较你的投资组合。这应该主要是SPY但由于我们分析了科技股,我们使用了QQQ
  • only_long:是使用多头投资组合还是同时启用卖空。多头投资组合已显示使用算法技术具有更好的性能。
  • eigen_portfolio_number:要使用的特征组合。1-5 之间的任何值都应该有效。第一个特征投资组合 (1) 代表市场投资组合,应该像 SPY 或 QQQ 等基础指数一样起作用。第二个是正交的,与市场无关,带来最大的风险和回报。以下这些降低了风险和回报。阅读更多关于eigen-portfolios 的信息
  • stock_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
  • 只有长期投资组合60分钟条的最后30天没有未来的测试。将结果与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

投资组合策略

该工具包目前支持四种不同的投资组合策略。

  1. 特征组合
    1. 这些投资组合通常与市场正交且不相关,从而产生高回报和阿尔法。然而,由于它们与市场不相关,它们也可以提供很大的风险。第一个特征组合被认为是一个经常被忽略的市场组合。第二个与其他不相关,提供最高的风险和回报。当我们减少编号时,风险和回报都会降低。
  2. 最小方差组合 (MVP)
    1. MVP 想最小化投资组合的方差。这些投资组合的风险和回报最低。
  3. 最大夏普比率投资组合 (MSR)
    1. MSR 解决了一个想最大化投资组合夏普比率的优化问题。它在优化过程中使用过去的回报,这意味着如果过去的回报与未来的回报不同,那么未来的结果可能会有所不同。
  4. 基于遗传算法 (GA) 的投资组合
    1. 这是我们自己实现的基于 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 的博客。特征投资组合和最小方差投资组合概念来自他的博客文章。过滤协方差矩阵的特征值的代码也主要从他的一篇文章中获得。

授权协议

许可证: GPL v3

Tradytics的产品

版权所有 (c) 2020 年至今,Tradytics.com