所有模拟方法都要求您通过指定周期数来指定时间网格(NPeriods
).还可以指定严格为正时间增量的标量或矢量(DeltaTime
)和中间时间步长(NSteps
).这些参数,以及与对象相关的初始示例时间(开始时间
),唯一地确定状态向量采样的时间序列。因此,模拟方法允许您从头到尾遍历时间网格(即从左到右)。
相反,插值方法允许您以任何顺序遍历时间网格,允许时间向前和向后移动。它们允许您指定一个插值时间向量,其元素不必是唯一的。
许多参考文献将布朗桥定义为一个条件模拟结合了一个穿越时间网格的方案,有效地合并了两个不同的算法。相比之下,这里提供的插值方法通过有意地分离算法提供了额外的灵活性。在这种方法中,移动一个时间网格,你执行一个初始的蒙特卡罗模拟在终端时间采样的状态,然后依次通过随机插值对中间状态采样。前几个样本决定了路径的整体行为,而后面的样本逐步完善结构。这样的算法经常被调用方差减少技术.当插值次数为2次幂时,该算法很简单。在这种情况下,每个插值都位于两个已知状态的中间,使用等分等方法来改进插值。这个例子通过实现这个2的幂算法突出了精确插值的灵活性。
加载数据。加载从2001年2月7日到2006年4月24日这段时间间隔内的三个月欧元银行间同业拆借利率的历史数据集、每日观察数据和相应的交易日期:
负载Data_GlobalIdx2数据集:Dataset.EB3M“x”),包含(“日期”), ylabel (“每日收益率(%)')标题(“3个月欧元银行间同业拆借利率日有效收益率”)
使模型适合于数据。现在适合一个简单的单变量Vasicek
3个月欧元银行间同业拆借利率(Euribor)数据的日当量收益率模型:
在给定初始条件下,求得某一时刻的短期速率分布T未来是带有均值的高斯分布:
和方差:
为了校准这个简单的短期利率模型,用更熟悉的回归格式重写它:
地点:
执行普通线性回归,其中模型波动率与残差的标准误差成正比:
收益率= Dataset.EB3M;累项= [ones(length(yield) - 1,1) yield (1:end-1)];[系数,区间,残差]=...回归(diff(收益率),解释变量);dt = 1;%时间增量= 1天速度=系数(2)/ dt;水平=系数(1)/系数(2);σ=性病(残差)/√(dt);
创建一个对象并设置它的初始启动状态。创建一个hwv
对象与StartState
设置为最近观察到的短期汇率:
Obj = hwv(速度,水平,sigma,“StartState”收益率(结束)
obj =类HWV: Hull-White / Vasicek ---------------------------------------- 维度:状态= 1,布朗= 1 ---------------------------------------- 开始时间:0 StartState: 7.70408 e-05相关:1漂移:漂移率函数F (t) X (t))扩散:扩散率函数G (t) X (t))模拟:模拟方法/函数simByEulerσ:4.77637e-07水平:6.00424e-05速度:0.00228854
模拟拟合模型。例如,假设您在64 (26)的交易日,使用改进的布朗桥与2的幂算法,而不是通常的从头到尾的蒙特卡罗模拟方法。进一步,假设初始时间和状态与历史数据的最后可用观测值一致,终端状态为未来64天Vasicek模型的期望值。在这种情况下,您可以评估共享相同初始和终端状态的各种路径的行为,也许是为了支持在三个月的间隔内为依赖路径的利率选项定价。金宝app
创建一个插值时间矢量,通过在时间上向前和向后移动来遍历时间网格。其中第一次插补时间设置为最近的短率观测时间,第二次插补时间设置为终端时间,后续插补时间依次对中间状态进行采样:
T = 64;* = (1: T) ';t = NaN(length(times) + 1,1);t (1) = obj.StartTime;t (2) = t;δ= T;jMax = 1;iCount = 3;为k = 1:log2(T) i = delta / 2;为j = 1:jMax t(iccount) = times(i);I = I + delta;iccount = iccount + 1;结束jMax = 2 * jMax;= Delta / 2;结束
绘制插值时间。检查由该算法生成的插值时间序列:
阀杆(1:长度(t), t,“填充”)包含(“指数”), ylabel (插值时间(天))标题(“2的幂算法的采样方案”)
前几个样本在时间上被广泛分离,并决定了路径的路径结构。后来的样品间隔紧密,逐渐细化了详细的结构。
初始化时间序列网格。现在您已经生成了插值时间序列,初始化一个课程时间序列网格以开始插值。抽样过程从历史短期汇率序列的最后一个观测时间和状态开始,并在未来64天结束于的期望值Vasicek
由校准参数推导出的模型:
平均= obj。StartState* exp(-speed * T) + level *...(1 - exp(-speed * T));X = (obj。年代t一个rt年代t一个te; average];
生成5个示例路径。生成5个样例路径,设置完善
输入信号真正的
当时间序列网格可用时,将每个新的插入状态插入到时间序列网格中。在一个又一个试验的基础上执行插值。因为输入时间序列X
有五个试验(其中每一页三维时间序列代表一个独立的试验),插值输出序列Y
也有五页:
nTrials = 5;rng (63349“旋风”Y = obj.interpolate(t, X(:,:,ones(nTrials,1)),...“次”, (obj。年代t一个rtTime T],“完善”,真正的);
绘制生成的样本路径。因为插值时间不是单调增加的,所以对时间进行排序,并对相应的短速率重新排序:
(t,我)= (t)进行排序;Y =紧缩(Y);Y = Y(我:);plot(t, 100 * Y), hold(“上”) plot(t([1 end]), 100 * Y([1 end],1),'.黑色的,“MarkerSize”(20)包含“插值时间(未来的天数)”) ylabel (的收益率(%)), (“关闭”)标题(“布朗桥插值的欧元银行间同业拆借利率”)
该图中的短期汇率表示共享相同初值和终值的可选样本路径。它们说明了一种更广泛的取样技术,称为分层抽样.有关更复杂的分层抽样示例,请参见分层抽样.
尽管这个简单的例子模拟了一个单变量Vasicek
利率模型,它适用于任何维度的问题。
布朗桥方法还应用了更普遍的方差减少技术。有关更多信息,请参见分层抽样.
所有的模拟和插值方法都允许您指定一个函数序列或后台进程,以便在每个样本时间段结束时进行评估。这个周期包括由可选参数确定的任何中间时间步骤NSteps
输入,如优化精度:关于解的精度和误差.这些函数被指定为时间和状态的可调用函数,并且必须返回更新的状态向量Xt:
必须将多个处理函数指定为函数单元格数组。调用这些函数的顺序是它们在单元格数组中出现的顺序。
处理函数不需要使用时间(t)或状态(Xt).它们也不需要更新或更改输入状态向量。事实上,模拟和插值方法不了解任何实现细节,在这方面,它们只遵循已发布的接口。
这些处理功能为解决各种问题提供了强大的建模工具。例如,这些函数允许您指定边界条件、积累统计信息、绘制图表和价格路径相关选项。
除了布朗运动(BM
)模型中,模拟状态向量的各个组成部分通常代表变量,其真实世界的对应变量本质上是正的,如资产价格或利率。然而,默认情况下,这里提供的大多数模拟和插值方法都将连续样本时间之间的过渡建模为一个比例(可能是多元)高斯绘制。因此,当在离散时间中逼近连续时间过程时,状态向量可能不是正的。唯一的例外是simBySolution
为“绿带运动”
对象和simBySolution
为hwv
可分离几何布朗运动模型的对数变换。此外,默认情况下,没有任何仿真和插值方法对状态向量进行调整。因此,您有责任确保状态向量的所有组件都保持为正。
幸运的是,指定非负状态可以确保简单的周期结束处理调整。虽然这种调整是广泛适用的,但当应用到单变量时,它是揭示的圆形的
平方根扩散模型:
也许单变量的主要吸引力圆形的
模型的地方:
短期利率保持为正。然而,短期利率的正性只适用于潜在的连续时间模型。
模拟每日的短期利率圆形的
模型。为了说明后面的语句,模拟的每日短期汇率圆形的
模型,使用圆形的
,超过一历年(约250个交易日):
rng (14151617,“旋风”) obj = cir(0.25,@(t,X)0.1,0.2,“StartState”, 0.02);[X, T] = simByEuler (obj, 250,“DeltaTime”, 1/250,“nTrials”5);sprintf (' % 0.4 f \ t % 0.4 f + i % 0.4 f \ n ', (T (195:205) ';...真正的(X (195:205 1 4)) ';图像放大(X (195:205 1 4))))
i0.0001 0.8080 0.0002+ i0.0001 0.8080 0.0004+i0.0001 0.8120 0.0008+i0.0001 0.8160 0.0008+i0.0001 '
如果在离散时间内模拟得到的路径,利率可能会变为负值。此外,由于圆形的
模型包含了平方根扩散项,短期利率甚至可能变得复杂。
重复具有处理功能的模拟。重复模拟,这次指定一个处理函数,在每个周期结束时取短期汇率的绝对值。你可以通过时间和状态访问处理功能(t,Xt),但它只使用短期汇率的状态向量Xt:
rng (14151617,“旋风”) [Y,T] = simByEuler(obj,250,“DeltaTime”, 1/250,...“nTrials”5,“过程”@ (t, X) abs (X));
比较调整后和未调整的路径。通过使用周期结束处理函数,将未调整路径(负数和复数!)的幅度与保持为正数的对应路径进行图形化比较:
clf情节(T, 100 * abs (X(:, 1、4)),“红色”T 100 * Y(:, 1、4),“蓝”)轴([0.75 10 0 0.4])xlabel(的时间(年)), ylabel (“短期利率(%)”)标题(“单变量CIR短期利率”)({传奇“负面/复杂率”“积极率”},...“位置”,“最佳”)
您可以使用这种方法来获得更准确的SDE解决方案。金宝搏官方网站有关更多信息,请参见性能考虑.
贝茨
|bm
|cev
|圆形的
|扩散
|漂移
|“绿带运动”
|赫斯顿
|hwv
|插入
|默顿
|钻
|sdeddo
|sdeld
|sdemrd
|simByEuler
|simByQuadExp
|simBySolution
|simBySolution
|模拟
|ts2func