cvxportfolio

cvxportfolio

开源投资组合优化与回测Python库

Cvxportfolio是一个基于Python的开源投资组合优化和回测库。它实现了多种优化模型,提供API接口和示例代码。支持自定义预测、并行回测和风险管理,可用于构建复杂交易策略。该库依赖Cvxpy和Pandas,适用于金融研究和实际投资。其面向对象设计便于扩展,能够高效评估不同投资策略的表现。

Cvxportfolio投资组合优化回测Python库开源软件Github开源项目

.. 版权所有 (C) 2023-2024 Enzo Busseti .. 版权所有 (C) 2016 Enzo Busseti, Stephen Boyd, Steven Diamond, BlackRock Inc.

.. 本文件是Cvxportfolio的一部分。

.. Cvxportfolio是自由软件:你可以根据自由软件基金会发布的GNU通用公共许可证的条款重新分发或修改它, .. 可以选择使用第3版许可证,或(根据你的选择)任何更新的版本。

.. Cvxportfolio的发布是希望它能够有用,但不提供任何保证;甚至不提供对适销性或特定用途适用性的暗示保证。 .. 更多细节请参见GNU通用公共许可证。

.. 你应该已经收到了GNU通用公共许可证的副本以及Cvxportfolio。 .. 如果没有,请查看https://www.gnu.org/licenses/

Cvxportfolio <https://www.cvxportfolio.com>_

|CVXportfolio on PyPI| |linting: pylint| |Coverage Status| |Documentation Status| |GPLv3| |Anaconda-Server Badge|

Cvxportfolio <https://cvxportfolio.readthedocs.io>_是一个面向对象的投资组合优化和回测库。它实现了相关论文<https://cvxportfolio.readthedocs.io/en/stable/_static/cvx_portfolio.pdf>_中描述的模型。

该库的文档位于www.cvxportfolio.com <https://www.cvxportfolio.com>_。

.. 安装

新闻:

自2023年底以来,我们每天都在使用开发(master)分支<https://github.com/cvxgrp/cvxportfolio/tree/master/>运行示例策略<https://github.com/cvxgrp/cvxportfolio/tree/master/examples/strategies>;每天我们都会将目标权重和初始持仓提交到存储库。运行它们的所有代码,包括cron脚本<https://github.com/cvxgrp/cvxportfolio/blob/master/strategies_runner.sh>_,都在存储库中。

安装

Cvxportfolio是用Python <https://docs.python.org/>_编写的,可以在任何Python环境<https://docs.python.org/3/library/venv.html>_中通过简单的方式安装:

.. code:: bash

pip install -U cvxportfolio

你可以在我们的安装和Hello World <https://youtu.be/1ThOKEu371M>_ YouTube视频中看到它是如何工作的。 Anaconda安装也受支持 <https://anaconda.org/conda-forge/cvxportfolio>_。

Cvxportfolio的主要依赖项是Cvxpy <https://www.cvxpy.org>(用于与数值求解器接口)和Pandas <https://pandas.pydata.org/>(用于与数据库接口)。我们不要求特定版本的依赖项,并测试了所有最近的版本(可追溯到几年前)。

高级:安装开发版本


你也可以安装开发版本。它每天都通过示例策略进行测试。我们将其托管在`master分支<https://github.com/cvxgrp/cvxportfolio/tree/master/>`_中。它以当前稳定版本命名;每次发布新版本时,我们都会`用git标记它<https://github.com/cvxgrp/cvxportfolio/tags>`_。
如果这听起来很复杂,请避免安装开发版本。

.. code:: bash

   pip install --upgrade --force-reinstall git+https://github.com/cvxgrp/cvxportfolio@master

.. 测试

测试
----

安装后,你可以在本地环境中运行我们的单元测试套件:

.. code:: bash

   python -m cvxportfolio.tests

我们针对最新的Python版本(3.8、3.9、3.10、3.11、3.12)和主要依赖项的最新版本(从pandas 1.4、cvxpy 1.1开始,一直到当前版本)在所有主要操作系统上进行测试。你可以查看`自动测试代码<https://github.com/cvxgrp/cvxportfolio/blob/master/.github/workflows/test.yml>`_。

.. 简单示例

简单示例
--------------

在以下示例中,市场数据由公共来源(Yahoo finance)下载,预测在回测的每个时间点上通过过去的数据迭代计算。

.. code:: python

   import cvxportfolio as cvx

   gamma = 3       # 风险厌恶参数(第4.2章)
   kappa = 0.05    # 协方差预测误差风险参数(第4.3章)
   objective = cvx.ReturnsForecast() - gamma * (
       cvx.FullCovariance() + kappa * cvx.RiskForecastError()
   ) - cvx.StocksTransactionCost()
   constraints = [cvx.LeverageLimit(3)]

   policy = cvx.MultiPeriodOptimization(objective, constraints, planning_horizon=2)

   simulator = cvx.StockMarketSimulator(['AAPL', 'AMZN', 'TSLA', 'GM', 'CVX', 'NKE'])

   result = simulator.backtest(policy, start_time='2020-01-01')

   # 打印回测结果统计
   print(result)

   # 绘制回测结果
   result.plot()
