为安全返回分析而设计的python包。
pyfinance的Python项目详细描述
PyFinance
pyfinance是一个python包,用于投资管理和安全回报分析。
它是对面向量化金融的现有软件包的补充,例如pyfolio, 熊猫数据读取器,以及fecon235
<表>内容
PyFinance最好以模块为基础进行探索:
<表><广告>数据集.py
请求下载和组装财务数据集
常规.py
ols.py
选项.py
返回.py
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数组作为输出的方法。pandasRollingols
是Rollingols
的一个包装器,旨在模拟熊猫不推荐的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。