Black-Scholes on 17bII+ using Taylor series VERY ACCURATE!



Post: #2

Special Thanks to Tizedes Csaba for pointing me to the Taylor series approximation for the normal cumulative distribution.

This implementation of Black-Scholes only works in the region where d1 and d2 are less than 3 in absolute value. If either d1 or d2 is greater than 3, 0 is returned for CALLV. Calculation time is well over a minute, but accuracy is basically to the last displayed decimal place!

Note that the newer 17bII+ ROM has changed order of precedence, i.e. (-1^N) works on the older version, but has to be explicitly written as ((-1)^N) for the newer version.

On a brighter note, the newer ROM is almost an order of magnitude faster at displaying equations, and opening the editing function.

Also, replace * with multiply, and / with divide. Replace SIGMA with the sum operator found under the second screen of MORE Alpha characters. I apologize for the inconvenience, but I can't seem to get these characters to paste correctly.

Bob Wang


PS=52
PE=45
Rf%=.5
T=6
S=.2054

Exact Call = 14.218722263
Formula = 14.2187222629
Exact Put = 5.88877127263
Formula = 5.8887712726


Taylor Series Approximation HP 17BII+:
Not using L() and G()
Execution Time > 1 minute
Character Count = 464
BLK.SCHLS.TAYLOR:
0*(PS+PE+RF%+T+S)
+IF(S(CALLV):
IF((LN(PS/PE)+(RF%/100+S^2/2)*T)/S/SQRT(T)>3:0:
PS*ABS(IF((LN(PS/PE)+(RF%/100+S^2/2)*T)/S/SQRT(T)<0:-.5:.5)
+SIGMA(N:0:25:1:((-1)^N)
*(((LN(PS/PE)+(RF%/100+S^2/2)*T)/S/SQRT(T))^(2*N+1))
/FACT(N)/2^N/(2*N+1))
/SQRT(2*PI))
-PE*EXP(-RF%*T/100)*ABS(
IF((LN(PS/PE)+(RF%/100-S^2/2)*T)/S/SQRT(T)<0:-.5:.5)
+SIGMA(N:0:25:1:((-1)^N)
*(((LN(PS/PE)+(RF%/100-S^2/2)*T)/S/SQRT(T))^(2*N+1))
/FACT(N)/2^N/(2*N+1))
/SQRT(2*PI)))-CALLV:
-PS+PE*EXP(-RF%*T/100)+CALLV-PUTV)


Forum Jump: