为信用衍生品提供高性能定价和风险的一揽子计划

isda的Python项目详细描述


#信用违约掉期价格项目将[ISDA CDS价格](http://www.cdsmodel.com/cdsmodel/)和一些新的IMM日期模块结合在一起,这些模块需要快速使用底层C库函数。这个包装器针对的是那些希望使用python或c++调用代码快速启动并运行以定价和计算cds风险的分析师。计算出的指标支持一系列潜在分析,包括:

+pvirty、pvclean和应计利息,以支持资产净值计算和反向测试。
+cs01和dv01风险敞口和限额监控分析的敏感度。
+超过日期范围的滚动敏感度。
+pvbp敏感度以支持信贷风险ISK对冲分析。
+指数CDS从组成层面定价。

潜在的未来措施可能包括等价的名义价差、票面价差和风险CS01,这些措施可能作为下一个完整发行候选方案的一部分添加。

外汇交易可以使用最新的cds指数在一次通话中完成。这种新方法支持通过向量或回收率和基础指数成分价差曲线来计算指数cds交易的内在价格。这也支持计算指数交易的倾斜和倾斜调整。

示例显示如何将信用利差列表和回收率列表传递到定价调用中。使用简单的pip-wheel二进制软件包,您可以很容易地开始使用这些示例。

`````
$pip install isda
````


>计算cds或itraxx索引的内在价格的示例代码。

````

def test\u sell\protection\u index(self):
"为索引cds特别定价的方法"

self.value_u date=self.sdate.strftime('%d/%m/%y')
self.verbose=0
self.is_buy_u protection=0

*125

将imm日期设置为o:将其隐藏在内部?
self.imm_dates=[f[1]表示imm_date_vector中的f(
start_date=self.sdate,tenor_list=self.tenor_list)]


wall_time_list=list()
表示范围(0,20)内的i:
f=cds_index_all_one(self.trade_date,
self.effective_date,
自我到期日,
自我价值日,
自我应计开始日,
自我回收率列表,
自我息票,
自我名义,
自我购买保护,
自我掉期利率,
自我掉期期限,
自我掉期到期日,
自我信贷息差表,
自我信贷息差期限,
self.spread悻u roll悻u tenors,
self.imm悻u dates,
self.scenario悻u shifts,

`````

是蟒蛇3型的吗?

1.0.3分支与python3配合得非常好,并已升级为使用visual studio 2017 Vintage与msvc进行干净的编译。我们还在pypi.org上提供了一个pip包,其中包含一个针对windows的预编译的二进制控制盘
。这个窗户binary wheel已经发布到pypi和testpypi,现在可以公开下载。

在使用python3的Windows桌面上,可以使用以下命令测试安装。下面的测试确定了从125个独立的基础名称定价的索引CD的平均价格。
在我的Intel(T)i5 2.4GHz上本地运行的平均墙壁时间约为415毫秒。这不是特别快,包括没有缓存和两个单独的调用pv dirty和pv clean。



````
$python-m venv test1
$cd test1
$scripts\activate.bat
$cd test1
$pip install isda
$copy lib\site packages\isda\tests\testcdspriceindex.py
$python testcdspriceindex.py

python testcdspricicerindex.py
cob-u日期:08/01/2018/01/2018 pvu脏:-2792.666875 pvu干净:-2797.527986 ai:4.861111墙墙时间:422.0(ms)
cob-u日期:08/01/2018/01/2018 pvu脏:-2792.666875 pvv-干净:-2797.527986 ai:4.861111墙墙时间:422.0(ms)
cob-u日期:08/01/2018 pvv-脏:-2792.666875 pvu脏:-2792.666875 pvu干净:-2797.527986-co-co-u日期:08/01/2018/01/2872.666875 pvu脏:-27.6668个75光伏电池清洁:-2797.527986人工智能:4.861111墙墙时间:423.0(ms)
COB-COB-U日期:08/01/2018/01/2018光伏电池清洁:-2792.666875光伏电池清洁:-2797.527986人工智能:4.861111墙时间:409.0(ms)
COB-U日期:08/01/2018/01/2018光伏电池清洁:-2792.666875光伏电池清洁:-2779 7.527986人工智能:4.861111墙时间:428.0(ms)
COB-COB-U日期:08/01/2018/01/2018光伏电池清洁:-2792.861111墙时间:409.0.0(ms)
COB-COB-日期:08/01/2018 PV污垢:-2792.666875 pvu清洁度:-2797.527986 AI:4.861111墙污垢时间:414.0(ms)
Cob-U日期:08/01/2018/01/2018 pvu污垢:-2792.666875 pvu清洁度:-2797.527986 AI:4.861111墙污垢时间:416.0(ms)
factoral 120
平均执行(415.4,)


