金融投资组合管理、分析和优化计划

FinQuant的Python项目详细描述


pypitravisdocslicense

finquant

Finquant是一个金融投资组合管理、分析和优化计划

本自述文件仅简要概述finquant。感兴趣的读者应参考其文档

目录

动机

在几行代码中,finquant可以生成一个对象,该对象保存所需金融投资组合的股票价格,对其进行分析,并可以创建不同类型的回报率移动平均值带买入/卖出信号的移动平均带,以及布林格带。它还允许基于在几行代码中运行的金融投资组合的有效边界或蒙特卡罗优化。一些结果显示在这里。

自动生成项目组合的实例

finquant.portfolio.build_portfolio是一个简化您的投资组合创建的功能。有关使用构建投资组合的几种方法之一,请参见下面的内容

from finquant.portfolio import build_portfolio
names = ['GOOG', 'AMZN', 'MCD', 'DIS']
start_date = '2015-01-01'
end_date = '2017-12-31'
pf = build_portfolio(names=names,
                    start_date=start_date,
                    end_date=end_date)

pffinquant.portfolio.portfolio的一个实例,它包含是你投资组合中股票的价格。然后…

pf.data.head(3)

收益率

              GOOG    AMZN        MCD        DIS
Date
2015-01-02  524.81  308.52  85.783317  90.586146
2015-01-05  513.87  302.19  84.835892  89.262380
2015-01-06  501.96  295.29  84.992263  88.788916

投资组合属性

很好地打印出投资组合的属性

pf.properties()

根据您投资组合中的股票,输出如下所示。

----------------------------------------------------------------------
Stocks: GOOG, AMZN, MCD, DIS
Time window/frequency: 252
Risk free rate: 0.005
Portfolio expected return: 0.266
Portfolio volatility: 0.156
Portfolio Sharpe ratio: 1.674

Skewness:
       GOOG      AMZN      MCD       DIS
0  0.124184  0.087516  0.58698  0.040569

Kurtosis:
       GOOG      AMZN       MCD       DIS
0 -0.751818 -0.856101 -0.602008 -0.892666

Information:
   Allocation  Name
0        0.25  GOOG
1        0.25  AMZN
2        0.25   MCD
3        0.25   DIS
----------------------------------------------------------------------

累计收益

pf.comp_cumulative_returns().plot().axhline(y = 0, color = "black", lw = 3)

收益率

波段移动平均(买入/卖出信号)

from finquant.moving_average import compute_ma, ema
# get stock data for disney
dis = pf.get_stock("DIS").data.copy(deep=True)
spans = [10, 50, 100, 150, 200]
ma = compute_ma(dis, ema, spans, plot=True)

收益率

布林格带

from finquant.moving_average import plot_bollinger_band
# get stock data for disney
dis = pf.get_stock("DIS").data.copy(deep=True)
span=20
plot_bollinger_band(dis, sma, span)

收益率

投资组合优化

# performs and plots results of Monte Carlo run (5000 iterations)
opt_w, opt_res = pf.mc_optimisation(num_trials=5000)
# plots the results of the Monte Carlo optimisation
pf.mc_plot_results()
# plots the Efficient Frontier
pf.ef_plot_efrontier()
# plots optimal portfolios based on Efficient Frontier
pf.ef.plot_optimal_portfolios()
# plots individual plots of the portfolio
pf.plot_stocks()

安装

由于开源项目很常见,所以有几种方法可以获得代码。选择最适合您和您的目的的。

依赖关系

finquant取决于以下python包:

  • python>;=3.5.0
  • numpy>;=1.15
  • 熊猫>;=0.24
  • matplotlib>;=1.5.1
  • 数量=3.4.5
  • yFinance>;=0.1.43
  • scipy=1.2.0
  • Pytest=2.8.7

来自PYPI

finquant可以从pypi获得

pip安装finquant

来自Github

从github获取代码:

git克隆https://github.com/fmilthaler/finquant.git

然后在内部finquant运行:

python setup.py安装

或者,如果不希望安装finquant,也可以如上所述下载/克隆它,然后确保将其添加到pythonpath

投资组合管理

这是finquant的核心。finquant.portfolio.portfolio提供一个对象,用于保存投资组合中所有股票的价格,并自动为您计算最常见的数量。为了使finquant成为一个用户友好的程序,它结合了数据分析、可视化和优化,对象提供了与/finquant/中模块中提供的主要功能的接口。

要了解有关对象的更多信息,请阅读文档、模块/类的docstring和/或查看示例。

finquant.portfolio.portfolio还提供了一个函数build_portfolio用于自动生成portfolio的实例,以方便用户使用。有关如何使用build_portfolio的更多信息,请参阅文档和/或查看示例。

