October 2nd, 2012, 9:10 am
So I'm pricing a spread option, I've used the Espen Haug's implementation which I have pasted below in case required.I'm pricing a spread option on Jan13/Feb13 gas futures. However, in this market one lot of Jan13 gas for example, will deliver 10,000 units per day which over the course of the 31 days in Jan13 will amount to 310,000 units in total. Feb13 on the other hand will only deliver a total of 280,000 units (28 x 10,000 units per day).The model appears to have inputs for 'quantities' but I am not sure if they are designed to be used for this purpose, and even if they are, I am not sure if they are working properly because the prices I get when I use different volumes for asset1 and asset2 are wildly different to what i get when I price it 1:1 for example:Asset1 = 100, Asset2 = 100, Strike = 0, Asset1Vol = 25%, Asset2Vol = 25%, Correlation = 90%, Time = 1 year, Interest Rate = 0, Cost Of Carry's = 0Quantity1 = 1, Quantity2 = 1Call Value = 4.46I then thought if we use Quantity1 = 31, Quantity2 = 28 to account for the different number of days that I would get the right price, but when the model spits out a call value of 332.43 vs the 4.46 I got before I thought I might be doing something wrong!!I then tried Quantity1 = 1, Quantity2 = 28/31 the gave me call value of 10.72 vs the original 4.46 which again seems a bit punchy.Does anyone know what is going on and how I should be accounting for the different volumes???Function SpreadApproximation(CallPutFlag As String, S1 As Double, S2 As Double, Q1 As Double, Q2 As Double, X As Double, T As Double, _ r As Double, b1 As Double, b2 As Double, v1 As Double, v2 As Double, rho As Double) As Double Dim v As Double, S As Double Dim d1 As Double, d2 As Double Dim F As Double F = Q2 * S2 * Exp((b2 - r) * T) / (Q2 * S2 * Exp((b2 - r) * T) + X * Exp(-r * T)) v = Sqr(v1 ^ 2 + (v2 * F) ^ 2 - 2 * rho * v1 * v2 * F) S = Q1 * S1 * Exp((b1 - r) * T) / (Q2 * S2 * Exp((b2 - r) * T) + X * Exp(-r * T)) d1 = (Log(S) + v ^ 2 / 2 * T) / (v * Sqr(T)) d2 = d1 - v * Sqr(T) If CallPutFlag = "c" Then SpreadApproximation = (Q2 * S2 * Exp((b2 - r) * T) + X * Exp(-r * T)) * (S * CND(d1) - CND(d2)) Else SpreadApproximation = (Q2 * S2 * Exp((b2 - r) * T) + X * Exp(-r * T)) * (CND(-d2) - S * CND(-d1)) End If End Function
Last edited by
hrad on October 1st, 2012, 10:00 pm, edited 1 time in total.