
gs-quant 时间序列经济计量用 prices 函数从收益率序列重建价格水平【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant在量化研究中价格与收益率之间的互相转换是最基础也最高频的操作。gs-quant 的gs_quant.timeseries.econometrics.prices函数正是为此而生它接收一段收益率时间序列根据指定的收益率类型简单、对数或绝对收益结合一个初始价格水平重建出对应的价格水平序列。本文以该函数的官方文档为骨架结合 prices 函数源码、Returns 枚举定义 与 test_econometrics.py 测试用例完整讲解其参数语义、三种收益率模式的数学原理、实现细节与实战用法。读完本文你将掌握在 gs-quant 中从收益率反推价格的标准方法并理解它与returns、product、sum_等函数之间的调用关系。函数签名与参数说明prices定义于 gs_quant/timeseries/econometrics.py其完整签名为plot_function def prices(series: pd.Series, initial: int 1, type: Returns Returns.SIMPLE) - pd.Series:三个参数的含义如下参数类型默认值说明seriespd.Series无输入的时间序列内容为收益率returns索引为日期initialint1初始价格水平即序列起点Y₀的取值不传时默认从 1 起步等价于净值曲线typeReturnsReturns.SIMPLE收益率类型取值只能是simple、logarithmic、absolute三种之一返回值是一个与输入同索引的日期型pd.Series表示由收益率逐期累积得到的价格水平。函数上还装饰了plot_function这意味着它可以直接接入 gs-quant 的绘图与可视化管线。type参数的类型Returns并不是普通字符串而是一个枚举定义于 gs_quant/timeseries/helper.pyReturns _create_enum(Returns, [simple, logarithmic, absolute])即只有Returns.SIMPLE、Returns.LOGARITHMIC、Returns.ABSOLUTE三个合法取值。如果传入其他值函数会抛出MqValueError错误信息为Unknown returns type (use simple / Logarithmic / absolute)见 econometrics.py 第 418-419 行。三种收益率类型数学原理与公式prices的行为完全由type参数决定。官方文档对三种类型给出了明确的数学定义设X_t为第 t 期的收益率、Y_t为第 t 期的价格水平Y₀ initial1. Simple简单收益默认通过几何累乘重建价格$$Y_t (1 X_{t-1}) \cdot Y_{t-1}$$也就是把每一期的简单收益率加 1 后逐期连乘再乘以初始价格。这与净值曲线cumulative return series的构造方式完全一致。2. Logarithmic对数收益通过指数化重建价格$$Y_t e^{X_{t-1}} \cdot Y_{t-1}$$对数收益率累加后在时间上可加反推时对每期收益率取自然指数后再连乘即可还原价格路径。3. Absolute绝对收益通过逐期累加重建价格$$Y_t X_{t-1} Y_{t-1}$$绝对收益本质是价格的一阶差分因此反推就是简单求和初始价格加上各期收益的累计和。官方文档在 prices 函数的 docstring 中给出了完整的类型对照表与上述三组公式本文将其完整保留并展开说明。源码实现解析三种模式的底层调用链从 econometrics.py 第 409-419 行 的实现看prices的逻辑非常简洁本质是按类型分发到三个不同的基础函数if series.size 1: return series if type Returns.SIMPLE: return product(1 series) * initial elif type Returns.LOGARITHMIC: return product(series.apply(math.exp)) * initial elif type Returns.ABSOLUTE: return sum_(series) initial else: raise MqValueError(Unknown returns type (use simple / Logarithmic / absolute))可以拆解出三个关键事实空序列直接返回series.size 1时原样返回输入不做任何计算这是对空数据的优雅兜底。Simple 模式 product(1 series) * initialproduct定义于 gs_quant/timeseries/statistics.py其默认窗口为整条序列Window(None, 0)即对1 X_t做全序列连乘连乘结果再乘以initial恰好对应公式Y_t ∏(1X_i) × initial。Logarithmic 模式 product(series.apply(math.exp)) * initial先对每期对数收益取math.exp还原为1简单收益再连乘。数学上e^{log(X_t/X_{t-1})} X_t/X_{t-1}因此连乘后自然得到价格比例。Absolute 模式 sum_(series) initial直接调用累加函数sum_对收益求和再加初始价格。与 returns 互为逆运算一图看懂转换关系prices的官方 See also 指向returns、product、exp。其中 returns 函数 是prices的精确逆操作其签名与prices完全对称def returns(series: pd.Series, obs: Union[Window, int, str] 1, type: Returns Returns.SIMPLE) - pd.Series:两者的转换关系为方向函数核心运算价格 → 收益率returnsSimple:X_t/X_{t-obs} - 1Log:log(X_t) - log(X_{t-obs})Abs:X_t - X_{t-obs}收益率 → 价格pricesSimple:∏(1X_i)Log:∏e^{X_i}Abs:ΣX_i initial官方文档在 prices 的 Examples 一节 展示了这种往返使用的典型写法 series generate_series(100) # 生成 100 个观测的价格序列 returns prices(returns(series)) # 价格→收益率→价格可还原原序列generate_series是 gs-quant 内置的测试数据生成函数见 statistics.generate_series 文档方便在无外部数据时快速验证算法。实战示例从收益率重建净值曲线以下代码演示prices的完整用法。假设我们有一个资产在 6 个交易日内的简单收益率序列初始价格设为 100import datetime as dt import pandas as pd from gs_quant.timeseries.econometrics import prices from gs_quant.timeseries.helper import Returns dates [dt.date(2019, 1, i) for i in range(1, 7)] r pd.Series([0.01, 0.02, -0.02, 0.0, 0.02], indexdates[:5]) # 5 期收益率 # 默认简单收益初始价格 1净值曲线 prices(r) # 输出首期为 1.0之后逐期按 (1X) 累乘 # 指定初始价格为 100 prices(r, initial100) # 等价于 prices(r, 100, Returns.SIMPLE) # 对数收益重建收益率需为对数形式 r_log pd.Series([0.009950, 0.019803, -0.020203, 0.0, 0.019803], indexdates[:5]) prices(r_log, 100, Returns.LOGARITHMIC) # 绝对收益重建 r_abs pd.Series([1.0, 2.02, -2.0604, 0.0, 2.019192], indexdates[:5]) prices(r_abs, 100, Returns.ABSOLUTE)测试用例验证三种模式结果的一致性test_econometrics.py 的 test_prices 用例 精确验证了上述行为可以作为理解函数语义的黄金标准r pd.Series([np.nan, 0.01, 0.02, -0.02, 0.0, 0.02], indexdates) result prices(r) # 默认 simpleinitial1 expected pd.Series([1.0, 1.01, 1.0302, 1.009596, 1.009596, 1.02978792], indexdates) result prices(r, 100) # 指定 initial100 expected pd.Series([100.0, 101, 103.02, 100.9596, 100.9596, 102.978792], indexdates)测试还验证了两个重要边界空序列prices(pd.Series(dtypefloat))原样返回空序列第 122-123 行非法类型prices(r, 1, None)抛出MqValueError第 151-152 行。值得注意的是测试构造的三组收益率simple、logarithmic、absolute 各一组在传入对应模式后都还原出了完全相同的价格序列100, 101, 103.02, 100.9596, ...这从测试层面印证了三种收益定义之间的一致性。典型应用场景prices在 gs-quant 中广泛用于以下场景收益率序列的可视化基于plot_function装饰器直接把收益率序列还原成价格路径后进行绘图展示。净值曲线构造将策略的每日收益无论简单还是对数形式还原为累计净值曲线默认initial1时输出即为标准化的净值序列。波动率等指标的逆向处理econometrics 模块内部的volatility等函数在实现中会先调用returns将价格转为收益率再计算prices则是其反方向操作二者配合可实现收益率→价格→波动率的完整链路。数据清洗与口径统一当上游只提供收益率而下游需要价格时如指数成分的等权拼接可用prices统一重建基准价格。此外prices与同模块的 index 函数价格序列归一化、change 函数价格变化量以及 volatility 函数收益率波动率共同构成了价格/收益率互转的完整工具集建议在 econometrics 模块文档 下整体查阅。使用注意事项收益率类型必须与数据口径一致输入是对数收益时务必传入Returns.LOGARITHMIC否则重建出的价格会产生系统性偏差。测试用例证明只有当收益率口径与type匹配时重建结果才是正确的。首期收益通常为NaNreturns在计算首期时因缺少前值会输出NaNproduct/sum_对NaN的处理会沿用到prices的结果中解读时需注意首期取值为初始价格。输入序列需单调递增索引prices内部调用的product带有assert x.index.is_monotonic_increasing断言见 statistics.py 第 523 行因此输入序列的日期索引必须按时间升序排列。综合来看prices是 gs-quant 时间序列经济计量模块中收益率→价格方向的唯一入口三个参数语义清晰、实现依赖product与sum_两个基础算子且有完整的测试覆盖。掌握它你就能在价格与收益率之间自由切换为后续的净值分析、波动率计算与策略回测打下基础。【免费下载链接】gs-quantPython toolkit for quantitative finance项目地址: https://gitcode.com/GitHub_Trending/gs/gs-quant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考