主要内容

利用Longstaff-Schwartz方法为波动期权定价

这个例子展示了如何使用蒙特卡罗模拟和Longstaff-Schwartz方法为波动期权定价。使用均值回归模型对潜在天然气价格进行风险中性模拟。基于Longstaff-Schwartz方法对波动期权进行了定价[6].这种方法使用回归技术来近似期权的延续值。通过比较多项式基和样条基来拟合回归。最后,根据标准欧洲和美国期权得出的价格下限和上限进行分析。

Swing选项概述

波动期权是能源市场上流行的金融工具,它提供了交付资产数量的灵活性。为了保护能源消费者免受能源价格波动的影响,他们希望通过购买远期合约来锁定价格基载远期合同.然而,消费者并不知道未来究竟会使用多少能源,而电力和天然气等能源商品也不容易储存。因此,消费者希望在每个交付日期能够灵活地改变交付的能量。Swing选项提供了这种灵活性。因此,完整合约由两部分组成:基本负荷远期合约和波动期权组件。

波动期权通常是可以高度定制的场外(OTC)合约。因此,有许多不同类型的约束和惩罚(见[5]以了解更多资料)。在本例中,波动期权的定价中唯一的约束是每日成交量,即每日合约量(daily Contract Quantity, DCQ)。当右摆行使时,音量不能低于最小DCQ (minDCQ),或高于最大DCQ (maxDCQ).

有几种方法可以为波动期权定价,如有限差分、模拟和基于树的动态规划[5].本例使用基于模拟的方法和Longstaff-Schwartz方法。基于模拟的方法的好处是用于模拟基础资产价格的动态与定价算法分离。在有限差分和基于树的方法中,定价算法必须改变,以考虑不同的潜在价格动态定价。

天然气价格的风险中性模拟

在本例中,使用天然气作为基础资产,其均值恢复动态[8]如下:

d 年代 t κ μ - 日志 年代 t 年代 t d t + σ 年代 t d W t

在哪里 W t 是标准布朗运动。将伊藤引理应用于价格的对数,可以得到Orstein-Uhlenbeck过程:

d X t κ θ - X t d t + σ d W t

在哪里 X t 日志 年代 t κ > 0 , θ 定义为:

θ μ - σ 2 2 κ

θ 是均值回归水平,它决定模拟值在长期运行中将恢复到的值。 κ 是决定这种回归发生的速度的平均回归速度。 σ 是波动性 X .我们首先模拟价格的对数。然后,取模拟值的指数,得到价格。

模拟时间为一年,初始价格为3.9美元/ MMBtu。蒙特卡洛模拟每天进行1000次试验。在实践中,这些参数是根据市场数据校准的。在这个例子中, κ 1 2 θ 1 7 , σ 5 9 .的hwv用于模拟天然气价格的均值回归动态。

%结算日期解决=“01 - jun - 2014”到期日成熟=“01 - jun - 2015”% Actual/实际基数基= 0;初始日志(价格为$/MMBtu)X0 = log(3.9);对数波动率(价格)σ = 0.59;%蒙特卡罗模拟的试验次数NumTrials = 1000;%周期数(每天)NumPeriods = daysdif(结算,到期,基础);每日时间步长%dt = 1/NumPeriods;原木平均还原速度(价格)Kappa = 1.2;日志的平均回归水平(价格)Theta = 1.7;创建HWV对象hwvobj = hwv(Kappa, Theta, Sigma,“StartState”, X0);

模拟运行并绘制。

设置随机数生成器种子savedState = rng(0,“旋风”);%模拟汽油价格[Paths, Times] = hwvobj.simBySolution(NumPeriods,“NTRIALS”NumTrials,...“DeltaTime”, dt);路径=挤压(exp(路径));恢复随机数生成器状态rng (savedState);%绘图路径图;情节(时间、路径);标题(“天然气风险中性价格模拟”);包含(“时间”);ylabel (“价格”);

图中包含一个轴对象。标题为“天然气风险中性价格模拟”的axis对象包含1000个类型为行的对象。

在本例中,天然气被用作具有均值回归动态的基础资产。然而,Longstaff-Schwartz算法可以用于其他基础资产,例如电力,具有任何基础价格动态。

为Swing选项定价

我们考虑一个波动期权,在4.69美元/百万英热单位的执行价有五个波动权,可以在结算日后到到期日之间每天行使。每日合同量(DCQ)为10,000 MMBtu,这是消费者预计在某一天购买的平均天然气量。消费者可以灵活地在一天内将购买量(下降)减少到最低DCQ为2,500 MMBtu,或将购买量(上升)增加到15,000 MMBtu。连续复利年无风险利率为1%。

