summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornorthern-64bit <75195383+northern-64bit@users.noreply.github.com>2022-12-04 22:43:10 +0100
committerGitHub <noreply@github.com>2022-12-04 16:43:10 -0500
commit5dbe9f58b0bf082acf56f95e80cf8602cd550e7f (patch)
tree5817aa5cad504935711a73b58f656dffe66b20f8
parentfaca7ab67d1ce5d0ae0e5c862332bcfc37f72ea9 (diff)
Fixing the greeks command (#3690)
-rw-r--r--openbb_terminal/stocks/options/op_helpers.py35
-rw-r--r--openbb_terminal/stocks/options/yfinance_model.py2
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():