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