mktRiskFactorReturns
首发版本:3.00.6.4
语法
mktRiskFactorReturns(mktDataTable, asOf, [settings],
[baseMktData])
详情
将按日期对齐的历史市场数据表转换为统一的风险因子收益矩阵,为后续历史模拟引擎(historicalRiskEngine)和 EWMA 模拟引擎(ewmaRiskEngine)提供标准化收益率输入。
当前支持以下 3 种市场数据类型展开为风险因子:
-
Price(股票/资产价格):计算连续对数收益率。
-
FxSpotRate(外汇即期汇率):计算连续对数收益率。
-
IrYieldCurve(利率曲线):按曲线包含的所有 tenor 节点展开,转换为对应期限零息债券价格后计算对数收益率。
参数
mktDataTable 历史市场数据表。当前支持 Price、FxSpotRate 和 IrYieldCurve 类型。第一列必须为日期列,列名为 dates,类型为 DATE;其余各列为不同资产对应的 MKTDATA 实例列。表中各列必须按日期对齐,日期需严格递增,不允许缺失值;数据至少需要两行,以便计算相邻日期之间的收益率。
asOf DATE 标量。风险分析的基准日期。
settings 可选参数,字典(STRING → ANY)。当前为预留参数,暂未启用具体配置项。
baseMktData 可选参数,MKTDATA 向量。指定基准日的基准市场数据。若 asOf 等于 mktDataTable 的最后一个日期,默认使用最后一行市场数据作为基准快照;若 asOf 不等于历史表最后日期,则必须提供 baseMktData。
返回值
返回一个 STRING → ANY 字典,包含以下键:
-
asOf:DATE 标量,基准估值日期。
-
keys:ANY 向量,记录展开后每个风险因子的元数据定义,元素数量等于总因子数。每个元素为一个包含以下键的字典(STRING → ANY):
-
type:STRING,因子类型(如 "Price", "FxSpotRate", "IrYieldCurve")。
-
name:STRING,因子名称/资产标识。
-
term:DOUBLE,曲线节点的期限(以年为单位的数值);价格和汇率风险因子为 NULL。
-
-
dates:DATE 向量,收益率对应的历史日期序列(长度为 mktDataTable 的行数减 1)。
-
factorReturns:DOUBLE 类型的矩阵,各因子的对数收益率矩阵,行数等于 dates 的长度,列数对应展开后的总因子数。
-
baseLevels:DOUBLE 向量,基准日各因子的基础水平值。
-
baseMktData:ANY 向量,基准市场数据对象列表,元素个数等于 mktDataTable 中市场数据列的数量(不包含日期列),每个元素对应一个市场数据对象(MKTDATA)。
例子
以下示例获取指定区间内的交易日,批量构造人民币国债收益率曲线历史数据,并调用 mktRiskFactorReturns 将历史市场数据转换为风险因子收益对象。
// 构造单期利率曲线 MKTDATA 对象
def makeExampleCurve(d, rates) {
return parseMktData({
"mktDataType": "Curve",
"curveType": "IrYieldCurve",
"curveName": "CNY_TREASURY_BOND",
"referenceDate": d,
"currency": "CNY",
"dayCountConvention": "Actual365",
"compounding": "Continuous",
"frequency": "Annual",
"interpMethod": "Linear",
"extrapMethod": "Flat",
"dates": d + 365 * (1..size(rates)),
"values": rates
})
}
// 获取指定区间内的交易日
dates = getMarketCalendar("SSE", 2025.10.01, 2025.12.31)
curveHistory = array(ANY, 0)
for (i in 0..(size(dates)-1)) {
// 模拟带有微小波动的收益率曲线
rates = [0.020, 0.022, 0.025] + rand(0.002, 3) - 0.001
curveHistory.append!(makeExampleCurve(dates[i], rates))
}
mktDataTable = table(dates as dates, curveHistory as CNY_TREASURY_BOND)
// 调用 mktRiskFactorReturns 计算因子收益
asOf = mktDataTable.dates.last()
mfr = mktRiskFactorReturns(mktDataTable=mktDataTable, asOf=asOf)
相关函数:ewmaRiskEngine, historicalRiskEngine, parseMktData, parseInstrument, instrumentPricer