返回

股票的日收益通常以不同的方式计算。finquant提供了三种不同的计算finquant.returns中每日收益的方法:

  1. 累计收益:
  2. 日收益百分比变化:
  3. 日志返回:
  4. < > >

    除此之外,该模块还提供函数历史平均值返回(data,freq=252),该函数计算一段时间内每日返回的历史平均值freq

    移动平均值

    模块finquant.moving_average允许计算和可视化组合中所列股票的移动平均值。它包含计算和可视化

    • sma:简单移动平均,和
    • ema:指数移动平均值。
    • 计算平均值:包括买入/卖出信号的移动平均值带(不同时间窗/跨度)
    • 标绘布林格带
      • SMA
      • ema

    投资组合优化

    有效前沿

    有效前沿(finquant.efficient\frontier.efficientfrontier)的实现允许优化投资组合

    • 最小波动率最小波动率,
    • 最大夏普比最大夏普比
    • 有效回报率给定预期回报率的最小波动率
    • 有效波动率给定目标波动率的最大夏普比率

    通过数值求解使目标函数最小化/最大化。

    通常,可视化有效边界和最优解是有用的。这可以通过以下方法实现:

    • plot\u efrontier:绘制有效边界。如果没有提供最小/最大回报值,算法会根据给定投资组合中所有股票的最小/最大回报值,自动为有效边界选择这些限制。
    • 绘制最优投资组合图:绘制具有最小波动率和最大夏普比率的投资组合标记图。

    出于用户友好的原因,这些函数的接口在finquant.portfolio.portfolio中提供。请查看文档

    蒙特卡洛

    或者amonte carlo可以进行n试验,以找到最佳投资组合

    • 最小波动率,
    • 最大夏普比

    由于计算量和精度的原因,标记为有效边界的方法应该是首选方法。后一种方法只是为了完整性和创造美丽的情节才包括在内。

    示例

    有关该项目的更多信息以及如何使用该项目的详细信息,请 请看/example中提供的示例。

    注意:在下面的示例中,pf是指finquant.portfolio.portfolio的一个实例,它保存所有股票价格并自动计算其最常见的数量。为了使finquant成为一个用户友好的程序,它结合了数据分析、可视化和优化,该对象还提供了与/finquant/中模块中提供的主要功能的接口,并在本自述文件中进行了讨论。

    利用网络数据构建投资组合

    /example/example build portfolio from web.py:演示如何通过python包quandl/yfinance下载股价数据,使用finquant来构建金融投资组合。

    使用预设数据构建投资组合

    /example/example build portfolio from file.py:演示如何使用finquant通过自己提供股票价格数据(例如从磁盘/文件读取数据)来构建金融投资组合。

    投资组合分析

    /example/example analysis.py:此示例演示如何使用finquant.portfolio.portfolio的实例,获取投资组合的数量,例如

    • 预期收益,
    • 波动性,
    • 夏普比率。

    它还展示了如何从给定的投资组合中提取个股。此外,它还演示了如何计算和可视化:

    • 模块提供的不同返回值finquant.returns
    • 移动平均,移动平均带和布林格带

    投资组合的优化

    /example/example optimization.py:此示例关注投资组合的优化。为了实现这一点,这个例子展示了如何使用finquant.efficient\frontier.efficientfrontier来优化投资组合,对于

    • 最小波动率
    • 最大夏普比
    • 给定目标回报率的最小波动率
    • 给定目标波动率的最大夏普比率。

    此外,还展示了如何计算和可视化整个有效前沿和最优投资组合。如果需要,它还提供了一个在计算的有效边界内绘制给定投资组合的个股的示例。

    此外,还显示了基于蒙特卡罗的投资组合优化及其可视化。

    最后,如果需要,finquant的可视化方法允许覆盖。因此,只要使用以下几行代码,就可以创建一个覆盖蒙特卡罗运行、有效前沿及其针对最小波动率最大夏普比率的优化投资组合,以及投资组合的个股。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
ApachePOI如何通过java从excel文件中删除空白列?   linux到后台Java服务应用程序的简单发送/接收接口   java ActionBarPullToRefresh什么都没发生   java从millis获取错误的整数天   java相同的代码在两个不同的包上表现不同   java将每个新的char元素写入一个文件(如果被覆盖)   mysql如何在Java中通过外键链接的多个表中插入数据   java环境下mysql网络文件访问   java当使用构建器模式时,为什么我不应该重用builderobject来访问对象配置?   java jQueryServlet post异常失败   java应该使用什么逻辑来创建像《愤怒的小鸟》中那样的锁屏   java Android:在不滑动的情况下更改ViewPager中的片段   java在使用我的程序逻辑时获得空输出