From afee28a997a32eab6203e5498e53aba4ae403736 Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 13:57:40 -0400 Subject: [PATCH 1/7] add option to configure options that get shown --- gamestonk_terminal/options/README.md | 11 +++++++ gamestonk_terminal/options/chains_view.py | 35 +++++++++++++++-------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/gamestonk_terminal/options/README.md b/gamestonk_terminal/options/README.md index 4742badb005..842f95859f5 100644 --- a/gamestonk_terminal/options/README.md +++ b/gamestonk_terminal/options/README.md @@ -84,6 +84,17 @@ Display options chains. [Source: Tradier] * --puts : Flag to show puts only * -m : Minimum strike price to consider. * -M : Maximum strike price to consider. +* -d : Columns to display. Should be comma separated. Must be in `['bid', 'ask', 'strike', 'bidsize', 'asksize', 'volume', 'open_interest', + 'delta', 'gamma', 'theta', 'vega', 'ask_iv', 'bid_iv','mid_iv']` chains + +To change what columns are displayed, one can use the `-d` flag. To show the same as above, but only the ask, ask size +delta and theta variables, we would do: +```` +chains -m 129 -M 135 -d ask,ask_size,delta,theta +```` +Which outputs +![im2](https://user-images.githubusercontent.com/18151143/115276719-640cab80-a111-11eb-84a2-4dc6a1685946.png) + diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index d1a99a9d1e3..e29047ebb88 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -27,6 +27,15 @@ greek_columns = ["delta", "gamma", "theta", "vega", "ask_iv", "bid_iv", "mid_iv" df_columns = option_columns + greek_columns column_map = {"mid_iv": "iv", "open_interest": "oi", "volume": "vol"} +default_columns = [ + "mid_iv", + "delta", + "volume", + "open_interest", + "bid", + "ask", +] + def process_chains(response: requests.models.Response) -> pd.DataFrame: """ @@ -124,25 +133,26 @@ def display_chains(symbol: str, expiry: str, other_args: List[str]): default=-1, help="maximum strike price to consider.", ) + parser.add_argument( + "-d", + "--display", + dest="to_display", + default=default_columns, + help="columns to look at", + ) chains_df = get_option_chains(symbol, expiry) - default_columns = [ - "mid_iv", - "delta", - "volume", - "open_interest", - "bid", - "ask", - "strike", - "option_type", - ] - chains_df = chains_df[default_columns].rename(columns=column_map) - try: ns_parser = parse_known_args_and_warn(parser, other_args) if not ns_parser: return + if isinstance(ns_parser.to_display, str): + columns = list(ns_parser.to_display.split(",")) + ["strike", "option_type"] + if isinstance(ns_parser.to_display, list): + columns = ns_parser.to_display + ["strike", "option_type"] + + chains_df = chains_df[columns].rename(columns=column_map) if ns_parser.max_sp == -1 and ns_parser.min_sp == -1: min_strike = np.percentile(chains_df["strike"], 25) max_strike = np.percentile(chains_df["strike"], 75) @@ -209,3 +219,4 @@ def display_chains(symbol: str, expiry: str, other_args: List[str]): print(e) print("") return + From 2e0f5b98b9101c9a721dd0da97f62a0dac18fbea Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 14:00:47 -0400 Subject: [PATCH 2/7] fix black --- gamestonk_terminal/options/chains_view.py | 1 - 1 file changed, 1 deletion(-) diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index e29047ebb88..b1fc911cf28 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -219,4 +219,3 @@ def display_chains(symbol: str, expiry: str, other_args: List[str]): print(e) print("") return - From e55ec6c4f8b8389710d7a19a01d01b7a3f5c543c Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 14:05:34 -0400 Subject: [PATCH 3/7] change default display columns --- gamestonk_terminal/options/chains_view.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index b1fc911cf28..3fd5aacddb6 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -29,6 +29,9 @@ column_map = {"mid_iv": "iv", "open_interest": "oi", "volume": "vol"} default_columns = [ "mid_iv", + "vega", + "theta", + "gamma", "delta", "volume", "open_interest", From 2658a017fe8b17056960213c9b8bc3ae7e1cdaec Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 16:37:29 -0400 Subject: [PATCH 4/7] update -d type and readme --- gamestonk_terminal/options/README.md | 12 +----------- gamestonk_terminal/options/chains_view.py | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/gamestonk_terminal/options/README.md b/gamestonk_terminal/options/README.md index 842f95859f5..536ba329147 100644 --- a/gamestonk_terminal/options/README.md +++ b/gamestonk_terminal/options/README.md @@ -84,17 +84,7 @@ Display options chains. [Source: Tradier] * --puts : Flag to show puts only * -m : Minimum strike price to consider. * -M : Maximum strike price to consider. -* -d : Columns to display. Should be comma separated. Must be in `['bid', 'ask', 'strike', 'bidsize', 'asksize', 'volume', 'open_interest', - 'delta', 'gamma', 'theta', 'vega', 'ask_iv', 'bid_iv','mid_iv']` +* -d : Columns to display. Should be comma separated. Must be in * -d : Columns to display from the following selection: bid, ask, strike, bidsize, asksize, volume, open_interest, delta, gamma, theta, vega, ask_iv, bid_iv, mid_iv. Default: mid_iv,vega_theta_gamma,delta,volume,open_interest,bid,ask. Note that they are separated by comma. chains - -To change what columns are displayed, one can use the `-d` flag. To show the same as above, but only the ask, ask size -delta and theta variables, we would do: -```` -chains -m 129 -M 135 -d ask,ask_size,delta,theta -```` -Which outputs -![im2](https://user-images.githubusercontent.com/18151143/115276719-640cab80-a111-11eb-84a2-4dc6a1685946.png) - diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index 3fd5aacddb6..2ae85fba4af 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -40,6 +40,16 @@ default_columns = [ ] +def check_valid_option_chains_headers(headers: str) -> str: + columns = [str(item) for item in headers.split(",")] + + for header in columns: + if header not in df_columns: + raise argparse.ArgumentTypeError("Invalid option chains header selected!") + + return columns + + def process_chains(response: requests.models.Response) -> pd.DataFrame: """ Function to take in the requests.get and return a DataFrame @@ -141,7 +151,9 @@ def display_chains(symbol: str, expiry: str, other_args: List[str]): "--display", dest="to_display", default=default_columns, - help="columns to look at", + type=check_valid_option_chains_headers, + help="columns to look at. Columns can be: {bid, ask, strike, bidsize, asksize, volume, open_interest, delta, " + "gamma, theta, vega, ask_iv, bid_iv, mid_iv} ", ) chains_df = get_option_chains(symbol, expiry) @@ -150,11 +162,7 @@ def display_chains(symbol: str, expiry: str, other_args: List[str]): ns_parser = parse_known_args_and_warn(parser, other_args) if not ns_parser: return - if isinstance(ns_parser.to_display, str): - columns = list(ns_parser.to_display.split(",")) + ["strike", "option_type"] - if isinstance(ns_parser.to_display, list): - columns = ns_parser.to_display + ["strike", "option_type"] - + columns = ns_parser.to_display + ["strike", "option_type"] chains_df = chains_df[columns].rename(columns=column_map) if ns_parser.max_sp == -1 and ns_parser.min_sp == -1: min_strike = np.percentile(chains_df["strike"], 25) From 19302c9558c62e8bb5a2b37985113a5bfc89a877 Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 16:38:39 -0400 Subject: [PATCH 5/7] correct default order to avoid merge conflict --- gamestonk_terminal/options/chains_view.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index 2ae85fba4af..b1c30a4609b 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -30,9 +30,9 @@ column_map = {"mid_iv": "iv", "open_interest": "oi", "volume": "vol"} default_columns = [ "mid_iv", "vega", - "theta", - "gamma", "delta", + "gamma", + "theta", "volume", "open_interest", "bid", From 9fd31e97c917b120237126425f03bcb9efbd2349 Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 16:49:40 -0400 Subject: [PATCH 6/7] mypy --- gamestonk_terminal/options/chains_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index b1c30a4609b..c038daa36a0 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -40,7 +40,7 @@ default_columns = [ ] -def check_valid_option_chains_headers(headers: str) -> str: +def check_valid_option_chains_headers(headers: List[str]) -> str: columns = [str(item) for item in headers.split(",")] for header in columns: From eb842ead704503f806e77298192cd24fabf1f090 Mon Sep 17 00:00:00 2001 From: Jamie Date: Mon, 19 Apr 2021 18:47:42 -0400 Subject: [PATCH 7/7] mypy again --- gamestonk_terminal/options/chains_view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gamestonk_terminal/options/chains_view.py b/gamestonk_terminal/options/chains_view.py index c038daa36a0..b87b57460b6 100644 --- a/gamestonk_terminal/options/chains_view.py +++ b/gamestonk_terminal/options/chains_view.py @@ -40,7 +40,7 @@ default_columns = [ ] -def check_valid_option_chains_headers(headers: List[str]) -> str: +def check_valid_option_chains_headers(headers: str) -> List[str]: columns = [str(item) for item in headers.split(",")] for header in columns: