summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-06-14 18:04:59 -0700
committerDanglewood <85772166+deeleeramone@users.noreply.github.com>2024-06-14 18:04:59 -0700
commitacec71ba2d17a04440a8db403cb92cb5f9b8f305 (patch)
treeb829f5ed6c7e119a4e9c335650c95ace0c13a75c
parent4d8e6eee9d792915b6ef54a7d040d25b5c8f6e04 (diff)
test cassettes and static assets
-rw-r--r--openbb_platform/openbb/assets/reference.json194
-rw-r--r--openbb_platform/openbb/package/derivatives_options.py52
-rw-r--r--openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_options_chains_fetcher.yaml5941
-rw-r--r--openbb_platform/providers/tmx/openbb_tmx/utils/helpers.py2
-rw-r--r--openbb_platform/providers/tmx/tests/record/http/test_tmx_fetchers/test_tmx_options_chains_fetcher.yaml2541
-rw-r--r--openbb_platform/providers/tradier/tests/record/http/test_tradier_fetchers/test_tradier_derivatives_options_chains_fetcher.yaml4189
6 files changed, 6848 insertions, 6071 deletions
diff --git a/openbb_platform/openbb/assets/reference.json b/openbb_platform/openbb/assets/reference.json
index 7b5bf13451f..796ed92303d 100644
--- a/openbb_platform/openbb/assets/reference.json
+++ b/openbb_platform/openbb/assets/reference.json
@@ -1213,6 +1213,101 @@
"default": null,
"optional": true,
"choices": null
+ },
+ {
+ "name": "option_type",
+ "type": "Literal[None, Union[ForwardRef('call'), ForwardRef('put')]]",
+ "description": "The option type, call or put, 'None' is both (default).",
+ "default": null,
+ "optional": true,
+ "choices": [
+ "call",
+ "put"
+ ]
+ },
+ {
+ "name": "moneyness",
+ "type": "Literal['otm', 'itm', 'all']",
+ "description": "Return only contracts that are in or out of the money, default is 'all'. Parameter is ignored when a date is supplied.",
+ "default": "all",
+ "optional": true,
+ "choices": [
+ "otm",
+ "itm",
+ "all"
+ ]
+ },
+ {
+ "name": "strike_gt",
+ "type": "int",
+ "description": "Return options with a strike price greater than the given value. Parameter is ignored when a date is supplied.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "strike_lt",
+ "type": "int",
+ "description": "Return options with a strike price less than the given value. Parameter is ignored when a date is supplied.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "volume_gt",
+ "type": "int",
+ "description": "Return options with a volume greater than the given value. Parameter is ignored when a date is supplied.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "volume_lt",
+ "type": "int",
+ "description": "Return options with a volume less than the given value. Parameter is ignored when a date is supplied.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "oi_gt",
+ "type": "int",
+ "description": "Return options with an open interest greater than the given value. Parameter is ignored when a date is supplied.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "oi_lt",
+ "type": "int",
+ "description": "Return options with an open interest less than the given value. Parameter is ignored when a date is supplied.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "model",
+ "type": "Literal['black_scholes', 'bjerk']",
+ "description": "The pricing model to use for options chains data, default is 'black_scholes'. Parameter is ignored when a date is supplied.",
+ "default": "black_scholes",
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "show_extended_price",
+ "type": "bool",
+ "description": "Whether to include OHLC type fields, default is True. Parameter is ignored when a date is supplied.",
+ "default": true,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "include_related_symbols",
+ "type": "bool",
+ "description": "Include related symbols that end in a 1 or 2 because of a corporate action, default is False.",
+ "default": false,
+ "optional": true,
+ "choices": null
}
],
"yfinance": []
@@ -1249,9 +1344,17 @@
"data": {
"standard": [
{
- "name": "symbol",
+ "name": "underlying_symbol",
"type": "str",
- "description": "Symbol representing the entity requested in the data. Here, it is the underlying symbol for the option.",
+ "description": "Underlying symbol for the option.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "underlying_price",
+ "type": "float",
+ "description": "Price of the underlying stock.",
"default": null,
"optional": true,
"choices": null
@@ -1281,6 +1384,14 @@
"choices": null
},
{
+ "name": "dte",
+ "type": "int",
+ "description": "Days to expiration of the contract.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
"name": "strike",
"type": "float",
"description": "Strike price of the contract.",
@@ -1300,7 +1411,7 @@
"name": "open_interest",
"type": "int",
"description": "Open interest on the contract.",
- "default": null,
+ "default": 0,
"optional": true,
"choices": null
},
@@ -1308,7 +1419,7 @@
"name": "volume",
"type": "int",
"description": "The trading volume.",
- "default": null,
+ "default": 0,
"optional": true,
"choices": null
},
@@ -1329,6 +1440,22 @@
"choices": null
},
{
+ "name": "last_trade_size",
+ "type": "int",
+ "description": "Last trade size of the option.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "last_trade_time",
+ "type": "datetime",
+ "description": "The timestamp of the last trade.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
"name": "tick",
"type": "str",
"description": "Whether the last tick was up or down in price.",
@@ -1353,6 +1480,22 @@
"choices": null
},
{
+ "name": "bid_time",
+ "type": "datetime",
+ "description": "The timestamp of the bid price.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "bid_exchange",
+ "type": "str",
+ "description": "The exchange of the bid price.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
"name": "ask",
"type": "float",
"description": "Current ask price for the option.",
@@ -1369,6 +1512,22 @@
"choices": null
},
{
+ "name": "ask_time",
+ "type": "datetime",
+ "description": "The timestamp of the ask price.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
+ "name": "ask_exchange",
+ "type": "str",
+ "description": "The exchange of the ask price.",
+ "default": null,
+ "optional": true,
+ "choices": null
+ },
+ {
"name": "mark",
"type": "float",
"description": "The mid-price between the latest bid and ask.",
@@ -1539,7 +1698,7 @@
{
"name": "change_percent",
"type": "float",
- "description": "Change, in normalizezd percentage points, of the option.",
+ "description": "Change, in normalized percentage points, of the option.",
"default": null,
"optional": true,
"choices": null
@@ -1593,26 +1752,9 @@
"choices": null
}
],
- "intrinio": [
- {
- "name": "exercise_style",
- "type": "str",
- "description": "The exercise style of the option, American or European.",
- "default": null,
- "optional": true,
- "choices": null
- }
- ],
+ "intrinio": [],
"yfinance": [
{
- "name": "dte",
- "type": "int",
- "description": "Days to expiration.",
- "default": null,
- "optional": true,
- "choices": null
- },
- {
"name": "in_the_money",
"type": "bool",
"description": "Whether the option is in the money.",
@@ -1621,9 +1763,9 @@
"choices": null
},
{
- "name": "last_trade_timestamp",
- "type": "datetime",
- "description": "Timestamp for when the option was last traded.",
+ "name": "currency",
+ "type": "str",
+ "description": "Currency of the option.",
"default": null,
"optional": true,
"choices": null
diff --git a/openbb_platform/openbb/package/derivatives_options.py b/openbb_platform/openbb/package/derivatives_options.py
index 01765d5355a..cc7bea84974 100644
--- a/openbb_platform/openbb/package/derivatives_options.py
+++ b/openbb_platform/openbb/package/derivatives_options.py
@@ -42,6 +42,28 @@ class ROUTER_derivatives_options(Container):
The provider to use, by default None. If None, the priority list configured in the settings is used. Default priority: intrinio, yfinance.
date : Optional[datetime.date]
The end-of-day date for options chains data. (provider: intrinio)
+ option_type : Literal[None, Union[ForwardRef('call'), ForwardRef('put')]]
+ The option type, call or put, 'None' is both (default). (provider: intrinio)
+ moneyness : Literal['otm', 'itm', 'all']
+ Return only contracts that are in or out of the money, default is 'all'. Parameter is ignored when a date is supplied. (provider: intrinio)
+ strike_gt : Optional[int]
+ Return options with a strike price greater than the given value. Parameter is ignored when a date is supplied. (provider: intrinio)
+ strike_lt : Optional[int]
+ Return options with a strike price less than the given value. Parameter is ignored when a date is supplied. (provider: intrinio)
+ volume_gt : Optional[int]
+ Return options with a volume greater than the given value. Parameter is ignored when a date is supplied. (provider: intrinio)
+ volume_lt : Optional[int]
+ Return options with a volume less than the given value. Parameter is ignored when a date is supplied. (provider: intrinio)
+ oi_gt : Optional[int]
+ Return options with an open interest greater than the given value. Parameter is ignored when a date is supplied. (provider: intrinio)
+ oi_lt : Optional[int]
+ Return options with an open interest less than the given value. Parameter is ignored when a date is supplied. (provider: intrinio)
+ model : Literal['black_scholes', 'bjerk']
+ The pricing model to use for options chains data, default is 'black_scholes'. Parameter is ignored when a date is supplied. (provider: intrinio)
+ show_extended_price : bool
+ Whether to include OHLC type fields, default is True. Parameter is ignored when a date is supplied. (provider: intrinio)
+ include_related_symbols : bool
+ Include related symbols that end in a 1 or 2 because of a corporate action, default is False. (provider: intrinio)
Returns
-------
@@ -59,14 +81,18 @@ class ROUTER_derivatives_options(Container):
OptionsChains
-------------
- symbol : Optional[str]
- Symbol representing the entity requested in the data. Here, it is the underlying symbol for the option.
+ underlying_symbol : Optional[str]
+ Underlying symbol for the option.
+ underlying_price : Optional[float]
+ Price of the underlying stock.
contract_symbol : str
Contract symbol for the option.
eod_date : Optional[date]
Date for which the options chains are returned.
expiration : date
Expiration date of the contract.
+ dte : Optional[int]
+ Days to expiration of the contract.
strike : float
Strike price of the contract.
option_type : str
@@ -79,16 +105,28 @@ class ROUTER_derivatives_options(Container):
Theoretical value of the option.
last_trade_price : Optional[float]
Last trade price of the option.
+ last_trade_size : Optional[int]
+ Last trade size of the option.
+ last_trade_time : Optional[datetime]
+ The timestamp of the last trade.
tick : Optional[str]
Whether the last tick was up or down in price.
bid : Optional[float]
Current bid price for the option.
bid_size : Optional[int]
Bid size for the option.
+ bid_time : Optional[datetime]
+ The timestamp of the bid price.
+ bid_exchange : Optional[str]
+ The exchange of the bid price.
ask : Optional[float]
Current ask price for the option.
ask_size : Optional[int]
Ask size for the option.
+ ask_time : Optional[datetime]
+ The timestamp of the ask price.
+ ask_exchange : Optional[str]
+ The exchange of the ask price.
mark : Optional[float]
The mid-price between the latest bid and ask.
open : Optional[float]
@@ -132,7 +170,7 @@ class ROUTER_derivatives_options(Container):
change : Optional[float]
The change in the price of the option.
change_percent : Optional[float]
- Change, in normalizezd percentage points, of the option.
+ Change, in normalized percentage points, of the option.
implied_volatility : Optional[float]
Implied volatility of the option.
delta : Optional[float]
@@ -145,14 +183,10 @@ class ROUTER_derivatives_options(Container):
Vega of the option.
rho : Optional[float]
Rho of the option.
- exercise_style : Optional[str]
- The exercise style of the option, American or European. (provider: intrinio)
- dte : Optional[int]
- Days to expiration. (provider: yfinance)
in_the_money : Optional[bool]
Whether the option is in the money. (provider: yfinance)
- last_trade_timestamp : Optional[datetime]
- Timestamp for when the option was last traded. (provider: yfinance)
+ currency : Optional[str]
+ Currency of the option. (provider: yfinance)
Examples
--------
diff --git a/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_options_chains_fetcher.yaml b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_options_chains_fetcher.yaml
index 1bafb9f775d..b7eef521956 100644
--- a/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_options_chains_fetcher.yaml
+++ b/openbb_platform/providers/intrinio/tests/record/http/test_intrinio_fetchers/test_intrinio_options_chains_fetcher.yaml
@@ -9,13 +9,15 @@ interactions:
Connection:
- keep-alive
method: GET
- uri: https://api-v2.intrinio.com/options/expirations/AAPL/eod?after=2023-09-15&api_key=MOCK_API_KEY
+ uri: https://api-v2.intrinio.com/options/expirations/AAPL/eod?after=2023-09-14&api_key=MOCK_API_KEY
response:
body:
string: !!binary |
- H4sIABTfgWUAA0zQMQ7CMAwF0LtkxtK36yaEqyAGBoYugIABCXF3kpZYf3yyv+3kky7v+/I4v5bb
- 9ZkOx2SwLFDRnHYds6iJ1gFURhZDoGXKBu+ZUfGeIZQY4OsADThXJtE5YHGO9z3GoEyDEfAfMK3n
- VIYRlNuwZ2igLXXCeOkGEDAFIFYYICi3IQ/0r6oMS6fvDwAA//8DAKERWVGkAQAA
+ H4sIAADobGYAA0zSMU7EMBBG4bukxtL8Y8dJuAqioKDYhl0BBRLi7tixPHnlp4zsp4l/l/efx+3z
+ 7ft2//hanl8WN69JnrQvTwNWCSXVgfUcOybsIGpyC+TkCrQDtoHSD5hjDe3LGrC4tPSjrzHbo+CE
+ eWBLXoGZM8Axi3t66E4IUAEsqm1NWYAXQByTAZYDhaGFoYWhhaGZoQ0OiGPGMbtC264zgCV62zBx
+ HS2GiqFiqCI0n//0IBwQx2bogAKKjZ6YGx0wYG409+fiG2GAOGZ1or+qg3Cghb7+/QMAAP//AwAb
+ QEJ4HQMAAA==
headers:
Connection:
- keep-alive
@@ -24,7 +26,7 @@ interactions:
Content-Type:
- application/json
Date:
- - Tue, 19 Dec 2023 18:21:08 GMT
+ - Sat, 15 Jun 2024 01:01:52 GMT
Transfer-Encoding:
- chunked
Vary:
@@ -42,193 +44,383 @@ interactions:
Connection:
- keep-alive
method: GET
- uri: https://api-v2.intrinio.com/options/chain/AAPL/2024-03-15/eod?api_key=MOCK_API_KEY&date=2023-09-15
+ uri: https://api-v2.intrinio.com/options/chain/AAPL/2024-04-05/eod?api_key=MOCK_API_KEY&date=2023-09-15&include_related_symbols=False
response:
body:
string: !!binary |
- H4sIABTfgWUAA7ydS49cubHnv4vW1gEjGHzV7mK2d+GFVzMYGJpuwRasdje65TvjMfzdhzwPMiLI
- yuRh9kgwjJYqk1lZ+at/MN7/+vDDXz99+fuHt//xrw8///Lty8/5P//14Yeff/z84e3Df/zHH/8T
- yVhw/83k/zf5z4c/fPj25Ye/ff71/HL+++f/88uXXz8dT/2ABumjsR/B5a/89u3XL3/LB+WnbiY/
- 8Z+/lFN/+PT164d//+HDL79++eHzb+Xlfvz07fPxXPvRpOO5P3z9+bf8j/mJ/vzLn3/78n/zv8D1
- 129ffpLP+hOEN0pvCJv3+N+vM/78v778uJ/j2D9cZxnD/3FwYnpz+X+wgbXtxE+//U1+Z/kfrhOd
- 5f/4/MT/+vnrP3463tbPv3z++3Vu+e/6Oun8+/VO7Pn3L3//9vnXz799y8+OMR/w1y9/+ev1hK8/
- /+/rrJ8+/Xqc4/KPoHxX/HHl7+yx5cdQv3z+/fqyLZ/1519/+FI+i2///Lojkt/Cl59++frl849/
- zm8lY/D1y7d/lodjgvwt/fj567dP+7ONg3zAXz799NP5d0P569/++rl8/WP5B3Ax/zw+/+X4OkQM
- //73H55iadaxNL8jlkTuIZgmvQFtBsMUmDSDJcEWU+iwBNdj6XCKStoQkFMZnHnAZVRcUs8lWHrK
- JUgqIdyikm5SScELLGOIEkvvJJboEsMSk53BEtMylvmpL2AZJJb2AZTxzcQ3dFsIrofS91D6MCuW
- xvViGXoqyUxRaTdHwKm0jMkgmQRQTLqOSSTbkCyPv0gKTCq9ewxlUFAGCaW7B6Wn6ASU5eU5k84r
- qeRKiejsDJLRLSMZ3e+HJJj3mKQ/gctC+oY2/1qbnsmwKJQubjamHsk4sN8xTTFZT6z22zyAEp9C
- Cc6Fi8q//+Pr15PK4z8rlcEZ/kcLJ0pGo2I0vsao8VI4g2LUk9LN8v01SPMbnIJ0XTfjK7oZFaTu
- XUoPBtxbvj2ENDDnA0o9zionDJQz9ZjaOUr9RiBvmc4zTKPC1CpMfYcpJXbNLI+/YEqM0qiwtI+x
- TBJLfw9LZxNJe66vmUFdMxEEl4GmuAzr4hleEc8kucSHVNJ+h0vGTtlzmnN+MCPdOz8wEM9Je14P
- vKgkxmRSTJJiMgx8n/K6lTYaQnlp4/UwJZVJMgkvKaULNnIkAbxCMilzni+VDEkbHE0huS6V4QWp
- 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