mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-14 13:21:05 +00:00
* add model file for Montreal Options Exchange * mypy fixes * define attributes under __init__ * type error fix * another pylint fix * adds tests for tmx_model * black * mypy * adds expirations test and re-records * black * capture error message in test * mypy * add __docformat__ line * improves get_all_ticker_symbols * removes python magic command for new cell * adds TMX as source for SDK chains * starts on a new method for loading options data returning a standardized object * add load_options as SDK endpoint * intrinio response - not complete * adds tradier to load_options * add source attribute to options object * restore legacy nasdaq last price function * yFinance underlying_price fixes * yFinance model fix * adds cboe to sdk options load * table fix * creates options_chains_model.py and updates SDK map * docstrings added for the class. * updates tmx_model tests * fix options_controller test * adds cboe_model tests * spelling in docstring * ruff - unused import * mypy fixes * more mypy fixes * pylint * attempt to manually resolve merge conflict. * nasdaq_model fix * adds test coverage for options/nasdaq_model * docstrings update for nasdaq_model * mypy fix * adds unit testing for options_chains_model * adds additional tests for intrinio_model * unused import fix * fix for .TO symbol and TMX EOD chains * make CBOE Pydantic * cboe update * adds switch for pydantic output from all sources * black * index options error handling for Intrinio * add warning message for index options from Intrinio * tmx_model enhancements * cleans up get_ticker_iv() in cboe_model * fix ticker info for index symbols from cboe * typo in comments * adds test for tradier_model.load_options * cboe optionType as lower case * add function for calculating chains stats * black * trailmap for calculate_chains_stats * adds test for calculate_stats() * more details to nasdaq.underlying_price * typo in docstrings * mypy - options_chains_model.py * black - options_chains_model.py * pylint options_chains_model.py * standardize response from intrinio underlying price * add function to validate input of function * missed type hint * additional error handling for stats * adds DTE as column for all sources * adds strategies function and input validation * add yFinance test for load_options() * add Nasdaq test for load_options() * tests for new functions in options_chains_model * update sdk trailmap * rewrite tests * fixes for tests * fix tmx_model test * more pytest * pytest.. * add vertical call spread function * some cleanup * update nasdaq tests * more cleanup * black * pylint * black * ruff * black * pylint * black * pylint.. * tests rewrite * more pytest * recapture tests * Different tests were collected between gw1 and gw0 * adds vertical spreads * vertical_put_spread * improve calculate_stats * mypy * edge cases * black * update tmx,yfinance tests * new cboe tests * new tmx_model tests * fix nasdaq test * test updates * fix nasdaq tests * add test_options_chains_model * refactor data sources * black * pylint * fixing stuff * forgot a file.. * codespell * linting * mypy... * refactor OptionsChains class * pylint * reconfigure SDK entry point * fix error handling when data request fails * ruff * pylint * pylint * Add inheritance and a repr string * add method for skew * add method for skew * fix nasdaq test * add skew to tests --------- Co-authored-by: James Maslek <jmaslek11@gmail.com>
49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
# pylint: disable=no-member
|
|
|
|
# IMPORTATION STANDARD
|
|
|
|
# IMPORTATION THIRDPARTY
|
|
import pandas as pd
|
|
import pytest
|
|
|
|
# IMPORTATION INTERNAL
|
|
from openbb_terminal.stocks.options import options_chains_model
|
|
|
|
|
|
@pytest.mark.vcr
|
|
def test_OptionsChains(recorder):
|
|
df1 = options_chains_model.OptionsChains("AAPL")
|
|
df2 = options_chains_model.OptionsChains("AAPL", "YahooFinance", pydantic=True)
|
|
assert hasattr(df1, "chains")
|
|
assert hasattr(df2, "underlying_price")
|
|
assert isinstance(df1.underlying_price, pd.Series)
|
|
assert isinstance(df2.chains, dict)
|
|
recorder.capture(
|
|
[df1.chains.columns.to_list(), df1.underlying_price.index.to_list()]
|
|
)
|
|
recorder.capture([df1.underlying_name, df2.underlying_name])
|
|
stats1 = df1.get_stats()
|
|
stats2 = df2.get_stats("strike")
|
|
recorder.capture(stats1.columns.to_list())
|
|
recorder.capture(stats2.columns.to_list())
|
|
straddle = df1.get_straddle()
|
|
recorder.capture([straddle.index.to_list(), straddle.columns.to_list()])
|
|
strangle = df1.get_strangle(days=90, moneyness=20)
|
|
recorder.capture([strangle.index.to_list(), strangle.columns.to_list()])
|
|
call_spread = df1.get_vertical_call_spread()
|
|
recorder.capture([call_spread.index.to_list(), call_spread.columns.to_list()])
|
|
put_spread = df1.get_vertical_put_spread()
|
|
recorder.capture([put_spread.index.to_list(), put_spread.columns.to_list()])
|
|
strategies = df1.get_strategies(
|
|
days=[30, 60, 90, 180],
|
|
straddle_strike=df1.last_price,
|
|
strangle_moneyness=[5, 10, 20],
|
|
vertical_calls=[200, 180],
|
|
vertical_puts=[150, 180],
|
|
)
|
|
recorder.capture(strategies["Strategy"].to_list())
|
|
vertical_skew = df1.get_skew()
|
|
recorder.capture(vertical_skew.columns.to_list())
|
|
horizontal_skew = df2.get_skew(moneyness=10)
|
|
recorder.capture(horizontal_skew.columns.to_list())
|