为安全返回分析而设计的python包。

pyfinance的Python项目详细描述


PyFinance

pyfinance是一个python包,用于投资管理和安全回报分析。

它是对面向量化金融的现有软件包的补充,例如pyfolio熊猫数据读取器,以及fecon235

<表>支持巨蟒3.5 3.6 3.7最新版本最新版本包裹状态status许可证license<表>

内容

PyFinance最好以模块为基础进行探索:

<表><广告>模块 说明 < /广告><正文>数据集.py通过请求下载和组装财务数据集 常规.py通用财务计算,如主动份额计算、收益分布近似和跟踪误差优化。ols.py普通最小二乘(ols)回归,支持静态和滚动情况,用矩阵公式建立,用numpy实现。选项.py矢量化期权计算,包括black-scholes-merton欧洲期权估值、希腊期权和隐含波动率,以及普通货币差价期权策略的收益确定。返回.py通过CAPM框架对金融时间序列进行统计分析,旨在模拟FactSet Research Systems和Zephyr等软件的功能,提高速度和灵活性。utils.py不适用于上述任何一项的实用程序。

请注意,返回常规仍在开发中;它们没有经过彻底测试,并且具有一些未实现的功能。

安装

pyfinance可通过pypi访问。截至2018年3月,最新版本为1.0.1。使用pip安装:

$ pip3 install pyfinance

注意:pyfinance的目标是与python 3.x的所有次要版本兼容,但不保证与python 2.x兼容。

依赖关系

pyfinance主要依赖python的科学堆栈,包括numpy、pandas、matplotlib、seaborn、scikit learn和statsmodels。其他依赖项包括beautiful soup、requests、xrld和xmltodict。

有关特定版本阈值要求,请参见setup.py

教程

这是PyFinance的一些功能的演练。

returns.py模块设计用于通过capm框架对金融时间序列进行统计分析,旨在模拟factset research systems和zephyr,wi等软件的功能。提高了速度和灵活性。

它的主要类是tseries,一个子类pandas系列。截至2018年3月,数据帧等价物tframe尚未实现。

tseries实施了一系列新方法,这些方法具体涉及投资管理、证券收益和资产绩效研究、累积收益指数和提取等方面。

下面是一个构造示例:

>>>importnumpyasnp>>>importpandasaspd>>>frompyfinanceimportTSeries>>>np.random.seed(444)# Normally distributed with 0.08% daily drift term.>>>s=np.random.randn(400)/100+0.0008>>>idx=pd.date_range(start='2016',periods=len(s))# default daily freq.>>>ts=TSeries(s,index=idx)>>>ts.head()2016-01-010.00442016-01-020.00462016-01-030.01462016-01-040.01262016-01-05-0.0086Freq:D,dtype:float64

还有一些"新"方法:

>>>ts.max_drawdown()-0.12374551561531844# Downsample to quarterly compounded returns.>>>ts.rollup('Q')2016-03-310.04502016-06-300.12402016-09-300.06312016-12-31-0.00812017-03-310.1925Freq:Q-DEC,dtype:float64>>>ts.anlzd_stdev()0.16318780660107757>>>ts.sharpe_ratio(ddof=1)2.501797257311737

一些统计数据是相对基准的。对于采用benchmark参数的方法,benchmark可以是另一个tseries,一个pandas系列,一个1d numpy数组。

>>>bmk=TSeries(np.random.randn(400)/100+.0005,...index=ts.index)>>>ts.beta_adj(bmk)0.3176455956603447>>>ts.tracking_error(benchmark=bmk)0.23506660057562254

有了与capm相关的统计信息,如alpha、beta和r平方,它也可以是p and as数据帧或2d numpy数组。

>>>multi_bmk=pd.DataFrame(np.random.randn(400,2)/100+.0005,...index=ts.index)>>># Multifactor model support.>>>ts.alpha(multi_bmk)0.0010849614688207107

tseries仅附带一个附加的可选参数,该参数必须作为关键字参数:freq(默认值none)允许手动指定时间序列频率。它可以是pandas识别的任何频率字符串或锚定偏移字符串,例如"d"、"5d"、"q"、"q-dec"或"bqs-apr"。

>>># This is okay as long as a frequency can be inferred.>>>ts.freqisNoneTrue

这个额外参数的目的是为以年为单位给出的统计数据创建一个年化系数,例如标准差。

如果没有明确传递频率,PyFinance将尝试从该指数中推断出一个年化因子,但如果这两个因子都没有产生频率,则会引发一个例外。

