-
-
Notifications
You must be signed in to change notification settings - Fork 49
/
apl.sample
37 lines (27 loc) · 835 Bytes
/
apl.sample
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CND ← {
X ← ⍵
a ← 0.31938153 ¯0.356563782 1.781477937 ¯1.821255978 1.330274429
l ← |X
k ← ÷1+0.2316419×l
w ← 1 - (÷((2×(○1))*0.5)) × (*-(l×l)÷2) × (a +.× (k*⍳5))
((|0⌊×X)×(1-w))+(1-|0⌊×X)×w
}
⍝ S - current price
⍝ X - strike price
⍝ T - expiry in years
⍝ r - riskless interest rate
⍝ v - volatility
S ← 60
X ← 65
T ← 1
r ← 0.1
v ← 0.2
d1 ← { ((⍟S÷X)+(r+(v*2)÷2)×⍵)÷(v×⍵*0.5) }
d2 ← { (d1 ⍵) -v×⍵*0.5 }
⍝ Call price
callPrice ← { (S×CND(d1 ⍵))-(X×*-r×⍵)×CND(d2 ⍵) }
avg ← { (+/⍵) ÷ ⊃⍴ ⍵ }
⎕←avg callPrice¨ (⍳ 100000) ÷ 10000
⍝ Put price (not tested)
⍝ putPrice ← { (X×*-r×⍵)×CND(-d2 ⍵)-S×CND(-d1 ⍵) }
⍝ From https://github.com/melsman/apltail/blob/master/tests/blacksch.apl