Thursday, January 27, 2011

Saturday, January 15, 2011

Black-Scholes Model

Black-Scholes Option Princing Model for dividend paying underlying assets VBA code (Premium only)


'// Author's blog:
'// Heart of the Finance
'// http://heartofthefinance.blogspot.com/
'//
'// Black-Scholes Option Princing Model for dividend paying underlying assets VBA code (Premium only)
'// version 1.0.0
'// Last update: 1/15/2011

Public Function BlackScholes(CallPutFlag As String, S As Double, K As Double, T As Double, r As Double, q As Double, v As Double) As Double

'S: spot price of an underlying asset
'K: strike price
'T: (T-t); time to maturity from today. i.e. T: time at maturity, t: today
'r: risk-free rate (annualized, continuous compounding)
'q: dividend yield (annualized, continuous compounding)
'v:volatility (standard deviation of return) of an underlying asset (annualized)


Dim d1 As Double, d2 As Double

d1 = (Log(S / K) + (r - q + v ^ 2 / 2) * T) / (v * Sqr(T))
d2 = d1 - v * Sqr(T)

If CallPutFlag = "c" Then

BlackScholes = Exp(-q * T) * S * CND(d1) - K * Exp(-r * T) * CND(d2)

ElseIf CallPutFlag = "p" Then

'BlackScholes = K * Exp(-r * T) * CND(-d2) - S * Exp(-q * T) * CND(-d1)
BlackScholes = K * Exp(-r * T) * (1 - CND(d2)) - S * Exp(-q * T) * (1 - CND(d1))

End If

End Function

'// The cumulative normal distribution function
Public Function CND(X As Double) As Double

Dim L As Double, K As Double
Const a1 = 0.31938153: Const a2 = -0.356563782: Const a3 = 1.781477937:
Const a4 = -1.821255978: Const a5 = 1.330274429

L = Abs(X)
K = 1 / (1 + 0.2316419 * L)
CND = 1 - 1 / Sqr(2 * Application.Pi()) * Exp(-L ^ 2 / 2) * (a1 * K + a2 * K ^ 2 + a3 * K ^ 3 + a4 * K ^ 4 + a5 * K ^ 5)

If X < 0 Then CND = 1 - CND End If End Function



Black-Scholes Option Princing Model for dividend paying underlying assets VBA code (Premium and Greeks)

'// Author's blog:
'// Heart of the Finance
'// http://heartofthefinance.blogspot.com/
'//
'// Black-Scholes Option Princing Model for dividend paying underlying assets VBA code (Premium and Greeks)
'// version 1.0.0
'// Last update: 1/15/2011

'****************************************************************************
'* Cumulative Standard Normal Distribution *
'* (This function provides similar result as NORMSDIST( ) on Excel) *
'****************************************************************************

Function SNorm(z)
c1 = 2.506628
c2 = 0.3193815
c3 = -0.3565638
c4 = 1.7814779
c5 = -1.821256
c6 = 1.3302744
If z > 0 Or z = 0 Then
w = 1
Else: w = -1
End If
y = 1 / (1 + 0.2316419 * w * z)
SNorm = 0.5 + w * (0.5 - (Exp(-z * z / 2) / c1) * _
(y * (c2 + y * (c3 + y * (c4 + y * (c5 + y * c6))))))

End Function

'**********************************************************************
'* Black-Scholes European Call Price Computation *
'**********************************************************************

