diff --git a/gamestonk_terminal/jupyter/reports/reports_controller.py b/gamestonk_terminal/jupyter/reports/reports_controller.py index 4117422ce35..86c6d0c16b2 100644 --- a/gamestonk_terminal/jupyter/reports/reports_controller.py +++ b/gamestonk_terminal/jupyter/reports/reports_controller.py @@ -191,8 +191,6 @@ Select one of the following reports:[/info][cmds] d_report_params["report_name"] = notebook_output - print(notebook_template) - pm.execute_notebook( notebook_template + ".ipynb", notebook_output + ".ipynb", diff --git a/gamestonk_terminal/stocks/options/options_controller.py b/gamestonk_terminal/stocks/options/options_controller.py index a40dd1f04f7..c6985175c1f 100644 --- a/gamestonk_terminal/stocks/options/options_controller.py +++ b/gamestonk_terminal/stocks/options/options_controller.py @@ -1100,12 +1100,23 @@ Expiry: [/param]{self.selected_date or None} prog="vsurf", description="Plot 3D volatility surface.", ) + parser.add_argument( + "-z", + "--z-axis", + default="IV", + dest="z", + choices=["IV", "OI", "LP"], + type=str, + help="The data for the Z axis", + ) ns_parser = parse_known_args_and_warn( parser, other_args, export_allowed=EXPORT_ONLY_FIGURES_ALLOWED ) if ns_parser: - yfinance_view.display_vol_surface(self.ticker, export=ns_parser.export) + yfinance_view.display_vol_surface( + self.ticker, export=ns_parser.export, z=ns_parser.z + ) def call_parity(self, other_args: List[str]): """Process parity command""" diff --git a/gamestonk_terminal/stocks/options/yfinance_model.py b/gamestonk_terminal/stocks/options/yfinance_model.py index bf0da8f7bb6..172d4fb5fe1 100644 --- a/gamestonk_terminal/stocks/options/yfinance_model.py +++ b/gamestonk_terminal/stocks/options/yfinance_model.py @@ -193,11 +193,12 @@ def get_iv_surface(ticker: str) -> pd.DataFrame: stock = yf.Ticker(ticker) dates = stock.options vol_df = pd.DataFrame() + columns = ["strike", "impliedVolatility", "openInterest", "lastPrice"] for date in dates: - df = stock.option_chain(date).calls[["strike", "impliedVolatility"]] + df = stock.option_chain(date).calls[columns] df["dte"] = get_dte(date) vol_df = pd.concat([vol_df, df], axis=0) - df = stock.option_chain(date).puts[["strike", "impliedVolatility"]] + df = stock.option_chain(date).puts[columns] df["dte"] = get_dte(date) vol_df = pd.concat([vol_df, df], axis=0) return vol_df diff --git a/gamestonk_terminal/stocks/options/yfinance_view.py b/gamestonk_terminal/stocks/options/yfinance_view.py index 986e5898cac..67c56d03672 100644 --- a/gamestonk_terminal/stocks/options/yfinance_view.py +++ b/gamestonk_terminal/stocks/options/yfinance_view.py @@ -934,15 +934,17 @@ def show_binom( ) -def display_vol_surface(ticker: str, export: str = ""): +def display_vol_surface(ticker: str, export: str = "", z: str = "IV"): """Display vol surface Parameters ---------- - ticker: str + ticker : str Ticker to get surface for - export: str + export : str Format to export data + z : str + The variable for the Z axis """ data = yfinance_model.get_iv_surface(ticker) @@ -951,15 +953,23 @@ def display_vol_surface(ticker: str, export: str = ""): return X = data.dte Y = data.strike - Z = data.impliedVolatility + if z == "IV": + Z = data.impliedVolatility + label = "Volatility" + elif z == "OI": + Z = data.openInterest + label = "Open Interest" + elif z == "LP": + Z = data.lastPrice + label = "Last Price" fig = plt.figure() ax = plt.axes(projection="3d") ax.plot_trisurf(X, Y, Z, cmap="jet", linewidth=0.2) ax.set_xlabel("DTE") ax.set_ylabel("Strike") - ax.set_zlabel("IV") + ax.set_zlabel(z) fig.tight_layout() - fig.suptitle(f"Volatility Surface for {ticker}") + fig.suptitle(f"{label} Surface for {ticker}") if gtff.USE_ION: plt.ion() plt.show() @@ -969,4 +979,4 @@ def display_vol_surface(ticker: str, export: str = ""): "vsurf", data, ) - print("") + console.print("") diff --git a/website/content/stocks/options/vsurf/_index.md b/website/content/stocks/options/vsurf/_index.md index ee09bab42b5..e23796bb874 100644 --- a/website/content/stocks/options/vsurf/_index.md +++ b/website/content/stocks/options/vsurf/_index.md @@ -1,5 +1,5 @@ ``` -usage: vsurf [-h] [--export {png,jpg,pdf,svg}] +usage: vsurf [-h] [-z {IV,OI,LP}] [--export {png,jpg,pdf,svg}] ``` Plot 3D volatility surface. @@ -7,6 +7,8 @@ Plot 3D volatility surface. ``` optional arguments: -h, --help show this help message (default: False) + -z {IV,OI,LP}, --z-axis {IV,OI,LP} + variable to be used as the z-axis (default: IV) --export {png,jpg,pdf,svg} Export figure into png, jpg, pdf, svg (default: ) ```