Fazer Fácil, o maior site de ensino de coisas práticas do Brasil
Pesquisa Personalizada
Início >>Categorias>>Site>>

Modelo Black-Scholes para a HP-12C

Opcode # Operation Remarks
0.196854
STO 3 N(x) 1st coefficient
0.115194
STO 4 N(x) 2nd coefficient
0.000344
STO 5 N(x) 3rd coefficient
0.019527
STO 6 N(x) 4th coefficient
f P/R Goes into programming mode
f CLEAR PRGM Clears programming memory
01 RCL n t
02 g vx vt
03 RCL PMT 100.s
04 % vt.s
05 STO 2 Let mem2 = vt.s
06 RCL n t
07 RCL i 100.r
08 % r.t
09 RCL 2 vt.s
10 2
11 Yx t.s2
12 2
13 ÷ t.s2/2
14 + (r + s2/2).t
15 RCL PV S
16 RCL FV K
17 ÷ S/K
18 g LN ln(S/K)
19 + ln(S/K) + (r + s2/2).t
20 RCL 2 vt.s
21 ÷ d1
22 STO 1 Let mem1 = d1
23 STO 0 Let mem0 = d1
24 RCL 2 vt.s
25 STO - 0 Let mem0 = d1 - vt.s = d2
26 RCL 0 swap mem0 and mem1
27 RCL 1
28 STO 0
29 R?
30 STO 1 swap done
31 RCL 0 Get d1 or d2 (whichever is at mem0) and
32 4 calculate cummulative normal distribution
33 Yx d4
34 RCL 6 c4
35 x?y
36 × c4.d4
37 g LSTx d4
38 g vx d2
39 RCL 4 c2
40 x?y
41 × c2.d2
42 g LSTx d2
43 g vx d (guaranteed to be positive)
44 RCL 3 c1
45 × c1.d
46 + c1.d+c2.d2
47 + c1.d+c2.d2+c4.d4
48 RCL 0 d
49 6
50 Yx d6
51 g vx d3 (guaranteed to be positive)
52 RCL 5 c3
53 × c3.d3
54 + c1.d+c2.d2+c3.d3+c4.d4
55 1
56 + 1+c1.d+c2.d2+c3.d3+c4.d4
57 4
58 CHS
59 Yx (1+c1.d+c2.d2+c3.d3+c4.d4)-4
60 2
61 ÷ (1+c1.d+c2.d2+c3.d3+c4.d4)-4/2
62 0 Current result is 1-N(abs(d))
63 RCL 0
64 g x=y d < 0?
65 GTO 72 d<0, N(d)=1-N(-d), we are done, jump ahead
66 R? d>0, need to do 1-(1-(N(d))
67 R? Restore 1-N(d) into register X
68 CHS
69 1
70 + N(d) corrected, we are done
71 GTO 74 Jump ahead
72 R? Restore N(d) into register X
73 R?
74 STO 0 Let mem0 = N(d)
75 RCL 2 mem2 is vt.s at 1st round, zero otherwise
76 g x=0 mem2 is zero?
77 GTO 81 Jump to calculate call and put
78 0
79 STO 2 Let mem2 = 0
80 GTO 26 Go back to 2nd round of N(d) calculation
81 RCL PV S
82 STO × 1 Let mem1 = S.N(d1)
83 RCL n t
84 RCL i r
85 % r.t
86 CHS -r.t
87 g ex e-r.t
88 RCL FV K
89 × K.e-rt
90 STO × 0 Let mem0 = K.e-rt.N(d2)
91 RCL PV S
92 - K.e-rt - S
93 RCL 1 S.N(d1)
94 RCL 0 K.e-rt.N(d2)
95 - S.N(d1) - K.e-rt.N(d2) = Call
96 + Call + K.e-rt - S = Put
97 g LSTx Call at X, put at Y
f P/R Back to normal mode

This was a funny challenge: putting the Black-Scholes equation into HP-12C. It calculates the theoretical premium for calls and puts.

Como usar o modelo Black-Scholes na HP-12C

  • Fill "i" register with the interest, as usual (e.g. 12 for 12% per year).
  • Fill "PV" with the spot value of the underlying asset.
  • Fill "PMT" with the volatility, as a percentage (e.g. 25 for 25% per year).
  • Fill "n" with the time to expiration. Use the same time unit as interest and volatility. If you enter interest and volatility as % per year, you must supply the time to expiration expressed in years (e.g. 2 months = 0.1666 years).
  • Fill "FV" with the strike of the option.
  • Press R/S to get the call value. It takes several seconds.
  • The shown value is the call value. Press x?y to see the put value, and again to go back to call value.

The option parameters are not changed during calculation, so you can fiddle with them and press R/S as many times as you want.

Notas da implementação do modelo Black-Scholes

Não foi fácil criar uma equação que se adequasse a HP-12C, já que um programa para ela pode ter até 99 passos, a linguagem de programação é "pobre" e usar os 99 passos reduz o números de posições de memória disponíveis, o que por sua vez torna o programa mais complicado e força o uso de mais opcodes.

A função mais complicada é a distribuição normal cumulativa, que foi implementada usando a aproximação racional com precisão de 4 dígitos decimais. O coeficiente dessa função é adicionado como parte do programa mas ele precisa de posições de memória ao invés do programa. Uma função melhor com sete coeficientes não pode ser utilizada devido ao opcode e limites de memória.

Veja também:

Pesquisa Personalizada

Fazer Fácil - Política de Privacidade - Um site da HHC Internet