Black-Scholes Autodifferentiation Example¶

In this example we are calculating values using the Black-Scholes model.

In [1]:
# Imports & Constants
import tributary.streaming as ts
import math
import matplotlib.pyplot as plt
import asyncio

TRADING_DAYS = 252

We can use the tributary $\textit{Erf}$ operator to define a Standard Normal CDF¶

The CDF is defined using $\Phi(x, \mu, \sigma) = \frac{1}{2}\left(1 + Erf\left(\frac{x-\mu}{\sigma\sqrt{2}}\right)\right)$ for $\mu = 0, \sigma = 1$

In [2]:
def normal_cdf(x):
    return (
        (
            ts.Erf(x / ts.Const((math.sqrt(2), 0), use_dual=True)) + ts.Const((1,0), use_dual=True)
        ) / ts.Const((2,0), use_dual=True)
    )

Now we can define our streams¶

For this example we are going use a Call Option.

We define the model as follows: $C_p = S\Phi(d_1) - Xe^{-rt}\Phi(d_2)$

$d_1 = \frac{ln\left(\frac{S}{X}\right) + \left(r + \frac{\sigma^2}{2}\right)t}{\sigma\sqrt{t}}$

$d_2 = d_1 - \sigma\sqrt{t}$

Where

$C_p$ - Price of Call Option

$S$ - Stock Price

$X$ - Strike Price

$r$ - Risk Free Interest Rate

$\sigma$ - Stock Price Volatility

$t$ - Time to Maturity

$\Phi$ - Standard Normal CDF (defined above)

In [3]:
def _time():
    for _ in [1, 2, 3, 4, 5, 6, 7]:
        yield (_, 1)

strike_price = ts.Const((203,0), use_dual=True)
stock_price = ts.Const((210,0), use_dual=True)

r = ts.Const((0.2175, 0), use_dual=True)

time = ts.Node(func=_time, name='Time', use_dual=True) / ts.Const((TRADING_DAYS, 0), use_dual=True)

vol = ts.Const((14.04, 0), use_dual=True)
   

d1 = (((ts.Log(stock_price / strike_price) + time * (r + vol**2 / ts.Const((2,0), use_dual=True)))
       / vol*ts.Sqrt(time)))

d2 = d1 - vol*ts.Sqrt(time)

opt_price_streaming = stock_price * normal_cdf(d1) - strike_price * ts.Exp(ts.Negate(r * time)) * normal_cdf(d2)
In [4]:
opt_price_streaming.dagre()
Out[4]:
DagreD3Widget()
In [4]:
# for static export
opt_price_streaming.graphviz()
Out[4]:
Graph Sub#b12e1 Sub#b12e1 Mult#ccc0c Mult#ccc0c Mult#ccc0c->Sub#b12e1 Const[(210, 0)] Const[(210, 0)] Const[(210, 0)]->Mult#ccc0c Div#1d57b Div#1d57b Const[(210, 0)]->Div#1d57b Const[(210, 0)]->Div#1d57b Div#07004 Div#07004 Div#07004->Mult#ccc0c Add#f7ad4 Add#f7ad4 Add#f7ad4->Div#07004 Erf#ea7d3 Erf#ea7d3 Erf#ea7d3->Add#f7ad4 Div#ecb19 Div#ecb19 Div#ecb19->Erf#ea7d3 Mult#0d864 Mult#0d864 Mult#0d864->Div#ecb19 Sub#dafed Sub#dafed Mult#0d864->Sub#dafed Div#4960e Div#4960e Div#4960e->Mult#0d864 Div#4960e->Mult#0d864 Add#331c9 Add#331c9 Add#331c9->Div#4960e Add#331c9->Div#4960e Log#9e97d Log#9e97d Log#9e97d->Add#331c9 Log#9e97d->Add#331c9 Div#1d57b->Log#9e97d Div#1d57b->Log#9e97d Const[(203, 0)] Const[(203, 0)] Const[(203, 0)]->Div#1d57b Const[(203, 0)]->Div#1d57b Mult#67090 Mult#67090 Const[(203, 0)]->Mult#67090 Mult#a5970 Mult#a5970 Mult#a5970->Add#331c9 Mult#a5970->Add#331c9 Div#66c81 Div#66c81 Div#66c81->Mult#a5970 Div#66c81->Mult#a5970 Sqrt#922dc Sqrt#922dc Div#66c81->Sqrt#922dc Div#66c81->Sqrt#922dc Mult#0f7aa Mult#0f7aa Div#66c81->Mult#0f7aa Sqrt#e2a1f Sqrt#e2a1f Div#66c81->Sqrt#e2a1f Time#f8f6c Time#f8f6c Time#f8f6c->Div#66c81 Time#f8f6c->Div#66c81 Time#f8f6c->Div#66c81 Time#f8f6c->Div#66c81 Time#f8f6c->Div#66c81 Time#f8f6c->Div#66c81 Const[(252, 0)] Const[(252, 0)] Const[(252, 0)]->Div#66c81 Const[(252, 0)]->Div#66c81 Const[(252, 0)]->Div#66c81 Const[(252, 0)]->Div#66c81 Const[(252, 0)]->Div#66c81 Const[(252, 0)]->Div#66c81 Add#e3469 Add#e3469 Add#e3469->Mult#a5970 Add#e3469->Mult#a5970 Const[(0.2175, 0)] Const[(0.2175, 0)] Const[(0.2175, 0)]->Add#e3469 Const[(0.2175, 0)]->Add#e3469 Const[(0.2175, 0)]->Mult#0f7aa Div#df3ba Div#df3ba Div#df3ba->Add#e3469 Div#df3ba->Add#e3469 Pow#32fb2 Pow#32fb2 Pow#32fb2->Div#df3ba Pow#32fb2->Div#df3ba Const[(14.04, 0)] Const[(14.04, 0)] Const[(14.04, 0)]->Div#4960e Const[(14.04, 0)]->Div#4960e Const[(14.04, 0)]->Pow#32fb2 Const[(14.04, 0)]->Pow#32fb2 Mult#3e53b Mult#3e53b Const[(14.04, 0)]->Mult#3e53b Const[2] Const[2] Const[2]->Pow#32fb2 Const[2]->Pow#32fb2 Const[(2, 0)] Const[(2, 0)] Const[(2, 0)]->Div#07004 Const[(2, 0)]->Div#df3ba Const[(2, 0)]->Div#df3ba Div#9d1db Div#9d1db Const[(2, 0)]->Div#9d1db Sqrt#922dc->Mult#0d864 Sqrt#922dc->Mult#0d864 Const[(1.4142135623730951, 0)] Const[(1.4142135623730951, 0)] Const[(1.4142135623730951, 0)]->Div#ecb19 Div#d2b7f Div#d2b7f Const[(1.4142135623730951, 0)]->Div#d2b7f Const[(1, 0)] Const[(1, 0)] Const[(1, 0)]->Add#f7ad4 Add#2dace Add#2dace Const[(1, 0)]->Add#2dace Mult#13f75 Mult#13f75 Mult#13f75->Sub#b12e1 Mult#67090->Mult#13f75 Exp#80435 Exp#80435 Exp#80435->Mult#67090 Negate#dbadc Negate#dbadc Negate#dbadc->Exp#80435 Mult#0f7aa->Negate#dbadc Div#9d1db->Mult#13f75 Add#2dace->Div#9d1db Erf#a6026 Erf#a6026 Erf#a6026->Add#2dace Div#d2b7f->Erf#a6026 Sub#dafed->Div#d2b7f Mult#3e53b->Sub#dafed Sqrt#e2a1f->Mult#3e53b
In [5]:
### Run It
out_streaming = ts.run(opt_price_streaming)
In [6]:
out_streaming.result()
Out[6]:
[(66.8776611932584, 24.352198840905817),
 (83.86128300705717, 11.832703898921917),
 (92.84070745210619, 6.752389217848223),
 (98.17842047720399, 4.188980644378843),
 (101.5952528598688, 2.7777662485790917),
 (103.93099724868352, 1.9662389828058664),
 (105.63795822831602, 1.4892578664798224)]
