API¶
ffn
包¶
core
模块¶
- class ffn.core.GroupStats(*prices)[source]¶
基础类:
dict
GroupStats 允许人们并排比较多个系列。 它是一个围绕 {price.name: PerformanceStats} 字典的包装器, 并提供了许多便捷的方法。
传入的系列顺序将被保留。 可以通过索引位置或名称通过[]访问器访问单个PerformanceStats对象。
- Args:
价格(Series):要比较的多个价格序列。
- Attributes:
- stats (DataFrame): Dataframe containing stats for each
提供了系列。行中显示统计信息,列中显示系列。
- lookback_returns (DataFrame): Returns for diffrent
回顾周期(1个月,3个月,6个月,年初至今…) 周期在行中,系列在列中。
价格 (DataFrame): 合并并重新基准化的价格。
- plot(freq=None, figsize=(15, 5), title=None, logy=False, **kwargs)[source]¶
用于绘制序列的辅助函数。
- Args:
- freq (str): Data frequency used for display purposes.
请参考pandas文档以获取有效的频率字符串。
figsize ((x,y)): 图形大小
标题 (str): 如果默认值不合适,则使用此标题
logy (bool): y轴的对数刻度
kwargs: 传递给pandas的plot方法
- plot_correlation(freq=None, title=None, figsize=(12, 6), **kwargs)[source]¶
用于绘制相关性的实用函数。
- Args:
freq (str): Pandas 数据频率别名字符串
标题 (str): 图表标题
figsize (元组 (x,y)): 图形大小
kwargs: 传递给Pandas的plot_corr_heatmap函数
- plot_histograms(freq=None, title=None, figsize=(10, 10), **kwargs)[source]¶
围绕pandas的hist的包装器。
- Args:
- freq (str): Data frequency used for display purposes.
请参考pandas文档以获取有效的频率字符串。
figsize ((x,y)): 图形大小
标题 (str): 如果默认不合适,则使用此标题
kwargs: 传递给 pandas 的 hist 方法
- plot_scatter_matrix(freq=None, title=None, figsize=(10, 10), **kwargs)[source]¶
围绕pandas的scatter_matrix的封装。
- Args:
- freq (str): Data frequency used for display purposes.
请参考pandas文档以获取有效的频率字符串。
figsize ((x,y)): 图形大小
标题 (str): 如果默认值不合适,则使用此标题
kwargs: 传递给pandas的scatter_matrix方法
- set_date_range(start=None, end=None)[source]¶
更新统计、图表等的日期范围。如果为None,则使用原始日期范围。因此,要重置为原始范围,只需不带参数调用。
- Args:
开始 (date): 开始日期
结束 (end): 结束日期
- class ffn.core.PerformanceStats(prices, rf=0.0, annualization_factor=252)[source]¶
基础类:
object
PerformanceStats 是一个用于价格序列性能评估的便利类。它包含各种辅助函数,帮助绘图,并包含大量描述性统计信息。
- Args:
价格 (Series): 一个价格序列。
- rf (float, Series): Risk-free rate used in various calculation. Should be
如果它是一个浮点数,则表示为年度(年化)回报。否则,rf 应该是一个价格序列。
- Attributes:
name (str): 名称,来源于价格系列名称
- return_table (DataFrame): A table of monthly returns with
年初至今的数据也是如此。
- lookback_returns (Series): Returns for different
回溯周期(1个月、3个月、6个月、年初至今…)
stats (Series): 包含所有统计数据的系列
annualization_factor (float): 用于各种计算的年化因子;也称为nperiods, 252
- plot(freq=None, figsize=(15, 5), title=None, logy=False, **kwargs)[来源]¶
用于绘制序列的辅助函数。
- Args:
- freq (str): Data frequency used for display purposes.
请参考pandas文档以获取有效的频率字符串。
figsize ((x,y)): 图形大小
标题 (str): 如果默认不合适,则使用此标题
logy (bool): y轴的对数刻度
kwargs: 传递给pandas的plot方法
- plot_histogram(freq=None, figsize=(15, 5), title=None, bins=20, **kwargs)[source]¶
绘制给定回报频率的回报直方图。
- Args:
- freq (str): Data frequency used for display purposes.
这将决定返回的类型 (每日回报,每月回报,…) 请参考pandas文档以获取有效的周期字符串。
figsize ((x,y)): 图形大小
标题 (str): 如果默认不合适,则使用此标题
bins (int): 直方图的箱数
kwargs: 传递给 pandas 的 hist 方法
- set_date_range(start=None, end=None)[source]¶
更新统计、图表等的日期范围。如果为None,则使用原始日期。因此,要重置为原始范围,只需不带参数调用。
- Args:
开始 (date): 开始日期
结束 (end): 结束日期
- ffn.core.annualize(returns, durations, one_year=365.0)[source]¶
使用各自的持续时间对收益进行年化。
- Formula used is:
(1 + 收益) ** (1 / (持续时间 / 一年)) - 1
- ffn.core.asfreq_actual(series, freq, method='ffill', how='end', normalize=False)[source]¶
类似于pandas的asfreq,但保留实际日期。 例如,如果一月的最后一个数据点在29日, 将使用该日期而不是31日。
- ffn.core.calc_cagr(prices)[source]¶
计算给定价格序列的CAGR(复合年增长率)。
- Args:
价格 (pandas.Series): 一系列价格。
- Returns:
浮动 – 复合年增长率。
- ffn.core.calc_clusters(returns, n=None, plot=False)[source]¶
基于k-means聚类计算集群。
- Args:
返回 (pd.DataFrame): 收益的DataFrame
- n (int): Specify # of clusters. If None, this
将自动确定
plot (bool): 显示图表?
- Returns:
具有结构的字典:{cluster# : [列名]}
- ffn.core.calc_erc_weights(returns, initial_weights=None, risk_weights=None, covar_method='ledoit-wolf', risk_parity_method='ccd', maximum_iterations=100, tolerance=1e-08)[source]¶
计算给定收益DataFrame的等风险贡献/风险平价权重。
- Args:
返回 (DataFrame): 返回多个证券的收益。
initial_weights (list): 初始资产权重 [默认逆波动率]。
risk_weights (list): 风险目标权重 [默认等权重]。
- covar_method (str): Covariance matrix estimation method.
- Currently supported:
ledoit-wolf [默认]
标准
- risk_parity_method (str): Risk parity estimation method.
- Currently supported:
ccd(循环坐标下降)[默认]
slsqp(scipy的顺序最小二乘编程实现)
maximum_iterations (int): 迭代解决方案中的最大迭代次数。
tolerance (float): 迭代解中的容差水平。
- Returns:
系列 {col_name: weight}
- ffn.core.calc_ftca(returns, threshold=0.5)[source]¶
实现David Varadi的快速阈值聚类算法(FTCA)。
http://cssanalytics.wordpress.com/2013/11/26/fast-threshold-clustering-algorithm-ftca/ # NOQA
对于聚类目的,比k-means更稳定。 如果你想要更多的聚类,使用更高的阈值。
- Args:
- returns - expects a pandas dataframe of returns where
每一列是给定证券的名称。
- threshold (float): Threshold parameter - use higher value
用于更多集群。基本上控制系列必须有多相似(相关)。
- Returns:
集群名称(一个数字)和集群中证券列表的字典
- ffn.core.calc_inv_vol_weights(returns)[source]¶
计算与每列的反波动率成比例的权重。
返回与列的波动性成反比的权重,从而产生一组投资组合权重,其中每个头寸具有相同的波动性水平。
请注意,所有回报均为NaN或0的资产将从投资组合中排除(它们的权重设置为NaN)。
- Returns:
系列 {col_name: weight}
- ffn.core.calc_mean_var_weights(returns, weight_bounds=(0.0, 1.0), rf=0.0, covar_method='ledoit-wolf', options=None)[source]¶
计算给定收益DataFrame的均值-方差权重。
- Args:
返回 (DataFrame): 返回多个证券的收益。
weight_bounds ((low, high)): 优化的权重限制。
rf (float): Risk-free rate 用于效用计算的无风险利率
- covar_method (str): Covariance matrix estimation method.
- Currently supported:
标准
options (dict): 最小化的选项,例如 {‘maxiter’: 10000 }
- Returns:
系列 {col_name: weight}
- ffn.core.calc_mtd(daily_prices, monthly_prices)[source]¶
计算价格序列的月度回报。 如果价格仅在同月可用,则使用daily_prices 否则使用monthly_prices
- ffn.core.calc_perf_stats(prices)[source]¶
计算给定对象的性能统计信息。 该对象应该是一个价格序列。
将返回一个包含所有统计信息的PerformanceStats对象。
- Args:
价格 (Series): 价格序列
- ffn.core.calc_sharpe(returns, rf=0.0, nperiods=None, annualize=True)[source]¶
计算夏普比率 (参见夏普比率与索提诺比率的区别).
如果 rf 不为零且为浮点数,则必须指定 nperiods。在这种情况下,rf 被假定为以年化(年度化)表示。
- Args:
返回 (Series, DataFrame): 输入返回系列
rf (float, Series): 无风险利率 以年化收益率或收益率序列表示
- nperiods (int): Frequency of returns (252 for daily, 12 for monthly,
等等。
- ffn.core.calc_sortino_ratio(returns, rf=0.0, nperiods=None, annualize=True)[source]¶
计算给定一系列收益的Sortino比率 (参见Sharpe与Sortino的对比)。
- Args:
返回(Series 或 DataFrame):返回
rf (float, Series): 无风险利率 以年度(年化)表示或回报系列。
- nperiods (int): Number of periods used for annualization. Must be
如果 rf 不为零且 rf 不是价格序列,则提供
- ffn.core.calc_stats(prices)[source]¶
计算给定对象的性能统计信息。
如果对象是Series,则返回一个PerformanceStats对象。如果对象是DataFrame,则返回一个GroupStats对象。
- Args:
价格 (Series, DataFrame): 价格集合
- ffn.core.calc_ytd(daily_prices, yearly_prices)[source]¶
计算价格序列的年初至今回报。 如果价格仅从同一年开始可用,则使用daily_prices 否则使用yearly_prices
- ffn.core.deannualize(returns, nperiods)[source]¶
将按不同基础表示的年化回报进行转换。
- Args:
返回 (float, Series, DataFrame): 返回值
- nperiods (int): Target basis, typically 252 for daily, 12 for
每月,等等。
- ffn.core.drawdown_details(drawdown, index_type=<class 'pandas.core.indexes.datetimes.DatetimeIndex'>)[来源]¶
返回一个数据框,其中包含每个回撤序列中的开始、结束、天数(持续时间)和回撤。
注意
天数是实际的日历天数,不是交易日
- Args:
- drawdown (pandas.Series): A drawdown Series
(可以通过drawdown(prices)获得。
- Returns:
- pandas.DataFrame – A data frame with the following
列:开始、结束、天数、回撤。
- ffn.core.extend_pandas()[source]¶
扩展了pandas的PandasObject(Series, Series, DataFrame),并添加了本文件中定义的一些函数。
这有助于量化金融中常用的功能组合。
- Ex:
prices.to_returns().dropna().calc_clusters() (其中 prices 是一个 DataFrame)
- ffn.core.get_num_days_required(offset, period='d', perc_required=0.9, annualization_factor=252)[source]¶
估计假设数据正常所需的天数。
用于确定在给定时间段内是否有足够“良好”数据天数的辅助函数。
- Args:
offset (DateOffset): 偏移(回看)周期。
period (str): 周期字符串。
- perc_required (float): percentage of number of days
预期必填。
- ffn.core.infer_freq(data)[source]¶
根据输入索引推断最可能的频率。如果频率是
- uncertain or index is not DateTime like, just return None
- Args:
数据 (DataFrame, Series): 任何时间序列的数据框或系列
- ffn.core.limit_weights(weights, limit=0.1)[source]¶
限制权重并按比例重新分配超出部分。
- ex:
权重为 {a: 0.7, b: 0.2, c: 0.1}
调用时使用 limit=0.5
- excess 0.2 in a is ditributed to b and c
按比例。 - 结果是 {a: 0.5, b: 0.33, c: 0.167}
- Args:
weights (Series): 描述权重的系列
limit (float): 允许的最大重量
- ffn.core.plot_heatmap(data, title='Heatmap', show_legend=True, show_labels=True, label_fmt='.2f', vmin=None, vmax=None, figsize=None, label_color='w', cmap='RdBu', **kwargs)[source]¶
使用matplotlib的pcolor绘制热图。
- Args:
- data (DataFrame): DataFrame to plot. Usually small matrix (ex.
相关矩阵)。
标题 (string): 图表标题
show_legend (bool): 显示颜色图例
show_labels (bool): 显示值标签
label_fmt (str): 标签格式字符串
vmin (float): 比例的最小值
vmax (float): 比例的最大值
cmap (string): 颜色映射
kwargs: 传递给matplotlib的pcolor
- ffn.core.random_weights(n, bounds=(0.0, 1.0), total=1.0)[source]¶
生成伪随机权重。
返回一个长度为n的随机权重列表,其中每个权重都在范围bounds内,并且这些权重的总和为total。
在基准测试时创建随机投资组合非常有用。
- Args:
n (int): 随机权重的数量
bounds ((low, high)): 每个权重的边界
total (float): 权重的总和
- ffn.core.rebase(prices, value=100)[source]¶
将所有系列重新基于给定的初始值。
这使得比较/绘制不同的系列更加容易。
- Args:
价格:期望一个价格序列
value (number): 所有系列的起始值。
- ffn.core.resample_returns(returns, func, seed=0, num_trials=100)[source]¶
重新采样收益并在每个新样本上计算任何统计量。
https://en.wikipedia.org/wiki/Resampling_(statistics)
- Parameters
DataFrame) (返回 (Series,) – 返回
func – 给定重新采样的回报,计算一个统计量
seed – 随机数生成器的种子
num_trials – 重新采样并运行实验的次数
- Returns
重采样统计系列
- ffn.core.rollapply(data, window, fn)[source]¶
在大小为window的滚动窗口上应用函数fn。
- Args:
数据(Series 或 DataFrame):Series 或 DataFrame
窗口(整数):窗口大小
- fn (function): Function to apply over the rolling window.
对于一个系列,返回值应该是一个单一的数字。对于一个DataFrame,它应该返回一个新行。
- Returns:
与数据具有相同维度的对象
- ffn.core.to_drawdown_series(prices)[source]¶
计算drawdown系列。
这将返回一个表示回撤的序列。 当价格处于历史最高点时,回撤 为0。然而,当价格低于历史高点时, 回撤序列 = 当前 / 历史高点 - 1
最大回撤可以通过简单地在结果上调用 .min() 来获得(因为回撤序列是负的)
该方法忽略价格序列中所有的NaN间隙。
- Args:
价格(Series 或 DataFrame):价格序列。
- ffn.core.to_excess_returns(returns, rf, nperiods=None)[source]¶
给定一系列回报,它将返回超过rf的超额回报。
- Args:
返回 (Series, DataFrame): 返回
rf (float, Series): Risk-Free rate(s) 以年化形式表示的无风险利率或回报系列
- nperiods (int): Optional. If provided, will convert rf to different
仅在 rf 为浮点数时使用去年度化频率
- Returns:
excess_returns (Series, DataFrame): 收益 - 无风险利率
- ffn.core.to_monthly(series, method='ffill', how='end')[source]¶
方便的方法,使用‘M’参数(method=’ffill’,how=’end’)包装asfreq_actual。
- ffn.core.to_price_index(returns, start=100)[source]¶
返回给定一系列回报的价格指数。
- Args:
返回:期望一个返回系列
start (number): 起始级别
假设算术回报。
公式是: cumprod (1+r)
- ffn.core.to_ulcer_index(prices)[source]¶
将价格转换为 Ulcer index
参见 https://en.wikipedia.org/wiki/Ulcer_index
- Args:
价格 (Series, DataFrame): 价格
- ffn.core.to_ulcer_performance_index(prices, rf=0.0, nperiods=None)[源代码]¶
将价格转换为溃疡性能指数。
参见 https://en.wikipedia.org/wiki/Ulcer_index
- Args:
价格 (Series, DataFrame): 价格
- rf (float, Series): Risk-free rate of return. Assumed to be expressed in
年度(年化)条款或回报系列
nperiods (int): 如果提供了rf(非零),则用于将rf去年度化
data
模块¶
- ffn.data.DEFAULT_PROVIDER(ticker, field, start=None, end=None, mrefresh=False)¶
- ffn.data.csv(ticker, path='data.csv', field='', mrefresh=False, **kwargs)[source]¶
围绕pandas的read_csv的数据提供者包装器。提供记忆化功能。
- ffn.data.get(tickers, provider=None, common_dates=True, forward_fill=False, clean_tickers=True, column_names=None, ticker_field_sep=':', mrefresh=False, existing=None, **kwargs)[source]¶
用于将数据检索为DataFrame的辅助函数。
- Args:
tickers (list, string, csv string): 要下载的股票代码。
- provider (function): Provider to use for downloading data.
默认情况下,如果未提供,则将是 ffn.DEFAULT_PROVIDER。
common_dates (bool): 仅保留共同日期?删除缺失值。
- forward_fill (bool): forward fill values if missing. Only works
如果 common_dates 为 False,由于 common_dates 会移除所有的 nan,因此不需要向前填充。
- clean_tickers (bool): Should the tickers be ‘cleaned’ using
ffn.utils.clean_tickers? 基本上移除非标准字符(^VIX -> vix)并标准化为小写。
- column_names (list): List of column names if clean_tickers
不满意。
- ticker_field_sep (char): separator used to determine the
股票代码和字段。这是为了指定特定的、非默认的字段。例如,我们可能想要:AAPL:Low,AAPL:High,AAPL:Close。‘:’是分隔符。
mrefresh (bool): 忽略记忆化。
- existing (DataFrame): Existing DataFrame to append returns
to - 当我们从多个来源下载时使用
kwargs: 传递给提供者