Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speed #13

Open
joshimar12 opened this issue Jul 5, 2016 · 0 comments
Open

Speed #13

joshimar12 opened this issue Jul 5, 2016 · 0 comments

Comments

@joshimar12
Copy link

I really like this package but unless I am misusing it I think it suffers terribly from lack of speed. I am currently trying to calculate the greeks of a portfolio of 4 call options by two methods, namely AD and finite differences. Even when using the gradient function from ad the finite differences method still outperforms the ad implementation in terms of speed by quite a bit. I am still relatively new to python, so I may just be implementing it in a way so that it is slower. I have attached my code below, any advice would be appreciated.

from ad import adnumber
from ad.admath import *
import numpy as np
import time

time_start = time.clock()
def AD_vega_singlesim(M,S,v,T,r,delta,K,S1,v1,T1,r1,K1,S2,v2,T2,r2,K2,S3,v3,T3,r3,K3):
sensi1 = np.zeros(4)
sensi = np.zeros(4)
sensi2 = np.zeros(4)
sensi3 = np.zeros(4)
for j in range(1, int(M)):
z = np.random.normal(0,1)
price = ((S_exp((r - delta - .5_(v2))T + ( v * z_sqrt(T))) - K)* exp(-r_T))/M
price1 = ((S1
.exp((r1 - delta - .5*(v1
2))T1 + ( v1 * z_sqrt(T1))) - K1)* exp(-r1_T1))/M
price2 = ((S2_exp((r2 - delta - .5
(v2__2))T2 + ( v2 * z_sqrt(T2))) - K2) exp(-r2_T2))/M
price3 = ((S3_exp((r3 - delta - .5_(v3__2))T3 + ( v3 * z_sqrt(T3))) - K3) exp(-r3*T3))/M

    if price>0:
        sensi += price.gradient((r,v,T,S))
    if price1>0:
        sensi1 +=  price1.gradient((r1,v1,T1,S1))
    if price2>0:
        sensi2 +=  price2.gradient((r2,v2,T2,S2))
    if price3>0:
        sensi3 +=  price3.gradient((r3,v3,T3,S3))
return sensi,sensi1,sensi2,sensi3

print AD_vega_singlesim(1000,adnumber(100),adnumber(.2),adnumber(1.0),adnumber(.05),.01,100.0,adnumber(110),adnumber(.25),adnumber(2),adnumber(.06),125,adnumber(125),adnumber(.31),adnumber(2.5),adnumber(.07),122,
adnumber(150),adnumber(.13),adnumber(1.5),adnumber(.05),143)
time_elapsed = (time.clock() - time_start)
print time_elapsed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant