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]。注意:不可包含重复值。
[<piecewiseLinFit(timetoMaturity, midyield1, 10)>,<nss(timetoMaturity,bidyield1,"ns")>,<cubicSpline(timetoMaturity,askyield1,"not-a-knot")>]
keyColumn 字符串向量,表示引擎拟合模型的分组标准。注意:至少传入一列。其中,第一列为整型的类型列,用于映射算法;其他列为分组列。
modelOutput 模型输出表,输出列顺序应遵守下述顺序:
-
时间列,表示模型更新时间。
-
指定输出列,与 keyColumn 保持一致。
-
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 可选参数,表示预测结果输出表。输出列遵循如下顺序:
-
predictTimeColumn 表示时间列,如果没有时间列则输出系统时间。
-
predictKeyColumn 表示查找模型的分组列。
-
predictInputColumn 表示预测数据的输入列名。
-
predict result 表示预测结果。
-
extraMetrics 表示额外指定输出的算子。
注意: 如果不设置参数 predictOutput,则引擎只用于拟合模型。
extraMetrics 可选参数,除预测结果外额外输出的算子。可以是 predictDummyTable 中的列,也可以是在此基础上的一些简单计算。
fitAfterPredict 可选参数,布尔标量。
-
如果为 true,表示 predictDummyTable 和 dummyTable 一样,引擎收到数据后先用之前的模型预测输出,再用收到的数据继续拟合模型。
-
如果为 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