In [7]:
thetas = [x[1] for x in out_streaming.result()]
plt.plot([x[0] for x in _time()], thetas)
plt.xlabel('Time to Maturity')
plt.ylabel('Theta Values')
plt.gca().invert_xaxis()
In [8]:
option_value = [x[0] for x in out_streaming.result()]
plt.plot([x[0] for x in _time()], option_value)
plt.xlabel('Time to Maturity')
plt.ylabel('Option Value')
plt.gca().invert_xaxis()

Symbolic Construction¶

In [9]:
import numpy as np
import sympy as sy
from IPython.display import display, HTML
from sympy.stats import Normal as syNormal, cdf
sy.init_printing()

# adapted from https://gist.github.com/raddy/bd0e977dc8437a4f8276
#spot, strike, vol, days till expiry, interest rate, call or put (1,-1)
spot, strike, vol, dte, rate, cp = sy.symbols('spot strike vol dte rate cp')

T = dte / 260.
N = syNormal('N', 0.0, 1.0)

d1 = (sy.ln(spot / strike) + (0.5 * vol ** 2) * T) / (vol * sy.sqrt(T))
d2 = d1 - vol * sy.sqrt(T)

TimeValueExpr = sy.exp(-rate * T) * (cp * spot * cdf(N)(cp * d1) - cp * strike  * cdf(N)(cp * d2))
In [10]:
TimeValueExpr
Out[10]:
$\displaystyle \left(cp spot \left(\frac{\operatorname{erf}{\left(\frac{8.06225774829855 \sqrt{2} cp \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right)}{\sqrt{dte} vol} \right)}}{2} + \frac{1}{2}\right) - cp strike \left(\frac{\operatorname{erf}{\left(0.5 \sqrt{2} cp \left(- 0.0620173672946042 \sqrt{dte} vol + \frac{16.1245154965971 \cdot \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right)}{\sqrt{dte} vol}\right) \right)}}{2} + \frac{1}{2}\right)\right) e^{- 0.00384615384615385 dte rate}$
In [11]:
# Take derivative with respect to time
DeltaExpr = TimeValueExpr.diff(dte)
DeltaExpr
Out[11]:
$\displaystyle - 0.00384615384615385 rate \left(cp spot \left(\frac{\operatorname{erf}{\left(\frac{8.06225774829855 \sqrt{2} cp \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right)}{\sqrt{dte} vol} \right)}}{2} + \frac{1}{2}\right) - cp strike \left(\frac{\operatorname{erf}{\left(0.5 \sqrt{2} cp \left(- 0.0620173672946042 \sqrt{dte} vol + \frac{16.1245154965971 \cdot \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right)}{\sqrt{dte} vol}\right) \right)}}{2} + \frac{1}{2}\right)\right) e^{- 0.00384615384615385 dte rate} + \left(\frac{4.03112887414927 \sqrt{2} cp^{2} strike \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right) e^{- 130.0 cp^{2} \left(- 0.00384615384615385 \sqrt{dte} vol + \frac{0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}}{\sqrt{dte} vol}\right)^{2}}}{\sqrt{\pi} dte^{\frac{3}{2}} vol} + \frac{cp spot \left(\frac{0.0155043418236511 \sqrt{2} cp vol}{\sqrt{dte}} - \frac{4.03112887414927 \sqrt{2} cp \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right)}{dte^{\frac{3}{2}} vol}\right) e^{- \frac{130.0 cp^{2} \left(0.00192307692307692 dte vol^{2} + \log{\left(\frac{spot}{strike} \right)}\right)^{2}}{dte vol^{2}}}}{\sqrt{\pi}}\right) e^{- 0.00384615384615385 dte rate}$
In [12]:
import tributary.symbolic as ts
import tributary.streaming as tss
PriceClass = ts.construct_streaming(TimeValueExpr)


def strikes():
    strike = 205
    while strike < 220:
        yield strike
        strike += 2.5

price = PriceClass(spot=tss.Const(210.59),
                   strike=tss.Func(strikes),
                   vol=tss.Const(14.04),
                   dte=tss.Const(4),
                   rate=tss.Const(.2175),
                   cp=tss.Const(-1))
In [21]:
price.dagre()
Out[21]:
DagreD3Widget()
In [13]:
price.graphviz()
Out[13]:
Graph Collect#86118 Collect#86118 Mult#22ebf Mult#22ebf Mult#22ebf->Collect#86118 Sub#6f502 Sub#6f502 Sub#6f502->Mult#22ebf Mult#fae20 Mult#fae20 Mult#fae20->Sub#6f502 Mult#b2161 Mult#b2161 Mult#b2161->Mult#fae20 Const[-1] Const[-1] Const[-1]->Mult#b2161 Mult#812ba Mult#812ba Const[-1]->Mult#812ba Mult#72e81 Mult#72e81 Const[-1]->Mult#72e81 Mult#8351f Mult#8351f Const[-1]->Mult#8351f Const[210.59] Const[210.59] Const[210.59]->Mult#b2161 Div#7e025 Div#7e025 Const[210.59]->Div#7e025 Div#da4eb Div#da4eb Const[210.59]->Div#da4eb Add#6c7a1 Add#6c7a1 Add#6c7a1->Mult#fae20 Mult#1cbf6 Mult#1cbf6 Mult#1cbf6->Add#6c7a1 Erf#be737 Erf#be737 Erf#be737->Mult#1cbf6 Div#c8c9f Div#c8c9f Div#c8c9f->Erf#be737 Mult#59a13 Mult#59a13 Mult#59a13->Div#c8c9f Mult#812ba->Mult#59a13 Const[11.40175425099138] Const[11.40175425099138] Const[11.40175425099138]->Mult#812ba Add#c99df Add#c99df Add#c99df->Mult#59a13 Mult#73264 Mult#73264 Mult#73264->Add#c99df Mult#77de9 Mult#77de9 Mult#77de9->Mult#73264 Const[4] Const[4] Const[4]->Mult#77de9 Sqrt#9b4d5 Sqrt#9b4d5 Const[4]->Sqrt#9b4d5 Sqrt#69858 Sqrt#69858 Const[4]->Sqrt#69858 Mult#7f022 Mult#7f022 Const[4]->Mult#7f022 Sqrt#2c947 Sqrt#2c947 Const[4]->Sqrt#2c947 Mult#9cc32 Mult#9cc32 Const[4]->Mult#9cc32 Const[0.00192307692307692] Const[0.00192307692307692] Const[0.00192307692307692]->Mult#77de9 Const[0.00192307692307692]->Mult#7f022 Pow#105e4 Pow#105e4 Pow#105e4->Mult#73264 Const[14.04] Const[14.04] Const[14.04]->Pow#105e4 Mult#7d37f Mult#7d37f Const[14.04]->Mult#7d37f Mult#f5796 Mult#f5796 Const[14.04]->Mult#f5796 Pow#733de Pow#733de Const[14.04]->Pow#733de Mult#9e8bb Mult#9e8bb Const[14.04]->Mult#9e8bb Const[2] Const[2] Const[2]->Pow#105e4 Const[2]->Pow#733de Log#cb7fe Log#cb7fe Log#cb7fe->Add#c99df Div#7e025->Log#cb7fe Func[strikes] Func[strikes] Func[strikes]->Div#7e025 Func[strikes]->Mult#72e81 Func[strikes]->Div#da4eb Mult#7d37f->Div#c8c9f Sqrt#9b4d5->Mult#7d37f Const[0.5] Const[0.5] Const[0.5]->Add#6c7a1 Const[0.5]->Mult#1cbf6 Add#3d04e Add#3d04e Const[0.5]->Add#3d04e Mult#991cb Mult#991cb Const[0.5]->Mult#991cb Mult#b5e5a Mult#b5e5a Mult#b5e5a->Sub#6f502 Mult#72e81->Mult#b5e5a Add#3d04e->Mult#b5e5a Mult#991cb->Add#3d04e Erf#a0d82 Erf#a0d82 Erf#a0d82->Mult#991cb Mult#f7b9d Mult#f7b9d Mult#f7b9d->Erf#a0d82 Mult#8351f->Mult#f7b9d Const[0.7071067811865476] Const[0.7071067811865476] Const[0.7071067811865476]->Mult#8351f Add#78175 Add#78175 Add#78175->Mult#f7b9d Mult#f5796->Add#78175 Mult#f5583 Mult#f5583 Mult#f5583->Mult#f5796 Sqrt#69858->Mult#f5583 Const[-0.0620173672946042] Const[-0.0620173672946042] Const[-0.0620173672946042]->Mult#f5583 Div#3eab5 Div#3eab5 Div#3eab5->Add#78175 Mult#ac071 Mult#ac071 Mult#ac071->Div#3eab5 Add#dabc6 Add#dabc6 Add#dabc6->Mult#ac071 Mult#d6113 Mult#d6113 Mult#d6113->Add#dabc6 Mult#7f022->Mult#d6113 Pow#733de->Mult#d6113 Log#1b1eb Log#1b1eb Log#1b1eb->Add#dabc6 Div#da4eb->Log#1b1eb Const[16.1245154965971] Const[16.1245154965971] Const[16.1245154965971]->Mult#ac071 Mult#9e8bb->Div#3eab5 Sqrt#2c947->Mult#9e8bb Exp#3c67b Exp#3c67b Exp#3c67b->Mult#22ebf Mult#b86a8 Mult#b86a8 Mult#b86a8->Exp#3c67b Mult#9cc32->Mult#b86a8 Const[-0.00384615384615385] Const[-0.00384615384615385] Const[-0.00384615384615385]->Mult#9cc32 Const[0.2175] Const[0.2175] Const[0.2175]->Mult#b86a8
In [14]:
DeltaClass = ts.construct_streaming(DeltaExpr)

