用于构建商品远期、掉期和期货曲线的工具。

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

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

推荐PyPI第三方库


热门话题
java使用唯一的按钮标签单击按钮   代码生成如何使用Java codeModel为数组的特定索引赋值   java如何批量执行Camel SQL插入   java iText 7将ltv添加到现有签名   内存管理Java应用程序突然停止几天后(810)   带MySQL的java注册表单JavaFX在intellij中失败   如何使用eclipse为windows azure java项目启用远程调试   一种通用的java输入输出设计模式   java Android XML(RSS)忽略引号(“”)   java帮助:安卓中的8 X 10 2维按钮数组   java启动Android项目   JWrapper构建java应用程序   java如何在Android应用程序中设置基于日期/时间的默认页面加载?   java循环程序在完成后返回到起点   java Hibernate:更好的整体类还是多类映射?   回溯数独解算器的递归问题[Java]   java查找类用法   java如何在SpringWebFlow中将多个模型绑定到一个视图?