createYieldCurveEngine

语法

createYieldCurveEngine(name, dummyTable, assetType, fitMethod, keyColumn, modelOutput, frequency, [timeColumn], [predictDummyTable],[predictInputColumn], [predictKeyColumn],[predictTimeColumn], [predictOutput], [extraMetrics],[fitAfterPredict=false])

详情

本函数用于计算债券的预测曲线和预测值。

其内部综合了 DolphinDB 中用于曲线拟合和优化求解的诸多函数,以此为用户提供方便的、可适用于多种业务场景、交易品种、数据频率的现代金融工具,进而帮助用户预期市场未来利率走势、进行更有效的投资和风险管理。

注意:

  • 可在该引擎中直接进行预测,也可结合函数 appendForPrediction 配套使用。

  • 目前仅支持拟合债券收益率曲线,后续将逐步支持其它类型的收益率曲线和衍生品曲线。

参数

name 字符串标量,表示引擎的名称。该参数是引擎在一个数据节点上的唯一标识,可包含字母,数字和下划线,但必须以字母开头。

dummyTable 表,用于指定输入数据的表结构。如:

字段

类型

说明

symbol SYMBOL 合约名
sendingTime TIMESTAMP 行情时间
askDirtyprice1 DECIMAL 卖一全价
bidDirtyprice1 DECIMAL 买一全价
midDirtyprice1 DECIMAL 中间价全价
askyield1 DECIMAL 卖一收益率
bidyield1 DECIMAL 买一收益率
midyield1 DECIMAL 中间价收益率
timetoMaturity DOUBLE 剩余到期期限
assetType INT

资产类型,主要用于和曲线类型进行匹配:

0:国债

1:国开

2:农发

dataSource INT

数据源:

0:X-Bond

1:ESP

2:QB

3:SH

4:SZ

clearRate STR

清算速度:

"T0”

“T1”

“T2”

assetType 整型向量,表示资产类型。输入示例:[0,1,2]。注意:不可包含重复值。

fitMethod 元代码元组,用于指定不同资产对应的拟合算法和对应参数。该参数的大小须和参数 assetType 保持一致。如:
[<piecewiseLinFit(timetoMaturity, midyield1, 10)>,<nss(timetoMaturity,bidyield1,"ns")>,<cubicSpline(timetoMaturity,askyield1,"not-a-knot")>]

keyColumn 字符串向量,表示引擎拟合模型的分组标准。注意:至少传入一列。其中,第一列为整型的类型列,用于映射算法;其他列为分组列。

modelOutput 模型输出表,输出列顺序应遵守下述顺序:

  1. 时间列,表示模型更新时间。

  2. 指定输出列,与 keyColumn 保持一致。

  3. model,BLOB 类型。引擎会通过 toStdJson 函数将模型转成 JSON 格式的字符串进行输出。

frequency 表示模型的更新频率,其使用分三种情况:

  • 按照数据条数,传入 INT 类型,即每组未参与模型拟合的数据条数累计到设定值后更新模型。

  • 按照数据时间,传入 DURATION 类型,根据每组未参与模型拟合的数据时间更新模型。注意:需要设置参数 timeColumn。每组分开判断,起始时间按每组第一条数据规整,每隔 frequency 时间输出一次拟合模型;如果窗口内没收到数据则不输出。示例:假设收到的数据时间如下:09:30:00.100, 09:32:00.100, 09:35:00.100, 09:45:00.100, 09:50:00.100,同时 frequency = 5 min, 则 model 输出的时间为 09:35:00.000, 09:40:00.000, 09:50:00.000。右边界为开,即 09:35:00.000 输出的 model 的拟合数据不包括 09:35:00.000。

  • 按照系统时间,传入 DURATION 类型。注意:此时不能设置参数 timeColumn,将按照固定时间更新每组的模型。起始时间按第一条数据进到引擎的时间规整;如果窗口内没收到数据则不输出。

timeColumn 可选参数,时间类型向量,用于指定输入表中的时间列,进而更新频率。须与参数 frequency 搭配使用。

predictDummyTable 可选参数,表示预测的输入数据表结构。默认和 dummyTable 一致。

predictInputColumn 可选参数,字符串标量,表示预测数据的输入列名。

predictKeyColumn 可选参数,表示用于查找模型的分组列,默认和 keyColumn 一致。

predictTimeColumn 可选参数,表示预测数据的时间列,默认和 timeColumn 一致。

predictOutput 可选参数,表示预测结果输出表。输出列遵循如下顺序:

  1. predictTimeColumn 表示时间列,如果没有时间列则输出系统时间。

  2. predictKeyColumn 表示查找模型的分组列。

  3. predictInputColumn 表示预测数据的输入列名。

  4. predict result 表示预测结果。

  5. extraMetrics 表示额外指定输出的算子。

注意: 如果不设置参数 predictOutput,则引擎只用于拟合模型。

extraMetrics 可选参数,除预测结果外额外输出的算子。可以是 predictDummyTable 中的列,也可以是在此基础上的一些简单计算。

fitAfterPredict 可选参数,布尔标量。

  • 如果为 true,表示 predictDummyTabledummyTable 一样,引擎收到数据后先用之前的模型预测输出,再用收到的数据继续拟合模型。

  • 如果为 false,表示只进行拟合运算,不进行预测操作。该种为默认情况。

例子

指定参数,创建一个曲线拟合引擎,最后进行拟合。
//指定传入表结构、资产类型、拟合算法
dummyTable = table(1:0, `symbol`sendingtime`askDirtyPrice1`bidDirtyPrice1`midDirtyPirce1`askyield1`bidyield1`midyield1`timetoMaturity`assetType`datasource`clearRate, 
                        [SYMBOL, TIMESTAMP,DECIMAL32(3),DECIMAL32(3),DECIMAL32(3),DECIMAL32(3),DECIMAL32(3),DECIMAL32(3),DOUBLE,INT,INT,STRING])
assetType=[0,1,2]
fitMethod=[<piecewiseLinFit(timetoMaturity, midyield1, 10)>,
            <nss(timetoMaturity,bidyield1,"ns")>,
            <piecewiseLinFit(timetoMaturity, askyield1, 5)>]

//指定模型输出表和预测结果输出表
modelOutput=table(1:0, `time`assetType`dataSource`clearRate`model,
                        [TIMESTAMP,INT,INT,SYMBOL,BLOB])
predictOutput=table(1:0, `time`assetType`dataSource`clearRate`x`y,[TIMESTAMP,INT,INT,SYMBOL,DOUBLE,DOUBLE])

//基于上述参数创建曲线拟合引擎
engine = createYieldCurveEngine(name="test", dummyTable=dummyTable,assetType=assetType,fitMethod=fitMethod,
                                keyColumn=`assetType`dataSource`clearRate, modelOutput=modelOutput,
                                frequency=10,predictInputColumn=`timetoMaturity,predictTimeColumn=`sendingtime, 
                                predictOutput=predictOutput,fitAfterPredict=true)
                                
//创建数据,进行拟合
data = table(take(`a`b`c, 30) as  symbol, take(now(), 30) as time, decimal32(rand(10.0, 30),3) as p1,  decimal32(rand(10.0, 30),3) as p2,  decimal32(rand(10.0, 30),3) as p3, decimal32(rand(10.0, 30),3) as p4,  decimal32(rand(10.0, 30),3) as p5,  decimal32(rand(10.0, 30),3) as p6, (rand(10.0, 30)+10).sort() as timetoMaturity, take(0 1 2, 30) as assetType, take([1], 30) as datasource, take("1", 30) as clearRate)
engine.append!(data)

相关函数 appendForPrediction