RateSpec用于表示利率期限结构。为了简单起见,我们在这个例子中考虑一个固定利率期限结构。的价值RateSpec可以修改以适应任何利率曲线。这个函数hswingbyls在这个例子中,假设每天锻炼ExerciseDates输入为空。

定义RateSpecRfrate = 0.01;复利= -1;RateSpec = intenvset(“ValuationDate”解决,startdate可以的解决,...“EndDates”成熟,“利率”rfrate,...“复合”复合,“基础”、基础);每日运动百分比% hswingbyls假设每日锻炼为空的ExerciseDatesExerciseDates = [];%摆动次数numswing = 5;%每日合同数量(MMBtu)DCQ = 10000;MMBtu中最小DCQ约束minDCQ = 2500;MMBtu中最大DCQ约束maxDCQ = 15000;%的罢工罢工= 4.69;

Longstaff-Schwartz方法是一种向后迭代算法,它从到期日开始在时间上后退。在每个执行日期,算法近似于延续值,即未执行期权时的期权值。这是通过对模拟价格的值和下一个行权日期权的贴现未来价值进行拟合回归来实现的。期权的未来价值被称为算法在时间上向后移动。延续价值是与即时执行(下跌或上涨)的收益总和和少一次右摆的波动期权的延续价值进行比较。如果这个金额较小,期权持有人的最佳策略是不在该日期行权。这个函数hswingbyls在本例中使用该方法确定最优行使策略和波动期权的价格[127].

如前所述,本例中唯一考虑的约束是最小和最大DCQ。在这种情况下,最佳的早期锻炼策略是“砰砰”类型。这意味着,当在某一行权日期上行或下行是最优时,期权持有人应始终在DCQ的最大值或最小值处行权,以实现利润最大化。“砰砰”练习将不是最佳策略,例如,如果根据交易量进行最终处罚。定价算法将需要额外跟踪所有可能的容量级别,这将显著增加运行时性能成本。

首先,利用三阶多项式拟合Longstaff-Schwartz方法的回归,对摇摆期权进行定价。这个函数hswingbyls还生成到期前行使日期的标的价格与延续价值之间的回归图。

使用三阶多项式拟合Longstaff-Schwartz的%价格波动期权%的回归抽搐;useSpline = false;SwingPrice = hswingbyls(路径,时间,RateSpec,结算,成熟度,...Strike, ExerciseDates, numswing, DCQ, minDCQ, maxDCQ, useSpline,...[],真的)

图中包含一个轴对象。标题为Longstaff-Schwartz回归拟合(三阶多项式)的坐标轴对象包含2个散点类型的对象,直线。

SwingPrice = 5.6943e+04
lsPolyTime = toc;

上面的回归拟合图表明,三阶多项式不能完美地拟合延拓值,特别是在铰链附近和极值点。使用csaps函数使用平滑参数为0.7的三次平滑样条拟合回归。需要使用曲线拟合工具箱™来运行示例的其余部分。

%价格波动选项使用平滑样条,以适应朗斯塔夫-施瓦茨%的回归抽搐;useSpline = true;smoothingParam = 0.7;SwingPriceSpline = hswingbyls(路径,时间,RateSpec,结算,成熟度,...Strike, ExerciseDates, numswing, DCQ, minDCQ, maxDCQ, useSpline,...smoothingParam,真的)

图中包含一个轴对象。标题为Longstaff-Schwartz回归拟合(样条)的axis对象包含2个类型为散点、线的对象。

SwingPriceSpline = 6.0757e+04
lsSplineTime = toc;

回归图表明,三次平滑样条与数据有更好的拟合,从而获得更准确的延续值。然而,下面的比较表明,使用三次平滑样条比三次多项式需要更长的时间。

打印运行时间的比较displayRunningTimes (lsPolyTime lsSplineTime)
运行时间比较:三阶多项式:8.07秒样条:14.13秒

此外,重要的是要注意,价格只代表可选性成分。因此,基本负荷远期合同的价格不包括在上述计算价格中。由于我们使用了固定执行价格,因此基本负荷合同具有非零值,可以通过以下方式计算:

B 一个 年代 e l o 一个 d P r c e 1 N e - r t E 年代 t - K

在哪里 t 1 N 运动日期(见[3.]以了解更多资料)。合同的全部价格,包括基本负荷和波动期权,使用平滑三次样条的波动期权价格计算如下。