Function Call_Eur(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

's: spot price of an underlying asset
'k: strike price
't: (T-t); time to maturity. i.e. T: maturity, t: current
'r: risk-free rate (annual rate, continuous compounding)
'q: dividend yield (annual rate, continuous compounding)
'sd:volatility (standard deviation of return) of an underlying asset

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Call_Eur = Exp(-q * t) * s * SNorm(d1) - k * Exp(-r * t) * SNorm(d2)

End Function

'*********************************************************************
'* Black-Scholes European Put Price Computation *
'*********************************************************************

Function Put_Eur(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

'Put-call parity
'Call_Eur_tmp = Exp(-q * t) * s * SNorm(d1) - k * Exp(-r * t) * SNorm(d2)
'Put_Eur = -s * Exp(-q * t) + Call_Eur_tmp + k * Exp(-r * t)

Put_Eur = k * Exp(-r * t) * (1 - SNorm(d2)) - s * Exp(-q * t) * (1 - SNorm(d1))

End Function


'**********************************************************************
'* Black-Scholes European Call Delta Computation *
'**********************************************************************

Function Call_Eur_Delta(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Call_Eur_Delta = Exp(-q * t) * SNorm(d1)

End Function

'*********************************************************************
'* Black-Scholes European Put Delta Computation *
'*********************************************************************

Function Put_Eur_Delta(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Put_Eur_Delta = -Exp(-q * t) * (1 - SNorm(d1))

End Function

'**********************************************************************
'* Black-Scholes European Call Gamma Computation *
'**********************************************************************

Function Call_Eur_Gamma(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Call_Eur_Gamma = Exp(-q * t) / (s * sd * t ^ 0.5) * Exp(-d1 ^ 2 / 2) / (2 * Application.WorksheetFunction.Pi()) ^ 0.5

End Function

'**********************************************************************
'* Black-Scholes European Put Gamma Computation *
'**********************************************************************

Function Put_Eur_Gamma(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Put_Eur_Gamma = Exp(-q * t) / (s * sd * t ^ 0.5) * Exp(-d1 ^ 2 / 2) / (2 * Application.WorksheetFunction.Pi()) ^ 0.5

End Function

'**********************************************************************
'* Black-Scholes European Call Vega Computation *
'**********************************************************************

Function Call_Eur_Vega(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Call_Eur_Vega = Exp(-q * t) * s * (t ^ 0.5) * Exp(-d1 ^ 2 / 2) / (2 * Application.WorksheetFunction.Pi()) ^ 0.5

End Function

'**********************************************************************
'* Black-Scholes European Put Vega Computation *
'**********************************************************************

Function Put_Eur_Vega(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Put_Eur_Vega = Exp(-q * t) * s * (t ^ 0.5) * Exp(-d1 ^ 2 / 2) / (2 * Application.WorksheetFunction.Pi()) ^ 0.5

End Function

'**********************************************************************
'* Black-Scholes European Call Theta Computation *
'**********************************************************************

Function Call_Eur_Theta(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Call_Eur_Theta = q * Exp(-q * t) * s * SNorm(d1) - Exp(-q * t) * s * sd / (2 * (t) ^ 0.5) * Exp(-d1 ^ 2 / 2) / (2 * Application.WorksheetFunction.Pi()) ^ 0.5 - k * r * Exp(-r * t) * SNorm(d2)

End Function

'**********************************************************************
'* Black-Scholes European Put Theta Computation *
'**********************************************************************

Function Put_Eur_Theta(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Put_Eur_Theta = q * Exp(-q * t) * s * (-1) * SNorm(-d1) - Exp(-q * t) * s * sd / (2 * (t) ^ 0.5) * Exp(-d1 ^ 2 / 2) / (2 * Application.WorksheetFunction.Pi()) ^ 0.5 + k * r * Exp(-r * t) * SNorm(-d2)

End Function


'**********************************************************************
'* Black-Scholes European Call Rho Computation *
'**********************************************************************

Function Call_Eur_Rho(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Call_Eur_Rho = k * t * Exp(-r * t) * SNorm(d2)

End Function


'**********************************************************************
'* Black-Scholes European Put Rho Computation *
'**********************************************************************

Function Put_Eur_Rho(s, k, t, r, q, sd)
Dim a As Single
Dim b As Single
Dim c As Single
Dim d1 As Single
Dim d2 As Single

a = Log(s / k)
b = (r - q + 0.5 * sd ^ 2) * t
c = sd * (t ^ 0.5)
d1 = (a + b) / c
d2 = d1 - sd * (t ^ 0.5)

Put_Eur_Rho = -k * t * Exp(-r * t) * SNorm(-d2)

End Function





Ref.
http://en.wikipedia.org/wiki/Black-Scholes
http://www.worldscibooks.com/etextbook/p556/p556_chap04.pdf
http://www.espenhaug.com/black_scholes.html

Saturday, January 8, 2011

Options, Futures, and Other Derivatives [With CDROM]/ John C. Hull

Amazon.com


Amazon.co.uk


Amazon.co.jp


Author's website
http://www.rotman.utoronto.ca/~hull/


Ordered on 1/18/2011 via Amazon.co.uk.
Order cancelled on 1/27/2011 due to the delay of the release.
Ordered on 2/2/2011 via Amazon.co.jp.
Order cancelled due to the delay.

Monday, January 3, 2011

THE QUANTS How a New Breed of Math Whizzes Conquered Wall Street and Nearly Destroyed It - Scott Patterson

I was in a quants hedge fund's New York office in August 6, 2007. I have never been able to forget the experience there.

Both finance and economics are different from physics. Because they are related to monetary value and ultimately investors' emotions. Would the be possible for us to appropriately model the emotions? I don't think so. Emotions fluctuate like all atoms under the absolute non-zero temperature.

This is a great book to review what happened in the market and think about what should be done next.


Amazon.com (English version)



Amazon.co.uk (English version)



Amazon.co.jp (English version)



Amazon.co.jp (Japanese version)

Sunday, January 2, 2011

Wordbook for TOEFL and GMAT

Finished today! This book is a famous wordbook for Japanese TOEFL&GMAT examinees.

Amazon.co.jp (Japanese)