用于构建商品远期、掉期和期货曲线的工具。
curves的Python项目详细描述
概述
curves包包含一组用于构建商品远期、掉期和期货曲线的工具。
更具体地说,正在解决的问题是将一组交易远期价格转换成 均匀粒度的正向曲线。另外,导出的曲线可以构造成粒度更高的 比市场上交易的还要多。
可使用此软件包构造的曲线类型示例:
- 月度、季度和日历年度交易粒度的石油产品交换曲线 市场互换利率。
- 每日、每周、每月、季度、季节和 天然气年粒度远期和期货价格。
- 每日、每周、每月、季度和季节性交易的半小时粒度电力远期曲线 粒度远期和期货价格。
结果曲线应与投入一致,因为它们的平均值回到了投入远期合同价格。 这是必要的,以确保在输入合同和导出的远期曲线之间不存在套利机会。
用法
曲线包中的两个函数是曲线生成计算的核心:bootstrap_contracts和max_smooth_interp。 下面给出了这两个函数的一些基本示例。这两种方法都广泛使用大熊猫, 用于表示远期曲线的pandas.series和输入远期合约的交货期pandas.period 或导出的前向曲线。
有关更高级用法的详细信息,请查看这些函数的docstring和jupyter笔记本curves_quick_start_tutorial。
引导程序
bootstrap_contracts方法的基本功能是为具有重叠的合约获取一组远期价格 交付/固定周期,并返回具有重叠周期的曲线,但价格与原始输入一致。 下面是一个基本示例,显示了1月份和第一季度交货期的价格。 一、二、三月份远期价格一致。
fromcurvesimportbootstrap_contractsfromdatetimeimportdateq1_price=19.05contracts=[(date(2019,1,1),18.95),# Jan-19(date(2019,1,1),date(2019,3,1),19.05)# Q1-19]piecewise_curve,bootstrapped_contracts=bootstrap_contracts(contracts,freq='M')print(piecewise_curve)print()forbcinbootstrapped_contracts:print("{0}, {1}, {2:.3f}".format(repr(bc.start),repr(bc.end),bc.price))
以上代码打印到以下位置:
2019-01 18.950000
2019-02 19.102542
2019-03 19.102542
Freq: M, dtype: float64
Period('2019-01', 'M'), Period('2019-01', 'M'), 18.950
Period('2019-02', 'M'), Period('2019-03', 'M'), 19.103
样条插值
为了方便创建比输入契约粒度更高的曲线,curves包包含max_smooth_interp函数。 这使用最大平滑算法用四阶样条插值输入合同,同时保持平均价格约束。 输入合同价格中固有的。
下面的示例从各种粒度的输入契约创建一个每日粒度曲线。在实际情况中通常是这样的, bootstrap_contracts方法首先用于从契约中移除重叠。下面的示例还显示了输入合同如何具有间隙 在它们之间,样条曲线将对其进行插值,以填充最终平滑曲线中的间隙。它还演示了不同的表示方式 合同元组中的合同交付期和帮助器模块合同期的使用。
fromcurvesimportmax_smooth_interpfromcurvesimportcontract_periodascpcontracts=[(date(2019,5,31),34.875),(date(2019,6,1),date(2019,6,2),32.87),((date(2019,6,3),date(2019,6,9)),32.14),(pd.Period(year=2019,month=6,freq='M'),31.08),(cp.month(2019,7),29.95),(cp.q_3(2019),30.18),(cp.q_4(2019),37.64),(cp.winter(2019),38.05),(cp.summer(2020),32.39),(cp.winter(2020),37.84),(cp.gas_year(2020),35.12)]pc_for_spline,bc_for_spline=bootstrap_contracts(contracts,freq='D')smooth_curve=max_smooth_interp(bc_for_spline,freq='D')print(smooth_curve)
以上代码打印到以下位置:
2019-05-31 34.875000
2019-06-01 33.404383
2019-06-02 32.335617
2019-06-03 31.800171
2019-06-04 31.676636
2019-06-05 31.804146
2019-06-06 32.057113
2019-06-07 32.337666
2019-06-08 32.575648
2019-06-09 32.728620
2019-06-10 32.781858
2019-06-11 32.745075
...
2021-09-19 26.727181
2021-09-20 26.652039
2021-09-21 26.576895
2021-09-22 26.501749
2021-09-23 26.426602
2021-09-24 26.351454
2021-09-25 26.276305
2021-09-26 26.201156
2021-09-27 26.126006
2021-09-28 26.050856
2021-09-29 25.975706
2021-09-30 25.900556
Freq: D, Length: 854, dtype: float64