获取折扣因子RS2 = intenvset(RateSpec,“开始时间”0,“EndTimes”,乘以(2:结束));D = intenvget(RS2,“盘”);计算基本负载价格BaseLoadPrice = DCQ.*mean(Paths(2:end,:)-Strike,2)'*D;根据三次样条LS的结果计算全部合同价格FullContractPrice = BaseLoadPrice + SwingPriceSpline
FullContractPrice = 1.2482e+05

价格范围

波动期权的下限是一串欧洲期权,上限是一串美国期权[4].与欧洲期权相比,摇摆期权在每个行权日都有一个提前行权溢价,因此价格应该更高。这种期权的价格低于美式期权条,因为在每个行权日只能行使一种摇摆权。使用美式期权,一天可以行使一条以上的期权。

下界和上界条的价格计算如下,以检查波动期权价格是否在这些范围内。欧洲条带价格是根据最近五个行使日期计算的。

获取最近numswing练习日期的折扣因子D = D(end- numswinging +1:end);%欧洲下限idx = size(路径,1):-1:(size(路径,1)- numswinging + 1);putEuro = D'*mean(max(Strike - Paths(idx,:), 0),2);callEuro = D'*mean(max(路径(idx,:) - Strike, 0),2);lowerBound = ((DCQ-minDCQ).*putEuro+(maxDCQ-DCQ).*callEuro);%美国上限[putAmer, callAmer] = hamericanPrice(路径,时间,RateSpec, Strike);upperBound = numswinging .*((DCQ-minDCQ).*putAmer+(maxDCQ-DCQ).*callAmer);打印价格和下限/上限displaySummary(SwingPriceSpline, lowerBound, upperBound);
下界和上界比较:下界(欧洲):44412.14摇摆期权价格:60757.33上界(美国):68181.42

使用Longstaff-Schwartz算法计算的价格在下限和上限之内。下图显示了摇摆次数增加时摇摆选项与上界和下界之间的比较。当摆动的次数是1在美国,摇摆期权相当于美式期权。在日常运动机会的情况下(numswing = 365),波动期权相当于按日到期的欧洲期权条。

结论

该示例展示了使用Longstaff-Schwartz方法为波动期权定价,其中基础资产遵循均值回归动态。Longstaff-Schwartz算法采用三阶多项式和平滑三次样条拟合回归来逼近延拓值。结果表明,平滑的三次样条在性能较低的情况下能较好地拟合数据。最后,将产生的波动期权价格与欧洲期权带的下限和美国期权带的上限进行对比。

参考文献

[1]布格特,A.,德容,C.;用蒙特卡罗方法进行储气库估值衍生品杂志。15(3): 81 - 98年,2008年。

[2]多尔,乌韦。用蒙特卡洛技术评估摇摆期权和估计练习策略。牛津大学,2002年。

[3]赫尔,约翰·C。期权、期货和其他衍生品.第六版,培生教育公司,2006年。

[4] Jaillet, P., Ronn, E. I., Tompaidis, S.;“基于商品的波动期权的估值,管理科学。50(7): 909 - 921年,2004年。

Loland, Ambers, Lindqvist, Ola。基于商品的波动期权的估值:一项调查Norsk, Regnesentral, 2008。

[6]朗斯塔夫,弗朗西斯·A,施瓦茨,爱德华多·S。《通过模拟评估美国期权:一个简单的最小二乘方法》金融研究评论。14(1): 113 - 147年,2001年。

[7] N. Meinshausen, Hambly, B.M.多重期权评估的蒙特卡罗方法数学科学。14:557 - 583, 2004。

[8]施瓦茨,爱德华多?商品价格的随机行为:对估值和对冲的影响金融杂志。52(3): 923 - 973年,1997年。

效用函数

函数displaySummary(SwingPriceSpline, lowerBound, upperBound)'比较下限和上限:\n');流(' \ n ')流('下限(欧洲):%.2f\n',下界);流('浮动期权价格:%.2f\n', SwingPriceSpline);流('上限(美式):%.2f\n\n', upperBound);结束函数displayRunningTimes(lsPolyTime, lsSplineTime)'运行时间比较:\n');流(' \ n ')流(三阶多项式:%。2 f秒\ n”, lsPolyTime);流(样条:%。2 f秒\ n \ n”, lsSplineTime);结束

另请参阅

||||||||||||||||||||||

相关的例子

更多关于

外部网站