楼主: hantb4510
6315 8

[学科前沿] Monte Carlo 定价 Look back option的材料 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

84%

还不是VIP/贵宾

-

威望
0
论坛币
8490 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
1 点
经验
1594 点
帖子
112
精华
0
在线时间
189 小时
注册时间
2009-11-14
最后登录
2018-3-8

楼主
hantb4510 发表于 2010-2-18 06:06:07 |AI写论文
100论坛币
急求关于Monte CArlo 模拟 Path-dependent option(look back option)的资料 最好有VBA程序  谢谢

关键词:Monte Carlo Option Carlo mont Back option 程序 资料 最好

回帖推荐

yhongl12 发表于3楼  查看完整内容

1# hantb4510 Option pricing with excel A nice paper on step-by-step option pricing with excel, VBA codes are included in the paper as well. The authors first briefly review the principles of pricing by no arbitrage in a binomial tree, and show how this can be implemented in Excel; then move to continuous-time model - Black scholes pricing model; after a short discussion on the parameter estim ...

yhongl12 发表于2楼  查看完整内容

你可以参见 http://www.pinggu.org/bbs/thread-524522-1-1.html 最全的期权定价VBA模板 里面会有另一种Path-dependent option---Look-barrier options 另外向你推荐malab的look back optons代码 =========== Matlab Code ============================ function price = fltStrikeLookback(callPut, S, S_max_min, T, D, r, sigma) % Floating Strike Lookback Options % price = fltStrikeLookback(callPut, S, S_max_min ...

沙发
yhongl12 发表于 2010-2-18 08:54:55
你可以参见
http://www.pinggu.org/bbs/thread-524522-1-1.html
最全的期权定价VBA模板
里面会有另一种Path-dependent option---Look-barrier options
另外向你推荐malab的look back optons代码
=========== Matlab Code ============================

function price = fltStrikeLookback(callPut, S, S_max_min, T, D, r, sigma) % Floating Strike Lookback Options % price = fltStrikeLookback(callPut, S, S_max_min, T, D, r, sigma) % % Input Parameters:
% ================
%   callPut   = 1 (call option) or 0 (put option)
%   S         = current asset price
%   S_max_min = if callPut is 1, then S_max_min is the minimum asset price
%               else S_max_min is the maximum asset price
%   r         = risk free rate
%   D         = dividend yield
%   sigma     = volatility
%   T         = time to maturity
%
% Output Parameter:
% =================
%   price = call option price if callPut is 1 or put option price if callPut
%           is 0
%
%
% Example from Matlab Prompt:
% ==========================
%  >> call = fltStrikeLookback(1, 100, 98, 0.501, 0.03, 0.1, 0.3) %
%     call = 17.18954547977881
%
%  >> put = fltStrikeLookback(0, 100, 98, 0.501, 0.03, 0.1, 0.3) %
%     put = 14.04526346904223
% Code adapted by Sione @ sionep@xtra.co.nz
% http://www.global-derivatives.com
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


if(callPut~=0)
  if(callPut~=1)
   error('callPut - must be a logical value of either 1 (call option) or
0 (put option).');
  end
elseif(S_max_min<0)
  error('S_max_min - must be positive.');
elseif(S<0)
  error('S - must be positive.');
elseif(T<=0)
  error('T must be a positive number.');
elseif(r<=0)
  error('r must be a positive number.');
elseif(D<=0)
  error('D must be a positive number.');
elseif(sigma<=0)
  error('sigma must be a positive number.');
elseif(r==D)
  error('D must not be equal to  r.');
end

price      = NaN;
term1      = NaN;
term2      = NaN;
brackCoeff = S*exp(-r*T)*(sigma*sigma)/(2*(r - D));
brack      = NaN;
brack2     = NaN;
temp       = NaN;
dt         = sigma*sqrt(T);


if(callPut)
   a1 = ( log(S/S_max_min) + (r - D + 0.5*sigma*sigma)*T ) / dt;
   a2 = a1 - dt;
   term1 = S*exp(-D*T)*normcdf(a1);
   term2 = S_max_min*exp(-r*T)*normcdf(a2);  
   temp = -a1 + 2*(r - D)*sqrt(T)/sigma;
   brack = (S/S_max_min)^(-2*(r - D)/(sigma*sigma))*normcdf(temp);
   brack2 = exp((r-D)*T)*normcdf(-a1);
   price = term1 - term2 + brackCoeff*(brack - brack2);
else
   b1 = (log(S_max_min/S) + (D + r + 0.5*sigma*sigma)*T)/dt;
   b2 = b1 - dt;
   term1 = S_max_min*exp(-r*T)*normcdf(-b2);
   term2 = S*exp(-D*T)*normcdf(-b1);  
   temp = b1 - 2*(r - D)*sqrt(T)/sigma;
   brack = (S/S_max_min)^(2*(r - D)/(sigma*sigma))*normcdf(temp);
   brack2 = exp((r-D)*T)*normcdf(b1);
   price = term1 - term2 + brackCoeff*(-brack + brack2);
end

=========== End Matlab Code ===============
the logic of finance

藤椅
yhongl12 发表于 2010-2-18 09:03:54
1# hantb4510
Option pricing with excel
A nice paper on step-by-step option pricing with excel, VBA codes are included in the paper as well. The authors first briefly review the principles of pricing by no arbitrage in a binomial tree, and show how this can be implemented in Excel; then move to continuous-time model - Black scholes pricing model; after a short discussion on the parameter estimation issues, they turn to two numerical methods for pricing, which are Monte Carlo simulation and Finite difference for Partial differential equation (PDE); at last, option hedging is introduced, advantages and disadvantages of spreadsheets in general and Excel in particular are analyzed shortly.
the logic of finance

板凳
hantb4510 发表于 2010-2-18 22:26:00
2# yhongl12
谢谢你的信息,不过我刚刚打开了那个EXCEL的VBA,看不到关于look back option定价的程序

报纸
yhongl12 发表于 2010-2-18 23:03:27
'// Floating strike lookback options
Function FloatingStrikeLookback(CallPutFlag As String, S As Double, SMin As Double, SMax As Double, T As Double, _
            r As Double, b As Double, v As Double) As Double

    Dim a1 As Double, a2 As Double, m As Double
   
    If CallPutFlag = "c" Then
        m = SMin
    ElseIf CallPutFlag = "p" Then
        m = SMax
    End If
   
     a1 = (Log(S / m) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
     a2 = a1 - v * Sqr(T)

    If CallPutFlag = "c" Then
        FloatingStrikeLookback = S * Exp((b - r) * T) * CND(a1) - m * Exp(-r * T) * CND(a2) + _
        Exp(-r * T) * v ^ 2 / (2 * b) * S * ((S / m) ^ (-2 * b / v ^ 2) * CND(-a1 + 2 * b / v * Sqr(T)) - Exp(b * T) * CND(-a1))
    ElseIf CallPutFlag = "p" Then
        FloatingStrikeLookback = m * Exp(-r * T) * CND(-a2) - S * Exp((b - r) * T) * CND(-a1) + _
        Exp(-r * T) * v ^ 2 / (2 * b) * S * (-(S / m) ^ (-2 * b / v ^ 2) * CND(a1 - 2 * b / v * Sqr(T)) + Exp(b * T) * CND(a1))
    End If
End Function


'// Fixed strike lookback options
Public Function FixedStrikeLookback(CallPutFlag As String, S As Double, SMin As Double, SMax As Double, X As Double, _
                 T As Double, r As Double, b As Double, v As Double) As Double
   
    Dim d1 As Double, d2 As Double
    Dim e1 As Double, e2 As Double, m As Double
   
    If CallPutFlag = "c" Then
        m = SMax
    ElseIf CallPutFlag = "p" Then
        m = SMin
    End If
   
    d1 = (Log(S / X) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
    d2 = d1 - v * Sqr(T)
    e1 = (Log(S / m) + (b + v ^ 2 / 2) * T) / (v * Sqr(T))
    e2 = e1 - v * Sqr(T)
   
    If CallPutFlag = "c" And X > m Then
        FixedStrikeLookback = S * Exp((b - r) * T) * CND(d1) - X * Exp(-r * T) * CND(d2) _
        + S * Exp(-r * T) * v ^ 2 / (2 * b) * (-(S / X) ^ (-2 * b / v ^ 2) * CND(d1 - 2 * b / v * Sqr(T)) + Exp(b * T) * CND(d1))
    ElseIf CallPutFlag = "c" And X <= m Then
        FixedStrikeLookback = Exp(-r * T) * (m - X) + S * Exp((b - r) * T) * CND(e1) - Exp(-r * T) * m * CND(e2) _
        + S * Exp(-r * T) * v ^ 2 / (2 * b) * (-(S / m) ^ (-2 * b / v ^ 2) * CND(e1 - 2 * b / v * Sqr(T)) + Exp(b * T) * CND(e1))
    ElseIf CallPutFlag = "p" And X < m Then
        FixedStrikeLookback = -S * Exp((b - r) * T) * CND(-d1) + X * Exp(-r * T) * CND(-d1 + v * Sqr(T)) _
        + S * Exp(-r * T) * v ^ 2 / (2 * b) * ((S / X) ^ (-2 * b / v ^ 2) * CND(-d1 + 2 * b / v * Sqr(T)) - Exp(b * T) * CND(-d1))
    ElseIf CallPutFlag = "p" And X >= m Then
        FixedStrikeLookback = Exp(-r * T) * (X - m) - S * Exp((b - r) * T) * CND(-e1) + Exp(-r * T) * m * CND(-e1 + v * Sqr(T)) _
        + Exp(-r * T) * v ^ 2 / (2 * b) * S * ((S / m) ^ (-2 * b / v ^ 2) * CND(-e1 + 2 * b / v * Sqr(T)) - Exp(b * T) * CND(-e1))
    End If
End Function


'// Partial-time floating strike lookback options
Public Function PartialFloatLB(CallPutFlag As String, S As Double, SMin As Double, SMax As Double, t1 As Double, _
                T2 As Double, r As Double, b As Double, v As Double, lambda As Double)
   
    Dim d1 As Double, d2 As Double
    Dim e1 As Double, e2 As Double
    Dim f1 As Double, f2 As Double
    Dim g1 As Double, g2 As Double, m As Double
    Dim part1 As Double, part2 As Double, part3 As Double
   
    If CallPutFlag = "c" Then
        m = SMin
    ElseIf CallPutFlag = "p" Then
        m = SMax
    End If
   
    d1 = (Log(S / m) + (b + v ^ 2 / 2) * T2) / (v * Sqr(T2))
    d2 = d1 - v * Sqr(T2)
    e1 = (b + v ^ 2 / 2) * (T2 - t1) / (v * Sqr(T2 - t1))
    e2 = e1 - v * Sqr(T2 - t1)
    f1 = (Log(S / m) + (b + v ^ 2 / 2) * t1) / (v * Sqr(t1))
    f2 = f1 - v * Sqr(t1)
    g1 = Log(lambda) / (v * Sqr(T2))
    g2 = Log(lambda) / (v * Sqr(T2 - t1))

    If CallPutFlag = "c" Then
        part1 = S * Exp((b - r) * T2) * CND(d1 - g1) - lambda * m * Exp(-r * T2) * CND(d2 - g1)
        part2 = Exp(-r * T2) * v ^ 2 / (2 * b) * lambda * S * ((S / m) ^ (-2 * b / v ^ 2) * CBND(-f1 + 2 * b * Sqr(t1) / v, -d1 + 2 * b * Sqr(T2) / v - g1, Sqr(t1 / T2)) _
        - Exp(b * T2) * lambda ^ (2 * b / v ^ 2) * CBND(-d1 - g1, e1 + g2, -Sqr(1 - t1 / T2))) _
        + S * Exp((b - r) * T2) * CBND(-d1 + g1, e1 - g2, -Sqr(1 - t1 / T2))
        part3 = Exp(-r * T2) * lambda * m * CBND(-f2, d2 - g1, -Sqr(t1 / T2)) _
        - Exp(-b * (T2 - t1)) * Exp((b - r) * T2) * (1 + v ^ 2 / (2 * b)) * lambda * S * CND(e2 - g2) * CND(-f1)
   
    ElseIf CallPutFlag = "p" Then
        part1 = lambda * m * Exp(-r * T2) * CND(-d2 + g1) - S * Exp((b - r) * T2) * CND(-d1 + g1)
        part2 = -Exp(-r * T2) * v ^ 2 / (2 * b) * lambda * S * ((S / m) ^ (-2 * b / v ^ 2) * CBND(f1 - 2 * b * Sqr(t1) / v, d1 - 2 * b * Sqr(T2) / v + g1, Sqr(t1 / T2)) _
        - Exp(b * T2) * lambda ^ (2 * b / v ^ 2) * CBND(d1 + g1, -e1 - g2, -Sqr(1 - t1 / T2))) _
        - S * Exp((b - r) * T2) * CBND(d1 - g1, -e1 + g2, -Sqr(1 - t1 / T2))
        part3 = -Exp(-r * T2) * lambda * m * CBND(f2, -d2 + g1, -Sqr(t1 / T2)) _
        + Exp(-b * (T2 - t1)) * Exp((b - r) * T2) * (1 + v ^ 2 / (2 * b)) * lambda * S * CND(-e2 + g2) * CND(f1)
  End If
  PartialFloatLB = part1 + part2 + part3
End Function


'// Partial-time fixed strike lookback options
Public Function PartialFixedLB(CallPutFlag As String, S As Double, X As Double, t1 As Double, _
                T2 As Double, r As Double, b As Double, v As Double) As Double

    Dim d1 As Double, d2 As Double
    Dim e1 As Double, e2 As Double
    Dim f1 As Double, f2 As Double

    d1 = (Log(S / X) + (b + v ^ 2 / 2) * T2) / (v * Sqr(T2))
    d2 = d1 - v * Sqr(T2)
    e1 = ((b + v ^ 2 / 2) * (T2 - t1)) / (v * Sqr(T2 - t1))
    e2 = e1 - v * Sqr(T2 - t1)
    f1 = (Log(S / X) + (b + v ^ 2 / 2) * t1) / (v * Sqr(t1))
    f2 = f1 - v * Sqr(t1)
    If CallPutFlag = "c" Then
        PartialFixedLB = S * Exp((b - r) * T2) * CND(d1) - Exp(-r * T2) * X * CND(d2) + S * Exp(-r * T2) * v ^ 2 / (2 * b) * (-(S / X) ^ (-2 * b / v ^ 2) * CBND(d1 - 2 * b * Sqr(T2) / v, -f1 + 2 * b * Sqr(t1) / v, -Sqr(t1 / T2)) + Exp(b * T2) * CBND(e1, d1, Sqr(1 - t1 / T2))) - S * Exp((b - r) * T2) * CBND(-e1, d1, -Sqr(1 - t1 / T2)) - X * Exp(-r * T2) * CBND(f2, -d2, -Sqr(t1 / T2)) + Exp(-b * (T2 - t1)) * (1 - v ^ 2 / (2 * b)) * S * Exp((b - r) * T2) * CND(f1) * CND(-e2)
    ElseIf CallPutFlag = "p" Then
        PartialFixedLB = X * Exp(-r * T2) * CND(-d2) - S * Exp((b - r) * T2) * CND(-d1) + S * Exp(-r * T2) * v ^ 2 / (2 * b) * ((S / X) ^ (-2 * b / v ^ 2) * CBND(-d1 + 2 * b * Sqr(T2) / v, f1 - 2 * b * Sqr(t1) / v, -Sqr(t1 / T2)) - Exp(b * T2) * CBND(-e1, -d1, Sqr(1 - t1 / T2))) + S * Exp((b - r) * T2) * CBND(e1, -d1, -Sqr(1 - t1 / T2)) + X * Exp(-r * T2) * CBND(-f2, d2, -Sqr(t1 / T2)) - Exp(-b * (T2 - t1)) * (1 - v ^ 2 / (2 * b)) * S * Exp((b - r) * T2) * CND(-f1) * CND(e2)
    End If
End Function
the logic of finance

地板
yhongl12 发表于 2010-2-18 23:05:07
4# hantb4510
在模块里找
the logic of finance

7
hantb4510 发表于 2010-2-20 03:56:42
6# yhongl12
谢谢你,不过我还是等着monte carlo simulate path dependent option的材料  谢谢~

8
bn9492 发表于 2010-2-20 14:57:22
不知道你的用途在哪里
实际上的和理论上的相差非常远.
而如果实际上使用,速度可能是一个非常重要的问题.(因为CORRELATION)

你想要哪方面的资料呢?

9
hantb4510 发表于 2010-2-20 23:00:36
8# bn9492
最好是理论实际都要的,如果没有的话,我想看看理论的,谢谢你~

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2025-12-29 07:34