在回测的每个时间点,策略对象只处理**历史数据**,因此得到的结果是该策略在实际市场中表现的真实模拟。收益率预测采用历史平均收益率,协方差采用历史协方差(均忽略``np.nan``)。模拟器默认包含持仓成本和交易成本,使用论文中描述的模型,以及美国股票市场的典型默认参数。

其他示例
--------

文档网站上展示了`许多示例<https://cvxportfolio.readthedocs.io/en/stable/examples.html>`_,包括输出结果和注释。

代码仓库中还提供了`更多示例脚本<https://github.com/cvxgrp/cvxportfolio/blob/master/examples>`_。

我们在`用户自定义预测器<https://cvxportfolio.readthedocs.io/en/stable/examples/user_provided_forecasters.html>`_的示例中展示了用户如何定义自定义类来预测预期收益率和协方差。这些类提供在回测过程中每个时间点执行的回调函数。系统确保因果性和数值错误的安全性。我们建议在进行任何分析时都包含我们提供的默认预测器,因为它们非常稳健且经过充分测试。

我们在`道琼斯30指数成分股<https://cvxportfolio.readthedocs.io/en/stable/examples/dow30.html>`_和`大类资产ETF<https://cvxportfolio.readthedocs.io/en/stable/examples/etfs.html>`_的示例中展示了如何利用我们复杂的并行回测机制进行简单的超参数扫描,快速得出适用于任何给定资产组合的最佳策略结果。

类似项目
--------

有许多用于投资组合优化和回测的软件项目。Python生态系统中一些值得注意的项目包括:`Zipline <https://github.com/quantopian/zipline>`_,它实现了与我们提供的非常相似的回测回调模型;`Riskfolio-Lib <https://riskfolio-lib.readthedocs.io/en/latest/examples.html>`_,它实现了(许多!)投资组合优化模型,并采用与我们类似的模块化方法;`VectorBT <https://vectorbt.dev/>`_,一个适用于高频应用的回测库;`PyPortfolioOpt <https://pyportfolioopt.readthedocs.io/en/latest/>`_,一个简单但功能强大的投资组合优化库,使用众所周知的模型;`YFinance <https://github.com/ranaroussi/yfinance>`_,虽然不是投资组合优化库(它只提供雅虎财经的数据接口),但曾是我们的依赖项之一;以及`CVXPY <https://www.cvxpy.org>`_本身,它被上述一些库使用,并有一套专门用于投资组合优化的`示例集<https://www.cvxpy.org/examples/index.html#finance>`_(事实上,Cvxportfolio就是从这些示例发展而来的)。

贡献
----

我们欢迎贡献,您无需签署CLA。

即使您不熟悉该库的底层细节,修复bug、改进文档和示例、添加新的约束条件、新的成本对象等都是很好的贡献。

开发
----

要在本地设置开发环境,您应该克隆仓库(或者在Github上`fork<https://docs.github.com/en/get-started/quickstart/fork-a-repo>`_,然后克隆您的fork)

.. code:: bash

   git clone https://github.com/cvxgrp/cvxportfolio.git
   cd cvxportfolio

然后,您应该查看我们的`Makefile <https://www.gnu.org/software/make/manual/make.html#Introduction>`_,并可能需要更改``PYTHON``变量以匹配您系统的Python解释器。完成后,执行:

.. code:: bash

   make env
   make test

这将复制我们的`开发环境<https://docs.python.org/3/library/venv.html>`_并运行我们的测试套件。

您可以使用``env/bin``(Windows上为``env\Scripts``)中的脚本之一激活shell环境,例如,如果您在POSIX上使用bash:

.. code:: bash

   source env/bin/activate

在环境中,您可以运行examples目录下的任何脚本(cvxportfolio包以`可编辑模式<https://setuptools.pypa.io/en/latest/userguide/development_mode.html>`_安装)。或者,如果您不想激活环境,可以像我们在Makefile中那样直接使用``env/bin/python``(Windows上为``env\Scripts\python``)运行脚本。

此外,为了匹配我们的CI/CD流程,您可以设置以下`git hooks <https://git-scm.com/docs/githooks>`_:

.. code:: bash

   echo "make lint" > .git/hooks/pre-commit
   chmod +x .git/hooks/pre-commit
   echo "make test" > .git/hooks/pre-push
   chmod +x .git/hooks/pre-push

代码风格和质量
--------------
Cvxportfolio遵循PEP8代码风格规范。这通过Pylint自动检查工具强制执行,相关选项在Pyproject配置文件中设置。Pylint还用于强制执行代码质量标准,以及一些可选插件。

文档字符串采用Sphinx风格编写,同样由Pylint检查,并用于生成文档。

版本和发布
---------------------

Cvxportfolio遵循语义化版本规范。在下一个主版本(2.0.0)之前,不会对其公共API引入破坏性更改,而这还需要一段时间。公共API的新功能会在次要版本(1.1.0、1.2.0等)中引入,每次修订仅进行错误修复。

我们的发布历史(源代码分发和轮子)可在PyPI页面上查看。

发布也在我们的Git仓库中标记,并在其提交消息中包含简短的更改摘要。

引用
------------

如果您在导致出版的工作中使用了Cvxportfolio,您可以引用以下内容:

[此处省略引用内容]

后者也是以下博士论文的第一章:

[此处省略引用内容]

法律声明
-----

Cvxportfolio是自由软件。它根据通用公共许可证第3版的条款发布。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多