delta = DeltaClass(spot=tss.Const(210.59),
                   strike=tss.Func(strikes),
                   vol=tss.Const(14.04),
                   dte=tss.Const(4),
                   rate=tss.Const(.2175),
                   cp=tss.Const(-1))
In [20]:
delta.dagre()
Out[20]:
DagreD3Widget()
In [15]:
delta.graphviz()
Out[15]:
Graph Collect#3f9dc Collect#3f9dc Add#26b73 Add#26b73 Add#26b73->Collect#3f9dc Mult#f7435 Mult#f7435 Mult#f7435->Add#26b73 Mult#c6fb3 Mult#c6fb3 Mult#c6fb3->Mult#f7435 Mult#fa7dd Mult#fa7dd Mult#fa7dd->Mult#c6fb3 Const[0.2175] Const[0.2175] Const[0.2175]->Mult#fa7dd Mult#832df Mult#832df Const[0.2175]->Mult#832df Mult#5f670 Mult#5f670 Const[0.2175]->Mult#5f670 Const[-0.00384615384615385] Const[-0.00384615384615385] Const[-0.00384615384615385]->Mult#fa7dd Mult#93148 Mult#93148 Const[-0.00384615384615385]->Mult#93148 Mult#0c028 Mult#0c028 Const[-0.00384615384615385]->Mult#0c028 Mult#28a8f Mult#28a8f Const[-0.00384615384615385]->Mult#28a8f Sub#61fe8 Sub#61fe8 Sub#61fe8->Mult#c6fb3 Mult#a09d3 Mult#a09d3 Mult#a09d3->Sub#61fe8 Mult#1f931 Mult#1f931 Mult#1f931->Mult#a09d3 Const[-1] Const[-1] Const[-1]->Mult#1f931 Mult#9ccbc Mult#9ccbc Const[-1]->Mult#9ccbc Mult#e0606 Mult#e0606 Const[-1]->Mult#e0606 Mult#5cbcc Mult#5cbcc Const[-1]->Mult#5cbcc Pow#a1b58 Pow#a1b58 Const[-1]->Pow#a1b58 Pow#174eb Pow#174eb Const[-1]->Pow#174eb Mult#1821b Mult#1821b Const[-1]->Mult#1821b Mult#295a5 Mult#295a5 Const[-1]->Mult#295a5 Mult#919ed Mult#919ed Const[-1]->Mult#919ed Pow#50aad Pow#50aad Const[-1]->Pow#50aad Const[210.59] Const[210.59] Const[210.59]->Mult#1f931 Div#06a71 Div#06a71 Const[210.59]->Div#06a71 Div#f3227 Div#f3227 Const[210.59]->Div#f3227 Div#3ebd9 Div#3ebd9 Const[210.59]->Div#3ebd9 Div#733f8 Div#733f8 Const[210.59]->Div#733f8 Const[210.59]->Mult#1821b Div#9e12b Div#9e12b Const[210.59]->Div#9e12b Div#90819 Div#90819 Const[210.59]->Div#90819 Add#8212b Add#8212b Add#8212b->Mult#a09d3 Mult#e645c Mult#e645c Mult#e645c->Add#8212b Erf#7d766 Erf#7d766 Erf#7d766->Mult#e645c Div#2ba4c Div#2ba4c Div#2ba4c->Erf#7d766 Mult#3cf00 Mult#3cf00 Mult#3cf00->Div#2ba4c Mult#9ccbc->Mult#3cf00 Const[11.40175425099138] Const[11.40175425099138] Const[11.40175425099138]->Mult#9ccbc Add#3ae39 Add#3ae39 Add#3ae39->Mult#3cf00 Mult#32ec7 Mult#32ec7 Mult#32ec7->Add#3ae39 Mult#22255 Mult#22255 Mult#22255->Mult#32ec7 Const[4] Const[4] Const[4]->Mult#22255 Sqrt#f7d23 Sqrt#f7d23 Const[4]->Sqrt#f7d23 Sqrt#087f8 Sqrt#087f8 Const[4]->Sqrt#087f8 Mult#f5c08 Mult#f5c08 Const[4]->Mult#f5c08 Sqrt#0542d Sqrt#0542d Const[4]->Sqrt#0542d Const[4]->Mult#93148 Mult#b87ec Mult#b87ec Const[4]->Mult#b87ec Sqrt#3e075 Sqrt#3e075 Const[4]->Sqrt#3e075 Mult#8515a Mult#8515a Const[4]->Mult#8515a Sqrt#64a3e Sqrt#64a3e Const[4]->Sqrt#64a3e Pow#b39d5 Pow#b39d5 Const[4]->Pow#b39d5 Sqrt#90816 Sqrt#90816 Const[4]->Sqrt#90816 Mult#b8bf1 Mult#b8bf1 Const[4]->Mult#b8bf1 Pow#2c5a5 Pow#2c5a5 Const[4]->Pow#2c5a5 Mult#9ca37 Mult#9ca37 Const[4]->Mult#9ca37 Mult#68dab Mult#68dab Const[4]->Mult#68dab Const[4]->Mult#28a8f Const[0.00192307692307692] Const[0.00192307692307692] Const[0.00192307692307692]->Mult#22255 Const[0.00192307692307692]->Mult#f5c08 Const[0.00192307692307692]->Mult#b87ec Const[0.00192307692307692]->Mult#8515a Const[0.00192307692307692]->Mult#b8bf1 Const[0.00192307692307692]->Mult#9ca37 Pow#d0ad4 Pow#d0ad4 Pow#d0ad4->Mult#32ec7 Const[14.04] Const[14.04] Const[14.04]->Pow#d0ad4 Mult#bde15 Mult#bde15 Const[14.04]->Mult#bde15 Mult#cdc58 Mult#cdc58 Const[14.04]->Mult#cdc58 Pow#2a9d9 Pow#2a9d9 Const[14.04]->Pow#2a9d9 Mult#5fb17 Mult#5fb17 Const[14.04]->Mult#5fb17 Pow#a189e Pow#a189e Const[14.04]->Pow#a189e Mult#2a3dd Mult#2a3dd Const[14.04]->Mult#2a3dd Pow#6a38b Pow#6a38b Const[14.04]->Pow#6a38b Mult#4c36b Mult#4c36b Const[14.04]->Mult#4c36b Mult#f5f03 Mult#f5f03 Const[14.04]->Mult#f5f03 Mult#e98c1 Mult#e98c1 Const[14.04]->Mult#e98c1 Pow#05881 Pow#05881 Const[14.04]->Pow#05881 Mult#12df8 Mult#12df8 Const[14.04]->Mult#12df8 Pow#70aa0 Pow#70aa0 Const[14.04]->Pow#70aa0 Pow#3b81a Pow#3b81a Const[14.04]->Pow#3b81a Const[2] Const[2] Const[2]->Pow#d0ad4 Const[2]->Pow#2a9d9 Const[2]->Pow#a1b58 Const[2]->Pow#a189e Const[2]->Pow#174eb Pow#f8db4 Pow#f8db4 Const[2]->Pow#f8db4 Const[2]->Pow#6a38b Const[2]->Pow#05881 Const[2]->Pow#50aad Pow#af469 Pow#af469 Const[2]->Pow#af469 Const[2]->Pow#70aa0 Const[2]->Pow#3b81a Log#e9baa Log#e9baa Log#e9baa->Add#3ae39 Div#06a71->Log#e9baa Func[strikes] Func[strikes] Func[strikes]->Div#06a71 Func[strikes]->Mult#e0606 Func[strikes]->Div#f3227 Mult#5e976 Mult#5e976 Func[strikes]->Mult#5e976 Func[strikes]->Div#3ebd9 Func[strikes]->Div#733f8 Func[strikes]->Div#9e12b Func[strikes]->Div#90819 Mult#bde15->Div#2ba4c Sqrt#f7d23->Mult#bde15 Const[0.5] Const[0.5] Const[0.5]->Add#8212b Const[0.5]->Mult#e645c Add#05742 Add#05742 Const[0.5]->Add#05742 Mult#fcf0f Mult#fcf0f Const[0.5]->Mult#fcf0f Mult#36acb Mult#36acb Mult#36acb->Sub#61fe8 Mult#e0606->Mult#36acb Add#05742->Mult#36acb Mult#fcf0f->Add#05742 Erf#312e8 Erf#312e8 Erf#312e8->Mult#fcf0f Mult#6bb04 Mult#6bb04 Mult#6bb04->Erf#312e8 Mult#5cbcc->Mult#6bb04 Const[0.7071067811865476] Const[0.7071067811865476] Const[0.7071067811865476]->Mult#5cbcc Add#c259a Add#c259a Add#c259a->Mult#6bb04 Mult#cdc58->Add#c259a Mult#4e182 Mult#4e182 Mult#4e182->Mult#cdc58 Sqrt#087f8->Mult#4e182 Const[-0.0620173672946042] Const[-0.0620173672946042] Const[-0.0620173672946042]->Mult#4e182 Div#f3ab5 Div#f3ab5 Div#f3ab5->Add#c259a Mult#4d596 Mult#4d596 Mult#4d596->Div#f3ab5 Add#0a5de Add#0a5de Add#0a5de->Mult#4d596 Mult#39714 Mult#39714 Mult#39714->Add#0a5de Mult#f5c08->Mult#39714 Pow#2a9d9->Mult#39714 Log#f04ba Log#f04ba Log#f04ba->Add#0a5de Div#f3227->Log#f04ba Const[16.1245154965971] Const[16.1245154965971] Const[16.1245154965971]->Mult#4d596 Mult#5fb17->Div#f3ab5 Sqrt#0542d->Mult#5fb17 Exp#e5972 Exp#e5972 Exp#e5972->Mult#f7435 Mult#832df->Exp#e5972 Mult#93148->Mult#832df Mult#a239f Mult#a239f Mult#a239f->Add#26b73 Add#f4e1b Add#f4e1b Add#f4e1b->Mult#a239f Div#ed4fb Div#ed4fb Div#ed4fb->Add#f4e1b Mult#7cf63 Mult#7cf63 Mult#7cf63->Div#ed4fb Mult#6725a Mult#6725a Mult#6725a->Mult#7cf63 Mult#5e976->Mult#6725a Mult#3ead4 Mult#3ead4 Mult#3ead4->Mult#5e976 Pow#a1b58->Mult#3ead4 Const[5.700877125495683] Const[5.700877125495683] Const[5.700877125495683]->Mult#3ead4 Const[5.700877125495683]->Mult#919ed Add#7ed82 Add#7ed82 Add#7ed82->Mult#6725a Mult#639f0 Mult#639f0 Mult#639f0->Add#7ed82 Mult#b87ec->Mult#639f0 Pow#a189e->Mult#639f0 Log#683b6 Log#683b6 Log#683b6->Add#7ed82 Div#3ebd9->Log#683b6 Exp#d733a Exp#d733a Exp#d733a->Mult#7cf63 Mult#af8f9 Mult#af8f9 Mult#af8f9->Exp#d733a Mult#0b342 Mult#0b342 Mult#0b342->Mult#af8f9 Pow#174eb->Mult#0b342 Const[-130.0] Const[-130.0] Const[-130.0]->Mult#0b342 Mult#5ce97 Mult#5ce97 Const[-130.0]->Mult#5ce97 Pow#f8db4->Mult#af8f9 Add#12bdf Add#12bdf Add#12bdf->Pow#f8db4 Mult#2a3dd->Add#12bdf Mult#0c028->Mult#2a3dd Sqrt#3e075->Mult#0c028 Div#617d5 Div#617d5 Div#617d5->Add#12bdf Add#3afcc Add#3afcc Add#3afcc->Div#617d5 Mult#79eae Mult#79eae Mult#79eae->Add#3afcc Mult#8515a->Mult#79eae Pow#6a38b->Mult#79eae Log#ddfe2 Log#ddfe2 Log#ddfe2->Add#3afcc Div#733f8->Log#ddfe2 Mult#4c36b->Div#617d5 Sqrt#64a3e->Mult#4c36b Mult#f5f03->Div#ed4fb Mult#1b827 Mult#1b827 Mult#1b827->Mult#f5f03 Pow#b39d5->Mult#1b827 Const[1.5] Const[1.5] Const[1.5]->Pow#b39d5 Const[1.5]->Pow#2c5a5 Const[1.7724538509055159] Const[1.7724538509055159] Const[1.7724538509055159]->Mult#1b827 Div#0fe95 Div#0fe95 Const[1.7724538509055159]->Div#0fe95 Div#0fe95->Add#f4e1b Mult#98738 Mult#98738 Mult#98738->Div#0fe95 Mult#26478 Mult#26478 Mult#26478->Mult#98738 Mult#1821b->Mult#26478 Sub#a7b41 Sub#a7b41 Sub#a7b41->Mult#26478 Div#b0355 Div#b0355 Div#b0355->Sub#a7b41 Mult#e98c1->Div#b0355 Mult#295a5->Mult#e98c1 Const[0.021926450482675792] Const[0.021926450482675792] Const[0.021926450482675792]->Mult#295a5 Sqrt#90816->Div#b0355 Div#2cdb5 Div#2cdb5 Div#2cdb5->Sub#a7b41 Mult#7238e Mult#7238e Mult#7238e->Div#2cdb5 Mult#919ed->Mult#7238e Add#a22fb Add#a22fb Add#a22fb->Mult#7238e Mult#e228a Mult#e228a Mult#e228a->Add#a22fb Mult#b8bf1->Mult#e228a Pow#05881->Mult#e228a Log#da5a1 Log#da5a1 Log#da5a1->Add#a22fb Div#9e12b->Log#da5a1 Mult#12df8->Div#2cdb5 Pow#2c5a5->Mult#12df8 Exp#358d5 Exp#358d5 Exp#358d5->Mult#98738 Div#92226 Div#92226 Div#92226->Exp#358d5 Mult#2b069 Mult#2b069 Mult#2b069->Div#92226 Mult#5ce97->Mult#2b069 Pow#50aad->Mult#5ce97 Pow#af469->Mult#2b069 Add#27db4 Add#27db4 Add#27db4->Pow#af469 Mult#91d16 Mult#91d16 Mult#91d16->Add#27db4 Mult#9ca37->Mult#91d16 Pow#70aa0->Mult#91d16 Log#3707c Log#3707c Log#3707c->Add#27db4 Div#90819->Log#3707c Mult#68dab->Div#92226 Pow#3b81a->Mult#68dab Exp#ea990 Exp#ea990 Exp#ea990->Mult#a239f Mult#5f670->Exp#ea990 Mult#28a8f->Mult#5f670
In [16]:
price_res = price.run()
In [17]:
price_res.result()
Out[17]:
$\displaystyle \left[ 124.819893324937, \ 126.825081704051, \ 128.835012372279, \ 130.849601056514, \ 132.868765739655, \ 134.892426578923\right]$
In [18]:
delta_res = delta.run()
In [19]:
delta_res.result()
Out[19]:
$\displaystyle \left[ 12.2036238907793, \ 12.2777996949155, \ 12.3509293667847, \ 12.4230314559647, \ 12.4941240694366, \ 12.5642248848988\right]$
In [ ]: