金融投资组合管理、分析和优化计划
FinQuant的Python项目详细描述
finquant
Finquant是一个金融投资组合管理、分析和优化计划
本自述文件仅简要概述finquant。感兴趣的读者应参考其文档
目录
- 动机
- 安装
- 投资组合管理
- 返回
- 移动平均线
- 投资组合优化
- 示例
- 使用来自web的数据构建投资组合
- 使用预设数据构建投资组合
- 投资组合分析
- 投资组合的优化
动机
在几行代码中,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)
pf
是finquant.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中每日收益的方法:
- 累计收益:
- 日收益百分比变化:
- 日志返回:
< > >除此之外,该模块还提供函数历史平均值返回(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的可视化方法允许覆盖。因此,只要使用以下几行代码,就可以创建一个覆盖蒙特卡罗运行、有效前沿及其针对最小波动率和最大夏普比率的优化投资组合,以及投资组合的个股。
推荐PyPI第三方库
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)
pf
是finquant.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中每日收益的方法:
- 累计收益:
- 日收益百分比变化:
- 日志返回: < > >
sma
:简单移动平均,和ema
:指数移动平均值。计算平均值
:包括买入/卖出信号的移动平均值带(不同时间窗/跨度)标绘布林格带
SMA
,ema
最小波动率
最小波动率,最大夏普比
最大夏普比有效回报率
给定预期回报率的最小波动率有效波动率
给定目标波动率的最大夏普比率plot\u efrontier
:绘制有效边界。如果没有提供最小/最大回报值,算法会根据给定投资组合中所有股票的最小/最大回报值,自动为有效边界选择这些限制。绘制最优投资组合图
:绘制具有最小波动率和最大夏普比率的投资组合标记图。- 最小波动率,
- 最大夏普比
- 预期收益,
- 波动性,
- 夏普比率。
- 模块提供的不同返回值
finquant.returns
, - 移动平均,移动平均带和布林格带
- 最小波动率
- 最大夏普比
- 给定目标回报率的最小波动率
- 给定目标波动率的最大夏普比率。
除此之外,该模块还提供函数历史平均值返回(data,freq=252)
,该函数计算一段时间内每日返回的历史平均值freq
移动平均值
模块finquant.moving_average
允许计算和可视化组合中所列股票的移动平均值。它包含计算和可视化
投资组合优化
有效前沿
有效前沿(finquant.efficient\frontier.efficientfrontier
)的实现允许优化投资组合
通过数值求解使目标函数最小化/最大化。
通常,可视化有效边界和最优解是有用的。这可以通过以下方法实现:
出于用户友好的原因,这些函数的接口在finquant.portfolio.portfolio
中提供。请查看文档
蒙特卡洛
或者amonte carlo可以进行n
试验,以找到最佳投资组合
由于计算量和精度的原因,标记为有效边界的方法应该是首选方法。后一种方法只是为了完整性和创造美丽的情节才包括在内。
示例
有关该项目的更多信息以及如何使用该项目的详细信息,请
请看/example
中提供的示例。
注意:在下面的示例中,pf
是指finquant.portfolio.portfolio
的一个实例,它保存所有股票价格并自动计算其最常见的数量。为了使finquant成为一个用户友好的程序,它结合了数据分析、可视化和优化,该对象还提供了与/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的实例,获取投资组合的数量,例如
投资组合的优化
/example/example optimization.py
:此示例关注投资组合的优化。为了实现这一点,这个例子展示了如何使用finquant.efficient\frontier.efficientfrontier
来优化投资组合,对于
推荐PyPI第三方库