在8.319s中运行1次测试






<

<

<





/>(测试1)C:\ SAndbox\test1>;
````



目前我们只发布了3.7python wheel for windows,但是我们计划将其扩展到3.5&3.6。








模块有一个单独的isda名称空间,由两个单独的名称空间组成;核心isda.isda用于定价和风险,isda.imm用于生成imm日期向量的库。
在单一名称或索引CD上的广告和CDS索引中的所有内容都已添加,以支持快速索引
查找定价。第二种方法尚未提供风险结果集。

``python
泰和表演。主要变化如下所示。

0。将其余方法的所有逻辑放回&;solve从setup.py dist调用cl.exe,它应该按预期工作
。然后使用python 3.6在windows&linux上重新测试。附加的cds指数可以为整个信用指数定价,只需一次呼叫图书馆。这样可以避免对单一名称pricer的过度调用。新的调用可以接受一系列的恢复率和一系列的信用利差曲线。所有其他输入在整个指数信用中假定为常数。此调用可用于实现更高效的倾斜解算器。

2。返回f[0]与f[1]元组的行为变化;成分与索引。

```
c:\ github\creditdefaultswappricer\x64>;python testcdspricerr.py
.cob日期:08/01/2018 pv脏:-2792.67 pv脏:-2797.53 ai:4.86墙时间:421.0(ms)
```

>3。包括了一个新的功能来处理扩展曲线引导失败的情况。恢复率一次降低一个基点,直到可实现自举曲线这在高应力情况下通常是一个问题当恢复率和扰动的扩展曲线不一致时。已解决与无符号整数和有符号整数比较相关的编译错误数。

5。IsD.I SWIG接口已经改变,需要使用SWIG命令行实用程序进行单独编译。
BR/>‘BR/> SWIG-C++ + Python ISDA。我
‘BR/> BR/> 6。与MSVC Visual Studio 2017 Vintage cl.exe编译器集成。这意味着完全改写底层C++代码的几个部分,并在Linux上激活C++ 11的新开关。为了支持在windows和linux上的部署,我们引入了几个新的构建开关。
python3迁移

第五。通过切换到正确的setup.py,迁移路径被认为更容易。这也使得使用pip的迁移可能更容易,并且更符合一般python生态系统。


内部调用重新使用掉期息差期限列表作为面值息差期限,并将为每个期限计算面值息差。然后,par spreads的向量在results接口上以附加向量的形式返回,并且可以很容易地在python中访问,如下所示。

`````
信用利差=[0.001374678677867844589]*8
互换期限=[1米、2米、2米、3米、6米、9米、1 Y、2 Y、3 Y,
'4Y、5 Y、6 Y、6 Y、7 Y、8 Y、9 Y,
'4Y、5 Y、5 Y、6 Y、7 Y、8 Y、9 Y,
'10Y、15 Y、20 Y、30 Y,


f=CDS,所有的一个一个(交易日,
有效日期,
有效期,
到期日,
到期日,
到期日,价值日期,
应计开始日期,
回收率,
息票,
名义上,
是购买保护,
掉期利率,
掉期期限,
掉期到期日,
信用利差,
信用利差期限,
利差滚动期限,
imm日期,
情景转移,
越期


展开元组
pv脏,pv干净,ai,cs01,dv01,持续时间(单位:毫秒=f[0]
pvbp6m,pvbp1y,pvbp2y,pvbp2y,pvbp3y,pvbp4y,pvbp5y,pvbp7y,pvbp10y=f[1]
ps-1m,ps-2m,ps-3m,ps-3m,ps-6m,ps-9m,ps-9m,ps-1y,ps-2y,ps-3y,ps-3y,ps-ms,ps-3m,ps-6m,ps-6m,ps-9m,ps-9m,ps-1y,ps-2y,ps-2y,ps-2y,ps-2y 4y,ps_5y,ps_6y,ps_7y,ps_8y,ps_9y,ps_10y=f[2]

AssertalMosteQuals(0.0027488267672727324,PS_1 m)
资产资产资产(0.00274888883148583,PS_2 m)
资产资产资产(0.00274929986868985,PS_3 m)
资产资产资产资产(0.002749493998666666579,PS_6 m)
资产资产资产(0.00274949366666531810.00274936666653181,PS_9,PS_6 m)
资产资产资产资产资产(0.00274949494949373737373737373777543434343434343,0.002749373737373737ps u 1y)
总成资产质量(0.002749329444444417,ps_,ps_,ps_)
>资产质量(0.00227499393932452452454643,ps_,ps_,ps_,ps_,ps_)
>资产资产质量(0.002274993199385,ps_,ps_,ps y)
>资产资产质量(0.002274992926894167,ps_,ps y)
>资产资产质量(0.0022749939393292929444444444444444444444444y)
资产负债表Stequals(0.00274925367015,ps_8y)
AssertalMostequals(0.00274927195173,ps_9y)
AssertalMostequals(0.0027493238284,ps_10y)

`````
增加了一个额外的单元测试,显示如何在扁平排列情况下访问这些数据。上面的例子说明了一个简单的例子,我们从13.7个基点的平息差中定价一个指数,并在每个期限计算一个类似的平息差。

\unittest framework

到批准的Markit Partners计算器。由于如何将内部ISDA模型API调用连接在一起的规则可能会引入潜在的错误;因此,能够确认准确的行为与已批准的模型收敛是至关重要的。

使用markit和bbg计算器将测试用例设置为已手动验证到11个小数位的资产值。也有瓦尔的迹象我反对市场惯例。

````
自我资产质量(-1.23099324435,pv砦脏)
自我资产质量(-1.19210435546,pv砦净)
自我资产质量(0.038888888888889,ai)
自我资产质量(14014.5916905,cs01*1.0e6)
自我资产质量(131.61798715,DV01*1.0E6)

```

净现值加累计现值之和应与脏现值或价格相匹配。最后,验证了两个敏感因素,信贷息差和利率变动。

bat文件要求您首先下载并安装下面列表中的前两项。您可能已经安装了python27,make.bat文件假定它安装在正常的c:\ python27\位置以及符合posix的编译器mingw中。微软Visual C++编译的C.exe被测试,但是伴随着大量的语言差异和Windows特定的问题。mingw提供了从linux到windows平台的更干净的迁移路径。

+[python安装程序](https://www.python.org/downloads/release/python-2713/)
+[mingw安装程序](https://sourceforge.net/projects/mingw/files/installer/mingw-get-setup.exe/download?使用镜像=kent&r=https%3a%2f%2fsourceforge.net%2fprojects%2fmingw%2ffiles%2fsinstaller%2f&;使用镜像=kent)
+[swig安装程序](https://sourceforge.net/projects/swig/?source=typ_redirect)


\正在将isda.pyd和isda.py文件中的sult复制到cds目录中。然后,您可以按照以下步骤测试二进制文件:python isda-test.py

````


python脚本的控制台上应显示以下示例输出。

````
c:\ github\creditdefaultswappricer\cds>;python isda-test.py
23/01/2018 pv-dIRTY(-1.07226)CS01(-8298.48)DV01(-9.87001E-05)PVBP5Y 0.00049088 5YEQNOT(16.9053)1日滚动(-1806.69)时间(32.0)
24/01/2018光伏脏(-1.0707)CS01(-8286.24)DV01(-9.78226E-05)PVBP5Y 0.000490599 5YEQNOT(16.8901)1日滚动(-1773.74)时间(51.0)
2018年1月25日光伏脏(-1.06917)CS01(-8274.28)DV01(-9.78311E-05)PVBP5Y 0.000490335 5YEQNOT(16.8747)1日滚动(-5329.83)时间(60.0)
2018年1月26日光伏脏(-1.06457)CS01(-8238.78)DV01(-9.78402E-05)PVBP5Y 0.000489523 5YEQNOT(16.8302)1日滚动(-1798.08)时间(66.0)
29/01/2018光伏脏(-1.06302)CS01(-8226.13)DV01(-9.69741e-05)PVBP5Y 0.000489267 5YEQNOT(16.8132)1天滚动(-1784.68)时间(64.0)
30/01/2018光伏脏(-1.06148)CS01(-8214.07)DV01(-9.66886e-05)PVBP5Y 0.000488996 5YEQNOT(16.7978))1日辊(-1806.4)时间(50.0)
31/01/2018 pv砦脏(-1.05992)cs01(-8201.83)dv01(-9.58224e-05)pvbp5y 0.000488714 5yeqnot(16.7825)1日辊(-1773.78)时间(37.0)
01/02/2018 pv砦脏(-1.0584)cs01(-8189.87)dv01(-9.58308e-05)pvbp5y 0.000488455 5YEQNOT(16.7669)1日滚动(-5329.87)时间(36.0)
02/02/2018光伏脏(-1.05379)CS01(-8154.38)DV01(-9.58399E-05)PVBP5Y 0.000487642 5YEQNOT(16.7221)1日滚动(-1797.88)时间(32.0)
05/02/2018光伏脏(-1.05225)CS01(-8141.73)DV01(-9.4985E-05)PVBP5Y 0.000487387 5YEQNOT(16.7049)1日辊(-1784.61)时间(35.0)
06/02/2018 pvu脏(-1.05071)CS01(-8129.68)DV01(-9.47032E-05)PVBP5Y 0.000487119 5YEQNOT(16.6893)1日滚动(-1806.11)时间(33.0)
07/02/2018光伏脏(-1.04915)CS01(-8117.44)DV01(-9.38483E-05)PVBP5Y 0.000486838 5YEQNOT(16.6738)1日滚动(-1773.82)时间(31.0)
08/02/2018光伏脏(-1.04762)CS01(-8105.4)9)DV01(-9.38566E-05)PVBP5Y 0.000486574 5YEQNOT(16.6583)1天辊(-5329.91)时间(41.0)
09/02/2018光伏脏(-1.04302)CS01(-8069.99)DV01(-9.38657E-05)PVBP5Y 0.000485761 5YEQNOT(16.6131)1天辊(-1797.68)时间(36.0)
12/02/2018光伏脏(-1.041)48)CS01(-8057.36)DV01(-9.3022E-05)PVBP5Y 0.000485506 5YEQNOT(16.5958)1天辊(-1784.55)时间(33.0)
13/02/2018光伏脏(-1.03994)CS01(-8045.31)DV01(-9.27439E-05)PVBP5Y 0.000485238 5YEQNOT(16.5801)1天辊(-1805.82)时间(36.0)

c:\ github\creditdefaultswappricer\cds>;history

```

\python pyconfig.h中的可能错误


R/>
[C:\MIW\LGB\MIWW32-3.3.0包含[C++CCM:1157:11:错误:':YOTT ''尚未声明](http://StaskObjult.COM/Quasy/ 42276984/Hyt尚未声明)
BR/>编辑文件C:\\PythON-27 \包含\PyCONFIG.H,注释如下:第286行;nd链接完成。

````
(>;2.91建议)"endif




这个库背后的理念是易于使用,底层的[isda c函数](http://www.cdsmodel.com/cdsmodel/)虽然可用,但很难集成,而且人们通常会返回到任何一个[第三方](https://www.google.co.uk/search)?q=fincad+cds+pricier&oq=fincad+cds+pricier&aqs=chrome..69i57j0.3457j0j7&sourceid=chrome&ie=utf-8)或[开源cds定价库](http://quantlib.org/index.shtml)。虽然这对大多数用途来说都是很好的;当您需要快速而方便地精确定价,以完全符合isda cds模型时,此包装器允许您非常快速地构建并开始编写代码python,并在实际cds头寸上定价和计算风险。


1。这不只是另一张CD更贵吗?

这个库实际上只是底层[isda cds定价库]的一个薄包装(http://www.cdsmodel.com/cdsmodel/)。将价差、利率和定价例程与一些数组传递和imm日期逻辑连接起来的复杂性完成了一个集成任务。这些步骤都不是特别困难,但它们共同构成了采用isda cds价格更高的障碍。通过使这个库可以与现有的[isda cds pricier]一起使用(http://www.cdsmodel.com/cdsmodel/),希望能降低障碍,使采用变得更加容易。

2.唯一能模拟天气的系统真的只有天气吗?

如果您需要的是安全、准确的isda定价,那么为什么要选择isda以外的价格呢?然而,使用这个cds代价更高,它避免了计算出所有要调用的正确c函数以及如何轻松地将对象传递到这些具有double*和多种自定义typedef对象(如tdateinterval)的外部"c"样式函数的麻烦。我只想创建一个日期时间并将其传递到一个函数中!

如何开始?

可以使用make.sh脚本调用[swig](http://www.swig.org/)和生成和编译包装器和底层所需的gcc构建来下载模块以及合适版本的[isda cds定价库](http://www.cdsmodel.com/cdsmodel/)。代码模块。C++调用也由这个文件管理,该文件在连接整个模块之前将构建C++包装器,并将其链接到一个名为库的库中。这个库可以很容易地导入python c运行时,如下所示。

``python
从isda导入cds_all_in_one,cds_index_all_in_one
从isda导入imm date_vector
```

简单函数CDSJ-AlxInOne将提供一个[SWIG](http://wwwsSWig.Org/)包的C++函数,它从[ISDACDS模型]调用下面的C库函数(http://www. CDsMaul.com /CDSimult/)。接口的构造使得使用尽可能简单和容易。使用python本机类型,不使用自定义对象。


主要原因是python代码更容易作为元组对象列表而不是元组进行操作。

+基本定价和风险度量列表
+pbvp-前瞻性价格数组
+滚动-滚动增量pv值数组
+bucket-数组被扣CS01值







.00217号,0.003,0.00504,
0.00626,0.00739,0.00844,0.00941,0.01105,
信贷利差曲线
信贷利差=[0.00141154155739384]*8
信贷利差期限=['6M'、'1Y'、'2Y'、'3Y'、'4Y'、'5Y'、'7Y'、'10Y']

指定N个滚动期限
利差滚动期限=['1D'、'1W'、'1M'、'2m'、'3M'、'4M'、'6M'、'1Y'、'2Y'、'3Y'、'5Y']
情景变化=[-50,-10,20,50,50,100,200,200,300]


value asofdate
sdate=datetime.datetime.datetime(2018,1,23)
value-date=sdate.strftime('%d/%m/%y''%br/>

<

贸易经济学
回收率=0.4
优惠券=100
贸易日期='14/12/2017'
生效日期='15/12/2017'
优惠券=100
贸易日期='14/12/2017'
有效日期='15/12/12/2017'='15/12/12/12/2017'
12个/2011年12月20日至2017年12月20日的应计开始日期
2011年12月20日的应计开始日期
2017年12月20日的应计开始日期
1.0亿欧元
2017年12月0日的应计保护

1欧元区的假日日历
欧元区的假日日历
Holiday=[DateTime.DateTime.DateTime(2017年12月12日,25日)日期时间('%d/%m/%m/%m/%y'),
DateTime.DateTime.DateTime(2017年12月12日,24日)日期时间('%d/%m/%m/%y'%m/%y')]]

<李St表示IMM日期帮助器
期限列表=[0.5,1,2,3,4,5,7,10]

_一个月内不包括到期日(交易日,
生效日,
到期日,
价值日,
应计开始日,
回收率,
息票,
名义上,
是买入保护,
互换利率,
互换期限,
信用利差,
信用利差期限,
排列滚动期限,
imm日期,
场景移动,
假日,
详细)

r/>pvu脏,pvu干净,ai,cs01,dv01,持续时间以毫秒为单位,以毫秒为基数
pvbp6m,pvbp1y,pvbp2y,pvbp3y,pvbp4y,pvbp5y,pvbp7y,pvbp10y=pvbp
rol1d,roll1w,roll1w,roll1m,roll2m,roll3m,roll4m,roll6m,roll1y,roll2y,roll3y,roll5y=roll
bububububububububucc01,bububububububububububububucs01,cs01,pububububububububububububu cs01,cs01,cs01,pvbp2u2是的,布克市场行情,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket,bucket

```


cdsu all,在一个函数调用中,用一个位置格式返回一组度量值,用一个位置格式返回一个位置格式返回一组度量值,用一个位置格式返回一个位置格式返回一组度量值,一组度量具体如下。

+pv-dirty-净压力CDS的现值,包括当前息票期的应计利息。
+pv_clean-CDS的净现值,不包括当前息票期的应计利息。
+ai-当前息票期CDS交易的应计利息。
+cs01-基于整个cds利差曲线上1bps的平行移动,cds净现值的变化。
+dv01-基于整个利率曲线上1bps的平行移动,cds净现值的变化。
+pvbp6m-基于基点的现值以6M imm tenor date的1bps移位为准。
+pvbp1y-以1Y imm tenor date的1bps移位为基础的基点现值。
+pvbp2y-以2Y imm tenor date的1bps移位为基础的基点现值。
+pvbp3y-以3Y imm te的1bps移位为基础的基点现值nor date.
+pvbp4y-基于4y imm期限日期的1bps偏移的基点现值。
+pvbp5y-基于5y imm期限日期的1bps偏移的基点现值。
+pvbp7y-基于7y imm期限日期的1bps偏移的基点现值。
+pvbp10y-pre基于10y imm期限日期的1bps移位发送基点值。
+持续时间(单位:毫秒)-执行例程的总墙时间
+ROLL1d-以位置的基础货币计算的1天滚动增量pv。
+roll1w-以头寸基础货币计的1周减记delta pv。
+roll1M-以头寸基础货币计的1个月减记delta pv。
+roll2M-以头寸基础货币计的2个月减记delta pv。
+roll3M-以头寸基础货币计的3个月减记delta pv。
+rolL4M-4个月以持仓本位币减记Delta Pv。
+Roll6M-6个月以持仓本位币减记Delta Pv。
+Roll1Y-1年以持仓本位币减记Delta Pv。
+Roll2Y-2年以持仓本位币减记Delta Pv。
+Roll3Y-3年R以头寸的基础货币向下滚动Delta Pv。
+以头寸的基础货币向下滚动Delta Pv 5年。
+bucket_CS01_6;6M-当我们将6M利差期限移动1bps时CDS的Delta Pv。
+bucket_CS01_1y-当我们将1Y利差期限移动1bps时CDS的Delta Pv。
+bucket_CS01_2y-当我们将2y的利差期限移动1bps时,cds的delta pv。
+bucket-cs01-y-当我们将3y的利差期限移动1bps时,cds的delta pv。
+bucket-cs01-y-当我们将4y的利差期限移动1bps时,cds的delta pv。
+bucket-cs01-y-当我们将5y的利差期限移动1bps时,cds的delta pv。
+bucket-cs01_7y-当我们将7y利差期限移动1bps时cds的增量pv。
+bucket y-当我们将10y利差期限移动1bps时cds的增量pv。


te[imm dates](https://en.wikipedia.org/wiki/imm_dates)能很好地与所有CDS合同和业务日期规则配合使用?由于这个原因,这个模块附带了一个imm_date_helper类,这个类可以省去所有的工作。

1.imm_date_helper

imm_date_helper函数已经编写和测试,其明确目的是提供完全符合cds市场惯例的准确imm日期。使用imm_date_helper函数,您可以轻松地为任何营业日期。

2.[半年度滚动](https://www.isda.org//2015/12/10/updated-faq-amend-single-name-on-the-run-frequency)

自2015年以来,CDS合同的IMM日期逻辑已更改为[半年度滚动](https://www.isda.org//2015/12/10/updated faq-amend-single-name-on-run-frequency);此更改影响CDS曲线和SHOU的所有未来期限为了确保CDS合同定价的一致性,我们需要准确地应用该方法。


\如果您正在定价,并且需要在ISDA 2015半年度滚动更改之前的IMM日期,则这将自动应用于帮助器功能。函数查看start_date参数的值,以确定是否需要应用此最新规则。



``python
def test_single_roll date_day_before_roll date(self):


('2Y','20/12/2018'),
('3Y','20/12/2019'),
('5Y','20/12/2021'),
('7Y','20/12/2023')]


sdate=datetime.datetime(2017,3,17)
tenor清单=[0.5,1,2,3,5,7]
本地结果=imm_u date助手(开始日期=sdate,
期限列表=期限列表,
格式='%d/%m/%y')



M’,"20/12/2017"),
('1Y','20/06/2018'),
('2Y','20/06/2019'),
('3Y','20/06/2020'),
('5Y','20/06/2022'),
('7Y','20/06/2024')]

期限列表=[0.5,1,2,3,5,7]
local_result=imm_date_helper(开始日期=sdate,
tenor_list=tenor_list,
format='%d/%m/%y')



for(r,l)in zip(real_result,local_result):
self.asserttrue(r[0]==l[0]and r[1]==l[1])

````











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

推荐PyPI第三方库


热门话题
java如何使用Ibatis在插入时返回ID(使用返回关键字)   java(org.hibernate.TransactionException)org。冬眠TransactionException:事务未成功启动   java小程序jwindow始终位于JNLP顶部   在Java中重新解析JSON对象?   java单击后将ListView数据移动到新屏幕   Mule ESB中的java WSA寻址特性   Java,对象编程:获取返回0值的方法   hibernate的Java通用问题,如何处理T get(K id)   java在使用超级CSV读取CSV时忽略引用   ssh使用Java远程运行命令   java如何向具体用户发送websocket消息?   在JAVA中,我可以在不指定的情况下使用条件运算符吗?