>>>no_idx=TSeries(np.random.laplace(size=24)*.01+.005,freq='M')>>>no_idx.freq'M'>>>no_idx.anlzd_ret()0.04975219957136123

freq也可以在某些方法中传递,这将覆盖类实例的.freq如果它存在:

>>>no_idx.anlzd_ret(freq='W')# Treat `no_idx` as weekly returns.0.2341731795205313

datasets.py通过请求提供财务数据集下载和组装。它利用的资源包括:

  • Ken French的数据库(通过熊猫数据阅读器);
  • sec.gov;
  • cboe.com;
  • AQR的数据集页;
  • fred.stlouisfed.org;
  • 罗伯特·希勒在经济耶鲁大学的主页。

下面是一批示例。

加载SEC 13F文件:

# Third Point LLC June 2017 13F>>>frompyfinanceimportdatasets>>>url='https://www.sec.gov/Archives/edgar/data/1040273/000108514617001787/form13fInfoTable.xml'# noqa>>>df=datasets.load_13f(url=url)>>>df.head()nameOfIssuertitleOfClasscusipvaluevotingAuthority0ALEXIONPHARMACE...COM01535110915208812500001ALIBABAGROUPHL...SPONSOREDADS01609W10263405045000002ALPHABETINCCAPSTKCLA02079K3055345665750003ANTHEMINCCOM03675210323516212500004BANCOMACROSASPONADRB05961W10582971900000

行业投资组合月度回报:

$ pip3 install pyfinance
0

标准普尔500指数和利率数据摘自罗伯特·希勒网站,1871年至今:

$ pip3 install pyfinance
1

ols.py模块提供普通最小二乘(ols)回归,支持静态和滚动情况,使用矩阵公式构建,并使用numpy实现。

首先,让我们加载一些有关货币、利率和大宗商品的数据,以生成贸易加权美元相对于利率期限利差和铜价变化的回归。

$ pip3 install pyfinance
2

ols类实现"静态"(单)线性回归,当对象被实例化时,模型将被拟合。

它主要用于统计推断,而不是样本外预测,其属性在很大程度上模拟了statsmodels的结构。

$ pip3 install pyfinance
3

该模块还支持滚动回归。(在滑动窗口上对数据进行迭代回归。)

  • rollingols有生成numpy数组作为输出的方法。
  • pandasRollingolsRollingols的一个包装器,旨在模拟熊猫不推荐的movingols类的外观。它生成pandas数据帧和系列输出。

注意:所有解决方案都是通过矩阵公式生成的,该公式利用Numpy的广播功能将经典的矩阵公式扩展到一个额外的维度。对于大数据集,这种方法可能比较慢。

另外,请注意,windows不是"时间意识"就像熊猫的时间功能一样。由于numpy实现的原因,如果将索引包含一个缺失月份的窗口指定为12,则将在13个月内生成一个回归。为了避免这种情况,只需将输入数据重新索引到设置的频率即可。

$ pip3 install pyfinance
4

options.py是为矢量化选项计算而构建的。

bsm使用black-scholes-merton模型封装了一个欧式期权及其相关价值、希腊人和隐含波动率。

$ pip3 install pyfinance
5

options.py还导出了一些选项策略,例如跨接跨接扼杀斗牛,以及短蝶,举几个例子。

所有这些都继承自一个通用且可定制的opstrat类,该类可以从任意数量的puts和/或call构建。

下面是一个构造bear spread的示例,它是两个put或两个call的组合(put是默认值)。在这里,我们是1950年的空头看跌期权,2050年的空头看跌期权。与单个选项的情况一样,实例方法是向量化的,因此我们可以计算向量或网格的收益和利润:

$ pip3 install pyfinance
6

utils.py模块包含零星实用程序。

$ pip3 install pyfinance
7

API

有关深入的调用语法,请参阅源docstrings。

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

推荐PyPI第三方库


热门话题
java无法启动应用程序:JNLP错误   java根据用户输入在PreparedStatement中使用setTime()或setNull()   java EJB与同步   java以object为键通过hashmap进行搜索   java中的模10^9+7   针对包含其他对象的对象的java OOP最佳实践   如何将字符串作为HTML代码从Java文件读取到JSP页面?   java我的POM怎么了?“解析表达式..检测到递归表达式循环”   用于Hbase的Mapreduce的java NoSuchMethodError   JAVAlang.SecurityException:权限拒绝:启动意图{act=安卓.Intent.action.MAIN cat=[安卓.Intent.category.LAUNCHER]   数组初始化谜语Java   通过arraylist搜索时的java句柄关联