#### 债券 ##### 内容 - 债券收益率 - 债券敏感性指标 - 基本情况 - 可转债 - 债券派息和利率 - 债券估值 - 债券收益率曲线 - 债券组合 - 可转债转股及余额 - 债券指数估值 - 中间函数 - 标准券折算率 - 基本信息 - 行情单位变更日期 - 债券回购 ##### 债券收益率 ###### 内容 - bd_AdjustedDuration - bd_RemainYear - bd_RemainPayNumber - bd_PayPrice - bd_YTM - bd_Interest3 - bd_AdjustedDuration3 - bd_Duration3 - bd_YTM3 - bd_CoupDayBS - BondAccruedInterest - BondAccruedInterest1 - BondAccruedInterest2 - BondAccruedInterest3 - BondAccruedInterest4 - BondCleanPrice - BondDirtyPrice - BondYieldToMaturity - BondYieldToMaturity1 - BondYieldToMaturity2 - BondYieldToMaturity3 - 到期收益率 - 应计利息 - 常用计算天数 ###### bd_AdjustedDuration 范例 //取得SH010107(21国债⑺)在20110913的修正久期 ```text SetSysParam(pn_stock(),'SH010107'); EndT:=inttodate(20110913); return bd_AdjustedDuration(EndT);//8.689358 ``` ###### bd_RemainYear 范例 //取得SH010107(21国债⑺)在20110913的剩余年限(年) ```text SetSysParam(pn_stock(),'SH010107'); EndT:=inttodate(20110913); return bd_RemainYear(EndT);//9.890411 ``` ###### bd_RemainPayNumber 范例 //取得SH010107(21国债⑺)在20110913的剩余付息次数 ```text SetSysParam(pn_stock(),'SH010107'); EndT:=inttodate(20110913); return bd_RemainPayNumber(EndT);//20 ``` ###### bd_PayPrice 范例 //取得SH010107(21国债⑺)在20110913的结算价(元) ```text SetSysParam(pn_stock(),'SH010107'); EndT:=inttodate(20110913); return bd_PayPrice(EndT);//103.26 ``` ###### bd_YTM 范例 //取得SH010107(21国债⑺)在20110913的到期收益率(%) ```text SetSysParam(pn_stock(),'SH010107'); EndT:=inttodate(20110913); return bd_YTM(EndT);//3.919539 ``` ###### bd_Interest3 范例 //取得SH010107(21国债⑺)的应计利息(元) ```text SetSysParam(pn_stock(),'SH010107'); return bd_Interest3();//0.27427 ``` ###### bd_AdjustedDuration3 范例 //取得SH010107(21国债⑺)的修正久期 ```text SetSysParam(pn_stock(),'SH010107'); return bd_AdjustedDuration3();//8.683337 ``` ###### bd_Duration3 范例 ```text //取得SH010107(21国债⑺)的久期 SetSysParam(pn_stock(),'SH010107'); return bd_Duration3();//9.023284 ``` ###### bd_YTM3 范例 //取得SH010107(21国债⑺)的到期收益率(%) ```text SetSysParam(pn_stock(),'SH010107'); return bd_YTM3();//3.914935 ``` ###### bd_CoupDayBS //取得SH010107(21国债⑺)在20110913的当前付息期内截止到交易日的天数 ```text SetSysParam(pn_stock(),'SH010107'); EndT:=inttodate(20110913); return bd_CoupDayBS(EndT);//45 ``` ###### BondAccruedInterest 范例 获得代码SH010107在20171218T的日间应计利息-现金流算法 ```text Setsysparam(pn_Stock(),”SH010107”); Setsysparam(pn_bonddataprovider(),2);//数据供应商选择TS计算 Endt:=20171218T; Return BondInterest(Endt,0); ``` 获得代码SH010107在20171218T的日终应计利息-现金流算法 ```text Setsysparam(pn_Stock(),”SH010107”); Setsysparam(pn_bonddataprovider(),2);//数据供应商选择TS计算 Endt:=20171218T; Return BondInterest(Endt,1); ``` ###### BondAccruedInterest1 ###### BondAccruedInterest2 ###### BondAccruedInterest3 ###### BondAccruedInterest4 ###### BondCleanPrice ###### BondDirtyPrice ###### BondYieldToMaturity 范例债券SH010107在20171228日收盘买入持有到到期的收益率 ```text Endt:=20171228T; Setsysparam(pn_Stock(),"SH010107"); Setsysparam(pn_bonddataprovider(),2);//数据供应商选择TS计算 Return BondYieldToMaturity(Endt); ``` ###### BondYieldToMaturity1 - bd_AdjustedDuration - bd_RemainYear - bd_RemainPayNumber - bd_PayPrice - bd_YTM - bd_Interest3 - bd_AdjustedDuration3 - bd_Duration3 - bd_YTM3 - bd_CoupDayBS - BondAccruedInterest - BondAccruedInterest1 - BondAccruedInterest2 - BondAccruedInterest3 - BondAccruedInterest4 - BondCleanPrice - BondDirtyPrice - BondYieldToMaturity - BondYieldToMaturity1 - BondYieldToMaturity2 - BondYieldToMaturity3 - 到期收益率 - 应计利息 - 常用计算天数 ###### BondYieldToMaturity2 - bd_AdjustedDuration - bd_RemainYear - bd_RemainPayNumber - bd_PayPrice - bd_YTM - bd_Interest3 - bd_AdjustedDuration3 - bd_Duration3 - bd_YTM3 - bd_CoupDayBS - BondAccruedInterest - BondAccruedInterest1 - BondAccruedInterest2 - BondAccruedInterest3 - BondAccruedInterest4 - BondCleanPrice - BondDirtyPrice - BondYieldToMaturity - BondYieldToMaturity1 - BondYieldToMaturity2 - BondYieldToMaturity3 - 到期收益率 - 应计利息 - 常用计算天数 ###### BondYieldToMaturity3 算法 其中,Ci:每期现金流; td:债券最后一期计息起始日到到期日天数(含2月29) TY:债券最后一期完整周期天数(非完整周期表示最后一期计息起始日到下一虚拟付息日天数,含2月29)范例 已知某个固定利率周期性付息债券在20171220T全价102.5,频率为1,未来现金流数据如下所示:
计息起始日 付息日 本期付息 本期利率(%) 本期付本金 剩余本金 现金流
20171028T 20181028T 3.5 3.5 0 100 3.5
20181028T 20191028T 3.5 3.5 50 50 53.5
20191028T 20201028T 1.75 3.5 50 0 51.75
求持有到期的到期收益率 ```text Endt:=20171220T; BondCash:=array(("计息起始日":20171028T,"付息日":20181028T,"现金流":3.5), ("计息起始日":20181028T,"付息日":20191028T,"现金流":53.5), ("计息起始日":20191028T,"付息日":20201028T,"现金流":51.75)); t:=BondCash[0,"付息日"]-Endt; TS:=BondCash[0,"付息日"]-BondCash[0,"计息起始日"]; PV:=102.5; f:=1; Return BondYieldToMaturity3(PV,BondCash,f,t,TS); ``` 返回:0.0261321222858299 ###### 到期收益率 ####### 内容 - BondYieldToMaturity_II - MID_BondYieldToMaturity - BondYieldTomaturity4 - ISBondPayRegular - ISBondPayRugularByCash ####### BondYieldToMaturity_II 算法 若是规则的周期性付息,到期收益率(%)-摊余成本法=不处于最后付息周期的定期付息债--到期收益率; 若是不规则的周期性付息,到期收益率(%)-摊余成本法等于使用二分法得到的满足 (现金流1+y债券的付息年限)-摊余成本=0 其中,y的初值为0; 若是待偿期在一年以上的到期一次还本付息债券和零息债券,到期收益率(%)-摊余成本法=待偿期在一年以上的到期一次还本付息债券和零息债券的到期收益率; 若是待偿期在一年及以内的到期一次还本付息债券,零息债和最后一个付息周期的附息债,到期收益率(%)-摊余成本法=最后付息周期的定期付息债、待偿期在一年及以内的到期一次还本付息债券和零息债券的到期收益率范例 ```text //返回“BK010004”在2012年7月3日的到期收益率 Setsysparam(pn_Stock(),"BK010004"); return BondYieldToMaturity_II(100.8268,20120703T,0); //结果:4.55 ``` 债券SH010107在20171228日以102.35买入持有到到期的收益率 ```text Endt:=20171228T; price:=102.35; Setsysparam(pn_Stock(),"SH010107");Return BondYieldToMaturity_II(Endt,price); ``` 债券SH010107在20171228日收盘买入持有到含权处理后的收益率 ```text Endt:=20171228T; price:=102.35; Setsysparam(pn_Stock(),"SH010107"); Return BondYieldToMaturity_II(Endt,price,1); ``` ####### MID_BondYieldToMaturity - BondYieldToMaturity_II - MID_BondYieldToMaturity - BondYieldTomaturity4 - ISBondPayRegular - ISBondPayRugularByCash ####### BondYieldTomaturity4 - BondYieldToMaturity_II - MID_BondYieldToMaturity - BondYieldTomaturity4 - ISBondPayRegular - ISBondPayRugularByCash ####### ISBondPayRegular - BondYieldToMaturity_II - MID_BondYieldToMaturity - BondYieldTomaturity4 - ISBondPayRegular - ISBondPayRugularByCash ####### ISBondPayRugularByCash - BondYieldToMaturity_II - MID_BondYieldToMaturity - BondYieldTomaturity4 - ISBondPayRegular - ISBondPayRugularByCash ###### 应计利息 ####### 内容 - BondCouponExt - BondFutureValue - BondAccruedInterest5 - MID_BondAccruedInterest ####### BondCouponExt 算法 若债券的利率品种为固定利率,结算日票面利率为债券基本信息表中的票面利率; 若债券的利率品种为浮动利率,当付息方式为周期性付息时,结算日票面利率为结算日对应的上一个付息日的基准代码利率加上基本利差;当付息方式为到期一次还本付息时,结算日票面利率为起息日的基准代码利率加上基本利差; 若债券的利率品种为零息或者贴现时,结算日票面利率为(面额-发行价格)\*(1/偿还年限); 若债券的利率品种为递进利率,结算日票面利率为现金流表中的本期利率(%)范例 ```text //返回“BK010004”在2012年7月3日的票面利率 Setsysparam(pn_Stock(),"BK000000"); return BondCouponExt(20120703T); //结果:2.42 ``` ####### BondFutureValue 算法 根据债券.债券派息和利率表中的信息获取本期付息和本期付本金,到期兑付日债券本息和=本期付息+本期付本金范例 ```text //返回’ BK000002’的到期兑付日债券本息和 SetSysParam(PN_Stock(),'BK000002'); return BondFutureValue(); //结果:102.8 ``` ####### BondAccruedInterest5 - BondCouponExt - BondFutureValue - BondAccruedInterest5 - MID_BondAccruedInterest ####### MID_BondAccruedInterest - BondCouponExt - BondFutureValue - BondAccruedInterest5 - MID_BondAccruedInterest ###### 常用计算天数 ####### 内容 - BondDaysNewestPayment ####### BondDaysNewestPayment 范例 ```text Setsysparam(pn_Stock(),"BK010004"); return BondDaysNewestPayment(20120703T,1); //结果:365 ``` ##### 债券敏感性指标 ###### 内容 - bdV_CleanPrice - bdV_DirtyPrice - bdV_YieldToMaturity - BondConvexity - BondConvexity1 - BondConvexity2 - BondBasisPointValue - BondMacaulayDuration - BondMacaulayDuration1 - BondMacaulayDuration2 - BondModifiedConvexity - BondModifiedDuration - 中间函数 - 久期 - 凸性 ###### bdV_CleanPrice 范例: ```text //提取SH019405在20150630的债券净价数据 setsysparam(pn_stock(),"SH019405"); setsysparam(pn_date(),20150630T); return bdV_CleanPrice (0);//数据提供商:中证 ``` ###### bdV_DirtyPrice 范例: ```text //提取SH019405在20150630的债券全价数据 setsysparam(pn_stock(),"SH019405"); setsysparam(pn_date(),20150630T); return bdV_DirtyPrice (0);//数据提供商:中证 ``` ###### bdV_YieldToMaturity 范例: ```text //提取SH019405在20150630的到期收益率数据 setsysparam(pn_stock(),"SH019405"); setsysparam(pn_date(),20150630T); return bdV_YieldToMaturity (0);//数据提供商:中证 ``` ###### BondConvexity 范例债券SH010107在2018/4/8的凸性 ```text Setsysparam(Pn_Stock(),"SH010107"); Setsysparam(pn_bonddataprovider(),2);//数据供应商选择TS计算 Endt:=20180408T; Return BondConvexity(Endt);//持有到期凸性 返回12.23 ``` ###### BondConvexity1 算法 其中:years:结算日期到到期日(或者估值行权日)的年限 y:到期收益率 ###### BondConvexity2 算法 其中:Ci:第i期现金流;Ti:结算日到第i期付息日付息次数(整数周期+1,非整数周期计算比例) ###### BondBasisPointValue 范例债券SH010107在指定日2018/4/8持有10000市值的基点价值-持有到期 ```text Setsysparam(pn_Stock(),"SH010107"); Endt:=20180408T; MV:=10000; Return BondBasisPointValue(Endt,MV); //返回3.05 ``` ###### BondMacaulayDuration 范例获得债券SH010107在2018/4/4的麦考利久期 ```text Setsysparam(pn_Stock(),"SH010107"); Setsysparam(pn_bonddataprovider(),2);//数据供应商选择TS计算 Endt:=20180404T; Return BondMacaulayDuration(Endt);//麦考利久期,返回3.12 ``` ###### BondMacaulayDuration1 处于最后一次付息的定期付息债 到期一次还本付息的债券 零息券 麦克劳林久期即为交割日距到期日的以年为单位的期限(即:剩余期限),即: 其中: d 是债券结算日距到期日的实际天数 ###### BondMacaulayDuration2 算法 其中:Ci:债券第i期现金流 Ti:结算日到第i个付息日的付息次数。(完整周期计为1,非完整周期计算比例) ###### BondModifiedConvexity - BondConvexity - BondConvexity1 - BondConvexity2 - BondBasisPointValue - BondMacaulayDuration - BondMacaulayDuration1 - BondMacaulayDuration2 - BondModifiedConvexity - BondModifiedDuration - 中间函数 - bdV_CleanPrice - bdV_DirtyPrice - bdV_YieldToMaturity - 久期 - 凸性 ###### BondModifiedDuration 算法 非最后付息周期 1 规则付息: 2 不规则付息: 最后付息周期、到期次还本付息或零息: 其中:MDuration:修正久期;Duration:久期;y:到期收益率;f:付息频率范例 债券SH010107在2018/4/8的修正久期 ```text Setsysparam(pn_Stock(),"SH010107"); Setsysparam(pn_bonddataprovider(),2);//数据供应商选择TS计算 Endt:=20180408T; Return BondModifiedDuration(Endt,0);// 返回:3.05 ``` ###### 中间函数 ####### 内容 - BondMacaulayDuration2_sub - BondConvexity2_sub - FinalPayinterestPeriod ####### BondMacaulayDuration2_sub 算法 不处于最后付息周期定期付息债的久期= 范例 ```text //返回“SH010107”的麦克劳林久期(不处于最后付息周期的定期付息债) Setsysparam(pn_Stock(),"SH010107"); return BondMacaulayDuration2_sub(107.1642,4.26,2,0.033429,175,18,100,184); //结果:7.6 ``` ####### BondConvexity2_sub 算法 不处于最后付息周期的久期= 范例 ```text //返回“SH010107”的凸性(不处于最后付息周期的定期付息债) Setsysparam(pn_Stock(),"SH010107"); return BondConvexity2_sub(9.5,0.09,1,0.1,175,8,1,365); //结果:4.37 ``` ####### FinalPayinterestPeriod 算法 (1)从债券基本信息表获得付息方式rtype; (2)如果rtype是周期性付息,从债券.债券派息和利率表中获得付息日大于SettlementDate的记录条数,即结算日至到期日剩余付息次数times,若times小于等于1,则返回1;否则返回0; (2)如果rtype是到期一次还本付息或零息,返回1范例 ```text //返回“BK000000”在2012年7月3日是否是最后付息周期的定期付息债或到期一次还本付息债券或零息债券 Setsysparam(pn_Stock(),"BK000000"); return FinalPayinterestPeriod(20120703T); //结果:1 ``` ###### 久期 ####### 内容 - BondMacaulayDuration3 ####### BondMacaulayDuration3 - BondMacaulayDuration3 ###### 凸性 ####### 内容 - BondConvexity3 ####### BondConvexity3 - BondConvexity3 ##### 基本情况 ###### 内容 - IsBankBond - bd_Maturity - bd_InterestRateType - bd_ListDate - IsCorporationBond - IsBond - bd_FaceValue - IsGovBond - bd_ActualIssueAmount - bd_DatedDate - bd_GoalDate - bd_ExpireDate - bd_PayTimes - bd_CouponType - bd_CouponRate - bd_Shares - IsConvertibleBond - Lido债券数据补充 - bd_IfInDuration ###### IsBankBond 范例 ```text return IsBankBond('SH010107'); //返回0,不是银行间债券 ``` ###### bd_Maturity 算法 函数首先判断当前系统证券是否是债券,如果是债券,从债券.基本信息表中获得该债券的偿还期限(年),否则返回0范例 ```text setsysparam(pn_stock(),'BK1120018'); return bd_Maturity(); //结果:10 ``` ###### bd_InterestRateType 算法 函数首先判断当前系统证券是否是债券,如果是债券,从债券.基本信息表中获得该债券的利率品种,否则返回0范例 ```text setsysparam(pn_stock(),'BK1120018'); return bd_InterestRateType(); //结果:固定利率 ``` ###### bd_ListDate 算法 函数通过判断当前系统证券是否是银行间债券,如果是,则从债券.基本信息表中获得上市日,否则返回对应证券上市的第一个交易日范例 ```text //返回”沪深300”的上市日 SetSysParam(pn_stock(),'SH000300'); //设置当前股票 return bd_ListDate(); //结果:20020104 ``` ###### IsCorporationBond 算法 首先通过判断StockID的股票类型是否是债券,如果是,则通过债券.基本信息表中债券种类判断是否是企业债,如果是,则返回1;否则返回0范例 ```text //判断 97国电债是否是企业债券 return IsCorporationBond('SH129801'); //结果:1 ``` ###### IsBond 算法 函数通过stocktype函数返回的证券类型判断是否是债券,债券的类型值包括7,8,18范例 ```text //返回” SH110003”是否是债券 return IsBond("SH110003"); //结果:1 ``` ###### bd_FaceValue ###### IsGovBond 算法 函数首先通过判断StockID的股票类型是否是债券,如果是,则通过债券.基本信息表中债券种类判断是否是国债,如果是,则返回1;否则返回0范例 ```text //返回” BK000201”是否是国债 return IsGovBond("BK000201"); //结果:0 ``` ###### bd_ActualIssueAmount 算法 函数判断当前证券是否是债券,如果是,则实际发行总额=发行额×债券发行量金额单位;否则返回0范例 ```text //返回”BK000201”的实际发行总额(元) SetSysParam(pn_stock(),'BK000201'); //设置当前证券 return bd_ActualIssueAmount(); //结果:18000000000 ``` ###### bd_DatedDate 算法 函数判断当前证券是否是债券,如果是,通过债券.基本信息表获得对应的计息日,否则返回0范例 ```text //返回”BK000201”的计息日 SetSysParam(pn_stock(),'BK000201'); //设置当前证券 return bd_DatedDate(); //结果:20000404 ``` ###### bd_GoalDate 算法 函数通过判断当前证券的股票类型,返回对应的到期日范例 ```text //返回”BK000201”的到期日 SetSysParam(pn_stock(),'BK000201'); //设置当前证券 return bd_GoalDate (); //结果:20100404 ``` ###### bd_ExpireDate 算法 返回bd_GoalDate (),即到期日。直接返回债券基本信息表中的到期日。范例 ```text //返回”BK000201”的摘牌日 SetSysParam(pn_stock(),'BK000201'); //设置当前证券 return bd_ExpireDate (); //结果:20100404 ``` ###### bd_PayTimes 算法 函数通过当前证券的数据库提供商以及股票类型的判断,返回债券基本信息表中的付息频率。范例 ```text //返回”BK000201”的付息频率 SetSysParam(pn_stock(),'BK000201'); //设置当前证券 return bd_PayTimes(); //结果:1 ``` ###### bd_CouponType 算法 函数通过当前股票的数据库提供商以及股票类型的判断,返回债券基本信息表中的息票类型。该字段已废弃。范例 [code] //返回”BK000201”的息票品种 SetSysParam(pn_stock(),'BK000201'); //设置当前证券 return bd_CouponType(); //结果:附息 [code] ###### bd_CouponRate 算法 函数判断当前证券是否是企业债或国债,如果是,通过债券.基本信息表中获得票面利率(%);否则返回0范例 ```text //返回”BK000201”的票面利率 SetSysParam(pn_stock(),'BK000000'); //设置当前证券 return bd_CouponRate(); //结果:2.8 ``` ###### bd_Shares 算法 债券流通股=实际发行总额(元) /面值(元)范例 ```text //返回”BK000201”的债券流通股 SetSysParam(pn_stock(),'BK000000'); //设置当前股票 return bd_Shares (); //结果:200000000 ``` ###### IsConvertibleBond 算法 首先通过函数stocktype判断是否是债券,如果是,则通过债券.基本信息表中的债券种类判断是否是可转债,如果是,返回1;否则返回0范例 ```text //返回” SZ125002”是否是可转债 return IsConvertibleBond("SZ125002"); //结果:1 ``` ###### Lido债券数据补充 ####### 内容 - BondExtraDataExist - bd_PayTimesOfLido - bd_CouponTypeOfLido - bd_InterestRateTypeOfLido - bd_PayTimesData - bd_InterestRateTypeData - bd_CouponTypeData ####### BondExtraDataExist 范例 ```text //返回” SH000001”是否在数据表中存在 t:=array(('SH000300','沪深300'), ('SH000001','上证指数'), ('SZ000001','平安银行')); return BondExtraDataExist(t,'SH000001') ; //结果:1 ``` ####### bd_PayTimesOfLido 算法 从补充的付息频率数据(补充的数据见函数bd_PayTimesData)中获得数据表t; 判断参数BondId的记录是否存在于t中; 如若存在,返回在t中对应的结果,否则返回1范例 ```text //返回” SZ101917”的付息频率 return bd_PayTimesOfLido('SZ101917'); //结果:2 ``` ####### bd_CouponTypeOfLido 算法 判断参数BondId是否是企业债券或国债,若是,则继续下面的步骤,否则返回空值; 从补充的息票品种数据(补充的数据见函数bd_CouponTypeData)中获得数据表t; 判断参数BondId的记录是否存在于t中; 如若存在,返回在t对应的结果,否则返回“附息”范例 ```text //返回”SZ111017”的息票品种 return bd_CouponTypeOfLido('SZ111017'); //结果:零息 ``` ####### bd_InterestRateTypeOfLido 算法 (1)从补充的附息利率品种数据(补充的数据见函数bd_InterestRateTypeData)中获得数据表t; (2)判断参数BondId的记录是否存在于t中; (3)如若存在,返回在t对应的结果,否则返回“固定利率”范例 ```text //返回” SZ101904”的附息利率品种 return bd_InterestRateTypeOfLido("SZ101904"); //结果:浮动利率 ``` ####### bd_PayTimesData ####### bd_InterestRateTypeData ####### bd_CouponTypeData ###### bd_IfInDuration 范例 ```text return bd_IfInDuration("SZ128144",20230101T); //1 ``` ##### 可转债 ###### 内容 - CB_IfCrossInterestPeriodRedemption - CB_ExpiredRedemptionPriceInterest - CB_IfCrossAmendDateRedemption - CB_IfCrossAmendDatePutback - CB_RevisedTriggerPrice - CB_issueendt - CB_SatisfyConditionalRedemption - CB_IfCrossInterestPeriodPutback - CB_ConditionalPutbackPrice - CB_SatisfyConditionalPutback - CB_StartDayPutback - CB_ConditionalRedemptionPriceInterest - CB_ExpiredRedemptionPrice - CB_AdditionalPutbackPrice - CB_InterestCompensation - CB_BalanceRedemptionPrice - CB_StartDayRedemption - CB_TriggerPriceRedemption - CB_ConditionalPutbackPriceInterest - CB_AdditionalPutbackPriceInterest - CB_SatisfyRevised - CB_ConditionalRedemptionPrice - CB_TriggerPricePutback - CB_StartDayRevised - CB_BalanceRedemptionPriceInterest - CB_SatisfyBalanceRedemption - CB_StartDayConversion - 可转债回售结果 - 可转债赎回结果 - cb_delistedbydate - Cb_getconvertbondidbystockid - CB_Convertible_Parity - CB_GetTransactionByDate - CB_ActualSatisfyRedempeDays - 可转债引入概率蒙特卡洛估值范例 ###### CB_IfCrossInterestPeriodRedemption ###### CB_ExpiredRedemptionPriceInterest 算法 判断“到期赎回价格是否包含当期利息” 是:到期赎回价格 否:到期赎回价格加上最后一期利息 0:面值加上最后一期利息 空: 到期赎回利息补偿比例为0:面值加上最后一期利息 到期赎回利息补偿比例不为0:面值加上最后一期利息再加上补偿利息范例 ```text setsysparam(pn_stock(),'SH113503'); return CB_ExpiredRedemptionPriceInterest(); ``` ###### CB_IfCrossAmendDateRedemption ###### CB_IfCrossAmendDatePutback ###### CB_RevisedTriggerPrice 算法 如果指定日在开始下修日和实际到期日之间,则返回转股价乘以转股价向下修正收盘价限制比例除以100,否则,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_RevisedTriggerPrice(); ``` ###### CB_issueendt 算法 取发行截止日作为发行结束之日 ###### CB_SatisfyConditionalRedemption 算法 如果指定日大于可转债的实际到期日,说明 判断日已经超过到期日,债券已到期,无所谓满足不满足有条件赎回收盘价限制条件,返回0; 如果指定日小于开始赎回日,说明还没到赎回时间,不予判断是否满足有条件赎回收盘价限制条件,返回0; 如果指定日在开始赎回日和实际到期日之间且开始赎回日和指定日之间的交易天数小于有条件赎回收盘价满足天数,必然不满足有条件赎回收盘价限制条件,那么返回0; 如果指定日在开始赎回日和实际到期日之间且开始赎回日和指定日之间的交易天数大于有条件赎回收盘价满足天数,那么只需要算出期间可转债对应股票的收盘价和转股价,然后进行判断是否满足有条件赎回收盘价限制条件即可范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_SatisfyConditionalRedemption(); ``` ###### CB_IfCrossInterestPeriodPutback ###### CB_ConditionalPutbackPrice 算法 1.仅考虑指定日在开始回售日和实际到期日之间日期,如果不在,则返回0; 2.判断“有条件回售价格是否包含当期利息” 是:则返回“有条件回售价格”- 当期利息 否:则返回“有条件回售价格” 0:没有采集到数据,返回0 空:没有该条款,返回nil范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_ConditionalPutbackPrice (); ``` ###### CB_SatisfyConditionalPutback 算法 如果指定日大于可转债的实际到期日,说明 判断日已经超过到期日,债券已到期,无所谓满足不满足有条件回售收盘价限制条件,返回0; 如果指定日小于开始回售日,说明还没到回售时间,不予判断是否满足有条件回售收盘价限制条件,返回0; 如果指定日在开始回售日和实际到期日之间且开始回售日和指定日之间的交易天数小于有条件回售收盘价满足天数,必然不满足有条件回售收盘价限制条件,那么返回0; 如果指定日在开始回售日和实际到期日之间且开始回售日和指定日之间的交易天数大于有条件回售收盘价满足天数,那么只需要算出期间可转债对应股票的收盘价和转股价,然后进行判断是否满足有条件回售收盘价限制条件即可范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_SatisfyConditionalPutback (); ``` ###### CB_StartDayPutback 算法 判断“有条件回售期类型” 存续期:计息日 转股期:开始转股日 0:说明没有采集到数据,返回0 空:表示该可转债无有条件回售条款,返回nil 其他: 有条件回售期参照标准为到期日:到期日往后推OffsetMonth(有条件回售期相对参照标准偏移月份)个月份的第一个交易日 有条件回售期参照标准为发行之日:计息日往后推OffsetMonth(有条件回售期相对参照标准偏移月份)个月的第一个交易日 有条件回售期参照标准为发行结束之日:发行结束之日往后推OffsetMonth(有条件回售期相对参照标准偏移月份)个月的第一个交易日,目前不确定发行结束之日是哪个日期,故暂取计息日范例 ```text setsysparam(pn_stock(),'SH113503'); return CB_StartDayPutback(); ``` ###### CB_ConditionalRedemptionPriceInterest 算法 1.判断指定日是否在开始赎回日和实际到期日之间,如果否返回0,如果是,则转步骤2 2.判断“有条件赎回收盘价限制赎回价格是否包含当期利息” 是:有条件赎回收盘价限制赎回价格 否:有条件赎回收盘价限制赎回价格加上当期利息 0:面值加上当期利息 空: 有条件赎回收盘价限制赎回价格不为0:有条件赎回收盘价限制赎回价格 有条件赎回收盘价限制赎回价格为0:面值加上当期利息 范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_ConditionalRedemptionPriceInterest (); ``` ###### CB_ExpiredRedemptionPrice 算法 调用CB_ExpiredRedemptionPriceInterest()减去最后一期利息范例 ```text setsysparam(pn_stock(),'SH113503'); return CB_ExpiredRedemptionPrice (); ``` ###### CB_AdditionalPutbackPrice 算法 1.仅考虑指定日在计息日和实际到期日之间日期,如果不在,则返回0;(由于附加回售的条件,一般都是在可转债的存续期内,所以考虑计息日即可) 2.判断“附加回售价格是否包含当期利息” 是:则返回“附加回售价格”- 当期利息 否:则返回“附加回售价格加上当期利息” 0:没有附加回售条款,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_AdditionalPutbackPrice (); ``` ###### CB_InterestCompensation 算法 到期赎回补偿利息=可转债持有人持有的到期转债票面金额×到期赎回利息补偿比例×偿还年限-可转债持有人持有的到期转债偿还年限内已支付利息之和 ###### CB_BalanceRedemptionPrice 算法 指定日可转债的有条件赎回余额限制赎回价(不包含当期利息),指定日由系统参数指定。 1.仅考虑指定日在开始赎回日和实际到期日之间日期,如果不在,则返回0; 2.判断“有条件赎回收盘价限制赎回价格是否包含当期利息” 是:则返回“有条件赎回余额限制赎回价格”- 当期利息 否:则返回“有条件赎回余额限制赎回价格” 0:没有采集到数据,返回0 空:没有该条款,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_BalanceRedemptionPrice (); //返回结果:100 ``` ###### CB_StartDayRedemption 算法 判断“有条件赎回期类型” 转股期:开始转股日 0:说明没有采集到数据,返回0 其他: 有条件赎回期参照标准为发行之日:计息日往后推OffsetMonth(有条件赎回期相对参照标准偏移月份)个月份的第一个交易日 有条件赎回期参照标准为发行结束之日:发行结束之日往后推OffsetMonth(有条件赎回期相对参照标准偏移月份)个月份的第一个交易日,目前不确定发行结束之日是哪个日期,故暂取计息日范例 ```text setsysparam(pn_stock(),'SH113503'); return CB_StartDayRedemption(); ``` ###### CB_TriggerPriceRedemption 算法 如果指定日在开始赎回日和实际到期日之间,则返回转股价乘以有条件赎回收盘价限制比例除以100,否则,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_TriggerPriceRedemption (); ``` ###### CB_ConditionalPutbackPriceInterest 算法 1.判断“有条件回售价格是否包含当期利息”是否为空,如果是,返回nil,否则,转步骤2 2.判断开始回售日,如果大于0,转步骤3,如果等于0,转步骤4,如果为nil,转步骤5 3.判断指定日是否在开始回售日和实际到期日之间,如果否,返回0,如果是,转步骤6 4.返回0 5.返回nil 6.判断“有条件回售价格是否包含当期利息” 是:有条件回售价格 否:有条件回售价格加上当期利息 0:面值加上当期利息范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_ConditionalPutbackPriceInterest (); ``` ###### CB_AdditionalPutbackPriceInterest 算法 1.判断“附加回售价格是否包含当期利息”是否为空,如果是,返回nil,否则转步骤2 2.判断指定日是否在计息日和实际到期日之间,如果否,返回0,否则转步骤3 3.判断“附加回售价格是否包含当期利息” 是:附加回售价格 否:附加回售价格加上当期利息 0:面值加上当期利息范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_AdditionalPutbackPriceInterest (); ``` ###### CB_SatisfyRevised 算法 如果指定日大于实际到期日,说明 判断日已经超过到期日,债券已到期,无所谓满足不满足下修条件,返回0; 如果指定日小于开始下修日,说明还没到下修时间,不予判断是否满足下修条件,返回0; 如果指定日在开始下修日和实际到期日之间且开始下修日和指定日之间的交易天数小于转股价向下修正收盘价满足天数,必然不满足下修条件,那么返回0; 如果指定日在开始下修日和实际到期日之间且开始下修日和指定日之间的交易天数大于转股价向下修正收盘价满足天数,那么只需要算出期间可转债对应股票的收盘价和转股价,然后进行判断是否满足下修条件即可范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_SatisfyRevised (); ``` ###### CB_ConditionalRedemptionPrice 算法 1.仅考虑指定日在开始赎回日和实际到期日之间日期,如果不在,则返回0; 2.判断“有条件赎回收盘价限制赎回价格是否包含当期利息” 是:则返回“有条件赎回收盘价限制赎回价格”- 当期利息 否:则返回“有条件赎回收盘价限制赎回价格” 0:没有采集到数据,返回0 空:数据不确定,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_ConditionalRedemptionPrice (); ``` ###### CB_TriggerPricePutback 算法 如果指定日在开始回售日和实际到期日之间,则返回转股价乘以有条件回售收盘价限制比例除以100,否则,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_TriggerPricePutback (); ``` ###### CB_StartDayRevised 算法 判断“转股价向下修正期类型” 存续期:计息日 转股期:开始转股日, 0:说明没有采集到数据,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); return CB_StartDayRevised (); ``` ###### CB_BalanceRedemptionPriceInterest 算法 1.判断“有条件赎回余额限制赎回价格是否包含当期利息”是否为空,如果是,返回nil,否则转步骤2 2.判断指定日是否在开始赎回日和实际到期日之间,如果为否的话,返回0,否则转步骤3 3.判断“有条件赎回余额限制赎回价格是否包含当期利息” 是:有条件赎回余额限制赎回价格 否:有条件赎回余额限制赎回价格加上当期利息 0:面值加上当期利息范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_BalanceRedemptionPriceInterest (); //返回结果:100.18 ``` ###### CB_SatisfyBalanceRedemption 算法 如果指定日大于可转债的实际到期日,说明 判断日已经超过到期日,债券已到期,无所谓满足不满足有条件赎回余额限制条件,返回0; 如果指定日小于开始赎回日,说明还没到赎回时间,不予判断是否满足有条件赎回余额限制条件,返回0; 如果指定日在开始赎回日和实际到期日之间且未转股余额小于有条件赎回余额限制,那么返回1;范例 ```text setsysparam(pn_stock(),'SH113503'); setsysparam(pn_date(),20190403T); return CB_SatisfyBalanceRedemption (); ``` ###### CB_StartDayConversion 算法 判断“转股开始日参照标准” 发行之日:取计息日,按照“转股开始日相对参照标准偏移月份”进行推移 发行结束之日:目前不确定发行结束之日是哪个日期,故暂取计息日,按照“转股开始日相对参照标准偏移月份” 进行推移 0:说明没有采集到数据,返回0范例 ```text setsysparam(pn_stock(),'SH113503'); return CB_StartDayConversion(); ``` ###### 可转债回售结果 ####### 内容 - 中间函数 - 区间 ####### 中间函数 ######## 内容 - bondcbsbvalueqj ######## bondcbsbvalueqj ####### 区间 ######## 内容 - bondcbsbvolumeqj ######## bondcbsbvolumeqj ###### 可转债赎回结果 ####### 内容 - 中间函数 - bondcbrvolume - 区间 ####### 中间函数 ######## 内容 - bondcbrvalueqj - bondcbrvalue ######## bondcbrvalueqj ######## bondcbrvalue ####### bondcbrvolume ####### 区间 ######## 内容 - bondcbrvolumeqj ######## bondcbrvolumeqj ###### cb_delistedbydate ###### Cb_getconvertbondidbystockid 范例 ```text //提取SH603901在2021/5/27的转债代码,指定日在市场 return CB_GetConvertBondIDByStockID("SH603901",20210527T); //array("SH113559") ``` ###### CB_Convertible_Parity 范例 ```text Setsysparam(Pn_Stock(),"SZ123002"); Setsysparam(pn_date(),20230706T); return CB_Convertible_Parity();//8.6996416 ``` ###### CB_GetTransactionByDate 范例 ```text return CB_GetTransactionByDate(20231201T); ``` 结果: ###### CB_ActualSatisfyRedempeDays 范例 ```text Setsysparam(Pn_Stock(),"SZ123241"); Setsysparam(Pn_date(),20250124T); return CB_ActualSatisfyRedempeDays();//10 ``` ###### 可转债引入概率蒙特卡洛估值范例 ####### 内容 - TSFL_CB_MonteCarlo_Ext01 ####### TSFL_CB_MonteCarlo_Ext01 范例 ```text BondID:="SZ123207"; Endt:=20250924T; Return TSFL_CB_MonteCarlo_Ext01(BondID,Endt); ``` //结果: 其中,价值分布为 ##### 债券派息和利率 ###### 内容 - BondLastPeriodInterest - BondSumofInterest - BondCashflow - BondCashflowHistroy ###### BondLastPeriodInterest 算法 1.获得InfoArray(503)(债券.债券派息和利率) 2.取离当前时间最近的可转债的最后一期利息 ###### BondSumofInterest 算法 1.获得InfoArray(503)(债券.债券派息和利率) 2.取离当前时间最近的可转债的利息之和 ###### BondCashflow 范例 债券SH010107在20170731T的现金流 ```text Endt:=20170731T; Setsysparam(pn_Stock(),”SH010107”); Return BondCashFlow(Endt); ``` 债券SH010107在20170731T未来不含权现金流 ```text Endt:=20170731T; Setsysparam(pn_Stock(),”SH010107”); Return BondCashFlow(Endt,inf); ``` ###### BondCashflowHistroy 范例 ```text stk := "BK1282337"; begt := 20190411T; endt := 20191231T; sp_s(pn_stock(),stk); return BondCashflowHistroy(BegT,EndT,Option); ``` 返回: ##### 债券估值 ###### 内容 - bdV_AccruedInterest - bdV_ModifiedDuration - bdV_Convexity ###### bdV_AccruedInterest 算法 (1)如果dbtype取值为0或1,返回当前系统证券和时间对应的提供商提供的应计利息,如果没有取到,出现异常,返回0; (2)如果dbtype取值为2,返回当前系统股票以现金流算法得到的在系统时间的日终应计利息,现金流算法见函数BondAccruedInterest说明范例 ```text //返回“SH010107”在2018年5月27日,数据供应商为中证的债券估值-应计利息 Setsysparam(pn_Stock(),"SH010107"); SetSysParam(PN_Date(),20180527T); return bdV_AccruedInterest(0); //结果:1.3422 ``` ###### bdV_ModifiedDuration 算法 (1)如果dbtype取值为0或1,返回当前系统证券和时间对应的的提供商提供的修正久期数据,如果没有该券或该日的数据,则返回0; (2)如果dbtype取值为2,返回天软计算的当前系统债券在当前时间的修正久期,算法见BondModifiedDuration函数说明范例 ```text //返回“SH010107”在2018年5月27日,数据供应商为中证的债券估值-修正久期 Setsysparam(pn_Stock(),"SH010107"); SetSysParam(PN_Date(),20180527T); return bdV_ModifiedDuration(0); //结果:2.9245 ``` ###### bdV_Convexity 算法 (1)如果dbtype取值为0或1,返回当前系统证券和时间对应的提供商提供的凸性数据,如果没有该券或该日的数据,则返回0; (2)如果dbtype取值为2,返回天软计算的当前系统债券在当前时间的凸性,算法见BondConvexity函数说明范例 ```text //返回“SH010107”在2018年5月27日的债券估值-凸性 Setsysparam(pn_Stock(),"SH010107"); SetSysParam(PN_Date(),20180527T); ReturnbdV_Convexity(0); //结果:5.1931 ``` ##### 债券收益率曲线 ###### 内容 - BondTermStructureOfYieldToMaturity - BondTermStructureOfSpotInterestRate_Curve - BondTermStructureOfSpotInterestRate - BondTermStructureOfForwardRate - BondTermStructureOfYieldToMaturity_Curve - BondTermStructureOfForwardRate_Curve - BondTermStructureOfYieldToMaturity_EndT - BondTermStructureOfSpotInterestRate_EndT - BondTermStructureOfForwardRate_EndT - BondTermStructure - 中间函数 ###### BondTermStructureOfYieldToMaturity 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的10年期到期收益率 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfYieldToMaturity(20170301T,10); //返回:3.33 ``` ###### BondTermStructureOfSpotInterestRate_Curve 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01到2017-3-31的10年期即期利率 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfSpotInterestRate_Curve(20170301T,20170331T,10); //返回: ``` ###### BondTermStructureOfSpotInterestRate 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的10年期即期利率 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfSpotInterestRate(20170301T,10); //返回:3.36 ``` ###### BondTermStructureOfForwardRate 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的10年期即期利率 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfForwardRate(20170301T,10); //返回:4.37 ``` ###### BondTermStructureOfYieldToMaturity_Curve 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01到2017-3-31的10年期到期收益率 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfYieldToMaturity_Curve(20170301T,20170331T,10); //返回: ``` ###### BondTermStructureOfForwardRate_Curve 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01到2017-3-31的10年期远期利率 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfForwardRate_Curve(20170301T,20170331T,10); //返回: ``` ###### BondTermStructureOfYieldToMaturity_EndT 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的到期收益率的期限结构 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfYieldToMaturity_EndT(20170301T); //返回: ``` ###### BondTermStructureOfSpotInterestRate_EndT 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的即期利率的期限结构 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfSpotInterestRate_EndT(20170301T); //返回: ``` ###### BondTermStructureOfForwardRate_EndT 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的远期利率的期限结构 setsysparam(pn_stock(),'BTS000033'); return BondTermStructureOfForwardRate_EndT(20170301T); //返回: ``` ###### BondTermStructure 范例 ```text 获取BTS000033(中证指数国债收益率曲线)在2017-03-01的期限结构 setsysparam(pn_stock(),'BTS000033'); return BondTermStructure(20170301T); //返回: ``` ###### 中间函数 ####### 内容 - GetBondTermStructureByRemainDuration - GetBondTermStructure - GetBondSYLQKByTypeAndYears ####### GetBondTermStructureByRemainDuration 算法 (1)获得包含"即期利率(%)","到期收益率(%)","远期利率(%)"三个值的数组TypeArr,若以Type*-1为行标对应的在TypeArr中的值为真,TypeStr等于以Type*-1为行标对应的在TypeArr中的值,若为假,TypeStr等于"到期收益率(%)"; (2)根据MD函数和Type\_的取值获得指定日债券收益率曲线数据T,并按照’期限’字段对其进行正序排序; (3)获得数组T的长度TL; (4)若参数RemainDuration小于或等于数组T中’期限’字段的第一个值,返回数组T中TypeStr字段的第一个值;若参数RemainDuration大于等于以TL-1为行标,’期限’为列标在数组T的值,返回以TL-1为行标,TypeStr为列标在数组T中的值;否则返回以所有行、列标为’期限’在数组T中的值为自变量,所有行、列标为TypeStr在数组T中的值为因变量,RemainDuration为插值点,运用分段线性插值所得的结果 ####### GetBondTermStructure 算法 根据MD函数获得ID为"债券期限结构"的数组T,若有异常,返回0; 根据Type\_的取值从数组T中获得相应的结果,返回1; ####### GetBondSYLQKByTypeAndYears 范例 ```text return GetBondSYLQKByTypeAndYears(20150101T,20181231T,10,'BTS000033'); ``` ##### 债券组合 ###### 内容 - pf_BasisPointValue - pf_BondConvexity - pf_BondModifiedDuration - pf_BondRemainDuration - pf_BondYieldToMaturity ###### pf_BasisPointValue ###### pf_BondConvexity ###### pf_BondModifiedDuration ###### pf_BondRemainDuration ###### pf_BondYieldToMaturity ##### 可转债转股及余额 ###### 内容 - 指定日 - 区间 ###### 指定日 ####### 内容 - bondcbtransferprice - bondcbnottransfernum - bondcbredeemnum - BondCBMarketSizeEndT - BondCBTransferNum - BondCBBackTransferNum - 中间函数 ####### bondcbtransferprice ####### bondcbnottransfernum ####### bondcbredeemnum ####### BondCBMarketSizeEndT 算法市值规模=未转股数量*收盘,若在转股日前,取发行数量*收盘价。范例 ```text // "SZ123036"在2020-8-14的市值规模 SetSysParam(pn_stock(),"SZ123036"); return BondCBMarketSizeEndT(20200814T); //结果:1409919438.2 ``` ####### BondCBTransferNum 范例 ```text // "SZ123036"在2020-8-14的转股数量 SetSysParam(pn_stock(),"SZ123036"); return BondCBTransferNum(20200814T); //结果:205 ``` ####### BondCBBackTransferNum 范例 ```text // "SZ123036"在2020-8-14的回售数量 SetSysParam(pn_stock(),"SZ123036"); return BondCBBackTransferNum(20200814T); //结果:0 ``` ####### 中间函数 ######## 内容 - BondCBTransferValue ######## BondCBTransferValue 范例 ```text SetSysParam(pn_stock(),"SZ123036"); return BondCBTransferValue(20201208T,'转股价'); //结果:38.97 ``` ###### 区间 ####### 内容 - BondcbbacktransfernumQJ - BondcbredeemnumQJ - BondCBTransferNumQJ - 中间函数 ####### BondcbbacktransfernumQJ ####### BondcbredeemnumQJ ####### BondCBTransferNumQJ 范例 ```text // "SZ123036"在2020-7-14至2020-8-14区间转股数量 SetSysParam(pn_stock(),"SZ123036"); return BondCBTransferNumQJ(20200714T,20200814T); //结果:2694 ``` ####### 中间函数 ######## 内容 - BondCBNumQJ ######## BondCBNumQJ 范例 ```text SetSysParam(pn_stock(),"SZ123036"); return BondCBNumQJ(20201201T,20201208T,'转股数量'); //结果:7154449 ``` ##### 债券指数估值 ###### 内容 - BondIVCloseDuration - BondIVConvexity - BondIVDuration - BondIVMaturityYield - BondIVQK - BondIVQK2 - BondIVRemainDuration ###### BondIVCloseDuration 范例 ```text // "CSIH01006"中证国债在20200924的收盘价久期。 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVCloseDuration();//结果:0 ``` ###### BondIVConvexity 范例 ```text // "CSIH01006"中证国债在20200924的凸性。 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVConvexity(); //结果:54.3261 ``` ###### BondIVDuration 范例 ```text // "CSIH01006"中证国债在20200924的久期。 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVDuration(); //结果:6.9821 ``` ###### BondIVMaturityYield 范例 ```text // "CSIH01006"中证国债在20200924的到期收益率。 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVMaturityYield(); //结果:3.0545 ``` ###### BondIVQK 范例 ```text // "CSIH01006"中证国债在20200914至20200924的区间债券估值数据 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVQK(20200914T,20200924T); ``` 结果: ###### BondIVQK2 范例 ```text // "CSIH01006"中证国债在20200924的5日债券估值数据 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVQK2(5); ``` 结果: ###### BondIVRemainDuration 范例 ```text // "CSIH01006"中证国债在20200924的剩余期限。 SetSysParam(pn_stock(),"CSIH01006"); SetSysParam(PN_Date(),20200924T); return BondIVRemainDuration(); //结果:0 ``` ##### 中间函数 ###### 内容 - bdV_DataProvider - BondRemainPayNumber - BondCoupDayBS - BondDuration - BondCoupDaysNC - NsharesOfConvertibleBond - bondProvider - NSharesOfCorporationBond - pn_bonddataprovider - bdV_GetFactorValue - bdV_InternalCode - NSharesOfGovBond - 常用计算天数 - 其他 - BondDaysbetween - Pn_BondStandardDate ###### bdV_DataProvider ###### BondRemainPayNumber 算法 若交易日小于到期日,获得交易日至到期日前一天的相隔天数y,债券剩余的付息次数为y/(365/F)的取整值加1,否则债券剩余的付息次数=0范例 ```text //返回'BK000002'在2003年4月18日剩余的付息次数 SetSysParam(PN_Stock(),'BK000002'); //设置股票代码 GoalDate:=IntToDate(base(502026)); //到期日 EndT:=20030418T; //交易日 f:=base(502021); //付息频率 return BondRemainPayNumber(GoalDate,EndT,f); //结果:8 ``` ###### BondCoupDayBS 算法 把EndT转化为整数d,GoalDate转化为整数GoalDate; 若F=1,利用d的年份信息,GoalDate的月份和日信息组成新的日期d1,当d1>d时,当前付息期内截止到交易日的天数=365-d与d1相隔的天数;否则当前付息期内截止到交易日的天数=d与d1相隔的天数+1; 若F≠1,获取d的年份信息y,GoalDate的月份信息m和天信息dof,继续以下步骤; 当m>6时,m10 = m – 6,m20 = m;否则,m10 = m,m20 = m + 6; 利用y,m10,dOf组成日期d1,y,m20,dOf组成日期d2,若d1≤d≤d2,当前付息期内截止到交易日的天数=d与d1之间相隔的天数+1;若d< d1,当前付息期内截止到交易日的天数=365-d与d2相隔的天数;若d>d2,当前付息期内截止到交易日的天数= d2与d之间相隔的天数+1范例 ```text //返回'BK000002'在2003年3月18日当前付息期内截止到交易日的天数 SetSysParam(PN_Stock(),'BK000002'); //设置股票代码 GoalDate:=IntToDate(base(502026)); //到期日 EndT:=20030318T; //交易日 f:=base(502021); //付息频率 return BondCoupDayBS(GoalDate,EndT,f); //结果:334 ``` ###### BondDuration 算法 (1)获得y1=到期收益率/年y/付息频率f,c1=息票率/年C/付息频率f; (2)债券的久期V=(1+y1)/y1-((1+y1)+T*(c1-y1))/(c1*((1+ y1)^T-1)+y1);范例 ```text return BondDuration(0,0.0799999982118607,40,0.100000001490116,2); //结果:19.74 ``` ###### BondCoupDaysNC 算法 (1)把EndT转化为整数d,GoalDate转化为整数GoalDate; (2)若F=1,利用d的年份信息,GoalDate的月份和日信息组成新的日期d1,当d1>d时,交易日距下一次付息日的实际天数= d与d1相隔的天数+1;否则交易日距下一次付息日的实际天数=365-d与d1相隔的天数; (3)若F≠1,获取d的年份信息y,GoalDate的月份信息m和天信息dof,继续以下步骤; (4)当m>6时,m10 = m – 6,m20 = m;否则,m10 = m,m20 = m + 6; (5)利用y,m10,dOf组成日期d1,y,m20,dOf组成日期d2,若d1≤d≤d2,交易日距下一次付息日的实际天数=d与d2之间相隔的天数+1;若d< d1,交易日距下一次付息日的实际天数=d与d1相隔的天数;若d>d2,交易日距下一次付息日的实际天数=365-( d2与d之间相隔的天数+ d1与d2之间相隔的天数)范例 ```text //返回'BK000002'在2003年3月18日距下一次付息日的实际天数 SetSysParam(PN_Stock(),'BK000002'); //设置股票代码 GoalDate:=IntToDate(base(502026)); //到期日 EndT:=20030318T; //交易日 f:=base(502021); //付息频率 return BondCoupDaysNC(GoalDate,EndT,f); //结果:32 ``` ###### NsharesOfConvertibleBond 算法 可转债流通股本=实际发行总额(元)/面值(元)范例 ```text //返回'BK000002'在2003年3月18日的可转债流通股本 SetSysParam(PN_Stock(),'BK000002'); //设置股票代码 EndT:=20030318T; //截止日 return NSharesOfConvertibleBond(91,EndT); //结果:280000000 ``` ###### bondProvider ###### NSharesOfCorporationBond 算法 企业债券流通股本=实际发行总额(元)/面值(元)范例 ```text //返回'BK000000'在2012年3月18日的企业债券流通股本 SetSysParam(PN_Stock(),'BK000002'); //设置股票代码 EndT:=20120318T; //截止日 return NSharesOfCorporationBond (90,EndT); //结果:280000000 ``` ###### pn_bonddataprovider ###### bdV_GetFactorValue 算法 根据参数dbtype的值对当前股票的代码进行一定的变换,运用MD函数选取不同的ID获得所需要的值 ###### bdV_InternalCode 算法 若dbtype=0,债券内部代码=id.zz;若dbtype=1,债券内部代码=id.zd;否则债券内部代码=id范例 ```text //返回SH124063'的债券内部代码 return bdV_InternalCode(0,'SH124063'); //结果:SH124063.zz ``` ###### NSharesOfGovBond 算法 国债流通股本=实际发行总额(元)/面值(元)范例 ```text //返回'BK000000'在2012年3月18日的国债流通股本 SetSysParam(PN_Stock(),'BK000000'); //设置股票代码 return NSharesOfGovBond(0,0); //结果:200000000 ``` ###### 常用计算天数 ####### 内容 - BondBeginDateNewestPayment - BondDaysBetweenDatedandMaturityDate - BondDaysBetweenDatedandSettlement - BondDaysBetweenPreviousCouponandNextCoupon - BondDaysBetweenPreviousCouponandSettlement - BondDaysBetweenSettlementandMaturity - BondDaysBetweenSettlementandNextCoupon - BondEndDateNewestPayment - BondNextCouponDate - BondNumbersBetweenSettlementandMaturity - BondPreviousCouponDate - BondYearsBetweenDatedandMaturity - BondYearsBetweenDatedandSettlement - BondYearsBetweenSettlementandMaturity - BondRemainDuration ####### BondBeginDateNewestPayment ####### BondDaysBetweenDatedandMaturityDate ####### BondDaysBetweenDatedandSettlement ####### BondDaysBetweenPreviousCouponandNextCoupon ####### BondDaysBetweenPreviousCouponandSettlement ####### BondDaysBetweenSettlementandMaturity ####### BondDaysBetweenSettlementandNextCoupon ####### BondEndDateNewestPayment ####### BondNextCouponDate ####### BondNumbersBetweenSettlementandMaturity ####### BondPreviousCouponDate ####### BondYearsBetweenDatedandMaturity ####### BondYearsBetweenDatedandSettlement ####### BondYearsBetweenSettlementandMaturity ####### BondRemainDuration ###### 其他 ####### 内容 - BondNumbersBetweenSettlementandFutureDay - BondBeginOftheYear_Calculator - BondEndOftheYear_Calculator - BondNextCouponDate_Calculator - BondNumbersBetween - BondPreviousCouponDate_Calculator - BondYearsBetween - TEncodeDate - TEncodeDate2 ####### BondNumbersBetweenSettlementandFutureDay ####### BondBeginOftheYear_Calculator ####### BondEndOftheYear_Calculator ####### BondNextCouponDate_Calculator ####### BondNumbersBetween ####### BondPreviousCouponDate_Calculator ####### BondYearsBetween ####### TEncodeDate 算法 根据参数组合成日期,若出现异常情况,返回以参数y、m和1组成的日期或合成日期的当月的最后一天的日期范例 ```text return TEncodeDate(2012,2,13);、 //结果:40952 //显示为日期时间:2012-02-13 ``` ####### TEncodeDate2 算法 获得参数day的年份和月份信息,根据获得信息与参数d重新组合成新的日期范例 ```text return TEncodeDate2(20120317T,2); //结果:40970 //显示为日期时间:2012-03-02 ``` ###### BondDaysbetween - bdV_DataProvider - BondRemainPayNumber - BondCoupDayBS - BondDuration - BondCoupDaysNC - NsharesOfConvertibleBond - bondProvider - NSharesOfCorporationBond - pn_bonddataprovider - bdV_GetFactorValue - bdV_InternalCode - NSharesOfGovBond - 常用计算天数 - 其他 - BondDaysbetween - Pn_BondStandardDate ###### Pn_BondStandardDate 范例 ```text return Pn_BondStandardDate(); //结果:BondStandardDate ``` ##### 标准券折算率 ###### 内容 - BondSBCRCoverRatioEndT - BondSBCRIsFinacingCover - 中间函数 ###### BondSBCRCoverRatioEndT 范例 ```text SetSysParam(pn_stock(),"SH120303"); return BondSBCRCoverRatioEndT(20201201T); //结果:0.93 ``` ###### BondSBCRIsFinacingCover 范例 ```text SetSysParam(pn_stock(),"SH120303"); return BondSBCRIsFinacingCover(20201201T); //结果:1 ``` ###### 中间函数 ####### 内容 - BondSBCRCoverRatioValue ####### BondSBCRCoverRatioValue - BondSBCRCoverRatioValue ##### 基本信息 ###### 内容 - BondConvertibleBonds2 - BondInterBankIds2 - BondRatingByEndt - BondRatingByEndtByInstitution ###### BondConvertibleBonds2 范例 ```text // 所有的可转债 return BondConvertibleBonds2(); ``` ###### BondInterBankIds2 范例 ```text // 所有的银行间债券(包含退市) return BondInterBankIds2(); ``` ###### BondRatingByEndt 范例 ```text //SH110073在20240819的债券评级 setsysparam(pn_stock(),'SH110073'); return BondRatingByEndt(20240819T); //返回:"AAA" ``` ###### BondRatingByEndtByInstitution 范例 ```text //SH110073在20240819联合评级的债券评级 setsysparam(pn_stock(),'SH110073'); return BondRatingByEndtByInstitution(20240819T,"联合评级"); //返回:"AAA" ``` ##### 行情单位变更日期 ###### 内容 - SZBondTradeUnitconversiondate1 ###### SZBondTradeUnitconversiondate1 - SZBondTradeUnitconversiondate1 ##### 债券回购 ###### 内容 - GetHgInterestDay ###### GetHgInterestDay 范例 ```text return GetHgInterestDay('SZ131801',20190429T); ``` 结果: