From 5dbe9f58b0bf082acf56f95e80cf8602cd550e7f Mon Sep 17 00:00:00 2001 From: northern-64bit <75195383+northern-64bit@users.noreply.github.com> Date: Sun, 4 Dec 2022 22:43:10 +0100 Subject: Fixing the greeks command (#3690) --- openbb_terminal/stocks/options/op_helpers.py | 35 ++++++++++-------------- openbb_terminal/stocks/options/yfinance_model.py | 2 +- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/openbb_terminal/stocks/options/op_helpers.py b/openbb_terminal/stocks/options/op_helpers.py index 647bfced2c5..797526d2fb0 100644 --- a/openbb_terminal/stocks/options/op_helpers.py +++ b/openbb_terminal/stocks/options/op_helpers.py @@ -282,19 +282,14 @@ class Option: def Vega(self): """Vega for 1% change in vol""" - return ( - 0.01 - * self.price - * np.exp(-self.div_cont * self.exp_time) - * norm.pdf(self.d1) - * self.exp_time**0.5 - ) + dfq = np.exp(-self.div_cont * self.exp_time) + return 0.01 * self.price * dfq * norm.pdf(self.d1) * self.exp_time**0.5 - def Theta(self): - """Theta for 1 day change""" + def Theta(self, time_factor=1.0 / 365.0): + """Theta, by default for 1 calendar day change""" df = np.exp(-self.risk_free * self.exp_time) dfq = np.exp(-self.div_cont * self.exp_time) - tmptheta = (1.0 / 365.0) * ( + tmptheta = time_factor * ( -0.5 * self.price * dfq @@ -310,7 +305,7 @@ class Option: return tmptheta def Rho(self): - df = e ** -(self.risk_free * self.exp_time) + df = np.exp(-self.risk_free * self.exp_time) return ( self.Type * self.strike @@ -321,30 +316,28 @@ class Option: ) def Phi(self): + dfq = np.exp(-self.div_cont * self.exp_time) return ( 0.01 * -self.Type * self.exp_time * self.price - * e ** (-self.div_cont * self.exp_time) + * dfq * norm.cdf(self.Type * self.d1) ) # 2nd order greeks def Gamma(self): - return ( - e ** (-self.div_cont * self.exp_time) - * norm.pdf(self.d1) - / (self.price * self.sigmaT) - ) + dfq = np.exp(-self.div_cont * self.exp_time) + return dfq * norm.pdf(self.d1) / (self.price * self.sigmaT) - def Charm(self): - """Calculates Charm for one day change""" - dfq = e ** (-self.div_cont * self.exp_time) + def Charm(self, time_factor=1.0 / 365.0): + """Calculates Charm, by default for 1 calendar day change""" + dfq = np.exp(-self.div_cont * self.exp_time) cdf = norm.cdf(self.Type * self.d1) return ( - (1.0 / 365.0) + time_factor * -dfq * ( norm.pdf(self.d1) diff --git a/openbb_terminal/stocks/options/yfinance_model.py b/openbb_terminal/stocks/options/yfinance_model.py index ee24191290f..769d83e38d5 100644 --- a/openbb_terminal/stocks/options/yfinance_model.py +++ b/openbb_terminal/stocks/options/yfinance_model.py @@ -539,7 +539,7 @@ def get_greeks( risk_free = rf if rf is not None else get_rf() expire_dt = datetime.strptime(expire, "%Y-%m-%d") - dif = (expire_dt - datetime.now()).seconds / (60 * 60 * 24) + dif = (expire_dt - datetime.now()).total_seconds() / (60 * 60 * 24) strikes = [] for _, row in chain.iterrows(): -- cgit v1.2.3