From f8c26ff1c6b950271f92efe600e4ca83e8f516e2 Mon Sep 17 00:00:00 2001 From: montezdesousa Date: Sun, 13 Aug 2023 15:23:47 +0100 Subject: [PATCH 01/14] rename type var --- .../openbb_core/app/provider_interface.py | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py b/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py index 0a00c566373..c7211369450 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py +++ b/openbb_sdk/sdk/core/openbb_core/app/provider_interface.py @@ -1,5 +1,5 @@ from dataclasses import dataclass, make_dataclass -from typing import Any, Dict, List, Literal, Optional, Tuple, Type, Union +from typing import Any, Dict, List, Literal, Optional, Tuple, Type, TypeVar, Union from fastapi import Query from openbb_provider.query_executor import QueryExecutor @@ -7,13 +7,15 @@ from openbb_provider.registry_map import MapType, RegistryMap from pydantic import BaseConfig, BaseModel, Extra, Field, create_model from pydantic.fields import ModelField +TupleFieldType = TypeVar("TupleFieldType", bound=Tuple[str, type, Any]) + @dataclass class DataclassField: """Dataclass field.""" name: str - type_: Any + type_: type default: Any @@ -164,7 +166,7 @@ class ProviderInterface: return DataclassField( name=current_name, - type_=merged_type, + type_=merged_type, # type: ignore default=merged_default, ) @@ -208,10 +210,10 @@ class ProviderInterface: def _extract_params( cls, providers: Any, - ) -> Tuple[Dict[str, Tuple[str, type, Any]], Dict[str, Tuple[str, type, Any]]]: + ) -> Tuple[Dict[str, TupleFieldType], Dict[str, TupleFieldType]]: """Extract parameters from map.""" - standard: Dict[str, Tuple[str, Any, Any]] = {} - extra: Dict[str, Tuple[str, Any, Any]] = {} + standard: Dict[str, TupleFieldType] = {} + extra: Dict[str, TupleFieldType] = {} for provider_name, model_details in providers.items(): if provider_name == "openbb": @@ -255,9 +257,9 @@ class ProviderInterface: def _extract_data( cls, providers: Any, - ) -> Tuple[Dict[str, Tuple[str, type, Any]], Dict[str, Tuple[str, type, Any]]]: - standard: Dict[str, Tuple[str, Any, Any]] = {} - extra: Dict[str, Tuple[str, Any, Any]] = {} + ) -> Tuple[Dict[str, TupleFieldType], Dict[str, TupleFieldType]]: + standard: Dict[str, TupleFieldType] = {} + extra: Dict[str, TupleFieldType] = {} for provider_name, model_details in providers.items(): if provider_name == "openbb": @@ -314,8 +316,9 @@ class ProviderInterface: """ result: Dict = {} - # TODO: Consider multiprocessing this loop to speed startup for model_name, providers in map_.items(): + standard: dict + extra: dict standard, extra = self._extract_params(providers) result[model_name] = { @@ -380,6 +383,8 @@ class ProviderInterface: result: Dict = {} for model_name, providers in map_.items(): + standard: dict + extra: dict standard, extra = self._extract_data(providers) result[model_name] = { "standard": make_dataclass( # type: ignore From 0a9aa8ceb4db1238a7660bbebc99e5095f100934 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Sun, 13 Aug 2023 22:55:43 +0200 Subject: [PATCH 02/14] Add DocstringGenerator unit tests --- .../core/openbb_core/app/command_runner.py | 2 +- .../openbb_core/app/static/package/crypto.py | 2 +- .../openbb_core/app/static/package/economy.py | 2 +- .../app/static/package/fixedincome.py | 2 +- .../openbb_core/app/static/package/forex.py | 2 +- .../openbb_core/app/static/package/news.py | 2 +- .../openbb_core/app/static/package/stocks.py | 2 +- .../app/static/package/stocks_ca.py | 2 +- .../app/static/package/stocks_dd.py | 2 +- .../app/static/package/stocks_fa.py | 2 +- .../openbb_core/app/static/package_builder.py | 4 +- .../tests/app/static/test_package_builder.py | 84 ++++++++++++++++++- 12 files changed, 95 insertions(+), 13 deletions(-) diff --git a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py index 06adbc73cd0..8f9ae9b595f 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py +++ b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py @@ -15,10 +15,10 @@ from openbb_core.app.logs.logging_manager import LoggingManager from openbb_core.app.model.abstract.warning import cast_warning from openbb_core.app.model.charts.chart import Chart from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject, Error from openbb_core.app.model.journal import Journal from openbb_core.app.model.journal_entry import JournalEntry from openbb_core.app.model.journal_query import JournalQuery +from openbb_core.app.model.obbject import Error, Obbject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import CommandMap diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py index 0d8054bbb89..3ca625a6272 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py @@ -6,8 +6,8 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py index 101376987ff..2bdb9b0678a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py @@ -8,8 +8,8 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py index d92b3902284..be4e1656a0a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py @@ -8,8 +8,8 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py index c72985fde9c..2aaf8e6f81b 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py @@ -6,8 +6,8 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py index e2b47d10cd9..2e01558c016 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py @@ -8,8 +8,8 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py index fc93db5e5a3..89727ced9a5 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py @@ -9,8 +9,8 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py index 76dd20d17f1..1477bf63a92 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py @@ -7,8 +7,8 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py index 391cb0a347e..c06f397b0bc 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py @@ -5,8 +5,8 @@ from typing import Annotated, Literal, Optional from pydantic import validate_arguments -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py index 6bb66b79b82..a4edbd658fd 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py @@ -9,8 +9,8 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.custom_parameter import OpenBBCustomParameter +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py index d4baa02c884..053fcbb8d6a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py @@ -242,7 +242,7 @@ class DocstringGenerator: """Dynamically generate docstrings for the commands.""" @staticmethod - def get_obbject_description() -> str: + def get_object_description() -> str: """Get the command output description.""" obbject_description = ( "\nReturns\n" @@ -326,7 +326,7 @@ class DocstringGenerator: section_docstring += f"{padding}{field_description}\n" if provider == "openbb" and section_name == "QueryParams": - section_docstring += cls.get_obbject_description() + section_docstring += cls.get_object_description() return section_docstring diff --git a/openbb_sdk/sdk/core/tests/app/static/test_package_builder.py b/openbb_sdk/sdk/core/tests/app/static/test_package_builder.py index 659061194a2..823e8225b98 100644 --- a/openbb_sdk/sdk/core/tests/app/static/test_package_builder.py +++ b/openbb_sdk/sdk/core/tests/app/static/test_package_builder.py @@ -5,8 +5,10 @@ from dataclasses import dataclass from inspect import _empty import pytest +from openbb_core.app.provider_interface import get_provider_interface from openbb_core.app.static.package_builder import ( ClassDefinition, + DocstringGenerator, ImportDefinition, Linters, MethodDefinition, @@ -446,4 +448,84 @@ def test_mypy(linters): linters.mypy() -# TODO: Implement unit test for the DocstringGenerator class once refactored. +@pytest.fixture(scope="module") +def docstring_generator(): + """Return package builder.""" + return DocstringGenerator() + + +def test_docstring_generator_init(docstring_generator): + """Test docstring generator init.""" + assert docstring_generator + + +def test_get_object_description(docstring_generator): + """Test build docstring.""" + docstring = docstring_generator.get_object_description() + assert docstring + + +def test_get_available_providers(docstring_generator): + """Test get available providers.""" + provider_assert = ["fmp", "polygon"] + some_mapping = {"fmp": 1, "openbb": 2, "polygon": 3} + providers = docstring_generator.get_available_providers(query_mapping=some_mapping) + assert providers + for provider in provider_assert: + assert provider in providers + + +def test_reorder_dictionary(docstring_generator): + """Test reorder dictionary.""" + some_mapping = {"fmp": 1, "openbb": 2, "polygon": 3} + reordered = docstring_generator.reorder_dictionary( + dictionary=some_mapping, key_to_move_first="openbb" + ) + assert reordered + assert list(reordered.keys())[0] == "openbb" + + +def test_extract_field_details(docstring_generator): + """Test extract field details.""" + mapping = get_provider_interface().map + section_docstring = docstring_generator.extract_field_details( + model_name="GlobalNews", + provider="openbb", + section_name="QueryParams", + section_docstring="some_param: str\n Some param description\n", + mapping=mapping, + ) + assert section_docstring + assert "some_param" in section_docstring + + +def test_generate_provider_docstrings(docstring_generator): + """Test generate provider docstrings.""" + docstring = "" + model_name = "GlobalNews" + provider_interface_mapping = get_provider_interface().map + query_mapping = provider_interface_mapping.get(model_name, None) + docstring = docstring_generator.generate_provider_docstrings( + docstring=docstring, + query_mapping=query_mapping, + model_name=model_name, + provider_interface_mapping=provider_interface_mapping, + ) + + assert docstring + assert "openbb" in docstring + assert "GlobalNews" in docstring + + +def test_generate_command_docstring(docstring_generator): + """Test generate command docstring.""" + + def some_func(): + """Some func docstring.""" + pass + + docstring = docstring_generator.generate_command_docstring( + func=some_func, model_name="GlobalNews" + ) + assert docstring + assert "openbb" in docstring.__doc__ From 19a47c80fdedab573fb554947bdc67370ad91cae Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 17:41:08 +0530 Subject: [PATCH 03/14] merged `cboe` provider from @deeleeramone --- openbb_sdk/providers/cboe/README.md | 12 + .../providers/cboe/openbb_cboe/__init__.py | 20 + .../cboe/openbb_cboe/models/__init__.py | 0 .../cboe/openbb_cboe/models/options_chains.py | 117 +++ .../cboe/openbb_cboe/models/stock_eod.py | 59 ++ .../cboe/openbb_cboe/models/stock_info.py | 104 +++ .../cboe/openbb_cboe/models/stock_search.py | 68 ++ .../cboe/openbb_cboe/utils/__init__.py | 0 .../openbb_cboe/utils/cboe_companies.json | 1 + .../cboe/openbb_cboe/utils/helpers.py | 702 ++++++++++++++++++ openbb_sdk/providers/cboe/poetry.lock | 245 ++++++ openbb_sdk/providers/cboe/pyproject.toml | 18 + openbb_sdk/providers/cboe/tests/.gitkeep | 0 13 files changed, 1346 insertions(+) create mode 100644 openbb_sdk/providers/cboe/README.md create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/__init__.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/models/__init__.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/models/stock_info.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/utils/__init__.py create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/utils/cboe_companies.json create mode 100644 openbb_sdk/providers/cboe/openbb_cboe/utils/helpers.py create mode 100644 openbb_sdk/providers/cboe/poetry.lock create mode 100644 openbb_sdk/providers/cboe/pyproject.toml create mode 100644 openbb_sdk/providers/cboe/tests/.gitkeep diff --git a/openbb_sdk/providers/cboe/README.md b/openbb_sdk/providers/cboe/README.md new file mode 100644 index 00000000000..003b13b5218 --- /dev/null +++ b/openbb_sdk/providers/cboe/README.md @@ -0,0 +1,12 @@ +# OpenBB CBOE Provider + +This extension integrates the CBOE (Chicago Board Options Exchange) data provider +into the OpenBB SDK. + +## Installation + +To install the extension, run the following command in this folder: + +```bash +pip install . +``` diff --git a/openbb_sdk/providers/cboe/openbb_cboe/__init__.py b/openbb_sdk/providers/cboe/openbb_cboe/__init__.py new file mode 100644 index 00000000000..0e2877a5b59 --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/__init__.py @@ -0,0 +1,20 @@ +"""cboe provider module.""" +from openbb_provider.abstract.provider import Provider + +from openbb_cboe.models.options_chains import CboeOptionsChainsFetcher +from openbb_cboe.models.stock_eod import CboeStockEODFetcher +from openbb_cboe.models.stock_info import CboeStockInfoFetcher +from openbb_cboe.models.stock_search import CboeStockSearchFetcher + +cboe_provider = Provider( + name="cboe", + website="https://www.cboe.com/", + description="""Provider for CBOE.""", + required_credentials=None, + fetcher_dict={ + "StockSearch": CboeStockSearchFetcher, + "OptionsChains": CboeOptionsChainsFetcher, + "StockEOD": CboeStockEODFetcher, + "StockInfo": CboeStockInfoFetcher, + }, +) diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/__init__.py b/openbb_sdk/providers/cboe/openbb_cboe/models/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py b/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py new file mode 100644 index 00000000000..6ddb36d9a43 --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py @@ -0,0 +1,117 @@ +"""CBOE Options Chains fetcher.""" + +# IMPORT STANDARD +from datetime import datetime +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.options_chains import ( + OptionsChainsData, + OptionsChainsQueryParams, +) +from pydantic import Field, validator + +from openbb_cboe.utils.helpers import get_chains + + +class CboeOptionsChainsQueryParams(OptionsChainsQueryParams): + """CBOE Options Chains query. + + Source: https://www.cboe.com/ + """ + + +class CboeOptionsChainsData(OptionsChainsData): + """CBOE Options Chains Data.""" + + contractSymbol: str = Field( + description="The contract symbol for the option.", + ) + dte: int = Field( + description="The days to expiration for the option.", + ) + bidSize: int = Field( + description="The bid size for the option.", + ) + askSize: int = Field( + description="The ask size for the option.", + ) + impliedVolatility: float = Field( + description="The implied volatility of the option.", + ) + delta: float = Field( + description="The delta of the option.", + ) + gamma: float = Field( + description="The gamma of the option.", + ) + theta: float = Field( + description="The theta of the option.", + ) + rho: float = Field( + description="The rho of the option.", + ) + vega: float = Field( + description="The vega of the option.", + ) + theoretical: float = Field( + description="The theoretical value of the option.", + ) + open: float = Field( + description="The opening price of the option.", + ) + high: float = Field( + description="The high price of the option.", + ) + low: float = Field( + description="The low price of the option.", + ) + lastTradePrice: float = Field( + description="The last trade price of the option.", + ) + tick: str = Field( + description="Whether the last tick was up or down in price.", + ) + previousClose: float = Field( + description="The previous closing price of the option.", + ) + change: float = Field( + description="The change in price of the option.", + ) + changePercent: float = Field( + description="The change, in percent, of the option.", + ) + lastTradeTimestamp: datetime = Field( + description="The last trade timestamp of the option.", + ) + + @validator("expiration", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%d") + + +class CboeOptionsChainsFetcher( + Fetcher[ + CboeOptionsChainsQueryParams, + List[CboeOptionsChainsData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> CboeOptionsChainsQueryParams: + return CboeOptionsChainsQueryParams(**params) + + @staticmethod + def extract_data( + query: CboeOptionsChainsQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[CboeOptionsChainsData]: + data = get_chains(query.symbol).to_dict("records") + + return [CboeOptionsChainsData.parse_obj(d) for d in data] + + @staticmethod + def transform_data( + data: List[CboeOptionsChainsData], + ) -> List[CboeOptionsChainsData]: + return data diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py new file mode 100644 index 00000000000..094ab95e52b --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py @@ -0,0 +1,59 @@ +"""CBOE Stock EOD fetcher.""" + +# IMPORT STANDARD +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.stock_eod import StockEODData, StockEODQueryParams +from pydantic import validator + +from openbb_cboe.utils.helpers import get_eod_prices + + +class CboeStockEODQueryParams(StockEODQueryParams): + """CBOE Stock end of day query. + + Source: https://www.cboe.com/ + """ + + +class CboeStockEODData(StockEODData): + """CBOE stocks end of day Data.""" + + @validator("date", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%d") + + +class CboeStockEODFetcher( + Fetcher[ + CboeStockEODQueryParams, + List[CboeStockEODData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> CboeStockEODQueryParams: + now = datetime.now() + transformed_params = params + if params.get("start_date") is None: + transformed_params["start_date"] = now - timedelta(days=50000) + if params.get("end_date") is None: + transformed_params["end_date"] = now + return CboeStockEODQueryParams(**transformed_params) + + @staticmethod + def extract_data( + query: CboeStockEODQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[CboeStockEODData]: + data = get_eod_prices(query.symbol, query.start_date, query.end_date).to_dict( + "records" + ) + + return [CboeStockEODData.parse_obj(d) for d in data] + + @staticmethod + def transform_data(data: List[CboeStockEODData]) -> List[CboeStockEODData]: + return data diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_info.py b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_info.py new file mode 100644 index 00000000000..6cafdd22291 --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_info.py @@ -0,0 +1,104 @@ +"""CBOE Stock Info fetcher.""" + +# IMPORT STANDARD +from datetime import datetime +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.stock_info import ( + StockInfoData, + StockInfoQueryParams, +) +from pydantic import Field, validator + +from openbb_cboe.utils.helpers import get_info + + +class CboeStockInfoQueryParams(StockInfoQueryParams): + """CBOE Company Search query. + + Source: https://www.cboe.com/ + """ + + +class CboeStockInfoData(StockInfoData): + """CBOE Company Search Data.""" + + type: Optional[str] = Field(description="The type of asset.") + tick: Optional[str] = Field( + description="Whether the last sale was an up or down tick." + ) + bid: Optional[float] = Field(description="The current bid price.") + bid_size: Optional[float] = Field(description="The bid lot size.") + ask: Optional[float] = Field(description="The current ask price.") + ask_size: Optional[float] = Field(description="The ask lot size.") + volume: Optional[float] = Field( + description="The stock volume for the current trading day." + ) + iv_thirty: Optional[float] = Field( + description="The 30-day implied volatility of the stock." + ) + iv_thirty_change: Optional[float] = Field( + description="The change in 30-day implied volatility of the stock." + ) + last_trade_timestamp: Optional[datetime] = Field( + description="The last trade timestamp for the stock." + ) + iv_thirty_one_year_high: Optional[float] = Field( + description="The 1-year high of implied volatility." + ) + hv_thirty_one_year_high: Optional[float] = Field( + description="The 1-year high of realized volatility." + ) + iv_thirty_one_year_low: Optional[float] = Field( + description="The 1-year low of implied volatility." + ) + hv_thirty_one_year_low: Optional[float] = Field( + description="The 1-year low of realized volatility." + ) + iv_sixty_one_year_high: Optional[float] = Field( + description="The 60-day high of implied volatility." + ) + hv_sixty_one_year_high: Optional[float] = Field( + description="The 60-day high of realized volatility." + ) + iv_sixty_one_year_low: Optional[float] = Field( + description="The 60-day low of implied volatility." + ) + hv_sixty_one_year_low: Optional[float] = Field( + description="The 60-day low of realized volatility." + ) + iv_ninety_one_year_high: Optional[float] = Field( + description="The 90-day high of implied volatility." + ) + hv_ninety_one_year_high: Optional[float] = Field( + description="The 90-day high of realized volatility." + ) + + @validator("symbol", pre=True, check_fields=False) + def name_validate(cls, v): # pylint: disable=E0213 + return v.upper() + + +class CboeStockInfoFetcher( + Fetcher[ + CboeStockInfoQueryParams, + CboeStockInfoData, + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> CboeStockInfoQueryParams: + return CboeStockInfoQueryParams(**params) + + @staticmethod + def extract_data( + query: CboeStockInfoQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> CboeStockInfoData: + data = get_info(query.symbol).to_dict() + return CboeStockInfoData.parse_obj(data) + + @staticmethod + def transform_data(data: List[CboeStockInfoData]) -> CboeStockInfoData: + return data diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py new file mode 100644 index 00000000000..bfbdfcbc2ab --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py @@ -0,0 +1,68 @@ +"""CBOE Company Search fetcher.""" + +# IMPORT STANDARD +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.stock_search import ( + StockSearchData, + StockSearchQueryParams, +) +from pydantic import Field, validator + +from openbb_cboe.utils.helpers import stock_search + + +class CboeStockSearchQueryParams(StockSearchQueryParams): + """CBOE Company Search query. + + Source: https://www.cboe.com/ + """ + + +class CboeStockSearchData(StockSearchData): + """CBOE Company Search Data.""" + + class Config: + fields = { + "name": "Company Name", + "symbol": "Symbol", + } + + dpmName: Optional[str] = Field( + description="The name of the primary market maker.", + alias="DPM Name", + ) + postStation: Optional[str] = Field( + description="The post and station location on the CBOE trading floor.", + alias="Post/Station", + ) + + @validator("symbol", pre=True, check_fields=False) + def name_validate(cls, v): # pylint: disable=E0213 + return v.upper() + + +class CboeStockSearchFetcher( + Fetcher[ + CboeStockSearchQueryParams, + List[CboeStockSearchData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> CboeStockSearchQueryParams: + return CboeStockSearchQueryParams(**params) + + @staticmethod + def extract_data( + query: CboeStockSearchQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[CboeStockSearchData]: + data = stock_search(query.query, ticker=query.ticker) + + return [CboeStockSearchData.parse_obj(d) for d in data.get("results", [])] + + @staticmethod + def transform_data(data: List[CboeStockSearchData]) -> List[CboeStockSearchData]: + return data diff --git a/openbb_sdk/providers/cboe/openbb_cboe/utils/__init__.py b/openbb_sdk/providers/cboe/openbb_cboe/utils/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/openbb_sdk/providers/cboe/openbb_cboe/utils/cboe_companies.json b/openbb_sdk/providers/cboe/openbb_cboe/utils/cboe_companies.json new file mode 100644 index 00000000000..5bd1075f48d --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/utils/cboe_companies.json @@ -0,0 +1 @@ +{"Company Name":{"SVIX":"-1x Short VIX Futures ETF","FLWS":"1 800 FLOWERS COM INC CL A","VCXA":"10X CAP VENTURE ACQSTN CORP II COM CL A","TXG":"10X GENOMICS INC CL A COM","YQ":"17 ED & TECHNOLOGY GROUP INC ADS","TURN":"180 DEGREE CAP CORP COM NEW","ATNF":"180 LIFE SCIENCES CORP COM NEW","DIBS":"1STDIBS COM INC COM","XXII":"22ND CENTY GROUP INC COM NEW","ME":"23ANDME HOLDING CO CLASS A COM","TSVT":"2SEVENTY BIO INC COMMON STOCK","TWOU":"2U INC COM","BITX":"2x Bitcoin Strategy ETF","UVIX":"2x Long VIX Futures ETF ","DDD":"3-D SYS CORP DEL COM NEW","MMM":"3M CO COM","FDMT":"4D MOLECULAR THERAPEUTICS INC COM","FEAM":"5E ADVANCED MATERIALS INC COMMON STOCK","ETNB":"89BIO INC COM","EGHT":"8X8 INC NEW COM","NMTRQ":"9 METERS BIOPHARMA INC COM NEW","MASS":"908 DEVICES INC COM","AKA":"A K A BRANDS HLDG CORP COM","AMRK":"A-MARK PRECIOUS METALS INC COM","ATEN":"A10 NETWORKS INC COM","AAON":"AAON INC COM PAR $0.004","AIR":"AAR CORP COM","ABT":"ABBOTT LABS COM","ABBV":"ABBVIE INC COM","ABCM":"ABCAM PLC ADS","ABCL":"ABCELLERA BIOLOGICS INC COM","ABEO":"ABEONA THERAPEUTICS INC COM NEW","ANF":"ABERCROMBIE & FITCH CO CL A","ABM":"ABM INDS INC COM","BCIM":"ABRDN ETFS BBG INDUSTRL MET","BCI":"ABRDN ETFS BBRG ALL COMD K1","BCD":"ABRDN ETFS BBRG ALL COMMDY","SGOL":"ABRDN GOLD ETF TRUST PHYSCL GOLD SHS","SIVR":"ABRDN SILVER ETF TRUST PHYSCL SILVR SHS","ABSI":"ABSCI CORPORATION COM","ABST":"ABSOLUTE SOFTWARE CORP COM","ACTG":"ACACIA RESH CORP ACACIA TCH COM","ASO":"ACADEMY SPORTS & OUTDOORS INC COM","ACHC":"ACADIA HEALTHCARE COMPANY INC COM","ACAD":"ACADIA PHARMACEUTICALS INC COM","ACEL":"ACCEL ENTERTAINMENT INC COM CL A1","AXDX":"ACCELERATE DIAGNOSTICS INC COM NEW","ACN":"ACCENTURE PLC IRELAND SHS CLASS A","ACCO":"ACCO BRANDS CORP COM","ACCD":"ACCOLADE INC COM","ARAY":"ACCURAY INC COM","ACRX":"ACELRX PHARMACEUTICALS INC COM NEW","SLRN":"ACELYRIN INC COM","ACER":"ACER THERAPEUTICS INC COM","ACGN":"ACERAGEN INC COM","ACHV":"ACHIEVE LIFE SCIENCES INC COM","ACIW":"ACI WORLDWIDE INC COM","ACRS":"ACLARIS THERAPEUTICS INC COM","ACMR":"ACM RESH INC COM CL A","ACNB":"ACNB CORP COM","ACOR":"ACORDA THERAPEUTICS INC COM","ACR":"ACRES COMMERCIAL REALTY CORP COM NEW","ATNM":"ACTINIUM PHARMACEUTICALS INC COM","ATVI":"ACTIVISION BLIZZARD INC COM","AYI":"ACUITY BRANDS INC COM","ABOS":"ACUMEN PHARMACEUTICALS INC COM","GOLF":"ACUSHNET HLDGS CORP COM","AFIB":"ACUTUS MED INC COM","ACVA":"ACV AUCTIONS INC COM CL A","PEO":"ADAM NAT RES FD INC COM","ADMP":"ADAMIS PHARMACEUTICALS CORP COM","AHCO":"ADAPTHEALTH CORP COMMON STOCK","ADAP":"ADAPTIMMUNE THERAPEUTICS PLC SPONDS ADR","ADPT":"ADAPTIVE BIOTECHNOLOGIES CORP COM","ADCT":"ADC THERAPEUTICS SA SHS","ADUS":"ADDUS HOMECARE CORP COM","AGRO":"ADECOAGRO S A COM","ADEA":"ADEIA INC COM","ADIL":"ADIAL PHARMACEUTICALS INC COM","ACET":"ADICET BIO INC COM","ADNT":"ADIENT PLC ORD SHS","ADTX":"ADITXT INC COM NEW","ADMA":"ADMA BIOLOGICS INC COM","ADBE":"ADOBE SYSTEMS INCORPORATED COM","ADT":"ADT INC DEL COM","ATGE":"ADTALEM GLOBAL ED INC COM","ADTN":"ADTRAN HOLDINGS INC COM","AAP":"ADVANCE AUTO PARTS INC COM","WMS":"ADVANCED DRAIN SYS INC DEL COM","AEIS":"ADVANCED ENERGY INDS COM","AMD":"ADVANCED MICRO DEVICES INC COM","ASIX":"ADVANSIX INC COM","ADV":"ADVANTAGE SOLUTIONS INC COM CL A","ADN":"ADVENT TECHNOLOGIES HOLDNG INC COM CL A","ADVM":"ADVERUM BIOTECHNOLOGIES INC COM","EATV":"ADVISORS SER TR VEGTECH PLANT B","GK":"ADVISORSHARES TR GERBER KAWASAKI","LETB":"ADVISORSHARES TR LET BOB AI POWER","MSOX":"ADVISORSHARES TR MSOS 2X DAILY ET","YOLO":"ADVISORSHARES TR PURE CANNABIS","MSOS":"ADVISORSHARES TR PURE US CANNABIS","HDGE":"ADVISORSHARES TR RANGER EQUITY BE","ACM":"AECOM COM","AGLE":"AEGLEA BIOTHERAPEUTICS INC COM","AEG":"AEGON N V NY REGISTRY SHS","AEHR":"AEHR TEST SYS COM","AMTX":"AEMETIS INC COM NEW","AER":"AERCAP HOLDINGS NV SHS","AJRD":"AEROJET ROCKETDYNE HLDGS INC COM","AVAV":"AEROVIRONMENT INC COM","ASLE":"AERSALE CORPORATION COM","AES":"AES CORP COM","AEMD":"AETHLON MED INC COM","AEVA":"AEVA TECHNOLOGIES INC COM","LIDR":"AEYE INC CL A COM","AFCG":"AFC GAMMA INC COM","AMG":"AFFILIATED MANAGERS GROUP INC COM","AFMD":"AFFIMED N V COM","AFRM":"AFFIRM HLDGS INC COM CL A","AFL":"AFLAC INC COM","MITT":"AG MTG INVT TR INC COM NEW","AGCO":"AGCO CORP COM","UAVS":"AGEAGLE AERIAL SYS INC NEW COM","AGEN":"AGENUS INC COM NEW","A":"AGILENT TECHNOLOGIES INC COM","AGTI":"AGILITI INC COM","AGL":"AGILON HEALTH INC COM","AGYS":"AGILYSYS INC COM","AGIO":"AGIOS PHARMACEUTICALS INC COM","AGNC":"AGNC INVT CORP COM","AEM":"AGNICO EAGLE MINES LTD COM","API":"AGORA INC ADS","ADC":"AGREE RLTY CORP COM","AGRI":"AGRIFORCE GROWING SYSTEMS LTD COM","AL":"AIR LEASE CORP CL A","APD":"AIR PRODS & CHEMS INC COM","ATSG":"AIR TRANSPORT SERVICES GRP INC COM","ABNB":"AIRBNB INC COM CL A","AIRG":"AIRGAIN INC COM","MIMO":"AIRSPAN NETWORKS HOLDINGS INC COM","AKAM":"AKAMAI TECHNOLOGIES INC COM","AKBA":"AKEBIA THERAPEUTICS INC COM","KERN":"AKERNA CORP COM NEW","AKRO":"AKERO THERAPEUTICS INC COM","AKTS":"AKOUSTIS TECHNOLOGIES INC COM","AKYA":"AKOYA BIOSCIENCES INC COM","ALG":"ALAMO GROUP INC COM","AGI":"ALAMOS GOLD INC NEW COM CL A","ALRM":"ALARM COM HLDGS INC COM","ALK":"ALASKA AIR GROUP INC COM","AIN":"ALBANY INTL CORP CL A","ALB":"ALBEMARLE CORP COM","ACI":"ALBERTSONS COS INC COMMON STOCK","AA":"ALCOA CORP COM","ALC":"ALCON AG ORD SHS","ALDX":"ALDEYRA THERAPEUTICS INC COM","ALEC":"ALECTOR INC COM","ALRS":"ALERUS FINL CORP COM","ALEX":"ALEXANDER & BALDWIN INC NEW COM","ARE":"ALEXANDRIA REAL ESTATE EQ INC COM","ASTL":"ALGOMA STL GROUP INC COM","AQN":"ALGONQUIN PWR UTILS CORP COM","BABA":"ALIBABA GROUP HLDG LTD SPONSORED ADS","ALIT":"ALIGHT INC COM CL A","ALGN":"ALIGN TECHNOLOGY INC COM","ALHC":"ALIGNMENT HEALTHCARE INC COM","ALGS":"ALIGOS THERAPEUTICS INC COM","ALKT":"ALKAMI TECHNOLOGY INC COM","ALKS":"ALKERMES PLC SHS","ALLK":"ALLAKOS INC COM","BIRD":"ALLBIRDS INC COM CL A","ALGT":"ALLEGIANT TRAVEL CO COM","ALLE":"ALLEGION PLC ORD SHS","ALLG":"ALLEGO N V ORD SHS","ALGM":"ALLEGRO MICROSYSTEMS INC COM","ARLP":"ALLIANCE RESOURCE PARTNERS L P UT LTD PART","AB":"ALLIANCEBERNSTEIN HLDG L P UNIT LTD PARTN","LNT":"ALLIANT ENERGY CORP COM","AMOT":"ALLIED MOTION TECHNOLOGIES INC COM","ALSN":"ALLISON TRANSMISSION HLDGS INC COM","ALLO":"ALLOGENE THERAPEUTICS INC COM","ALLT":"ALLOT LTD SHS","ALVR":"ALLOVIR INC COM","ALL":"ALLSTATE CORP COM","ALLY":"ALLY FINL INC COM","AAU":"ALMADEN MINERALS LTD COM CL B","ALNY":"ALNYLAM PHARMACEUTICALS INC COM","AOSL":"ALPHA & OMEGA SEMICONDUCTOR LT SHS","QMOM":"Alpha Architect U.S. Quantitative Momentum ETF","AMR":"ALPHA METALLURGICAL RESOUR INC COM","APT":"ALPHA PRO TECH LTD COM","GOOGL":"ALPHABET INC CAP STK CL A","GOOG":"ALPHABET INC CAP STK CL C","ATEC":"ALPHATEC HLDGS INC COM NEW","ALPP":"ALPINE 4 HOLDINGS INC CL A NEW","ALPN":"ALPINE IMMUNE SCIENCES INC COM","PINE":"ALPINE INCOME PPTY TR INC COM","OGIG":"ALPS - O'Shares Global Internet Giants ETF","OUSA":"ALPS - O'Shares U.S. Quality Dividend ETF","AMLP":"ALPS ETF TR ALERIAN MLP","BFOR":"ALPS ETF TR BARRONS 400 ETF","ACES":"ALPS ETF TR CLEAN ENERGY","DTEC":"ALPS ETF TR DISRUPTIVE TECH","SBIO":"ALPS ETF TR MED BREAKTHGH","ALTG":"ALTA EQUIPMENT GROUP INC COMMON STOCK","ALTR":"ALTAIR ENGR INC COM CL A","AYX":"ALTERYX INC COM CL A","ATUS":"ALTICE USA INC CL A","ALT":"ALTIMMUNE INC COM NEW","ALTU":"ALTITUDE ACQUISITION CORP COM CL A","ALTO":"ALTO INGREDIENTS INC COM","MO":"ALTRIA GROUP INC COM","AMPS":"ALTUS POWER INC COM CL A","ALXO":"ALX ONCOLOGY HLDGS INC COM","ALZN":"ALZAMEND NEURO INC COM NEW","AMAL":"AMALGAMATED FINANCIAL CORP COM","AMRN":"AMARIN CORP PLC SPONS ADR NEW","AMZN":"AMAZON COM INC COM","AMBC":"AMBAC FINL GROUP INC COM NEW","AMBA":"AMBARELLA INC SHS","ABEV":"AMBEV SA SPONSORED ADR","AMAM":"AMBRX BIOPHARMA INC SPONSORED ADS","AMC":"AMC ENTMT HLDGS INC CL A COM","AMCX":"AMC NETWORKS INC CL A","AMCR":"AMCOR PLC ORD","DOX":"AMDOCS LTD SHS","AMED":"AMEDISYS INC COM","AMSWA":"AMER SOFTWARE INC CL A","AWR":"AMER STATES WTR CO COM","AMTB":"AMERANT BANCORP INC CL A","AEE":"AMEREN CORP COM","AMRC":"AMERESCO INC CL A","AMX":"AMERICA MOVIL SAB DE CV SPON ADS RP CL B","AAL":"AMERICAN AIRLS GROUP INC COM","AAT":"AMERICAN ASSETS TR INC COM","AXL":"AMERICAN AXLE & MFG HLDGS INC COM","QPFF":"American Century Quality Preferred ETF","AVEM":"AMERICAN CENTY ETF TR AVANTIS EMGMKT","AVDE":"AMERICAN CENTY ETF TR INTL EQT ETF","QGRO":"AMERICAN CENTY ETF TR US QUALITY GROW","AEO":"AMERICAN EAGLE OUTFITTERS INC COM","AEP":"AMERICAN ELEC PWR CO INC COM","AEL":"AMERICAN EQTY INVT LIFE HLD CO COM","AXP":"AMERICAN EXPRESS CO COM","AFG":"AMERICAN FINL GROUP INC OHIO COM","AMH":"AMERICAN HOMES 4 RENT CL A","AIG":"AMERICAN INTL GROUP INC COM NEW","AOUT":"AMERICAN OUTDOOR BRANDS INC COM","APEI":"AMERICAN PUB ED INC COM","AREC":"AMERICAN RES CORP CL A","AMSC":"AMERICAN SUPERCONDUCTOR CORP SHS NEW","AMT":"AMERICAN TOWER CORP NEW COM","AVD":"AMERICAN VANGUARD CORP COM","AMWL":"AMERICAN WELL CORP CL A","AMWD":"AMERICAN WOODMARK CORPORATION COM","AWK":"AMERICAN WTR WKS CO INC NEW COM","CRMT":"AMERICAS CAR-MART INC COM","COLD":"AMERICOLD REALTY TRUST INC COM","AMP":"AMERIPRISE FINL INC COM","ABCB":"AMERIS BANCORP COM","ABC":"AMERISOURCEBERGEN CORP COM","ATLO":"AMES NATL CORP COM","AME":"AMETEK INC COM","AMGN":"AMGEN INC COM","FOLD":"AMICUS THERAPEUTICS INC COM","AMKR":"AMKOR TECHNOLOGY INC COM","POWW":"AMMO INC COM","AMN":"AMN HEALTHCARE SVCS INC COM","AMRX":"AMNEAL PHARMACEUTICALS INC COM STK CL A","AP":"AMPCO-PITTSBURG CORP COM","AMPH":"AMPHASTAR PHARMACEUTICALS INC COM","APH":"AMPHENOL CORP NEW CL A","AMPY":"AMPLIFY ENERGY CORP NEW COM","BATT":"AMPLIFY ETF TR AMPLIFY LITHIUM","SWAN":"AMPLIFY ETF TR BLACKSWAN GRWT","BLOK":"AMPLIFY ETF TR BLOCKCHAIN LDR","DIVO":"AMPLIFY ETF TR CWP ENHANCED DIV","IWIN":"AMPLIFY ETF TR INFLATION FIGHTE","IBUY":"AMPLIFY ETF TR ONLIN RETL ETF","CNBS":"AMPLIFY ETF TR SEYMOUR CANNBS","AMPL":"AMPLITUDE INC COM CL A","AMPX":"AMPRIUS TECHNOLOGIES INC COMMON STOCK","ASYS":"AMTECH SYS INC COM PAR $0.01N","AMLX":"AMYLYX PHARMACEUTICALS INC COM","AMRS":"AMYRIS INC COM NEW","ADI":"ANALOG DEVICES INC COM","ANAB":"ANAPTYSBIO INC COM","AVXL":"ANAVEX LIFE SCIENCES CORP COM NEW","ANDE":"ANDERSONS INC COM","ANGI":"ANGI INC COM CL A NEW","ANGO":"ANGIODYNAMICS INC COM","AU":"ANGLOGOLD ASHANTI LIMITED SPONSORED ADR","BUD":"ANHEUSER BUSCH INBEV SA\/NV SPONSORED ADR","ANIP":"ANI PHARMACEUTICALS INC COM","ANIK":"ANIKA THERAPEUTICS INC COM","NLY":"ANNALY CAPITAL MANAGEMENT INC COM NEW","ANNX":"ANNEXON INC COM","ANSS":"ANSYS INC COM","ATEX":"ANTERIX INC COM","AM":"ANTERO MIDSTREAM CORP COM","AR":"ANTERO RESOURCES CORP COM","HOUS":"ANYWHERE REAL ESTATE INC COM","AON":"AON PLC SHS CL A","APA":"APA CORPORATION COM","AIRC":"APARTMENT INCOME REIT CORP COM","AIV":"APARTMENT INVT & MGMT CO CL A","APLS":"APELLIS PHARMACEUTICALS INC COM","APG":"API GROUP CORP COM STK","APOG":"APOGEE ENTERPRISES INC COM","ARI":"APOLLO COML REAL EST FIN INC COM","APO":"APOLLO GLOBAL MGMT INC COM","AMEH":"APOLLO MED HLDGS INC COM NEW","APPF":"APPFOLIO INC COM CL A","APPH":"APPHARVEST INC COM","APPN":"APPIAN CORP CL A","APLE":"APPLE HOSPITALITY REIT INC COM NEW","AAPL":"APPLE INC COM","APLD":"APPLIED DIGITAL CORP COM NEW","APDN":"APPLIED DNA SCIENCES INC COM","AIT":"APPLIED INDL TECHNOLOGIES INC COM","AMAT":"APPLIED MATLS INC COM","AMTI":"APPLIED MOLECULAR TRANS INC COM","AAOI":"APPLIED OPTOELECTRONICS INC COM","APP":"APPLOVIN CORP COM CL A","APRE":"APREA THERAPEUTICS INC COM NEW","ATR":"APTARGROUP INC COM","APTV":"APTIV PLC SHS","APTO":"APTOSE BIOSCIENCES INC COM","AQMS":"AQUA METALS INC COM","AQB":"AQUABOUNTY TECHNOLOGIES INC COM NEW","AQST":"AQUESTIVE THERAPEUTICS INC COM","ARMK":"ARAMARK COM","ARAV":"ARAVIVE INC COM","ARBE":"ARBE ROBOTICS LTD ORDINARY SHARES","ABR":"ARBOR REALTY TRUST INC COM","ABUS":"ARBUTUS BIOPHARMA CORP COM","ARC":"ARC DOCUMENT SOLUTIONS INC COM","RKDA":"ARCADIA BIOSCIENCES INC COM","ARCB":"ARCBEST CORP COM","ACLX":"ARCELLX INC COMMON STOCK","MT":"ARCELORMITTAL SA LUXEMBOURG NY REGISTRY SH","ACGL":"ARCH CAP GROUP LTD ORD","ARCH":"ARCH RESOURCES INC CL A","ACHR":"ARCHER AVIATION INC COM CL A","ADM":"ARCHER DANIELS MIDLAND CO COM","AROC":"ARCHROCK INC COM","FUV":"ARCIMOTO INC COM NEW","ARCE":"ARCO PLATFORM LTD COM CL A","ARNC":"ARCONIC CORPORATION COM","ARCO":"ARCOS DORADOS HOLDINGS INC SHS CLASS -A -","ACA":"ARCOSA INC COM","ARCT":"ARCTURUS THERAPEUTICS HLDGS COM","RCUS":"ARCUS BIOSCIENCES INC COM","ARQT":"ARCUTIS BIOTHERAPEUTICS INC COM","AMBP":"ARDAGH METAL PACKAGING S A SHS","ARDX":"ARDELYX INC COM","ASC":"ARDMORE SHIPPING CORP COM","AAC":"ARES ACQUISITION CORPORATION COM CL A","ARCC":"ARES CAPITAL CORP COM","ACRE":"ARES COML REAL ESTATE CORP COM","ARES":"ARES MANAGEMENT CORPORATION CL A COM STK","ARGX":"ARGENX SE SPONSORED ADR","ARBK":"ARGO BLOCKCHAIN PLC ADS","ARGO":"ARGO GROUP INTL HLDGS LTD COM","ARHS":"ARHAUS INC COM CL A","ARIS":"ARIS WATER SOLUTIONS INC CLASS A COM","ANET":"ARISTA NETWORKS INC COM","ARKQ":"ARK Autonomous Technology & Robotics ETF","ARKF":"ARK ETF TR FINTECH INNOVA","ARKK":"ARK ETF TR INNOVATION ETF","ARKW":"ARK ETF TR NEXT GNRTN INTER","ARKG":"ARK Genomic Revolution ETF","IZRL":"ARK Israel Innovative Technology ETF","ARKX":"ARK Space Exploration & Innovation ETF","ARKO":"ARKO CORP COM","AAIC":"ARLINGTON ASSET INVST CORP CL A NEW","ARLO":"ARLO TECHNOLOGIES INC COM","AHH":"ARMADA HOFFLER PPTYS INC COM","ARR":"ARMOUR RESIDENTIAL REIT INC COM NEW","AWI":"ARMSTRONG WORLD INDS INC NEW COM","ARQQ":"ARQIT QUANTUM INC ORDINARY SHARES","ARRY":"ARRAY TECHNOLOGIES INC COM SHS","ARVL":"ARRIVAL COM NEW","ARW":"ARROW ELECTRS INC COM","GYLD":"ARROW ETF TR ARROW DJ GLB YLD","YPS":"Arrow Reverse Cap 500 ETF","ARWR":"ARROWHEAD PHARMACEUTICALS INC COM","AIP":"ARTERIS INC COM","APAM":"ARTISAN PARTNERS ASSET MGMT IN CL A","AORT":"ARTIVION INC COM","ARVN":"ARVINAS INC COM","ASA":"ASA GOLD AND PRECIOUS MTLS LMT SHS","ASAN":"ASANA INC CL A","ABG":"ASBURY AUTOMOTIVE GROUP INC COM","ASND":"ASCENDIS PHARMA A\/S SPONSORED ADR","ASX":"ASE TECHNOLOGY HLDG CO LTD SPONSORED ADS","ASXC":"ASENSUS SURGICAL INC COM","ASGN":"ASGN INC COM","AHT":"ASHFORD HOSPITALITY TR INC COM SHS","ASH":"ASHLAND INC COM","ASLN":"ASLAN PHARMACEUTICALS LTD SPON ADS NEW","ASML":"ASML HOLDING N V N Y REGISTRY SHS","ASPN":"ASPEN AEROGELS INC COM","ASPU":"ASPEN GROUP INC COM NEW","AZPN":"ASPEN TECHNOLOGY INC COM","ASMB":"ASSEMBLY BIOSCIENCES INC COM","ASRT":"ASSERTIO HOLDINGS INC COM NEW","AMK":"ASSETMARK FINL HLDGS INC COM","ASB":"ASSOCIATED BANC CORP COM","AIZ":"ASSURANT INC COM","AGO":"ASSURED GUARANTY LTD COM","ASTS":"AST SPACEMOBILE INC COM CL A","ASTE":"ASTEC INDS INC COM","ASTR":"ASTRA SPACE INC COM CL A","AZN":"ASTRAZENECA PLC SPONSORED ADR","ATXS":"ASTRIA THERAPEUTICS INC COM","ATRO":"ASTRONICS CORP COM","ASUR":"ASURE SOFTWARE INC COM","T":"AT&T INC COM","ATAI":"ATAI LIFE SCIENCES NV SHS","ATRA":"ATARA BIOTHERAPEUTICS INC COM","AVIR":"ATEA PHARMACEUTICALS INC COM","ATER":"ATERIAN INC COM","ATHX":"ATHERSYS INC NEW COM NEW","ATHA":"ATHIRA PHARMA INC COM","ATI":"ATI INC COM","ATIP":"ATI PHYSICAL THERAPY INC COM CL A","ATKR":"ATKORE INC COM","BATRA":"ATLANTA BRAVES HLDGS INC COM SER A","AUB":"ATLANTIC UN BANKSHARES CORP COM","AY":"ATLANTICA SUSTAINABLE INFR PLC SHS","ATLC":"ATLANTICUS HOLDINGS CORP COM","AESI":"ATLAS ENERGY SOLUTIONS INC COM CLASS A","TEAM":"ATLASSIAN CORPORATION CL A","ATO":"ATMOS ENERGY CORP COM","ATNI":"ATN INTL INC COM","ATOM":"ATOMERA INC COM","ATOS":"ATOSSA THERAPEUTICS INC COM","BCEL":"ATRECA INC CL A COM","ATRC":"ATRICURE INC COM","LIFE":"ATYR PHARMA INC COM NEW","AUDAD":"AUDACY INC COM CLASS A","AUDC":"AUDIOCODES LTD ORD","AURA":"AURA BIOSCIENCES INC COM","AUPH":"AURINIA PHARMACEUTICALS INC COM","ACB":"AURORA CANNABIS INC COM","AUR":"AURORA INNOVATION INC CLASS A COM","JG":"AURORA MOBILE LTD ADS","ADSK":"AUTODESK INC COM","ATHM":"AUTOHOME INC SP ADS RP CL A","ALV":"AUTOLIV INC COM","AUTL":"AUTOLUS THERAPEUTICS PLC SPON ADS","ADP":"AUTOMATIC DATA PROCESSING INC COM","AN":"AUTONATION INC COM","AZO":"AUTOZONE INC COM","AVDL":"AVADEL PHARMACEUTICALS PLC SPONSORED ADR","AVB":"AVALONBAY CMNTYS INC COM","AVNS":"AVANOS MED INC COM","AVTA":"AVANTAX INC COM","AVTR":"AVANTOR INC COM","AVAH":"AVEANNA HEALTHCARE HLDGS INC COM","AVPT":"AVEPOINT INC COM CL A","AVY":"AVERY DENNISON CORP COM","AVNW":"AVIAT NETWORKS INC COM NEW","CDMO":"AVID BIOSERVICES INC COM","AVID":"AVID TECHNOLOGY INC COM","RNA":"AVIDITY BIOSCIENCES INC COM","AVDX":"AVIDXCHANGE HOLDINGS INC COM","AVNT":"AVIENT CORPORATION COM","CAR":"AVIS BUDGET GROUP COM","AVA":"AVISTA CORP COM","RCEL":"AVITA MEDICAL INC COM","AVT":"AVNET INC COM","AWRE":"AWARE INC MASS COM","AXTA":"AXALTA COATING SYS LTD COM","ACLS":"AXCELIS TECHNOLOGIES INC COM NEW","AXS":"AXIS CAP HLDGS LTD SHS","AXGN":"AXOGEN INC COM","AXON":"AXON ENTERPRISE INC COM","AXNX":"AXONICS INC COM","AX":"AXOS FINANCIAL INC COM","AXSM":"AXSOME THERAPEUTICS INC COM","AXTI":"AXT INC COM","AYRO":"AYRO INC COM","AZEK":"AZEK CO INC CL A","AZTA":"AZENTA INC COM","AZUL":"AZUL S A SPONSR ADR PFD","AZZ":"AZZ INC COM","BGS":"B & G FOODS INC NEW COM","RILY":"B. RILEY FINANCIAL INC COM","BTG":"B2GOLD CORP COM","BW":"BABCOCK & WILCOX ENTERPRISES I COM","BLZE":"BACKBLAZE INC COM CL A","BMI":"BADGER METER INC COM","BIDU":"BAIDU INC SPON ADR REP A","BKR":"BAKER HUGHES COMPANY CL A","BKKT":"BAKKT HOLDINGS INC COM CL A","BCPC":"BALCHEM CORP COM","BALL":"BALL CORP COM","BLDP":"BALLARD PWR SYS INC NEW COM","BALY":"BALLYS CORPORATION COM","BANC":"BANC OF CALIFORNIA INC COM","BBAR":"BANCO BBVA ARGENTINA S A SPONSORED ADS","BBVA":"BANCO BILBAO VIZCAYA ARGENTARI SPONSORED ADR","BBD":"BANCO BRADESCO S A SP ADR PFD NEW","BCH":"BANCO DE CHILE SPONSORED ADS","BLX":"BANCO LATINOAMERICANO DE COMER SHS E","BMA":"BANCO MACRO SA SPON ADR B","BSBR":"BANCO SANTANDER BRASIL S A ADS REP 1 UNIT","BSAC":"BANCO SANTANDER CHILE NEW SP ADR REP COM","SAN":"BANCO SANTANDER S.A. ADR","BAND":"BANDWIDTH INC COM CL A","BAC":"BANK AMERICA CORP COM","BOH":"BANK HAWAII CORP COM","BMRC":"BANK MARIN BANCORP COM","FNGS":"BANK MONTREAL MEDIUM NT LKD 38","BMO":"BANK MONTREAL QUE COM","BK":"BANK NEW YORK MELLON CORP COM","BNS":"BANK NOVA SCOTIA HALIFAX COM","NTB":"BANK OF NT BUTTERFIELD&SON LTD SHS NEW","OZK":"BANK OZK LITTLE ROCK ARK COM","BFIN":"BANKFINANCIAL CORP COM","BKU":"BANKUNITED INC COM","BANR":"BANNER CORP COM NEW","BZUN":"BAOZUN INC SPONSORED ADR","BHB":"BAR HBR BANKSHARES COM","DJP":"BARCLAYS BANK PLC DJUBS CMDT ETN36","GRN":"BARCLAYS BANK PLC IPATH SER B ETN","BCS":"BARCLAYS PLC ADR","BBDC":"BARINGS BDC INC COM","BARK":"BARK INC COM","BNED":"BARNES & NOBLE ED INC COM","B":"BARNES GROUP INC COM","BBSI":"BARRETT BUSINESS SVCS INC COM","GOLD":"BARRICK GOLD CORP COM","BSET":"BASSETT FURNITURE INDS INC COM","BBWI":"BATH & BODY WORKS INC COM","BHC":"BAUSCH HEALTH COS INC COM","BLCO":"BAUSCH PLUS LOMB CORP COMMON SHARES","BAX":"BAXTER INTL INC COM","BCML":"BAYCOM CORP COM","BTE":"BAYTEX ENERGY CORP COM","BCE":"BCE INC COM NEW","BECN":"BEACON ROOFING SUPPLY INC COM","BEEM":"BEAM GLOBAL COM","BEAM":"BEAM THERAPEUTICS INC COM","BZH":"BEAZER HOMES USA INC COM NEW","BDX":"BECTON DICKINSON & CO COM","BGNE":"BEIGENE LTD SPONSORED ADR","BDC":"BELDEN INC COM","BLPH":"BELLEROPHON THERAPEUTICS INC COM NEW","BRBR":"BELLRING BRANDS INC COMMON STOCK","BHE":"BENCHMARK ELECTRS INC COM","BHIL":"BENSON HILL INC COMMON STOCK","BSY":"BENTLEY SYS INC COM CL B","WRB":"BERKLEY W R CORP COM","BRK.B":"BERKSHIRE HATHAWAY INC DEL CL B NEW","BERY":"BERRY GLOBAL GROUP INC COM","BBY":"BEST BUY INC COM","BEST":"BEST INC SPONSORED ADS","BTTX":"BETTER THERAPEUTICS INC COMMON STOCK","BWAC":"BETTER WORLD ACQUISITION CORP COM","BWMX":"BETTERWARE DE MEXC S A P I DE SHS","XAIR":"BEYOND AIR INC COM","BYND":"BEYOND MEAT INC COM","BYSI":"BEYONDSPRING INC SHS","BGC":"BGC GROUP INC CL A","BHP":"BHP GROUP LTD SPONSORED ADS","BCYC":"BICYCLE THERAPEUTICS PLC SPONSORED ADS","BGFV":"BIG 5 SPORTING GOODS CORP COM","BIG":"BIG LOTS INC COM","BBAI":"BIGBEAR AI HLDGS INC COM","BIGC":"BIGCOMMERCE HLDGS INC COM SER 1","BILI":"BILIBILI INC SPONS ADS REP Z","BILL":"BILL HOLDINGS INC COM","BIO":"BIO RAD LABS INC CL A","BKYI":"BIO-KEY INTL INC COM NEW","BPTH":"BIO-PATH HLDGS INC COM","TECH":"BIO-TECHNE CORP COM","BCAB":"BIOATLA INC COM","BCDA":"BIOCARDIA INC COM","BIOC":"BIOCEPT INC COM NEW","BCRX":"BIOCRYST PHARMACEUTICALS INC COM","BDSX":"BIODESIX INC COM","BFRI":"BIOFRONTERA INC COM NEW","BIIB":"BIOGEN INC COM","BHVN":"BIOHAVEN LTD COM","BLFS":"BIOLIFE SOLUTIONS INC COM NEW","BMRN":"BIOMARIN PHARMACEUTICAL INC COM","BMEA":"BIOMEA FUSION INC COM","BNGO":"BIONANO GENOMICS INC COM","BNTX":"BIONTECH SE SPONSORED ADS","BIOR":"BIORA THERAPEUTICS INC COM NEW","BSGM":"BIOSIG TECHNOLOGIES INC COM NEW","BTCY":"BIOTRICITY INC COM NEW","BVS":"BIOVENTUS INC COM CL A","BIVI":"BIOVIE INC CL A NEW","BTAI":"BIOXCEL THERAPEUTICS INC COM","BRDS":"BIRD GLOBAL INC COM CL A","BTBT":"BIT DIGITAL INC SHS","BTCM":"BIT MINING LIMITED SPON ADR","BITF":"BITFARMS LTD COM","BNMV":"BITNILE METAVERSE INC COM","BJRI":"BJS RESTAURANTS INC COM","BJ":"BJS WHSL CLUB HLDGS INC COM","BKH":"BLACK HILLS CORP COM","BKI":"BLACK KNIGHT INC COM","BSM":"BLACK STONE MINERALS L P COM UNIT","BLKB":"BLACKBAUD INC COM","BB":"BLACKBERRY LTD COM","BL":"BLACKLINE INC COM","BKCC":"BLACKROCK CAP INVT CORP COM","LCTD":"BLACKROCK ETF TRUST WORLD EX US CARB","BLK":"BLACKROCK INC COM","NEAR":"BlackRock Short Maturity Bond ETF","TCPC":"BLACKROCK TCP CAPITAL CORP COM","ICSH":"BlackRock Ultra Short-Term Bond ETF","BKSY":"BLACKSKY TECHNOLOGY INC COM CL A","BX":"BLACKSTONE INC COM","BXMT":"BLACKSTONE MTG TR INC COM CL A","BXSL":"BLACKSTONE SECD LENDING FD COMMON STOCK","BLDE":"BLADE AIR MOBILITY INC CL A COM","BLND":"BLEND LABS INC CL A","BLNK":"BLINK CHARGING CO COM","HRB":"BLOCK H & R INC COM","SQ":"BLOCK INC CL A","BE":"BLOOM ENERGY CORP COM CL A","BLMN":"BLOOMIN BRANDS INC COM","APRN":"BLUE APRON HLDGS INC COM","BLBD":"BLUE BIRD CORP COM","BLFY":"BLUE FOUNDRY BANCORP COM","OBDC":"BLUE OWL CAPITAL CORPORATION COM","OWL":"BLUE OWL CAPITAL INC COM CL A","BRBS":"BLUE RIDGE BANKSHARES INC VA COM","BLUE":"BLUEBIRD BIO INC COM","BXC":"BLUELINX HLDGS INC COM NEW","BPMC":"BLUEPRINT MEDICINES CORP COM","BMTX":"BM TECHNOLOGIES INC CL A COM","BA":"BOEING CO COM","BCC":"BOISE CASCADE CO DEL COM","BOKF":"BOK FINL CORP COM NEW","BKNG":"BOOKING HOLDINGS INC COM","BOOT":"BOOT BARN HLDGS INC COM","BAH":"BOOZ ALLEN HAMILTON HLDG CORP CL A","BWA":"BORGWARNER INC COM","BORR":"BORR DRILLING LTD SHS","SAM":"BOSTON BEER INC CL A","BOC":"BOSTON OMAHA CORP CL A COM STK","BXP":"BOSTON PROPERTIES INC COM","BSX":"BOSTON SCIENTIFIC CORP COM","BOWL":"BOWLERO CORP CL A COM","BOX":"BOX INC CL A","BOXDQ":"BOXED INC COM","BYD":"BOYD GAMING CORP COM","BP":"BP PLC SPONSORED ADR","BPT":"BP PRUDHOE BAY RTY TR UNIT BEN INT","BRC":"BRADY CORP CL A","BHR":"BRAEMAR HOTELS & RESORTS INC COM","BRAG":"BRAGG GAMING GROUP INC COM NEW","BCLI":"BRAINSTORM CELL THERAPEUTICS I COM NEW","BDN":"BRANDYWINE RLTY TR SH BEN INT NEW","BRZE":"BRAZE INC COM CL A","BRCC":"BRC INC COM CL A","BFH":"BREAD FINANCIAL HOLDINGS INC COM","BREZ":"BREEZE HOLDINGS ACQUISITN CORP COM","BRFS":"BRF SA SPONSORED ADR","BCTX":"BRIACELL THERAPEUTICS CORP COM NEW","BRDG":"BRIDGE INVT GROUP HLDGS INC COM CL A","BBIO":"BRIDGEBIO PHARMA INC COM","BTWN":"BRIDGETOWN HOLDINGS LTD COM CL A","BWB":"BRIDGEWATER BANCSHARES INC COM","BGXX":"BRIGHT GREEN CORP COMMON STOCK","BHG":"BRIGHT HEALTH GROUP INC COM NEW","BFAM":"BRIGHT HORIZONS FAM SOL IN DEL COM","BCOV":"BRIGHTCOVE INC COM","BHF":"BRIGHTHOUSE FINL INC COM","BSIG":"BRIGHTSPHERE INVT GROUP INC COM","BRSP":"BRIGHTSPIRE CAPITAL INC COM CL A","BV":"BRIGHTVIEW HLDGS INC COM","BRLT":"BRILLIANT EARTH GROUP INC CL A COM","EAT":"BRINKER INTL INC COM","BCO":"BRINKS CO COM","BMY":"BRISTOL-MYERS SQUIBB CO COM","VTOL":"BRISTOW GROUP INC COM","BTI":"BRITISH AMERN TOB PLC SPONSORED ADR","BRX":"BRIXMOR PPTY GROUP INC COM","AVGO":"BROADCOM INC COM","BR":"BROADRIDGE FINL SOLUTIONS INC COM","BNL":"BROADSTONE NET LEASE INC COM","BWEN":"BROADWIND INC COM NEW","BKD":"BROOKDALE SR LIVING INC COM","BBU":"BROOKFIELD BUSINESS PARTNERS L UNIT LTD L P","BN":"BROOKFIELD CORP CL A LTD VT SH","BIP":"BROOKFIELD INFRAST PARTNERS LP LP INT UNIT","BIPC":"BROOKFIELD INFRASTRUCTURE CORP COM SB VTG SHS A","BNRE":"BROOKFIELD REINS LTD CL A EXCH LT VTG","BEPC":"BROOKFIELD RENEWABLE CORP CL A SUB VTG","BEP":"BROOKFIELD RENEWABLE PARTNERS PARTNERSHIP UNIT","BRKL":"BROOKLINE BANCORP INC DEL COM","BRO":"BROWN & BROWN INC COM","BF.B":"BROWN FORMAN CORP CL B","DOOO":"BRP INC COM SUN VTG","BRKR":"BRUKER CORP COM","BC":"BRUNSWICK CORP COM","BSQR":"BSQUARE CORP COM NEW","BKE":"BUCKLE INC COM","BFIX":"BUILD FUNDS TRUST BOND INNOVATION","BBW":"BUILD-A-BEAR WORKSHOP INC COM","BLDR":"BUILDERS FIRSTSOURCE INC COM","BMBL":"BUMBLE INC COM CL A","BG":"BUNGE LIMITED COM","BUR":"BURFORD CAP LTD ORD SHS","BFI":"BURGERFI INTERNATIONAL INC COM","BURL":"BURLINGTON STORES INC COM","BFST":"BUSINESS FIRST BANCSHARES INC COM","BFLY":"BUTTERFLY NETWORK INC COM CL A","BZFD":"BUZZFEED INC CLASS A COM","BWXT":"BWX TECHNOLOGIES INC COM","BY":"BYLINE BANCORP INC COM","BYRN":"BYRNA TECHNOLOGIES INC COM NEW","CHRW":"C H ROBINSON WORLDWIDE INC COM NEW","AI":"C3 AI INC CL A","CCCC":"C4 THERAPEUTICS INC COM STK","CABA":"CABALETTA BIO INC COM","CBT":"CABOT CORP COM","CACI":"CACI INTL INC CL A","CADE":"CADENCE BANK COM","CDNS":"CADENCE DESIGN SYSTEM INC COM","CDZI":"CADIZ INC COM NEW","CDRE":"CADRE HLDGS INC COM","CAE":"CAE INC COM","CZR":"CAESARS ENTERTAINMENT INC NEW COM","CSTE":"CAESARSTONE LTD ORD SHS","CALM":"CAL MAINE FOODS INC COM NEW","CAMP":"CALAMP CORP COM","CVGW":"CALAVO GROWERS INC COM","CALC":"CALCIMEDICA INC COM NEW","CAL":"CALERES INC COM","CRC":"CALIFORNIA RES CORP COM STOCK","CWT":"CALIFORNIA WTR SVC GROUP COM","CALX":"CALIX INC COM","CALT":"CALLIDITAS THERAPEUTICS AB SPONSERED ADS","CPE":"CALLON PETE CO DEL COM","CLMT":"CALUMET SPECIALTY PRODS PARTNE UT LTD PARTNER","CEI":"CAMBER ENERGY INC COM","CMBM":"CAMBIUM NETWORKS CORP SHS","TOKE":"Cambria Cannabis ETF","SYLD":"Cambria Shareholder Yield ETF","TAIL":"Cambria Tail Risk ETF","CATC":"CAMBRIDGE BANCORP COM","CPT":"CAMDEN PPTY TR SH BEN INT","CCJ":"CAMECO CORP COM","CPB":"CAMPBELL SOUP CO COM","CWH":"CAMPING WORLD HLDGS INC CL A","CAMT":"CAMTEK LTD ORD","CAN":"CANAAN INC SPONSORED ADS","GOOS":"CANADA GOOSE HLDGS INC SHS SUB VTG","CM":"CANADIAN IMPERIAL BK COMM TORO COM","CNQ":"CANADIAN NAT RES LTD COM","CNI":"CANADIAN NATL RY CO COM","CP":"CANADIAN PACIFIC KANSAS CITY COM","CSIQ":"CANADIAN SOLAR INC COM","CNNE":"CANNAE HLDGS INC COM","CANO":"CANO HEALTH INC COM CL A","GOEV":"CANOO INC COM CL A","CGC":"CANOPY GROWTH CORP COM","CTLP":"CANTALOUPE INC COM","CCBG":"CAPITAL CITY BK GROUP INC COM","CGUS":"CAPITAL GROUP CORE EQUITY ETF SHS CREATION UNI","CGDV":"CAPITAL GROUP DIVIDEND VALUE E SHS CREATION UNI","CGGR":"CAPITAL GROUP GROWTH ETF SHS CREATION UNI","COF":"CAPITAL ONE FINL CORP COM","CPLP":"CAPITAL PRODUCT PARTNERS L P PARTNERSHP UNITS","CSWC":"CAPITAL SOUTHWEST CORP COM","CFFN":"CAPITOL FED FINL INC COM","TIME":"CAPITOL SER TR CLOCKWISE CAPITA","CPRI":"CAPRI HOLDINGS LIMITED SHS","CAPR":"CAPRICOR THERAPEUTICS INC COM NEW","CGRN":"CAPSTONE GREEN ENERGY CORP COM","CARA":"CARA THERAPEUTICS INC COM","CRDF":"CARDIFF ONCOLOGY INC COM","CAH":"CARDINAL HEALTH INC COM","CRDL":"CARDIOL THERAPEUTICS INC COM CL A","CDLX":"CARDLYTICS INC COM","CDNA":"CAREDX INC COM","CMAX":"CAREMAX INC COM CL A","CTRE":"CARETRUST REIT INC COM","CARG":"CARGURUS INC COM CL A","CRBU":"CARIBOU BIOSCIENCES INC COM","CARM":"CARISMA THERAPEUTICS INC COM","CSL":"CARLISLE COS INC COM","CG":"CARLYLE GROUP INC COM","CGBD":"CARLYLE SECURED LENDING INC COM","KMX":"CARMAX INC COM","CCL":"CARNIVAL CORP COMMON STOCK","CUK":"CARNIVAL PLC ADR","PRTS":"CARPARTS COM INC COM","CRS":"CARPENTER TECHNOLOGY CORP COM","CSV":"CARRIAGE SVCS INC COM","CARR":"CARRIER GLOBAL CORPORATION COM","TAST":"CARROLS RESTAURANT GROUP INC COM","CARS":"CARS COM INC COM","CARE":"CARTER BANKSHARES INC COM NEW","CRI":"CARTERS INC COM","CVNA":"CARVANA CO CL A","CASA":"CASA SYS INC COM","CWST":"CASELLA WASTE SYS INC CL A","CASY":"CASEYS GEN STORES INC COM","CASI":"CASI PHARMACEUTICALS INC ORD SHS","SAVA":"CASSAVA SCIENCES INC COM","CSTL":"CASTLE BIOSCIENCES INC COM","CTRM":"CASTOR MARITIME INC SHS NEW","CTLT":"CATALENT INC COM","CPRX":"CATALYST PHARMACEUTICALS INC COM","CAT":"CATERPILLAR INC COM","CATY":"CATHAY GEN BANCORP COM","CATO":"CATO CORP NEW CL A","CAVA":"CAVA GROUP INC COM","CVCO":"CAVCO INDS INC DEL COM","CZOO":"CAZOO GROUP LTD CL A","CBAT":"CBAK ENERGY TECHNOLOGY INC COM","YCBD":"CBDMD INC COM NEW","CBZ":"CBIZ INC COM","CBOE":"Cboe Global Markets, Inc.","VIX":"CBOE Volatility Index","CBRE":"CBRE GROUP INC CL A","CCCS":"CCC INTELLIGENT SOLUTIONS HLD COM","CDW":"CDW CORP COM","CECO":"CECO ENVIRONMENTAL CORP COM","FUN":"CEDAR FAIR L P DEPOSITRY UNIT","CVM":"CEL-SCI CORP COM PAR NEW","CE":"CELANESE CORP DEL COM","CELC":"CELCUITY INC COM","CLS":"CELESTICA INC SUB VTG SHS","CLDX":"CELLDEX THERAPEUTICS INC NEW COM NEW","CLBT":"CELLEBRITE DI LTD ORDINARY SHARES","CLLS":"CELLECTIS S A SPON ADS","CELH":"CELSIUS HLDGS INC COM NEW","CELU":"CELULARITY INC COM CL A","CX":"CEMEX SAB DE CV SPON ADR NEW","CENN":"CENNTRO ELECTRIC GROUP LIMITED ORD SHS","CVE":"CENOVUS ENERGY INC COM","CNC":"CENTENE CORP DEL COM","CNP":"CENTERPOINT ENERGY INC COM","CSR":"CENTERSPACE COM","CNTA":"CENTESSA PHARMACEUTICALS PLC SPONSORED ADS","CENTA":"CENTRAL GARDEN & PET CO CL A NON-VTG","CPF":"CENTRAL PAC FINL CORP COM NEW","CEPU":"CENTRAL PUERTO S A SPONSORED ADR","CVCY":"CENTRAL VY CMNTY BANCORP COM","LEU":"CENTRUS ENERGY CORP CL A","CENX":"CENTURY ALUM CO COM","CNTY":"CENTURY CASINOS INC COM","CCS":"CENTURY CMNTYS INC COM","IPSC":"CENTURY THERAPEUTICS INC COM","CRNT":"CERAGON NETWORKS LTD ORD","CRNC":"CERENCE INC COM","CERE":"CEREVEL THERAPEUTICS HLDNG INC COM","CDAY":"CERIDIAN HCM HLDG INC COM","CERT":"CERTARA INC COM","CERS":"CERUS CORP COM","CEVA":"CEVA INC COM","CF":"CF INDS HLDGS INC COM","GIB":"CGI INC CL A SUB VTG","CSBR":"CHAMPIONS ONCOLOGY INC COM NEW","CHX":"CHAMPIONX CORPORATION COM","CRGE":"CHARGE ENTERPRISES INC COM","CHPT":"CHARGEPOINT HOLDINGS INC COM CL A","CRL":"CHARLES RIV LABS INTL INC COM","GTLS":"CHART INDS INC COM","CHTR":"CHARTER COMMUNICATIONS INC NEW CL A","CCF":"CHASE CORP COM","CLDT":"CHATHAM LODGING TR COM","CHKP":"CHECK POINT SOFTWARE TECH LTD ORD","CKPT":"CHECKPOINT THERAPEUTICS INC COM NEW","CAKE":"CHEESECAKE FACTORY INC COM","CMCM":"CHEETAH MOBILE INC SPONSORED ADS","CHEF":"CHEFS WHSE INC COM","CHGG":"CHEGG INC COM","CHE":"CHEMED CORP NEW COM","CC":"CHEMOURS CO COM","LNG":"CHENIERE ENERGY INC COM NEW","CQP":"CHENIERE ENERGY PARTNERS LP COM UNIT","CHK":"CHESAPEAKE ENERGY CORP COM","CVX":"CHEVRON CORP NEW COM","CHWY":"CHEWY INC CL A","CSSE":"CHICKEN SOUP FOR THE SOUL ENTM CL A","CHS":"CHICOS FAS INC COM","PLCE":"CHILDRENS PL INC NEW COM","CIM":"CHIMERA INVT CORP COM NEW","CMRX":"CHIMERIX INC COM","CAAS":"CHINA AUTOMOTIVE SYS INC COM","CYD":"CHINA YUCHAI INTL LTD COM","CD":"CHINDATA GROUP HLDGS LTD ADS","KDNY":"CHINOOK THERAPEUTICS INC COM","CMG":"CHIPOTLE MEXICAN GRILL INC COM","CHH":"CHOICE HOTELS INTL INC COM","CHRD":"CHORD ENERGY CORPORATION COM NEW","CDXC":"CHROMADEX CORP COM NEW","CB":"CHUBB LIMITED COM","CHT":"CHUNGHWA TELECOM CO LTD SPON ADR NEW11","CHD":"CHURCH & DWIGHT CO INC COM","CCV":"CHURCHILL CAPITAL CORP V COM CL A","CVII":"CHURCHILL CAPITAL CORP VII COM CL A","CHDN":"CHURCHILL DOWNS INC COM","CHUY":"CHUYS HLDGS INC COM","CIXXF":"CI FINL CORP COM","CINT":"CI&T INC COM CL A","CIG":"CIA ENERGETICA DE MINAS GERAIS SP ADR N-V PFD","CDTX":"CIDARA THERAPEUTICS INC COM","CIEN":"CIENA CORP COM NEW","CMPR":"CIMPRESS PLC SHS EURO","CINF":"CINCINNATI FINL CORP COM","CNK":"CINEMARK HLDGS INC COM","CTAS":"CINTAS CORP COM","CION":"CION INVT CORP COM","CIFR":"CIPHER MINING INC COM","CIR":"CIRCOR INTL INC COM","CRUS":"CIRRUS LOGIC INC COM","CSCO":"CISCO SYS INC COM","CISO":"CISO GLOBAL INC COM","CTRN":"CITI TRENDS INC COM","C":"CITIGROUP INC COM NEW","CTXR":"CITIUS PHARMACEUTICALS INC COM NEW","CFG":"CITIZENS FINL GROUP INC COM","CIA":"CITIZENS INC CL A","CIO":"CITY OFFICE REIT INC COM","CVEO":"CIVEO CORP CDA COM NEW","CIVI":"CIVITAS RESOURCES INC COM NEW","CLVT":"CLARIVATE PLC ORD SHS","CMTG":"CLAROS MTG TR INC COMMON STOCK","CLAR":"CLARUS CORP NEW COM","CLNE":"CLEAN ENERGY FUELS CORP COM","CLH":"CLEAN HARBORS INC COM","CLSK":"CLEANSPARK INC COM NEW","CCO":"CLEAR CHANNEL OUTDOOR HLDGS IN COM","YOU":"CLEAR SECURE INC COM CL A","CLFD":"CLEARFIELD INC COM","CLPT":"CLEARPOINT NEURO INC COM","CLSD":"CLEARSIDE BIOMEDICAL INC COM","CLIR":"CLEARSIGN TECHNOLOGIES CORP COM","CWAN":"CLEARWATER ANALYTICS HLDGS INC CL A","CLW":"CLEARWATER PAPER CORP COM","CWEN.A":"CLEARWAY ENERGY INC CL A","CWEN":"CLEARWAY ENERGY INC CL C","CLNN":"CLENE INC COMMON STOCK","CLF":"CLEVELAND-CLIFFS INC NEW COM","CLVR":"CLEVER LEAVES HOLDINGS INC COM","RAASY":"CLOOPEN GROUP HOLDING LIMITED SPON ADS","CLX":"CLOROX CO DEL COM","NET":"CLOUDFLARE INC CL A COM","CLOV":"CLOVER HEALTH INVESTMENTS CORP COM CL A","CME":"CME GROUP INC COM","CMS":"CMS ENERGY CORP COM","CNA":"CNA FINL CORP COM","CNHI":"CNH INDL N V SHS","CNO":"CNO FINL GROUP INC COM","CNX":"CNX RES CORP COM","CODX":"CO-DIAGNOSTICS INC COM","KO":"COCA COLA CO COM","CCEP":"COCA-COLA EUROPACIFIC PARTNERS SHS","KOF":"COCA-COLA FEMSA SAB DE CV SPONSORD ADR REP","CDXS":"CODEXIS INC COM","CDE":"COEUR MNG INC COM NEW","CCOI":"COGENT COMMUNICATIONS HLDGS IN COM NEW","CGNX":"COGNEX CORP COM","CTSH":"COGNIZANT TECHNOLOGY SOLUTIONS CL A","CGNT":"COGNYTE SOFTWARE LTD ORD SHS","CNS":"COHEN & STEERS INC COM","COHR":"COHERENT CORP COM","CHRS":"COHERUS BIOSCIENCES INC COM","COHU":"COHU INC COM","COIN":"COINBASE GLOBAL INC COM CL A","CL":"COLGATE PALMOLIVE CO COM","SPCX":"COLLABORATIVE INVESTMNT SER TR THE SPAC AND NEW","COLL":"COLLEGIUM PHARMACEUTICAL INC COM","CIGI":"COLLIERS INTL GROUP INC SUB VTG SHS","CLGN":"COLLPLANT BIOTECHNOLOGIES LTD SHS NEW","COLB":"COLUMBIA BKG SYS INC COM","ECON":"COLUMBIA ETF TR II EMRG MARKETS ETF","CLBK":"COLUMBIA FINL INC COM","COLM":"COLUMBIA SPORTSWEAR CO COM","CMCO":"COLUMBUS MCKINNON CORP N Y COM","CMCSA":"COMCAST CORP NEW CL A","CMA":"COMERICA INC COM","FIX":"COMFORT SYS USA INC COM","CBSH":"COMMERCE BANCSHARES INC COM","CMC":"COMMERCIAL METALS CO COM","CVGI":"COMMERCIAL VEH GROUP INC COM","COMM":"COMMSCOPE HLDG CO INC COM","CBU":"COMMUNITY BK SYS INC COM","CYH":"COMMUNITY HEALTH SYS INC NEW COM","CHCT":"COMMUNITY HEALTHCARE TR INC COM","CTBI":"COMMUNITY TR BANCORP INC COM","CVLT":"COMMVAULT SYS INC COM","CBD":"COMPANHIA BRASILEIRA DE DISTRB SPONSORED ADR","SBS":"COMPANHIA DE SANEAMENTO BASICO SPONSORED ADR","ELP":"COMPANHIA PARANAENSE ENERG COP SPON ADS","SID":"COMPANHIA SIDERURGICA NACIONAL SPONSORED ADR","CCU":"COMPANIA CERVECERIAS UNIDAS S SPONSORED ADR","BVN":"COMPANIA DE MINAS BUENAVENTURA SPONSORED ADR","CODI":"COMPASS DIVERSIFIED SH BEN INT","COMP":"COMPASS INC CL A","CMP":"COMPASS MINERALS INTL INC COM","CMPS":"COMPASS PATHWAYS PLC SPONSORED ADS","CGEN":"COMPUGEN LTD ORD","CPUH":"COMPUTE HEALTH ACQUISITIN CORP COM CL A","CPSI":"COMPUTER PROGRAMS & SYS INC COM","CTG":"COMPUTER TASK GROUP INC COM","SCOR":"COMSCORE INC COM","COMS":"COMSOVEREIGN HLDG CORP COM NEW","LODE":"COMSTOCK INC COM NEW","CRK":"COMSTOCK RES INC COM","CMTL":"COMTECH TELECOMMUNICATIONS CP COM NEW","CAG":"CONAGRA BRANDS INC COM","CNXC":"CONCENTRIX CORP COM","CNDT":"CONDUENT INC COM","CFLT":"CONFLUENT INC CLASS A COM","CNMD":"CONMED CORP COM","CNTB":"CONNECT BIOPHARMA HLDGS LTD ADS","CNOB":"CONNECTONE BANCORP INC COM","CONN":"CONNS INC COM","COP":"CONOCOPHILLIPS COM","CCSI":"CONSENSUS CLOUD SOLUTIONS INC COM","CEIX":"CONSOL ENERGY INC NEW COM","CNSL":"CONSOLIDATED COMM HLDGS INC COM","ED":"CONSOLIDATED EDISON INC COM","CWCO":"CONSOLIDATED WATER CO INC ORD","STZ":"CONSTELLATION BRANDS INC CL A","CEG":"CONSTELLATION ENERGY CORP COM","CSTM":"CONSTELLIUM SE CL A SHS","CPSS":"CONSUMER PORTFOLIO SVCS INC COM","TCS":"CONTAINER STORE GROUP INC COM","WISH":"CONTEXTLOGIC INC CL A NEW","VLRS":"CONTROLADORA VUELA COMP DE AVI SPON ADR RP 10","CONX":"CONX CORP COM CL A","COO":"COOPER COS INC COM NEW","CPS":"COOPER STD HLDGS INC COM","CPA":"COPA HOLDINGS SA CL A","CPRT":"COPART INC COM","CORT":"CORCEPT THERAPEUTICS INC COM","CNM":"CORE & MAIN INC CL A","CLB":"CORE LABORATORIES INC COM","CRBG":"COREBRIDGE FINL INC COM","CXW":"CORECIVIC INC COM","CORR":"CORENERGY INFRASTRUCTURE TR IN COM NEW","CRMD":"CORMEDIX INC COM","GLW":"CORNING INC COM","CAAP":"CORPORACION AMER ARPTS S A COM","OFC":"CORPORATE OFFICE PPTYS TR SH BEN INT","CRSR":"CORSAIR GAMING INC COM","CTVA":"CORTEVA INC COM","CRVS":"CORVUS PHARMACEUTICALS INC COM","COSM":"COSMOS HEALTH INC COM","CMRE":"COSTAMARE INC SHS","CSGP":"COSTAR GROUP INC COM","COST":"COSTCO WHSL CORP NEW COM","CTRA":"COTERRA ENERGY INC COM","COTY":"COTY INC COM CL A","BASE":"COUCHBASE INC COM","CPNG":"COUPANG INC CL A","COUR":"COURSERA INC COM","CUZ":"COUSINS PPTYS INC COM NEW","CVLG":"COVENANT LOGISTICS GROUP INC CL A","CPSH":"CPS TECHNOLOGIES CORP COM","CRAI":"CRA INTL INC COM","CBRL":"CRACKER BARREL OLD CTRY STORE COM","CR":"CRANE COMPANY COMMON STOCK","CXT":"CRANE NXT CO COM","BAP":"CREDICORP LTD COM","CACC":"CREDIT ACCEP CORP MICH COM","CRDO":"CREDO TECHNOLOGY GROUP HOLDING ORDINARY SHARES","CCAP":"CRESCENT CAP BDC INC COM","CPG":"CRESCENT PT ENERGY CORP COM","CEQP":"CRESTWOOD EQUITY PARTNERS LP UNIT LTD PARTNER","CRESY":"CRESUD S A C I F Y A SPONSORED ADR","CRH":"CRH PLC ADR","CRCT":"CRICUT INC COM CL A","CRNX":"CRINETICS PHARMACEUTICALS INC COM","CRSP":"CRISPR THERAPEUTICS AG NAMEN AKT","CRTO":"CRITEO S A SPONS ADS","CROX":"CROCS INC COM","CRON":"CRONOS GROUP INC COM","CCRN":"CROSS CTRY HEALTHCARE INC COM","CAPL":"CROSSAMERICA PARTNERS LP UT LTD PTN INT","CFB":"CROSSFIRST BANKSHARES INC COM","CRWD":"CROWDSTRIKE HLDGS INC CL A","CCI":"CROWN CASTLE INC COM","CRWS":"CROWN CRAFTS INC COM","CCK":"CROWN HLDGS INC COM","CYRX":"CRYOPORT INC COM PAR $0.001","LAW":"CS DISCO INC COM","CSGS":"CSG SYS INTL INC COM","CCLP":"CSI COMPRESSCO LP COM UNIT","CSWI":"CSW INDUSTRIALS INC COM","CSX":"CSX CORP COM","CTO":"CTO RLTY GROWTH INC NEW COM","CTS":"CTS CORP COM","CUBE":"CUBESMART COM","CUE":"CUE BIOPHARMA INC COM","HLTH":"CUE HEALTH INC COM","CFR":"CULLEN FROST BANKERS INC COM","CGEM":"CULLINAN ONCOLOGY INC COM","CULP":"CULP INC COM","CPIX":"CUMBERLAND PHARMACEUTICALS INC COM","CMI":"CUMMINS INC COM","CMLS":"CUMULUS MEDIA INC COM CL A","CVAC":"CUREVAC N V COM","CURI":"CURIOSITYSTREAM INC COM CL A","CRIS":"CURIS INC COM NEW","CURO":"CURO GROUP HOLDINGS CORP COM","CW":"CURTISS WRIGHT CORP COM","CWK":"CUSHMAN WAKEFIELD PLC SHS","CTOS":"CUSTOM TRUCK ONE SOURCE INC COM CL A","CUBI":"CUSTOMERS BANCORP INC COM","CUTR":"CUTERA INC COM","CVBF":"CVB FINL CORP COM","CVI":"CVR ENERGY INC COM","UAN":"CVR PARTNERS LP COM","CVRX":"CVRX INC COM","CVS":"CVS HEALTH CORP COM","CYBR":"CYBERARK SOFTWARE LTD SHS","CYCN":"CYCLERION THERAPEUTICS INC COM","CBAY":"CYMABAY THERAPEUTICS INC COM","CYN":"CYNGN INC COM","CTKB":"CYTEK BIOSCIENCES INC COM","CYTK":"CYTOKINETICS INC COM NEW","CTSO":"CYTOSORBENTS CORP COM NEW","DHI":"D R HORTON INC COM","DADA":"DADA NEXUS LTD ADS","DAKT":"DAKTRONICS INC COM","DAN":"DANA INC COM","DHR":"DANAHER CORPORATION COM","DAC":"DANAOS CORPORATION SHS","DNMR":"DANIMER SCIENTIFIC INC COM CL A","DQ":"DAQO NEW ENERGY CORP SPNSRD ADS NEW","DRI":"DARDEN RESTAURANTS INC COM","DRIO":"DARIOHEALTH CORP COM NEW","DAR":"DARLING INGREDIENTS INC COM","DSKE":"DASEKE INC COM","DAIO":"DATA I O CORP COM","DDOG":"DATADOG INC CL A COM","PLAY":"DAVE & BUSTERS ENTMT INC COM","DTEAF":"DAVIDSTEA INC COM","DVA":"DAVITA INC COM","DAWN":"DAY ONE BIOPHARMACEUTICALS INC COM","DBVT":"DBV TECHNOLOGIES S A SPONSORED ADR","NAIL":"DBX ETF TR DALY HOM B&S BUL","ASHS":"DBX ETF TR XTRACK CSI 500 A","ASHR":"DBX ETF TR XTRACK HRVST CSI","CN":"DBX ETF TR XTRACK MSCI CHNA","DBEF":"DBX ETF TR XTRACK MSCI EAFE","DBEU":"DBX ETF TR XTRACK MSCI EURP","DBJP":"DBX ETF TR XTRACK MSCI JAPN","HYLB":"DBX ETF TR XTRACK USD HIGH","SNPE":"DBX ETF TR XTRACKERS S&P","DBTX":"DECIBEL THERAPEUTICS INC COM","DCPH":"DECIPHERA PHARMACEUTICALS INC COM","DECK":"DECKERS OUTDOOR CORP COM","DE":"DEERE & CO COM","DH":"DEFINITIVE HEALTHCARE CORP CLASS A COM","DCTH":"DELCATH SYS INC COM NEW","DKL":"DELEK LOGISTICS PARTNERS LP COM UNT RP INT","DK":"DELEK US HLDGS INC NEW COM","DELL":"DELL TECHNOLOGIES INC CL C","DAL":"DELTA AIR LINES INC DEL COM NEW","DLX":"DELUXE CORP COM","DNLI":"DENALI THERAPEUTICS INC COM","DEN":"DENBURY INC COM","DNN":"DENISON MINES CORP COM","DENN":"DENNYS CORP COM","XRAY":"DENTSPLY SIRONA INC COM","DMTK":"DERMTECH INC COM","DSGX":"DESCARTES SYS GROUP INC COM","DSGN":"DESIGN THERAPEUTICS INC COM","DBI":"DESIGNER BRANDS INC CL A","DM":"DESKTOP METAL INC COM CL A","DESP":"DESPEGAR COM CORP ORD SHS","DXLG":"DESTINATION XL GROUP INC COM","DB":"DEUTSCHE BANK A G NAMEN AKT","DVN":"DEVON ENERGY CORP NEW COM","DXCM":"DEXCOM INC COM","DHX":"DHI GROUP INC COM","DHT":"DHT HOLDINGS INC SHS NEW","DEO":"DIAGEO PLC SPON ADR NEW","DMAC":"DIAMEDICA THERAPEUTICS INC COM NEW","DO":"DIAMOND OFFSHORE DRILLING INC COM","FANG":"DIAMONDBACK ENERGY INC COM","DRH":"DIAMONDROCK HOSPITALITY CO COM","DSX":"DIANA SHIPPING INC COM","DICE":"DICE THERAPEUTICS INC COM","DKS":"DICKS SPORTING GOODS INC COM","DBDQQ":"DIEBOLD NIXDORF INC COM STK","DGII":"DIGI INTL INC COM","DMRC":"DIGIMARC CORP NEW COM","DGLY":"DIGITAL ALLY INC COM NEW","DLR":"DIGITAL RLTY TR INC COM","APPS":"DIGITAL TURBINE INC COM NEW","DWAC":"DIGITAL WORLD ACQUISITION CORP CLASS A COM","DBRG":"DIGITALBRIDGE GROUP INC CL A NEW","DOCN":"DIGITALOCEAN HLDGS INC COM","DCOM":"DIME CMNTY BANCSHARES INC COM","DFIP":"DIMENSIONAL ETF TRUST INFLATION PROTE","DFIV":"DIMENSIONAL ETF TRUST INTERNATNAL VAL","DFAU":"DIMENSIONAL ETF TRUST US CORE EQT MKT","DFUS":"DIMENSIONAL ETF TRUST US EQUITY ETF","DUHP":"DIMENSIONAL ETF TRUST US HIGH PROFITAB","DFUV":"DIMENSIONAL ETF TRUST US MKTWIDE VALUE","DFAR":"DIMENSIONAL ETF TRUST US REAL ESTATE E","DFSV":"DIMENSIONAL ETF TRUST US SMALL CAP VAL","DFAX":"DIMENSIONAL ETF TRUST WORLD EX US CORE","DFIC":"Dimensional International Core Equity 2 ETF","DIN":"DINE BRANDS GLOBAL INC COM","DIOD":"DIODES INC COM","TMV":"DIREXION SHS ETF TR 20YR TRES BEAR","TMF":"DIREXION SHS ETF TR 20YR TRES BULL","TYO":"DIREXION SHS ETF TR 7 10YR TRES BEAR","TYD":"DIREXION SHS ETF TR 7 10YR TRES BULL","COM":"DIREXION SHS ETF TR AUSPCE CMD STG","BRZU":"DIREXION SHS ETF TR BRZ BL 2X SHS","CHAU":"DIREXION SHS ETF TR CSI 300 BULL2X","CWEB":"DIREXION SHS ETF TR DAILY CSI 2X SH","WEBL":"DIREXION SHS ETF TR DAILY DJ BULL","ERY":"DIREXION SHS ETF TR DAILY ENERGY BEA","FAZ":"DIREXION SHS ETF TR DAILY FINL BEAR","YANG":"DIREXION SHS ETF TR DAILY FTSE CHINA","DUST":"DIREXION SHS ETF TR DAILY GOLD MINER","JNUG":"DIREXION SHS ETF TR DAILY JR GLD MIN","EDZ":"DIREXION SHS ETF TR DAILY MSCI EMERG","INDL":"DIREXION SHS ETF TR DAILY MSCI INDIA","DRN":"DIREXION SHS ETF TR DAILY REAL EST B","DRV":"DIREXION SHS ETF TR DAILY REAL ESTAT","DPST":"DIREXION SHS ETF TR DAILY REGIONAL","UBOT":"DIREXION SHS ETF TR DAILY ROBOTICS","HIBS":"DIREXION SHS ETF TR DAILY S&P BEAR","LABD":"DIREXION SHS ETF TR DAILY S&P BIOTEC","HIBL":"DIREXION SHS ETF TR DAILY S&P BULL","TZA":"DIREXION SHS ETF TR DAILY SM CP BEAR","TECS":"DIREXION SHS ETF TR DAILY TECH OCT21","TPOR":"DIREXION SHS ETF TR DAILY TRANS 3X","YINN":"DIREXION SHS ETF TR DL FTSE BULL 3X","AAPD":"DIREXION SHS ETF TR DLY AAPL BEAR 1X","AAPU":"DIREXION SHS ETF TR DLY AAPL BUL1.5X","DFEN":"DIREXION SHS ETF TR DLY AEROSPC 3X","WANT":"DIREXION SHS ETF TR DLY CNMSR BULL","EDC":"DIREXION SHS ETF TR DLY EMG MK BL 3X","ERX":"DIREXION SHS ETF TR DLY ENRGY BULL2X","FAS":"DIREXION SHS ETF TR DLY FIN BULL NEW","EURL":"DIREXION SHS ETF TR DLY FTS BUL 3X","NUGT":"DIREXION SHS ETF TR DLY GOLD INDX 2X","DUSL":"DIREXION SHS ETF TR DLY INDL BU 3X","JDST":"DIREXION SHS ETF TR DLY JR GOLD 2X","MIDU":"DIREXION SHS ETF TR DLY MIDCAP ETF3X","MEXX":"DIREXION SHS ETF TR DLY MSCI MX 3X","DRIP":"DIREXION SHS ETF TR DLY S&P OIL GAS","SPUU":"DIREXION SHS ETF TR DLY S&P500 2XS","SPDN":"DIREXION SHS ETF TR DLY S&P500 BR 1X","SPXS":"DIREXION SHS ETF TR DLY S&P500 BR 3X","SOXL":"DIREXION SHS ETF TR DLY SCOND 3XBU","SOXS":"DIREXION SHS ETF TR DLY SEMICNDTR BR","TNA":"DIREXION SHS ETF TR DLY SMCAP BULL3X","TECL":"DIREXION SHS ETF TR DLY TECH BULL 3X","TSLS":"DIREXION SHS ETF TR DLY TSLA BEAR 1X","UTSL":"DIREXION SHS ETF TR DLY UTLTIES 3X","SPXL":"DIREXION SHS ETF TR DRX S&P500BULL","CURE":"DIREXION SHS ETF TR HEALTHCARE BUL","HJEN":"DIREXION SHS ETF TR HYDROGEN ETF","MOON":"DIREXION SHS ETF TR MOONSHOT INNOVAT","QQQE":"DIREXION SHS ETF TR NAS100 EQL WGT","GUSH":"DIREXION SHS ETF TR OIL GAS BL 2X SH","RETL":"DIREXION SHS ETF TR RETAIL BULL 3X","LABU":"DIREXION SHS ETF TR SP BIOTCH BL NEW","TSLL":"DIREXION SHS ETF TR TSLA BULL 1.5X","IRON":"DISC MEDICINE INC COM","DFS":"DISCOVER FINL SVCS COM","DISH":"DISH NETWORK CORPORATION CL A","DIS":"DISNEY WALT CO COM","DHC":"DIVERSIFIED HEALTHCARE TR COM SH BEN INT","DLHC":"DLH HLDGS CORP COM","DLO":"DLOCAL LTD CLASS A COM","BOOM":"DMC GLOBAL INC COM","DCBO":"DOCEBO INC COM","DCGO":"DOCGO INC COM","DOCU":"DOCUSIGN INC COM","DOGZ":"DOGNESS INTERNATIONAL CORP COM CL A","DLB":"DOLBY LABORATORIES INC COM CL A","DOLE":"DOLE PLC ORD SHS","DG":"DOLLAR GEN CORP NEW COM","DLTR":"DOLLAR TREE INC COM","DLPN":"DOLPHIN ENTMT INC COM NEW","DOMA":"DOMA HOLDINGS INC COM NEW","D":"DOMINION ENERGY INC COM","DPZ":"DOMINOS PIZZA INC COM","DOMO":"DOMO INC COM CL B","DCI":"DONALDSON INC COM","DFIN":"DONNELLEY FINL SOLUTIONS INC COM","DASH":"DOORDASH INC CL A","DMLP":"DORCHESTER MINERALS LP COM UNIT","LPG":"DORIAN LPG LTD SHS USD","DORM":"DORMAN PRODS INC COM","DSL":"DOUBLELINE INCOME SOLUTIONS FD COM","DV":"DOUBLEVERIFY HLDGS INC COM","PLOW":"DOUGLAS DYNAMICS INC COM","DOUG":"DOUGLAS ELLIMAN INC COM","DEI":"DOUGLAS EMMETT INC COM","DOYU":"DOUYU INTL HLDGS LTD SPONSORED ADS","DOV":"DOVER CORP COM","DOW":"DOW INC COM","DJX":"Dow Jones Industrial Average","DOCS":"DOXIMITY INC CL A","RDY":"DR REDDYS LABS LTD ADR","DKNG":"DRAFTKINGS INC NEW COM CL A","DPRO":"DRAGANFLY INC. COM NEW","DRD":"DRDGOLD LIMITED SPON ADR REPSTG","DFH":"DREAM FINDERS HOMES INC COM CL A","DRQ":"DRIL-QUIP INC COM","DSHK":"DRIVE SHACK INC COM","DRVN":"DRIVEN BRANDS HLDGS INC COM","DBX":"DROPBOX INC CL A","DTM":"DT MIDSTREAM INC COMMON STOCK","DTE":"DTE ENERGY CO COM","NAPA":"DUCKHORN PORTFOLIO INC COM","DCO":"DUCOMMUN INC DEL COM","DUK":"DUKE ENERGY CORP NEW COM NEW","DNB":"DUN & BRADSTREET HLDGS INC COM","DUOL":"DUOLINGO INC CL A COM","DD":"DUPONT DE NEMOURS INC COM","DRRX":"DURECT CORP COM NEW","BROS":"DUTCH BROS INC CL A","DXC":"DXC TECHNOLOGY CO COM","DXPE":"DXP ENTERPRISES INC COM NEW","DYAI":"DYADIC INTL INC DEL COM","DY":"DYCOM INDS INC COM","DLNG":"DYNAGAS LNG PARTNERS LP COM UNIT LTD PT","DT":"DYNATRACE INC COM NEW","DVAX":"DYNAVAX TECHNOLOGIES CORP COM NEW","DYN":"DYNE THERAPEUTICS INC COM","DX":"DYNEX CAP INC COM","DZSI":"DZS INC COM","ELF":"E L F BEAUTY INC COM","ETWO":"E2OPEN PARENT HOLDINGS INC COM CL A","BSVO":"EA SERIES TRUST EA BRIDGEWAY OMN","DRLL":"EA SERIES TRUST STRIVE US ENERGY","EGBN":"EAGLE BANCORP INC MD COM","EGLE":"EAGLE BULK SHIPPING INC COM","EXP":"EAGLE MATLS INC COM","EGRX":"EAGLE PHARMACEUTICALS INC COM","ESTE":"EARTHSTONE ENERGY INC CL A","EWBC":"EAST WEST BANCORP INC COM","DEA":"EASTERLY GOVT PPTYS INC COM","EBC":"EASTERN BANKSHARES INC COM","EMN":"EASTMAN CHEM CO COM","KODK":"EASTMAN KODAK CO COM NEW","ETN":"EATON CORP PLC SHS","EBON":"EBANG INTL HLDGS INC CL A ORD SH NEW","EBAY":"EBAY INC. COM","EBET":"EBET INC COM","EBIX":"EBIX INC COM NEW","SATS":"ECHOSTAR CORP CL A","ECL":"ECOLAB INC COM","EC":"ECOPETROL S A SPONSORED ADS","ECVT":"ECOVYST INC COM","EDAP":"EDAP TMS S A SPONSORED ADR","EPC":"EDGEWELL PERS CARE CO COM","EGIO":"EDGIO INC COM","EIX":"EDISON INTL COM","EDIT":"EDITAS MEDICINE INC COM","EW":"EDWARDS LIFESCIENCES CORP COM","EFTR":"EFFECTOR THERAPEUTICS INC COM","EGAN":"EGAIN CORP COM NEW","EH":"EHANG HLDGS LTD ADS","EHTH":"EHEALTH INC COM","EIGR":"EIGER BIOPHARMACEUTICALS INC COM","EKSO":"EKSO BIONICS HLDGS INC COM","LOCO":"EL POLLO LOCO HLDGS INC COM","ELAN":"ELANCO ANIMAL HEALTH INC COM","ESTC":"ELASTIC N V ORD SHS","EGO":"ELDORADO GOLD CORP NEW COM","SOLO":"ELECTRAMECCANICA VEHS CORP COM NEW","EA":"ELECTRONIC ARTS INC COM","ELDN":"ELEDON PHARMACEUTICALS INC COM","ESI":"ELEMENT SOLUTIONS INC COM","ELV":"ELEVANCE HEALTH INC COM","EFC":"ELLINGTON FINANCIAL INC COM","EARN":"ELLINGTON RESIDENTIAL MTG REIT COM SHS BEN INT","ELME":"ELME COMMUNITIES SH BEN INT","ELYS":"ELYS GAME TECHNOLOGY CORP COM","EMAN":"EMAGIN CORP COM NEW","EMBK":"EMBARK TECHNOLOGY INC COM NEW","EMBC":"EMBECTA CORP COMMON STOCK","ERJ":"EMBRAER S.A. SPONSORED ADS","EME":"EMCOR GROUP INC COM","EMKR":"EMCORE CORP COM NEW","EEX":"EMERALD HOLDING INC COM","SOL":"EMEREN GROUP LTD SPONSORED ADS","EBS":"EMERGENT BIOSOLUTIONS INC COM","EMR":"EMERSON ELEC CO COM","ESRT":"EMPIRE ST RLTY TR INC CL A","EMX":"EMX RTY CORP COM","ACT":"ENACT HLDGS INC COM","ENTA":"ENANTA PHARMACEUTICALS INC COM","ENB":"ENBRIDGE INC COM","EHC":"ENCOMPASS HEALTH CORP COM","ECPG":"ENCORE CAP GROUP INC COM","WIRE":"ENCORE WIRE CORP COM","DAVA":"ENDAVA PLC ADS","EDR":"ENDEAVOR GROUP HLDGS INC CL A COM","EXK":"ENDEAVOUR SILVER CORP COM","ENR":"ENERGIZER HLDGS INC NEW COM","WATT":"ENERGOUS CORP COM","UUUU":"ENERGY FUELS INC COM NEW","ERII":"ENERGY RECOVERY INC COM","SIXE":"Energy Select Sector Index S&P 500","ET":"ENERGY TRANSFER L P COM UT LTD PTN","NRGV":"ENERGY VAULT HOLDINGS INC COM","EPAC":"ENERPAC TOOL GROUP CORP CL A COM","ERF":"ENERPLUS CORP COM","ENS":"ENERSYS COM","NETI":"ENETI INC COM","ENFN":"ENFUSION INC CL A","ESMT":"ENGAGESMART INC COMMON STOCK","NETZ":"Engine No. 1 Transform Climate ETF","ENG":"ENGLOBAL CORP COM","EHAB":"ENHABIT INC COM","E":"ENI S P A SPONSORED ADR","ENLC":"ENLINK MIDSTREAM LLC COM UNIT REP LTD","ELVN":"ENLIVEN THERAPEUTICS INC COM","ENOB":"ENOCHIAN BIOSCIENCES INC COM","ENVA":"ENOVA INTL INC COM","ENOV":"ENOVIS CORPORATION COM","ENVX":"ENOVIX CORPORATION COM","ENPH":"ENPHASE ENERGY INC COM","NPO":"ENPRO INDS INC COM","ENSV":"ENSERVCO CORP COM NEW","ENSG":"ENSIGN GROUP INC COM","ESGR":"ENSTAR GROUP LIMITED SHS","ENTG":"ENTEGRIS INC COM","ENTX":"ENTERA BIO LTD SHS","ETR":"ENTERGY CORP NEW COM","EBTC":"ENTERPRISE BANCORP INC MASS COM","EFSC":"ENTERPRISE FINL SVCS CORP COM","EPD":"ENTERPRISE PRODS PARTNERS L P COM","EGLX":"ENTHUSIAST GAMING HLDGS INC COM","EVC":"ENTRAVISION COMMUNICATIONS CP CL A","ELA":"ENVELA CORP COM","ENV":"ENVESTNET INC COM","NVRI":"ENVIRI CORP COM","EVTV":"ENVIROTECH VEHICLES INC COM NEW","NVST":"ENVISTA HOLDINGS CORPORATION COM","EVA":"ENVIVA INC COM","NVNO":"ENVVENO MEDICAL CORPORATION COM","ENZ":"ENZO BIOCHEM INC COM","EOG":"EOG RES INC COM","EOSE":"EOS ENERGY ENTERPRISES INC COM CL A","EPAM":"EPAM SYS INC COM","PLUS":"EPLUS INC COM","EPR":"EPR PPTYS COM SH BEN INT","EPSN":"EPSILON ENERGY LTD COM","EQOSQ":"EQONEX LIMITED SHS","EQRX":"EQRX INC COM","EQT":"EQT CORP COM","EFX":"EQUIFAX INC COM","EQ":"EQUILLIUM INC COM","EQIX":"EQUINIX INC COM","EQNR":"EQUINOR ASA SPONSORED ADR","EQX":"EQUINOX GOLD CORP COM","EQH":"EQUITABLE HLDGS INC COM","ETRN":"EQUITRANS MIDSTREAM CORP COM","EQBK":"EQUITY BANCSHARES INC COM CL A","EQC":"EQUITY COMWLTH COM SH BEN INT","EQR":"EQUITY RESIDENTIAL SH BEN INT","ERAS":"ERASCA INC COM","ERIC":"ERICSSON ADR B SEK 10","ERIE":"ERIE INDTY CO CL A","ZGN":"ERMENEGILDO ZEGNA N V ORD SHS","ERO":"ERO COPPER CORP COM","ESAB":"ESAB CORPORATION COM","ESE":"ESCO TECHNOLOGIES INC COM","ESPR":"ESPERION THERAPEUTICS INC NEW COM","GWH":"ESS TECH INC COMMON STOCK","EPIX":"ESSA PHARMA INC COM NEW","ESNT":"ESSENT GROUP LTD COM","EPRT":"ESSENTIAL PPTYS RLTY TR INC COM","WTRG":"ESSENTIAL UTILS INC COM","ESS":"ESSEX PPTY TR INC COM","ESTA":"ESTABLISHMENT LABS HLDGS INC COM","ERNA":"ETERNA THERAPEUTICS INC COM NEW","BDRY":"ETF MANAGERS GRP COMMDTY TR I BREAKWAVE DRY","ITEQ":"ETF MANAGERS TR BLUESTAR ISRAEL","MJ":"ETF MANAGERS TR ETFMG ALTR HRVST","VALT":"ETF MANAGERS TR ETFMG SIT ULTR","AWAY":"ETF MANAGERS TR ETFMG TRAVEL TEC","HACK":"ETF MANAGERS TR PRIME CYBR SCRTY","SILJ":"ETF MANAGERS TR PRIME JUNIR SLVR","GERM":"ETF MANAGERS TR TREATMENTS TSTNG","IVES":"ETF MANAGERS TR WEDBUSH ETFMG","HDRO":"ETF SER SOLUTIONS DEFIANCE NEXT","GFOF":"ETF SER SOLUTIONS GRAYSCALE FUTURE","RIET":"ETF SER SOLUTIONS HOYA CAPT HI DIV","NUSI":"ETF SER SOLUTIONS NATIONWIDE NASDQ","DEEP":"ETF SER SOLUTIONS ROUNDHILL ACQUI","SEA":"ETF SER SOLUTIONS U S GLOBAL SEA T","JETS":"ETF SER SOLUTIONS US GLB JETS","PFFA":"ETFIS SER TR I VIRTUS INFRCAP","ETD":"ETHAN ALLEN INTERIORS INC COM","ETSY":"ETSY INC COM","EURN":"EURONAV NV SHS","EEFT":"EURONET WORLDWIDE INC COM","EWCZ":"EUROPEAN WAX CTR INC CLASS A COM","EVAX":"EVAXION BIOTECH A S ADS","EVEX":"EVE HLDG INC COM","EVLO":"EVELO BIOSCIENCES INC COM NEW","EB":"EVENTBRITE INC COM CL A","EVBG":"EVERBRIDGE INC COM","EVCM":"EVERCOMMERCE INC COM","EVR":"EVERCORE INC CLASS A","EG":"EVEREST GROUP LTD COM","EVRG":"EVERGY INC COM","EVRI":"EVERI HLDGS INC COM","EVER":"EVERQUOTE INC COM CL A","ES":"EVERSOURCE ENERGY COM","MRAM":"EVERSPIN TECHNOLOGIES INC COM","EVTC":"EVERTEC INC COM","EVGO":"EVGO INC CL A COM","EVGN":"EVOGENE LTD SHS","EVH":"EVOLENT HEALTH INC CL A","EOLS":"EVOLUS INC COM","EPM":"EVOLUTION PETE CORP COM","EVLV":"EVOLV TECHNOLOGIES HLDNGS INC COM CL A","EXAS":"EXACT SCIENCES CORP COM","EE":"EXCELERATE ENERGY INC CL A COM","TDSC":"EXCHANGE LISTED FDS TR CABANA TARGET 10","HYLD":"EXCHANGE LISTED FDS TR HIGH YIELD ETF","NVQ":"EXCHANGE LISTED FDS TR QRAFT AI ENANE","QRFT":"EXCHANGE LISTED FDS TR QRAFT AI ENHCD","BITQ":"EXCHANGE TRADED CONCEPTS TR BITWISE CRYPTO","KOIN":"EXCHANGE TRADED CONCEPTS TR CAPITAL LINK GBL","EMQQ":"EXCHANGE TRADED CONCEPTS TR EMQQ EM INTERN","ROBO":"EXCHANGE TRADED CONCEPTS TR ROBO GLB ETF","XELA":"EXELA TECHNOLOGIES INC COM","EXEL":"EXELIXIS INC COM","EXC":"EXELON CORP COM","EXLS":"EXLSERVICE HOLDINGS INC COM","EXPI":"EXP WORLD HLDGS INC COM","EXPE":"EXPEDIA GROUP INC COM NEW","EXPD":"EXPEDITORS INTL WASH INC COM","EXFY":"EXPENSIFY INC COM CL A","EXPO":"EXPONENT INC COM","EXPR":"EXPRESS INC COM","XPRO":"EXPRO GROUP HOLDINGS NV COM","EXAI":"EXSCIENTIA PLC ADS","EXR":"EXTRA SPACE STORAGE INC COM","EXTR":"EXTREME NETWORKS COM","XOM":"EXXON MOBIL CORP COM","EYEN":"EYENOVIA INC COM","EYPT":"EYEPOINT PHARMACEUTICALS INC COM NEW","EZPW":"EZCORP INC CL A NON VTG","FNB":"F N B CORP COM","FG":"F&G ANNUITIES & LIFE INC COMMON STOCK","FXLV":"F45 TRAINING HLDGS INC COM","FFIV":"F5 INC COM","FN":"FABRINET SHS","FDS":"FACTSET RESH SYS INC COM","FICO":"FAIR ISAAC CORP COM","FANH":"FANHUA INC SPONSORED ADR","FFIE":"FARADAY FUTRE INTLGT ELCTR INC COM","FTCH":"FARFETCH LTD ORD SH CL A","FMAO":"FARMERS & MERCHANTS BANCORP IN COM","FMNB":"FARMERS NATIONAL BANC CORP COM","FPI":"FARMLAND PARTNERS INC COM","FARO":"FARO TECHNOLOGIES INC COM","FAST":"FASTENAL CO COM","FSLY":"FASTLY INC CL A","FATE":"FATE THERAPEUTICS INC COM","FATH":"FATHOM DIGITAL MFG CORP CL A COM","FTHM":"FATHOM HOLDINGS INC COM","FAZE":"FAZE HOLDINGS INC COMMON STOCK","TTAC":"FCF US Quality ETF","AGM":"FEDERAL AGRIC MTG CORP CL C","FRT":"FEDERAL RLTY INVT TR NEW SH BEN INT NEW","FSS":"FEDERAL SIGNAL CORP COM","FHI":"FEDERATED HERMES INC CL B","FDX":"FEDEX CORP COM","FENC":"FENNEC PHARMACEUTICALS INC COM","FERG":"FERGUSON PLC NEW SHS","RACE":"FERRARI N V COM","GSM":"FERROGLOBE PLC SHS","FGH":"FG GROUP HOLDINGS INC COM","FGEN":"FIBROGEN INC COM","FRNW":"Fidelity Clean Energy ETF","ONEQ":"FIDELITY COMWLTH TR NASDAQ COMPSIT","FSTA":"FIDELITY COVINGTON TRUST CONSMR STAPLES","FDVV":"FIDELITY COVINGTON TRUST HIGH DIVID ETF","FIDI":"FIDELITY COVINGTON TRUST INT HG DIV ETF","FDMO":"FIDELITY COVINGTON TRUST MOMENTUM FACTR","FCOM":"FIDELITY COVINGTON TRUST MSCI COMMNTN SVC","FDIS":"FIDELITY COVINGTON TRUST MSCI CONSM DIS","FENY":"FIDELITY COVINGTON TRUST MSCI ENERGY IDX","FNCL":"FIDELITY COVINGTON TRUST MSCI FINLS IDX","FHLC":"FIDELITY COVINGTON TRUST MSCI HLTH CARE I","FIDU":"FIDELITY COVINGTON TRUST MSCI INDL INDX","FTEC":"FIDELITY COVINGTON TRUST MSCI INFO TECH I","FMAT":"FIDELITY COVINGTON TRUST MSCI MATLS INDEX","FREL":"FIDELITY COVINGTON TRUST MSCI RL EST ETF","FUTY":"FIDELITY COVINGTON TRUST MSCI UTILS INDEX","FQAL":"FIDELITY COVINGTON TRUST QLTY FCTOR ETF","FSMD":"FIDELITY COVINGTON TRUST SML MID MLTFCT","FBND":"FIDELITY MERRIMACK STR TR TOTAL BD ETF","FNF":"FIDELITY NATIONAL FINANCIAL IN FNF GROUP COM","FIS":"FIDELITY NATL INFORMATION SVCS COM","FDUS":"FIDUS INVT CORP COM","FRGI":"FIESTA RESTAURANT GROUP INC COM","FITB":"FIFTH THIRD BANCORP COM","FIGS":"FIGS INC CL A","FOA":"FINANCE OF AMERICA COMPAN COM CL A","FISI":"FINANCIAL INSTNS INC COM","SIXM":"Financial Select Sector Index S&P 500","FNCH":"FINCH THERAPEUTICS GROUP INC COM NEW","FNGR":"FINGERMOTION INC COM","FINV":"FINVOLUTION GROUP SPONSORED ADS","FA":"FIRST ADVANTAGE CORP NEW COM","FAF":"FIRST AMERN FINL CORP COM","FNLC":"FIRST BANCORP INC ME COM","FBNC":"FIRST BANCORP N C COM","FBP":"FIRST BANCORP P R COM NEW","FBMS":"FIRST BANCSHARES INC MS COM","FRBA":"FIRST BK WILLIAMSTOWN NEW JERS COM","FCBC":"FIRST CMNTY BANKSHARES INC VA COM","FCF":"FIRST COMWLTH FINL CORP PA COM","FCNCA":"FIRST CTZNS BANCSHARES INC N C CL A","FFBC":"FIRST FINL BANCORP OH COM","FFWM":"FIRST FNDTN INC COM","FHB":"FIRST HAWAIIAN INC COM","FHN":"FIRST HORIZON CORPORATION COM","FR":"FIRST INDL RLTY TR INC COM","INBK":"FIRST INTERNET BANCORP COM","FIBK":"FIRST INTST BANCSYSTEM INC COM","AG":"FIRST MAJESTIC SILVER CORP COM","FMBH":"FIRST MID ILL BANCSHARES INC COM","FRCB":"FIRST REP BK SAN FRANCISCO CAL COM","FSLR":"FIRST SOLAR INC COM","FPE":"FIRST TR EXCH TRADED FD III PFD SECS INC ETF","FCA":"FIRST TR EXCH TRD ALPHDX FD II CHINA ALPHADEX","FDT":"FIRST TR EXCH TRD ALPHDX FD II DEV MRK EX US","FEMS":"FIRST TR EXCH TRD ALPHDX FD II EM SML CP ALPH","FEM":"FIRST TR EXCH TRD ALPHDX FD II EMERG MKT ALPH","FEUZ":"FIRST TR EXCH TRD ALPHDX FD II EURO ALPHADEX","FEP":"FIRST TR EXCH TRD ALPHDX FD II EUROPE ALPHADEX","FGM":"FIRST TR EXCH TRD ALPHDX FD II GERMANY ALPHA","FJP":"FIRST TR EXCH TRD ALPHDX FD II JAPAN ALPHADEX","FSZ":"FIRST TR EXCH TRD ALPHDX FD II SWITZLND ALPHA","FTGC":"FIRST TR EXCHANGE TRAD FD VII FST TR GLB FD","SKYY":"FIRST TR EXCHANGE TRADED FD II CLOUD COMPUTING","FXD":"FIRST TR EXCHANGE TRADED FD II CONSUMR DISCRE","FXG":"FIRST TR EXCHANGE TRADED FD II CONSUMR STAPLE","FDNI":"FIRST TR EXCHANGE TRADED FD II DJ INTL INTRNT","FXN":"FIRST TR EXCHANGE TRADED FD II ENERGY ALPHADX","FXH":"FIRST TR EXCHANGE TRADED FD II HLTH CARE ALPH","FXR":"FIRST TR EXCHANGE TRADED FD II INDLS PROD DUR","FTAG":"FIRST TR EXCHANGE TRADED FD II INDXX GLOBAL AGR","FXZ":"FIRST TR EXCHANGE TRADED FD II MATERIALS ALPH","CIBR":"FIRST TR EXCHANGE TRADED FD II NASDAQ CYB ETF","FXL":"FIRST TR EXCHANGE TRADED FD II TECH ALPHADEX","FXU":"FIRST TR EXCHANGE TRADED FD II UTILITIES ALPH","FPX":"FIRST TR EXCHANGE TRADED FD US EQTY OPPT ETF","FTCS":"FIRST TR EXCHANGE-TRADED FD CAP STRENGTH ETF","FDN":"FIRST TR EXCHANGE-TRADED FD DJ INTERNT IDX","FAN":"FIRST TR EXCHANGE-TRADED FD II GBL WND ENRG ETF","FTSM":"FIRST TR EXCHANGE-TRADED FD IV FIRST TR ENH NEW","LMBS":"FIRST TR EXCHANGE-TRADED FD IV FST LOW OPPT EFT","QCLN":"FIRST TR EXCHANGE-TRADED FD NAS CLNEDG GREEN","FCG":"FIRST TR EXCHANGE-TRADED FD NAT GAS ETF","FBT":"FIRST TR EXCHANGE-TRADED FD NY ARCA BIOTECH","FV":"FIRST TR EXCHANGE-TRADED FD VI DORSEY WRT 5 ETF","TDIV":"FIRST TR EXCHANGE-TRADED FD VI NASD TECH DIV","ROBT":"FIRST TR EXCHANGE-TRADED FD VI NASDQ ARTFCIAL","SDVY":"FIRST TR EXCHANGE-TRADED FD VI SMID RISNG ETF","CRPT":"FIRST TR EXCHNG TRADED FD VIII SKYBRIDGE CRYPTO","FIXD":"FIRST TR EXCHNG TRADED FD VIII TCW OPPORTUNIS","FEX":"FIRST TR LRGE CP CORE ALPHA FD COM SHS","FDL":"FIRST TR MORNINGSTAR DIVID LEA SHS","QQEW":"FIRST TR NAS100 EQ WEIGHTED IX SHS","QTEC":"FIRST TR NASDAQ 100 TECH INDX SHS","QABA":"FIRST TR NASDAQ ABA CMNTY BK I UT COM SHS ETF","FRI":"FIRST TR S&P REIT INDEX FD COM","FVD":"FIRST TR VALUE LINE DIVID INDE SHS","FTC":"FIRST TRUST LRGCP GWT ALPHADEX COM SHS","FWRG":"FIRST WATCH RESTAURANT GROUP I COM","FCFS":"FIRSTCASH HOLDINGS INC COM","FE":"FIRSTENERGY CORP COM","SVVC":"FIRSTHAND TECHNOLOGY VALUE FD COM","FSV":"FIRSTSERVICE CORP NEW COM","FI":"FISERV INC COM","FSR":"FISKER INC CL A COM STK","FIVE":"FIVE BELOW INC COM","FIVN":"FIVE9 INC COM","FVRR":"FIVERR INTL LTD ORD SHS","FLT":"FLEETCOR TECHNOLOGIES INC COM","FLNG":"FLEX LNG LTD SHS","FLEX":"FLEX LTD ORD","IQDF":"FLEXSHARES TR INTL QLTDV IDX","GUNR":"FLEXSHARES TR MORNSTAR UPSTR","QDEF":"FLEXSHARES TR QLT DIV DEF IDX","FND":"FLOOR & DECOR HLDGS INC CL A","FTK":"FLOTEK INDS INC DEL COM","FLO":"FLOWERS FOODS INC COM","FLS":"FLOWSERVE CORP COM","FLNC":"FLUENCE ENERGY INC COM CL A","FLNT":"FLUENT INC COM","FLR":"FLUOR CORP NEW COM","FLUX":"FLUX PWR HLDGS INC COM NEW","FLYW":"FLYWIRE CORPORATION COM VTG","FMC":"FMC CORP COM NEW","FOCS":"FOCUS FINL PARTNERS INC COM CL A","FCUV":"FOCUS UNVL INC COM","FHTX":"FOGHORN THERAPEUTICS INC COM","FMX":"FOMENTO ECONOMICO MEXICANO SAB SPON ADR UNITS","FL":"FOOT LOCKER INC COM","F":"FORD MTR CO DEL COM","FRSX":"FORESIGHT AUTONOMOUS HLDGS LTD SPONSORED ADR","FOR":"FORESTAR GROUP INC COM","FRGE":"FORGE GLOBAL HOLDINGS INC COM","FORG":"FORGEROCK INC CL A","FORM":"FORMFACTOR INC COM","FORR":"FORRESTER RESH INC COM","FBRX":"FORTE BIOSCIENCES INC COM","FTNT":"FORTINET INC COM","FTS":"FORTIS INC COM","FTV":"FORTIVE CORP COM","FBIO":"FORTRESS BIOTECH INC COM","FSM":"FORTUNA SILVER MINES INC COM","FBIN":"FORTUNE BRANDS INNOVATIONS INC COM","FET":"FORUM ENERGY TECHNOLOGIES INC COM","FWRD":"FORWARD AIR CORP COM","FOSL":"FOSSIL GROUP INC COM","FSTR":"FOSTER L B CO COM","FOXA":"FOX CORP CL A COM","FOX":"FOX CORP CL B COM","FOXF":"FOX FACTORY HLDG CORP COM","FRG":"FRANCHISE GROUP INC COM","FNV":"FRANCO NEV CORP COM","FBRT":"FRANKLIN BSP RLTY TR INC COMMON STOCK","FELE":"FRANKLIN ELEC INC COM","HELX":"Franklin Genomic Advancements ETF","BEN":"FRANKLIN RESOURCES INC COM","FSP":"FRANKLIN STR PPTYS CORP COM","FLJP":"FRANKLIN TEMPLETON ETF TR FTSE JAPAN ETF","FLQL":"Franklin U.S. Large Cap Multifactor Index ETF","FRHC":"FREEDOM HLDG CORP NEV COM","FCX":"FREEPORT-MCMORAN INC CL B","RAIL":"FREIGHTCAR AMER INC COM","FREQ":"FREQUENCY THERAPEUTICS INC COM","FMS":"FRESENIUS MED CARE AG&CO KGAA SPONSORED ADR","FDP":"FRESH DEL MONTE PRODUCE INC ORD","FRPT":"FRESHPET INC COM","FRSH":"FRESHWORKS INC CLASS A COM","FREY":"FREYR BATTERY SHS","FTDR":"FRONTDOOR INC COM","FYBR":"FRONTIER COMMUNICATIONS PARENT COM","ULCC":"FRONTIER GROUP HLDGS INC COM","FRO":"FRONTLINE PLC COM","FSK":"FS KKR CAP CORP COM","HUGE":"FSD PHARMA INC CL B SUB VTG","IGLD":"FT Cboe Vest Gold Strategy Target Income ETF","RDVI":"FT Cboe Vest Rising Dividend Achievers Target Income ETF","FTAI":"FTAI AVIATION LTD SHS","FTCI":"FTC SOLAR INC COM","FCN":"FTI CONSULTING INC COM","FUBO":"FUBOTV INC COM","FTEK":"FUEL TECH INC COM","FCEL":"FUELCELL ENERGY INC COM","FULC":"FULCRUM THERAPEUTICS INC COM","FLGT":"FULGENT GENETICS INC COM","FLL":"FULL HSE RESORTS INC COM","YMM":"FULL TRUCK ALLIANCE CO LTD SPONSORED ADS","FUL":"FULLER H B CO COM","FULT":"FULTON FINL CORP PA COM","FNKO":"FUNKO INC COM CL A","HTOO":"FUSION FUEL GREEN PLC CL A","FUSN":"FUSION PHARMACEUTICALS INC COM","FUTU":"FUTU HLDGS LTD SPON ADS CL A","FTFT":"FUTURE FINTECH GROUP INC COM NEW","FF":"FUTUREFUEL CORP COM","FVCB":"FVCBANKCORP INC COM","GIII":"G III APPAREL GROUP LTD COM","GTHX":"G1 THERAPEUTICS INC COM","GAIA":"GAIA INC NEW CL A","GANX":"GAIN THERAPEUTICS INC COM","GLPG":"GALAPAGOS NV SPON ADR","GALT":"GALECTIN THERAPEUTICS INC COM NEW","GLTO":"GALECTO INC COM","GRTX":"GALERA THERAPEUTICS INC COM","GAU":"GALIANO GOLD INC COM","AJG":"GALLAGHER ARTHUR J & CO COM","GAMB":"GAMBLING COM GROUP LIMITED ORDINARY SHARES","GAME":"GAMESQUARE HLDGS INC COM","GME":"GAMESTOP CORP NEW CL A","GMDA":"GAMIDA CELL LTD SHS","GLPI":"GAMING & LEISURE PPTYS INC COM","GAN":"GAN LTD SHS","GCI":"GANNETT CO INC COM","GOTU":"GAOTU TECHEDU INC SPONSORED ADS","GPS":"GAP INC COM","GRMN":"GARMIN LTD SHS","GTX":"GARRETT MOTION INC COM","IT":"GARTNER INC COM","GTES":"GATES INDL CORP PLC ORD SHS","GATO":"GATOS SILVER INC COM","GATX":"GATX CORP COM","GCMG":"GCM GROSVENOR INC COM CL A","GDS":"GDS HLDGS LTD SPONSORED ADS","GEHC":"GE HEALTHCARE TECHNOLOGIES INC COMMON STOCK","GEN":"GEN DIGITAL INC COM","GNSS":"GENASYS INC COM","GNK":"GENCO SHIPPING & TRADING LTD SHS","GENC":"GENCOR INDS INC COM","WGS":"GENEDX HOLDINGS CORP COM CL A","GNRC":"GENERAC HLDGS INC COM","GD":"GENERAL DYNAMICS CORP COM","GE":"GENERAL ELECTRIC CO COM NEW","GIS":"GENERAL MLS INC COM","GM":"GENERAL MTRS CO COM","GBIO":"GENERATION BIO CO COM","GCO":"GENESCO INC COM","GEL":"GENESIS ENERGY L P UNIT LTD PARTN","GENE":"GENETIC TECHNOLOGIES LTD NEW SPONSRD ADR","GNE":"GENIE ENERGY LTD CL B","GNS":"GENIUS GROUP LTD ORD SHS","GENI":"GENIUS SPORTS LIMITED SHARES CL A","G":"GENPACT LIMITED SHS","GNPX":"GENPREX INC COM","GNTX":"GENTEX CORP COM","THRM":"GENTHERM INC COM","GPC":"GENUINE PARTS CO COM","GNW":"GENWORTH FINL INC COM CL A","GEO":"GEO GROUP INC NEW COM","GPRK":"GEOPARK LTD USD SHS","GEOS":"GEOSPACE TECHNOLOGIES CORP COM","GGB":"GERDAU SA SPON ADR REP PFD","GERN":"GERON CORP COM","GETY":"GETTY IMAGES HOLDINGS INC CL A COM","GTY":"GETTY RLTY CORP NEW COM","GEVO":"GEVO INC COM PAR","GFL":"GFL ENVIRONMENTAL INC SUB VTG SHS","ROCK":"GIBRALTAR INDS INC COM","GILT":"GILAT SATELLITE NETWORKS LTD SHS NEW","GIL":"GILDAN ACTIVEWEAR INC COM","GILD":"GILEAD SCIENCES INC COM","DNA":"GINKGO BIOWORKS HOLDINGS INC CL A SHS","GTLB":"GITLAB INC CLASS A COM","GBCI":"GLACIER BANCORP INC NEW COM","GLAD":"GLADSTONE CAPITAL CORP COM","GOOD":"GLADSTONE COMMERCIAL CORP COM","GAIN":"GLADSTONE INVT CORP COM","LAND":"GLADSTONE LD CORP COM","GLT":"GLATFELTER CORPORATION COM","GKOS":"GLAUKOS CORP COM","VRAR":"GLIMPSE GROUP INC COM","GB":"GLOBAL BLUE GROUP HOLDING AG ORD SHS","GBTG":"GLOBAL BUSINESS TRAVEL GROUP COM CL A","GLBE":"GLOBAL E ONLINE LTD SHS","GIC":"GLOBAL INDUSTRIAL COMPANY COM","GMRE":"GLOBAL MED REIT INC COM NEW","GLP":"GLOBAL PARTNERS LP COM UNITS","GPN":"GLOBAL PMTS INC COM","GSL":"GLOBAL SHIP LEASE INC NEW COM CL A","GWRS":"GLOBAL WTR RES INC COM","AGNG":"GLOBAL X FDS AGING POPULATION","AIQ":"GLOBAL X FDS ARTIFICIAL ETF","DRIV":"GLOBAL X FDS AUTONMOUS EV ETF","POTX":"GLOBAL X FDS CANNABIS ETF NEW","AQWA":"GLOBAL X FDS CLEAN WTR ETF","CLOU":"GLOBAL X FDS CLOUD COMPUTNG","KRMA":"GLOBAL X FDS CONSCIOUS COS","BUG":"GLOBAL X FDS CYBRSCURTY ETF","DJIA":"GLOBAL X FDS DOW 30 COVERED C","EBIZ":"GLOBAL X FDS E COMMERCE ETF","FYLG":"GLOBAL X FDS FINANCIALS COVRD","FINX":"GLOBAL X FDS FINTECH ETF","ARGT":"GLOBAL X FDS GB MSCI AR ETF","ASEA":"GLOBAL X FDS GBL X FTSE ETF","HYDR":"GLOBAL X FDS GBL X HYDROGEN","GNOM":"GLOBAL X FDS GENOMIC BIOTECH","GURU":"GLOBAL X FDS GLB X GURU INDEX","MLPX":"GLOBAL X FDS GLB X MLP ENRG I","MLPA":"GLOBAL X FDS GLBL X MLP ETF","GXG":"GLOBAL X FDS GLBX MSCI COLUM","KROP":"GLOBAL X FDS GLOBAL X AGTECH","COPX":"GLOBAL X FDS GLOBAL X COPPER","GOEX":"GLOBAL X FDS GLOBAL X GOLD EX","SIL":"GLOBAL X FDS GLOBAL X SILVER","URA":"GLOBAL X FDS GLOBAL X URANIUM","DIV":"GLOBAL X FDS GLOBX SUPDV US","HYLG":"GLOBAL X FDS HEALTH CARE COVR","TYLG":"GLOBAL X FDS INFORMATION TEC","LIT":"GLOBAL X FDS LITHIUM BTRY ETF","MILN":"GLOBAL X FDS MILLENNIAL CONSU","CHIQ":"GLOBAL X FDS MSCI CHINA CNSMR","CHIC":"GLOBAL X FDS MSCI CHINA COMMU","CHIE":"GLOBAL X FDS MSCI CHINA ENRGY","CHIX":"GLOBAL X FDS MSCI CHINA FINCL","CHII":"GLOBAL X FDS MSCI CHINA INDST","CHIK":"GLOBAL X FDS MSCI CHINA IT","CHIM":"GLOBAL X FDS MSCI CHINA MATRL","CHIR":"GLOBAL X FDS MSCI CHINA RE","GREK":"GLOBAL X FDS MSCI GREECE ETF","EMFM":"GLOBAL X FDS MSCI NXT EMRNG","SDEM":"GLOBAL X FDS MSCI SUPR EM ETF","QYLD":"GLOBAL X FDS NASDAQ 100 COVER","QRMI":"GLOBAL X FDS NASDAQ 100 RIS","QYLG":"GLOBAL X FDS NASDQ 100 CVRDGW","PFFV":"GLOBAL X FDS RATE PREFERRED","BOTZ":"GLOBAL X FDS RBTCS ARTFL INTE","RYLD":"GLOBAL X FDS RUSSELL 2000","RYLG":"GLOBAL X FDS RUSSELL 2000 COV","CATH":"GLOBAL X FDS S&P 500 CATHOLIC","XYLD":"GLOBAL X FDS S&P 500 COVERED","XYLG":"GLOBAL X FDS S&P 500 COVERED","XRMI":"GLOBAL X FDS S&P 500 RISK","SOCL":"GLOBAL X FDS SOCIAL MED ETF","SDIV":"GLOBAL X FDS SUPERDIVIDEND","EDOC":"GLOBAL X FDS TELMDC&DIG ETF","GXTG":"GLOBAL X FDS THMATC GWT ETF","PFFD":"GLOBAL X FDS US PFD ETF","HERO":"GLOBAL X FDS VDEO GAM ESPRT","WNDY":"GLOBAL X FDS WIND ENERGY ETF","EMBD":"GLOBAL X FDS X EMERGING MKT","PAVE":"Global X U.S. Infrastructure Development ETF","GFS":"GLOBALFOUNDRIES INC ORDINARY SHARES","GSAT":"GLOBALSTAR INC COM","GLOB":"GLOBANT S A COM","GL":"GLOBE LIFE INC COM","GLBS":"GLOBUS MARITIME LIMITED NEW COM NEW","GMED":"GLOBUS MED INC CL A","GLYC":"GLYCOMIMETICS INC COM","GMS":"GMS INC COM","GDDY":"GODADDY INC CL A","GOGO":"GOGO INC COM","GGR":"GOGORO INC ORDINARY SHARES","GOCO":"GOHEALTH INC CL A NEW","GOL":"GOL LINHAS AEREAS INTELIGENTES SPON ADR PFD NEW","GLNG":"GOLAR LNG LTD SHS","GFI":"GOLD FIELDS LTD SPONSORED ADR","GORO":"GOLD RESOURCE CORP COM","GROY":"GOLD ROYALTY CORP COMMON SHARES","GDEN":"GOLDEN ENTMT INC COM","GMGI":"GOLDEN MATRIX GROUP INC COM","GOGL":"GOLDEN OCEAN GROUP LTD SHS NEW","GLOV":"Goldman Sachs ActiveBeta World Low Vol Plus Equity ETF","GSBD":"GOLDMAN SACHS BDC INC SHS","GSEW":"Goldman Sachs Equal Weight U.S. Large Cap Equity ETF","GBIL":"GOLDMAN SACHS ETF TR ACCES TREASURY","GHYB":"GOLDMAN SACHS ETF TR ACCESS HIG YLD","GIGB":"GOLDMAN SACHS ETF TR ACCESS INVT GR","GEM":"GOLDMAN SACHS ETF TR ACTIVEBETA EME","GSIE":"GOLDMAN SACHS ETF TR ACTIVEBETA INT","GSLC":"GOLDMAN SACHS ETF TR ACTIVEBETA US LG","GDEF":"GOLDMAN SACHS ETF TR DEFENSIVE EQUITY","GVIP":"GOLDMAN SACHS ETF TR HEDGE IND ETF","GINN":"GOLDMAN SACHS ETF TR INNOVAT EQ ETF","JUST":"GOLDMAN SACHS ETF TR JUST US LRG CP","GS":"GOLDMAN SACHS GROUP INC COM","GBDC":"GOLUB CAP BDC INC COM","GDRX":"GOODRX HLDGS INC COM CL A","GT":"GOODYEAR TIRE & RUBR CO COM","GSHD":"GOOSEHEAD INS INC COM CL A","GPRO":"GOPRO INC CL A","GRC":"GORMAN RUPP CO COM","GOSS":"GOSSAMER BIO INC COM","GRAB":"GRAB HOLDINGS LIMITED CLASS A ORD","GGG":"GRACO INC COM","EAF":"GRAFTECH INTL LTD COM","GHM":"GRAHAM CORP COM","GWW":"GRAINGER W W INC COM","GTE":"GRAN TIERRA ENERGY INC COM","LOPE":"GRAND CANYON ED INC COM","GVA":"GRANITE CONSTR INC COM","GPMT":"GRANITE PT MTG TR INC COM STK","TSL":"GRANITESHARES ETF TR 1.25X LNG TESLA","CONL":"GRANITESHARES ETF TR 1.5X LNG COINBSE","AAPB":"GRANITESHARES ETF TR 1.75X LG AAPL DL","COMB":"GRANITESHARES ETF TR BBG COMMD K 1","GPK":"GRAPHIC PACKAGING HLDG CO COM","GRPH":"GRAPHITE BIO INC COM","GTN":"GRAY TELEVISION INC COM","AJX":"GREAT AJAX CORP COM","GLDD":"GREAT LAKES DREDGE & DOCK CORP COM","GRBK":"GREEN BRICK PARTNERS INC COM","GDOT":"GREEN DOT CORP CL A","GPRE":"GREEN PLAINS INC COM","GPP":"GREEN PLAINS PARTNERS LP COM REP PTR IN","GBX":"GREENBRIER COS INC COM","GHL":"GREENHILL & CO INC COM","GREE":"GREENIDGE GENERATION HLDGS INC CLASS A COM","GLRE":"GREENLIGHT CAPITAL RE LTD CLASS A","GP":"GREENPOWER MTR CO INC COM NEW","GEF":"GREIF INC CL A","GDYN":"GRID DYNAMICS HLDGS INC CL A","GFF":"GRIFFON CORP COM","GRFS":"GRIFOLS S A SP ADR REP B NVT","GRND":"GRINDR INC COM","GRTS":"GRITSTONE BIO INC COM","GO":"GROCERY OUTLET HLDG CORP COM","GPI":"GROUP 1 AUTOMOTIVE INC COM","GRPN":"GROUPON INC COM NEW","GROV":"GROVE COLLABORATIVE HOLD INC COM CL A","GRWG":"GROWGENERATION CORP COM","OMAB":"GRUPO AEROPORTUARIO DEL CENTRO SPON ADR","ASR":"GRUPO AEROPORTUARIO DEL SUREST SPON ADR SER B","GGAL":"GRUPO FINANCIERO GALICIA S.A. SPONSORED ADR","SUPV":"GRUPO SUPERVIELLE S.A. SPONSORED ADR","TV":"GRUPO TELEVISA S A B SPON ADR REP ORD","GSIT":"GSI TECHNOLOGY INC COM","GSK":"GSK PLC SPONSORED ADR","GTBP":"GT BIOPHARMA INC COM NEW","GNTY":"GUARANTY BANCSHARES INC TEX COM","GH":"GUARDANT HEALTH INC COM","GES":"GUESS INC COM","GWRE":"GUIDEWIRE SOFTWARE INC COM","GIFI":"GULF IS FABRICATION INC COM","GPOR":"GULFPORT ENERGY CORP COMMON SHARES","GXO":"GXO LOGISTICS INCORPORATED COMMON STOCK","HEES":"H & E EQUIPMENT SERVICES INC COM","HTHT":"H WORLD GROUP LTD SPONSORED ADS","HCKT":"HACKETT GROUP INC COM","HAE":"HAEMONETICS CORP MASS COM","HGTY":"HAGERTY INC CL A COM","HAIN":"HAIN CELESTIAL GROUP INC COM","HOFV":"HALL OF FAME RESORT & ENTMT CO COM NEW","HNRG":"HALLADOR ENERGY COMPANY COM","HAL":"HALLIBURTON CO COM","HALO":"HALOZYME THERAPEUTICS INC COM","HLNE":"HAMILTON LANE INC CL A","HWC":"HANCOCK WHITNEY CORPORATION COM","HBI":"HANESBRANDS INC COM","HAFC":"HANMI FINL CORP COM NEW","HASI":"HANNON ARMSTRONG SUST INFR CAP COM","HONE":"HARBORONE BANCORP INC NEW COM NEW","HOG":"HARLEY DAVIDSON INC COM","HLIT":"HARMONIC INC COM","HRMY":"HARMONY BIOSCIENCES HLDGS INC COM","HMY":"HARMONY GOLD MINING CO LTD SPONSORED ADR","HROW":"HARROW HEALTH INC COM","HCOM":"HARTFORD FDS EXCHANGE TRADED T SCHRODERS COMMOD","HIG":"HARTFORD FINL SVCS GROUP INC COM","HBIO":"HARVARD BIOSCIENCE INC COM","HAS":"HASBRO INC COM","HCP":"HASHICORP INC COM CL A","HVT":"HAVERTY FURNITURE COS INC COM","HE":"HAWAIIAN ELEC INDUSTRIES COM","HA":"HAWAIIAN HOLDINGS INC COM","HWKN":"HAWKINS INC COM","HAYN":"HAYNES INTL INC COM NEW","HAYW":"HAYWARD HLDGS INC COM","HBT":"HBT FINL INC. COM","HCA":"HCA HEALTHCARE INC COM","HCI":"HCI GROUP INC COM","HDB":"HDFC BANK LTD SPONSORED ADS","SIXV":"Health Care Select Sector Index S&P 500","HCAT":"HEALTH CATALYST INC COM","HR":"HEALTHCARE RLTY TR CL A COM","HCSG":"HEALTHCARE SVCS GROUP INC COM","HQY":"HEALTHEQUITY INC COM","PEAK":"HEALTHPEAK PROPERTIES INC COM","HSTM":"HEALTHSTREAM INC COM","HTLD":"HEARTLAND EXPRESS INC COM","HTLF":"HEARTLAND FINL USA INC COM","HL":"HECLA MNG CO COM","HEI":"HEICO CORP NEW COM","HSII":"HEIDRICK & STRUGGLES INTL INC COM","HELE":"HELEN OF TROY LTD COM","HLGN":"HELIOGEN INC COMMON STOCK","HLIO":"HELIOS TECHNOLOGIES INC COM","HLX":"HELIX ENERGY SOLUTIONS GRP INC COM","MOMO":"HELLO GROUP INC ADS","HP":"HELMERICH & PAYNE INC COM","JKHY":"HENRY JACK & ASSOC INC COM","HSIC":"HENRY SCHEIN INC COM","HEPA":"HEPION PHARMACEUTICALS INC COM NEW","HLF":"HERBALIFE LTD COM SHS","HRI":"HERC HLDGS INC COM","HTGC":"HERCULES CAPITAL INC COM","HCCI":"HERITAGE CRYSTAL CLEAN INC COM","HFWA":"HERITAGE FINL CORP WASH COM","HRTG":"HERITAGE INSURANCE HLDGS INC COM","HRTX":"HERON THERAPEUTICS INC COM","HT":"HERSHA HOSPITALITY TR PR SHS BEN INT","HSY":"HERSHEY CO COM","HTZ":"HERTZ GLOBAL HLDGS INC COM NEW","HES":"HESS CORP COM","HESM":"HESS MIDSTREAM LP CL A SHS","HPE":"HEWLETT PACKARD ENTERPRISE CO COM","HXL":"HEXCEL CORP NEW COM","DINO":"HF SINCLAIR CORP COM","HIBB":"HIBBETT INC COM","HITI":"HIGH TIDE INC COM NEW","SNLN":"HIGHLAND FDS I HI LD IBOXX SRLN","HPK":"HIGHPEAK ENERGY INC COM","HIW":"HIGHWOODS PPTYS INC COM","HI":"HILLENBRAND INC COM","HLMN":"HILLMAN SOLUTIONS CORP COM","HTH":"HILLTOP HOLDINGS INC COM","HGV":"HILTON GRAND VACATIONS INC COM","HLT":"HILTON WORLDWIDE HLDGS INC COM","HIMX":"HIMAX TECHNOLOGIES INC SPONSORED ADR","HIMS":"HIMS & HERS HEALTH INC COM CL A","HIPO":"HIPPO HLDGS INC COM NEW","HRT":"HIRERIGHT HOLDINGS CORPORATION COM","HIVE":"HIVE DIGITAL TECHNOLOGIES LTD COM NEW","HNI":"HNI CORP COM","HLLY":"HOLLEY INC COM","HEP":"HOLLY ENERGY PARTNERS L P COM UT LTD PTN","HOLI":"HOLLYSYS AUTOMATION TCHNGY LTD SHS","HOLX":"HOLOGIC INC COM","HBCP":"HOME BANCORP INC COM","HOMB":"HOME BANCSHARES INC COM","HD":"HOME DEPOT INC COM","HMPT":"HOME PT CAPITAL INCORPORATED COM","HMST":"HOMESTREET INC COM","FIXX":"HOMOLOGY MEDICINES INC COM","HMC":"HONDA MOTOR LTD AMERN SHS","HNST":"HONEST CO INC COM","HON":"HONEYWELL INTL INC COM","HOFT":"HOOKER FURNISHINGS CORPORATION COM","HOOK":"HOOKIPA PHARMA INC COM","HRZN":"HORIZON TECHNOLOGY FIN CORP COM","HZNP":"HORIZON THERAPEUTICS PUB L SHS","HRL":"HORMEL FOODS CORP COM","HST":"HOST HOTELS & RESORTS INC COM","TWNK":"HOSTESS BRANDS INC CL A","HUSA":"HOUSTON AMERN ENERGY CORP COM","HHC":"HOWARD HUGHES CORP COM","HWM":"HOWMET AEROSPACE INC COM","HPQ":"HP INC COM","HSBC":"HSBC HLDGS PLC SPON ADR NEW","HUBG":"HUB GROUP INC CL A","HUBS":"HUBSPOT INC COM","HBM":"HUDBAY MINERALS INC COM","HPP":"HUDSON PAC PPTYS INC COM","HDSN":"HUDSON TECHNOLOGIES INC COM","HUMA":"HUMACYTE INC COM","HUM":"HUMANA INC COM","JBHT":"HUNT J B TRANS SVCS INC COM","HBAN":"HUNTINGTON BANCSHARES INC COM","HII":"HUNTINGTON INGALLS INDS INC COM","HUN":"HUNTSMAN CORP COM","HURN":"HURON CONSULTING GROUP INC COM","HUT":"HUT 8 MNG CORP COM","HCM":"HUTCHMED CHINA LTD SPONSORED ADS","HUYA":"HUYA INC ADS REP SHS A","H":"HYATT HOTELS CORP COM CL A","HYMC":"HYCROFT MINING HOLDING CORP COM CL A","HYFM":"HYDROFARM HLDGS GROUP INC COM","HYLN":"HYLIION HOLDINGS CORP COMMON STOCK","HYPR":"HYPERFINE INC COM CL A","HYREQ":"HYRECAR INC COM","HY":"HYSTER YALE MATLS HANDLING INC CL A","HYZN":"HYZON MOTORS INC COM CL A","IMAB":"I MAB SPONSORED ADS","IIIV":"I3 VERTICALS INC COM CL A","IAC":"IAC INC COM NEW","IAG":"IAMGOLD CORP COM","IBEX":"IBEX LTD SHS NEW","IBIO":"IBIO INC COM","ICAD":"ICAD INC COM NEW","IEP":"ICAHN ENTERPRISES LP DEPOSITARY UNIT","ICHR":"ICHOR HOLDINGS SHS","IBN":"ICICI BANK LIMITED ADR","ICL":"ICL GROUP LTD SHS","ICLK":"ICLICK INTERACTIVE ASIA GROUP SPON ADS NEW","ICLR":"ICON PLC SHS","ICVX":"ICOSAVAX INC COM","ICUI":"ICU MED INC COM","IDA":"IDACORP INC COM","IDR":"IDAHO STRATEGIC RESOURCES COM NEW","IDEX":"IDEANOMICS INC COM","IDYA":"IDEAYA BIOSCIENCES INC COM","INVE":"IDENTIV INC COM NEW","IEX":"IDEX CORP COM","IDXX":"IDEXX LABS INC COM","IDT":"IDT CORP CL B NEW","IESC":"IES HLDGS INC COM","IGC":"IGC PHARMA INC COM NEW","IGMS":"IGM BIOSCIENCES INC COM","IHRT":"IHEARTMEDIA INC COM CL A","IHS":"IHS HOLDING LIMITED ORD SHS","ITW":"ILLINOIS TOOL WKS INC COM","ILMN":"ILLUMINA INC COM","IMAX":"IMAX CORP COM","IMBIQ":"IMEDIA BRANDS INC COM CL A","IMTX":"IMMATICS N.V SHS","IMMR":"IMMERSION CORP COM","IMUX":"IMMUNIC INC COM","IBRX":"IMMUNITYBIO INC COM","IMCR":"IMMUNOCORE HLDGS PLC ADS","IMGN":"IMMUNOGEN INC COM","IMNM":"IMMUNOME INC COM","IPA":"IMMUNOPRECISE ANTIBODIES LTD COM NEW","IMVT":"IMMUNOVANT INC COM","IMMP":"IMMUTEP LTD SPONSORED ADS","IMO":"IMPERIAL OIL LTD COM NEW","IMPP":"IMPERIAL PETE INC COM NEW","PI":"IMPINJ INC COM","NARI":"INARI MED INC COM","INCY":"INCYTE CORP COM","ICD":"INDEPENDENCE CONTRACT DRILLING COM","IRT":"INDEPENDENCE RLTY TR INC COM","INDB":"INDEPENDENT BK CORP MASS COM","IBCP":"INDEPENDENT BK CORP MICH COM NEW","QAI":"INDEXIQ ETF TR HEDGE MLTI ETF","MNA":"INDEXIQ ETF TR IQ MRGR ARB ETF","INDI":"INDIE SEMICONDUCTOR INC CLASS A COM","ILPT":"INDUSTRIAL LOGISTICS PPTYS TR COM SHS BEN INT","SIXI":"Industrials Select Sector Index S&P 500","INFN":"INFINERA CORP COM","INFI":"INFINITY PHARMACEUTICALS INC COM","INFA":"INFORMATICA INC COM CL A","INFY":"INFOSYS LTD SPONSORED ADR","INFU":"INFUSYSTEM HLDGS INC COM","ING":"ING GROEP N.V. SPONSORED ADR","IR":"INGERSOLL RAND INC COM","IMKTA":"INGLES MKTS INC CL A","INGR":"INGREDION INC COM","INBX":"INHIBRX INC COM","INMD":"INMODE LTD SHS","INMB":"INMUNE BIO INC COM","INOD":"INNODATA INC COM NEW","IOSP":"INNOSPEC INC COM","INNV":"INNOVAGE HLDG CORP COM","VATE":"INNOVATE CORP COM","IIPR":"INNOVATIVE INDL PPTYS INC COM","FFTY":"INNOVATOR ETFS TR IBD 50 ETF","LOUP":"INNOVATOR ETFS TR INNOVATOR DEEPW","PSEP":"Innovator U.S. Equity Power Buffer ETF - September","INVA":"INNOVIVA INC COM","INVZ":"INNOVIZ TECHNOLOGIES LTD SHS","INGN":"INOGEN INC COM","NOTV":"INOTIV INC COM","INO":"INOVIO PHARMACEUTICALS INC COM NEW","INZY":"INOZYME PHARMA INC COM","INSG":"INSEEGO CORP COM","NSIT":"INSIGHT ENTERPRISES INC COM","INSM":"INSMED INC COM PAR $.01","NSP":"INSPERITY INC COM","ISPO":"INSPIRATO INCORPORATED COM CL A","INSP":"INSPIRE MED SYS INC COM","INSE":"INSPIRED ENTMT INC COM","NSPR":"INSPIREMD INC COM","IBP":"INSTALLED BLDG PRODS INC COM","IIIN":"INSTEEL INDS INC COM","TIL":"INSTIL BIO INC COM","INST":"INSTRUCTURE HLDGS INC COM","PODD":"INSULET CORP COM","INTA":"INTAPP INC COM","ITGR":"INTEGER HLDGS CORP COM","IART":"INTEGRA LIFESCIENCES HLDGS CP COM NEW","IAS":"INTEGRAL AD SCIENCE HLDNG CORP COM","INTC":"INTEL CORP COM","NTLA":"INTELLIA THERAPEUTICS INC COM","IDN":"INTELLICHECK INC COM NEW","IPAR":"INTER PARFUMS INC COM","IBKR":"INTERACTIVE BROKERS GROUP INC COM CL A","ICPT":"INTERCEPT PHARMACEUTICALS INC COM","ICE":"INTERCONTINENTAL EXCHANGE INC COM","INCR":"INTERCURE LTD COM NEW","IDCC":"INTERDIGITAL INC COM","TILE":"INTERFACE INC COM","IBOC":"INTERNATIONAL BANCSHARES CORP COM","IBM":"INTERNATIONAL BUSINESS MACHS COM","IFF":"INTERNATIONAL FLAVORS&FRAGRANC COM","IGT":"INTERNATIONAL GAME TECHNOLOGY SHS USD","IP":"INTERNATIONAL PAPER CO COM","INSW":"INTERNATIONAL SEAWAYS INC COM","IPG":"INTERPUBLIC GROUP COS INC COM","INTT":"INTEST CORP COM","IVAC":"INTEVAC INC COM","ITCI":"INTRA-CELLULAR THERAPIES INC COM","IPI":"INTREPID POTASH INC COM","INTZ":"INTRUSION INC COM NEW","INTU":"INTUIT COM","ISRG":"INTUITIVE SURGICAL INC COM NEW","IVT":"INVENTRUST PPTYS CORP COM NEW","SJIM":"Inverse Cramer Tracker ETF","GSY":"INVESCO ACTIVELY MANAGED ETF ULTRA SHRT DUR","EVMT":"INVESCO ACTVELY MNGD ETC FD TR ELC VEH MTLS CDT","PDBC":"INVESCO ACTVELY MNGD ETC FD TR OPTIMUM YIELD","SATO":"Invesco Alerian Galaxy Crypto Economy ETF","FXA":"INVESCO CURRENCYSHARES AUSTRAL AUSTRALIAN DOL","FXB":"INVESCO CURRENCYSHARES BRIT PO BRIT POUN STRL","FXC":"INVESCO CURRENCYSHARES CDN DLR CDN DLR SHS","FXE":"INVESCO CURRENCYSHARES EURO TR EURO SHS","FXY":"INVESCO CURRENCYSHARES JAPANES JAPANESE YEN","FXF":"INVESCO CURRENCYSHARES SWISS F SWISS FRANC","DBC":"INVESCO DB COMMDY INDX TRCK FD UNIT","DBA":"INVESCO DB MULTI-SECTOR COMMOD AGRICULTURE FD","DBB":"INVESCO DB MULTI-SECTOR COMMOD BASE METALS FD","DBE":"INVESCO DB MULTI-SECTOR COMMOD ENERGY FD","DBO":"INVESCO DB MULTI-SECTOR COMMOD OIL FD","DBP":"INVESCO DB MULTI-SECTOR COMMOD PRECIOUS METAL","UDN":"INVESCO DB US DLR INDEX TR BEARISH FD","UUP":"INVESCO DB US DLR INDEX TR BULLISH FD","PWZ":"INVESCO EXCH TRADED FD TR II CALIF AMT MUN","PCEF":"INVESCO EXCH TRADED FD TR II CEF INM COMPSI","PIZ":"INVESCO EXCH TRADED FD TR II DWA DEV MKTS","PIE":"INVESCO EXCH TRADED FD TR II DWA EMERG MKTS","DWAS":"INVESCO EXCH TRADED FD TR II DWA SMLCP MENT","PCY":"INVESCO EXCH TRADED FD TR II EMRNG MKT SVRG","PHB":"INVESCO EXCH TRADED FD TR II FNDMNTL HY CRP","PXH":"INVESCO EXCH TRADED FD TR II FTSE RAFI EMNG","PBD":"INVESCO EXCH TRADED FD TR II GBL CLEAN ENRG","KBWB":"INVESCO EXCH TRADED FD TR II KBW BK ETF","KBWD":"INVESCO EXCH TRADED FD TR II KBW HIG DV YLD","KBWP":"INVESCO EXCH TRADED FD TR II KBW PPTY CASUT","KBWY":"INVESCO EXCH TRADED FD TR II KBW PREM YIELD","CUT":"INVESCO EXCH TRADED FD TR II MSCI GBL TIMBR","QQQJ":"INVESCO EXCH TRADED FD TR II NASDAQNXTGEN100","PGX":"INVESCO EXCH TRADED FD TR II PFD ETF","SPVU":"INVESCO EXCH TRADED FD TR II S&P 500 ENHNCD","SPHB":"INVESCO EXCH TRADED FD TR II S&P 500 HB ETF","RWL":"INVESCO EXCH TRADED FD TR II S&P 500 REVENUE","EELV":"INVESCO EXCH TRADED FD TR II S&P EMRNG MKTS","CGW":"INVESCO EXCH TRADED FD TR II S&P GBL WATER","RWK":"INVESCO EXCH TRADED FD TR II S&P MDCP 400 REV","XMLV":"INVESCO EXCH TRADED FD TR II S&P MIDCP LOW","RWJ":"INVESCO EXCH TRADED FD TR II S&P SMALLCAP 600","PSCE":"INVESCO EXCH TRADED FD TR II S&P SMALLCAP ENE","PSCH":"INVESCO EXCH TRADED FD TR II S&P SMLCP HELT","SPHD":"INVESCO EXCH TRADED FD TR II S&P500 HDL VOL","SPLV":"INVESCO EXCH TRADED FD TR II S&P500 LOW VOL","TAN":"INVESCO EXCH TRADED FD TR II SOLAR ETF","BKLN":"INVESCO EXCH TRADED FD TR II SR LN ETF","VRP":"INVESCO EXCH TRADED FD TR II VAR RATE PFD","PPA":"INVESCO EXCHANGE TRADED FD TR AEROSPACE DEFN","PKW":"INVESCO EXCHANGE TRADED FD TR BUYBACK ACHIEV","PDP":"INVESCO EXCHANGE TRADED FD TR DWA MOMENTUM","PTF":"INVESCO EXCHANGE TRADED FD TR DWA TECHNOLOGY","PXE":"INVESCO EXCHANGE TRADED FD TR DYNMC ENRG EXP","PEJ":"INVESCO EXCHANGE TRADED FD TR DYNMC LEISURE","PXJ":"INVESCO EXCHANGE TRADED FD TR DYNMC OIL GAS","PJP":"INVESCO EXCHANGE TRADED FD TR DYNMC PHRMCTLS","PSI":"INVESCO EXCHANGE TRADED FD TR DYNMC SEMICNDT","PGF":"INVESCO EXCHANGE TRADED FD TR FINL PFD ETF","PRF":"INVESCO EXCHANGE TRADED FD TR FTSE RAFI 1000","PRFZ":"INVESCO EXCHANGE TRADED FD TR FTSE RAFI 1500","PSP":"INVESCO EXCHANGE TRADED FD TR GBL LISTED PVT","PGJ":"INVESCO EXCHANGE TRADED FD TR GLOBAL DRGN CN","PEY":"INVESCO EXCHANGE TRADED FD TR HIG YLD EQ DIV","PID":"INVESCO EXCHANGE TRADED FD TR INTL DIVI ACHI","PNQI":"INVESCO EXCHANGE TRADED FD TR NASDAQ INTERNT","SPGP":"INVESCO EXCHANGE TRADED FD TR S&P 500 GARP ETF","XLG":"INVESCO EXCHANGE TRADED FD TR S&P 500 TOP 50","XMMO":"INVESCO EXCHANGE TRADED FD TR S&P MDCP MOMNTUM","XMHQ":"INVESCO EXCHANGE TRADED FD TR S&P MDCP QUALITY","XMVM":"INVESCO EXCHANGE TRADED FD TR S&P MDCP VLU MNT","RFV":"INVESCO EXCHANGE TRADED FD TR S&P MDCP400 VL","XSVM":"INVESCO EXCHANGE TRADED FD TR S&P SMCP VLU MNT","RZV":"INVESCO EXCHANGE TRADED FD TR S&P SML600 VAL","CSD":"INVESCO EXCHANGE TRADED FD TR S&P SPIN OFF","RSPD":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL DIS","RSPG":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL ENR","RSPF":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL FIN","RSPH":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL HLT","RSPN":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL IND","RSPM":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL MAT","RSPR":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL REL","RSPT":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL TEC","RSP":"INVESCO EXCHANGE TRADED FD TR S&P500 EQL WGT","RPV":"INVESCO EXCHANGE TRADED FD TR S&P500 PUR VAL","SPHQ":"INVESCO EXCHANGE TRADED FD TR S&P500 QUALITY","PHO":"INVESCO EXCHANGE TRADED FD TR WATER RES ETF","PBW":"INVESCO EXCHANGE TRADED FD TR WILDERHIL CLAN","CVY":"INVESCO EXCHANGE TRADED FD TR ZACKS MULT AST","PIN":"INVESCO INDIA EXCHANGE-TRADED INDIA ETF","IVZ":"INVESCO LTD SHS","IVR":"INVESCO MORTGAGE CAPITAL INC COM","QQQ":"INVESCO QQQ TR UNIT SER 1","NVDS":"INVESTMENT MANAGERS SER TR II AXS 1.25X NVDA","PYPT":"INVESTMENT MANAGERS SER TR II AXS 1.5X PYPL BL","TARK":"INVESTMENT MANAGERS SER TR II AXS 2X INVTN NEW","THCX":"INVESTMENT MANAGERS SER TR II AXS CANNABIS ETF","SARK":"INVESTMENT MANAGERS SER TR II AXS SHORT INNOV","TSLQ":"INVESTMENT MANAGERS SER TR II AXS TSLA BEAR DL","NVTA":"INVITAE CORP COM","INVH":"INVITATION HOMES INC COM","IVVD":"INVIVYD INC COM","IONS":"IONIS PHARMACEUTICALS INC COM","IONQ":"IONQ INC COM","IOVA":"IOVANCE BIOTHERAPEUTICS INC COM","VXZ":"iPath Series B S&P 500 VIX Mid-Term Futures ETN","VXX":"iPath Series B S&P 500 VIX Short-Term Futures ETN","IPGP":"IPG PHOTONICS CORP COM","IQ":"IQIYI INC SPONSORED ADS","IQV":"IQVIA HLDGS INC COM","IRTC":"IRHYTHM TECHNOLOGIES INC COM","IRDM":"IRIDIUM COMMUNICATIONS INC COM","IREN":"IRIS ENERGY LTD ORDINARY SHARES","IRBT":"IROBOT CORP COM","IRM":"IRON MTN INC DEL COM","IRNT":"IRONNET INC COM","IRWD":"IRONWOOD PHARMACEUTICALS INC COM CL A","IRS":"IRSA INVERSIONES Y REP S A GLOBL DEP RCPT","USHY":"iShares Broad USD High Yield Corporate Bond ETF","ICF":"iShares Cohen & Steers REIT ETF","ICVT":"iShares Convertible Bond ETF","IAGG":"iShares Core International Aggregate Bond Fund","IEFA":"iShares Core MSCI EAFE ETF","HEFA":"iShares Currency Hedged MSCI EAFE ETF","IGV":"iShares Expanded Tech-Software Sector ETF","IAUF":"iShares Gold Strategy ETF","IAU":"ISHARES GOLD TR ISHARES NEW","IEMG":"ISHARES INC CORE MSCI EMKT","DVYE":"ISHARES INC EM MKTS DIV ETF","ESGE":"ISHARES INC ESG AWR MSCI EM","FM":"ISHARES INC FRONTIER AND SEL","FILL":"ISHARES INC GLB ENR PROD ETF","LEMB":"ISHARES INC JP MORGAN EM ETF","VEGI":"ISHARES INC MSCI AGRICULTURE","EWA":"ISHARES INC MSCI AUST ETF","EWK":"ISHARES INC MSCI BELGIUM ETF","BKF":"ISHARES INC MSCI BIC ETF","EWZ":"ISHARES INC MSCI BRAZIL ETF","EWC":"ISHARES INC MSCI CDA ETF","EWQ":"ISHARES INC MSCI FRANCE ETF","RING":"ISHARES INC MSCI GBL GOLD MN","EWG":"ISHARES INC MSCI GERMANY ETF","EWH":"ISHARES INC MSCI HONG KG ETF","EWI":"ISHARES INC MSCI ITALY ETF","SCJ":"ISHARES INC MSCI JAPN SMCETF","EWJ":"ISHARES INC MSCI JPN ETF NEW","EWW":"ISHARES INC MSCI MEXICO ETF","EWM":"ISHARES INC MSCI MLY ETF NEW","EWN":"ISHARES INC MSCI NETHERL ETF","EPP":"ISHARES INC MSCI PAC JP ETF","EWS":"ISHARES INC MSCI SINGPOR ETF","EWP":"ISHARES INC MSCI SPAIN ETF","EZA":"ISHARES INC MSCI STH AFR ETF","EWY":"ISHARES INC MSCI STH KOR ETF","EWD":"ISHARES INC MSCI SWEDEN ETF","EWL":"ISHARES INC MSCI SWITZERLAND","EWT":"ISHARES INC MSCI TAIWAN ETF","THD":"ISHARES INC MSCI THAILND ETF","TUR":"ISHARES INC MSCI TURKEY ETF","GVI":"iShares Intermediate Government\/Credit Bond ETF","HYXU":"iShares International High Yield Bond ETF","IDV":"iShares International Select Dividend ETF","CEMB":"iShares J.P. Morgan EM Corporate Bond ETF","REM":"iShares Mortgage Real Estate ETF","ECH":"iShares MSCI Chile ETF","CNYA":"iShares MSCI China A ETF","EFG":"iShares MSCI EAFE Growth ETF","EFAV":"iShares MSCI EAFE Min Vol Factor ETF","EFV":"iShares MSCI EAFE Value ETF","EEMV":"iShares MSCI Emerging Markets Min Vol Factor ETF","EZU":"iShares MSCI Eurozone ETF","PICK":"iShares MSCI Global Metals & Mining Producers ETF","ACWV":"iShares MSCI Global Min Vol Factor ETF","SLVP":"iShares MSCI Global Silver and Metals Miners ETF","INDA":"iShares MSCI India ETF","USMV":"iShares MSCI USA Min Vol Factor ETF","MTUM":"iShares MSCI USA Momentum Factor ETF","QUAL":"iShares MSCI USA Quality Factor ETF","VLUE":"iShares MSCI USA Value Factor ETF","IGE":"iShares North American Natural Resources ETF","GSG":"ISHARES S&P GSCI COMMODITY- IN UNIT BEN INT","SLV":"ISHARES SILVER TR ISHARES","STIP":"ISHARES TR 0-5 YR TIPS ETF","SHYG":"ISHARES TR 0-5YR HI YL CP","SHY":"ISHARES TR 1 3 YR TREAS BD","IGLB":"ISHARES TR 10+ YR INVST GRD","TLH":"ISHARES TR 10-20 YR TRS ETF","TLT":"ISHARES TR 20 YR TR BD ETF","IEI":"ISHARES TR 3 7 YR TREAS BD","IEF":"ISHARES TR 7-10 YR TRSY BD","AIA":"ISHARES TR ASIA 50 ETF","FXI":"ISHARES TR CHINA LG-CAP ETF","ECNS":"ISHARES TR CHINA SM-CAP ETF","ISTB":"ISHARES TR CORE 1 5 YR USD","DGRO":"ISHARES TR CORE DIV GRWTH","HDV":"ISHARES TR CORE HIGH DV ETF","IEUR":"ISHARES TR CORE MSCI EURO","IPAC":"ISHARES TR CORE MSCI PAC","IXUS":"ISHARES TR CORE MSCI TOTAL","IJH":"ISHARES TR CORE S&P MCP ETF","IJR":"ISHARES TR CORE S&P SCP ETF","ITOT":"ISHARES TR CORE S&P TTL STK","IUSG":"ISHARES TR CORE S&P US GWT","IUSV":"ISHARES TR CORE S&P US VLU","IVV":"ISHARES TR CORE S&P500 ETF","IUSB":"ISHARES TR CORE TOTAL USD","AGG":"ISHARES TR CORE US AGGBD ET","USRT":"ISHARES TR CRE U S REIT ETF","HEZU":"ISHARES TR CUR HD EURZN ETF","HEWG":"ISHARES TR CUR HED MSCI GER","IHAK":"ISHARES TR CYBERSECURITY","SCZ":"ISHARES TR EAFE SML CP ETF","SUSB":"ISHARES TR ESG AWRE 1 5 YR","IEV":"ISHARES TR EUROPE ETF","IGM":"ISHARES TR EXPND TEC SC ETF","XT":"ISHARES TR EXPONENTIAL TECH","FALN":"ISHARES TR FALN ANGLS USD","IXP":"ISHARES TR GBL COMM SVC ETF","IDNA":"ISHARES TR GENOMICS IMMUN","ICLN":"ISHARES TR GL CLEAN ENE ETF","WOOD":"ISHARES TR GL TIMB FORE ETF","IGF":"ISHARES TR GLB INFRASTR ETF","IXJ":"ISHARES TR GLOB HLTHCRE ETF","IOO":"ISHARES TR GLOBAL 100 ETF","IXC":"ISHARES TR GLOBAL ENERG ETF","IXG":"ISHARES TR GLOBAL FINLS ETF","MXI":"ISHARES TR GLOBAL MATER ETF","REET":"ISHARES TR GLOBAL REIT ETF","IXN":"ISHARES TR GLOBAL TECH ETF","HEWJ":"ISHARES TR HDG MSCI JAPAN","HYG":"ISHARES TR IBOXX HI YD ETF","LQD":"ISHARES TR IBOXX INV CP ETF","IFGL":"ISHARES TR INTL DEV RE ETF","WPS":"ISHARES TR INTL DEVPPTY ETF","INTF":"ISHARES TR INTL EQTY FACTOR","IGOV":"ISHARES TR INTL TREA BD ETF","IBB":"ISHARES TR ISHARES BIOTECH","SOXX":"ISHARES TR ISHARES SEMICDTR","IGSB":"ISHARES TR ISHS 1-5YR INVS","IGIB":"ISHARES TR ISHS 5-10YR INVT","EMB":"ISHARES TR JPMORGAN USD EMG","ILF":"ISHARES TR LATN AMER 40 ETF","MBB":"ISHARES TR MBS ETF","IWC":"ISHARES TR MICRO-CAP ETF","ILCG":"ISHARES TR MORNINGSTAR GRWT","IMCG":"ISHARES TR MRGSTR MD CP GRW","AAXJ":"ISHARES TR MSCI AC ASIA ETF","ACWI":"ISHARES TR MSCI ACWI ETF","ACWX":"ISHARES TR MSCI ACWI EX US","MCHI":"ISHARES TR MSCI CHINA ETF","EFA":"ISHARES TR MSCI EAFE ETF","EEM":"ISHARES TR MSCI EMG MKT ETF","EUFN":"ISHARES TR MSCI EURO FL ETF","IQLT":"ISHARES TR MSCI INTL QUALTY","IVLU":"ISHARES TR MSCI INTL VLU FT","EWU":"ISHARES TR MSCI UK ETF NEW","SUSA":"ISHARES TR MSCI USA ESG SLC","SIZE":"ISHARES TR MSCI USA SZE FT","IGN":"ISHARES TR NA TEC MULTM ETF","MUB":"ISHARES TR NATIONAL MUN ETF","ENZL":"ISHARES TR NEW ZEALAND ETF","PFF":"ISHARES TR PFD AND INCM SEC","REZ":"ISHARES TR RESIDENTIAL MULT","IRBO":"ISHARES TR ROBOTICS ARTIF","IWB":"ISHARES TR RUS 1000 ETF","IWF":"ISHARES TR RUS 1000 GRW ETF","IWD":"ISHARES TR RUS 1000 VAL ETF","IWO":"ISHARES TR RUS 2000 GRW ETF","IWN":"ISHARES TR RUS 2000 VAL ETF","IWP":"ISHARES TR RUS MD CP GR ETF","IWS":"ISHARES TR RUS MDCP VAL ETF","IWR":"ISHARES TR RUS MID CAP ETF","IWX":"ISHARES TR RUS TP200 VL ETF","IWM":"ISHARES TR RUSSELL 2000 ETF","IWV":"ISHARES TR RUSSELL 3000 ETF","OEF":"ISHARES TR S&P 100 ETF","IVW":"ISHARES TR S&P 500 GRWT ETF","IVE":"ISHARES TR S&P 500 VAL ETF","IJK":"ISHARES TR S&P MC 400GR ETF","IJJ":"ISHARES TR S&P MC 400VL ETF","IJT":"ISHARES TR S&P SML 600 GWT","DVY":"ISHARES TR SELECT DIVID ETF","IDRV":"ISHARES TR SELF DRIVNG EV","SHV":"ISHARES TR SHORT TREAS BD","IJS":"ISHARES TR SP SMCP600VL ETF","TIP":"ISHARES TR TIPS BD ETF","TFLO":"ISHARES TR TRS FLT RT BD","LRGF":"ISHARES TR U S EQUITY FACTR","IYM":"ISHARES TR U.S. BAS MTL ETF","IYE":"ISHARES TR U.S. ENERGY ETF","IYF":"ISHARES TR U.S. FINLS ETF","IHI":"ISHARES TR U.S. MED DVC ETF","IHE":"ISHARES TR U.S. PHARMA ETF","IYR":"ISHARES TR U.S. REAL ES ETF","IYW":"ISHARES TR U.S. TECH ETF","IDU":"ISHARES TR U.S. UTILITS ETF","IAI":"ISHARES TR US BR DEL SE ETF","IYC":"ISHARES TR US CONSUM DISCRE","IYH":"ISHARES TR US HLTHCARE ETF","IHF":"ISHARES TR US HLTHCR PR ETF","IEZ":"ISHARES TR US OIL EQ&SV ETF","IAT":"ISHARES TR US REGNL BKS ETF","SMLF":"ISHARES TR US SML CAP EQT","USIG":"ISHARES TR USD INV GRDE ETF","IWFH":"ISHARES TR VIRTUAL WRK LIFE","CMDY":"ISHARES U S ETF TR BLOOMBERG ROLL","CCRV":"ISHARES U S ETF TR COMMODITY CURVE","COMT":"ISHARES U S ETF TR GSCI CMDTY STGY","LQDH":"ISHARES U S ETF TR INT RT HDG C B","HYGH":"ISHARES U S ETF TR IT RT HDG HGYL","ITA":"iShares U.S. Aerospace & Defense ETF","IEDI":"iShares U.S. Consumer Focused ETF","ITB":"iShares U.S. Home Construction ETF","IFRA":"iShares U.S. Infrastructure ETF","IEO":"iShares U.S. Oil & Gas Exploration & Production ETF","IYZ":"iShares U.S. Telecommunications ETF","IYT":"iShares U.S. Transportation ETF","GOVT":"iShares U.S. Treasury Bond ETF","SVAL":"iShares US Small Cap Value Factor ETF","ISUN":"ISUN INC COM","ITP":"IT TECH PACKAGING INC COM NEW","ITUB":"ITAU UNIBANCO HLDG S A SPON ADR REP PFD","ITOS":"ITEOS THERAPEUTICS INC COM","ITRI":"ITRON INC COM","ITT":"ITT INC COM","IZEA":"IZEA WORLDWIDE INC COM NEW","JPEM":"J P MORGAN EXCHANGE TRADED FD DIV RTN EM EQT","JPIN":"J P MORGAN EXCHANGE TRADED FD DIV RTN INT EQ","JEPI":"J P MORGAN EXCHANGE TRADED FD EQUITY PREMIUM","JIRE":"J P MORGAN EXCHANGE TRADED FD INTRNL RES EQT","JPUS":"J P MORGAN EXCHANGE TRADED FD JPMORGAN DIVER","JEPQ":"J P MORGAN EXCHANGE TRADED FD NASDAQ EQT PREM","JPST":"J P MORGAN EXCHANGE TRADED FD ULTRA SHRT INC","JQUA":"J P MORGAN EXCHANGE TRADED FD US QUALTY FCTR","JVAL":"J P MORGAN EXCHANGE TRADED FD US VALUE FACTR","JBL":"JABIL INC COM","JACK":"JACK IN THE BOX INC COM","JXN":"JACKSON FINANCIAL INC COM CL A","J":"JACOBS SOLUTIONS INC COM","JAGX":"JAGUAR HEALTH INC COM","JHX":"JAMES HARDIE INDS PLC SPONSORED ADR","JRVR":"JAMES RIV GROUP LTD COM","JAMF":"JAMF HLDG CORP COM","JMBS":"JANUS DETROIT STR TR HENDERSON MTG","JAAA":"JANUS DETROIT STR TR HENDRSON AAA CL","JHG":"JANUS HENDERSON GROUP PLC ORD SHS","JBI":"JANUS INTERNATIONAL GROUP INC COMMON STOCK","JANX":"JANUX THERAPEUTICS INC COM","JSPR":"JASPER THERAPEUTICS INC COM","JAZZ":"JAZZ PHARMACEUTICALS PLC SHS USD","JBGS":"JBG SMITH PPTYS COM","JD":"JD.COM INC SPON ADR CL A","JEF":"JEFFERIES FINL GROUP INC COM","JELD":"JELD-WEN HLDG INC COM","JBLU":"JETBLUE AWYS CORP COM","FROG":"JFROG LTD ORD SHS","JKS":"JINKOSOLAR HLDG CO LTD SPONSORED ADR","JOAN":"JOANN INC COM","JOBY":"JOBY AVIATION INC COMMON STOCK","JBT":"JOHN BEAN TECHNOLOGIES CORP COM","JHML":"JOHN HANCOCK EXCHANGE TRADED MLTFCTR LRG CAP","JMSB":"JOHN MARSHALL BANCORP INC COM","JNJ":"JOHNSON & JOHNSON COM","JCI":"JOHNSON CTLS INTL PLC SHS","JYNT":"JOINT CORP COM","JLL":"JONES LANG LASALLE INC COM","YY":"JOYY INC ADS REPSTG COM A","BBCA":"JPMorgan BetaBuilders Canada ETF ","BBEU":"JPMorgan BetaBuilders Europe ETF ","AMJ":"JPMORGAN CHASE & CO ALERIAN ML ETN","JPM":"JPMORGAN CHASE & CO COM","JCPI":"JPMorgan Inflation Managed Bond ETF","JMST":"JPMorgan Ultra-Short Municipal Income ETF","JMIA":"JUMIA TECHNOLOGIES AG SPONSORED ADS","JNPR":"JUNIPER NETWORKS INC COM","KAI":"KADANT INC COM","KALU":"KAISER ALUMINUM CORP COM PAR $0.01","KLTR":"KALTURA INC COM","KALV":"KALVISTA PHARMACEUTICALS INC COM","KAMN":"KAMAN CORP COM","KNDI":"KANDI TECHNOLOGIES GROUP INC COM","BZ":"KANZHUN LIMITED SPONSORED ADS","TOON":"KARTOON STUDIOS INC. COM NEW","KRTX":"KARUNA THERAPEUTICS INC COM","KPTI":"KARYOPHARM THERAPEUTICS INC COM","KPLT":"KATAPULT HOLDINGS INC COM","KYN":"KAYNE ANDERSON ENERGY INFRSTR COM","KB":"KB FINL GROUP INC SPONSORED ADR","KBH":"KB HOME COM","KBR":"KBR INC COM","BEKE":"KE HLDGS INC SPONSORED ADS","KRNY":"KEARNY FINL CORP MD COM","K":"KELLOGG CO COM","KELYA":"KELLY SVCS INC CL A","KMT":"KENNAMETAL INC COM","KW":"KENNEDY-WILSON HOLDINGS INC COM","KEN":"KENON HLDGS LTD SHS","KVUE":"KENVUE INC COM","KROS":"KEROS THERAPEUTICS INC COM","KDP":"KEURIG DR PEPPER INC COM","KTCC":"KEY TRONIC CORP COM","KEY":"KEYCORP COM","KEYS":"KEYSIGHT TECHNOLOGIES INC COM","KZR":"KEZAR LIFE SCIENCES INC COM","KFRC":"KFORCE INC COM","KVSA":"KHOSLA VENTURES ACQUISITION CO CL A","KRC":"KILROY RLTY CORP COM","KE":"KIMBALL ELECTRONICS INC COM","KRP":"KIMBELL RTY PARTNERS LP UNIT","KMB":"KIMBERLY-CLARK CORP COM","KIM":"KIMCO RLTY CORP COM","KMI":"KINDER MORGAN INC DEL COM","KNTK":"KINETIK HOLDINGS INC COM NEW CL A","KC":"KINGSOFT CLOUD HLDGS LTD ADS","KNSA":"KINIKSA PHARMACEUTICALS LTD COM CL A","KNTE":"KINNATE BIOPHARMA INC COM","KGC":"KINROSS GOLD CORP COM","KNSL":"KINSALE CAP GROUP INC COM","KEX":"KIRBY CORP COM","KIRK":"KIRKLANDS INC COM","KRG":"KITE RLTY GROUP TR COM NEW","KKR":"KKR & CO INC COM","KREF":"KKR REAL ESTATE FIN TR INC COM","KLAC":"KLA CORP COM NEW","KLXE":"KLX ENERGY SERVICS HOLDNGS INC COM NEW","KNX":"KNIGHT-SWIFT TRANSN HLDGS INC CL A","KNOP":"KNOT OFFSHORE PARTNERS LP COM UNITS","KN":"KNOWLES CORP COM","KOD":"KODIAK SCIENCES INC COM","KSS":"KOHLS CORP COM","PHG":"KONINKLIJKE PHILIPS N V NY REGIS SHS NEW","KTB":"KONTOOR BRANDS INC COM","KOPN":"KOPIN CORP COM","KOP":"KOPPERS HOLDINGS INC COM","KEP":"KOREA ELEC PWR CORP SPONSORED ADR","KFY":"KORN FERRY COM NEW","KRNT":"KORNIT DIGITAL LTD SHS","KRMD":"KORU MEDICAL SYSTEMS INC COM","KOS":"KOSMOS ENERGY LTD COM","KHC":"KRAFT HEINZ CO COM","KCCA":"KRANESHARES TR CALIFORNIA CARB","KWEB":"KRANESHARES TR CSI CHI INTERNET","KARS":"KRANESHARES TR ELEC VEH FUTUR","KMED":"KRANESHARES TR EMERGING MKTS","KEUA":"KRANESHARES TR EUROPEAN CARBON","KRBN":"KRANESHARES TR GLOBAL CARB STRA","KTEC":"KRANESHARES TR HANG SENG TECH","BNDD":"KRANESHARES TR QUADRATIC DEFLA","IVOL":"KRANESHARES TR QUADRTC INT RT","KTOS":"KRATOS DEFENSE & SEC SOLUTIONS COM NEW","DNUT":"KRISPY KREME INC COM","KR":"KROGER CO COM","KRON":"KRONOS BIO INC COM","KRO":"KRONOS WORLDWIDE INC COM","KRYS":"KRYSTAL BIOTECH INC COM","KT":"KT CORP SPONSORED ADR","KBNT":"KUBIENT INC COM","KLIC":"KULICKE & SOFFA INDS INC COM","KULR":"KULR TECHNOLOGY GROUP INC COM","KURA":"KURA ONCOLOGY INC COM","KYMR":"KYMERA THERAPEUTICS INC COM","KD":"KYNDRYL HLDGS INC COMMON STOCK","LHX":"L3HARRIS TECHNOLOGIES INC COM","LZB":"LA Z BOY INC COM","LH":"LABORATORY CORP AMER HLDGS COM NEW","LADR":"LADDER CAP CORP CL A","LKFN":"LAKELAND FINL CORP COM","LAKE":"LAKELAND INDS INC COM","LRCX":"LAM RESEARCH CORP COM","LAMR":"LAMAR ADVERTISING CO NEW CL A","LW":"LAMB WESTON HLDGS INC COM","LE":"LANDS END INC NEW COM","LSTR":"LANDSTAR SYS INC COM","LNTH":"LANTHEUS HLDGS INC COM","LGO":"LARGO INC COM","LRMR":"LARIMAR THERAPEUTICS INC COM","LVS":"LAS VEGAS SANDS CORP COM","LTCH":"LATCH INC COM","SWIM":"LATHAM GROUP INC COM","LSCC":"LATTICE SEMICONDUCTOR CORP COM","RODM":"LATTICE STRATEGIES TR HARTFORD MLT ETF","EL":"LAUDER ESTEE COS INC CL A","LAUR":"LAUREATE EDUCATION INC COMMON STOCK","LAZ":"LAZARD LTD SHS A","LCII":"LCI INDS COM","LFLY":"LEAFLY HOLDINGS INC COM","LPTX":"LEAP THERAPEUTICS INC COM NEW","LEA":"LEAR CORP COM NEW","LZ":"LEGALZOOM COM INC COM","LEGN":"LEGEND BIOTECH CORP SPONSORED ADS","LEG":"LEGGETT & PLATT INC COM","LDOS":"LEIDOS HOLDINGS INC COM","LMAT":"LEMAITRE VASCULAR INC COM","LMND":"LEMONADE INC COM","LC":"LENDINGCLUB CORP COM NEW","TREE":"LENDINGTREE INC NEW COM","LEN":"LENNAR CORP CL A","LII":"LENNOX INTL INC COM","DRS":"LEONARDO DRS INC COM","LSAK":"LESAKA TECHNOLOGIES INC COM NEW","LESL":"LESLIES INC COM","LEVI":"LEVI STRAUSS & CO NEW CL A COM STK","LXRX":"LEXICON PHARMACEUTICALS INC COM NEW","LX":"LEXINFINTECH HLDGS LTD ADR","LPL":"LG DISPLAY CO LTD SPONS ADR REP","LGIH":"LGI HOMES INC COM","LI":"LI AUTO INC SPONSORED ADS","LICY":"LI-CYCLE HOLDINGS CORP COMMON SHARES","LBRDA":"LIBERTY BROADBAND CORP COM SER A","LBRDK":"LIBERTY BROADBAND CORP COM SER C","LBRT":"LIBERTY ENERGY INC COM CL A","LBTYA":"LIBERTY GLOBAL PLC SHS CL A","LBTYK":"LIBERTY GLOBAL PLC SHS CL C","LILAK":"LIBERTY LATIN AMERICA LTD COM CL C","LSXMA":"LIBERTY MEDIA CORP DEL COM A SIRIUSXM","LSXMK":"LIBERTY MEDIA CORP DEL COM C SIRIUSXM","FWONA":"LIBERTY MEDIA CORP DEL COM SER A FRMLA","FWONK":"LIBERTY MEDIA CORP DEL COM SER C FRMLA","LTRPA":"LIBERTY TRIPADVISOR HLDGS INC COM SER A","LTH":"LIFE TIME GROUP HOLDINGS INC COMMON STOCK","LFCR":"LIFECORE BIOMEDICAL INC COM","LFMD":"LIFEMD INC COM","LFST":"LIFESTANCE HEALTH GROUP INC COM","LFVN":"LIFEVANTAGE CORP COM NEW","LGND":"LIGAND PHARMACEUTICALS INC COM NEW","LNW":"LIGHT & WONDER INC COM","LTBR":"LIGHTBRIDGE CORP COM","ZEV":"LIGHTNING EMOTORS INC COM","LSPD":"LIGHTSPEED COMMERCE INC SUB VTG SHS","LWLG":"LIGHTWAVE LOGIC INC COM","LILM":"LILIUM N V CLASS A ORD SHS","LLY":"LILLY ELI & CO COM","LMB":"LIMBACH HLDGS INC COM","LMNL":"LIMINAL BIOSCIENCES INC COM NEW","LMNR":"LIMONEIRA CO COM","LINC":"LINCOLN EDL SVCS CORP COM","LECO":"LINCOLN ELEC HLDGS INC COM","LNC":"LINCOLN NATL CORP IND COM","LIN":"LINDE PLC SHS","LNN":"LINDSAY CORP COM","LCTX":"LINEAGE CELL THERAPEUTICS INC COM","LGHL":"LION GROUP HOLDING LTD SPON ADS","LGF.A":"LIONS GATE ENTMNT CORP CL A VTG","LGF.B":"LIONS GATE ENTMNT CORP CL B NON VTG","LPCN":"LIPOCINE INC NEW COM NEW","YVR":"LIQUID MEDIA GROUP LTD NEW COM NEW","LQDA":"LIQUIDIA CORPORATION COM NEW","LQDT":"LIQUIDITY SVCS INC COM","BAD":"LISTED FD TR B A D ETF","CCOR":"LISTED FD TR CORE ALT FD","INFL":"LISTED FD TR HORIZON KINETICS","OVLH":"LISTED FD TR OVERLAY","OVT":"LISTED FD TR OVERLAY SHS SHRT","METV":"LISTED FD TR ROUNDHILL BALL","MEME":"LISTED FD TR ROUNDHILL MEME","BETZ":"LISTED FD TR ROUNDHILL SPORTS","NERD":"LISTED FD TR ROUNDHILL VIDEO","SPRX":"LISTED FD TR SPEAR ALPHA ETF","TILL":"LISTED FD TR TEUCRIUM AGRI ST","LAD":"LITHIA MTRS INC COM","LAC":"LITHIUM AMERS CORP NEW COM NEW","DBMF":"LITMAN GREGORY FDS TR IMGP DBI MANAGED","LFUS":"LITTELFUSE INC COM","LIVN":"LIVANOVA PLC SHS","LYV":"LIVE NATION ENTERTAINMENT INC COM","LOB":"LIVE OAK BANCSHARES INC COM","LTHM":"LIVENT CORP COM","LVO":"LIVEONE INC COM","LPSN":"LIVEPERSON INC COM","RAMP":"LIVERAMP HLDGS INC COM","LVOX":"LIVEVOX HOLDING INC COM CL A","LVWR":"LIVEWIRE GROUP INC COM","LIZI":"LIZHI INC ADS","LKQ":"LKQ CORP COM","LL":"LL FLOORING HOLDINGS INC COM","LYG":"LLOYDS BANKING GROUP PLC SPONSORED ADR","LMFA":"LM FDG AMER INC COM","LDI":"LOANDEPOT INC COM CL A","LOCL":"LOCAL BOUNTI CORP COM NEW","LMT":"LOCKHEED MARTIN CORP COM","L":"LOEWS CORP COM","LGMK":"LOGICMARK INC COM NEW","LOGI":"LOGITECH INTL S A SHS","LOMA":"LOMA NEGRA C I A S A MTN 144A SPONSORED ADS","LOOP":"LOOP INDS INC COM","RIDEQ":"LORDSTOWN MOTORS CORP CL A NEW","LTRY":"LOTTERY COM INC COM","LPX":"LOUISIANA PAC CORP COM","LOVE":"LOVESAC COMPANY COM","LOW":"LOWES COS INC COM","LPLA":"LPL FINL HLDGS INC COM","LXU":"LSB INDS INC COM","LYTS":"LSI INDS INC OHIO COM","LCID":"LUCID GROUP INC COM","LHDXQ":"LUCIRA HEALTH INC COM","LU":"LUFAX HOLDING LTD ADS REP SHS CL A","LULU":"LULULEMON ATHLETICA INC COM","LVLU":"LULUS FASHION LOUNGE HOLDINGS COM","LUMN":"LUMEN TECHNOLOGIES INC COM","LITE":"LUMENTUM HLDGS INC COM","LAZR":"LUMINAR TECHNOLOGIES INC COM CL A","LUNA":"LUNA INNOVATIONS INC COM","LXFR":"LUXFER HLDGS PLC SHS","LXP":"LXP INDUSTRIAL TRUST COM","LYEL":"LYELL IMMUNOPHARMA INC COM","LYFT":"LYFT INC CL A COM","LYB":"LYONDELLBASELL INDUSTRIES N V SHS - A -","MTB":"M & T BK CORP COM","MDC":"M D C HLDGS INC COM","MHO":"M\/I HOMES INC COM","MAC":"MACERICH CO COM","MTSI":"MACOM TECH SOLUTIONS HLDGS INC COM","MGNX":"MACROGENICS INC COM","M":"MACYS INC COM","SHOO":"MADDEN STEVEN LTD COM","MSGE":"MADISON SQUARE GARDEN ENTMT COM CL A","MSGS":"MADISON SQUARE GRDN SPRT CORP CL A","MDGL":"MADRIGAL PHARMACEUTICALS INC COM","MAG":"MAG SILVER CORP COM","MMP":"MAGELLAN MIDSTREAM PRTNRS LP COM UNIT RP LP","MGTA":"MAGENTA THERAPEUTICS INC COM","MGIC":"MAGIC SOFTWARE ENTERPRISES LTD ORD","MGA":"MAGNA INTL INC COM","MX":"MAGNACHIP SEMICONDUCTOR CORP N COM","MGNI":"MAGNITE INC COM","MGY":"MAGNOLIA OIL & GAS CORP CL A","MHLD":"MAIDEN HOLDINGS LTD SHS","SECT":"Main Sector Rotation ETF","MAIN":"MAIN STR CAP CORP COM","TMAT":"Main Thematic Innovation ETF","MMYT":"MAKEMYTRIP LIMITED MAURITIUS SHS","MBUU":"MALIBU BOATS INC COM CL A","TUSK":"MAMMOTH ENERGY SVCS INC COM","TPYP":"MANAGED PORTFOLIO SERIES TORTOISE NRAM PI","MANU":"MANCHESTER UTD PLC NEW ORD CL A","MANH":"MANHATTAN ASSOCIATES INC COM","MNTX":"MANITEX INTL INC COM","MTW":"MANITOWOC CO INC COM NEW","MNKD":"MANNKIND CORP COM NEW","MAN":"MANPOWERGROUP INC WIS COM","MFC":"MANULIFE FINL CORP COM","MARA":"MARATHON DIGITAL HOLDINGS INC COM","MRO":"MARATHON OIL CORP COM","MPC":"MARATHON PETE CORP COM","MRVI":"MARAVAI LIFESCIENCES HLDGS INC COM CL A","MMI":"MARCUS & MILLICHAP INC COM","MCS":"MARCUS CORP DEL COM","MRIN":"MARIN SOFTWARE INC COM NEW","MPX":"MARINE PRODS CORP COM","HZO":"MARINEMAX INC COM","MRNS":"MARINUS PHARMACEUTICALS INC COM NEW","MKL":"MARKEL GROUP INC COM","MKTX":"MARKETAXESS HLDGS INC COM","MKFG":"MARKFORGED HOLDING CORPORATION COM","MQ":"MARQETA INC CLASS A COM","MAR":"MARRIOTT INTL INC NEW CL A","VAC":"MARRIOTT VACATIONS WORLDWIDE C COM","MMC":"MARSH & MCLENNAN COS INC COM","MRTN":"MARTEN TRANS LTD COM","MLM":"MARTIN MARIETTA MATLS INC COM","MMLP":"MARTIN MIDSTREAM PRTNRS L P UNIT L P INT","MRVL":"MARVELL TECHNOLOGY INC COM","MAS":"MASCO CORP COM","MASI":"MASIMO CORP COM","DOOR":"MASONITE INTL CORP COM","MTZ":"MASTEC INC COM","MBC":"MASTERBRAND INC COMMON STOCK","MA":"MASTERCARD INCORPORATED CL A","MTDR":"MATADOR RES CO COM","MTCH":"MATCH GROUP INC NEW COM","MTLS":"MATERIALISE NV SPONSORED ADS","SIXB":"Materials Select Sector Index S&P 500","MTRN":"MATERION CORP COM","MATV":"MATIV HOLDINGS INC COM","MTRX":"MATRIX SVC CO COM","MATX":"MATSON INC COM","MAT":"MATTEL INC COM","MTTR":"MATTERPORT INC COM CL A","MATW":"MATTHEWS INTL CORP CL A","MXCT":"MAXCYTE INC COM","MAXN":"MAXEON SOLAR TECHNOLOGIES LTD SHS","MMS":"MAXIMUS INC COM","MXL":"MAXLINEAR INC COM","MEC":"MAYVILLE ENGR CO INC COM","MBI":"MBIA INC COM","MKC":"MCCORMICK & CO INC COM NON VTG","MCD":"MCDONALDS CORP COM","MUX":"MCEWEN MNG INC COM NEW","MCK":"MCKESSON CORP COM","MDU":"MDU RES GROUP INC COM","MFIN":"MEDALLION FINL CORP COM","MDVL":"MEDAVAIL HOLDINGS INC COM","MAX":"MEDIAALPHA INC CL A","MPW":"MEDICAL PPTYS TRUST INC COM","MNOV":"MEDICINOVA INC COM NEW","MED":"MEDIFAST INC COM","MEDP":"MEDPACE HLDGS INC COM","MDT":"MEDTRONIC PLC SHS","MEIP":"MEI PHARMA INC COM","MGTX":"MEIRAGTX HLDGS PLC COM","MLCO":"MELCO RESORTS AND ENTMNT LTD ADR","MELI":"MERCADOLIBRE INC COM","MBWM":"MERCANTILE BK CORP COM","MERC":"MERCER INTL INC COM","MBIN":"MERCHANTS BANCORP IND COM","MRK":"MERCK & CO INC COM","MFH":"MERCURITY FINTECH HOLDING INC ORDINARY SHARES","MCY":"MERCURY GENL CORP NEW COM","MRCY":"MERCURY SYS INC COM","MLNK":"MERIDIANLINK INC COMMON STOCK","MMSI":"MERIT MED SYS INC COM","MTH":"MERITAGE HOMES CORP COM","MACK":"MERRIMACK PHARMACEUTICALS INC COM NEW","MRSN":"MERSANA THERAPEUTICS INC COM","MRUS":"MERUS N V COM","MESA":"MESA AIR GROUP INC COM NEW","MSB":"MESABI TR CTF BEN INT","MESO":"MESOBLAST LTD SPONS ADR","MMAT":"META MATERIALS INC COM","META":"META PLATFORMS INC CL A","MTA":"METALLA RTY & STREAMING LTD COM NEW","MEOH":"METHANEX CORP COM","MEI":"METHODE ELECTRS INC COM","MET":"METLIFE INC COM","MCBS":"METROCITY BANKSHARES INC COM","MCB":"METROPOLITAN BK HLDG CORP COM","MTD":"METTLER TOLEDO INTERNATIONAL COM","MFA":"MFA FINL INC COM","MGEE":"MGE ENERGY INC COM","MTG":"MGIC INVT CORP WIS COM","MGM":"MGM RESORTS INTERNATIONAL COM","MGPI":"MGP INGREDIENTS INC NEW COM","MCHP":"MICROCHIP TECHNOLOGY INC. COM","MU":"MICRON TECHNOLOGY INC COM","MSFT":"MICROSOFT CORP COM","MSTR":"MICROSTRATEGY INC CL A NEW","MVST":"MICROVAST HOLDINGS INC COM","MVIS":"MICROVISION INC DEL COM NEW","MPB":"MID PENN BANCORP INC COM","MAA":"MID-AMER APT CMNTYS INC COM","MFIC":"MIDCAP FINANCIAL INVSTMNT CORP COM NEW","MIDD":"MIDDLEBY CORP COM","MSBI":"MIDLAND STATES BANCORP INC COM","MOFG":"MIDWESTONE FINL GROUP INC NEW COM","MIST":"MILESTONE PHARMACEUTICALS INC COM","MLR":"MILLER INDS INC TENN COM NEW","MLKN":"MILLERKNOLL INC COM","TIGO":"MILLICOM INTL CELLULAR S A COM STK","MDXG":"MIMEDX GROUP INC COM","MNDO":"MIND C T I LTD ORD","MNMD":"MIND MEDICINE MINDMED INC COM NEW","MIND":"MIND TECHNOLOGY INC COM","MTX":"MINERALS TECHNOLOGIES INC COM","MRUT":"Mini Russell 2000 Index","XSP":"Mini-SPX","MNSO":"MINISO GROUP HLDG LTD SPONSORED ADS","MRTX":"MIRATI THERAPEUTICS INC COM","MIR":"MIRION TECHNOLOGIES INC COM CL A","MIRO":"MIROMATRIX MED INC COM","MIRM":"MIRUM PHARMACEUTICALS INC COM","AVO":"MISSION PRODUCE INC COM","MCW":"MISTER CAR WASH INC COM","MG":"MISTRAS GROUP INC COM","MITK":"MITEK SYS INC COM NEW","MUFG":"MITSUBISHI UFJ FINL GROUP INC SPONSORED ADS","MIXT":"MIX TELEMATICS LTD SPONSORED ADR","MFG":"MIZUHO FINANCIAL GROUP INC SPONSORED ADR","MKSI":"MKS INSTRS INC COM","MBLY":"MOBILEYE GLOBAL INC COMMON CLASS A","MODN":"MODEL N INC COM","MRNA":"MODERNA INC COM","MOD":"MODINE MFG CO COM","MODV":"MODIVCARE INC COM","MC":"MOELIS & CO CL A","MOGO":"MOGO INC COM","MHK":"MOHAWK INDS INC COM","MTEM":"MOLECULAR TEMPLATES INC COM","MOH":"MOLINA HEALTHCARE INC COM","TAP":"MOLSON COORS BEVERAGE CO CL B","MNTS":"MOMENTUS INC COM CL A","MCRI":"MONARCH CASINO & RESORT INC COM","MNDY":"MONDAY COM LTD SHS","MDLZ":"MONDELEZ INTL INC CL A","ML":"MONEYLION INC CL A","MDB":"MONGODB INC CL A","MPWR":"MONOLITHIC PWR SYS INC COM","MNRO":"MONRO INC COM","MRCC":"MONROE CAP CORP COM","MNST":"MONSTER BEVERAGE CORP NEW COM","MNTK":"MONTAUK RENEWABLES INC COM","MEG":"MONTROSE ENVIRONMENTAL GROUP I COM","MCO":"MOODYS CORP COM","CAF":"MORGAN STANLEY CHINA A SH FD I COM","MS":"MORGAN STANLEY COM NEW","CVIE":"MORGAN STANLEY ETF TRUST CALVERT INTERNAT","CVLC":"MORGAN STANLEY ETF TRUST CALVERT US LARCP","CDEI":"MORGAN STANLEY ETF TRUST CALVERT US LRGCP","CVSE":"MORGAN STANLEY ETF TRUST CALVERT US SEL","MORN":"MORNINGSTAR INC COM","MORF":"MORPHIC HLDG INC COM","MOS":"MOSAIC CO NEW COM","MPAA":"MOTORCAR PTS AMER INC COM","MSI":"MOTOROLA SOLUTIONS INC COM NEW","MOV":"MOVADO GROUP INC COM","MOXC":"MOXIAN BVI INC ORDINARY SHARES","MP":"MP MATERIALS CORP COM CL A","MPLX":"MPLX LP COM UNIT REP LTD","COOP":"MR COOPER GROUP INC COM","MRC":"MRC GLOBAL INC COM","MSA":"MSA SAFETY INC COM","MSM":"MSC INDL DIRECT INC CL A","MXEF":"MSCI Emerging Markets Index","MXEA":"MSCI Emerging Markets Index","MSCI":"MSCI INC COM","MLI":"MUELLER INDS INC COM","MWA":"MUELLER WTR PRODS INC COM SER A","MULN":"MULLEN AUTOMOTIVE INC COM","MPLN":"MULTIPLAN CORPORATION COM","MUR":"MURPHY OIL CORP COM","MUSA":"MURPHY USA INC COM","MVO":"MV OIL TR TR UNITS","MYE":"MYERS INDS INC COM","MYMD":"MYMD PHARMACEUTICALS INC COM","MYRG":"MYR GROUP INC DEL COM","MYGN":"MYRIAD GENETICS INC COM","MYTE":"MYT NETHERLANDS PARENT B V ADS","NABL":"N-ABLE INC COMMON STOCK","NAAS":"NAAS TECHNOLOGY INC SPONSORED ADS","NBR":"NABORS INDUSTRIES LTD SHS","NNDM":"NANO DIMENSION LTD SPONSORD ADS NEW","NNOX":"NANO X IMAGING LTD ORD SHS","NANOS":"NANOS Index","NSTG":"NANOSTRING TECHNOLOGIES INC COM","NNVC":"NANOVIRICIDES INC COM","NSSC":"NAPCO SEC TECHNOLOGIES INC COM","NDX":"NASDAQ 100 Index","NDAQ":"NASDAQ INC COM","NTRA":"NATERA INC COM","FIZZ":"NATIONAL BEVERAGE CORP COM","NBHC":"NATIONAL BK HLDGS CORP CL A","NCMI":"NATIONAL CINEMEDIA INC COM","NFG":"NATIONAL FUEL GAS CO COM","NGG":"NATIONAL GRID PLC SPONSORED ADR NE","NHC":"NATIONAL HEALTHCARE CORP COM","NATI":"NATIONAL INSTRS CORP COM","NRC":"NATIONAL RESH CORP COM NEW","NSA":"NATIONAL STORAGE AFFILIATES TR COM SHS BEN IN","EYE":"NATIONAL VISION HLDGS INC COM","NTCO":"NATURA &CO HLDG S A ADS","NGS":"NATURAL GAS SVCS GROUP INC COM","NGVC":"NATURAL GROCERS BY VITAMIN COT COM","NHTC":"NATURAL HEALTH TRENDS CORP COM","NRP":"NATURAL RESOURCE PARTNERS L P COM UNIT LTD PAR","NATR":"NATURES SUNSHINE PRODS INC COM","NWG":"NATWEST GROUP PLC SPONS ADR","NAUT":"NAUTILUS BIOTECHNOLOGY INC COM","NLS":"NAUTILUS INC COM","NAVB":"NAVIDEA BIOPHARMACEUTICALS INC COM NEW","NAVI":"NAVIENT CORPORATION COM","NVGS":"NAVIGATOR HLDGS LTD SHS","NM":"NAVIOS MARITIME HOLDINGS INC COM","NMM":"NAVIOS MARITIME PARTNERS L P COM UNIT LPI","NVTS":"NAVITAS SEMICONDUCTOR CORP COM","NBTB":"NBT BANCORP INC COM","NCNO":"NCINO INC COM","NCR":"NCR CORP NEW COM","NKTR":"NEKTAR THERAPEUTICS COM","NNI":"NELNET INC CL A","NMRD":"NEMAURA MED INC COM NEW","NGMS":"NEOGAMES S A SHS","NEOG":"NEOGEN CORP COM","NEO":"NEOGENOMICS INC COM NEW","NLTX":"NEOLEUKIN THERAPEUTICS INC COM","NEON":"NEONODE INC COM PAR","NRDS":"NERDWALLET INC COM CL A","NRDY":"NERDY INC CL A COM","NTAP":"NETAPP INC COM","NTES":"NETEASE INC SPONSORED ADS","NFLX":"NETFLIX INC COM","NTGR":"NETGEAR INC COM","NTCT":"NETSCOUT SYS INC COM","NTWK":"NETSOL TECHNOLOGIES INC COM PAR $.001","NTST":"NETSTREIT CORP COM","NBIX":"NEUROCRINE BIOSCIENCES INC COM","STIM":"NEURONETICS INC COM","NMTC":"NEUROONE MED TECHNOLOGIES CORP COM NEW","NVRO":"NEVRO CORP COM","NFE":"NEW FORTRESS ENERGY INC COM CL A","NFGC":"NEW FOUND GOLD CORP COM","NGD":"NEW GOLD INC CDA COM","NMFC":"NEW MTN FIN CORP COM","EDU":"NEW ORIENTAL ED & TECHNOLOGY G SPON ADR","NEWP":"NEW PAC METALS CORP COM","NEWR":"NEW RELIC INC COM","NYCB":"NEW YORK CMNTY BANCORP INC COM","NYT":"NEW YORK TIMES CO CL A","NEGG":"NEWEGG COMMERCE INC COMMON SHARES","NWL":"NEWELL BRANDS INC COM","NMRK":"NEWMARK GROUP INC CL A","NEU":"NEWMARKET CORP COM","NEM":"NEWMONT CORP COM","NR":"NEWPARK RES INC COM PAR $.01NEW","NWSA":"NEWS CORP NEW CL A","NWS":"NEWS CORP NEW CL B","NEWT":"NEWTEKONE INC COM NEW","NEXA":"NEXA RES S A COM","NXE":"NEXGEN ENERGY LTD COM","NXDT":"NEXPOINT DIVERSIFIED REL ET TR COM NEW","NREF":"NEXPOINT REAL ESTATE FIN INC COM","NXRT":"NEXPOINT RESIDENTIAL TR INC COM","NXST":"NEXSTAR MEDIA GROUP INC COMMON STOCK","NEXT":"NEXTDECADE CORP COM","KIND":"NEXTDOOR HOLDINGS INC COM CL A","NEE":"NEXTERA ENERGY INC COM","NEP":"NEXTERA ENERGY PARTNERS LP COM UNIT PART IN","NXGN":"NEXTGEN HEALTHCARE INC COM","NEX":"NEXTIER OILFIELD SOLUTIONS COM","NXT":"NEXTRACKER INC CLASS A COM","NGL":"NGL ENERGY PARTNERS LP COM UNIT REPST","NICE":"NICE LTD SPONSORED ADR","NHWK":"NIGHTHAWK BIOSCIENCES INC COM","NKE":"NIKE INC CL B","NKLA":"NIKOLA CORP COM","NINE":"NINE ENERGY SERVICE INC COM","NIO":"NIO INC SPON ADS","NI":"NISOURCE INC COM","NIU":"NIU TECHNOLOGIES ADS","NKTX":"NKARTA INC COM","LASR":"NLIGHT INC COM","NMIH":"NMI HLDGS INC CL A","NNBR":"NN INC COM","NNN":"NNN REIT INC COM","NOAH":"NOAH HLDGS LTD SPON ADS CL A","NE":"NOBLE CORP PLC ORD SHS A","NOK":"NOKIA CORP SPONSORED ADR","NOMD":"NOMAD FOODS LTD USD ORD SHS","NMR":"NOMURA HLDGS INC SPONSORED ADR","NDLS":"NOODLES & CO COM CL A","NAT":"NORDIC AMERICAN TANKERS LIMITE COM","NDSN":"NORDSON CORP COM","JWN":"NORDSTROM INC COM","NSC":"NORFOLK SOUTHN CORP COM","NOA":"NORTH AMERN CONSTR GROUP LTD COM","NECB":"NORTHEAST CMNTY BANCORP INC COM","NAK":"NORTHERN DYNASTY MINERALS LTD COM NEW","GDVD":"NORTHERN LTS FD TR IV R3 GBL DIVIDEND","NOG":"NORTHERN OIL & GAS INC COM","NSTB":"NORTHERN STAR INVSTMNT CORP II COM CLASS A","NTRS":"NORTHERN TR CORP COM","NFBK":"NORTHFIELD BANCORP INC DEL COM","NOC":"NORTHROP GRUMMAN CORP COM","NWN":"NORTHWEST NAT HLDG CO COM","NWPX":"NORTHWEST PIPE CO COM","NWE":"NORTHWESTERN CORP COM NEW","NCLH":"NORWEGIAN CRUISE LINE HLDG LTD SHS","NOV":"NOV INC COM","NVMI":"NOVA LTD COM","NG":"NOVAGOLD RES INC COM NEW","NOVT":"NOVANTA INC COM","NVS":"NOVARTIS AG SPONSORED ADR","NVAX":"NOVAVAX INC COM NEW","NVO":"NOVO-NORDISK A S ADR","NVCR":"NOVOCURE LTD ORD SHS","DNOW":"NOW INC COM","NRG":"NRG ENERGY INC COM NEW","NRXP":"NRX PHARMACEUTICALS INC COM","NU":"NU HLDGS LTD ORD SHS CL A","NUS":"NU SKIN ENTERPRISES INC CL A","BURU":"NUBURU INC COMMON STOCK","NUE":"NUCOR CORP COM","NRIX":"NURIX THERAPEUTICS INC COM","SMR":"NUSCALE PWR CORP CL A COM","NS":"NUSTAR ENERGY LP UNIT COM","NTNX":"NUTANIX INC CL A","NTR":"NUTRIEN LTD COM","NUVL":"NUVALENT INC COM","NUVA":"NUVASIVE INC COM","NUVB":"NUVATION BIO INC COM CL A","NAN":"NUVEEN NEW YORK QLT MUN INC FD COM","NVEI":"NUVEI CORPORATION SUB VTG SHS","NVVE":"NUVVE HOLDING CORP COM","NVEE":"NV5 GLOBAL INC COM","NVT":"NVENT ELECTRIC PLC SHS","NVDA":"NVIDIA CORPORATION COM","NXPI":"NXP SEMICONDUCTORS N V COM","NYMXF":"NYMOX PHARMACEUTICAL CORP COM","OI":"O-I GLASS INC COM","OCSL":"OAKTREE SPECIALTY LENDING CORP COM","OTLY":"OATLY GROUP AB SPONSORED ADS","OBE":"OBSIDIAN ENERGY LTD COM","OXY":"OCCIDENTAL PETE CORP COM","OPTT":"OCEAN PWR TECHNOLOGIES INC COM NEW","OII":"OCEANEERING INTL INC COM","OCFC":"OCEANFIRST FINL CORP COM","OCGN":"OCUGEN INC COM","OCUL":"OCULAR THERAPEUTIX INC COM","OCUP":"OCUPHIRE PHARMA INC COM","OCN":"OCWEN FINL CORP COM NEW","OMEX":"ODYSSEY MARINE EXPL INC COM NEW","OPAD":"OFFERPAD SOLUTIONS INC COM CL A","OPI":"OFFICE PPTYS INCOME TR COM SHS BEN INT","OFG":"OFG BANCORP COM","OFS":"OFS CAP CORP COM","OGE":"OGE ENERGY CORP COM","OIS":"OIL STS INTL INC COM","OKTA":"OKTA INC CL A","OLPX":"OLAPLEX HLDGS INC COM","ODFL":"OLD DOMINION FREIGHT LINE INC COM","ONB":"OLD NATL BANCORP IND COM","ORI":"OLD REP INTL CORP COM","OSBC":"OLD SECOND BANCORP INC ILL COM","OLMA":"OLEMA PHARMACEUTICALS INC COM","OLN":"OLIN CORP COM PAR $1","OLK":"OLINK HLDG AB SPONSORED ADS","OLLI":"OLLIES BARGAIN OUTLET HLDGS IN COM","OLO":"OLO INC CL A","ZEUS":"OLYMPIC STEEL INC COM","OHI":"OMEGA HEALTHCARE INVS INC COM","OMGA":"OMEGA THERAPEUTICS INC COMMON STOCK","OMER":"OMEROS CORP COM","OMCL":"OMNICELL COM COM","OMC":"OMNICOM GROUP INC COM","ONON":"ON HLDG AG NAMEN AKT A","ON":"ON SEMICONDUCTOR CORP COM","ONTF":"ON24 INC COM","OCX":"ONCOCYTE CORP COM NEW","ONTX":"ONCONOVA THERAPEUTICS INC COM NEW","ONCT":"ONCTERNAL THERAPEUTICS INC COM","ONDS":"ONDAS HLDGS INC COM NEW","OGS":"ONE GAS INC COM","OLP":"ONE LIBERTY PPTYS INC COM","OSS":"ONE STOP SYS INC COM","OMF":"ONEMAIN HLDGS INC COM","OKE":"ONEOK INC NEW COM","OSPN":"ONESPAN INC COM","OSW":"ONESPAWORLD HOLDINGS LIMITED COM","ONEW":"ONEWATER MARINE INC CL A COM","ONTO":"ONTO INNOVATION INC COM","OTRK":"ONTRAK INC COM","OOMA":"OOMA INC COM","OPBK":"OP BANCORP COM","OPAL":"OPAL FUELS INC CLASS A COM","LPRO":"OPEN LENDING CORP COM","OTEX":"OPEN TEXT CORP COM","OPEN":"OPENDOOR TECHNOLOGIES INC COM","KAR":"OPENLANE INC COM","OPRA":"OPERA LTD SPONSORED ADS","OPK":"OPKO HEALTH INC COM","OPRT":"OPORTUN FINL CORP COM","OPY":"OPPENHEIMER HLDGS INC CL A NON VTG","OPFI":"OPPFI INC COM CL A","OPRX":"OPTIMIZERX CORP COM NEW","OPCH":"OPTION CARE HEALTH INC COM NEW","ORCL":"ORACLE CORP COM","ORMP":"ORAMED PHARMACEUTICALS INC COM NEW","ORAN":"ORANGE SPONSORED ADR","OSUR":"ORASURE TECHNOLOGIES INC COM","OIG":"ORBITAL INFRASTRUCTURE GRP INC COM","ORC":"ORCHID IS CAP INC COM NEW","ORLY":"OREILLY AUTOMOTIVE INC COM","OGI":"ORGANIGRAM HLDGS INC COM","ORGO":"ORGANOGENESIS HLDGS INC COM","OGN":"ORGANON & CO COMMON STOCK","ONVO":"ORGANOVO HLDGS INC COM NEW","ORGS":"ORGENESIS INC COM NEW","ORIC":"ORIC PHARMACEUTICALS INC COM","OCG":"ORIENTAL CULTURE HOLDING LTD ORD SHS","OBK":"ORIGIN BANCORP INC COM","ORGN":"ORIGIN MATERIALS INC COM","OESX":"ORION ENERGY SYS INC COM","ORN":"ORION GROUP HLDGS INC COM","ONL":"ORION OFFICE REIT INC COM","OEC":"ORION S.A. COM","ORLA":"ORLA MNG LTD NEW COM","ORA":"ORMAT TECHNOLOGIES INC COM","OFIX":"ORTHOFIX MED INC COM","KIDS":"ORTHOPEDIATRICS CORP COM","OSCR":"OSCAR HEALTH INC CL A","OSK":"OSHKOSH CORP COM","OSIS":"OSI SYSTEMS INC COM","OR":"OSISKO GOLD ROYALTIES LTD COM","OTIS":"OTIS WORLDWIDE CORP COM","OTMO":"OTONOMO TECHNOLOGIES LTD ORDINARY SHARES","OTTR":"OTTER TAIL CORP COM","OUST":"OUSTER INC COM NEW","OB":"OUTBRAIN INC COM","OUT":"OUTFRONT MEDIA INC COM","OM":"OUTSET MED INC COM","OSG":"OVERSEAS SHIPHOLDING GROUP INC CL A NEW","OSTK":"OVERSTOCK COM INC DEL COM","OVID":"OVID THERAPEUTICS INC COM","OVV":"OVINTIV INC COM","OMI":"OWENS & MINOR INC NEW COM","OC":"OWENS CORNING NEW COM","OWLT":"OWLET INC CL A NEW","OXM":"OXFORD INDS INC COM","OXSQ":"OXFORD SQUARE CAP CORP COM","PX":"P10 INC COM CL A","PCAR":"PACCAR INC COM","ODDS":"PACER FDS TR BLUESTAR DIG ENT","AFTY":"PACER FDS TR CSOP FTSE CHINA","SRVR":"PACER FDS TR DATA AND INFRAST","INDS":"PACER FDS TR INDUSTRIAL RELET","ALTL":"PACER FDS TR LUNT LRG CP ALTR","PALC":"PACER FDS TR LUNT LRGCP MULTI","PTNQ":"PACER FDS TR TRENDPILOT 100","PTBD":"PACER FDS TR TRENDPILOT US BD","PTLC":"Pacer Trendpilot US Large Cap ETF","COWZ":"Pacer US Cash Cows 100 ETF","CALF":"Pacer US Small Cap Cash Cows 100 ETF","PACB":"PACIFIC BIOSCIENCES CALIF INC COM","PCRX":"PACIRA BIOSCIENCES INC COM","PKG":"PACKAGING CORP AMER COM","PTVE":"PACTIV EVERGREEN INC COM","PACW":"PACWEST BANCORP DEL COM","PGY":"PAGAYA TECHNOLOGIES LTD CL A SHS","PD":"PAGERDUTY INC COM","PAGS":"PAGSEGURO DIGITAL LTD COM CL A","PLTR":"PALANTIR TECHNOLOGIES INC CL A","PTN":"PALATIN TECHNOLOGIES INC COM NEW","PANW":"PALO ALTO NETWORKS INC COM","PLMR":"PALOMAR HLDGS INC COM","PAM":"PAMPA ENERGIA S A SPONS ADR LVL I","PAAS":"PAN AMERN SILVER CORP COM","PANL":"PANGAEA LOGISTICS SOLUTION LTD SHS","PZZA":"PAPA JOHNS INTL INC COM","PARR":"PAR PAC HOLDINGS INC COM NEW","PAR":"PAR TECHNOLOGY CORP COM","FNA":"PARAGON 28 INC COM","PARAA":"PARAMOUNT GLOBAL CLASS A COM","PARA":"PARAMOUNT GLOBAL CLASS B COM","PGRE":"PARAMOUNT GROUP INC COM","PRTK":"PARATEK PHARMACEUTICALS INC COM","PKE":"PARK AEROSPACE CORP COM","PCYG":"PARK CITY GROUP INC COM NEW","PK":"PARK HOTELS & RESORTS INC COM","PRK":"PARK NATL CORP COM","PKOH":"PARK-OHIO HLDGS CORP COM","PH":"PARKER-HANNIFIN CORP COM","PSN":"PARSONS CORP DEL COM","PASG":"PASSAGE BIO INC COM","CASH":"PATHWARD FINANCIAL INC COM","PAX":"PATRIA INVESTMENTS LIMITED COM CL A","PATK":"PATRICK INDS INC COM","PDCO":"PATTERSON COS INC COM","PTEN":"PATTERSON-UTI ENERGY INC COM","PAVM":"PAVMED INC COM","PAYX":"PAYCHEX INC COM","PAYC":"PAYCOM SOFTWARE INC COM","PYCR":"PAYCOR HCM INC COM","PCTY":"PAYLOCITY HLDG CORP COM","PAY":"PAYMENTUS HOLDINGS INC COM CL A","PAYO":"PAYONEER GLOBAL INC COM","PYPL":"PAYPAL HLDGS INC COM","PSFE":"PAYSAFE LIMITED SHS","PAYS":"PAYSIGN INC COM","PBF":"PBF ENERGY INC CL A","CNXN":"PC CONNECTION INC COM","PCB":"PCB BANCORP COM","PDCE":"PDC ENERGY INC COM","PDD":"PDD HOLDINGS INC SPONSORED ADS","PDFS":"PDF SOLUTIONS INC COM","PDSB":"PDS BIOTECHNOLOGY CORP COM","BTU":"PEABODY ENERGY CORP COM","PKST":"PEAKSTONE REALTY TRUST COMMON SHARES","PSO":"PEARSON PLC SPONSORED ADR","PEB":"PEBBLEBROOK HOTEL TR COM","MD":"PEDIATRIX MEDICAL GROUP INC COM","PEGA":"PEGASYSTEMS INC COM","PTON":"PELOTON INTERACTIVE INC CL A COM","PBA":"PEMBINA PIPELINE CORP COM","PENN":"PENN ENTERTAINMENT INC COM","PNTG":"PENNANT GROUP INC COM","PFLT":"PENNANTPARK FLOATING RATE CAP COM","PNNT":"PENNANTPARK INVT CORP COM","PRET":"PENNSYLVANIA REAL ESTATE INVT SH BEN INT","PFSI":"PENNYMAC FINL SVCS INC NEW COM","PMT":"PENNYMAC MTG INVT TR COM","PAG":"PENSKE AUTOMOTIVE GRP INC COM","PNR":"PENTAIR PLC SHS","PEN":"PENUMBRA INC COM","PEBO":"PEOPLES BANCORP INC COM","PEP":"PEPSICO INC COM","PRSO":"PERASO INC COM","PRDO":"PERDOCEO ED CORP COM","PWP":"PERELLA WEINBERG PARTNERS CLASS A COM","PRFT":"PERFICIENT INC COM","PFGC":"PERFORMANCE FOOD GROUP CO COM","PFMT":"PERFORMANT FINL CORP COM","PRM":"PERIMETER SOLUTIONS SA COMMON STOCK","PERI":"PERION NETWORK LTD SHS NEW","PPIH":"PERMA-PIPE INTL HLDGS INC COM","PBT":"PERMIAN BASIN RTY TR UNIT BEN INT","PR":"PERMIAN RESOURCES CORP CLASS A COM","PVL":"PERMIANVILLE RTY TR TR UNIT","PRGO":"PERRIGO CO PLC SHS","WOOF":"PETCO HEALTH & WELLNESS CO INC COM","PETQ":"PETIQ INC COM CL A","PETS":"PETMED EXPRESS INC COM","PBR":"PETROLEO BRASILEIRO SA PETROBR SPONSORED ADR","PFE":"PFIZER INC COM","PFSW":"PFSWEB INC COM NEW","PCG":"PG&E CORP COM","PGTI":"PGT INNOVATIONS INC COM","PMCB":"PHARMACYTE BIOTECH INC COM NEW","PHAT":"PHATHOM PHARMACEUTICALS INC COM","PHXM":"PHAXIAM THERAPEUTICS S A SPONSORED ADR","CELL":"PHENOMEX INC COM","PM":"PHILIP MORRIS INTL INC COM","PSX":"PHILLIPS 66 COM","PECO":"PHILLIPS EDISON & CO INC COMMON STOCK","FENG":"PHOENIX NEW MEDIA LTD SPONSORED ADS","PLAB":"PHOTRONICS INC COM","PHR":"PHREESIA INC COM","PHUN":"PHUNWARE INC COM","PHX":"PHX MINERALS INC CL A","DOC":"PHYSICIANS RLTY TR COM","PLL":"PIEDMONT LITHIUM INC COM","PDM":"PIEDMONT OFFICE REALTY TR INC COM CL A","PIRS":"PIERIS PHARMACEUTICALS INC COM","PPC":"PILGRIMS PRIDE CORP COM","HYS":"PIMCO ETF TR 0-5 HIGH YIELD","LTPZ":"PIMCO ETF TR 15+ YR US TIPS","ZROZ":"PIMCO ETF TR 25YR+ ZERO U S","BOND":"PIMCO ETF TR ACTIVE BD ETF","MINT":"PIMCO ETF TR ENHAN SHRT MA AC","MUNI":"PIMCO ETF TR INTER MUN BD ACT","PNFP":"PINNACLE FINL PARTNERS INC COM","PNW":"PINNACLE WEST CAP CORP COM","PINS":"PINTEREST INC CL A","PXD":"PIONEER NAT RES CO COM","PIPR":"PIPER SANDLER COMPANIES COM","PBI":"PITNEY BOWES INC COM","PXLW":"PIXELWORKS INC COM NEW","PJT":"PJT PARTNERS INC COM CL A","PAA":"PLAINS ALL AMERN PIPELINE L P UNIT LTD PARTN","PAGP":"PLAINS GP HLDGS L P LTD PARTNR INT A","PLNT":"PLANET FITNESS INC CL A","PL":"PLANET LABS PBC COM CL A","PLG":"PLATINUM GROUP METALS LTD COM","PLYA":"PLAYA HOTELS & RESORTS NV SHS","AGS":"PLAYAGS INC COM","MYPS":"PLAYSTUDIOS INC CLASS A COM","PLTK":"PLAYTIKA HLDG CORP COM","PLBY":"PLBY GROUP INC COM","PLXS":"PLEXUS CORP COM","PLRX":"PLIANT THERAPEUTICS INC COM","PLUG":"PLUG POWER INC COM NEW","PLUR":"PLURI INC COM","PLYM":"PLYMOUTH INDL REIT INC COM","PMVP":"PMV PHARMACEUTICALS INC COM","PNC":"PNC FINL SVCS GROUP INC COM","PNM":"PNM RES INC COM","MAGA":"Point Bridge America First ETF","PII":"POLARIS INC COM","PSNY":"POLESTAR AUTOMOTIVE HLDG UK ADS A","POL":"POLISHED COM INC COM","PYPD":"POLYPID LTD SHS","POOL":"POOL CORP COM","BPOP":"POPULAR INC COM NEW","PRCH":"PORCH GROUP INC COM","PTLO":"PORTILLOS INC COM CL A","POR":"PORTLAND GEN ELEC CO COM NEW","PTMN":"PORTMAN RIDGE FIN CORP COM NEW","PKX":"POSCO HOLDINGS INC SPONSORED ADR","POST":"POST HLDGS INC COM","PSTL":"POSTAL REALTY TRUST INC CL A","PBPB":"POTBELLY CORP COM","PCH":"POTLATCHDELTIC CORPORATION COM","POWL":"POWELL INDS INC COM","POWI":"POWER INTEGRATIONS INC COM","PWFL":"POWERFLEET INC COM","PWSC":"POWERSCHOOL HOLDINGS INC COM CL A","PPG":"PPG INDS INC COM","PPL":"PPL CORP COM","PRAA":"PRA GROUP INC COM","PRAX":"PRAXIS PRECISION MEDICINES INC COM","PGEN":"PRECIGEN INC COM","PRPO":"PRECIPIO INC COM","DTIL":"PRECISION BIOSCIENCES INC COM","PDS":"PRECISION DRILLING CORP COM NEW","PRLD":"PRELUDE THERAPEUTICS INC COM","PFC":"PREMIER FINANCIAL CORP COM","PINC":"PREMIER INC CL A","PBH":"PRESTIGE CONSMR HEALTHCARE INC COM","TROW":"PRICE T ROWE GROUP INC COM","PSMT":"PRICESMART INC COM","PRME":"PRIME MEDICINE INC COM","PRI":"PRIMERICA INC COM","FRST":"PRIMIS FINANCIAL CORP COM","PRMW":"PRIMO WATER CORPORATION COM","PRIM":"PRIMORIS SVCS CORP COM","YLD":"PRINCIPAL EXCHANGE TRADED FDS ACTIVE HIGH YL","USMC":"PRINCIPAL EXCHANGE TRADED FDS US MEGA CP ETF","PFG":"PRINCIPAL FINANCIAL GROUP INC COM","PRVA":"PRIVIA HEALTH GROUP INC COM","PRA":"PROASSURANCE CORP COM","PRCT":"PROCEPT BIOROBOTICS CORP COM","PCOR":"PROCORE TECHNOLOGIES INC COM","PG":"PROCTER AND GAMBLE CO COM","UFO":"PROCURE ETF TRUST II SPACE ETF","PROF":"PROFOUND MED CORP COM NEW","ACDC":"PROFRAC HLDG CORP CLASS A COM","PRG":"PROG HOLDINGS INC COM NPV","PRGS":"PROGRESS SOFTWARE CORP COM","PGR":"PROGRESSIVE CORP COM","PGNY":"PROGYNY INC COM","PROK":"PROKIDNEY CORP CLASS A ORD SHS","PLD":"PROLOGIS INC. COM","PGRU":"PROPERTYGURU GROUP LTD ORD SHS","PUMP":"PROPETRO HLDG CORP COM","PRPH":"PROPHASE LABS INC COM","PRQR":"PROQR THRAPEUTICS N V SHS EURO","PRO":"PROS HOLDINGS INC COM","OILK":"ProShares K-1 Free Crude Oil Strategy ETF","SMDV":"ProShares Russell 2000 Dividend Growers ETF","TMDV":"ProShares Russell US Dividend Growers ETF","NOBL":"ProShares S&P 500 Dividend Aristocrats ETF","TDV":"ProShares S&P Global Technology Dividend Aristocrats ETF","REGL":"ProShares S&P MidCap 400 Dividend Aristocrats ETF","SVXY":"ProShares Short VIX Short-Term Futures ETF","BITO":"PROSHARES TR BITCOIN STRATE","ZSL":"PROSHARES TR II PSHS ULSSLVR NEW","KOLD":"PROSHARES TR II ULSHT BLOOMB GAS","SCO":"PROSHARES TR II ULSHT BLOOMB OIL","UCO":"PROSHARES TR II ULTA BLMBG 2017","BOIL":"PROSHARES TR II ULTRA BLOOMBERG","UGL":"PROSHARES TR II ULTRA GOLD","AGQ":"PROSHARES TR II ULTRA SILVER NEW","YCL":"PROSHARES TR II ULTRA YEN NEW","YCS":"PROSHARES TR II ULTRASHORT YEN N","EUO":"PROSHARES TR II ULTRASHRT EURO","GLL":"PROSHARES TR II ULTRASHRT NEW","VERS":"PROSHARES TR METAVERSE ETF","EET":"PROSHARES TR MSCI EMRG ETF","QQQA":"PROSHARES TR NASDAQ100 DORSEY","OND":"PROSHARES TR ON-DEMAND ETF","ONLN":"PROSHARES TR ONLINE RTL ETF","MYY":"PROSHARES TR PSHS SH MDCAP400","EFZ":"PROSHARES TR PSHS SH MSCI EAF","EUM":"PROSHARES TR PSHS SH MSCI EMR","DOG":"PROSHARES TR PSHS SHORT DOW30","DXD":"PROSHARES TR PSHS ULDOW30 NEW","PST":"PROSHARES TR PSHS ULSHT 7-10Y","RXL":"PROSHARES TR PSHS ULT HLTHCRE","BIB":"PROSHARES TR PSHS ULT NASB","SSO":"PROSHARES TR PSHS ULT S&P 500","SAA":"PROSHARES TR PSHS ULT SCAP600","USD":"PROSHARES TR PSHS ULT SEMICDT","DDM":"PROSHARES TR PSHS ULTRA DOW30","QLD":"PROSHARES TR PSHS ULTRA QQQ","ROM":"PROSHARES TR PSHS ULTRA TECH","UPW":"PROSHARES TR PSHS ULTRA UTIL","UWM":"PROSHARES TR PSHS ULTRUSS2000","TBT":"PROSHARES TR PSHS ULTSH 20YRS","BITI":"PROSHARES TR SHORT BITCOIN","PSQ":"PROSHARES TR SHORT QQQ NEW","SH":"PROSHARES TR SHORT S&P 500 NE","TBF":"PROSHARES TR SHRT 20+YR TRE","SJB":"PROSHARES TR SHRT HGH YIELD","REK":"PROSHARES TR SHRT RL EST FD","RWM":"PROSHARES TR SHRT RUSSELL2000","SBB":"PROSHARES TR SHRT SMALLCAP60","YXI":"PROSHARES TR SHT FTSE CHIN 50","EEV":"PROSHARES TR SHT MSCI NEW","SPXN":"PROSHARES TR SP500 EX FINLS","SPXT":"PROSHARES TR SP500 EX TECH","SUPL":"PROSHARES TR SUPPLY CHAIN LOG","EZJ":"PROSHARES TR UL MSCI JP ETF","TTT":"PROSHARES TR ULSH 20YRTRE NEW","SSG":"PROSHARES TR ULSHRT SEMIC NEW","REW":"PROSHARES TR ULSHRT TECH NEW","SDP":"PROSHARES TR ULSHRT UTILS NEW","XPP":"PROSHARES TR ULT FTSE CHIN 50","BZQ":"PROSHARES TR ULT MSCI BR CAPP","URE":"PROSHARES TR ULT R\/EST NEW","SMDD":"PROSHARES TR ULTPRO SHT","SRTY":"PROSHARES TR ULTPRO SHT 2017","UST":"PROSHARES TR ULTR 7-10 TREA","SKYU":"PROSHARES TR ULTR NASDAQCMPTG","URTY":"PROSHARES TR ULTR RUSSL2000","UBT":"PROSHARES TR ULTRA 20YR TRE","LTL":"PROSHARES TR ULTRA COMMUNICTN","UCYB":"PROSHARES TR ULTRA CYBRSCURTY","DIG":"PROSHARES TR ULTRA ENERGY","UYG":"PROSHARES TR ULTRA FNCLS NEW","UYM":"PROSHARES TR ULTRA MATERIALS","TQQQ":"PROSHARES TR ULTRAPRO QQQ","SPXU":"PROSHARES TR ULTRAPRO SHORT S","SQQQ":"PROSHARES TR ULTRAPRO SHT QQQ","SZK":"PROSHARES TR ULTRASHORT CONSM","DUG":"PROSHARES TR ULTRASHORT ENRGY","SIJ":"PROSHARES TR ULTRASHORT INDL","SMN":"PROSHARES TR ULTRASHORT MATER","SDOW":"PROSHARES TR ULTRASHRT DOW 30","SDS":"PROSHARES TR ULTRASHRT S&P500","UDOW":"PROSHARES TR ULTRPRO DOW30","UPRO":"PROSHARES TR ULTRPRO S&P500","QID":"PROSHARES TR ULTSHRT QQQ","SKF":"PROSHARES TR ULTSHT FINLS NEW","FXP":"PROSHARES TR ULTSHT FT CH 50","EPV":"PROSHARES TR ULTSHT FTSE EURO","RXD":"PROSHARES TR ULTSHT HLTHCRE","MZZ":"PROSHARES TR ULTSHT MIDCAP400","EWV":"PROSHARES TR ULTSHT MSCI JAP","SRS":"PROSHARES TR ULTSHT REAL EST","TWM":"PROSHARES TR ULTSHT RUSS2000","SDD":"PROSHARES TR ULTSHT SMLCP600","BIS":"PROSHARES TR ULTST NASD NW20","UVXY":"ProShares Ultra VIX Short-Term Futures ETF","VIXM":"ProShares VIX Mid-Term Futures ETF","VIXY":"ProShares VIX Short-Term Futures ETF","PSEC":"PROSPECT CAP CORP COM","PRSR":"PROSPECTOR CAPITAL CORP CL A","PB":"PROSPERITY BANCSHARES INC COM","PTGX":"PROTAGONIST THERAPEUTICS INC COM","PLX":"PROTALIX BIOTHERAPEUTICS INC COM","TARA":"PROTARA THERAPEUTICS INC COM STK","PTRA":"PROTERRA INC COM","PRTA":"PROTHENA CORP PLC SHS","PRLB":"PROTO LABS INC COM","PVBC":"PROVIDENT BANCORP INC COM NEW","PFS":"PROVIDENT FINL SVCS INC COM","PRU":"PRUDENTIAL FINL INC COM","PSQH":"PSQ HOLDINGS INC CL A","PTC":"PTC INC COM","PTCT":"PTC THERAPEUTICS INC COM","PSA":"PUBLIC STORAGE COM","PEG":"PUBLIC SVC ENTERPRISE GRP INC COM","PUBM":"PUBMATIC INC COM CL A","LUNG":"PULMONX CORP COM","PLSE":"PULSE BIOSCIENCES INC COM","PHM":"PULTE GROUP INC COM","PBYI":"PUMA BIOTECHNOLOGY INC COM","PSTG":"PURE STORAGE INC CL A","PCT":"PURECYCLE TECHNOLOGIES INC COM","PPBT":"PURPLE BIOTECH LTD SPONSORED ADS","PRPL":"PURPLE INNOVATION INC COM","PVH":"PVH CORPORATION COM","PYR":"PYROGENESIS CDA INC COM","QTWO":"Q2 HLDGS INC COM","QGEN":"QIAGEN NV SHS NEW","QFIN":"QIFU TECHNOLOGY INC AMERICAN DEP","QRVO":"QORVO INC COM","QUAD":"QUAD \/ GRAPHICS INC COM CL A","KWR":"QUAKER HOUGHTON COM","QCOM":"QUALCOMM INC COM","QLYS":"QUALYS INC COM","NX":"QUANEX BLDG PRODS CORP COM","PWR":"QUANTA SVCS INC COM","QTRX":"QUANTERIX CORP COM","QUBT":"QUANTUM COMPUTING INC COM","QSI":"QUANTUM SI INC COM CL A","QS":"QUANTUMSCAPE CORP COM CL A","QD":"QUDIAN INC ADR","DGX":"QUEST DIAGNOSTICS INC COM","QRHC":"QUEST RESOURCE HLDG CORP COM NEW","QUIK":"QUICKLOGIC CORP COM NEW","QDEL":"QUIDELORTHO CORP COM","QNCX":"QUINCE THERAPEUTICS INC COM","QNST":"QUINSTREET INC COM","QIPT":"QUIPT HOME MEDICAL CORP COM","QUOT":"QUOTIENT TECHNOLOGY INC COM","QRTEA":"QURATE RETAIL INC COM SER A","RCM":"R1 RCM INC COM","RXT":"RACKSPACE TECHNOLOGY INC COM","RDN":"RADIAN GROUP INC COM","RLGT":"RADIANT LOGISTICS INC COM","RADI":"RADIUS GLOBAL INFRASTRCTRE INC COM CL A","RDNT":"RADNET INC COM","RDWR":"RADWARE LTD ORD","RFL":"RAFAEL HLDGS INC COM CL B","RAIN":"RAIN ONCOLOGY INC COM","RL":"RALPH LAUREN CORP CL A","METC":"RAMACO RES INC COM CL A","RMBS":"RAMBUS INC DEL COM","RRC":"RANGE RES CORP COM","RANI":"RANI THERAPEUTICS HLDGS INC COM CL A","PACK":"RANPAK HOLDINGS CORP COM CL A","RPD":"RAPID7 INC COM","RAPT":"RAPT THERAPEUTICS INC COM","FLTN":"Rareview Inflation\/Deflation ETF","RAVE":"RAVE RESTAURANT GROUP INC COM","RJF":"RAYMOND JAMES FINL INC COM","RYAM":"RAYONIER ADVANCED MATLS INC COM","RYN":"RAYONIER INC COM","RTX":"RAYTHEON TECHNOLOGIES CORP COM","RBA":"RB GLOBAL INC COM","UTWY":"RBB FD INC US TREAS 20YR BD","UTHY":"RBB FD INC US TREAS 30YR BD","XBIL":"RBB FD INC US TRSRY 6 MNTH","RBC":"RBC BEARINGS INC COM","RICK":"RCI HOSPITALITY HLDGS INC COM","RCMT":"RCM TECHNOLOGIES INC COM NEW","RMAX":"RE MAX HLDGS INC CL A","RDI":"READING INTL INC CL A","RC":"READY CAPITAL CORP COM","SIXRE":"Real Estate Select Sector Index S&P 500","O":"REALTY INCOME CORP COM","RETA":"REATA PHARMACEUTICALS INC CL A","RCON":"RECON TECHNOLOGY LTD CL A SHS","RXRX":"RECURSION PHARMACEUTICALS INC CL A","RCAT":"RED CAT HLDGS INC COM","RRGB":"RED ROBIN GOURMET BURGERS INC COM","RRR":"RED ROCK RESORTS INC CL A","RDFN":"REDFIN CORP COM","RDW":"REDWIRE CORPORATION COM","RWT":"REDWOOD TRUST INC COM","REE":"REE AUTOMOTIVE LTD CLASS A ORD SHS","REED":"REEDS INC COM NEW","RRX":"REGAL REXNORD CORPORATION COM","REG":"REGENCY CTRS CORP COM","REGN":"REGENERON PHARMACEUTICALS COM","RPHS":"Regents Park Hedged Market Strategy ETF","RGNX":"REGENXBIO INC COM","RM":"REGIONAL MGMT CORP COM","RF":"REGIONS FINANCIAL CORP NEW COM","RGLS":"REGULUS THERAPEUTICS INC COM","RGA":"REINSURANCE GRP OF AMERICA INC COM NEW","REKR":"REKOR SYSTEMS INC COM","RLAY":"RELAY THERAPEUTICS INC COM","RS":"RELIANCE STEEL & ALUMINUM CO COM","RLMD":"RELMADA THERAPEUTICS INC COM","RELX":"RELX PLC SPONSORED ADR","MARK":"REMARK HLDGS INC COM NEW","RELY":"REMITLY GLOBAL INC COM","IPOS":"RENAISSANCE CAP GREENWICH FDS INTNTL IPO ETF","IPO":"RENAISSANCE CAP GREENWICH FDS IPO ETF","RNR":"RENAISSANCERE HLDGS LTD COM","RNLX":"RENALYTIX PLC ADS","RNST":"RENASANT CORP COM","RNW":"RENEW ENERGY GLOBAL PLC CL A SHS","RENT":"RENT THE RUNWAY INC COM CL A","RTO":"RENTOKIL INITIAL PLC SPONSORED ADR","RPTX":"REPARE THERAPEUTICS INC COM","RPAY":"REPAY HLDGS CORP COM CL A","RGEN":"REPLIGEN CORP COM","REPL":"REPLIMUNE GROUP INC COM","FRBK":"REPUBLIC FIRST BANCORP INC COM","RSG":"REPUBLIC SVCS INC COM","REFR":"RESEARCH FRONTIERS INC COM","RSVR":"RESERVOIR MEDIA INC COM","HAUS":"Residential REIT ETF","REZI":"RESIDEO TECHNOLOGIES INC COM","RMD":"RESMED INC COM","RGP":"RESOURCES CONNECTION INC COM","QSR":"RESTAURANT BRANDS INTL INC COM","ROIC":"RETAIL OPPORTUNITY INVTS CORP COM","RVP":"RETRACTABLE TECHNOLOGIES INC COM","REVG":"REV GROUP INC COM","RVNC":"REVANCE THERAPEUTICS INC COM","RVPH":"REVIVA PHARMACEUTCLS HLDGS INC COM","RVMD":"REVOLUTION MEDICINES INC COM","RVLV":"REVOLVE GROUP INC CL A","RVTY":"REVVITY INC COM","RWLK":"REWALK ROBOTICS LTD SHS","REX":"REX AMERICAN RES CORP COM","REXR":"REXFORD INDL RLTY INC COM","REYN":"REYNOLDS CONSUMER PRODS INC COM","RH":"RH COM","RBBN":"RIBBON COMMUNICATIONS INC COM","RELL":"RICHARDSON ELECTRS LTD COM","RIGL":"RIGEL PHARMACEUTICALS INC COM NEW","RGTI":"RIGETTI COMPUTING INC COMMON STOCK","REPX":"RILEY EXPLORATION PERMIAN INC COM","RMNI":"RIMINI STR INC DEL COM","REI":"RING ENERGY INC COM","RNG":"RINGCENTRAL INC CL A","RIO":"RIO TINTO PLC SPONSORED ADR","RIOT":"RIOT PLATFORMS INC COM","RSKD":"RISKIFIED LTD SHS CL A","RAD":"RITE AID CORP COM","RITM":"RITHM CAPITAL CORP COM NEW","RVSB":"RIVERVIEW BANCORP INC COM","RIVN":"RIVIAN AUTOMOTIVE INC COM CL A","RLI":"RLI CORP COM","RLJ":"RLJ LODGING TR COM","RLX":"RLX TECHNOLOGY INC SPONSORED ADS","RMR":"RMR GROUP INC CL A","RHI":"ROBERT HALF INC. COM","HOOD":"ROBINHOOD MKTS INC COM CL A","RBLX":"ROBLOX CORP CL A","RKT":"ROCKET COS INC COM CL A","RKLB":"ROCKET LAB USA INC COM","RCKT":"ROCKET PHARMACEUTICALS INC COM","ROK":"ROCKWELL AUTOMATION INC COM","RMTI":"ROCKWELL MED INC COM NEW","RCI":"ROGERS COMMUNICATIONS INC CL B","ROG":"ROGERS CORP COM","ROIV":"ROIVANT SCIENCES LTD SHS","ROKU":"ROKU INC COM CL A","ROL":"ROLLINS INC COM","ROP":"ROPER TECHNOLOGIES INC COM","ROST":"ROSS STORES INC COM","WEED":"Roundhill Cannabis ETF","ROVR":"ROVER GROUP INC COM CL A","RY":"ROYAL BK CDA COM","RCL":"ROYAL CARIBBEAN GROUP COM","RGLD":"ROYAL GOLD INC COM","RPRX":"ROYALTY PHARMA PLC SHS CLASS A","RES":"RPC INC COM","RPM":"RPM INTL INC COM","RPT":"RPT REALTY SH BEN INT","RBT":"RUBICON TECHNOLOGIES INC CL A COM","RUBY":"RUBIUS THERAPEUTICS INC COM","RUM":"RUMBLE INC COM CL A","RMBL":"RUMBLEON INC COM CL B","RWAY":"RUNWAY GROWTH FINANCE CORP COM","RUSHA":"RUSH ENTERPRISES INC CL A","RSI":"RUSH STREET INTERACTIVE INC COM","RUI":"Russell 1000 Index","RLV":"Russell 1000 Value Index","RUT":"Russell 2000 Index","RVLP":"RVL PHARMACEUTICALS PLC SHS","RXO":"RXO INC COMMON STOCK","RXST":"RXSIGHT INC COM","RYAN":"RYAN SPECIALTY HOLDINGS INC CL A","RYAAY":"RYANAIR HOLDINGS PLC SPONSORED ADS","R":"RYDER SYS INC COM","RYI":"RYERSON HLDG CORP COM","RHP":"RYMAN HOSPITALITY PPTYS INC COM","RVYL":"RYVYL INC COM NEW","OEX":"S&P 100 index American-style","XEO":"S&P 100 index European-style","SPESG":"S&P 500 ESG Index","SPGI":"S&P GLOBAL INC COM","SANW":"S&W SEED CO COM","SBRA":"SABRA HEALTH CARE REIT INC COM","SABR":"SABRE CORP COM","SACH":"SACHEM CAP CORP COM","SGBX":"SAFE & GREEN HOLDINGS CORP COM NEW","SB":"SAFE BULKERS INC COM","SFE":"SAFEGUARD SCIENTIFICS INC COM NEW","SAFE":"SAFEHOLD INC COM","SAFT":"SAFETY INS GROUP INC COM","SAGE":"SAGE THERAPEUTICS INC COM","CRM":"SALESFORCE INC COM","SBH":"SALLY BEAUTY HLDGS INC COM","IOT":"SAMSARA INC COM CL A","SJT":"SAN JUAN BASIN RTY TR UNIT BEN INT","SANA":"SANA BIOTECHNOLOGY INC COM","SD":"SANDRIDGE ENERGY INC COM NEW","SAND":"SANDSTORM GOLD LTD COM NEW","JBSS":"SANFILIPPO JOHN B & SON INC COM","SGMO":"SANGAMO THERAPEUTICS INC COM","SANM":"SANMINA CORPORATION COM","SNY":"SANOFI SPONSORED ADR","SAP":"SAP SE SPON ADR","SPNS":"SAPIENS INTL CORP N V SHS","SAR":"SARATOGA INVT CORP COM NEW","SRPT":"SAREPTA THERAPEUTICS INC COM","SSL":"SASOL LTD SPONSORED ADR","SATL":"SATELLOGIC INC CLASS A ORD SHS","BFS":"SAUL CTRS INC COM","SVRA":"SAVARA INC COM","SBAC":"SBA COMMUNICATIONS CORP NEW CL A","SCSC":"SCANSOURCE INC COM","SLB":"SCHLUMBERGER LTD COM STK","SNDR":"SCHNEIDER NATIONAL INC CL B","SCHN":"SCHNITZER STEEL INDS INC CL A","SRRK":"SCHOLAR ROCK HLDG CORP COM","SCHL":"SCHOLASTIC CORP COM","SDGR":"SCHRODINGER INC COM","SCHW":"SCHWAB CHARLES CORP COM","SCHK":"SCHWAB STRATEGIC TR 1000 INDEX ETF","SCHE":"SCHWAB STRATEGIC TR EMRG MKTEQ ETF","SCHR":"SCHWAB STRATEGIC TR INT-TRM U.S TRES","SCHF":"SCHWAB STRATEGIC TR INTL EQTY ETF","SCHC":"SCHWAB STRATEGIC TR INTL SCEQT ETF","FNDX":"SCHWAB STRATEGIC TR SCHWAB FDT US LG","FNDA":"SCHWAB STRATEGIC TR SCHWAB FDT US SC","FNDE":"SCHWAB STRATEGIC TR SCHWB FDT EMK LG","FNDF":"SCHWAB STRATEGIC TR SCHWB FDT INT LG","SCHO":"SCHWAB STRATEGIC TR SHT TM US TRES","SCHZ":"SCHWAB STRATEGIC TR US AGGREGATE B","SCHB":"SCHWAB STRATEGIC TR US BRD MKT ETF","SCHD":"SCHWAB STRATEGIC TR US DIVIDEND EQ","SCHG":"SCHWAB STRATEGIC TR US LCAP GR ETF","SCHV":"SCHWAB STRATEGIC TR US LCAP VA ETF","SCHX":"SCHWAB STRATEGIC TR US LRG CAP ETF","SCHM":"SCHWAB STRATEGIC TR US MID-CAP ETF","SCHH":"SCHWAB STRATEGIC TR US REIT ETF","SCHA":"SCHWAB STRATEGIC TR US SML CAP ETF","SCHP":"SCHWAB STRATEGIC TR US TIPS ETF","SAIC":"SCIENCE APPLICATIONS INTL CORP COM","SCLX":"SCILEX HOLDING CO COM","SCPL":"SCIPLAY CORPORATION CL A","STNG":"SCORPIO TANKERS INC SHS","SMG":"SCOTTS MIRACLE-GRO CO CL A","SCPH":"SCPHARMACEUTICALS INC COM","SSP":"SCRIPPS E W CO OHIO CL A NEW","SRL":"SCULLY ROYALTY LTD COM SHS","SCU":"SCULPTOR CAP MGMT COM CL A","SCYX":"SCYNEXIS INC COM NEW","SE":"SEA LTD SPONSORD ADS","SA":"SEABRIDGE GOLD INC COM","SEAC":"SEACHANGE INTL INC COM NEW","SBCF":"SEACOAST BKG CORP FLA COM NEW","SMHI":"SEACOR MARINE HLDGS INC COM","SDRL":"SEADRILL 2021 LTD COM","STX":"SEAGATE TECHNOLOGY HLDNGS PLC ORD SHS","SGEN":"SEAGEN INC COM","SEE":"SEALED AIR CORP NEW COM","SHIP":"SEANERGY MARITIME HLDGS CORP SHS","SEAS":"SEAWORLD ENTMT INC COM","SCWX":"SECUREWORKS CORP CL A","SEEL":"SEELOS THERAPEUTICS INC COM","SEER":"SEER INC COM CL A","SEIC":"SEI INVTS CO COM","SEM":"SELECT MED HLDGS CORP COM","XLC":"SELECT SECTOR SPDR TR COMMUNICATION","XLE":"SELECT SECTOR SPDR TR ENERGY","XLF":"SELECT SECTOR SPDR TR FINANCIAL","XLRE":"SELECT SECTOR SPDR TR RL EST SEL SEC","XLY":"SELECT SECTOR SPDR TR SBI CONS DISCR","XLP":"SELECT SECTOR SPDR TR SBI CONS STPLS","XLV":"SELECT SECTOR SPDR TR SBI HEALTHCARE","XLI":"SELECT SECTOR SPDR TR SBI INT-INDS","XLU":"SELECT SECTOR SPDR TR SBI INT-UTILS","XLB":"SELECT SECTOR SPDR TR SBI MATERIALS","XLK":"SELECT SECTOR SPDR TR TECHNOLOGY","WTTR":"SELECT WATER SOLUTIONS INC CL A COM","SELB":"SELECTA BIOSCIENCES INC COM","SIGI":"SELECTIVE INS GROUP INC COM","SLQT":"SELECTQUOTE INC COM","SLS":"SELLAS LIFE SCIENCES GROUP INC COM NEW","SRE":"SEMPRA COM","SEMR":"SEMRUSH HLDGS INC CL A COM","SMTC":"SEMTECH CORP COM","ASAI":"SENDAS DISTRIBUIDORA S A SPON ADS","ST":"SENSATA TECHNOLOGIES HLDG PLC SHS","SENS":"SENSEONICS HLDGS INC COM","SXT":"SENSIENT TECHNOLOGIES CORP COM","SRTS":"SENSUS HEALTHCARE INC COM","S":"SENTINELONE INC CL A","MCRB":"SERES THERAPEUTICS INC COM","SRG":"SERITAGE GROWTH PPTYS CL A","SCI":"SERVICE CORP INTL COM","SVC":"SERVICE PPTYS TR COM SH BEN INT","NOW":"SERVICENOW INC COM","SFBS":"SERVISFIRST BANCSHARES INC COM","SES":"SES AI CORPORATION CL A COM","SEVN":"SEVEN HILLS REALTY TRUST COM","SFL":"SFL CORPORATION LTD SHS","SHAK":"SHAKE SHACK INC CL A","SHPW":"SHAPEWAYS HOLDINGS INC COM NEW","SHCR":"SHARECARE INC COM CL A","SHEL":"SHELL PLC SPON ADS","SHEN":"SHENANDOAH TELECOMMUNICATIONS COM","SHW":"SHERWIN WILLIAMS CO COM","SFT":"SHIFT TECHNOLOGIES INC CL A NEW","FOUR":"SHIFT4 PMTS INC CL A","PIXY":"SHIFTPIXY INC COM NEW","SHG":"SHINHAN FINANCIAL GROUP CO LTD SPN ADR RESTRD","SHLS":"SHOALS TECHNOLOGIES GROUP INC CL A","SWAV":"SHOCKWAVE MED INC COM","SCVL":"SHOE CARNIVAL INC COM","SHOP":"SHOPIFY INC CL A","SSTK":"SHUTTERSTOCK INC COM","SHYF":"SHYFT GROUP INC COM","SIBN":"SI-BONE INC COM","SBSW":"SIBANYE STILLWATER LTD SPONSORED ADR","SIEB":"SIEBERT FINL CORP COM","SIEN":"SIENTRA INC COM","BSRR":"SIERRA BANCORP COM","SIFY":"SIFY TECHNOLOGIES LTD SPONSORED ADS","SIGA":"SIGA TECHNOLOGIES INC COM","SGHT":"SIGHT SCIENCES INC COM","SGTX":"SIGILON THERAPEUTICS INC COM NEW","SASI":"SIGMA ADDITIVE SOLUTIONS INC COM","SGML":"SIGMA LITHIUM CORPORATION COM","SIG":"SIGNET JEWELERS LIMITED SHS","SLGN":"SILGAN HLDGS INC COM","SLAB":"SILICON LABORATORIES INC COM","SIMO":"SILICON MOTION TECHNOLOGY CORP SPONSORED ADR","SILK":"SILK RD MED INC COM","SBOW":"SILVERBOW RES INC COM","SVM":"SILVERCORP METALS INC COM","SILV":"SILVERCREST METALS INC COM","SMWB":"SIMILARWEB LTD SHS","SFNC":"SIMMONS 1ST NATL CORP CL A $1 PAR","SPG":"SIMON PPTY GROUP INC NEW COM","TUA":"SIMPLIFY EXCHANGE TRADED FUNDS SHORT TERM TREA","PFIX":"SIMPLIFY EXCHANGE TRADED FUNDS SIMPLIFY INTERST","SVOL":"SIMPLIFY EXCHANGE TRADED FUNDS VOLATILITY PREM","VCAR":"SIMPLIFY EXCHANGE TRADED FUNDS VOLT ROBOCAR DI","SMPL":"SIMPLY GOOD FOODS CO COM","SSD":"SIMPSON MFG INC COM","SLP":"SIMULATIONS PLUS INC COM","SBGI":"SINCLAIR INC CL A","OMIC":"SINGULAR GENOMICS SYSTEMS INC COM","SGLY":"SINGULARITY FUTURE TECH LTD COM NEW","SIOX":"SIO GENE THERAPIES INC COM","BLCN":"SIREN ETF TR NSD NXGN ECO ETF","SIRI":"SIRIUS XM HOLDINGS INC COM","SPNT":"SIRIUSPOINT LTD COM","SITC":"SITE CTRS CORP COM","SITE":"SITEONE LANDSCAPE SUPPLY INC COM","SITM":"SITIME CORP COM","STR":"SITIO ROYALTIES CORP CLASS A COM","SIX":"SIX FLAGS ENTMT CORP NEW COM","TSLX":"SIXTH STREET SPECIALTY LENDING COM","SKM":"SK TELECOM LTD SPONSORED ADR","SKX":"SKECHERS U S A INC CL A","SKE":"SKEENA RES LTD NEW COM","SKIL":"SKILLSOFT CORP CL A","SKLZ":"SKILLZ INC COM CL A","SKY":"SKYLINE CHAMPION CORPORATION COM","SKYT":"SKYWATER TECHNOLOGY INC COM","SKYW":"SKYWEST INC COM","SWKS":"SKYWORKS SOLUTIONS INC COM","SLG":"SL GREEN RLTY CORP COM","SNBR":"SLEEP NUMBER CORP COM","SLM":"SLM CORP COM","SLRC":"SLR INVESTMENT CORP COM","SM":"SM ENERGY CO COM","SGH":"SMART GLOBAL HLDGS INC SHS","SND":"SMART SAND INC COM","SMBK":"SMARTFINANCIAL INC COM NEW","SMAR":"SMARTSHEET INC COM CL A","SDC":"SMILEDIRECTCLUB INC CL A COM","SNN":"SMITH & NEPHEW PLC SPDN ADR NEW","SWBI":"SMITH & WESSON BRANDS INC COM","AOS":"SMITH A O CORP COM","SMSI":"SMITH MICRO SOFTWARE INC COM NEW","SJM":"SMUCKER J M CO COM NEW","SNAP":"SNAP INC CL A","SNA":"SNAP ON INC COM","SNPO":"SNAP ONE HOLDINGS CORP COM","SNDL":"SNDL INC COM","SNOW":"SNOWFLAKE INC CL A","SY":"SO YOUNG INTERNATIONAL INC SPONSORED ADS","SLAC":"SOCIAL LEVERAGE ACQUISN CORP I CL A COM","SQM":"SOCIEDAD QUIMICA Y MINERA DE SPON ADR SER B","SCTL":"SOCIETAL CDMO INC COM","SOFI":"SOFI TECHNOLOGIES INC COM","SHCO":"SOHO HOUSE & CO INC COM CL A","SOHU":"SOHU COM LTD SPONSORED ADS","SLGL":"SOL GEL TECHNOLOGIES SHS","SEDG":"SOLAREDGE TECHNOLOGIES INC COM","SOI":"SOLARIS OILFIELD INFRASTRUCTUR COM CL A","SWI":"SOLARWINDS CORP COM NEW","SLDP":"SOLID POWER INC CLASS A COM","DTC":"SOLO BRANDS INC COM CL A","SLNH":"SOLUNA HOLDINGS INC COM NEW","SLGC":"SOMALOGIC INC CLASS A COM","SOND":"SONDER HOLDINGS INC CLASS A COM","SAH":"SONIC AUTOMOTIVE INC CL A","SEVCQ":"SONO GROUP N V COM","SON":"SONOCO PRODS CO COM","SONO":"SONOS INC COM","SONY":"SONY GROUP CORP SPONSORED ADR","SOPH":"SOPHIA GENETICS SA ORDINARY SHARES","SRNEQ":"SORRENTO THERAPEUTICS INC COM NEW","SHC":"SOTERA HEALTH CO COM","SOUN":"SOUNDHOUND AI INC CLASS A COM","SSTI":"SOUNDTHINKING INC COM","SPFI":"SOUTH PLAINS FINANCIAL INC COM","SO":"SOUTHERN CO COM","SCCO":"SOUTHERN COPPER CORP COM","SFST":"SOUTHERN FIRST BANCSHARES COM","SBSI":"SOUTHSIDE BANCSHARES INC COM","SSB":"SOUTHSTATE CORPORATION COM","LUV":"SOUTHWEST AIRLS CO COM","SWN":"SOUTHWESTERN ENERGY CO COM","SOVO":"SOVOS BRANDS INC COM","SP":"SP PLUS CORP COM","LOV":"SPARK NETWORKS SE SPONSORED ADS","SPTN":"SPARTANNASH CO COM","DIA":"SPDR DOW JONES INDL AVERAGE ET UT SER 1","GLD":"SPDR GOLD TR GOLD SHS","GMF":"SPDR INDEX SHS FDS ASIA PACIF ETF","RWO":"SPDR INDEX SHS FDS DJ GLB RL ES ETF","RWX":"SPDR INDEX SHS FDS DJ INTL RL ETF","FEZ":"SPDR INDEX SHS FDS EURO STOXX 50","GNR":"SPDR INDEX SHS FDS GLB NAT RESRCE","CWI":"SPDR INDEX SHS FDS MSCI ACWI EXUS","EEMX":"SPDR INDEX SHS FDS MSCI EMR MKT ETF","QWLD":"SPDR INDEX SHS FDS MSCI WRLD STRGIC","SPDW":"SPDR INDEX SHS FDS PORTFOLIO DEVLPD","SPEM":"SPDR INDEX SHS FDS PORTFOLIO EMG MK","GXC":"SPDR INDEX SHS FDS S&P CHINA ETF","EDIV":"SPDR INDEX SHS FDS S&P EM MKT DIV","EWX":"SPDR INDEX SHS FDS S&P EMKTSC ETF","DWX":"SPDR INDEX SHS FDS S&P INTL ETF","GWX":"SPDR INDEX SHS FDS S&P INTL SMLCP","NANR":"SPDR INDEX SHS FDS S&P NORTH AMER","SPY":"SPDR S&P 500 ETF TR TR UNIT","MDY":"SPDR S&P MIDCAP 400 ETF TR UTSER1 S&PDCRP","XAR":"SPDR SER TR AEROSPACE DEF","CWB":"SPDR SER TR BBG CONV SEC ETF","TIPX":"SPDR SER TR BLOOMBERG 1 10 Y","BIL":"SPDR SER TR BLOOMBERG 1-3 MO","BILS":"SPDR SER TR BLOOMBERG 3-12 M","EBND":"SPDR SER TR BLOOMBERG EMERGI","JNK":"SPDR SER TR BLOOMBERG HIGH Y","IBND":"SPDR SER TR BLOOMBERG INTL","BWX":"SPDR SER TR BLOOMBERG INTL T","FLRN":"SPDR SER TR BLOOMBERG INVT","SJNK":"SPDR SER TR BLOOMBERG SHT TE","XSW":"SPDR SER TR COMP SOFTWARE","RWR":"SPDR SER TR DJ REIT ETF","WIP":"SPDR SER TR FTSE INT GVT ETF","XHE":"SPDR SER TR HLTH CR EQUIP","PSK":"SPDR SER TR ICE PFD SEC ETF","LQIG":"SPDR SER TR MKTAXES INVT GRD","NZUS":"SPDR SER TR MSCI USA CLIMATE","SHM":"SPDR SER TR NUVEEN BLMBRG SH","HYMB":"SPDR SER TR NUVEEN BLOOMBERG","XES":"SPDR SER TR OILGAS EQUIP","SPMB":"SPDR SER TR PORT MTG BK ETF","SPTI":"SPDR SER TR PORTFLI INTRMDIT","SPIP":"SPDR SER TR PORTFLI TIPS ETF","SPTM":"SPDR SER TR PORTFOLI S&P1500","SPAB":"SPDR SER TR PORTFOLIO AGRGTE","SPBO":"SPDR SER TR PORTFOLIO CRPORT","SPIB":"SPDR SER TR PORTFOLIO INTRMD","SPLB":"SPDR SER TR PORTFOLIO LN COR","SPTL":"SPDR SER TR PORTFOLIO LN TSR","SPMD":"SPDR SER TR PORTFOLIO S&P400","SPLG":"SPDR SER TR PORTFOLIO S&P500","SPSM":"SPDR SER TR PORTFOLIO S&P600","SPTS":"SPDR SER TR PORTFOLIO SH TSR","SPSB":"SPDR SER TR PORTFOLIO SHORT","SPYG":"SPDR SER TR PRTFLO S&P500 GW","SPYD":"SPDR SER TR PRTFLO S&P500 HI","SPYV":"SPDR SER TR PRTFLO S&P500 VL","ONEO":"SPDR SER TR RUSSELL MOMENTUM","MDYG":"SPDR SER TR S&P 400 MDCP GRW","MDYV":"SPDR SER TR S&P 400 MDCP VAL","SLYG":"SPDR SER TR S&P 600 SMCP GRW","SLYV":"SPDR SER TR S&P 600 SMCP VAL","XBI":"SPDR SER TR S&P BIOTECH","KBE":"SPDR SER TR S&P BK ETF","KCE":"SPDR SER TR S&P CAP MKTS","SDY":"SPDR SER TR S&P DIVID ETF","XHB":"SPDR SER TR S&P HOMEBUILD","KIE":"SPDR SER TR S&P INS ETF","KOMP":"SPDR SER TR S&P KENSHO NEW","XME":"SPDR SER TR S&P METALS MNG","XOP":"SPDR SER TR S&P OILGAS EXP","XPH":"SPDR SER TR S&P PHARMAC","KRE":"SPDR SER TR S&P REGL BKG","XRT":"SPDR SER TR S&P RETAIL ETF","XSD":"SPDR SER TR S&P SEMICNDCTR","XTN":"SPDR SER TR S&P TRANSN ETF","MMTM":"SPDR SER TR S&P1500MOMTILT","SPB":"SPECTRUM BRANDS HLDGS INC NEW COM","SPPI":"SPECTRUM PHARMACEUTICALS INC COM","ANY":"SPHERE 3D CORP NEW COM NEW","SPHR":"SPHERE ENTERTAINMENT CO CL A","SPI":"SPI ENERGY CO LTD SHS NEW","SPIR":"SPIRE GLOBAL INC COM CL A","SR":"SPIRE INC COM","SPR":"SPIRIT AEROSYSTEMS HLDGS INC COM CL A","SAVE":"SPIRIT AIRLS INC COM","SRC":"SPIRIT RLTY CAP INC NEW COM NEW","SBEV":"SPLASH BEVERAGE GROUP INC COM NEW","SPLK":"SPLUNK INC COM","SPOK":"SPOK HLDGS INC COM","SRAD":"SPORTRADAR GROUP AG CLASS A ORD SHS","SPWH":"SPORTSMANS WHSE HLDGS INC COM","SPOT":"SPOTIFY TECHNOLOGY S A SHS","SWTX":"SPRINGWORKS THERAPEUTICS INC COM","CXM":"SPRINKLR INC CL A","URNJ":"SPROTT FDS TR JUNIOR URANIUM","URNM":"SPROTT FDS TR URANIUM MINERS E","SII":"SPROTT INC COM NEW","SPT":"SPROUT SOCIAL INC COM CL A","SFM":"SPROUTS FMRS MKT INC COM","SPRU":"SPRUCE POWER HOLDING CORP COM CL A","SPSC":"SPS COMM INC COM","SPX":"SPX","SPXC":"SPX TECHNOLOGIES INC COM","SQSP":"SQUARESPACE INC CLASS A","SRAX":"SRAX INC COM CL A","SSNC":"SS&C TECHNOLOGIES HLDGS INC COM","SRLN":"SSGA ACTIVE ETF TR BLACKSTONE SENR","GAL":"SSGA ACTIVE ETF TR GLOBL ALLO ETF","INKM":"SSGA ACTIVE ETF TR INCOM ALLO ETF","RLY":"SSGA ACTIVE ETF TR MULT ASS RLRTN","TOTL":"SSGA ACTIVE ETF TR SPDR TR TACTIC","SSRM":"SSR MINING IN COM","JOE":"ST JOE CO COM","STAA":"STAAR SURGICAL CO COM PAR $0.01","STAG":"STAG INDL INC COM","STGW":"STAGWELL INC COM CL A","LAB":"STANDARD BIOTOOLS INC COM","SLI":"STANDARD LITHIUM LTD COM","SMP":"STANDARD MTR PRODS INC COM","SXI":"STANDEX INTL CORP COM","SWK":"STANLEY BLACK & DECKER INC COM","STN":"STANTEC INC COM","SBLK":"STAR BULK CARRIERS CORP. SHS PAR","SGU":"STAR GROUP L P UNIT LTD PARTNR","STHO":"STAR HLDGS SHS BEN INT","SBUX":"STARBUCKS CORP COM","SRT":"STARTEK INC COM","STWD":"STARWOOD PPTY TR INC COM","STT":"STATE STR CORP COM","STKH":"STEAKHOLDER FOODS LTD SPONSORED ADS","GASS":"STEALTHGAS INC SHS","STLD":"STEEL DYNAMICS INC COM","SCS":"STEELCASE INC CL A","STLA":"STELLANTIS N.V SHS","SCM":"STELLUS CAP INVT CORP COM","STEM":"STEM INC COM","SCL":"STEPAN CO COM","STEP":"STEPSTONE GROUP INC COM CL A","SRCL":"STERICYCLE INC COM","STE":"STERIS PLC SHS USD","STER":"STERLING CHECK CORP COM","STRL":"STERLING INFRASTRUCTURE INC COM","STVN":"STEVANATO GROUP S P A ORD SHS","STC":"STEWART INFORMATION SVCS CORP COM","SF":"STIFEL FINL CORP COM","SFIX":"STITCH FIX INC COM CL A","STM":"STMICROELECTRONICS N V NY REGISTRY","SYBT":"STOCK YDS BANCORP INC COM","STOK":"STOKE THERAPEUTICS INC COM","STNE":"STONECO LTD COM CL A","SRI":"STONERIDGE INC COM","SNEX":"STONEX GROUP INC COM","SSYS":"STRATASYS LTD SHS","STRA":"STRATEGIC ED INC COM","GLDB":"Strategy Shares Gold-Hedged Bond ETF","NZRO":"STRATEGY SHS HALT CLIMATE CHN","HNDL":"STRATEGY SHS NS 7HANDL IDX","LRN":"STRIDE INC COM","SDIG":"STRONGHOLD DIGITAL MINING INC CLASS A COM","SYK":"STRYKER CORPORATION COM","RGR":"STURM RUGER & CO INC COM","SPH":"SUBURBAN PROPANE PARTNERS L P UNIT LTD PARTN","SMFG":"SUMITOMO MITSUI FINL GROUP INC SPONSORED ADR","SMMF":"SUMMIT FINL GROUP INC COM","INN":"SUMMIT HOTEL PPTYS INC COM","SUM":"SUMMIT MATLS INC CL A","SMLP":"SUMMIT MIDSTREAM PARTNERS LP COM UNIT LTD","SMMT":"SUMMIT THERAPEUTICS INC COM","SUI":"SUN CMNTYS INC COM","SNCY":"SUN CTRY AIRLS HLDGS INC COM","SLF":"SUN LIFE FINANCIAL INC. COM","SXC":"SUNCOKE ENERGY INC COM","SU":"SUNCOR ENERGY INC NEW COM","SUNL":"SUNLIGHT FINANCIAL HOLDINGS COM","NOVA":"SUNNOVA ENERGY INTL INC. COM","SUN":"SUNOCO LP\/SUNOCO FIN CORP COM UT REP LP","STKL":"SUNOPTA INC COM","SPWR":"SUNPOWER CORP COM","RUN":"SUNRUN INC COM","SHO":"SUNSTONE HOTEL INVS INC NEW COM","SUNW":"SUNWORKS INC COM NEW","SGHC":"SUPER GROUP SGHC LIMITED ORD SHS","SLGG":"SUPER LEAGUE GAMING INC COM","SMCI":"SUPER MICRO COMPUTER INC COM","SUP":"SUPERIOR INDS INTL INC COM","SUPN":"SUPERNUS PHARMACEUTICALS INC COM","SURF":"SURFACE ONCOLOGY INC COM","SURG":"SURGEPAYS INC COM NEW","SGRY":"SURGERY PARTNERS INC COM","SRDX":"SURMODICS INC COM","SSSS":"SURO CAPITAL CORP COM NEW","STRO":"SUTRO BIOPHARMA INC COM","SG":"SWEETGREEN INC COM CL A","SLVM":"SYLVAMO CORP COMMON STOCK","SYM":"SYMBOTIC INC CLASS A COM","SYNA":"SYNAPTICS INC COM","SNCR":"SYNCHRONOSS TECHNOLOGIES INC COM","SYF":"SYNCHRONY FINANCIAL COM","SNDX":"SYNDAX PHARMACEUTICALS INC COM","SYNH":"SYNEOS HEALTH INC CL A","SNPS":"SYNOPSYS INC COM","SNV":"SYNOVUS FINL CORP COM NEW","SYPR":"SYPRIS SOLUTIONS INC COM","SYRS":"SYROS PHARMACEUTICALS INC COM NEW","SYY":"SYSCO CORP COM","SST":"SYSTEM1 INC CL A COM","TMUS":"T-MOBILE US INC COM","TTOO":"T2 BIOSYSTEMS INC COM NEW","TBLA":"TABOOLA.COM LTD ORD SHS","TRHC":"TABULA RASA HEALTHCARE INC COM","TSM":"TAIWAN SEMICONDUCTOR MFG LTD SPONSORED ADS","TTWO":"TAKE-TWO INTERACTIVE SOFTWARE COM","TAK":"TAKEDA PHARMACEUTICAL CO LTD SPONSORED ADS","TKAT":"TAKUNG ART LTD COM NEW","TAL":"TAL EDUCATION GROUP SPONSORED ADS","TLIS":"TALIS BIOMEDICAL CORP COM NEW","TALK":"TALKSPACE INC COM","TALO":"TALOS ENERGY INC COM","TNDM":"TANDEM DIABETES CARE INC COM NEW","SKT":"TANGER FACTORY OUTLET CTRS INC COM","TPR":"TAPESTRY INC COM","TRGP":"TARGA RES CORP COM","TGT":"TARGET CORP COM","TH":"TARGET HOSPITALITY CORP COM","TARS":"TARSUS PHARMACEUTICALS INC COM","TGB":"TASEKO MINES LTD COM","TASK":"TASKUS INC CLASS A COM","TMHC":"TAYLOR MORRISON HOME CORP COM","TRP":"TC ENERGY CORP COM","SNX":"TD SYNNEX CORPORATION COM","TDCX":"TDCX INC ADS","TEL":"TE CONNECTIVITY LTD SHS","FTI":"TECHNIPFMC PLC COM","TTGT":"TECHTARGET INC COM","TECK":"TECK RESOURCES LTD CL B","TGLS":"TECNOGLASS INC ORD SHS","TK":"TEEKAY CORPORATION COM","TNK":"TEEKAY TANKERS LTD CL A","TGNA":"TEGNA INC COM","TRC":"TEJON RANCH CO COM","TELA":"TELA BIO INC COM","TDOC":"TELADOC HEALTH INC COM","TEO":"TELECOM ARGENTINA SA SPON ADR REP B","TDY":"TELEDYNE TECHNOLOGIES INC COM","TFX":"TELEFLEX INCORPORATED COM","VIV":"TELEFONICA BRASIL SA NEW ADR","TEF":"TELEFONICA S A SPONSORED ADR","TDS":"TELEPHONE & DATA SYS INC COM NEW","TSAT":"TELESAT CORP CL A & CL B SHS","TBIO":"TELESIS BIO INC COM","TELL":"TELLURIAN INC NEW COM","TLS":"TELOS CORP MD COM","TU":"TELUS CORPORATION COM","TIXT":"TELUS INTL CDA INC SUB VTG SHS","TMPO":"TEMPO AUTOMATION HOLDINGS INC COM","TPX":"TEMPUR SEALY INTL INC COM","TENB":"TENABLE HLDGS INC COM","TS":"TENARIS S A SPONSORED ADS","TNYA":"TENAYA THERAPEUTICS INC COM","TME":"TENCENT MUSIC ENTMT GROUP SPON ADS","THC":"TENET HEALTHCARE CORP COM NEW","TNC":"TENNANT CO COM","TDC":"TERADATA CORP DEL COM","TER":"TERADYNE INC COM","WULF":"TERAWULF INC COM","TEX":"TEREX CORP NEW COM","TX":"TERNIUM SA SPONSORED ADS","TERN":"TERNS PHARMACEUTICALS INC COM","LLAP":"TERRAN ORBITAL CORPORATION COM","TRNO":"TERRENO RLTY CORP COM","TBNK":"TERRITORIAL BANCORP INC COM","TSLA":"TESLA INC COM","TTEK":"TETRA TECH INC NEW COM","TTI":"TETRA TECHNOLOGIES INC DEL COM","TAGS":"TEUCRIUM COMMODITY TR AGRICULTURE FD","CORN":"TEUCRIUM COMMODITY TR CORN FD SHS","SOYB":"TEUCRIUM COMMODITY TR SOYBEAN FD","CANE":"TEUCRIUM COMMODITY TR SUGAR FD","WEAT":"TEUCRIUM COMMODITY TR WHEAT FD","TEVA":"TEVA PHARMACEUTICAL INDS LTD SPONSORED ADS","TCBI":"TEXAS CAP BANCSHARES INC COM","TXN":"TEXAS INSTRS INC COM","TXRH":"TEXAS ROADHOUSE INC COM","TGH":"TEXTAINER GROUP HOLDINGS LTD SHS","TXT":"TEXTRON INC COM","TFII":"TFI INTL INC COM","TFSL":"TFS FINL CORP COM","TGTX":"TG THERAPEUTICS INC COM","THCH":"TH INTERNATIONAL LIMITED ORDINARY SHARES","PRNT":"The 3D Printing ETF","AAN":"THE AARONS COMPANY INC COM","AREN":"THE ARENA GROUP HOLDINGS INC COM","BODY":"THE BEACHBODY COMPANY INC COM CL A","SKIN":"THE BEAUTY HEALTH COMPANY COM CL A","CI":"THE CIGNA GROUP COM","LEV":"THE LION ELECTRIC COMPANY COMMON STOCK","RTL":"THE NECESSITY RETAIL REIT INC COM CLASS A","ODP":"THE ODP CORP COM","STKS":"THE ONE GROUP HOSPITALITY INC COM","REAX":"THE REAL BROKERAGE INC COM NEW","REAL":"THE REALREAL INC COM","TTD":"THE TRADE DESK INC COM CL A","NCTY":"THE9 LTD SPON ADS NEW","TXMD":"THERAPEUTICSMD INC COM NEW","THTX":"THERATECHNOLOGIES INC COM","TBPH":"THERAVANCE BIOPHARMA INC COM","TMO":"THERMO FISHER SCIENTIFIC INC COM","TRI":"THOMSON REUTERS CORP. COM","THO":"THOR INDS INC COM","TWKS":"THOUGHTWORKS HOLDING INC COM","TDUP":"THREDUP INC CL A","THRY":"THRYV HLDGS INC COM NEW","PP":"TIDAL ETF TR II THE MEET KEVIN","CPII":"TIDAL ETF TR IONIC INFLATION","AHOY":"TIDAL ETF TR NEWDAY OCN HEALT","RPAR":"TIDAL ETF TR RPAR RISK PARI","HFND":"TIDAL ETF TR UNLIMITED HFND","UPAR":"TIDAL ETF TR UPAR ULTRA RISK","CHAT":"TIDAL TR II ROUNDHILL GENER","TDW":"TIDEWATER INC NEW COM","TTSH":"TILE SHOP HLDGS INC COM","TLYS":"TILLYS INC CL A","TLRY":"TILRAY BRANDS INC COM","TIMB":"TIM S A SPONSORED ADR","TKR":"TIMKEN CO COM","TMST":"TIMKENSTEEL CORPORATION COM","TIO":"TINGO GROUP INC COM","TIPT":"TIPTREE INC COM","TWI":"TITAN INTL INC ILL COM","TITN":"TITAN MACHY INC COM","TJX":"TJX COS INC NEW COM","TMC":"TMC THE METALS COMPANY INC COM","TOST":"TOAST INC CL A","TOL":"TOLL BROTHERS INC COM","TR":"TOOTSIE ROLL INDS INC COM","BLD":"TOPBUILD CORP COM","MODG":"TOPGOLF CALLAWAY BRANDS CORP COM","TRMD":"TORM PLC SHS CL A","TTC":"TORO CO COM","TD":"TORONTO DOMINION BK ONT COM NEW","CURV":"TORRID HLDGS INC COM","TTE":"TOTALENERGIES SE SPONSORED ADS","TSEM":"TOWER SEMICONDUCTOR LTD SHS NEW","TSQ":"TOWNSQUARE MEDIA INC CL A","TM":"TOYOTA MOTOR CORP ADS","TPG":"TPG INC COM CL A","TRTX":"TPG RE FIN TR INC COM","TPIC":"TPI COMPOSITES INC COM","TSCO":"TRACTOR SUPPLY CO COM","TW":"TRADEWEB MKTS INC CL A","COOK":"TRAEGER INC COMMON STOCK","TT":"TRANE TECHNOLOGIES PLC SHS","TACT":"TRANSACT TECHNOLOGIES INC COM","TAC":"TRANSALTA CORP COM","TDG":"TRANSDIGM GROUP INC COM","TMDX":"TRANSMEDICS GROUP INC COM","RIG":"TRANSOCEAN LTD REG SHS","TRU":"TRANSUNION COM","TNL":"TRAVEL PLUS LEISURE CO COM","TRV":"TRAVELERS COMPANIES INC COM","TVTX":"TRAVERE THERAPEUTICS INC COM","TG":"TREDEGAR CORP COM","THS":"TREEHOUSE FOODS INC COM","TRMR":"TREMOR INTL LTD ADS","TRVN":"TREVENA INC COM NEW","TREX":"TREX CO INC COM","TPH":"TRI POINTE HOMES INC COM","TCBK":"TRICO BANCSHARES COM","TCN":"TRICON RESIDENTIAL INC COM NPV","TMQ":"TRILOGY METALS INC NEW COM","TRS":"TRIMAS CORP COM NEW","TRMB":"TRIMBLE INC COM","TNET":"TRINET GROUP INC COM","TRIB":"TRINITY BIOTECH PLC SPON ADR NEW","TRIN":"TRINITY CAP INC COM","TRN":"TRINITY INDS INC COM","TSE":"TRINSEO PLC SHS","TCOM":"TRIP COM GROUP LTD ADS","TRIP":"TRIPADVISOR INC COM","TPVG":"TRIPLEPOINT VENTURE GROWTH BDC COM","DCFC":"TRITIUM DCFC LIMITED ORDINARY SHARES","TRTN":"TRITON INTL LTD CL A","TFIN":"TRIUMPH FINANCIAL INC COM","TGI":"TRIUMPH GROUP INC NEW COM","TRVG":"TRIVAGO N V SPON ADS A SHS","TROX":"TRONOX HOLDINGS PLC SHS","TROO":"TROOPS INC SHS","TBI":"TRUEBLUE INC COM","TRUE":"TRUECAR INC COM","TFC":"TRUIST FINL CORP COM","TRUP":"TRUPANION INC COM","SPC":"TRUST FOR PROFESSIONAL MANAGER CROSSINGBRDG PRE","TRST":"TRUSTCO BK CORP N Y COM NEW","TRMK":"TRUSTMARK CORP COM","TRX":"TRX GOLD CORPORATION COM","TNP":"TSAKOS ENERGY NAVIGATION LTD SHS","TTEC":"TTEC HLDGS INC COM","TTMI":"TTM TECHNOLOGIES INC COM","TCX":"TUCOWS INC COM NEW","TOUR":"TUNIU CORP SPONSORED ADS","TUP":"TUPPERWARE BRANDS CORP COM","TKC":"TURKCELL ILETISIM HIZMETLERI SPON ADR NEW","TPB":"TURNING PT BRANDS INC COM","HEAR":"TURTLE BEACH CORP COM NEW","TSP":"TUSIMPLE HLDGS INC CL A","TPC":"TUTOR PERINI CORP COM","TUYA":"TUYA INC SPONSERED ADS","TWLO":"TWILIO INC CL A","TWIN":"TWIN DISC INC COM","TWST":"TWIST BIOSCIENCE CORP COM","TWO":"TWO HBRS INVT CORP COM","TYL":"TYLER TECHNOLOGIES INC COM","TYRA":"TYRA BIOSCIENCES INC COM","TSN":"TYSON FOODS INC CL A","UHAL":"U HAUL HOLDING COMPANY COM","UCAR":"U POWER LTD SHS","GROW":"U S GLOBAL INVS INC CL A","USAU":"U S GOLD CORP COM NEW","USPH":"U S PHYSICAL THERAPY COM","SLCA":"U S SILICA HLDGS INC COM","UBER":"UBER TECHNOLOGIES INC COM","UI":"UBIQUITI INC COM","UBS":"UBS GROUP AG SHS","UDMY":"UDEMY INC COM","UDR":"UDR INC COM","UFPI":"UFP INDUSTRIES INC COM","UFPT":"UFP TECHNOLOGIES INC COM","UGI":"UGI CORP NEW COM","PATH":"UIPATH INC CL A","ULTA":"ULTA BEAUTY INC COM","UCTT":"ULTRA CLEAN HLDGS INC COM","RARE":"ULTRAGENYX PHARMACEUTICAL INC COM","UGP":"ULTRAPAR PARTICIPACOES SA SP ADR REP COM","UMBF":"UMB FINL CORP COM","UMH":"UMH PPTYS INC COM","UAA":"UNDER ARMOUR INC CL A","UA":"UNDER ARMOUR INC CL C","UFI":"UNIFI INC COM NEW","NIWM":"UNIFIED SER TR NIGHTSHARES 2000","NSPY":"UNIFIED SER TR NIGHTSHARES 500","OACP":"UNIFIED SER TR ONEASCENT CORE P","UL":"UNILEVER PLC SPON ADR NEW","UNP":"UNION PAC CORP COM","QURE":"UNIQURE NV SHS","UIS":"UNISYS CORP COM NEW","UAL":"UNITED AIRLS HLDGS INC COM","UFCS":"UNITED FIRE GROUP INC COM","UIHC":"UNITED INS HLDGS CORP COM","UMC":"UNITED MICROELECTRONICS CORP SPON ADR NEW","UNFI":"UNITED NAT FOODS INC COM","UPS":"UNITED PARCEL SERVICE INC CL B","URI":"UNITED RENTALS INC COM","UAMY":"UNITED STATES ANTIMONY CORP COM","USM":"UNITED STATES CELLULAR CORP COM","X":"UNITED STATES STL CORP NEW COM","UNL":"UNITED STS 12 MONTH NAT GAS FD UNIT BEN INT","USL":"UNITED STS 12 MONTH OIL FD LP UNIT BEN INT","BNO":"UNITED STS BRENT OIL FD LP UNIT","CPER":"UNITED STS COMMODITY INDEX FD CM REP COPP FD","USCI":"UNITED STS COMMODITY INDEX FD COMM IDX FND","UGA":"UNITED STS GASOLINE FD LP UNITS","UNG":"UNITED STS NAT GAS FD LP UNIT PAR","USO":"UNITED STS OIL FD LP UNITS","UTHR":"UNITED THERAPEUTICS CORP DEL COM","UNH":"UNITEDHEALTH GROUP INC COM","UNIT":"UNITI GROUP INC COM","UNTY":"UNITY BANCORP INC COM","U":"UNITY SOFTWARE INC COM","UNVR":"UNIVAR SOLUTIONS INC COM","UVV":"UNIVERSAL CORP VA COM","OLED":"UNIVERSAL DISPLAY CORP COM","UEIC":"UNIVERSAL ELECTRS INC COM","UHT":"UNIVERSAL HEALTH RLTY INCOME T SH BEN INT","UHS":"UNIVERSAL HLTH SVCS INC CL B","UVE":"UNIVERSAL INS HLDGS INC COM","UTI":"UNIVERSAL TECHNICAL INST INC COM","UVSP":"UNIVEST FINANCIAL CORPORATION COM","UNM":"UNUM GROUP COM","TIGR":"UP FINTECH HLDG LTD SPONSORED ADS","UPBD":"UPBOUND GROUP INC COM","UPXI":"UPEXI INC COM","UPH":"UPHEALTH INC COM NEW","UPLD":"UPLAND SOFTWARE INC COM","UPST":"UPSTART HLDGS INC COM","UPWK":"UPWORK INC COM","UEC":"URANIUM ENERGY CORP COM","UROY":"URANIUM RTY CORP COM","UE":"URBAN EDGE PPTYS COM","UONE":"URBAN ONE INC CL A","URBN":"URBAN OUTFITTERS INC COM","URGN":"UROGEN PHARMA LTD COM","USB":"US BANCORP DEL COM NEW","USFD":"US FOODS HLDG CORP COM","USAC":"USA COMPRESSION PARTNERS LP COMUNIT LTDPAR","USNA":"USANA HEALTH SCIENCES INC COM","SIXU":"Utilities Select Sector Index S&P 500","UTZ":"UTZ BRANDS INC COM CL A","UWMC":"UWM HOLDINGS CORPORATION COM CL A","UXIN":"UXIN LTD SPON ADS NEW","VFC":"V F CORP COM","VVX":"V2X INC COM","EGY":"VAALCO ENERGY INC COM NEW","VCSA":"VACASA INC CLASS A COM","VCNX":"VACCINEX INC COM","MTN":"VAIL RESORTS INC COM","VAL":"VALARIS LIMITED CL A","VALE":"VALE S A SPONSORED ADS","VLN":"VALENS SEMICONDUCTOR LTD ORDINARY SHARES","VLO":"VALERO ENERGY CORP COM","WGMI":"VALKYRIE ETF TRUST II BITCOIN MINERS","BTF":"VALKYRIE ETF TRUST II BITCOIN STRATEGY","VLY":"VALLEY NATL BANCORP COM","VMI":"VALMONT INDS INC COM","VVV":"VALVOLINE INC COM","VNDA":"VANDA PHARMACEUTICALS INC COM","XBTF":"VanEck Bitcoin Strategy ETF","MOO":"VANECK ETF TRUST AGRIBUSINESS ETF","BIZD":"VANECK ETF TRUST BDC INCOME ETF","BBH":"VANECK ETF TRUST BIOTECH ETF","BRF":"VANECK ETF TRUST BRAZIL SMALL CAP","GLCN":"VANECK ETF TRUST CHINA GROWTH LDR","CNXT":"VANECK ETF TRUST CHINEXT ETF","DAPP":"VANECK ETF TRUST DIGI TRANSFRM","EINC":"VANECK ETF TRUST ENERGY INCME ET","ANGL":"VANECK ETF TRUST FALLEN ANGEL HG","BJK":"VANECK ETF TRUST GAMING ETF","GDX":"VANECK ETF TRUST GOLD MINERS ETF","RAAX":"VANECK ETF TRUST INFLATION ALLOCA","IHY":"VANECK ETF TRUST INTERNATIONAL HI","ISRA":"VANECK ETF TRUST ISRAEL ETF","EMLC":"VANECK ETF TRUST JP MRGAN EM LOC","GDXJ":"VANECK ETF TRUST JUNIOR GOLD MINE","SMOG":"VANECK ETF TRUST LOW CARBN ENERGY","MORT":"VANECK ETF TRUST MORTGAGE REIT","CRAK":"VANECK ETF TRUST OIL REFINERS ETF","OIH":"VANECK ETF TRUST OIL SERVICES ETF","PPH":"VANECK ETF TRUST PHARMACEUTCL ETF","PFXF":"VANECK ETF TRUST PREFERRED SECURT","REMX":"VANECK ETF TRUST RARE EARTH\/STRTG","RTH":"VANECK ETF TRUST RETAIL ETF","SMH":"VANECK ETF TRUST SEMICONDUCTR ETF","BUZZ":"VANECK ETF TRUST SOCIAL SENTIMENT","SLX":"VANECK ETF TRUST STEEL ETF","ESPO":"VANECK ETF TRUST VIDEO GMNG ESPRT","HYD":"VanEck High Yield Muni ETF","MLN":"VanEck Long Muni ETF","OUNZ":"VANECK MERK GOLD TR GOLD TRUST","SMOT":"VanEck Morningstar SMID Moat ETF","MOAT":"VanEck Morningstar Wide Moat ETF","SMB":"VanEck Short Muni ETF","VOOG":"VANGUARD ADMIRAL FDS INC 500 GRTH IDX F","VOOV":"VANGUARD ADMIRAL FDS INC 500 VAL IDX FD","BIV":"VANGUARD BD INDEX FDS INTERMED TERM","BLV":"VANGUARD BD INDEX FDS LONG TERM BOND","BSV":"VANGUARD BD INDEX FDS SHORT TRM BOND","BND":"VANGUARD BD INDEX FDS TOTAL BND MRKT","BNDX":"VANGUARD CHARLOTTE FDS TOTAL INT BD ETF","VXF":"VANGUARD INDEX FDS EXTEND MKT ETF","VUG":"VANGUARD INDEX FDS GROWTH ETF","VV":"VANGUARD INDEX FDS LARGE CAP ETF","VOT":"VANGUARD INDEX FDS MCAP GR IDXVIP","VOE":"VANGUARD INDEX FDS MCAP VL IDXVIP","VO":"VANGUARD INDEX FDS MID CAP ETF","VNQ":"VANGUARD INDEX FDS REAL ESTATE ETF","VOO":"VANGUARD INDEX FDS S&P 500 ETF SHS","VBR":"VANGUARD INDEX FDS SM CP VAL ETF","VB":"VANGUARD INDEX FDS SMALL CP ETF","VBK":"VANGUARD INDEX FDS SML CP GRW ETF","VTI":"VANGUARD INDEX FDS TOTAL STK MKT","VTV":"VANGUARD INDEX FDS VALUE ETF","VEU":"VANGUARD INTL EQUITY INDEX FDS ALLWRLD EX US","VWO":"VANGUARD INTL EQUITY INDEX FDS FTSE EMR MKT ETF","VGK":"VANGUARD INTL EQUITY INDEX FDS FTSE EUROPE ETF","VPL":"VANGUARD INTL EQUITY INDEX FDS FTSE PACIFIC ETF","VSS":"VANGUARD INTL EQUITY INDEX FDS FTSE SMCAP ETF","VNQI":"VANGUARD INTL EQUITY INDEX FDS GLB EX US ETF","VT":"VANGUARD INTL EQUITY INDEX FDS TT WRLD ST ETF","VTIP":"VANGUARD MALVERN FDS STRM INFPROIDX","VTEB":"VANGUARD MUN BD FDS TAX EXEMPT BD","VCIT":"VANGUARD SCOTTSDALE FDS INT-TERM CORP","VGIT":"VANGUARD SCOTTSDALE FDS INTER TERM TREAS","VCLT":"VANGUARD SCOTTSDALE FDS LG-TERM COR BD","VGLT":"VANGUARD SCOTTSDALE FDS LONG TERM TREAS","VMBS":"VANGUARD SCOTTSDALE FDS MTG-BKD SECS ETF","VGSH":"VANGUARD SCOTTSDALE FDS SHORT TERM TREAS","VCSH":"VANGUARD SCOTTSDALE FDS SHRT TRM CORP BD","VTC":"VANGUARD SCOTTSDALE FDS TOTAL CORP BND","VONE":"VANGUARD SCOTTSDALE FDS VNG RUS1000IDX","VTWG":"VANGUARD SCOTTSDALE FDS VNG RUS2000GRW","VTWO":"VANGUARD SCOTTSDALE FDS VNG RUS2000IDX","VIG":"VANGUARD SPECIALIZED FUNDS DIV APP ETF","VXUS":"VANGUARD STAR FDS VG TL INTL STK F","VEA":"VANGUARD TAX-MANAGED FDS VAN FTSE DEV MKT","VFMO":"Vanguard U.S. Momentum Factor ETF","VFMF":"Vanguard U.S. Multifactor ETF","VFQY":"Vanguard U.S. Quality Factor ETF","VWOB":"VANGUARD WHITEHALL FDS EM MK GOV BD ETF","VYM":"VANGUARD WHITEHALL FDS HIGH DIV YLD","VIGI":"VANGUARD WHITEHALL FDS INTL DVD ETF","VYMI":"VANGUARD WHITEHALL FDS INTL HIGH ETF","EDV":"VANGUARD WORLD FD EXTENDED DUR","MGC":"VANGUARD WORLD FD MEGA CAP INDEX","MGV":"VANGUARD WORLD FD MEGA CAP VAL ETF","MGK":"VANGUARD WORLD FD MEGA GRWTH IND","VOX":"VANGUARD WORLD FDS COMM SRVC ETF","VCR":"VANGUARD WORLD FDS CONSUM DIS ETF","VDC":"VANGUARD WORLD FDS CONSUM STP ETF","VDE":"VANGUARD WORLD FDS ENERGY ETF","VFH":"VANGUARD WORLD FDS FINANCIALS ETF","VHT":"VANGUARD WORLD FDS HEALTH CAR ETF","VIS":"VANGUARD WORLD FDS INDUSTRIAL ETF","VGT":"VANGUARD WORLD FDS INF TECH ETF","VAW":"VANGUARD WORLD FDS MATERIALS ETF","VPU":"VANGUARD WORLD FDS UTILITIES ETF","VAPO":"VAPOTHERM INC COM","VREX":"VAREX IMAGING CORP COM","VRNS":"VARONIS SYS INC COM","VBLT":"VASCULAR BIOGENICS LTD COM","VXRT":"VAXART INC COM NEW","PCVX":"VAXCYTE INC COM","VBIV":"VBI VACCINES INC CDA COM NEW","VGR":"VECTOR GROUP LTD COM","VECO":"VEECO INSTRS INC DEL COM","VEEV":"VEEVA SYS INC CL A COM","VLD":"VELO3D INC COMMON STOCK","VEL":"VELOCITY FINL INC COM","VNTRQ":"VENATOR MATLS PLC SHS","VTR":"VENTAS INC COM","VRA":"VERA BRADLEY INC COM","VERA":"VERA THERAPEUTICS INC CL A","VCYT":"VERACYTE INC COM","MDRX":"VERADIGM INC COM","VSTM":"VERASTEM INC COM NEW","VCEL":"VERICEL CORP COM","VRNT":"VERINT SYS INC COM","VRE":"VERIS RESIDENTIAL INC COM","VRSN":"VERISIGN INC COM","VRSK":"VERISK ANALYTICS INC COM","VRTV":"VERITIV CORP COM","VERI":"VERITONE INC COM","VZ":"VERIZON COMMUNICATIONS INC COM","VET":"VERMILION ENERGY INC COM","VRNA":"VERONA PHARMA PLC SPONSORED ADS","VRRM":"VERRA MOBILITY CORP CL A COM STK","VRCA":"VERRICA PHARMACEUTICALS INC COM","VTNR":"VERTEX ENERGY INC COM","VRTX":"VERTEX PHARMACEUTICALS INC COM","EVTL":"VERTICAL AEROSPACE LTD ORD SHS","VRT":"VERTIV HOLDINGS CO COM CL A","VERU":"VERU INC COM","VERV":"VERVE THERAPEUTICS INC COM","VIA":"VIA RENEWABLES INC CL A COM NEW","VVI":"VIAD CORP COM","DSP":"VIANT TECHNOLOGY INC COM CL A","VSAT":"VIASAT INC COM","VTRS":"VIATRIS INC COM","VIAV":"VIAVI SOLUTIONS INC COM","RBOT":"VICARIOUS SURGICAL INC COM CL A","VICI":"VICI PPTYS INC COM","VICR":"VICOR CORP COM","VSCO":"VICTORIAS SECRET AND CO COMMON STOCK","VCTR":"VICTORY CAP HLDGS INC COM CL A","CFO":"VICTORY PORTFOLIOS II VCSHS US 500 ENH","CFA":"VICTORY PORTFOLIOS II VCSHS US 500 VOL","CDC":"VICTORY PORTFOLIOS II VCSHS US EQ INCM","CSB":"VICTORY PORTFOLIOS II VCSHS US SMCP HG","VSDA":"VICTORY PORTFOLIOS II VICSHS DV AC ETF","VIEW":"VIEW INC COM CL A","VKTX":"VIKING THERAPEUTICS INC COM","VFF":"VILLAGE FARMS INTL INC COM","VMEO":"VIMEO INC COMMON STOCK","BBIG":"VINCO VENTURES INC COM","VWE":"VINTAGE WINE ESTATES INC COM","VNOM":"VIPER ENERGY PARTNERS LP COM UNT RP INT","VIPS":"VIPSHOP HLDGS LTD SPONSORED ADS A","VQS":"VIQ SOLUTIONS INC COM NEW","VIR":"VIR BIOTECHNOLOGY INC COM","VIRX":"VIRACTA THERAPEUTICS INC COM","SPCE":"VIRGIN GALACTIC HOLDINGS INC COM","VRDN":"VIRIDIAN THERAPEUTICS INC COM","VHC":"VIRNETX HLDG CORP COM","VTSI":"VIRTRA INC COM PAR","VIRT":"VIRTU FINL INC CL A","V":"VISA INC COM CL A","VSH":"VISHAY INTERTECHNOLOGY INC COM","VPG":"VISHAY PRECISION GROUP INC COM","VISL":"VISLINK TECHNOLOGIES INC COM NEW","VIST":"VISTA ENERGY S.A.B. DE C.V. SPONSORED ADS","VGZ":"VISTA GOLD CORP COM NEW","VSTO":"VISTA OUTDOOR INC COM","VTGN":"VISTAGEN THERAPEUTICS INC COM","VC":"VISTEON CORP COM NEW","VST":"VISTRA CORP COM","COCO":"VITA COCO CO INC COM","VTLE":"VITAL ENERGY INC COM","VITL":"VITAL FARMS INC COM","VANI":"VIVANI MEDICAL INC COMMON STOCK","SEAT":"VIVID SEATS INC COM CL A","VVPR":"VIVOPOWER INTERNATIONAL PLC SHS","VVOS":"VIVOS THERAPEUTICS INC COM","VZIO":"VIZIO HLDG CORP CL A COM","VNET":"VNET GROUP INC SPONSORED ADS A","VOC":"VOC ENERGY TR TR UNIT","VOD":"VODAFONE GROUP PLC NEW SPONSORED ADR","VNRX":"VOLITIONRX LTD COM","VNT":"VONTIER CORPORATION COM","VOR":"VOR BIOPHARMA INC COM","VNO":"VORNADO RLTY TR SH BEN INT","VOXX":"VOXX INTL CORP CL A","VOYA":"VOYA FINANCIAL INC COM","VYGR":"VOYAGER THERAPEUTICS INC COM","VRM":"VROOM INC COM","VTEX":"VTEX SHS CL A","VMC":"VULCAN MATLS CO COM","VUZI":"VUZIX CORP COM NEW","WTI":"W & T OFFSHORE INC COM","WNC":"WABASH NATL CORP COM","WAB":"WABTEC COM","WBA":"WALGREENS BOOTS ALLIANCE INC COM","WD":"WALKER & DUNLOP INC COM","WKME":"WALKME LTD ORD SHS","WBX":"WALLBOX NV SHS CL A","WMT":"WALMART INC COM","WRBY":"WARBY PARKER INC CL A COM","WBD":"WARNER BROS DISCOVERY INC COM SER A","WMG":"WARNER MUSIC GROUP CORP COM CL A","HCC":"WARRIOR MET COAL INC COM","WAFD":"WASHINGTON FED INC COM","WASH":"WASHINGTON TR BANCORP INC COM","WCN":"WASTE CONNECTIONS INC COM","WM":"WASTE MGMT INC DEL COM","WAT":"WATERS CORP COM","WSBF":"WATERSTONE FINL INC MD COM","WSO":"WATSCO INC COM","WTS":"WATTS WATER TECHNOLOGIES INC CL A","WVE":"WAVE LIFE SCIENCES LTD SHS","W":"WAYFAIR INC CL A","WDFC":"WD 40 CO COM","WFRD":"WEATHERFORD INTL PLC ORD SHS","WEAV":"WEAVE COMMUNICATIONS INC COM","WBS":"WEBSTER FINL CORP COM","WEC":"WEC ENERGY GROUP INC COM","WB":"WEIBO CORP SPONSORED ADR","WEJOQ":"WEJO GROUP LIMITED COMMON SHARES","WFC":"WELLS FARGO CO NEW COM","WELL":"WELLTOWER INC COM","WEN":"WENDYS CO COM","HOWL":"WEREWOLF THERAPEUTICS INC COM","WERN":"WERNER ENTERPRISES INC COM","WCC":"WESCO INTL INC COM","WFG":"WEST FRASER TIMBER CO LTD COM","WST":"WEST PHARMACEUTICAL SVSC INC COM","WABC":"WESTAMERICA BANCORPORATION COM","WAL":"WESTERN ALLIANCE BANCORP COM","WMC":"WESTERN ASSET MTG CAP CORP COM","WDC":"WESTERN DIGITAL CORP. COM","WES":"WESTERN MIDSTREAM PARTNERS LP COM UNIT LP INT","WU":"WESTERN UN CO COM","WLKP":"WESTLAKE CHEM PARTNERS LP COM UNIT RP LP","WLK":"WESTLAKE CORPORATION COM","WPRT":"WESTPORT FUEL SYSTEMS INC COM","WRK":"WESTROCK CO COM","WEST":"WESTROCK COFFEE CO COM","WWR":"WESTWATER RES INC COM NEW","WE":"WEWORK INC CL A","WEX":"WEX INC COM","WY":"WEYERHAEUSER CO MTN BE COM NEW","WPM":"WHEATON PRECIOUS METALS CORP COM","UP":"WHEELS UP EXPERIENCE INC COM CL A","WHR":"WHIRLPOOL CORP COM","WHF":"WHITEHORSE FIN INC COM","WSR":"WHITESTONE REIT COM","FREE":"WHOLE EARTH BRANDS INC COM CL A","WOW":"WIDEOPENWEST INC COM","WLY":"WILEY JOHN & SONS INC CL A","WLDN":"WILLDAN GROUP INC COM","WMB":"WILLIAMS COS INC COM","WSM":"WILLIAMS SONOMA INC COM","WTW":"WILLIS TOWERS WATSON PLC LTD SHS","WSC":"WILLSCOT MOBIL MINI HLDNG CORP COM CL A","WIMI":"WIMI HOLOGRAM CLOUD INC SPON ADS CL B","WING":"WINGSTOP INC COM","WGO":"WINNEBAGO INDS INC COM","WTFC":"WINTRUST FINL CORP COM","WIT":"WIPRO LTD SPON ADR 1 SH","WTT":"WIRELESS TELECOM GROUP INC COM","WISA":"WISA TECHNOLOGIES INC COM NEW","WBAT":"WisdomTree Battery Value Chain and Innovation Fund","GDE":"WisdomTree Efficient Gold Plus Equity Strategy Fund","WT":"WISDOMTREE INC COM","USDU":"WISDOMTREE TR BLMBG US BULL","CYB":"WISDOMTREE TR CHINESE YUAN FD","WCLD":"WISDOMTREE TR CLOUD COMPUTNG","XSOE":"WISDOMTREE TR EM EX ST-OWNED","ELD":"WISDOMTREE TR EM LCL DEBT FD","DEM":"WISDOMTREE TR EMER MKT HIGH FD","CEW":"WISDOMTREE TR EMERG CUR STR FD","DGS":"WISDOMTREE TR EMG MKTS SMCAP","GCC":"WISDOMTREE TR ENHNCD CMMDTY ST","HEDJ":"WISDOMTREE TR EUROPE HEDGED EQ","DFE":"WISDOMTREE TR EUROPE SMCP DV","USFR":"WISDOMTREE TR FLOATNG RAT TREA","DNL":"WISDOMTREE TR GLB US QTLY DIV","EPI":"WISDOMTREE TR INDIA ERNGS FD","AIVI":"WISDOMTREE TR INTERNTNL AI ENH","DLS":"WISDOMTREE TR INTL SMCAP DIV","IHDG":"WISDOMTREE TR ITL HDG QTLY DIV","DXJ":"WISDOMTREE TR JAPN HEDGE EQT","DFJ":"WISDOMTREE TR JP SMALLCP DIV","DXJS":"WISDOMTREE TR JPN SCAP HDG EQT","AIVL":"WISDOMTREE TR US AI ENHANCED","DLN":"WISDOMTREE TR US LARGECAP DIVD","DON":"WISDOMTREE TR US MIDCAP DIVID","DGRW":"WISDOMTREE TR US QTLY DIV GRT","EES":"WISDOMTREE TR US SMALLCAP FUND","AGGY":"WISDOMTREE TR YIELD ENHANCD US","USMF":"WisdomTree U.S. Multifactor Fund","WKEY":"WISEKEY INTERNATIONAL HLDS LTD SPON ADR","WIX":"WIX COM LTD SHS","MAPS":"WM TECHNOLOGY INC COM","WNS":"WNS HLDGS LTD SPON ADR","WOLF":"WOLFSPEED INC COM","WWW":"WOLVERINE WORLD WIDE INC COM","WDS":"WOODSIDE ENERGY GROUP LTD SPONSORED ADR","WWD":"WOODWARD INC COM","WDAY":"WORKDAY INC CL A","WKHS":"WORKHORSE GROUP INC COM NEW","WK":"WORKIVA INC COM CL A","WKSP":"WORKSPORT LTD COM NEW","WRLD":"WORLD ACCEP CORPORATION COM","WKC":"WORLD KINECT CORPORATION COM","WWE":"WORLD WRESTLING ENTMT INC CL A","WOR":"WORTHINGTON INDS INC COM","WPC":"WP CAREY INC COM","WPP":"WPP PLC NEW ADR","WRAP":"WRAP TECHNOLOGIES INC COM","WSFS":"WSFS FINL CORP COM","WW":"WW INTL INC COM","WH":"WYNDHAM HOTELS & RESORTS INC COM","WYNN":"WYNN RESORTS LTD COM","XFOR":"X4 PHARMACEUTICALS INC COM","XBIT":"XBIOTECH INC COM","XEL":"XCEL ENERGY INC COM","XNCR":"XENCOR INC COM","XBIO":"XENETIC BIOSCIENCES INC COM","XHR":"XENIA HOTELS & RESORTS INC COM","XENE":"XENON PHARMACEUTICALS INC COM","XERS":"XERIS BIOPHARMA HOLDINGS INC COM","XRX":"XEROX HOLDINGS CORP COM NEW","XOMA":"XOMA CORP DEL COM NEW","XMTR":"XOMETRY INC CLASS A COM","XOS":"XOS INC COMMON STOCK","XP":"XP INC CL A","XPEL":"XPEL INC COM","XPEV":"XPENG INC ADS","XPO":"XPO INC COM","XPOF":"XPONENTIAL FITNESS INC COM CL A","XNET":"XUNLEI LTD SPONSORED ADR","XYL":"XYLEM INC COM","YMAB":"Y-MABS THERAPEUTICS INC COM","YALA":"YALLA GROUP LTD ADS","YSG":"YATSEN HLDG LTD ADS","YELL":"YELLOW CORP COM","YELP":"YELP INC CL A","YETI":"YETI HLDGS INC COM","YEXT":"YEXT INC COM","YRD":"YIREN DIGITAL LTD SPONSORED ADS","DAO":"YOUDAO INC SPONSORED ADS","YPF":"YPF SOCIEDAD ANONIMA SPON ADR CL D","YUM":"YUM BRANDS INC COM","YUMC":"YUM CHINA HLDGS INC COM","ZLAB":"ZAI LAB LTD ADR","ZBRA":"ZEBRA TECHNOLOGIES CORPORATION CL A","ZDGE":"ZEDGE INC CL B","ZEPP":"ZEPP HEALTH CORPORATION SPONSORED ADS","ZETA":"ZETA GLOBAL HOLDINGS CORP CL A","ZVRA":"ZEVRA THERAPEUTICS INC COM NEW","ZH":"ZHIHU INC ADS","ZD":"ZIFF DAVIS INC COM","ZG":"ZILLOW GROUP INC CL A","Z":"ZILLOW GROUP INC CL C CAP STK","ZIM":"ZIM INTEGRATED SHIPPING SERV SHS","ZBH":"ZIMMER BIOMET HOLDINGS INC COM","ZIMV":"ZIMVIE INC COM","ZION":"ZIONS BANCORPORATION N A COM","ZIP":"ZIPRECRUITER INC CL A","ZTS":"ZOETIS INC CL A","ZM":"ZOOM VIDEO COMMUNICATIONS INC CL A","ZI":"ZOOMINFO TECHNOLOGIES INC COMMON STOCK","ZS":"ZSCALER INC COM","ZTO":"ZTO EXPRESS CAYMAN INC SPONSORED ADS A","ZUMZ":"ZUMIEZ INC COM","ZUO":"ZUORA INC COM CL A","ZWS":"ZURN ELKAY WATER SOLNS CORP COM","CNET":"ZW DATA ACTION TECHNOLOGS INC COM NEW","ZYME":"ZYMEWORKS INC COM","ZYNE":"ZYNERBA PHARMACEUTICALS INC COM","ZYXI":"ZYNEX INC COM"},"DPM Name":{"SVIX":"Citadel Securities LLC","FLWS":"Belvedere Trading LLC","VCXA":"Belvedere Trading LLC","TXG":"Susquehanna Securities, LLC","YQ":"Belvedere Trading LLC","TURN":"Citadel Securities LLC","ATNF":"Belvedere Trading LLC","DIBS":"Wolverine Trading, LLC","XXII":"Citadel Securities LLC","ME":"Belvedere Trading LLC","TSVT":"Group One Trading, L.P.","TWOU":"Belvedere Trading LLC","BITX":"Wolverine Trading, LLC","UVIX":"Wolverine Trading, LLC","DDD":"Susquehanna Securities, LLC","MMM":"Susquehanna Securities, LLC","FDMT":"Susquehanna Securities, LLC","FEAM":"Susquehanna Securities, LLC","ETNB":"Susquehanna Securities, LLC","EGHT":"Susquehanna Securities, LLC","NMTRQ":null,"MASS":"Citadel Securities LLC","AKA":"Susquehanna Securities, LLC","AMRK":"Susquehanna Securities, LLC","ATEN":"Citadel Securities LLC","AAON":"Wolverine Trading, LLC","AIR":"Citadel Securities LLC","ABT":"Susquehanna Securities, LLC","ABBV":"Susquehanna Securities, LLC","ABCM":"Group One Trading, L.P.","ABCL":"Group One Trading, L.P.","ABEO":"Group One Trading, L.P.","ANF":"GTS Securities LLC","ABM":"Susquehanna Securities, LLC","BCIM":"Belvedere Trading LLC","BCI":"Belvedere Trading LLC","BCD":"Belvedere Trading LLC","SGOL":"Morgan Stanley & Co. LLC","SIVR":"Morgan Stanley & Co. LLC","ABSI":"Citadel Securities LLC","ABST":"Belvedere Trading LLC","ACTG":"Morgan Stanley & Co. LLC","ASO":"Belvedere Trading LLC","ACHC":"Group One Trading, L.P.","ACAD":"Susquehanna Securities, LLC","ACEL":"Belvedere Trading LLC","AXDX":"Citadel Securities LLC","ACN":"Citadel Securities LLC","ACCO":"Susquehanna Securities, LLC","ACCD":"Citadel Securities LLC","ARAY":"Group One Trading, L.P.","ACRX":"Susquehanna Securities, LLC","SLRN":"Belvedere Trading LLC","ACER":"Susquehanna Securities, LLC","ACGN":"Group One Trading, L.P.","ACHV":"Group One Trading, L.P.","ACIW":"Morgan Stanley & Co. LLC","ACRS":"Group One Trading, L.P.","ACMR":"Group One Trading, L.P.","ACNB":"Group One Trading, L.P.","ACOR":"Susquehanna Securities, LLC","ACR":"Wolverine Trading, LLC","ATNM":"Belvedere Trading LLC","ATVI":"Susquehanna Securities, LLC","AYI":"Citadel Securities LLC","ABOS":"Group One Trading, L.P.","GOLF":"Citadel Securities LLC","AFIB":"Citadel Securities LLC","ACVA":"Citadel Securities LLC","PEO":"Susquehanna Securities, LLC","ADMP":"Citadel Securities LLC","AHCO":"Group One Trading, L.P.","ADAP":"Citadel Securities LLC","ADPT":"Susquehanna Securities, LLC","ADCT":"Citadel Securities LLC","ADUS":"Citadel Securities LLC","AGRO":"Wolverine Trading, LLC","ADEA":"Citadel Securities LLC","ADIL":"Susquehanna Securities, LLC","ACET":"Group One Trading, L.P.","ADNT":"GTS Securities LLC","ADTX":"Group One Trading, L.P.","ADMA":"Susquehanna Securities, LLC","ADBE":"GTS Securities LLC","ADT":"Belvedere Trading LLC","ATGE":"Belvedere Trading LLC","ADTN":"GTS Securities LLC","AAP":"Susquehanna Securities, LLC","WMS":"Wolverine Trading, LLC","AEIS":"Susquehanna Securities, LLC","AMD":"Citadel Securities LLC","ASIX":"Citadel Securities LLC","ADV":"Wolverine Trading, LLC","ADN":"Susquehanna Securities, LLC","ADVM":"Citadel Securities LLC","EATV":"Belvedere Trading LLC","GK":"Wolverine Trading, LLC","LETB":"Belvedere Trading LLC","MSOX":"Belvedere Trading LLC","YOLO":"Belvedere Trading LLC","MSOS":"Belvedere Trading LLC","HDGE":"Susquehanna Securities, LLC","ACM":"GTS Securities LLC","AGLE":"Group One Trading, L.P.","AEG":"GTS Securities LLC","AEHR":"Susquehanna Securities, LLC","AMTX":"Belvedere Trading LLC","AER":"Susquehanna Securities, LLC","AJRD":"Belvedere Trading LLC","AVAV":"Susquehanna Securities, LLC","ASLE":"Wolverine Trading, LLC","AES":"Susquehanna Securities, LLC","AEMD":"Belvedere Trading LLC","AEVA":"Susquehanna Securities, LLC","LIDR":"Belvedere Trading LLC","AFCG":"Susquehanna Securities, LLC","AMG":"Susquehanna Securities, LLC","AFMD":"Citadel Securities LLC","AFRM":"Citadel Securities LLC","AFL":"Citadel Securities LLC","MITT":"Wolverine Trading, LLC","AGCO":"Two Sigma Securities, LLC","UAVS":"Wolverine Trading, LLC","AGEN":"Group One Trading, L.P.","A":"Susquehanna Securities, LLC","AGTI":"Group One Trading, L.P.","AGL":"Morgan Stanley & Co. LLC","AGYS":"Citadel Securities LLC","AGIO":"Susquehanna Securities, LLC","AGNC":"Morgan Stanley & Co. LLC","AEM":"Susquehanna Securities, LLC","API":"Wolverine Trading, LLC","ADC":"Wolverine Trading, LLC","AGRI":"Group One Trading, L.P.","AL":"Susquehanna Securities, LLC","APD":"GTS Securities LLC","ATSG":"Group One Trading, L.P.","ABNB":"Susquehanna Securities, LLC","AIRG":"Susquehanna Securities, LLC","MIMO":"Group One Trading, L.P.","AKAM":"Susquehanna Securities, LLC","AKBA":"Citadel Securities LLC","KERN":"Group One Trading, L.P.","AKRO":"Group One Trading, L.P.","AKTS":"Group One Trading, L.P.","AKYA":"Citadel Securities LLC","ALG":"Wolverine Trading, LLC","AGI":"Wolverine Trading, LLC","ALRM":"Susquehanna Securities, LLC","ALK":"Susquehanna Securities, LLC","AIN":"Susquehanna Securities, LLC","ALB":"Susquehanna Securities, LLC","ACI":"Wolverine Trading, LLC","AA":"Citadel Securities LLC","ALC":"Citadel Securities LLC","ALDX":"Group One Trading, L.P.","ALEC":"Citadel Securities LLC","ALRS":"Belvedere Trading LLC","ALEX":"Citadel Securities LLC","ARE":"Wolverine Trading, LLC","ASTL":"Group One Trading, L.P.","AQN":"Wolverine Trading, LLC","BABA":"Susquehanna Securities, LLC","ALIT":"Belvedere Trading LLC","ALGN":"GTS Securities LLC","ALHC":"Citadel Securities LLC","ALGS":"Citadel Securities LLC","ALKT":"Group One Trading, L.P.","ALKS":"Citadel Securities LLC","ALLK":"Susquehanna Securities, LLC","BIRD":"Susquehanna Securities, LLC","ALGT":"Susquehanna Securities, LLC","ALLE":"Wolverine Trading, LLC","ALLG":"Group One Trading, L.P.","ALGM":"Morgan Stanley & Co. LLC","ARLP":"Susquehanna Securities, LLC","AB":"Susquehanna Securities, LLC","LNT":"Citadel Securities LLC","AMOT":"Susquehanna Securities, LLC","ALSN":"Susquehanna Securities, LLC","ALLO":"Group One Trading, L.P.","ALLT":"Susquehanna Securities, LLC","ALVR":"Citadel Securities LLC","ALL":"Susquehanna Securities, LLC","ALLY":"Citadel Securities LLC","AAU":"Susquehanna Securities, LLC","ALNY":"Susquehanna Securities, LLC","AOSL":"Morgan Stanley & Co. LLC","QMOM":"Wolverine Trading, LLC","AMR":"Morgan Stanley & Co. LLC","APT":"Citadel Securities LLC","GOOGL":"Susquehanna Securities, LLC","GOOG":"Susquehanna Securities, LLC","ATEC":"Group One Trading, L.P.","ALPP":"Susquehanna Securities, LLC","ALPN":"Susquehanna Securities, LLC","PINE":"Citadel Securities LLC","OGIG":"Belvedere Trading LLC","OUSA":"Belvedere Trading LLC","AMLP":"Susquehanna Securities, LLC","BFOR":"Susquehanna Securities, LLC","ACES":"Wolverine Trading, LLC","DTEC":"Belvedere Trading LLC","SBIO":"Belvedere Trading LLC","ALTG":"Group One Trading, L.P.","ALTR":"Citadel Securities LLC","AYX":"Susquehanna Securities, LLC","ATUS":"Citadel Securities LLC","ALT":"Group One Trading, L.P.","ALTU":"Susquehanna Securities, LLC","ALTO":"Group One Trading, L.P.","MO":"Susquehanna Securities, LLC","AMPS":"Citadel Securities LLC","ALXO":"Group One Trading, L.P.","ALZN":"Belvedere Trading LLC","AMAL":"Group One Trading, L.P.","AMRN":"Group One Trading, L.P.","AMZN":"Citadel Securities LLC","AMBC":"Wolverine Trading, LLC","AMBA":"Susquehanna Securities, LLC","ABEV":"Susquehanna Securities, LLC","AMAM":"Belvedere Trading LLC","AMC":"Citadel Securities LLC","AMCX":"Susquehanna Securities, LLC","AMCR":"Belvedere Trading LLC","DOX":"Susquehanna Securities, LLC","AMED":"Citadel Securities LLC","AMSWA":"Citadel Securities LLC","AWR":"Susquehanna Securities, LLC","AMTB":"Citadel Securities LLC","AEE":"Susquehanna Securities, LLC","AMRC":"Wolverine Trading, LLC","AMX":"Citadel Securities LLC","AAL":"Susquehanna Securities, LLC","AAT":"Wolverine Trading, LLC","AXL":"Susquehanna Securities, LLC","QPFF":"Belvedere Trading LLC","AVEM":"Citadel Securities LLC","AVDE":"Wolverine Trading, LLC","QGRO":"Wolverine Trading, LLC","AEO":"Susquehanna Securities, LLC","AEP":"Citadel Securities LLC","AEL":"Citadel Securities LLC","AXP":"Two Sigma Securities, LLC","AFG":"Wolverine Trading, LLC","AMH":"Susquehanna Securities, LLC","AIG":"Citadel Securities LLC","AOUT":"Morgan Stanley & Co. LLC","APEI":"Morgan Stanley & Co. LLC","AREC":"Susquehanna Securities, LLC","AMSC":"Susquehanna Securities, LLC","AMT":"Susquehanna Securities, LLC","AVD":"Wolverine Trading, LLC","AMWL":"Citadel Securities LLC","AMWD":"Susquehanna Securities, LLC","AWK":"Susquehanna Securities, LLC","CRMT":"Susquehanna Securities, LLC","COLD":"Wolverine Trading, LLC","AMP":"Citadel Securities LLC","ABCB":"Citadel Securities LLC","ABC":"Susquehanna Securities, LLC","ATLO":"Citadel Securities LLC","AME":"Citadel Securities LLC","AMGN":"Citadel Securities LLC","FOLD":"Group One Trading, L.P.","AMKR":"GTS Securities LLC","POWW":"Belvedere Trading LLC","AMN":"Wolverine Trading, LLC","AMRX":"Citadel Securities LLC","AP":"Wolverine Trading, LLC","AMPH":"Belvedere Trading LLC","APH":"GTS Securities LLC","AMPY":"Wolverine Trading, LLC","BATT":"Belvedere Trading LLC","SWAN":"Citadel Securities LLC","BLOK":"Belvedere Trading LLC","DIVO":"Wolverine Trading, LLC","IWIN":"Belvedere Trading LLC","IBUY":"Belvedere Trading LLC","CNBS":"Belvedere Trading LLC","AMPL":"Group One Trading, L.P.","AMPX":"Susquehanna Securities, LLC","ASYS":"Susquehanna Securities, LLC","AMLX":"Susquehanna Securities, LLC","AMRS":"Susquehanna Securities, LLC","ADI":"Citadel Securities LLC","ANAB":"Susquehanna Securities, LLC","AVXL":"Citadel Securities LLC","ANDE":"Susquehanna Securities, LLC","ANGI":"Susquehanna Securities, LLC","ANGO":"Belvedere Trading LLC","AU":"GTS Securities LLC","BUD":"Susquehanna Securities, LLC","ANIP":"Susquehanna Securities, LLC","ANIK":"Group One Trading, L.P.","NLY":"Citadel Securities LLC","ANNX":"Citadel Securities LLC","ANSS":"GTS Securities LLC","ATEX":"Belvedere Trading LLC","AM":"Susquehanna Securities, LLC","AR":"Susquehanna Securities, LLC","HOUS":"Morgan Stanley & Co. LLC","AON":"Susquehanna Securities, LLC","APA":"Susquehanna Securities, LLC","AIRC":"Group One Trading, L.P.","AIV":"Wolverine Trading, LLC","APLS":"Susquehanna Securities, LLC","APG":"Group One Trading, L.P.","APOG":"GTS Securities LLC","ARI":"Belvedere Trading LLC","APO":"GTS Securities LLC","AMEH":"Susquehanna Securities, LLC","APPF":"Susquehanna Securities, LLC","APPH":"Wolverine Trading, LLC","APPN":"Susquehanna Securities, LLC","APLE":"Susquehanna Securities, LLC","AAPL":"Susquehanna Securities, LLC","APLD":"Belvedere Trading LLC","APDN":"Susquehanna Securities, LLC","AIT":"Group One Trading, L.P.","AMAT":"Citadel Securities LLC","AMTI":"Susquehanna Securities, LLC","AAOI":"Wolverine Trading, LLC","APP":"Morgan Stanley & Co. LLC","APRE":"Citadel Securities LLC","ATR":"GTS Securities LLC","APTV":"Susquehanna Securities, LLC","APTO":"Susquehanna Securities, LLC","AQMS":"Group One Trading, L.P.","AQB":"Wolverine Trading, LLC","AQST":"Citadel Securities LLC","ARMK":"Susquehanna Securities, LLC","ARAV":"Susquehanna Securities, LLC","ARBE":"Belvedere Trading LLC","ABR":"Wolverine Trading, LLC","ABUS":"Susquehanna Securities, LLC","ARC":"Wolverine Trading, LLC","RKDA":"Belvedere Trading LLC","ARCB":"GTS Securities LLC","ACLX":"Susquehanna Securities, LLC","MT":"GTS Securities LLC","ACGL":"Susquehanna Securities, LLC","ARCH":"Citadel Securities LLC","ACHR":"Citadel Securities LLC","ADM":"Two Sigma Securities, LLC","AROC":"Citadel Securities LLC","FUV":"Belvedere Trading LLC","ARCE":"Susquehanna Securities, LLC","ARNC":"Citadel Securities LLC","ARCO":"Group One Trading, L.P.","ACA":"Citadel Securities LLC","ARCT":"Group One Trading, L.P.","RCUS":"Susquehanna Securities, LLC","ARQT":"Citadel Securities LLC","AMBP":"Susquehanna Securities, LLC","ARDX":"Citadel Securities LLC","ASC":"Wolverine Trading, LLC","AAC":"Susquehanna Securities, LLC","ARCC":"Citadel Securities LLC","ACRE":"Susquehanna Securities, LLC","ARES":"Susquehanna Securities, LLC","ARGX":"Susquehanna Securities, LLC","ARBK":"Group One Trading, L.P.","ARGO":"Group One Trading, L.P.","ARHS":"Susquehanna Securities, LLC","ARIS":"Citadel Securities LLC","ANET":"Wolverine Trading, LLC","ARKQ":"Wolverine Trading, LLC","ARKF":"Group One Trading, L.P.","ARKK":"Belvedere Trading LLC","ARKW":"Wolverine Trading, LLC","ARKG":"Belvedere Trading LLC","IZRL":"Belvedere Trading LLC","ARKX":"Wolverine Trading, LLC","ARKO":"Wolverine Trading, LLC","AAIC":"Wolverine Trading, LLC","ARLO":"Group One Trading, L.P.","AHH":"Susquehanna Securities, LLC","ARR":"Group One Trading, L.P.","AWI":"GTS Securities LLC","ARQQ":"Citadel Securities LLC","ARRY":"Citadel Securities LLC","ARVL":"Citadel Securities LLC","ARW":"Citadel Securities LLC","GYLD":"Wolverine Trading, LLC","YPS":"Group One Trading, L.P.","ARWR":"Wolverine Trading, LLC","AIP":"Group One Trading, L.P.","APAM":"Citadel Securities LLC","AORT":"Belvedere Trading LLC","ARVN":"Susquehanna Securities, LLC","ASA":"Susquehanna Securities, LLC","ASAN":"Susquehanna Securities, LLC","ABG":"Group One Trading, L.P.","ASND":"Susquehanna Securities, LLC","ASX":"Group One Trading, L.P.","ASXC":"Susquehanna Securities, LLC","ASGN":"Wolverine Trading, LLC","AHT":"Wolverine Trading, LLC","ASH":"Citadel Securities LLC","ASLN":"Susquehanna Securities, LLC","ASML":"Susquehanna Securities, LLC","ASPN":"Group One Trading, L.P.","ASPU":"Citadel Securities LLC","AZPN":"Susquehanna Securities, LLC","ASMB":"Susquehanna Securities, LLC","ASRT":"Morgan Stanley & Co. LLC","AMK":"Belvedere Trading LLC","ASB":"Susquehanna Securities, LLC","AIZ":"Citadel Securities LLC","AGO":"Wolverine Trading, LLC","ASTS":"Belvedere Trading LLC","ASTE":"Susquehanna Securities, LLC","ASTR":"Belvedere Trading LLC","AZN":"Citadel Securities LLC","ATXS":"Citadel Securities LLC","ATRO":"Wolverine Trading, LLC","ASUR":"Wolverine Trading, LLC","T":"Two Sigma Securities, LLC","ATAI":"Citadel Securities LLC","ATRA":"Citadel Securities LLC","AVIR":"Citadel Securities LLC","ATER":"Susquehanna Securities, LLC","ATHX":"Group One Trading, L.P.","ATHA":"Susquehanna Securities, LLC","ATI":"Citadel Securities LLC","ATIP":"Group One Trading, L.P.","ATKR":"Wolverine Trading, LLC","BATRA":"Citadel Securities LLC","AUB":"Citadel Securities LLC","AY":"Morgan Stanley & Co. LLC","ATLC":"Susquehanna Securities, LLC","AESI":"Citadel Securities LLC","TEAM":"Morgan Stanley & Co. LLC","ATO":"Wolverine Trading, LLC","ATNI":"Wolverine Trading, LLC","ATOM":"Susquehanna Securities, LLC","ATOS":"Susquehanna Securities, LLC","BCEL":"Group One Trading, L.P.","ATRC":"Citadel Securities LLC","LIFE":"Susquehanna Securities, LLC","AUDAD":null,"AUDC":"Citadel Securities LLC","AURA":"Citadel Securities LLC","AUPH":"Citadel Securities LLC","ACB":"Susquehanna Securities, LLC","AUR":"Belvedere Trading LLC","JG":"Citadel Securities LLC","ADSK":"GTS Securities LLC","ATHM":"Wolverine Trading, LLC","ALV":"Citadel Securities LLC","AUTL":"Belvedere Trading LLC","ADP":"GTS Securities LLC","AN":"Susquehanna Securities, LLC","AZO":"Susquehanna Securities, LLC","AVDL":"Susquehanna Securities, LLC","AVB":"Citadel Securities LLC","AVNS":"Susquehanna Securities, LLC","AVTA":"Citadel Securities LLC","AVTR":"Susquehanna Securities, LLC","AVAH":"Susquehanna Securities, LLC","AVPT":"Susquehanna Securities, LLC","AVY":"Wolverine Trading, LLC","AVNW":"Susquehanna Securities, LLC","CDMO":"Group One Trading, L.P.","AVID":"Citadel Securities LLC","RNA":"Belvedere Trading LLC","AVDX":"Susquehanna Securities, LLC","AVNT":"Wolverine Trading, LLC","CAR":"Citadel Securities LLC","AVA":"Citadel Securities LLC","RCEL":"Belvedere Trading LLC","AVT":"GTS Securities LLC","AWRE":"Susquehanna Securities, LLC","AXTA":"Citadel Securities LLC","ACLS":"Citadel Securities LLC","AXS":"Citadel Securities LLC","AXGN":"Group One Trading, L.P.","AXON":"Susquehanna Securities, LLC","AXNX":"Wolverine Trading, LLC","AX":"Wolverine Trading, LLC","AXSM":"Susquehanna Securities, LLC","AXTI":"Morgan Stanley & Co. LLC","AYRO":"Susquehanna Securities, LLC","AZEK":"Wolverine Trading, LLC","AZTA":"Citadel Securities LLC","AZUL":"Susquehanna Securities, LLC","AZZ":"GTS Securities LLC","BGS":"Wolverine Trading, LLC","RILY":"Group One Trading, L.P.","BTG":"Wolverine Trading, LLC","BW":"Group One Trading, L.P.","BLZE":"Citadel Securities LLC","BMI":"Susquehanna Securities, LLC","BIDU":"Citadel Securities LLC","BKR":"Citadel Securities LLC","BKKT":"Belvedere Trading LLC","BCPC":"Susquehanna Securities, LLC","BALL":"Susquehanna Securities, LLC","BLDP":"Citadel Securities LLC","BALY":"Group One Trading, L.P.","BANC":"Wolverine Trading, LLC","BBAR":"Group One Trading, L.P.","BBVA":"Group One Trading, L.P.","BBD":"GTS Securities LLC","BCH":"Wolverine Trading, LLC","BLX":"Citadel Securities LLC","BMA":"Susquehanna Securities, LLC","BSBR":"Susquehanna Securities, LLC","BSAC":"Wolverine Trading, LLC","SAN":"Wolverine Trading, LLC","BAND":"Susquehanna Securities, LLC","BAC":"GTS Securities LLC","BOH":"Group One Trading, L.P.","BMRC":"Group One Trading, L.P.","FNGS":"Citadel Securities LLC","BMO":"GTS Securities LLC","BK":"Two Sigma Securities, LLC","BNS":"Citadel Securities LLC","NTB":"Citadel Securities LLC","OZK":"Morgan Stanley & Co. LLC","BFIN":"Susquehanna Securities, LLC","BKU":"Citadel Securities LLC","BANR":"GTS Securities LLC","BZUN":"Wolverine Trading, LLC","BHB":"Group One Trading, L.P.","DJP":"Wolverine Trading, LLC","GRN":"Wolverine Trading, LLC","BCS":"Susquehanna Securities, LLC","BBDC":"Citadel Securities LLC","BARK":"Group One Trading, L.P.","BNED":"Wolverine Trading, LLC","B":"Wolverine Trading, LLC","BBSI":"Wolverine Trading, LLC","GOLD":"Two Sigma Securities, LLC","BSET":"Wolverine Trading, LLC","BBWI":"GTS Securities LLC","BHC":"Susquehanna Securities, LLC","BLCO":"Citadel Securities LLC","BAX":"Citadel Securities LLC","BCML":"Wolverine Trading, LLC","BTE":"Citadel Securities LLC","BCE":"Citadel Securities LLC","BECN":"Citadel Securities LLC","BEEM":"Wolverine Trading, LLC","BEAM":"Citadel Securities LLC","BZH":"Citadel Securities LLC","BDX":"Susquehanna Securities, LLC","BGNE":"Citadel Securities LLC","BDC":"Wolverine Trading, LLC","BLPH":"Group One Trading, L.P.","BRBR":"Citadel Securities LLC","BHE":"Susquehanna Securities, LLC","BHIL":"Group One Trading, L.P.","BSY":"Group One Trading, L.P.","WRB":"Wolverine Trading, LLC","BRK.B":"GTS Securities LLC","BERY":"Susquehanna Securities, LLC","BBY":"Susquehanna Securities, LLC","BEST":"Citadel Securities LLC","BTTX":"Group One Trading, L.P.","BWAC":"Group One Trading, L.P.","BWMX":"Wolverine Trading, LLC","XAIR":"Wolverine Trading, LLC","BYND":"Susquehanna Securities, LLC","BYSI":"Citadel Securities LLC","BGC":"Wolverine Trading, LLC","BHP":"Susquehanna Securities, LLC","BCYC":"Group One Trading, L.P.","BGFV":"Wolverine Trading, LLC","BIG":"GTS Securities LLC","BBAI":"Wolverine Trading, LLC","BIGC":"Susquehanna Securities, LLC","BILI":"Citadel Securities LLC","BILL":"Wolverine Trading, LLC","BIO":"Susquehanna Securities, LLC","BKYI":"Belvedere Trading LLC","BPTH":"Belvedere Trading LLC","TECH":"Susquehanna Securities, LLC","BCAB":"Group One Trading, L.P.","BCDA":"Citadel Securities LLC","BIOC":"Susquehanna Securities, LLC","BCRX":"Group One Trading, L.P.","BDSX":"Citadel Securities LLC","BFRI":"Citadel Securities LLC","BIIB":"Susquehanna Securities, LLC","BHVN":"Group One Trading, L.P.","BLFS":"Citadel Securities LLC","BMRN":"Citadel Securities LLC","BMEA":"Citadel Securities LLC","BNGO":"Belvedere Trading LLC","BNTX":"Citadel Securities LLC","BIOR":"Wolverine Trading, LLC","BSGM":"Wolverine Trading, LLC","BTCY":"Belvedere Trading LLC","BVS":"Belvedere Trading LLC","BIVI":"Citadel Securities LLC","BTAI":"Susquehanna Securities, LLC","BRDS":"Group One Trading, L.P.","BTBT":"Wolverine Trading, LLC","BTCM":"Wolverine Trading, LLC","BITF":"Susquehanna Securities, LLC","BNMV":"Susquehanna Securities, LLC","BJRI":"Susquehanna Securities, LLC","BJ":"Citadel Securities LLC","BKH":"Wolverine Trading, LLC","BKI":"Citadel Securities LLC","BSM":"Susquehanna Securities, LLC","BLKB":"Citadel Securities LLC","BB":"Susquehanna Securities, LLC","BL":"Susquehanna Securities, LLC","BKCC":"Wolverine Trading, LLC","LCTD":"Wolverine Trading, LLC","BLK":"Susquehanna Securities, LLC","NEAR":"Belvedere Trading LLC","TCPC":"Wolverine Trading, LLC","ICSH":"Group One Trading, L.P.","BKSY":"Susquehanna Securities, LLC","BX":"Wolverine Trading, LLC","BXMT":"Susquehanna Securities, LLC","BXSL":"Citadel Securities LLC","BLDE":"Belvedere Trading LLC","BLND":"Belvedere Trading LLC","BLNK":"Group One Trading, L.P.","HRB":"Citadel Securities LLC","SQ":"Morgan Stanley & Co. LLC","BE":"Group One Trading, L.P.","BLMN":"Susquehanna Securities, LLC","APRN":"Morgan Stanley & Co. LLC","BLBD":"Belvedere Trading LLC","BLFY":"Wolverine Trading, LLC","OBDC":"Citadel Securities LLC","OWL":"Group One Trading, L.P.","BRBS":"Wolverine Trading, LLC","BLUE":"Citadel Securities LLC","BXC":"Citadel Securities LLC","BPMC":"Citadel Securities LLC","BMTX":"Belvedere Trading LLC","BA":"Citadel Securities LLC","BCC":"Susquehanna Securities, LLC","BOKF":"GTS Securities LLC","BKNG":"Susquehanna Securities, LLC","BOOT":"Citadel Securities LLC","BAH":"Wolverine Trading, LLC","BWA":"Citadel Securities LLC","BORR":"Susquehanna Securities, LLC","SAM":"Susquehanna Securities, LLC","BOC":"Susquehanna Securities, LLC","BXP":"GTS Securities LLC","BSX":"Citadel Securities LLC","BOWL":"Wolverine Trading, LLC","BOX":"Citadel Securities LLC","BOXDQ":"Belvedere Trading LLC","BYD":"GTS Securities LLC","BP":"Two Sigma Securities, LLC","BPT":"Citadel Securities LLC","BRC":"Wolverine Trading, LLC","BHR":"Citadel Securities LLC","BRAG":"Group One Trading, L.P.","BCLI":"Group One Trading, L.P.","BDN":"Wolverine Trading, LLC","BRZE":"Citadel Securities LLC","BRCC":"Citadel Securities LLC","BFH":"Susquehanna Securities, LLC","BREZ":"Belvedere Trading LLC","BRFS":"Citadel Securities LLC","BCTX":"Belvedere Trading LLC","BRDG":"Wolverine Trading, LLC","BBIO":"Citadel Securities LLC","BTWN":"Wolverine Trading, LLC","BWB":"Wolverine Trading, LLC","BGXX":"Group One Trading, L.P.","BHG":"Citadel Securities LLC","BFAM":"Wolverine Trading, LLC","BCOV":"Susquehanna Securities, LLC","BHF":"Susquehanna Securities, LLC","BSIG":"Group One Trading, L.P.","BRSP":"Group One Trading, L.P.","BV":"Citadel Securities LLC","BRLT":"Citadel Securities LLC","EAT":"Wolverine Trading, LLC","BCO":"Susquehanna Securities, LLC","BMY":"Two Sigma Securities, LLC","VTOL":"Susquehanna Securities, LLC","BTI":"Susquehanna Securities, LLC","BRX":"Wolverine Trading, LLC","AVGO":"Susquehanna Securities, LLC","BR":"Wolverine Trading, LLC","BNL":"Belvedere Trading LLC","BWEN":"Wolverine Trading, LLC","BKD":"Wolverine Trading, LLC","BBU":"Wolverine Trading, LLC","BN":"Belvedere Trading LLC","BIP":"Wolverine Trading, LLC","BIPC":"Wolverine Trading, LLC","BNRE":"Group One Trading, L.P.","BEPC":"Belvedere Trading LLC","BEP":"Wolverine Trading, LLC","BRKL":"Wolverine Trading, LLC","BRO":"Citadel Securities LLC","BF.B":"Wolverine Trading, LLC","DOOO":"Morgan Stanley & Co. LLC","BRKR":"GTS Securities LLC","BC":"Susquehanna Securities, LLC","BSQR":"Wolverine Trading, LLC","BKE":"Wolverine Trading, LLC","BFIX":"Belvedere Trading LLC","BBW":"Citadel Securities LLC","BLDR":"Wolverine Trading, LLC","BMBL":"Susquehanna Securities, LLC","BG":"Citadel Securities LLC","BUR":"Belvedere Trading LLC","BFI":"Group One Trading, L.P.","BURL":"Susquehanna Securities, LLC","BFST":"Wolverine Trading, LLC","BFLY":"Susquehanna Securities, LLC","BZFD":"Citadel Securities LLC","BWXT":"GTS Securities LLC","BY":"Morgan Stanley & Co. LLC","BYRN":"Susquehanna Securities, LLC","CHRW":"Citadel Securities LLC","AI":"Susquehanna Securities, LLC","CCCC":"Susquehanna Securities, LLC","CABA":"Citadel Securities LLC","CBT":"Wolverine Trading, LLC","CACI":"Two Sigma Securities, LLC","CADE":"Wolverine Trading, LLC","CDNS":"Citadel Securities LLC","CDZI":"Citadel Securities LLC","CDRE":"Belvedere Trading LLC","CAE":"Wolverine Trading, LLC","CZR":"Group One Trading, L.P.","CSTE":"Citadel Securities LLC","CALM":"Group One Trading, L.P.","CAMP":"Susquehanna Securities, LLC","CVGW":"Citadel Securities LLC","CALC":"Citadel Securities LLC","CAL":"Wolverine Trading, LLC","CRC":"Belvedere Trading LLC","CWT":"Citadel Securities LLC","CALX":"Morgan Stanley & Co. LLC","CALT":"Citadel Securities LLC","CPE":"Group One Trading, L.P.","CLMT":"GTS Securities LLC","CEI":"Susquehanna Securities, LLC","CMBM":"Citadel Securities LLC","TOKE":"Wolverine Trading, LLC","SYLD":"Wolverine Trading, LLC","TAIL":"Belvedere Trading LLC","CATC":"Susquehanna Securities, LLC","CPT":"Susquehanna Securities, LLC","CCJ":"GTS Securities LLC","CPB":"Morgan Stanley & Co. LLC","CWH":"Susquehanna Securities, LLC","CAMT":"Wolverine Trading, LLC","CAN":"Susquehanna Securities, LLC","GOOS":"Citadel Securities LLC","CM":"GTS Securities LLC","CNQ":"Citadel Securities LLC","CNI":"Susquehanna Securities, LLC","CP":"Citadel Securities LLC","CSIQ":"Susquehanna Securities, LLC","CNNE":"Wolverine Trading, LLC","CANO":"Belvedere Trading LLC","GOEV":"Susquehanna Securities, LLC","CGC":"Susquehanna Securities, LLC","CTLP":"Wolverine Trading, LLC","CCBG":"Wolverine Trading, LLC","CGUS":"Wolverine Trading, LLC","CGDV":"Wolverine Trading, LLC","CGGR":"Citadel Securities LLC","COF":"Morgan Stanley & Co. LLC","CPLP":"Wolverine Trading, LLC","CSWC":"Wolverine Trading, LLC","CFFN":"Susquehanna Securities, LLC","TIME":"Belvedere Trading LLC","CPRI":"Morgan Stanley & Co. LLC","CAPR":"Citadel Securities LLC","CGRN":"Belvedere Trading LLC","CARA":"Citadel Securities LLC","CRDF":"Citadel Securities LLC","CAH":"Citadel Securities LLC","CRDL":"Belvedere Trading LLC","CDLX":"Citadel Securities LLC","CDNA":"Group One Trading, L.P.","CMAX":"Citadel Securities LLC","CTRE":"Susquehanna Securities, LLC","CARG":"Susquehanna Securities, LLC","CRBU":"Belvedere Trading LLC","CARM":"Susquehanna Securities, LLC","CSL":"Susquehanna Securities, LLC","CG":"Susquehanna Securities, LLC","CGBD":"Wolverine Trading, LLC","KMX":"Susquehanna Securities, LLC","CCL":"Two Sigma Securities, LLC","CUK":"Belvedere Trading LLC","PRTS":"Group One Trading, L.P.","CRS":"Citadel Securities LLC","CSV":"Susquehanna Securities, LLC","CARR":"Citadel Securities LLC","TAST":"Belvedere Trading LLC","CARS":"GTS Securities LLC","CARE":"Group One Trading, L.P.","CRI":"Susquehanna Securities, LLC","CVNA":"Wolverine Trading, LLC","CASA":"Citadel Securities LLC","CWST":"Belvedere Trading LLC","CASY":"Wolverine Trading, LLC","CASI":"Group One Trading, L.P.","SAVA":"Group One Trading, L.P.","CSTL":"Susquehanna Securities, LLC","CTRM":"Susquehanna Securities, LLC","CTLT":"Citadel Securities LLC","CPRX":"Group One Trading, L.P.","CAT":"Citadel Securities LLC","CATY":"Citadel Securities LLC","CATO":"Susquehanna Securities, LLC","CAVA":"Citadel Securities LLC","CVCO":"Wolverine Trading, LLC","CZOO":"Citadel Securities LLC","CBAT":"Citadel Securities LLC","YCBD":"Susquehanna Securities, LLC","CBZ":"Citadel Securities LLC","CBOE":"Susquehanna Securities, LLC","VIX":null,"CBRE":"Susquehanna Securities, LLC","CCCS":"Belvedere Trading LLC","CDW":"Susquehanna Securities, LLC","CECO":"Belvedere Trading LLC","FUN":"GTS Securities LLC","CVM":"Citadel Securities LLC","CE":"Citadel Securities LLC","CELC":"Group One Trading, L.P.","CLS":"Susquehanna Securities, LLC","CLDX":"Citadel Securities LLC","CLBT":"Wolverine Trading, LLC","CLLS":"Group One Trading, L.P.","CELH":"Wolverine Trading, LLC","CELU":"Citadel Securities LLC","CX":"Citadel Securities LLC","CENN":"Susquehanna Securities, LLC","CVE":"Wolverine Trading, LLC","CNC":"Susquehanna Securities, LLC","CNP":"Citadel Securities LLC","CSR":"Citadel Securities LLC","CNTA":"Group One Trading, L.P.","CENTA":"Wolverine Trading, LLC","CPF":"Wolverine Trading, LLC","CEPU":"Susquehanna Securities, LLC","CVCY":"Citadel Securities LLC","LEU":"Wolverine Trading, LLC","CENX":"Citadel Securities LLC","CNTY":"Belvedere Trading LLC","CCS":"Susquehanna Securities, LLC","IPSC":"Susquehanna Securities, LLC","CRNT":"Citadel Securities LLC","CRNC":"Wolverine Trading, LLC","CERE":"Group One Trading, L.P.","CDAY":"Group One Trading, L.P.","CERT":"Susquehanna Securities, LLC","CERS":"Citadel Securities LLC","CEVA":"Morgan Stanley & Co. LLC","CF":"Susquehanna Securities, LLC","GIB":"Susquehanna Securities, LLC","CSBR":"Citadel Securities LLC","CHX":"Citadel Securities LLC","CRGE":"Susquehanna Securities, LLC","CHPT":"Wolverine Trading, LLC","CRL":"Two Sigma Securities, LLC","GTLS":"Susquehanna Securities, LLC","CHTR":"Susquehanna Securities, LLC","CCF":"Group One Trading, L.P.","CLDT":"Wolverine Trading, LLC","CHKP":"Citadel Securities LLC","CKPT":"Susquehanna Securities, LLC","CAKE":"GTS Securities LLC","CMCM":"Susquehanna Securities, LLC","CHEF":"Wolverine Trading, LLC","CHGG":"Susquehanna Securities, LLC","CHE":"Susquehanna Securities, LLC","CC":"Two Sigma Securities, LLC","LNG":"Wolverine Trading, LLC","CQP":"Citadel Securities LLC","CHK":"Citadel Securities LLC","CVX":"Citadel Securities LLC","CHWY":"Citadel Securities LLC","CSSE":"Belvedere Trading LLC","CHS":"GTS Securities LLC","PLCE":"GTS Securities LLC","CIM":"Wolverine Trading, LLC","CMRX":"Citadel Securities LLC","CAAS":"Susquehanna Securities, LLC","CYD":"Group One Trading, L.P.","CD":"Group One Trading, L.P.","KDNY":"Susquehanna Securities, LLC","CMG":"Susquehanna Securities, LLC","CHH":"Citadel Securities LLC","CHRD":"Belvedere Trading LLC","CDXC":"Belvedere Trading LLC","CB":"Morgan Stanley & Co. LLC","CHT":"Susquehanna Securities, LLC","CHD":"Morgan Stanley & Co. LLC","CCV":"Citadel Securities LLC","CVII":"Group One Trading, L.P.","CHDN":"Wolverine Trading, LLC","CHUY":"Susquehanna Securities, LLC","CIXXF":"Susquehanna Securities, LLC","CINT":"Citadel Securities LLC","CIG":"Susquehanna Securities, LLC","CDTX":"Group One Trading, L.P.","CIEN":"GTS Securities LLC","CMPR":"Susquehanna Securities, LLC","CINF":"Citadel Securities LLC","CNK":"Susquehanna Securities, LLC","CTAS":"Susquehanna Securities, LLC","CION":"Belvedere Trading LLC","CIFR":"Wolverine Trading, LLC","CIR":"Belvedere Trading LLC","CRUS":"Morgan Stanley & Co. LLC","CSCO":"Citadel Securities LLC","CISO":"Citadel Securities LLC","CTRN":"Citadel Securities LLC","C":"Susquehanna Securities, LLC","CTXR":"Susquehanna Securities, LLC","CFG":"Citadel Securities LLC","CIA":"Belvedere Trading LLC","CIO":"Susquehanna Securities, LLC","CVEO":"Susquehanna Securities, LLC","CIVI":"Group One Trading, L.P.","CLVT":"Group One Trading, L.P.","CMTG":"Susquehanna Securities, LLC","CLAR":"Citadel Securities LLC","CLNE":"Morgan Stanley & Co. LLC","CLH":"Morgan Stanley & Co. LLC","CLSK":"Group One Trading, L.P.","CCO":"Susquehanna Securities, LLC","YOU":"Wolverine Trading, LLC","CLFD":"Susquehanna Securities, LLC","CLPT":"Citadel Securities LLC","CLSD":"Susquehanna Securities, LLC","CLIR":"Group One Trading, L.P.","CWAN":"Susquehanna Securities, LLC","CLW":"Wolverine Trading, LLC","CWEN.A":"Wolverine Trading, LLC","CWEN":"Citadel Securities LLC","CLNN":"Citadel Securities LLC","CLF":"GTS Securities LLC","CLVR":"Wolverine Trading, LLC","RAASY":"Susquehanna Securities, LLC","CLX":"Susquehanna Securities, LLC","NET":"Citadel Securities LLC","CLOV":"Susquehanna Securities, LLC","CME":"Susquehanna Securities, LLC","CMS":"Susquehanna Securities, LLC","CNA":"Group One Trading, L.P.","CNHI":"Wolverine Trading, LLC","CNO":"Morgan Stanley & Co. LLC","CNX":"Two Sigma Securities, LLC","CODX":"Citadel Securities LLC","KO":"GTS Securities LLC","CCEP":"Susquehanna Securities, LLC","KOF":"Morgan Stanley & Co. LLC","CDXS":"Wolverine Trading, LLC","CDE":"GTS Securities LLC","CCOI":"Group One Trading, L.P.","CGNX":"Wolverine Trading, LLC","CTSH":"Citadel Securities LLC","CGNT":"Morgan Stanley & Co. LLC","CNS":"Citadel Securities LLC","COHR":"GTS Securities LLC","CHRS":"Group One Trading, L.P.","COHU":"Susquehanna Securities, LLC","COIN":"Citadel Securities LLC","CL":"Two Sigma Securities, LLC","SPCX":"Belvedere Trading LLC","COLL":"Citadel Securities LLC","CIGI":"Citadel Securities LLC","CLGN":"Susquehanna Securities, LLC","COLB":"Citadel Securities LLC","ECON":"Susquehanna Securities, LLC","CLBK":"Group One Trading, L.P.","COLM":"Morgan Stanley & Co. LLC","CMCO":"Susquehanna Securities, LLC","CMCSA":"Citadel Securities LLC","CMA":"Citadel Securities LLC","FIX":"Citadel Securities LLC","CBSH":"Susquehanna Securities, LLC","CMC":"Wolverine Trading, LLC","CVGI":"Belvedere Trading LLC","COMM":"Susquehanna Securities, LLC","CBU":"Morgan Stanley & Co. LLC","CYH":"Susquehanna Securities, LLC","CHCT":"Citadel Securities LLC","CTBI":"Susquehanna Securities, LLC","CVLT":"Citadel Securities LLC","CBD":"Susquehanna Securities, LLC","SBS":"Group One Trading, L.P.","ELP":"Susquehanna Securities, LLC","SID":"Citadel Securities LLC","CCU":"Wolverine Trading, LLC","BVN":"Susquehanna Securities, LLC","CODI":"Citadel Securities LLC","COMP":"Citadel Securities LLC","CMP":"Susquehanna Securities, LLC","CMPS":"Susquehanna Securities, LLC","CGEN":"Susquehanna Securities, LLC","CPUH":"Wolverine Trading, LLC","CPSI":"GTS Securities LLC","CTG":"Susquehanna Securities, LLC","SCOR":"Wolverine Trading, LLC","COMS":"Group One Trading, L.P.","LODE":"Citadel Securities LLC","CRK":"Citadel Securities LLC","CMTL":"Group One Trading, L.P.","CAG":"Group One Trading, L.P.","CNXC":"Wolverine Trading, LLC","CNDT":"Susquehanna Securities, LLC","CFLT":"Citadel Securities LLC","CNMD":"Citadel Securities LLC","CNTB":"Group One Trading, L.P.","CNOB":"Group One Trading, L.P.","CONN":"GTS Securities LLC","COP":"Susquehanna Securities, LLC","CCSI":"Wolverine Trading, LLC","CEIX":"Wolverine Trading, LLC","CNSL":"GTS Securities LLC","ED":"Citadel Securities LLC","CWCO":"Belvedere Trading LLC","STZ":"Citadel Securities LLC","CEG":"Citadel Securities LLC","CSTM":"Group One Trading, L.P.","CPSS":"Group One Trading, L.P.","TCS":"Morgan Stanley & Co. LLC","WISH":"Citadel Securities LLC","VLRS":"Wolverine Trading, LLC","CONX":"Susquehanna Securities, LLC","COO":"GTS Securities LLC","CPS":"Citadel Securities LLC","CPA":"Morgan Stanley & Co. LLC","CPRT":"Two Sigma Securities, LLC","CORT":"Group One Trading, L.P.","CNM":"Belvedere Trading LLC","CLB":"Susquehanna Securities, LLC","CRBG":"Citadel Securities LLC","CXW":"Wolverine Trading, LLC","CORR":"Belvedere Trading LLC","CRMD":"Morgan Stanley & Co. LLC","GLW":"Two Sigma Securities, LLC","CAAP":"Citadel Securities LLC","OFC":"Susquehanna Securities, LLC","CRSR":"Susquehanna Securities, LLC","CTVA":"Citadel Securities LLC","CRVS":"Group One Trading, L.P.","COSM":"Group One Trading, L.P.","CMRE":"Susquehanna Securities, LLC","CSGP":"Citadel Securities LLC","COST":"GTS Securities LLC","CTRA":"Susquehanna Securities, LLC","COTY":"Susquehanna Securities, LLC","BASE":"Citadel Securities LLC","CPNG":"Susquehanna Securities, LLC","COUR":"Citadel Securities LLC","CUZ":"Group One Trading, L.P.","CVLG":"Wolverine Trading, LLC","CPSH":"Wolverine Trading, LLC","CRAI":"Belvedere Trading LLC","CBRL":"GTS Securities LLC","CR":"Wolverine Trading, LLC","CXT":"Wolverine Trading, LLC","BAP":"Susquehanna Securities, LLC","CACC":"Wolverine Trading, LLC","CRDO":"Citadel Securities LLC","CCAP":"Belvedere Trading LLC","CPG":"Morgan Stanley & Co. LLC","CEQP":"Wolverine Trading, LLC","CRESY":"Susquehanna Securities, LLC","CRH":"Susquehanna Securities, LLC","CRCT":"Group One Trading, L.P.","CRNX":"Citadel Securities LLC","CRSP":"Group One Trading, L.P.","CRTO":"Wolverine Trading, LLC","CROX":"Susquehanna Securities, LLC","CRON":"Group One Trading, L.P.","CCRN":"Belvedere Trading LLC","CAPL":"Citadel Securities LLC","CFB":"Wolverine Trading, LLC","CRWD":"Susquehanna Securities, LLC","CCI":"Susquehanna Securities, LLC","CRWS":"Wolverine Trading, LLC","CCK":"GTS Securities LLC","CYRX":"Belvedere Trading LLC","LAW":"Citadel Securities LLC","CSGS":"Susquehanna Securities, LLC","CCLP":"Wolverine Trading, LLC","CSWI":"Wolverine Trading, LLC","CSX":"GTS Securities LLC","CTO":"Susquehanna Securities, LLC","CTS":"Citadel Securities LLC","CUBE":"Susquehanna Securities, LLC","CUE":"Citadel Securities LLC","HLTH":"Susquehanna Securities, LLC","CFR":"GTS Securities LLC","CGEM":"Group One Trading, L.P.","CULP":"Belvedere Trading LLC","CPIX":"Group One Trading, L.P.","CMI":"Susquehanna Securities, LLC","CMLS":"Susquehanna Securities, LLC","CVAC":"Group One Trading, L.P.","CURI":"Susquehanna Securities, LLC","CRIS":"Susquehanna Securities, LLC","CURO":"Susquehanna Securities, LLC","CW":"GTS Securities LLC","CWK":"Wolverine Trading, LLC","CTOS":"Wolverine Trading, LLC","CUBI":"Wolverine Trading, LLC","CUTR":"GTS Securities LLC","CVBF":"Susquehanna Securities, LLC","CVI":"Susquehanna Securities, LLC","UAN":"Wolverine Trading, LLC","CVRX":"Wolverine Trading, LLC","CVS":"Susquehanna Securities, LLC","CYBR":"Wolverine Trading, LLC","CYCN":"Wolverine Trading, LLC","CBAY":"Group One Trading, L.P.","CYN":"Wolverine Trading, LLC","CTKB":"Group One Trading, L.P.","CYTK":"Group One Trading, L.P.","CTSO":"Citadel Securities LLC","DHI":"Susquehanna Securities, LLC","DADA":"Wolverine Trading, LLC","DAKT":"Susquehanna Securities, LLC","DAN":"Wolverine Trading, LLC","DHR":"Citadel Securities LLC","DAC":"Wolverine Trading, LLC","DNMR":"Citadel Securities LLC","DQ":"Citadel Securities LLC","DRI":"Two Sigma Securities, LLC","DRIO":"Citadel Securities LLC","DAR":"Susquehanna Securities, LLC","DSKE":"Susquehanna Securities, LLC","DAIO":"Citadel Securities LLC","DDOG":"Citadel Securities LLC","PLAY":"Wolverine Trading, LLC","DTEAF":"Group One Trading, L.P.","DVA":"Susquehanna Securities, LLC","DAWN":"Belvedere Trading LLC","DBVT":"Susquehanna Securities, LLC","NAIL":"Belvedere Trading LLC","ASHS":"Belvedere Trading LLC","ASHR":"Susquehanna Securities, LLC","CN":"Belvedere Trading LLC","DBEF":"Susquehanna Securities, LLC","DBEU":"Susquehanna Securities, LLC","DBJP":"Belvedere Trading LLC","HYLB":"Belvedere Trading LLC","SNPE":"Wolverine Trading, LLC","DBTX":"Group One Trading, L.P.","DCPH":"Susquehanna Securities, LLC","DECK":"Susquehanna Securities, LLC","DE":"Citadel Securities LLC","DH":"Citadel Securities LLC","DCTH":"Group One Trading, L.P.","DKL":"Citadel Securities LLC","DK":"Susquehanna Securities, LLC","DELL":"Susquehanna Securities, LLC","DAL":"Susquehanna Securities, LLC","DLX":"Citadel Securities LLC","DNLI":"Group One Trading, L.P.","DEN":"Morgan Stanley & Co. LLC","DNN":"Susquehanna Securities, LLC","DENN":"Susquehanna Securities, LLC","XRAY":"Wolverine Trading, LLC","DMTK":"Citadel Securities LLC","DSGX":"Citadel Securities LLC","DSGN":"Group One Trading, L.P.","DBI":"Two Sigma Securities, LLC","DM":"Citadel Securities LLC","DESP":"Susquehanna Securities, LLC","DXLG":"Susquehanna Securities, LLC","DB":"Citadel Securities LLC","DVN":"Morgan Stanley & Co. LLC","DXCM":"Susquehanna Securities, LLC","DHX":"Susquehanna Securities, LLC","DHT":"Citadel Securities LLC","DEO":"GTS Securities LLC","DMAC":"Wolverine Trading, LLC","DO":"Citadel Securities LLC","FANG":"Susquehanna Securities, LLC","DRH":"Susquehanna Securities, LLC","DSX":"Citadel Securities LLC","DICE":"Group One Trading, L.P.","DKS":"Citadel Securities LLC","DBDQQ":"Susquehanna Securities, LLC","DGII":"Susquehanna Securities, LLC","DMRC":"Wolverine Trading, LLC","DGLY":"Susquehanna Securities, LLC","DLR":"GTS Securities LLC","APPS":"Group One Trading, L.P.","DWAC":"Susquehanna Securities, LLC","DBRG":"Susquehanna Securities, LLC","DOCN":"Citadel Securities LLC","DCOM":"Citadel Securities LLC","DFIP":"Wolverine Trading, LLC","DFIV":"Citadel Securities LLC","DFAU":"Wolverine Trading, LLC","DFUS":"Citadel Securities LLC","DUHP":"Citadel Securities LLC","DFUV":"Wolverine Trading, LLC","DFAR":"Wolverine Trading, LLC","DFSV":"Wolverine Trading, LLC","DFAX":"Citadel Securities LLC","DFIC":"Morgan Stanley & Co. LLC","DIN":"Susquehanna Securities, LLC","DIOD":"Citadel Securities LLC","TMV":"GTS Securities LLC","TMF":"GTS Securities LLC","TYO":"Susquehanna Securities, LLC","TYD":"Susquehanna Securities, LLC","COM":"Wolverine Trading, LLC","BRZU":"Citadel Securities LLC","CHAU":"Belvedere Trading LLC","CWEB":"Wolverine Trading, LLC","WEBL":"Wolverine Trading, LLC","ERY":"Group One Trading, L.P.","FAZ":"GTS Securities LLC","YANG":"Susquehanna Securities, LLC","DUST":"Citadel Securities LLC","JNUG":"Susquehanna Securities, LLC","EDZ":"GTS Securities LLC","INDL":"Susquehanna Securities, LLC","DRN":"GTS Securities LLC","DRV":"GTS Securities LLC","DPST":"Belvedere Trading LLC","UBOT":"Belvedere Trading LLC","HIBS":"Belvedere Trading LLC","LABD":"Wolverine Trading, LLC","HIBL":"Citadel Securities LLC","TZA":"GTS Securities LLC","TECS":"GTS Securities LLC","TPOR":"Wolverine Trading, LLC","YINN":"Susquehanna Securities, LLC","AAPD":"Wolverine Trading, LLC","AAPU":"Wolverine Trading, LLC","DFEN":"Belvedere Trading LLC","WANT":"Belvedere Trading LLC","EDC":"GTS Securities LLC","ERX":"GTS Securities LLC","FAS":"GTS Securities LLC","EURL":"Belvedere Trading LLC","NUGT":"Citadel Securities LLC","DUSL":"Belvedere Trading LLC","JDST":"Susquehanna Securities, LLC","MIDU":"GTS Securities LLC","MEXX":"Belvedere Trading LLC","DRIP":"Susquehanna Securities, LLC","SPUU":"Belvedere Trading LLC","SPDN":"Belvedere Trading LLC","SPXS":"GTS Securities LLC","SOXL":"Susquehanna Securities, LLC","SOXS":"Susquehanna Securities, LLC","TNA":"GTS Securities LLC","TECL":"GTS Securities LLC","TSLS":"Citadel Securities LLC","UTSL":"Belvedere Trading LLC","SPXL":"GTS Securities LLC","CURE":"Susquehanna Securities, LLC","HJEN":"Belvedere Trading LLC","MOON":"Belvedere Trading LLC","QQQE":"Belvedere Trading LLC","GUSH":"Susquehanna Securities, LLC","RETL":"Belvedere Trading LLC","LABU":"Citadel Securities LLC","TSLL":"Morgan Stanley & Co. LLC","IRON":"Belvedere Trading LLC","DFS":"Susquehanna Securities, LLC","DISH":"Susquehanna Securities, LLC","DIS":"Susquehanna Securities, LLC","DHC":"Wolverine Trading, LLC","DLHC":"Group One Trading, L.P.","DLO":"Citadel Securities LLC","BOOM":"Susquehanna Securities, LLC","DCBO":"Group One Trading, L.P.","DCGO":"Susquehanna Securities, LLC","DOCU":"Morgan Stanley & Co. LLC","DOGZ":"Belvedere Trading LLC","DLB":"Susquehanna Securities, LLC","DOLE":"Wolverine Trading, LLC","DG":"Susquehanna Securities, LLC","DLTR":"Citadel Securities LLC","DLPN":"Group One Trading, L.P.","DOMA":"Susquehanna Securities, LLC","D":"Citadel Securities LLC","DPZ":"Susquehanna Securities, LLC","DOMO":"Citadel Securities LLC","DCI":"GTS Securities LLC","DFIN":"Citadel Securities LLC","DASH":"Citadel Securities LLC","DMLP":"Belvedere Trading LLC","LPG":"Wolverine Trading, LLC","DORM":"Citadel Securities LLC","DSL":"Susquehanna Securities, LLC","DV":"Citadel Securities LLC","PLOW":"Belvedere Trading LLC","DOUG":"Citadel Securities LLC","DEI":"GTS Securities LLC","DOYU":"Susquehanna Securities, LLC","DOV":"GTS Securities LLC","DOW":"Citadel Securities LLC","DJX":"Wolverine Trading, LLC","DOCS":"Citadel Securities LLC","RDY":"Citadel Securities LLC","DKNG":"Citadel Securities LLC","DPRO":"Belvedere Trading LLC","DRD":"Susquehanna Securities, LLC","DFH":"Group One Trading, L.P.","DRQ":"Citadel Securities LLC","DSHK":"Morgan Stanley & Co. LLC","DRVN":"Citadel Securities LLC","DBX":"Morgan Stanley & Co. LLC","DTM":"Group One Trading, L.P.","DTE":"Morgan Stanley & Co. LLC","NAPA":"Susquehanna Securities, LLC","DCO":"GTS Securities LLC","DUK":"Citadel Securities LLC","DNB":"Susquehanna Securities, LLC","DUOL":"Susquehanna Securities, LLC","DD":"Citadel Securities LLC","DRRX":"Group One Trading, L.P.","BROS":"Citadel Securities LLC","DXC":"Citadel Securities LLC","DXPE":"Wolverine Trading, LLC","DYAI":"Citadel Securities LLC","DY":"Susquehanna Securities, LLC","DLNG":"Wolverine Trading, LLC","DT":"Wolverine Trading, LLC","DVAX":"Morgan Stanley & Co. LLC","DYN":"Citadel Securities LLC","DX":"Wolverine Trading, LLC","DZSI":"Belvedere Trading LLC","ELF":"Susquehanna Securities, LLC","ETWO":"Susquehanna Securities, LLC","BSVO":"Belvedere Trading LLC","DRLL":"Belvedere Trading LLC","EGBN":"Wolverine Trading, LLC","EGLE":"Citadel Securities LLC","EXP":"GTS Securities LLC","EGRX":"Group One Trading, L.P.","ESTE":"Belvedere Trading LLC","EWBC":"Wolverine Trading, LLC","DEA":"Belvedere Trading LLC","EBC":"Susquehanna Securities, LLC","EMN":"Susquehanna Securities, LLC","KODK":"Citadel Securities LLC","ETN":"Susquehanna Securities, LLC","EBON":"Susquehanna Securities, LLC","EBAY":"Citadel Securities LLC","EBET":"Group One Trading, L.P.","EBIX":"Citadel Securities LLC","SATS":"Susquehanna Securities, LLC","ECL":"GTS Securities LLC","EC":"Wolverine Trading, LLC","ECVT":"Susquehanna Securities, LLC","EDAP":"Susquehanna Securities, LLC","EPC":"Wolverine Trading, LLC","EGIO":"Morgan Stanley & Co. LLC","EIX":"GTS Securities LLC","EDIT":"Citadel Securities LLC","EW":"Susquehanna Securities, LLC","EFTR":"Belvedere Trading LLC","EGAN":"Wolverine Trading, LLC","EH":"Wolverine Trading, LLC","EHTH":"Group One Trading, L.P.","EIGR":"Susquehanna Securities, LLC","EKSO":"Belvedere Trading LLC","LOCO":"Morgan Stanley & Co. LLC","ELAN":"Susquehanna Securities, LLC","ESTC":"Susquehanna Securities, LLC","EGO":"Wolverine Trading, LLC","SOLO":"Group One Trading, L.P.","EA":"Citadel Securities LLC","ELDN":"Citadel Securities LLC","ESI":"Wolverine Trading, LLC","ELV":"Susquehanna Securities, LLC","EFC":"Morgan Stanley & Co. LLC","EARN":"Susquehanna Securities, LLC","ELME":"Citadel Securities LLC","ELYS":"Citadel Securities LLC","EMAN":"Susquehanna Securities, LLC","EMBK":"Morgan Stanley & Co. LLC","EMBC":"Citadel Securities LLC","ERJ":"Susquehanna Securities, LLC","EME":"Group One Trading, L.P.","EMKR":"Susquehanna Securities, LLC","EEX":"Wolverine Trading, LLC","SOL":"Citadel Securities LLC","EBS":"Wolverine Trading, LLC","EMR":"Citadel Securities LLC","ESRT":"Susquehanna Securities, LLC","EMX":"Belvedere Trading LLC","ACT":"Morgan Stanley & Co. LLC","ENTA":"Citadel Securities LLC","ENB":"GTS Securities LLC","EHC":"Wolverine Trading, LLC","ECPG":"Susquehanna Securities, LLC","WIRE":"GTS Securities LLC","DAVA":"Group One Trading, L.P.","EDR":"Susquehanna Securities, LLC","EXK":"Morgan Stanley & Co. LLC","ENR":"Susquehanna Securities, LLC","WATT":"Group One Trading, L.P.","UUUU":"Susquehanna Securities, LLC","ERII":"GTS Securities LLC","SIXE":null,"ET":"Susquehanna Securities, LLC","NRGV":"Belvedere Trading LLC","EPAC":"Susquehanna Securities, LLC","ERF":"Citadel Securities LLC","ENS":"Susquehanna Securities, LLC","NETI":"Group One Trading, L.P.","ENFN":"Group One Trading, L.P.","ESMT":"Citadel Securities LLC","NETZ":"Belvedere Trading LLC","ENG":"Susquehanna Securities, LLC","EHAB":"Citadel Securities LLC","E":"Susquehanna Securities, LLC","ENLC":"Belvedere Trading LLC","ELVN":"Belvedere Trading LLC","ENOB":"Belvedere Trading LLC","ENVA":"Belvedere Trading LLC","ENOV":"Citadel Securities LLC","ENVX":"Citadel Securities LLC","ENPH":"Group One Trading, L.P.","NPO":"Morgan Stanley & Co. LLC","ENSV":"Susquehanna Securities, LLC","ENSG":"Wolverine Trading, LLC","ESGR":"Wolverine Trading, LLC","ENTG":"Susquehanna Securities, LLC","ENTX":"Susquehanna Securities, LLC","ETR":"Susquehanna Securities, LLC","EBTC":"Belvedere Trading LLC","EFSC":"Citadel Securities LLC","EPD":"Citadel Securities LLC","EGLX":"Group One Trading, L.P.","EVC":"Wolverine Trading, LLC","ELA":"Belvedere Trading LLC","ENV":"Citadel Securities LLC","NVRI":"Belvedere Trading LLC","EVTV":"Belvedere Trading LLC","NVST":"Citadel Securities LLC","EVA":"Susquehanna Securities, LLC","NVNO":"Susquehanna Securities, LLC","ENZ":"Susquehanna Securities, LLC","EOG":"Citadel Securities LLC","EOSE":"Susquehanna Securities, LLC","EPAM":"Susquehanna Securities, LLC","PLUS":"Belvedere Trading LLC","EPR":"Susquehanna Securities, LLC","EPSN":"Wolverine Trading, LLC","EQOSQ":"Citadel Securities LLC","EQRX":"Citadel Securities LLC","EQT":"GTS Securities LLC","EFX":"Citadel Securities LLC","EQ":"Citadel Securities LLC","EQIX":"Susquehanna Securities, LLC","EQNR":"Group One Trading, L.P.","EQX":"Wolverine Trading, LLC","EQH":"Susquehanna Securities, LLC","ETRN":"Wolverine Trading, LLC","EQBK":"Wolverine Trading, LLC","EQC":"Citadel Securities LLC","EQR":"GTS Securities LLC","ERAS":"Susquehanna Securities, LLC","ERIC":"Citadel Securities LLC","ERIE":"Wolverine Trading, LLC","ZGN":"Susquehanna Securities, LLC","ERO":"Group One Trading, L.P.","ESAB":"Citadel Securities LLC","ESE":"Wolverine Trading, LLC","ESPR":"Susquehanna Securities, LLC","GWH":"Wolverine Trading, LLC","EPIX":"Belvedere Trading LLC","ESNT":"Belvedere Trading LLC","EPRT":"Citadel Securities LLC","WTRG":"Citadel Securities LLC","ESS":"Citadel Securities LLC","ESTA":"Susquehanna Securities, LLC","ERNA":"Group One Trading, L.P.","BDRY":"Belvedere Trading LLC","ITEQ":"Belvedere Trading LLC","MJ":"Belvedere Trading LLC","VALT":"Belvedere Trading LLC","AWAY":"Belvedere Trading LLC","HACK":"Belvedere Trading LLC","SILJ":"Susquehanna Securities, LLC","GERM":"Belvedere Trading LLC","IVES":"Group One Trading, L.P.","HDRO":"Belvedere Trading LLC","GFOF":"Belvedere Trading LLC","RIET":"Belvedere Trading LLC","NUSI":"Wolverine Trading, LLC","DEEP":"Belvedere Trading LLC","SEA":"Belvedere Trading LLC","JETS":"Wolverine Trading, LLC","PFFA":"Wolverine Trading, LLC","ETD":"Susquehanna Securities, LLC","ETSY":"Wolverine Trading, LLC","EURN":"Susquehanna Securities, LLC","EEFT":"Susquehanna Securities, LLC","EWCZ":"Susquehanna Securities, LLC","EVAX":"Citadel Securities LLC","EVEX":"Susquehanna Securities, LLC","EVLO":"Susquehanna Securities, LLC","EB":"Citadel Securities LLC","EVBG":"Wolverine Trading, LLC","EVCM":"Group One Trading, L.P.","EVR":"Morgan Stanley & Co. LLC","EG":"GTS Securities LLC","EVRG":"Susquehanna Securities, LLC","EVRI":"Wolverine Trading, LLC","EVER":"Citadel Securities LLC","ES":"Wolverine Trading, LLC","MRAM":"Susquehanna Securities, LLC","EVTC":"Wolverine Trading, LLC","EVGO":"Wolverine Trading, LLC","EVGN":"Susquehanna Securities, LLC","EVH":"Susquehanna Securities, LLC","EOLS":"Susquehanna Securities, LLC","EPM":"Wolverine Trading, LLC","EVLV":"Group One Trading, L.P.","EXAS":"Morgan Stanley & Co. LLC","EE":"Wolverine Trading, LLC","TDSC":"Wolverine Trading, LLC","HYLD":"Wolverine Trading, LLC","NVQ":"Belvedere Trading LLC","QRFT":"Belvedere Trading LLC","BITQ":"Belvedere Trading LLC","KOIN":"Belvedere Trading LLC","EMQQ":"Citadel Securities LLC","ROBO":"Belvedere Trading LLC","XELA":"Citadel Securities LLC","EXEL":"Group One Trading, L.P.","EXC":"GTS Securities LLC","EXLS":"Susquehanna Securities, LLC","EXPI":"Group One Trading, L.P.","EXPE":"Susquehanna Securities, LLC","EXPD":"Citadel Securities LLC","EXFY":"Citadel Securities LLC","EXPO":"Wolverine Trading, LLC","EXPR":"Wolverine Trading, LLC","XPRO":"Susquehanna Securities, LLC","EXAI":"Citadel Securities LLC","EXR":"Wolverine Trading, LLC","EXTR":"Citadel Securities LLC","XOM":"Susquehanna Securities, LLC","EYEN":"Group One Trading, L.P.","EYPT":"Group One Trading, L.P.","EZPW":"Susquehanna Securities, LLC","FNB":"Wolverine Trading, LLC","FG":"Belvedere Trading LLC","FXLV":"Citadel Securities LLC","FFIV":"Citadel Securities LLC","FN":"Wolverine Trading, LLC","FDS":"Susquehanna Securities, LLC","FICO":"Wolverine Trading, LLC","FANH":"Citadel Securities LLC","FFIE":"Susquehanna Securities, LLC","FTCH":"Group One Trading, L.P.","FMAO":"Wolverine Trading, LLC","FMNB":"Wolverine Trading, LLC","FPI":"Belvedere Trading LLC","FARO":"Susquehanna Securities, LLC","FAST":"Susquehanna Securities, LLC","FSLY":"Susquehanna Securities, LLC","FATE":"Susquehanna Securities, LLC","FATH":"Susquehanna Securities, LLC","FTHM":"Group One Trading, L.P.","FAZE":"Wolverine Trading, LLC","TTAC":"Belvedere Trading LLC","AGM":"Citadel Securities LLC","FRT":"Wolverine Trading, LLC","FSS":"Wolverine Trading, LLC","FHI":"Group One Trading, L.P.","FDX":"Citadel Securities LLC","FENC":"Susquehanna Securities, LLC","FERG":"Citadel Securities LLC","RACE":"Citadel Securities LLC","GSM":"Susquehanna Securities, LLC","FGH":"Wolverine Trading, LLC","FGEN":"Group One Trading, L.P.","FRNW":"Belvedere Trading LLC","ONEQ":"Belvedere Trading LLC","FSTA":"Belvedere Trading LLC","FDVV":"Wolverine Trading, LLC","FIDI":"Belvedere Trading LLC","FDMO":"Belvedere Trading LLC","FCOM":"Wolverine Trading, LLC","FDIS":"Belvedere Trading LLC","FENY":"Susquehanna Securities, LLC","FNCL":"Susquehanna Securities, LLC","FHLC":"Susquehanna Securities, LLC","FIDU":"Belvedere Trading LLC","FTEC":"Belvedere Trading LLC","FMAT":"Belvedere Trading LLC","FREL":"Belvedere Trading LLC","FUTY":"Belvedere Trading LLC","FQAL":"Belvedere Trading LLC","FSMD":"Belvedere Trading LLC","FBND":"Belvedere Trading LLC","FNF":"Citadel Securities LLC","FIS":"GTS Securities LLC","FDUS":"Group One Trading, L.P.","FRGI":"Wolverine Trading, LLC","FITB":"Citadel Securities LLC","FIGS":"Susquehanna Securities, LLC","FOA":"Group One Trading, L.P.","FISI":"Susquehanna Securities, LLC","SIXM":"Susquehanna Securities, LLC","FNCH":"Group One Trading, L.P.","FNGR":"Susquehanna Securities, LLC","FINV":"Wolverine Trading, LLC","FA":"Susquehanna Securities, LLC","FAF":"Citadel Securities LLC","FNLC":"Group One Trading, L.P.","FBNC":"Wolverine Trading, LLC","FBP":"Belvedere Trading LLC","FBMS":"Susquehanna Securities, LLC","FRBA":"Citadel Securities LLC","FCBC":"Susquehanna Securities, LLC","FCF":"Belvedere Trading LLC","FCNCA":"Susquehanna Securities, LLC","FFBC":"Citadel Securities LLC","FFWM":"Citadel Securities LLC","FHB":"Susquehanna Securities, LLC","FHN":"Citadel Securities LLC","FR":"Group One Trading, L.P.","INBK":"Citadel Securities LLC","FIBK":"Wolverine Trading, LLC","AG":"Citadel Securities LLC","FMBH":"Citadel Securities LLC","FRCB":"Belvedere Trading LLC","FSLR":"Susquehanna Securities, LLC","FPE":"Wolverine Trading, LLC","FCA":"Belvedere Trading LLC","FDT":"Belvedere Trading LLC","FEMS":"Belvedere Trading LLC","FEM":"Wolverine Trading, LLC","FEUZ":"Belvedere Trading LLC","FEP":"Belvedere Trading LLC","FGM":"Belvedere Trading LLC","FJP":"Belvedere Trading LLC","FSZ":"Belvedere Trading LLC","FTGC":"Belvedere Trading LLC","SKYY":"Susquehanna Securities, LLC","FXD":"Susquehanna Securities, LLC","FXG":"Susquehanna Securities, LLC","FDNI":"Wolverine Trading, LLC","FXN":"Susquehanna Securities, LLC","FXH":"Susquehanna Securities, LLC","FXR":"Susquehanna Securities, LLC","FTAG":"Wolverine Trading, LLC","FXZ":"Susquehanna Securities, LLC","CIBR":"Belvedere Trading LLC","FXL":"Susquehanna Securities, LLC","FXU":"Susquehanna Securities, LLC","FPX":"Belvedere Trading LLC","FTCS":"Belvedere Trading LLC","FDN":"Belvedere Trading LLC","FAN":"Wolverine Trading, LLC","FTSM":"Belvedere Trading LLC","LMBS":"Wolverine Trading, LLC","QCLN":"Belvedere Trading LLC","FCG":"Citadel Securities LLC","FBT":"Belvedere Trading LLC","FV":"Belvedere Trading LLC","TDIV":"Belvedere Trading LLC","ROBT":"Belvedere Trading LLC","SDVY":"Citadel Securities LLC","CRPT":"Wolverine Trading, LLC","FIXD":"Belvedere Trading LLC","FEX":"Belvedere Trading LLC","FDL":"Belvedere Trading LLC","QQEW":"Susquehanna Securities, LLC","QTEC":"Susquehanna Securities, LLC","QABA":"Belvedere Trading LLC","FRI":"Belvedere Trading LLC","FVD":"Belvedere Trading LLC","FTC":"Susquehanna Securities, LLC","FWRG":"Wolverine Trading, LLC","FCFS":"Citadel Securities LLC","FE":"Citadel Securities LLC","SVVC":"Wolverine Trading, LLC","FSV":"Group One Trading, L.P.","FI":"Two Sigma Securities, LLC","FSR":"Group One Trading, L.P.","FIVE":"Susquehanna Securities, LLC","FIVN":"Citadel Securities LLC","FVRR":"Group One Trading, L.P.","FLT":"Morgan Stanley & Co. LLC","FLNG":"Susquehanna Securities, LLC","FLEX":"Susquehanna Securities, LLC","IQDF":"Wolverine Trading, LLC","GUNR":"Belvedere Trading LLC","QDEF":"Belvedere Trading LLC","FND":"Citadel Securities LLC","FTK":"Citadel Securities LLC","FLO":"Citadel Securities LLC","FLS":"Citadel Securities LLC","FLNC":"Citadel Securities LLC","FLNT":"Wolverine Trading, LLC","FLR":"Wolverine Trading, LLC","FLUX":"Wolverine Trading, LLC","FLYW":"Morgan Stanley & Co. LLC","FMC":"Wolverine Trading, LLC","FOCS":"Belvedere Trading LLC","FCUV":"Belvedere Trading LLC","FHTX":"Susquehanna Securities, LLC","FMX":"Wolverine Trading, LLC","FL":"Susquehanna Securities, LLC","F":"Two Sigma Securities, LLC","FRSX":"Susquehanna Securities, LLC","FOR":"GTS Securities LLC","FRGE":"Susquehanna Securities, LLC","FORG":"Group One Trading, L.P.","FORM":"Susquehanna Securities, LLC","FORR":"Susquehanna Securities, LLC","FBRX":"Wolverine Trading, LLC","FTNT":"Citadel Securities LLC","FTS":"Wolverine Trading, LLC","FTV":"Susquehanna Securities, LLC","FBIO":"Wolverine Trading, LLC","FSM":"Group One Trading, L.P.","FBIN":"GTS Securities LLC","FET":"Citadel Securities LLC","FWRD":"Wolverine Trading, LLC","FOSL":"Morgan Stanley & Co. LLC","FSTR":"GTS Securities LLC","FOXA":"Susquehanna Securities, LLC","FOX":"Wolverine Trading, LLC","FOXF":"Wolverine Trading, LLC","FRG":"Susquehanna Securities, LLC","FNV":"Wolverine Trading, LLC","FBRT":"Morgan Stanley & Co. LLC","FELE":"Citadel Securities LLC","HELX":"Belvedere Trading LLC","BEN":"GTS Securities LLC","FSP":"Citadel Securities LLC","FLJP":"Citadel Securities LLC","FLQL":"Belvedere Trading LLC","FRHC":"Susquehanna Securities, LLC","FCX":"Two Sigma Securities, LLC","RAIL":"Susquehanna Securities, LLC","FREQ":"Susquehanna Securities, LLC","FMS":"Wolverine Trading, LLC","FDP":"Citadel Securities LLC","FRPT":"Citadel Securities LLC","FRSH":"Susquehanna Securities, LLC","FREY":"Susquehanna Securities, LLC","FTDR":"Wolverine Trading, LLC","FYBR":"Wolverine Trading, LLC","ULCC":"Citadel Securities LLC","FRO":"Susquehanna Securities, LLC","FSK":"Citadel Securities LLC","HUGE":"Group One Trading, L.P.","IGLD":"Belvedere Trading LLC","RDVI":"Citadel Securities LLC","FTAI":"Susquehanna Securities, LLC","FTCI":"Group One Trading, L.P.","FCN":"GTS Securities LLC","FUBO":"Susquehanna Securities, LLC","FTEK":"Wolverine Trading, LLC","FCEL":"Group One Trading, L.P.","FULC":"Susquehanna Securities, LLC","FLGT":"Wolverine Trading, LLC","FLL":"Morgan Stanley & Co. LLC","YMM":"Citadel Securities LLC","FUL":"Citadel Securities LLC","FULT":"Wolverine Trading, LLC","FNKO":"Susquehanna Securities, LLC","HTOO":"Wolverine Trading, LLC","FUSN":"Belvedere Trading LLC","FUTU":"Susquehanna Securities, LLC","FTFT":"Citadel Securities LLC","FF":"Susquehanna Securities, LLC","FVCB":"Belvedere Trading LLC","GIII":"Wolverine Trading, LLC","GTHX":"Susquehanna Securities, LLC","GAIA":"Wolverine Trading, LLC","GANX":"Group One Trading, L.P.","GLPG":"Susquehanna Securities, LLC","GALT":"Citadel Securities LLC","GLTO":"Citadel Securities LLC","GRTX":"Group One Trading, L.P.","GAU":"Wolverine Trading, LLC","AJG":"Wolverine Trading, LLC","GAMB":"Belvedere Trading LLC","GAME":"Belvedere Trading LLC","GME":"Wolverine Trading, LLC","GMDA":"Citadel Securities LLC","GLPI":"Citadel Securities LLC","GAN":"Citadel Securities LLC","GCI":"Belvedere Trading LLC","GOTU":"Susquehanna Securities, LLC","GPS":"Susquehanna Securities, LLC","GRMN":"Citadel Securities LLC","GTX":"Susquehanna Securities, LLC","IT":"Wolverine Trading, LLC","GTES":"Group One Trading, L.P.","GATO":"Citadel Securities LLC","GATX":"GTS Securities LLC","GCMG":"Citadel Securities LLC","GDS":"Wolverine Trading, LLC","GEHC":"Group One Trading, L.P.","GEN":"Susquehanna Securities, LLC","GNSS":"Wolverine Trading, LLC","GNK":"Wolverine Trading, LLC","GENC":"Belvedere Trading LLC","WGS":"Wolverine Trading, LLC","GNRC":"Wolverine Trading, LLC","GD":"Susquehanna Securities, LLC","GE":"Susquehanna Securities, LLC","GIS":"Citadel Securities LLC","GM":"Morgan Stanley & Co. LLC","GBIO":"Group One Trading, L.P.","GCO":"Citadel Securities LLC","GEL":"Susquehanna Securities, LLC","GENE":"Belvedere Trading LLC","GNE":"Susquehanna Securities, LLC","GNS":"Belvedere Trading LLC","GENI":"Belvedere Trading LLC","G":"Group One Trading, L.P.","GNPX":"Susquehanna Securities, LLC","GNTX":"Morgan Stanley & Co. LLC","THRM":"Wolverine Trading, LLC","GPC":"GTS Securities LLC","GNW":"GTS Securities LLC","GEO":"Susquehanna Securities, LLC","GPRK":"Susquehanna Securities, LLC","GEOS":"Susquehanna Securities, LLC","GGB":"Group One Trading, L.P.","GERN":"Susquehanna Securities, LLC","GETY":"Susquehanna Securities, LLC","GTY":"Belvedere Trading LLC","GEVO":"Susquehanna Securities, LLC","GFL":"Group One Trading, L.P.","ROCK":"Belvedere Trading LLC","GILT":"Belvedere Trading LLC","GIL":"Susquehanna Securities, LLC","GILD":"GTS Securities LLC","DNA":"Group One Trading, L.P.","GTLB":"Citadel Securities LLC","GBCI":"Wolverine Trading, LLC","GLAD":"Susquehanna Securities, LLC","GOOD":"Wolverine Trading, LLC","GAIN":"Wolverine Trading, LLC","LAND":"Wolverine Trading, LLC","GLT":"Belvedere Trading LLC","GKOS":"Citadel Securities LLC","VRAR":"Citadel Securities LLC","GB":"Citadel Securities LLC","GBTG":"Wolverine Trading, LLC","GLBE":"Susquehanna Securities, LLC","GIC":"Group One Trading, L.P.","GMRE":"Susquehanna Securities, LLC","GLP":"Morgan Stanley & Co. LLC","GPN":"Wolverine Trading, LLC","GSL":"Wolverine Trading, LLC","GWRS":"Group One Trading, L.P.","AGNG":"Belvedere Trading LLC","AIQ":"Belvedere Trading LLC","DRIV":"Susquehanna Securities, LLC","POTX":"Citadel Securities LLC","AQWA":"Belvedere Trading LLC","CLOU":"Belvedere Trading LLC","KRMA":"Wolverine Trading, LLC","BUG":"Belvedere Trading LLC","DJIA":"Belvedere Trading LLC","EBIZ":"Belvedere Trading LLC","FYLG":"Belvedere Trading LLC","FINX":"Belvedere Trading LLC","ARGT":"Susquehanna Securities, LLC","ASEA":"Wolverine Trading, LLC","HYDR":"Belvedere Trading LLC","GNOM":"Belvedere Trading LLC","GURU":"Susquehanna Securities, LLC","MLPX":"Susquehanna Securities, LLC","MLPA":"Group One Trading, L.P.","GXG":"Susquehanna Securities, LLC","KROP":"Wolverine Trading, LLC","COPX":"Citadel Securities LLC","GOEX":"Belvedere Trading LLC","SIL":"Citadel Securities LLC","URA":"Citadel Securities LLC","DIV":"Wolverine Trading, LLC","HYLG":"Belvedere Trading LLC","TYLG":"Belvedere Trading LLC","LIT":"Belvedere Trading LLC","MILN":"Belvedere Trading LLC","CHIQ":"Susquehanna Securities, LLC","CHIC":"Belvedere Trading LLC","CHIE":"Belvedere Trading LLC","CHIX":"Susquehanna Securities, LLC","CHII":"Group One Trading, L.P.","CHIK":"Belvedere Trading LLC","CHIM":"Wolverine Trading, LLC","CHIR":"Belvedere Trading LLC","GREK":"Susquehanna Securities, LLC","EMFM":"Belvedere Trading LLC","SDEM":"Wolverine Trading, LLC","QYLD":"Wolverine Trading, LLC","QRMI":"Belvedere Trading LLC","QYLG":"Group One Trading, L.P.","PFFV":"Group One Trading, L.P.","BOTZ":"Belvedere Trading LLC","RYLD":"Group One Trading, L.P.","RYLG":"Belvedere Trading LLC","CATH":"Belvedere Trading LLC","XYLD":"Wolverine Trading, LLC","XYLG":"Belvedere Trading LLC","XRMI":"Belvedere Trading LLC","SOCL":"Susquehanna Securities, LLC","SDIV":"Susquehanna Securities, LLC","EDOC":"Belvedere Trading LLC","GXTG":"Wolverine Trading, LLC","PFFD":"Wolverine Trading, LLC","HERO":"Belvedere Trading LLC","WNDY":"Group One Trading, L.P.","EMBD":"Belvedere Trading LLC","PAVE":"Belvedere Trading LLC","GFS":"Susquehanna Securities, LLC","GSAT":"Citadel Securities LLC","GLOB":"Group One Trading, L.P.","GL":"GTS Securities LLC","GLBS":"Group One Trading, L.P.","GMED":"Citadel Securities LLC","GLYC":"Susquehanna Securities, LLC","GMS":"Wolverine Trading, LLC","GDDY":"Morgan Stanley & Co. LLC","GOGO":"Morgan Stanley & Co. LLC","GGR":"Wolverine Trading, LLC","GOCO":"Citadel Securities LLC","GOL":"Group One Trading, L.P.","GLNG":"Group One Trading, L.P.","GFI":"Susquehanna Securities, LLC","GORO":"Wolverine Trading, LLC","GROY":"Citadel Securities LLC","GDEN":"Wolverine Trading, LLC","GMGI":"Belvedere Trading LLC","GOGL":"Morgan Stanley & Co. LLC","GLOV":"Wolverine Trading, LLC","GSBD":"Citadel Securities LLC","GSEW":"Belvedere Trading LLC","GBIL":"Belvedere Trading LLC","GHYB":"Belvedere Trading LLC","GIGB":"Wolverine Trading, LLC","GEM":"Belvedere Trading LLC","GSIE":"Belvedere Trading LLC","GSLC":"Susquehanna Securities, LLC","GDEF":"Belvedere Trading LLC","GVIP":"Belvedere Trading LLC","GINN":"Group One Trading, L.P.","JUST":"Belvedere Trading LLC","GS":"Susquehanna Securities, LLC","GBDC":"Wolverine Trading, LLC","GDRX":"Susquehanna Securities, LLC","GT":"Susquehanna Securities, LLC","GSHD":"Group One Trading, L.P.","GPRO":"Citadel Securities LLC","GRC":"Wolverine Trading, LLC","GOSS":"Citadel Securities LLC","GRAB":"Citadel Securities LLC","GGG":"Wolverine Trading, LLC","EAF":"Susquehanna Securities, LLC","GHM":"Belvedere Trading LLC","GWW":"Citadel Securities LLC","GTE":"Group One Trading, L.P.","LOPE":"GTS Securities LLC","GVA":"Citadel Securities LLC","GPMT":"Wolverine Trading, LLC","TSL":"Wolverine Trading, LLC","CONL":"Wolverine Trading, LLC","AAPB":"Wolverine Trading, LLC","COMB":"Belvedere Trading LLC","GPK":"Wolverine Trading, LLC","GRPH":"Belvedere Trading LLC","GTN":"Wolverine Trading, LLC","AJX":"Group One Trading, L.P.","GLDD":"Group One Trading, L.P.","GRBK":"Susquehanna Securities, LLC","GDOT":"Morgan Stanley & Co. LLC","GPRE":"Wolverine Trading, LLC","GPP":"Group One Trading, L.P.","GBX":"Morgan Stanley & Co. LLC","GHL":"Susquehanna Securities, LLC","GREE":"Belvedere Trading LLC","GLRE":"Belvedere Trading LLC","GP":"Wolverine Trading, LLC","GEF":"Susquehanna Securities, LLC","GDYN":"Wolverine Trading, LLC","GFF":"Susquehanna Securities, LLC","GRFS":"Wolverine Trading, LLC","GRND":"Group One Trading, L.P.","GRTS":"Susquehanna Securities, LLC","GO":"Wolverine Trading, LLC","GPI":"GTS Securities LLC","GRPN":"Citadel Securities LLC","GROV":"Citadel Securities LLC","GRWG":"Wolverine Trading, LLC","OMAB":"Belvedere Trading LLC","ASR":"Susquehanna Securities, LLC","GGAL":"Group One Trading, L.P.","SUPV":"Citadel Securities LLC","TV":"Belvedere Trading LLC","GSIT":"Group One Trading, L.P.","GSK":"GTS Securities LLC","GTBP":"Citadel Securities LLC","GNTY":"Susquehanna Securities, LLC","GH":"Citadel Securities LLC","GES":"Two Sigma Securities, LLC","GWRE":"Susquehanna Securities, LLC","GIFI":"Wolverine Trading, LLC","GPOR":"Citadel Securities LLC","GXO":"Citadel Securities LLC","HEES":"Wolverine Trading, LLC","HTHT":"GTS Securities LLC","HCKT":"Belvedere Trading LLC","HAE":"Wolverine Trading, LLC","HGTY":"Group One Trading, L.P.","HAIN":"Two Sigma Securities, LLC","HOFV":"Susquehanna Securities, LLC","HNRG":"Citadel Securities LLC","HAL":"Susquehanna Securities, LLC","HALO":"Citadel Securities LLC","HLNE":"Wolverine Trading, LLC","HWC":"Susquehanna Securities, LLC","HBI":"Citadel Securities LLC","HAFC":"Wolverine Trading, LLC","HASI":"Susquehanna Securities, LLC","HONE":"Wolverine Trading, LLC","HOG":"GTS Securities LLC","HLIT":"Group One Trading, L.P.","HRMY":"Susquehanna Securities, LLC","HMY":"Susquehanna Securities, LLC","HROW":"Susquehanna Securities, LLC","HCOM":"Belvedere Trading LLC","HIG":"Susquehanna Securities, LLC","HBIO":"Susquehanna Securities, LLC","HAS":"Wolverine Trading, LLC","HCP":"Morgan Stanley & Co. LLC","HVT":"Wolverine Trading, LLC","HE":"Citadel Securities LLC","HA":"Susquehanna Securities, LLC","HWKN":"Group One Trading, L.P.","HAYN":"Citadel Securities LLC","HAYW":"Belvedere Trading LLC","HBT":"Wolverine Trading, LLC","HCA":"Susquehanna Securities, LLC","HCI":"Susquehanna Securities, LLC","HDB":"Susquehanna Securities, LLC","SIXV":"Susquehanna Securities, LLC","HCAT":"Citadel Securities LLC","HR":"Susquehanna Securities, LLC","HCSG":"Wolverine Trading, LLC","HQY":"Group One Trading, L.P.","PEAK":"GTS Securities LLC","HSTM":"Belvedere Trading LLC","HTLD":"Belvedere Trading LLC","HTLF":"Citadel Securities LLC","HL":"GTS Securities LLC","HEI":"Wolverine Trading, LLC","HSII":"Wolverine Trading, LLC","HELE":"GTS Securities LLC","HLGN":"Wolverine Trading, LLC","HLIO":"Wolverine Trading, LLC","HLX":"Wolverine Trading, LLC","MOMO":"Morgan Stanley & Co. LLC","HP":"Wolverine Trading, LLC","JKHY":"Group One Trading, L.P.","HSIC":"Susquehanna Securities, LLC","HEPA":"Belvedere Trading LLC","HLF":"Citadel Securities LLC","HRI":"Citadel Securities LLC","HTGC":"Wolverine Trading, LLC","HCCI":"Belvedere Trading LLC","HFWA":"Group One Trading, L.P.","HRTG":"Wolverine Trading, LLC","HRTX":"Susquehanna Securities, LLC","HT":"Susquehanna Securities, LLC","HSY":"Two Sigma Securities, LLC","HTZ":"Wolverine Trading, LLC","HES":"Citadel Securities LLC","HESM":"Susquehanna Securities, LLC","HPE":"Susquehanna Securities, LLC","HXL":"Susquehanna Securities, LLC","DINO":"Morgan Stanley & Co. LLC","HIBB":"GTS Securities LLC","HITI":"Susquehanna Securities, LLC","SNLN":"Wolverine Trading, LLC","HPK":"Citadel Securities LLC","HIW":"Wolverine Trading, LLC","HI":"GTS Securities LLC","HLMN":"Group One Trading, L.P.","HTH":"GTS Securities LLC","HGV":"Morgan Stanley & Co. LLC","HLT":"Wolverine Trading, LLC","HIMX":"Wolverine Trading, LLC","HIMS":"Belvedere Trading LLC","HIPO":"Belvedere Trading LLC","HRT":"Group One Trading, L.P.","HIVE":"Group One Trading, L.P.","HNI":"Susquehanna Securities, LLC","HLLY":"Belvedere Trading LLC","HEP":"Susquehanna Securities, LLC","HOLI":"Susquehanna Securities, LLC","HOLX":"GTS Securities LLC","HBCP":"Group One Trading, L.P.","HOMB":"Wolverine Trading, LLC","HD":"Susquehanna Securities, LLC","HMPT":"Citadel Securities LLC","HMST":"Citadel Securities LLC","FIXX":"Group One Trading, L.P.","HMC":"Susquehanna Securities, LLC","HNST":"Belvedere Trading LLC","HON":"Citadel Securities LLC","HOFT":"Susquehanna Securities, LLC","HOOK":"Citadel Securities LLC","HRZN":"Susquehanna Securities, LLC","HZNP":"Citadel Securities LLC","HRL":"Citadel Securities LLC","HST":"GTS Securities LLC","TWNK":"Wolverine Trading, LLC","HUSA":"Group One Trading, L.P.","HHC":"Citadel Securities LLC","HWM":"Citadel Securities LLC","HPQ":"Susquehanna Securities, LLC","HSBC":"Morgan Stanley & Co. LLC","HUBG":"Wolverine Trading, LLC","HUBS":"Susquehanna Securities, LLC","HBM":"Susquehanna Securities, LLC","HPP":"Wolverine Trading, LLC","HDSN":"Citadel Securities LLC","HUMA":"Citadel Securities LLC","HUM":"Susquehanna Securities, LLC","JBHT":"GTS Securities LLC","HBAN":"Wolverine Trading, LLC","HII":"Citadel Securities LLC","HUN":"GTS Securities LLC","HURN":"Susquehanna Securities, LLC","HUT":"Susquehanna Securities, LLC","HCM":"Belvedere Trading LLC","HUYA":"Group One Trading, L.P.","H":"Citadel Securities LLC","HYMC":"Susquehanna Securities, LLC","HYFM":"Group One Trading, L.P.","HYLN":"Citadel Securities LLC","HYPR":"Belvedere Trading LLC","HYREQ":"Susquehanna Securities, LLC","HY":"Susquehanna Securities, LLC","HYZN":"Belvedere Trading LLC","IMAB":"Susquehanna Securities, LLC","IIIV":"Citadel Securities LLC","IAC":"Two Sigma Securities, LLC","IAG":"Wolverine Trading, LLC","IBEX":"Citadel Securities LLC","IBIO":"Susquehanna Securities, LLC","ICAD":"Wolverine Trading, LLC","IEP":"Citadel Securities LLC","ICHR":"Citadel Securities LLC","IBN":"GTS Securities LLC","ICL":"Susquehanna Securities, LLC","ICLK":"Susquehanna Securities, LLC","ICLR":"Susquehanna Securities, LLC","ICVX":"Belvedere Trading LLC","ICUI":"Wolverine Trading, LLC","IDA":"Citadel Securities LLC","IDR":"Susquehanna Securities, LLC","IDEX":"Citadel Securities LLC","IDYA":"Susquehanna Securities, LLC","INVE":"Group One Trading, L.P.","IEX":"GTS Securities LLC","IDXX":"Wolverine Trading, LLC","IDT":"GTS Securities LLC","IESC":"Wolverine Trading, LLC","IGC":"Group One Trading, L.P.","IGMS":"Citadel Securities LLC","IHRT":"Wolverine Trading, LLC","IHS":"Citadel Securities LLC","ITW":"GTS Securities LLC","ILMN":"Susquehanna Securities, LLC","IMAX":"GTS Securities LLC","IMBIQ":"Wolverine Trading, LLC","IMTX":"Susquehanna Securities, LLC","IMMR":"Citadel Securities LLC","IMUX":"Belvedere Trading LLC","IBRX":"Morgan Stanley & Co. LLC","IMCR":"Citadel Securities LLC","IMGN":"Morgan Stanley & Co. LLC","IMNM":"Belvedere Trading LLC","IPA":"Belvedere Trading LLC","IMVT":"Susquehanna Securities, LLC","IMMP":"Citadel Securities LLC","IMO":"Susquehanna Securities, LLC","IMPP":"Wolverine Trading, LLC","PI":"Susquehanna Securities, LLC","NARI":"Susquehanna Securities, LLC","INCY":"Susquehanna Securities, LLC","ICD":"Group One Trading, L.P.","IRT":"Susquehanna Securities, LLC","INDB":"Citadel Securities LLC","IBCP":"Wolverine Trading, LLC","QAI":"Wolverine Trading, LLC","MNA":"Wolverine Trading, LLC","INDI":"Susquehanna Securities, LLC","ILPT":"Susquehanna Securities, LLC","SIXI":"Susquehanna Securities, LLC","INFN":"GTS Securities LLC","INFI":"Group One Trading, L.P.","INFA":"Wolverine Trading, LLC","INFY":"Citadel Securities LLC","INFU":"Group One Trading, L.P.","ING":"Susquehanna Securities, LLC","IR":"Wolverine Trading, LLC","IMKTA":"Susquehanna Securities, LLC","INGR":"Citadel Securities LLC","INBX":"Belvedere Trading LLC","INMD":"Susquehanna Securities, LLC","INMB":"Morgan Stanley & Co. LLC","INOD":"Wolverine Trading, LLC","IOSP":"Citadel Securities LLC","INNV":"Wolverine Trading, LLC","VATE":"Wolverine Trading, LLC","IIPR":"Susquehanna Securities, LLC","FFTY":"Belvedere Trading LLC","LOUP":"Belvedere Trading LLC","PSEP":"Belvedere Trading LLC","INVA":"Citadel Securities LLC","INVZ":"Belvedere Trading LLC","INGN":"Wolverine Trading, LLC","NOTV":"Susquehanna Securities, LLC","INO":"Susquehanna Securities, LLC","INZY":"Belvedere Trading LLC","INSG":"Group One Trading, L.P.","NSIT":"Susquehanna Securities, LLC","INSM":"Group One Trading, L.P.","NSP":"GTS Securities LLC","ISPO":"Citadel Securities LLC","INSP":"Wolverine Trading, LLC","INSE":"Citadel Securities LLC","NSPR":"Wolverine Trading, LLC","IBP":"Susquehanna Securities, LLC","IIIN":"Belvedere Trading LLC","TIL":"Group One Trading, L.P.","INST":"Group One Trading, L.P.","PODD":"Citadel Securities LLC","INTA":"Susquehanna Securities, LLC","ITGR":"Susquehanna Securities, LLC","IART":"Susquehanna Securities, LLC","IAS":"Citadel Securities LLC","INTC":"Susquehanna Securities, LLC","NTLA":"Susquehanna Securities, LLC","IDN":"Belvedere Trading LLC","IPAR":"Citadel Securities LLC","IBKR":"GTS Securities LLC","ICPT":"Susquehanna Securities, LLC","ICE":"Citadel Securities LLC","INCR":"Susquehanna Securities, LLC","IDCC":"Citadel Securities LLC","TILE":"Belvedere Trading LLC","IBOC":"Citadel Securities LLC","IBM":"Citadel Securities LLC","IFF":"Morgan Stanley & Co. LLC","IGT":"Susquehanna Securities, LLC","IP":"Susquehanna Securities, LLC","INSW":"Morgan Stanley & Co. LLC","IPG":"Two Sigma Securities, LLC","INTT":"Belvedere Trading LLC","IVAC":"Belvedere Trading LLC","ITCI":"Susquehanna Securities, LLC","IPI":"Wolverine Trading, LLC","INTZ":"Citadel Securities LLC","INTU":"Susquehanna Securities, LLC","ISRG":"GTS Securities LLC","IVT":"Wolverine Trading, LLC","SJIM":"Belvedere Trading LLC","GSY":"Belvedere Trading LLC","EVMT":"Belvedere Trading LLC","PDBC":"Belvedere Trading LLC","SATO":"Group One Trading, L.P.","FXA":"Citadel Securities LLC","FXB":"Citadel Securities LLC","FXC":"Two Sigma Securities, LLC","FXE":"Citadel Securities LLC","FXY":"Citadel Securities LLC","FXF":"Citadel Securities LLC","DBC":"Susquehanna Securities, LLC","DBA":"Citadel Securities LLC","DBB":"Susquehanna Securities, LLC","DBE":"Belvedere Trading LLC","DBO":"Citadel Securities LLC","DBP":"Belvedere Trading LLC","UDN":"Citadel Securities LLC","UUP":"Citadel Securities LLC","PWZ":"Wolverine Trading, LLC","PCEF":"Wolverine Trading, LLC","PIZ":"Susquehanna Securities, LLC","PIE":"Belvedere Trading LLC","DWAS":"Susquehanna Securities, LLC","PCY":"Susquehanna Securities, LLC","PHB":"Citadel Securities LLC","PXH":"Belvedere Trading LLC","PBD":"Belvedere Trading LLC","KBWB":"Susquehanna Securities, LLC","KBWD":"Citadel Securities LLC","KBWP":"Belvedere Trading LLC","KBWY":"Citadel Securities LLC","CUT":"Belvedere Trading LLC","QQQJ":"Citadel Securities LLC","PGX":"Susquehanna Securities, LLC","SPVU":"Belvedere Trading LLC","SPHB":"Susquehanna Securities, LLC","RWL":"Susquehanna Securities, LLC","EELV":"Belvedere Trading LLC","CGW":"Wolverine Trading, LLC","RWK":"Susquehanna Securities, LLC","XMLV":"Belvedere Trading LLC","RWJ":"Susquehanna Securities, LLC","PSCE":"Belvedere Trading LLC","PSCH":"Belvedere Trading LLC","SPHD":"Wolverine Trading, LLC","SPLV":"Susquehanna Securities, LLC","TAN":"Citadel Securities LLC","BKLN":"Morgan Stanley & Co. LLC","VRP":"Wolverine Trading, LLC","PPA":"Wolverine Trading, LLC","PKW":"Susquehanna Securities, LLC","PDP":"Belvedere Trading LLC","PTF":"Citadel Securities LLC","PXE":"Citadel Securities LLC","PEJ":"Citadel Securities LLC","PXJ":"Susquehanna Securities, LLC","PJP":"Susquehanna Securities, LLC","PSI":"Wolverine Trading, LLC","PGF":"Citadel Securities LLC","PRF":"Susquehanna Securities, LLC","PRFZ":"Wolverine Trading, LLC","PSP":"Susquehanna Securities, LLC","PGJ":"Citadel Securities LLC","PEY":"Belvedere Trading LLC","PID":"Wolverine Trading, LLC","PNQI":"Susquehanna Securities, LLC","SPGP":"Belvedere Trading LLC","XLG":"Belvedere Trading LLC","XMMO":"Wolverine Trading, LLC","XMHQ":"Wolverine Trading, LLC","XMVM":"Wolverine Trading, LLC","RFV":"Belvedere Trading LLC","XSVM":"Wolverine Trading, LLC","RZV":"Belvedere Trading LLC","CSD":"Susquehanna Securities, LLC","RSPD":"Belvedere Trading LLC","RSPG":"Belvedere Trading LLC","RSPF":"Wolverine Trading, LLC","RSPH":"Morgan Stanley & Co. LLC","RSPN":"Wolverine Trading, LLC","RSPM":"Wolverine Trading, LLC","RSPR":"Wolverine Trading, LLC","RSPT":"Belvedere Trading LLC","RSP":"Belvedere Trading LLC","RPV":"Susquehanna Securities, LLC","SPHQ":"Susquehanna Securities, LLC","PHO":"Susquehanna Securities, LLC","PBW":"Susquehanna Securities, LLC","CVY":"Susquehanna Securities, LLC","PIN":"Citadel Securities LLC","IVZ":"Group One Trading, L.P.","IVR":"Wolverine Trading, LLC","QQQ":"Wolverine Trading, LLC","NVDS":"Citadel Securities LLC","PYPT":"Wolverine Trading, LLC","TARK":"Belvedere Trading LLC","THCX":"Wolverine Trading, LLC","SARK":"Belvedere Trading LLC","TSLQ":"Citadel Securities LLC","NVTA":"Susquehanna Securities, LLC","INVH":"Susquehanna Securities, LLC","IVVD":"Belvedere Trading LLC","IONS":"Two Sigma Securities, LLC","IONQ":"Belvedere Trading LLC","IOVA":"Susquehanna Securities, LLC","VXZ":"GTS Securities LLC","VXX":"GTS Securities LLC","IPGP":"Citadel Securities LLC","IQ":"Susquehanna Securities, LLC","IQV":"Susquehanna Securities, LLC","IRTC":"Citadel Securities LLC","IRDM":"Citadel Securities LLC","IREN":"Group One Trading, L.P.","IRBT":"Susquehanna Securities, LLC","IRM":"Two Sigma Securities, LLC","IRNT":"Susquehanna Securities, LLC","IRWD":"Group One Trading, L.P.","IRS":"Wolverine Trading, LLC","USHY":"Wolverine Trading, LLC","ICF":"Susquehanna Securities, LLC","ICVT":"Citadel Securities LLC","IAGG":"Belvedere Trading LLC","IEFA":"Susquehanna Securities, LLC","HEFA":"Wolverine Trading, LLC","IGV":"Susquehanna Securities, LLC","IAUF":"Belvedere Trading LLC","IAU":"GTS Securities LLC","IEMG":"Susquehanna Securities, LLC","DVYE":"Belvedere Trading LLC","ESGE":"Belvedere Trading LLC","FM":"Belvedere Trading LLC","FILL":"Belvedere Trading LLC","LEMB":"Susquehanna Securities, LLC","VEGI":"Wolverine Trading, LLC","EWA":"GTS Securities LLC","EWK":"Susquehanna Securities, LLC","BKF":"Wolverine Trading, LLC","EWZ":"Citadel Securities LLC","EWC":"Citadel Securities LLC","EWQ":"Susquehanna Securities, LLC","RING":"Susquehanna Securities, LLC","EWG":"Citadel Securities LLC","EWH":"Citadel Securities LLC","EWI":"Group One Trading, L.P.","SCJ":"Belvedere Trading LLC","EWJ":"Citadel Securities LLC","EWW":"Susquehanna Securities, LLC","EWM":"Wolverine Trading, LLC","EWN":"Susquehanna Securities, LLC","EPP":"Citadel Securities LLC","EWS":"Susquehanna Securities, LLC","EWP":null,"EZA":"Citadel Securities LLC","EWY":"Citadel Securities LLC","EWD":"Wolverine Trading, LLC","EWL":"Susquehanna Securities, LLC","EWT":"Citadel Securities LLC","THD":"Wolverine Trading, LLC","TUR":"Susquehanna Securities, LLC","GVI":"Susquehanna Securities, LLC","HYXU":"Wolverine Trading, LLC","IDV":"Susquehanna Securities, LLC","CEMB":"Wolverine Trading, LLC","REM":"Susquehanna Securities, LLC","ECH":"Wolverine Trading, LLC","CNYA":"Belvedere Trading LLC","EFG":"Belvedere Trading LLC","EFAV":"Susquehanna Securities, LLC","EFV":"Belvedere Trading LLC","EEMV":"Susquehanna Securities, LLC","EZU":"Susquehanna Securities, LLC","PICK":"Susquehanna Securities, LLC","ACWV":"Susquehanna Securities, LLC","SLVP":"Wolverine Trading, LLC","INDA":"Wolverine Trading, LLC","USMV":"Susquehanna Securities, LLC","MTUM":"Wolverine Trading, LLC","QUAL":"Wolverine Trading, LLC","VLUE":"Wolverine Trading, LLC","IGE":"Belvedere Trading LLC","GSG":"Citadel Securities LLC","SLV":"GTS Securities LLC","STIP":"Citadel Securities LLC","SHYG":"Wolverine Trading, LLC","SHY":"Citadel Securities LLC","IGLB":"Susquehanna Securities, LLC","TLH":"Susquehanna Securities, LLC","TLT":"GTS Securities LLC","IEI":"Citadel Securities LLC","IEF":"GTS Securities LLC","AIA":"Belvedere Trading LLC","FXI":"Citadel Securities LLC","ECNS":"Belvedere Trading LLC","ISTB":"Belvedere Trading LLC","DGRO":"Belvedere Trading LLC","HDV":"Belvedere Trading LLC","IEUR":"Belvedere Trading LLC","IPAC":"Wolverine Trading, LLC","IXUS":"Susquehanna Securities, LLC","IJH":"GTS Securities LLC","IJR":"GTS Securities LLC","ITOT":"Susquehanna Securities, LLC","IUSG":"Belvedere Trading LLC","IUSV":"Belvedere Trading LLC","IVV":"Susquehanna Securities, LLC","IUSB":"Belvedere Trading LLC","AGG":"Susquehanna Securities, LLC","USRT":"Wolverine Trading, LLC","HEZU":"Belvedere Trading LLC","HEWG":"Belvedere Trading LLC","IHAK":"Wolverine Trading, LLC","SCZ":"Wolverine Trading, LLC","SUSB":"Belvedere Trading LLC","IEV":"Susquehanna Securities, LLC","IGM":"Belvedere Trading LLC","XT":"Belvedere Trading LLC","FALN":"Wolverine Trading, LLC","IXP":"Susquehanna Securities, LLC","IDNA":"Belvedere Trading LLC","ICLN":"Susquehanna Securities, LLC","WOOD":"Susquehanna Securities, LLC","IGF":"Belvedere Trading LLC","IXJ":"Belvedere Trading LLC","IOO":"Susquehanna Securities, LLC","IXC":"Susquehanna Securities, LLC","IXG":"Belvedere Trading LLC","MXI":"Belvedere Trading LLC","REET":"Wolverine Trading, LLC","IXN":"Belvedere Trading LLC","HEWJ":"Belvedere Trading LLC","HYG":"Citadel Securities LLC","LQD":"Susquehanna Securities, LLC","IFGL":"Belvedere Trading LLC","WPS":"Belvedere Trading LLC","INTF":"Belvedere Trading LLC","IGOV":"Susquehanna Securities, LLC","IBB":"Two Sigma Securities, LLC","SOXX":"Susquehanna Securities, LLC","IGSB":"Wolverine Trading, LLC","IGIB":"Susquehanna Securities, LLC","EMB":"Susquehanna Securities, LLC","ILF":"Citadel Securities LLC","MBB":"Susquehanna Securities, LLC","IWC":"Susquehanna Securities, LLC","ILCG":"Wolverine Trading, LLC","IMCG":"Wolverine Trading, LLC","AAXJ":"Susquehanna Securities, LLC","ACWI":"Susquehanna Securities, LLC","ACWX":"Belvedere Trading LLC","MCHI":"Susquehanna Securities, LLC","EFA":"Susquehanna Securities, LLC","EEM":"Susquehanna Securities, LLC","EUFN":"Susquehanna Securities, LLC","IQLT":"Belvedere Trading LLC","IVLU":"Wolverine Trading, LLC","EWU":"Citadel Securities LLC","SUSA":"Belvedere Trading LLC","SIZE":"Wolverine Trading, LLC","IGN":"Susquehanna Securities, LLC","MUB":"Citadel Securities LLC","ENZL":"Susquehanna Securities, LLC","PFF":"Susquehanna Securities, LLC","REZ":"Susquehanna Securities, LLC","IRBO":"Belvedere Trading LLC","IWB":"Wolverine Trading, LLC","IWF":"Susquehanna Securities, LLC","IWD":"Wolverine Trading, LLC","IWO":"Morgan Stanley & Co. LLC","IWN":"Morgan Stanley & Co. LLC","IWP":"Susquehanna Securities, LLC","IWS":"Susquehanna Securities, LLC","IWR":"Susquehanna Securities, LLC","IWX":"Belvedere Trading LLC","IWM":"Morgan Stanley & Co. LLC","IWV":"GTS Securities LLC","OEF":"Citadel Securities LLC","IVW":"Susquehanna Securities, LLC","IVE":"Belvedere Trading LLC","IJK":"Susquehanna Securities, LLC","IJJ":"Susquehanna Securities, LLC","IJT":"Susquehanna Securities, LLC","DVY":"Two Sigma Securities, LLC","IDRV":"Belvedere Trading LLC","SHV":"Wolverine Trading, LLC","IJS":"Susquehanna Securities, LLC","TIP":"Citadel Securities LLC","TFLO":"Wolverine Trading, LLC","LRGF":"Belvedere Trading LLC","IYM":"Citadel Securities LLC","IYE":"Susquehanna Securities, LLC","IYF":"Citadel Securities LLC","IHI":"Belvedere Trading LLC","IHE":"Morgan Stanley & Co. LLC","IYR":"Citadel Securities LLC","IYW":"Susquehanna Securities, LLC","IDU":"Susquehanna Securities, LLC","IAI":"Citadel Securities LLC","IYC":"Belvedere Trading LLC","IYH":"Susquehanna Securities, LLC","IHF":"Wolverine Trading, LLC","IEZ":"Citadel Securities LLC","IAT":"Citadel Securities LLC","SMLF":"Wolverine Trading, LLC","USIG":"Susquehanna Securities, LLC","IWFH":"Belvedere Trading LLC","CMDY":"Belvedere Trading LLC","CCRV":"Belvedere Trading LLC","COMT":"Citadel Securities LLC","LQDH":"Belvedere Trading LLC","HYGH":"Wolverine Trading, LLC","ITA":"Wolverine Trading, LLC","IEDI":"Group One Trading, L.P.","ITB":"Citadel Securities LLC","IFRA":"Belvedere Trading LLC","IEO":"Citadel Securities LLC","IYZ":"Wolverine Trading, LLC","IYT":"Citadel Securities LLC","GOVT":"Wolverine Trading, LLC","SVAL":"Belvedere Trading LLC","ISUN":"Wolverine Trading, LLC","ITP":"Citadel Securities LLC","ITUB":"Group One Trading, L.P.","ITOS":"Susquehanna Securities, LLC","ITRI":"Susquehanna Securities, LLC","ITT":"GTS Securities LLC","IZEA":"Belvedere Trading LLC","JPEM":"Belvedere Trading LLC","JPIN":"Susquehanna Securities, LLC","JEPI":"Wolverine Trading, LLC","JIRE":"Belvedere Trading LLC","JPUS":"Susquehanna Securities, LLC","JEPQ":"Wolverine Trading, LLC","JPST":"Wolverine Trading, LLC","JQUA":"Wolverine Trading, LLC","JVAL":"Wolverine Trading, LLC","JBL":"Susquehanna Securities, LLC","JACK":"Susquehanna Securities, LLC","JXN":"Citadel Securities LLC","J":"GTS Securities LLC","JAGX":"Citadel Securities LLC","JHX":"Citadel Securities LLC","JRVR":"Group One Trading, L.P.","JAMF":"Group One Trading, L.P.","JMBS":"Group One Trading, L.P.","JAAA":"Wolverine Trading, LLC","JHG":"Belvedere Trading LLC","JBI":"Group One Trading, L.P.","JANX":"Citadel Securities LLC","JSPR":"Group One Trading, L.P.","JAZZ":"Wolverine Trading, LLC","JBGS":"Susquehanna Securities, LLC","JD":"Citadel Securities LLC","JEF":"GTS Securities LLC","JELD":"Susquehanna Securities, LLC","JBLU":"Morgan Stanley & Co. LLC","FROG":"Citadel Securities LLC","JKS":"Wolverine Trading, LLC","JOAN":"Citadel Securities LLC","JOBY":"Susquehanna Securities, LLC","JBT":"Wolverine Trading, LLC","JHML":"Belvedere Trading LLC","JMSB":"Group One Trading, L.P.","JNJ":"GTS Securities LLC","JCI":"Wolverine Trading, LLC","JYNT":"Wolverine Trading, LLC","JLL":"GTS Securities LLC","YY":"Susquehanna Securities, LLC","BBCA":"Citadel Securities LLC","BBEU":"Citadel Securities LLC","AMJ":"Wolverine Trading, LLC","JPM":"Susquehanna Securities, LLC","JCPI":"Belvedere Trading LLC","JMST":"Belvedere Trading LLC","JMIA":"Wolverine Trading, LLC","JNPR":"GTS Securities LLC","KAI":"Susquehanna Securities, LLC","KALU":"Susquehanna Securities, LLC","KLTR":"Group One Trading, L.P.","KALV":"Citadel Securities LLC","KAMN":"Susquehanna Securities, LLC","KNDI":"Group One Trading, L.P.","BZ":"Susquehanna Securities, LLC","TOON":"Susquehanna Securities, LLC","KRTX":"Group One Trading, L.P.","KPTI":"Susquehanna Securities, LLC","KPLT":"Susquehanna Securities, LLC","KYN":"Wolverine Trading, LLC","KB":"Susquehanna Securities, LLC","KBH":"Two Sigma Securities, LLC","KBR":"Susquehanna Securities, LLC","BEKE":"Citadel Securities LLC","KRNY":"Citadel Securities LLC","K":"Susquehanna Securities, LLC","KELYA":"Belvedere Trading LLC","KMT":"Wolverine Trading, LLC","KW":"Belvedere Trading LLC","KEN":"Group One Trading, L.P.","KVUE":"Citadel Securities LLC","KROS":"Group One Trading, L.P.","KDP":"GTS Securities LLC","KTCC":"Belvedere Trading LLC","KEY":"Two Sigma Securities, LLC","KEYS":"Wolverine Trading, LLC","KZR":"Citadel Securities LLC","KFRC":"Group One Trading, L.P.","KVSA":"Susquehanna Securities, LLC","KRC":"Wolverine Trading, LLC","KE":"Belvedere Trading LLC","KRP":"Susquehanna Securities, LLC","KMB":"Susquehanna Securities, LLC","KIM":"Two Sigma Securities, LLC","KMI":"Wolverine Trading, LLC","KNTK":"Group One Trading, L.P.","KC":"Group One Trading, L.P.","KNSA":"Susquehanna Securities, LLC","KNTE":"Belvedere Trading LLC","KGC":"Susquehanna Securities, LLC","KNSL":"Wolverine Trading, LLC","KEX":"Wolverine Trading, LLC","KIRK":"Susquehanna Securities, LLC","KRG":"Susquehanna Securities, LLC","KKR":"Wolverine Trading, LLC","KREF":"Susquehanna Securities, LLC","KLAC":"Susquehanna Securities, LLC","KLXE":"Group One Trading, L.P.","KNX":"Citadel Securities LLC","KNOP":"Wolverine Trading, LLC","KN":"Citadel Securities LLC","KOD":"Susquehanna Securities, LLC","KSS":"Citadel Securities LLC","PHG":"Citadel Securities LLC","KTB":"Group One Trading, L.P.","KOPN":"Citadel Securities LLC","KOP":"Citadel Securities LLC","KEP":"Group One Trading, L.P.","KFY":"Susquehanna Securities, LLC","KRNT":"Wolverine Trading, LLC","KRMD":"Citadel Securities LLC","KOS":"Wolverine Trading, LLC","KHC":"Susquehanna Securities, LLC","KCCA":"Belvedere Trading LLC","KWEB":"Citadel Securities LLC","KARS":"Citadel Securities LLC","KMED":"Belvedere Trading LLC","KEUA":"Group One Trading, L.P.","KRBN":"Citadel Securities LLC","KTEC":"Group One Trading, L.P.","BNDD":"Citadel Securities LLC","IVOL":"Belvedere Trading LLC","KTOS":"Susquehanna Securities, LLC","DNUT":"Susquehanna Securities, LLC","KR":"Susquehanna Securities, LLC","KRON":"Group One Trading, L.P.","KRO":"Susquehanna Securities, LLC","KRYS":"Wolverine Trading, LLC","KT":"Susquehanna Securities, LLC","KBNT":"Susquehanna Securities, LLC","KLIC":"GTS Securities LLC","KULR":"Susquehanna Securities, LLC","KURA":"Susquehanna Securities, LLC","KYMR":"Citadel Securities LLC","KD":"Wolverine Trading, LLC","LHX":"Susquehanna Securities, LLC","LZB":"Susquehanna Securities, LLC","LH":"Morgan Stanley & Co. LLC","LADR":"Susquehanna Securities, LLC","LKFN":"Susquehanna Securities, LLC","LAKE":"Susquehanna Securities, LLC","LRCX":"Citadel Securities LLC","LAMR":"GTS Securities LLC","LW":"Group One Trading, L.P.","LE":"Susquehanna Securities, LLC","LSTR":"Citadel Securities LLC","LNTH":"Susquehanna Securities, LLC","LGO":"Citadel Securities LLC","LRMR":"Group One Trading, L.P.","LVS":"Morgan Stanley & Co. LLC","LTCH":"Wolverine Trading, LLC","SWIM":"Belvedere Trading LLC","LSCC":"Citadel Securities LLC","RODM":"Wolverine Trading, LLC","EL":"Citadel Securities LLC","LAUR":"Group One Trading, L.P.","LAZ":"Susquehanna Securities, LLC","LCII":"Morgan Stanley & Co. LLC","LFLY":"Belvedere Trading LLC","LPTX":"Citadel Securities LLC","LEA":"Susquehanna Securities, LLC","LZ":"Citadel Securities LLC","LEGN":"Citadel Securities LLC","LEG":"Susquehanna Securities, LLC","LDOS":"Group One Trading, L.P.","LMAT":"Group One Trading, L.P.","LMND":"Citadel Securities LLC","LC":"Citadel Securities LLC","TREE":"Wolverine Trading, LLC","LEN":"Citadel Securities LLC","LII":"Wolverine Trading, LLC","DRS":"Wolverine Trading, LLC","LSAK":"Susquehanna Securities, LLC","LESL":"Susquehanna Securities, LLC","LEVI":"Citadel Securities LLC","LXRX":"Susquehanna Securities, LLC","LX":"Susquehanna Securities, LLC","LPL":"Susquehanna Securities, LLC","LGIH":"Wolverine Trading, LLC","LI":"Citadel Securities LLC","LICY":"Citadel Securities LLC","LBRDA":"Susquehanna Securities, LLC","LBRDK":"Wolverine Trading, LLC","LBRT":"Belvedere Trading LLC","LBTYA":"GTS Securities LLC","LBTYK":"Citadel Securities LLC","LILAK":"Wolverine Trading, LLC","LSXMA":"Susquehanna Securities, LLC","LSXMK":"Susquehanna Securities, LLC","FWONA":"Susquehanna Securities, LLC","FWONK":"Citadel Securities LLC","LTRPA":"Susquehanna Securities, LLC","LTH":"Group One Trading, L.P.","LFCR":"Susquehanna Securities, LLC","LFMD":"Belvedere Trading LLC","LFST":"Wolverine Trading, LLC","LFVN":"Belvedere Trading LLC","LGND":"Wolverine Trading, LLC","LNW":"Morgan Stanley & Co. LLC","LTBR":"Belvedere Trading LLC","ZEV":"Citadel Securities LLC","LSPD":"Wolverine Trading, LLC","LWLG":"Belvedere Trading LLC","LILM":"Belvedere Trading LLC","LLY":"Citadel Securities LLC","LMB":"Susquehanna Securities, LLC","LMNL":"Group One Trading, L.P.","LMNR":"Susquehanna Securities, LLC","LINC":"Susquehanna Securities, LLC","LECO":"Citadel Securities LLC","LNC":"Susquehanna Securities, LLC","LIN":"Susquehanna Securities, LLC","LNN":"Citadel Securities LLC","LCTX":"Group One Trading, L.P.","LGHL":"Susquehanna Securities, LLC","LGF.A":"Group One Trading, L.P.","LGF.B":"Group One Trading, L.P.","LPCN":"Susquehanna Securities, LLC","YVR":"Citadel Securities LLC","LQDA":"Citadel Securities LLC","LQDT":"Citadel Securities LLC","BAD":"Belvedere Trading LLC","CCOR":"Belvedere Trading LLC","INFL":"Wolverine Trading, LLC","OVLH":"Belvedere Trading LLC","OVT":"Wolverine Trading, LLC","METV":"Citadel Securities LLC","MEME":"Group One Trading, L.P.","BETZ":"Citadel Securities LLC","NERD":"Belvedere Trading LLC","SPRX":"Belvedere Trading LLC","TILL":"Belvedere Trading LLC","LAD":"Susquehanna Securities, LLC","LAC":"Group One Trading, L.P.","DBMF":"Citadel Securities LLC","LFUS":"Susquehanna Securities, LLC","LIVN":"GTS Securities LLC","LYV":"Susquehanna Securities, LLC","LOB":"Wolverine Trading, LLC","LTHM":"Wolverine Trading, LLC","LVO":"Citadel Securities LLC","LPSN":"GTS Securities LLC","RAMP":"Citadel Securities LLC","LVOX":"Susquehanna Securities, LLC","LVWR":"Wolverine Trading, LLC","LIZI":"Citadel Securities LLC","LKQ":"GTS Securities LLC","LL":"GTS Securities LLC","LYG":"Citadel Securities LLC","LMFA":"Citadel Securities LLC","LDI":"Susquehanna Securities, LLC","LOCL":"Wolverine Trading, LLC","LMT":"Susquehanna Securities, LLC","L":"Susquehanna Securities, LLC","LGMK":"Group One Trading, L.P.","LOGI":"Citadel Securities LLC","LOMA":"Group One Trading, L.P.","LOOP":"Belvedere Trading LLC","RIDEQ":"Citadel Securities LLC","LTRY":"Wolverine Trading, LLC","LPX":"Wolverine Trading, LLC","LOVE":"Susquehanna Securities, LLC","LOW":"Citadel Securities LLC","LPLA":"Citadel Securities LLC","LXU":"Citadel Securities LLC","LYTS":"Susquehanna Securities, LLC","LCID":"Citadel Securities LLC","LHDXQ":"Citadel Securities LLC","LU":"Citadel Securities LLC","LULU":"Citadel Securities LLC","LVLU":"Wolverine Trading, LLC","LUMN":"Citadel Securities LLC","LITE":"Citadel Securities LLC","LAZR":"Citadel Securities LLC","LUNA":"Wolverine Trading, LLC","LXFR":"Wolverine Trading, LLC","LXP":"Susquehanna Securities, LLC","LYEL":"Group One Trading, L.P.","LYFT":"Morgan Stanley & Co. LLC","LYB":"Susquehanna Securities, LLC","MTB":"Wolverine Trading, LLC","MDC":"Citadel Securities LLC","MHO":"Susquehanna Securities, LLC","MAC":"Citadel Securities LLC","MTSI":"Wolverine Trading, LLC","MGNX":"Citadel Securities LLC","M":"GTS Securities LLC","SHOO":"Susquehanna Securities, LLC","MSGE":"Susquehanna Securities, LLC","MSGS":"Susquehanna Securities, LLC","MDGL":"Citadel Securities LLC","MAG":"Susquehanna Securities, LLC","MMP":"Wolverine Trading, LLC","MGTA":"Group One Trading, L.P.","MGIC":"Wolverine Trading, LLC","MGA":"GTS Securities LLC","MX":"Belvedere Trading LLC","MGNI":"Citadel Securities LLC","MGY":"Wolverine Trading, LLC","MHLD":"Wolverine Trading, LLC","SECT":"Belvedere Trading LLC","MAIN":"Group One Trading, L.P.","TMAT":"Morgan Stanley & Co. LLC","MMYT":"Group One Trading, L.P.","MBUU":"Wolverine Trading, LLC","TUSK":"Group One Trading, L.P.","TPYP":"Belvedere Trading LLC","MANU":"Susquehanna Securities, LLC","MANH":"Wolverine Trading, LLC","MNTX":"Susquehanna Securities, LLC","MTW":"Group One Trading, L.P.","MNKD":"Citadel Securities LLC","MAN":"Citadel Securities LLC","MFC":"Belvedere Trading LLC","MARA":"Wolverine Trading, LLC","MRO":"Susquehanna Securities, LLC","MPC":"Susquehanna Securities, LLC","MRVI":"Citadel Securities LLC","MMI":"Belvedere Trading LLC","MCS":"Belvedere Trading LLC","MRIN":"Belvedere Trading LLC","MPX":"Belvedere Trading LLC","HZO":"Susquehanna Securities, LLC","MRNS":"Susquehanna Securities, LLC","MKL":"Susquehanna Securities, LLC","MKTX":"Susquehanna Securities, LLC","MKFG":"Wolverine Trading, LLC","MQ":"Wolverine Trading, LLC","MAR":"GTS Securities LLC","VAC":"GTS Securities LLC","MMC":"Susquehanna Securities, LLC","MRTN":"Susquehanna Securities, LLC","MLM":"Susquehanna Securities, LLC","MMLP":"Susquehanna Securities, LLC","MRVL":"Citadel Securities LLC","MAS":"Morgan Stanley & Co. LLC","MASI":"Susquehanna Securities, LLC","DOOR":"Group One Trading, L.P.","MTZ":"Wolverine Trading, LLC","MBC":"Group One Trading, L.P.","MA":"Citadel Securities LLC","MTDR":"Citadel Securities LLC","MTCH":"Susquehanna Securities, LLC","MTLS":"Wolverine Trading, LLC","SIXB":"Susquehanna Securities, LLC","MTRN":"Citadel Securities LLC","MATV":"Susquehanna Securities, LLC","MTRX":"Wolverine Trading, LLC","MATX":"Citadel Securities LLC","MAT":"Citadel Securities LLC","MTTR":"Susquehanna Securities, LLC","MATW":"GTS Securities LLC","MXCT":"Group One Trading, L.P.","MAXN":"Group One Trading, L.P.","MMS":"Group One Trading, L.P.","MXL":"Citadel Securities LLC","MEC":"Wolverine Trading, LLC","MBI":"Belvedere Trading LLC","MKC":"Wolverine Trading, LLC","MCD":"Susquehanna Securities, LLC","MUX":"Susquehanna Securities, LLC","MCK":"Citadel Securities LLC","MDU":"Belvedere Trading LLC","MFIN":"Susquehanna Securities, LLC","MDVL":"Susquehanna Securities, LLC","MAX":"Susquehanna Securities, LLC","MPW":"Group One Trading, L.P.","MNOV":"Susquehanna Securities, LLC","MED":"Morgan Stanley & Co. LLC","MEDP":"Susquehanna Securities, LLC","MDT":"Susquehanna Securities, LLC","MEIP":"Group One Trading, L.P.","MGTX":"Citadel Securities LLC","MLCO":"Susquehanna Securities, LLC","MELI":"Wolverine Trading, LLC","MBWM":"Wolverine Trading, LLC","MERC":"Citadel Securities LLC","MBIN":"Citadel Securities LLC","MRK":"Wolverine Trading, LLC","MFH":"Belvedere Trading LLC","MCY":"Wolverine Trading, LLC","MRCY":"Wolverine Trading, LLC","MLNK":"Susquehanna Securities, LLC","MMSI":"Wolverine Trading, LLC","MTH":"Susquehanna Securities, LLC","MACK":"Susquehanna Securities, LLC","MRSN":"Susquehanna Securities, LLC","MRUS":"Susquehanna Securities, LLC","MESA":"Susquehanna Securities, LLC","MSB":"Group One Trading, L.P.","MESO":"Citadel Securities LLC","MMAT":"Citadel Securities LLC","META":"Susquehanna Securities, LLC","MTA":"Susquehanna Securities, LLC","MEOH":"Group One Trading, L.P.","MEI":"Wolverine Trading, LLC","MET":"Citadel Securities LLC","MCBS":"Citadel Securities LLC","MCB":"Citadel Securities LLC","MTD":"Susquehanna Securities, LLC","MFA":"Citadel Securities LLC","MGEE":"Susquehanna Securities, LLC","MTG":"GTS Securities LLC","MGM":"Two Sigma Securities, LLC","MGPI":"Citadel Securities LLC","MCHP":"Two Sigma Securities, LLC","MU":"Susquehanna Securities, LLC","MSFT":"Susquehanna Securities, LLC","MSTR":"Susquehanna Securities, LLC","MVST":"Wolverine Trading, LLC","MVIS":"Wolverine Trading, LLC","MPB":"Wolverine Trading, LLC","MAA":"Wolverine Trading, LLC","MFIC":"GTS Securities LLC","MIDD":"GTS Securities LLC","MSBI":"Wolverine Trading, LLC","MOFG":"Group One Trading, L.P.","MIST":"Group One Trading, L.P.","MLR":"Group One Trading, L.P.","MLKN":"Belvedere Trading LLC","TIGO":"Group One Trading, L.P.","MDXG":"Group One Trading, L.P.","MNDO":"Belvedere Trading LLC","MNMD":"Belvedere Trading LLC","MIND":"Wolverine Trading, LLC","MTX":"Susquehanna Securities, LLC","MRUT":null,"XSP":null,"MNSO":"Wolverine Trading, LLC","MRTX":"Susquehanna Securities, LLC","MIR":"Susquehanna Securities, LLC","MIRO":"Group One Trading, L.P.","MIRM":"Group One Trading, L.P.","AVO":"Citadel Securities LLC","MCW":"Citadel Securities LLC","MG":"Wolverine Trading, LLC","MITK":"Susquehanna Securities, LLC","MUFG":"Citadel Securities LLC","MIXT":"Wolverine Trading, LLC","MFG":"Wolverine Trading, LLC","MKSI":"GTS Securities LLC","MBLY":"Citadel Securities LLC","MODN":"Citadel Securities LLC","MRNA":"Group One Trading, L.P.","MOD":"Wolverine Trading, LLC","MODV":"Wolverine Trading, LLC","MC":"Citadel Securities LLC","MOGO":"Morgan Stanley & Co. LLC","MHK":"GTS Securities LLC","MTEM":"Group One Trading, L.P.","MOH":"Citadel Securities LLC","TAP":"Susquehanna Securities, LLC","MNTS":"Susquehanna Securities, LLC","MCRI":"Susquehanna Securities, LLC","MNDY":"Wolverine Trading, LLC","MDLZ":"Susquehanna Securities, LLC","ML":"Wolverine Trading, LLC","MDB":"Citadel Securities LLC","MPWR":"Susquehanna Securities, LLC","MNRO":"GTS Securities LLC","MRCC":"Wolverine Trading, LLC","MNST":"Susquehanna Securities, LLC","MNTK":"Susquehanna Securities, LLC","MEG":"Citadel Securities LLC","MCO":"Wolverine Trading, LLC","CAF":"Belvedere Trading LLC","MS":"Susquehanna Securities, LLC","CVIE":"Belvedere Trading LLC","CVLC":"Belvedere Trading LLC","CDEI":"Belvedere Trading LLC","CVSE":"Belvedere Trading LLC","MORN":"Citadel Securities LLC","MORF":"Citadel Securities LLC","MOS":"GTS Securities LLC","MPAA":"Belvedere Trading LLC","MSI":"Wolverine Trading, LLC","MOV":"Wolverine Trading, LLC","MOXC":"Susquehanna Securities, LLC","MP":"Group One Trading, L.P.","MPLX":"Susquehanna Securities, LLC","COOP":"Group One Trading, L.P.","MRC":"Wolverine Trading, LLC","MSA":"Citadel Securities LLC","MSM":"Citadel Securities LLC","MXEF":null,"MXEA":null,"MSCI":"Susquehanna Securities, LLC","MLI":"Susquehanna Securities, LLC","MWA":"Group One Trading, L.P.","MULN":"Group One Trading, L.P.","MPLN":"Susquehanna Securities, LLC","MUR":"Susquehanna Securities, LLC","MUSA":"Susquehanna Securities, LLC","MVO":"Group One Trading, L.P.","MYE":"Group One Trading, L.P.","MYMD":"Group One Trading, L.P.","MYRG":"Wolverine Trading, LLC","MYGN":"Susquehanna Securities, LLC","MYTE":"Belvedere Trading LLC","NABL":"Wolverine Trading, LLC","NAAS":"Group One Trading, L.P.","NBR":"Citadel Securities LLC","NNDM":"Citadel Securities LLC","NNOX":"Group One Trading, L.P.","NANOS":null,"NSTG":"Susquehanna Securities, LLC","NNVC":"Group One Trading, L.P.","NSSC":"Group One Trading, L.P.","NDX":null,"NDAQ":"Susquehanna Securities, LLC","NTRA":"Wolverine Trading, LLC","FIZZ":"Wolverine Trading, LLC","NBHC":"Susquehanna Securities, LLC","NCMI":"Citadel Securities LLC","NFG":"Group One Trading, L.P.","NGG":"Susquehanna Securities, LLC","NHC":"Susquehanna Securities, LLC","NATI":"Belvedere Trading LLC","NRC":"Citadel Securities LLC","NSA":"Citadel Securities LLC","EYE":"Wolverine Trading, LLC","NTCO":"Susquehanna Securities, LLC","NGS":"Wolverine Trading, LLC","NGVC":"Susquehanna Securities, LLC","NHTC":"Belvedere Trading LLC","NRP":"Citadel Securities LLC","NATR":"Group One Trading, L.P.","NWG":"Wolverine Trading, LLC","NAUT":"Susquehanna Securities, LLC","NLS":"Wolverine Trading, LLC","NAVB":"Wolverine Trading, LLC","NAVI":"Citadel Securities LLC","NVGS":"Morgan Stanley & Co. LLC","NM":"Wolverine Trading, LLC","NMM":"Group One Trading, L.P.","NVTS":"Wolverine Trading, LLC","NBTB":"Citadel Securities LLC","NCNO":"Citadel Securities LLC","NCR":"Citadel Securities LLC","NKTR":"GTS Securities LLC","NNI":"Wolverine Trading, LLC","NMRD":"Belvedere Trading LLC","NGMS":"Belvedere Trading LLC","NEOG":"Group One Trading, L.P.","NEO":"Group One Trading, L.P.","NLTX":"Group One Trading, L.P.","NEON":"Susquehanna Securities, LLC","NRDS":"Susquehanna Securities, LLC","NRDY":"Belvedere Trading LLC","NTAP":"GTS Securities LLC","NTES":"Susquehanna Securities, LLC","NFLX":"Susquehanna Securities, LLC","NTGR":"Citadel Securities LLC","NTCT":"GTS Securities LLC","NTWK":"Wolverine Trading, LLC","NTST":"Citadel Securities LLC","NBIX":"Susquehanna Securities, LLC","STIM":"Susquehanna Securities, LLC","NMTC":"Group One Trading, L.P.","NVRO":"Citadel Securities LLC","NFE":"Susquehanna Securities, LLC","NFGC":"Citadel Securities LLC","NGD":"GTS Securities LLC","NMFC":"Belvedere Trading LLC","EDU":"Citadel Securities LLC","NEWP":"Wolverine Trading, LLC","NEWR":"Susquehanna Securities, LLC","NYCB":"Susquehanna Securities, LLC","NYT":"Citadel Securities LLC","NEGG":"Susquehanna Securities, LLC","NWL":"Susquehanna Securities, LLC","NMRK":"Susquehanna Securities, LLC","NEU":"Wolverine Trading, LLC","NEM":"Susquehanna Securities, LLC","NR":"Belvedere Trading LLC","NWSA":"Susquehanna Securities, LLC","NWS":"Belvedere Trading LLC","NEWT":"Wolverine Trading, LLC","NEXA":"Belvedere Trading LLC","NXE":"Citadel Securities LLC","NXDT":"Belvedere Trading LLC","NREF":"Susquehanna Securities, LLC","NXRT":"Belvedere Trading LLC","NXST":"Susquehanna Securities, LLC","NEXT":"Wolverine Trading, LLC","KIND":"Belvedere Trading LLC","NEE":"Wolverine Trading, LLC","NEP":"Group One Trading, L.P.","NXGN":"Citadel Securities LLC","NEX":"Citadel Securities LLC","NXT":"Citadel Securities LLC","NGL":"Wolverine Trading, LLC","NICE":"GTS Securities LLC","NHWK":"Citadel Securities LLC","NKE":"Citadel Securities LLC","NKLA":"Wolverine Trading, LLC","NINE":"Susquehanna Securities, LLC","NIO":"Citadel Securities LLC","NI":"Group One Trading, L.P.","NIU":"Group One Trading, L.P.","NKTX":"Group One Trading, L.P.","LASR":"Citadel Securities LLC","NMIH":"Susquehanna Securities, LLC","NNBR":"Belvedere Trading LLC","NNN":"GTS Securities LLC","NOAH":"Susquehanna Securities, LLC","NE":"Susquehanna Securities, LLC","NOK":"Susquehanna Securities, LLC","NOMD":"Susquehanna Securities, LLC","NMR":"Wolverine Trading, LLC","NDLS":"Susquehanna Securities, LLC","NAT":"Group One Trading, L.P.","NDSN":"Susquehanna Securities, LLC","JWN":"Susquehanna Securities, LLC","NSC":"Citadel Securities LLC","NOA":"Wolverine Trading, LLC","NECB":"Belvedere Trading LLC","NAK":"Susquehanna Securities, LLC","GDVD":"Belvedere Trading LLC","NOG":"Group One Trading, L.P.","NSTB":"Susquehanna Securities, LLC","NTRS":"GTS Securities LLC","NFBK":"Wolverine Trading, LLC","NOC":"Citadel Securities LLC","NWN":"Citadel Securities LLC","NWPX":"Wolverine Trading, LLC","NWE":"Susquehanna Securities, LLC","NCLH":"Wolverine Trading, LLC","NOV":"Citadel Securities LLC","NVMI":"Wolverine Trading, LLC","NG":"Susquehanna Securities, LLC","NOVT":"Citadel Securities LLC","NVS":"Susquehanna Securities, LLC","NVAX":"Citadel Securities LLC","NVO":"Morgan Stanley & Co. LLC","NVCR":"Susquehanna Securities, LLC","DNOW":"Citadel Securities LLC","NRG":"GTS Securities LLC","NRXP":"Belvedere Trading LLC","NU":"Citadel Securities LLC","NUS":"Wolverine Trading, LLC","BURU":"Wolverine Trading, LLC","NUE":"Susquehanna Securities, LLC","NRIX":"Citadel Securities LLC","SMR":"Belvedere Trading LLC","NS":"Wolverine Trading, LLC","NTNX":"Susquehanna Securities, LLC","NTR":"Citadel Securities LLC","NUVL":"Group One Trading, L.P.","NUVA":"Susquehanna Securities, LLC","NUVB":"Belvedere Trading LLC","NAN":"Belvedere Trading LLC","NVEI":"Citadel Securities LLC","NVVE":"Belvedere Trading LLC","NVEE":"Citadel Securities LLC","NVT":"Susquehanna Securities, LLC","NVDA":"GTS Securities LLC","NXPI":"Susquehanna Securities, LLC","NYMXF":"Group One Trading, L.P.","OI":"Citadel Securities LLC","OCSL":"Citadel Securities LLC","OTLY":"Citadel Securities LLC","OBE":"Group One Trading, L.P.","OXY":"GTS Securities LLC","OPTT":"Group One Trading, L.P.","OII":"Citadel Securities LLC","OCFC":"Group One Trading, L.P.","OCGN":"Citadel Securities LLC","OCUL":"Citadel Securities LLC","OCUP":"Group One Trading, L.P.","OCN":"Group One Trading, L.P.","OMEX":"Morgan Stanley & Co. LLC","OPAD":"Citadel Securities LLC","OPI":"Belvedere Trading LLC","OFG":"Wolverine Trading, LLC","OFS":"Group One Trading, L.P.","OGE":"Wolverine Trading, LLC","OIS":"Susquehanna Securities, LLC","OKTA":"Susquehanna Securities, LLC","OLPX":"Citadel Securities LLC","ODFL":"Susquehanna Securities, LLC","ONB":"GTS Securities LLC","ORI":"Wolverine Trading, LLC","OSBC":"Wolverine Trading, LLC","OLMA":"Belvedere Trading LLC","OLN":"Two Sigma Securities, LLC","OLK":"Citadel Securities LLC","OLLI":"Citadel Securities LLC","OLO":"Susquehanna Securities, LLC","ZEUS":"Belvedere Trading LLC","OHI":"Susquehanna Securities, LLC","OMGA":"Susquehanna Securities, LLC","OMER":"Citadel Securities LLC","OMCL":"Susquehanna Securities, LLC","OMC":"Susquehanna Securities, LLC","ONON":"Citadel Securities LLC","ON":"Wolverine Trading, LLC","ONTF":"Citadel Securities LLC","OCX":"Group One Trading, L.P.","ONTX":"Belvedere Trading LLC","ONCT":"Citadel Securities LLC","ONDS":"Citadel Securities LLC","OGS":"Wolverine Trading, LLC","OLP":"Belvedere Trading LLC","OSS":"Wolverine Trading, LLC","OMF":"Citadel Securities LLC","OKE":"Susquehanna Securities, LLC","OSPN":"GTS Securities LLC","OSW":"Wolverine Trading, LLC","ONEW":"Citadel Securities LLC","ONTO":"GTS Securities LLC","OTRK":"Belvedere Trading LLC","OOMA":"Wolverine Trading, LLC","OPBK":"Belvedere Trading LLC","OPAL":"Group One Trading, L.P.","LPRO":"Wolverine Trading, LLC","OTEX":"Susquehanna Securities, LLC","OPEN":"Group One Trading, L.P.","KAR":"Group One Trading, L.P.","OPRA":"Group One Trading, L.P.","OPK":"Group One Trading, L.P.","OPRT":"Wolverine Trading, LLC","OPY":"Susquehanna Securities, LLC","OPFI":"Group One Trading, L.P.","OPRX":"Wolverine Trading, LLC","OPCH":"Susquehanna Securities, LLC","ORCL":"Citadel Securities LLC","ORMP":"Group One Trading, L.P.","ORAN":"Group One Trading, L.P.","OSUR":"Citadel Securities LLC","OIG":"Wolverine Trading, LLC","ORC":"Wolverine Trading, LLC","ORLY":"Wolverine Trading, LLC","OGI":"Citadel Securities LLC","ORGO":"Group One Trading, L.P.","OGN":"Susquehanna Securities, LLC","ONVO":"Citadel Securities LLC","ORGS":"Belvedere Trading LLC","ORIC":"Susquehanna Securities, LLC","OCG":"Citadel Securities LLC","OBK":"Citadel Securities LLC","ORGN":"Belvedere Trading LLC","OESX":"Susquehanna Securities, LLC","ORN":"Belvedere Trading LLC","ONL":"Susquehanna Securities, LLC","OEC":"Wolverine Trading, LLC","ORLA":"Citadel Securities LLC","ORA":"Susquehanna Securities, LLC","OFIX":"Susquehanna Securities, LLC","KIDS":"Wolverine Trading, LLC","OSCR":"Citadel Securities LLC","OSK":"Morgan Stanley & Co. LLC","OSIS":"Citadel Securities LLC","OR":"Group One Trading, L.P.","OTIS":"Citadel Securities LLC","OTMO":"Group One Trading, L.P.","OTTR":"Group One Trading, L.P.","OUST":"Belvedere Trading LLC","OB":"Citadel Securities LLC","OUT":"Morgan Stanley & Co. LLC","OM":"Group One Trading, L.P.","OSG":"Group One Trading, L.P.","OSTK":"Citadel Securities LLC","OVID":"Citadel Securities LLC","OVV":"Susquehanna Securities, LLC","OMI":"Citadel Securities LLC","OC":"Citadel Securities LLC","OWLT":"Belvedere Trading LLC","OXM":"Susquehanna Securities, LLC","OXSQ":"Wolverine Trading, LLC","PX":"Wolverine Trading, LLC","PCAR":"Susquehanna Securities, LLC","ODDS":"Belvedere Trading LLC","AFTY":"Citadel Securities LLC","SRVR":"Belvedere Trading LLC","INDS":"Belvedere Trading LLC","ALTL":"Wolverine Trading, LLC","PALC":"Belvedere Trading LLC","PTNQ":"Belvedere Trading LLC","PTBD":"Wolverine Trading, LLC","PTLC":"Belvedere Trading LLC","COWZ":"Belvedere Trading LLC","CALF":"Belvedere Trading LLC","PACB":"Group One Trading, L.P.","PCRX":"Susquehanna Securities, LLC","PKG":"Two Sigma Securities, LLC","PTVE":"Susquehanna Securities, LLC","PACW":"Susquehanna Securities, LLC","PGY":"Belvedere Trading LLC","PD":"Citadel Securities LLC","PAGS":"Susquehanna Securities, LLC","PLTR":"Morgan Stanley & Co. LLC","PTN":"Belvedere Trading LLC","PANW":"Susquehanna Securities, LLC","PLMR":"Citadel Securities LLC","PAM":"Wolverine Trading, LLC","PAAS":"Two Sigma Securities, LLC","PANL":"Group One Trading, L.P.","PZZA":"GTS Securities LLC","PARR":"Wolverine Trading, LLC","PAR":"Susquehanna Securities, LLC","FNA":"Susquehanna Securities, LLC","PARAA":"Susquehanna Securities, LLC","PARA":"Susquehanna Securities, LLC","PGRE":"Group One Trading, L.P.","PRTK":"Citadel Securities LLC","PKE":"Wolverine Trading, LLC","PCYG":"Wolverine Trading, LLC","PK":"Morgan Stanley & Co. LLC","PRK":"Susquehanna Securities, LLC","PKOH":"Susquehanna Securities, LLC","PH":"GTS Securities LLC","PSN":"Wolverine Trading, LLC","PASG":"Belvedere Trading LLC","CASH":"Susquehanna Securities, LLC","PAX":"Citadel Securities LLC","PATK":"Susquehanna Securities, LLC","PDCO":"Susquehanna Securities, LLC","PTEN":"Citadel Securities LLC","PAVM":"Belvedere Trading LLC","PAYX":"Citadel Securities LLC","PAYC":"Citadel Securities LLC","PYCR":"Citadel Securities LLC","PCTY":"Susquehanna Securities, LLC","PAY":"Susquehanna Securities, LLC","PAYO":"Citadel Securities LLC","PYPL":"Citadel Securities LLC","PSFE":"Belvedere Trading LLC","PAYS":"Belvedere Trading LLC","PBF":"Susquehanna Securities, LLC","CNXN":"Citadel Securities LLC","PCB":"Citadel Securities LLC","PDCE":"Citadel Securities LLC","PDD":"Susquehanna Securities, LLC","PDFS":"Wolverine Trading, LLC","PDSB":"Susquehanna Securities, LLC","BTU":"Susquehanna Securities, LLC","PKST":"Citadel Securities LLC","PSO":"Belvedere Trading LLC","PEB":"Susquehanna Securities, LLC","MD":"GTS Securities LLC","PEGA":"Susquehanna Securities, LLC","PTON":"Morgan Stanley & Co. LLC","PBA":"Group One Trading, L.P.","PENN":"Susquehanna Securities, LLC","PNTG":"Belvedere Trading LLC","PFLT":"Citadel Securities LLC","PNNT":"Wolverine Trading, LLC","PRET":"Group One Trading, L.P.","PFSI":"Citadel Securities LLC","PMT":"Wolverine Trading, LLC","PAG":"GTS Securities LLC","PNR":"Wolverine Trading, LLC","PEN":"Susquehanna Securities, LLC","PEBO":"Susquehanna Securities, LLC","PEP":"Susquehanna Securities, LLC","PRSO":"Susquehanna Securities, LLC","PRDO":"Susquehanna Securities, LLC","PWP":"Wolverine Trading, LLC","PRFT":"Wolverine Trading, LLC","PFGC":"Wolverine Trading, LLC","PFMT":"Wolverine Trading, LLC","PRM":"Susquehanna Securities, LLC","PERI":"Susquehanna Securities, LLC","PPIH":"Belvedere Trading LLC","PBT":"Citadel Securities LLC","PR":"Wolverine Trading, LLC","PVL":"Wolverine Trading, LLC","PRGO":"Wolverine Trading, LLC","WOOF":"Susquehanna Securities, LLC","PETQ":"Wolverine Trading, LLC","PETS":"Group One Trading, L.P.","PBR":"Morgan Stanley & Co. LLC","PFE":"Susquehanna Securities, LLC","PFSW":"Susquehanna Securities, LLC","PCG":"Citadel Securities LLC","PGTI":"Wolverine Trading, LLC","PMCB":"Belvedere Trading LLC","PHAT":"Susquehanna Securities, LLC","PHXM":"Citadel Securities LLC","CELL":"Citadel Securities LLC","PM":"Susquehanna Securities, LLC","PSX":"Susquehanna Securities, LLC","PECO":"Susquehanna Securities, LLC","FENG":"Wolverine Trading, LLC","PLAB":"Morgan Stanley & Co. LLC","PHR":"Wolverine Trading, LLC","PHUN":"Belvedere Trading LLC","PHX":"Wolverine Trading, LLC","DOC":"Wolverine Trading, LLC","PLL":"Citadel Securities LLC","PDM":"Wolverine Trading, LLC","PIRS":"Susquehanna Securities, LLC","PPC":"Citadel Securities LLC","HYS":"Susquehanna Securities, LLC","LTPZ":"Susquehanna Securities, LLC","ZROZ":"Susquehanna Securities, LLC","BOND":"Wolverine Trading, LLC","MINT":"Wolverine Trading, LLC","MUNI":"Susquehanna Securities, LLC","PNFP":"Wolverine Trading, LLC","PNW":"Group One Trading, L.P.","PINS":"Morgan Stanley & Co. LLC","PXD":"GTS Securities LLC","PIPR":"Citadel Securities LLC","PBI":"Susquehanna Securities, LLC","PXLW":"Wolverine Trading, LLC","PJT":"Wolverine Trading, LLC","PAA":"Susquehanna Securities, LLC","PAGP":"Susquehanna Securities, LLC","PLNT":"Morgan Stanley & Co. LLC","PL":"Belvedere Trading LLC","PLG":"Belvedere Trading LLC","PLYA":"Wolverine Trading, LLC","AGS":"Citadel Securities LLC","MYPS":"Susquehanna Securities, LLC","PLTK":"Citadel Securities LLC","PLBY":"Belvedere Trading LLC","PLXS":"Wolverine Trading, LLC","PLRX":"Citadel Securities LLC","PLUG":"Morgan Stanley & Co. LLC","PLUR":"Citadel Securities LLC","PLYM":"Citadel Securities LLC","PMVP":"Group One Trading, L.P.","PNC":"Citadel Securities LLC","PNM":"Belvedere Trading LLC","MAGA":"Belvedere Trading LLC","PII":"GTS Securities LLC","PSNY":"Belvedere Trading LLC","POL":"Citadel Securities LLC","PYPD":"Belvedere Trading LLC","POOL":"GTS Securities LLC","BPOP":"GTS Securities LLC","PRCH":"Susquehanna Securities, LLC","PTLO":"Group One Trading, L.P.","POR":"Citadel Securities LLC","PTMN":"Wolverine Trading, LLC","PKX":"Susquehanna Securities, LLC","POST":"Susquehanna Securities, LLC","PSTL":"Belvedere Trading LLC","PBPB":"Morgan Stanley & Co. LLC","PCH":"Group One Trading, L.P.","POWL":"Group One Trading, L.P.","POWI":"Wolverine Trading, LLC","PWFL":"Belvedere Trading LLC","PWSC":"Citadel Securities LLC","PPG":"GTS Securities LLC","PPL":"GTS Securities LLC","PRAA":"Susquehanna Securities, LLC","PRAX":"Susquehanna Securities, LLC","PGEN":"Group One Trading, L.P.","PRPO":"Susquehanna Securities, LLC","DTIL":"Group One Trading, L.P.","PDS":"Morgan Stanley & Co. LLC","PRLD":"Susquehanna Securities, LLC","PFC":"Belvedere Trading LLC","PINC":"Susquehanna Securities, LLC","PBH":"Susquehanna Securities, LLC","TROW":"Susquehanna Securities, LLC","PSMT":"Susquehanna Securities, LLC","PRME":"Susquehanna Securities, LLC","PRI":"Wolverine Trading, LLC","FRST":"Citadel Securities LLC","PRMW":"Wolverine Trading, LLC","PRIM":"Wolverine Trading, LLC","YLD":"Wolverine Trading, LLC","USMC":"Belvedere Trading LLC","PFG":"GTS Securities LLC","PRVA":"Citadel Securities LLC","PRA":"Susquehanna Securities, LLC","PRCT":"Group One Trading, L.P.","PCOR":"Citadel Securities LLC","PG":"GTS Securities LLC","UFO":"Belvedere Trading LLC","PROF":"Wolverine Trading, LLC","ACDC":"Wolverine Trading, LLC","PRG":"Citadel Securities LLC","PRGS":"Wolverine Trading, LLC","PGR":"Susquehanna Securities, LLC","PGNY":"Group One Trading, L.P.","PROK":"Belvedere Trading LLC","PLD":"Susquehanna Securities, LLC","PGRU":"Group One Trading, L.P.","PUMP":"Wolverine Trading, LLC","PRPH":"Belvedere Trading LLC","PRQR":"Susquehanna Securities, LLC","PRO":"Susquehanna Securities, LLC","OILK":"Group One Trading, L.P.","SMDV":"Belvedere Trading LLC","TMDV":"Belvedere Trading LLC","NOBL":"Susquehanna Securities, LLC","TDV":"Belvedere Trading LLC","REGL":"Wolverine Trading, LLC","SVXY":"Group One Trading, L.P.","BITO":"Citadel Securities LLC","ZSL":"GTS Securities LLC","KOLD":"Susquehanna Securities, LLC","SCO":"Morgan Stanley & Co. LLC","UCO":"Citadel Securities LLC","BOIL":"Susquehanna Securities, LLC","UGL":"GTS Securities LLC","AGQ":"GTS Securities LLC","YCL":"Susquehanna Securities, LLC","YCS":"Citadel Securities LLC","EUO":"Morgan Stanley & Co. LLC","GLL":"GTS Securities LLC","VERS":"Belvedere Trading LLC","EET":"Wolverine Trading, LLC","QQQA":"Belvedere Trading LLC","OND":"Belvedere Trading LLC","ONLN":"Belvedere Trading LLC","MYY":"Belvedere Trading LLC","EFZ":"Belvedere Trading LLC","EUM":"Susquehanna Securities, LLC","DOG":"Susquehanna Securities, LLC","DXD":"Susquehanna Securities, LLC","PST":"Citadel Securities LLC","RXL":"Susquehanna Securities, LLC","BIB":"Susquehanna Securities, LLC","SSO":"Citadel Securities LLC","SAA":"Wolverine Trading, LLC","USD":"Citadel Securities LLC","DDM":"Citadel Securities LLC","QLD":"Citadel Securities LLC","ROM":"GTS Securities LLC","UPW":"Group One Trading, L.P.","UWM":"Citadel Securities LLC","TBT":"Citadel Securities LLC","BITI":"Group One Trading, L.P.","PSQ":"Susquehanna Securities, LLC","SH":"Citadel Securities LLC","TBF":"Morgan Stanley & Co. LLC","SJB":"Susquehanna Securities, LLC","REK":"Wolverine Trading, LLC","RWM":"Belvedere Trading LLC","SBB":"Belvedere Trading LLC","YXI":"Belvedere Trading LLC","EEV":"Citadel Securities LLC","SPXN":"Belvedere Trading LLC","SPXT":"Belvedere Trading LLC","SUPL":"Belvedere Trading LLC","EZJ":"Susquehanna Securities, LLC","TTT":"Susquehanna Securities, LLC","SSG":"Wolverine Trading, LLC","REW":"Wolverine Trading, LLC","SDP":"Belvedere Trading LLC","XPP":"Citadel Securities LLC","BZQ":"Citadel Securities LLC","URE":"Citadel Securities LLC","SMDD":"Belvedere Trading LLC","SRTY":"Belvedere Trading LLC","UST":"Susquehanna Securities, LLC","SKYU":"Belvedere Trading LLC","URTY":"Belvedere Trading LLC","UBT":"Susquehanna Securities, LLC","LTL":"Belvedere Trading LLC","UCYB":"Belvedere Trading LLC","DIG":"Citadel Securities LLC","UYG":"Citadel Securities LLC","UYM":"Citadel Securities LLC","TQQQ":"GTS Securities LLC","SPXU":"GTS Securities LLC","SQQQ":"GTS Securities LLC","SZK":"Belvedere Trading LLC","DUG":"Citadel Securities LLC","SIJ":"Belvedere Trading LLC","SMN":"Citadel Securities LLC","SDOW":"Citadel Securities LLC","SDS":"Citadel Securities LLC","UDOW":"Citadel Securities LLC","UPRO":"GTS Securities LLC","QID":"Citadel Securities LLC","SKF":"Citadel Securities LLC","FXP":"Citadel Securities LLC","EPV":"Susquehanna Securities, LLC","RXD":"Belvedere Trading LLC","MZZ":"Citadel Securities LLC","EWV":"Susquehanna Securities, LLC","SRS":"Citadel Securities LLC","TWM":"Citadel Securities LLC","SDD":"Belvedere Trading LLC","BIS":"Susquehanna Securities, LLC","UVXY":"Group One Trading, L.P.","VIXM":"Group One Trading, L.P.","VIXY":"Group One Trading, L.P.","PSEC":"Citadel Securities LLC","PRSR":"Belvedere Trading LLC","PB":"Wolverine Trading, LLC","PTGX":"Belvedere Trading LLC","PLX":"Group One Trading, L.P.","TARA":"Belvedere Trading LLC","PTRA":"Susquehanna Securities, LLC","PRTA":"Citadel Securities LLC","PRLB":"Susquehanna Securities, LLC","PVBC":"Wolverine Trading, LLC","PFS":"Wolverine Trading, LLC","PRU":"Susquehanna Securities, LLC","PSQH":"Group One Trading, L.P.","PTC":"GTS Securities LLC","PTCT":"Susquehanna Securities, LLC","PSA":"Susquehanna Securities, LLC","PEG":"Susquehanna Securities, LLC","PUBM":"Citadel Securities LLC","LUNG":"Susquehanna Securities, LLC","PLSE":"Citadel Securities LLC","PHM":"GTS Securities LLC","PBYI":"Susquehanna Securities, LLC","PSTG":"Citadel Securities LLC","PCT":"Citadel Securities LLC","PPBT":"Belvedere Trading LLC","PRPL":"Wolverine Trading, LLC","PVH":"Citadel Securities LLC","PYR":"Wolverine Trading, LLC","QTWO":"Citadel Securities LLC","QGEN":"Susquehanna Securities, LLC","QFIN":"Susquehanna Securities, LLC","QRVO":"Susquehanna Securities, LLC","QUAD":"Susquehanna Securities, LLC","KWR":"Group One Trading, L.P.","QCOM":"Susquehanna Securities, LLC","QLYS":"Susquehanna Securities, LLC","NX":"Susquehanna Securities, LLC","PWR":"Citadel Securities LLC","QTRX":"Wolverine Trading, LLC","QUBT":"Susquehanna Securities, LLC","QSI":"Belvedere Trading LLC","QS":"Wolverine Trading, LLC","QD":"Wolverine Trading, LLC","DGX":"Two Sigma Securities, LLC","QRHC":"Wolverine Trading, LLC","QUIK":"Wolverine Trading, LLC","QDEL":"Susquehanna Securities, LLC","QNCX":"Susquehanna Securities, LLC","QNST":"Wolverine Trading, LLC","QIPT":"Wolverine Trading, LLC","QUOT":"Belvedere Trading LLC","QRTEA":"Susquehanna Securities, LLC","RCM":"Citadel Securities LLC","RXT":"Citadel Securities LLC","RDN":"Morgan Stanley & Co. LLC","RLGT":"Susquehanna Securities, LLC","RADI":"Susquehanna Securities, LLC","RDNT":"GTS Securities LLC","RDWR":"GTS Securities LLC","RFL":"Wolverine Trading, LLC","RAIN":"Belvedere Trading LLC","RL":"Citadel Securities LLC","METC":"Group One Trading, L.P.","RMBS":"Susquehanna Securities, LLC","RRC":"Citadel Securities LLC","RANI":"Belvedere Trading LLC","PACK":"Group One Trading, L.P.","RPD":"Wolverine Trading, LLC","RAPT":"Susquehanna Securities, LLC","FLTN":"Belvedere Trading LLC","RAVE":"Citadel Securities LLC","RJF":"GTS Securities LLC","RYAM":"Citadel Securities LLC","RYN":"Citadel Securities LLC","RTX":"Susquehanna Securities, LLC","RBA":"Susquehanna Securities, LLC","UTWY":"Belvedere Trading LLC","UTHY":"Belvedere Trading LLC","XBIL":"Belvedere Trading LLC","RBC":"Wolverine Trading, LLC","RICK":"Susquehanna Securities, LLC","RCMT":"Wolverine Trading, LLC","RMAX":"Citadel Securities LLC","RDI":"Belvedere Trading LLC","RC":"Wolverine Trading, LLC","SIXRE":"Susquehanna Securities, LLC","O":"Wolverine Trading, LLC","RETA":"Citadel Securities LLC","RCON":"Susquehanna Securities, LLC","RXRX":"Citadel Securities LLC","RCAT":"Susquehanna Securities, LLC","RRGB":"Morgan Stanley & Co. LLC","RRR":"Morgan Stanley & Co. LLC","RDFN":"Morgan Stanley & Co. LLC","RDW":"Wolverine Trading, LLC","RWT":"Citadel Securities LLC","REE":"Belvedere Trading LLC","REED":"Group One Trading, L.P.","RRX":"Susquehanna Securities, LLC","REG":"Susquehanna Securities, LLC","REGN":"GTS Securities LLC","RPHS":"Belvedere Trading LLC","RGNX":"Citadel Securities LLC","RM":"Wolverine Trading, LLC","RF":"Susquehanna Securities, LLC","RGLS":"Susquehanna Securities, LLC","RGA":"Morgan Stanley & Co. LLC","REKR":"Wolverine Trading, LLC","RLAY":"Susquehanna Securities, LLC","RS":"Citadel Securities LLC","RLMD":"Group One Trading, L.P.","RELX":"Citadel Securities LLC","MARK":"Citadel Securities LLC","RELY":"Citadel Securities LLC","IPOS":"Group One Trading, L.P.","IPO":"Belvedere Trading LLC","RNR":"GTS Securities LLC","RNLX":"Citadel Securities LLC","RNST":"Citadel Securities LLC","RNW":"Wolverine Trading, LLC","RENT":"Wolverine Trading, LLC","RTO":"Citadel Securities LLC","RPTX":"Citadel Securities LLC","RPAY":"Citadel Securities LLC","RGEN":"Citadel Securities LLC","REPL":"Citadel Securities LLC","FRBK":"Wolverine Trading, LLC","RSG":"Citadel Securities LLC","REFR":"Wolverine Trading, LLC","RSVR":"Belvedere Trading LLC","HAUS":"Belvedere Trading LLC","REZI":"Wolverine Trading, LLC","RMD":"Susquehanna Securities, LLC","RGP":"Susquehanna Securities, LLC","QSR":"Citadel Securities LLC","ROIC":"Citadel Securities LLC","RVP":"Citadel Securities LLC","REVG":"Wolverine Trading, LLC","RVNC":"Group One Trading, L.P.","RVPH":"Susquehanna Securities, LLC","RVMD":"Group One Trading, L.P.","RVLV":"Citadel Securities LLC","RVTY":"Susquehanna Securities, LLC","RWLK":"Susquehanna Securities, LLC","REX":"Belvedere Trading LLC","REXR":"Wolverine Trading, LLC","REYN":"Citadel Securities LLC","RH":"Wolverine Trading, LLC","RBBN":"Wolverine Trading, LLC","RELL":"Citadel Securities LLC","RIGL":"Susquehanna Securities, LLC","RGTI":"Group One Trading, L.P.","REPX":"Group One Trading, L.P.","RMNI":"Wolverine Trading, LLC","REI":"Belvedere Trading LLC","RNG":"Wolverine Trading, LLC","RIO":"Susquehanna Securities, LLC","RIOT":"Susquehanna Securities, LLC","RSKD":"Susquehanna Securities, LLC","RAD":"Susquehanna Securities, LLC","RITM":"Morgan Stanley & Co. LLC","RVSB":"Citadel Securities LLC","RIVN":"Citadel Securities LLC","RLI":"Susquehanna Securities, LLC","RLJ":"Wolverine Trading, LLC","RLX":"Citadel Securities LLC","RMR":"Citadel Securities LLC","RHI":"GTS Securities LLC","HOOD":"Citadel Securities LLC","RBLX":"Citadel Securities LLC","RKT":"Citadel Securities LLC","RKLB":"Susquehanna Securities, LLC","RCKT":"Citadel Securities LLC","ROK":"Wolverine Trading, LLC","RMTI":"GTS Securities LLC","RCI":"Wolverine Trading, LLC","ROG":"Citadel Securities LLC","ROIV":"Susquehanna Securities, LLC","ROKU":"Morgan Stanley & Co. LLC","ROL":"Wolverine Trading, LLC","ROP":"Susquehanna Securities, LLC","ROST":"Citadel Securities LLC","WEED":"Belvedere Trading LLC","ROVR":"Wolverine Trading, LLC","RY":"Two Sigma Securities, LLC","RCL":"Citadel Securities LLC","RGLD":"Group One Trading, L.P.","RPRX":"Citadel Securities LLC","RES":"Group One Trading, L.P.","RPM":"GTS Securities LLC","RPT":"Wolverine Trading, LLC","RBT":"Belvedere Trading LLC","RUBY":"Susquehanna Securities, LLC","RUM":"Susquehanna Securities, LLC","RMBL":"Group One Trading, L.P.","RWAY":"Belvedere Trading LLC","RUSHA":"Belvedere Trading LLC","RSI":"Belvedere Trading LLC","RUI":"Susquehanna Securities, LLC","RLV":"Susquehanna Securities, LLC","RUT":"Susquehanna Securities, LLC","RVLP":"Belvedere Trading LLC","RXO":"Citadel Securities LLC","RXST":"Belvedere Trading LLC","RYAN":"Susquehanna Securities, LLC","RYAAY":"Wolverine Trading, LLC","R":"Susquehanna Securities, LLC","RYI":"Citadel Securities LLC","RHP":"Susquehanna Securities, LLC","RVYL":"Wolverine Trading, LLC","OEX":"Citadel Securities LLC","XEO":"Citadel Securities LLC","SPESG":null,"SPGI":"Morgan Stanley & Co. LLC","SANW":"Citadel Securities LLC","SBRA":"Belvedere Trading LLC","SABR":"Wolverine Trading, LLC","SACH":"Group One Trading, L.P.","SGBX":"Citadel Securities LLC","SB":"Morgan Stanley & Co. LLC","SFE":"Citadel Securities LLC","SAFE":"Group One Trading, L.P.","SAFT":"Wolverine Trading, LLC","SAGE":"Susquehanna Securities, LLC","CRM":"Citadel Securities LLC","SBH":"Susquehanna Securities, LLC","IOT":"Susquehanna Securities, LLC","SJT":"Susquehanna Securities, LLC","SANA":"Citadel Securities LLC","SD":"Wolverine Trading, LLC","SAND":"Susquehanna Securities, LLC","JBSS":"Susquehanna Securities, LLC","SGMO":"Wolverine Trading, LLC","SANM":"GTS Securities LLC","SNY":"Citadel Securities LLC","SAP":"Citadel Securities LLC","SPNS":"Susquehanna Securities, LLC","SAR":"Wolverine Trading, LLC","SRPT":"Group One Trading, L.P.","SSL":"Citadel Securities LLC","SATL":"Belvedere Trading LLC","BFS":"Wolverine Trading, LLC","SVRA":"Susquehanna Securities, LLC","SBAC":"Citadel Securities LLC","SCSC":"Susquehanna Securities, LLC","SLB":"Citadel Securities LLC","SNDR":"Susquehanna Securities, LLC","SCHN":"Morgan Stanley & Co. LLC","SRRK":"Citadel Securities LLC","SCHL":"Wolverine Trading, LLC","SDGR":"Susquehanna Securities, LLC","SCHW":"Citadel Securities LLC","SCHK":"Belvedere Trading LLC","SCHE":"Susquehanna Securities, LLC","SCHR":"Belvedere Trading LLC","SCHF":"Susquehanna Securities, LLC","SCHC":"Wolverine Trading, LLC","FNDX":"Belvedere Trading LLC","FNDA":"Belvedere Trading LLC","FNDE":"Belvedere Trading LLC","FNDF":"Belvedere Trading LLC","SCHO":"Citadel Securities LLC","SCHZ":"Belvedere Trading LLC","SCHB":"Susquehanna Securities, LLC","SCHD":"Susquehanna Securities, LLC","SCHG":"Susquehanna Securities, LLC","SCHV":"Susquehanna Securities, LLC","SCHX":"Susquehanna Securities, LLC","SCHM":"Susquehanna Securities, LLC","SCHH":"Susquehanna Securities, LLC","SCHA":"Susquehanna Securities, LLC","SCHP":"Susquehanna Securities, LLC","SAIC":"Susquehanna Securities, LLC","SCLX":"Group One Trading, L.P.","SCPL":"Citadel Securities LLC","STNG":"Wolverine Trading, LLC","SMG":"Susquehanna Securities, LLC","SCPH":"Belvedere Trading LLC","SSP":"Belvedere Trading LLC","SRL":"Belvedere Trading LLC","SCU":"Susquehanna Securities, LLC","SCYX":"Susquehanna Securities, LLC","SE":"Citadel Securities LLC","SA":"Citadel Securities LLC","SEAC":"Citadel Securities LLC","SBCF":"Citadel Securities LLC","SMHI":"Group One Trading, L.P.","SDRL":"Wolverine Trading, LLC","STX":"Susquehanna Securities, LLC","SGEN":"Group One Trading, L.P.","SEE":"Two Sigma Securities, LLC","SHIP":"Wolverine Trading, LLC","SEAS":"Susquehanna Securities, LLC","SCWX":"Susquehanna Securities, LLC","SEEL":"Belvedere Trading LLC","SEER":"Susquehanna Securities, LLC","SEIC":"Citadel Securities LLC","SEM":"Susquehanna Securities, LLC","XLC":"Citadel Securities LLC","XLE":"Two Sigma Securities, LLC","XLF":"Two Sigma Securities, LLC","XLRE":"Citadel Securities LLC","XLY":"Morgan Stanley & Co. LLC","XLP":"Two Sigma Securities, LLC","XLV":"Two Sigma Securities, LLC","XLI":"Morgan Stanley & Co. LLC","XLU":"Two Sigma Securities, LLC","XLB":"Two Sigma Securities, LLC","XLK":"Two Sigma Securities, LLC","WTTR":"Wolverine Trading, LLC","SELB":"Group One Trading, L.P.","SIGI":"Wolverine Trading, LLC","SLQT":"Wolverine Trading, LLC","SLS":"Citadel Securities LLC","SRE":"Citadel Securities LLC","SEMR":"Citadel Securities LLC","SMTC":"Susquehanna Securities, LLC","ASAI":"Belvedere Trading LLC","ST":"Morgan Stanley & Co. LLC","SENS":"Susquehanna Securities, LLC","SXT":"Citadel Securities LLC","SRTS":"Citadel Securities LLC","S":"Susquehanna Securities, LLC","MCRB":"Group One Trading, L.P.","SRG":"Citadel Securities LLC","SCI":"Wolverine Trading, LLC","SVC":"Susquehanna Securities, LLC","NOW":"Susquehanna Securities, LLC","SFBS":"Citadel Securities LLC","SES":"Citadel Securities LLC","SEVN":"Belvedere Trading LLC","SFL":"Susquehanna Securities, LLC","SHAK":"Morgan Stanley & Co. LLC","SHPW":"Susquehanna Securities, LLC","SHCR":"Group One Trading, L.P.","SHEL":"Citadel Securities LLC","SHEN":"Susquehanna Securities, LLC","SHW":"Wolverine Trading, LLC","SFT":"Citadel Securities LLC","FOUR":"Wolverine Trading, LLC","PIXY":"Susquehanna Securities, LLC","SHG":"Citadel Securities LLC","SHLS":"Susquehanna Securities, LLC","SWAV":"Wolverine Trading, LLC","SCVL":"Wolverine Trading, LLC","SHOP":"Susquehanna Securities, LLC","SSTK":"Wolverine Trading, LLC","SHYF":"Susquehanna Securities, LLC","SIBN":"Citadel Securities LLC","SBSW":"Susquehanna Securities, LLC","SIEB":"Wolverine Trading, LLC","SIEN":"Wolverine Trading, LLC","BSRR":"Susquehanna Securities, LLC","SIFY":"Wolverine Trading, LLC","SIGA":"Group One Trading, L.P.","SGHT":"Group One Trading, L.P.","SGTX":"Belvedere Trading LLC","SASI":"Belvedere Trading LLC","SGML":"Citadel Securities LLC","SIG":"Susquehanna Securities, LLC","SLGN":"GTS Securities LLC","SLAB":"Susquehanna Securities, LLC","SIMO":"Citadel Securities LLC","SILK":"Wolverine Trading, LLC","SBOW":"Group One Trading, L.P.","SVM":"Susquehanna Securities, LLC","SILV":"Citadel Securities LLC","SMWB":"Group One Trading, L.P.","SFNC":"Wolverine Trading, LLC","SPG":"Susquehanna Securities, LLC","TUA":"Belvedere Trading LLC","PFIX":"Belvedere Trading LLC","SVOL":"Wolverine Trading, LLC","VCAR":"Wolverine Trading, LLC","SMPL":"Susquehanna Securities, LLC","SSD":"Citadel Securities LLC","SLP":"Susquehanna Securities, LLC","SBGI":"Wolverine Trading, LLC","OMIC":"Group One Trading, L.P.","SGLY":"Belvedere Trading LLC","SIOX":"Susquehanna Securities, LLC","BLCN":"Wolverine Trading, LLC","SIRI":"Morgan Stanley & Co. LLC","SPNT":"Wolverine Trading, LLC","SITC":"Citadel Securities LLC","SITE":"Wolverine Trading, LLC","SITM":"Citadel Securities LLC","STR":"Citadel Securities LLC","SIX":"Citadel Securities LLC","TSLX":"Citadel Securities LLC","SKM":"Wolverine Trading, LLC","SKX":"Susquehanna Securities, LLC","SKE":"Group One Trading, L.P.","SKIL":"Group One Trading, L.P.","SKLZ":"Group One Trading, L.P.","SKY":"Group One Trading, L.P.","SKYT":"Wolverine Trading, LLC","SKYW":"Wolverine Trading, LLC","SWKS":"Citadel Securities LLC","SLG":"Susquehanna Securities, LLC","SNBR":"Citadel Securities LLC","SLM":"Citadel Securities LLC","SLRC":"Wolverine Trading, LLC","SM":"Susquehanna Securities, LLC","SGH":"Citadel Securities LLC","SND":"Wolverine Trading, LLC","SMBK":"Wolverine Trading, LLC","SMAR":"Group One Trading, L.P.","SDC":"Susquehanna Securities, LLC","SNN":"Wolverine Trading, LLC","SWBI":"Citadel Securities LLC","AOS":"Susquehanna Securities, LLC","SMSI":"Susquehanna Securities, LLC","SJM":"GTS Securities LLC","SNAP":"Citadel Securities LLC","SNA":"Citadel Securities LLC","SNPO":"Belvedere Trading LLC","SNDL":"Citadel Securities LLC","SNOW":"Wolverine Trading, LLC","SY":"Wolverine Trading, LLC","SLAC":"Belvedere Trading LLC","SQM":"Susquehanna Securities, LLC","SCTL":"Susquehanna Securities, LLC","SOFI":"Susquehanna Securities, LLC","SHCO":"Wolverine Trading, LLC","SOHU":"Citadel Securities LLC","SLGL":"Citadel Securities LLC","SEDG":"Citadel Securities LLC","SOI":"Wolverine Trading, LLC","SWI":"Susquehanna Securities, LLC","SLDP":"Wolverine Trading, LLC","DTC":"Wolverine Trading, LLC","SLNH":"Belvedere Trading LLC","SLGC":"Citadel Securities LLC","SOND":"Susquehanna Securities, LLC","SAH":"Citadel Securities LLC","SEVCQ":"Belvedere Trading LLC","SON":"Wolverine Trading, LLC","SONO":"Citadel Securities LLC","SONY":"GTS Securities LLC","SOPH":"Belvedere Trading LLC","SRNEQ":"Morgan Stanley & Co. LLC","SHC":"Susquehanna Securities, LLC","SOUN":"Morgan Stanley & Co. LLC","SSTI":"Citadel Securities LLC","SPFI":"Susquehanna Securities, LLC","SO":"Citadel Securities LLC","SCCO":"GTS Securities LLC","SFST":"Susquehanna Securities, LLC","SBSI":"Wolverine Trading, LLC","SSB":"Wolverine Trading, LLC","LUV":"GTS Securities LLC","SWN":"Citadel Securities LLC","SOVO":"Citadel Securities LLC","SP":"Belvedere Trading LLC","LOV":"Belvedere Trading LLC","SPTN":"Susquehanna Securities, LLC","DIA":"Morgan Stanley & Co. LLC","GLD":"Morgan Stanley & Co. LLC","GMF":"Belvedere Trading LLC","RWO":"Susquehanna Securities, LLC","RWX":"Susquehanna Securities, LLC","FEZ":"Susquehanna Securities, LLC","GNR":"Susquehanna Securities, LLC","CWI":"Belvedere Trading LLC","EEMX":"Wolverine Trading, LLC","QWLD":"Belvedere Trading LLC","SPDW":"Belvedere Trading LLC","SPEM":"Belvedere Trading LLC","GXC":"Susquehanna Securities, LLC","EDIV":"Susquehanna Securities, LLC","EWX":"Susquehanna Securities, LLC","DWX":"Susquehanna Securities, LLC","GWX":"Susquehanna Securities, LLC","NANR":"Belvedere Trading LLC","SPY":"Morgan Stanley & Co. LLC","MDY":"Two Sigma Securities, LLC","XAR":"Belvedere Trading LLC","CWB":"Susquehanna Securities, LLC","TIPX":"Belvedere Trading LLC","BIL":"Wolverine Trading, LLC","BILS":"Wolverine Trading, LLC","EBND":"Wolverine Trading, LLC","JNK":"Citadel Securities LLC","IBND":"Wolverine Trading, LLC","BWX":"Susquehanna Securities, LLC","FLRN":"Wolverine Trading, LLC","SJNK":"Wolverine Trading, LLC","XSW":"Belvedere Trading LLC","RWR":"Susquehanna Securities, LLC","WIP":"Wolverine Trading, LLC","XHE":"Belvedere Trading LLC","PSK":"Citadel Securities LLC","LQIG":"Belvedere Trading LLC","NZUS":"Belvedere Trading LLC","SHM":"Wolverine Trading, LLC","HYMB":"Susquehanna Securities, LLC","XES":"Susquehanna Securities, LLC","SPMB":"Wolverine Trading, LLC","SPTI":"Belvedere Trading LLC","SPIP":"Belvedere Trading LLC","SPTM":"Belvedere Trading LLC","SPAB":"Wolverine Trading, LLC","SPBO":"Citadel Securities LLC","SPIB":"Wolverine Trading, LLC","SPLB":"Wolverine Trading, LLC","SPTL":"Wolverine Trading, LLC","SPMD":"Belvedere Trading LLC","SPLG":"Belvedere Trading LLC","SPSM":"Belvedere Trading LLC","SPTS":"Belvedere Trading LLC","SPSB":"Wolverine Trading, LLC","SPYG":"Belvedere Trading LLC","SPYD":"Citadel Securities LLC","SPYV":"Belvedere Trading LLC","ONEO":"Belvedere Trading LLC","MDYG":"Wolverine Trading, LLC","MDYV":"Belvedere Trading LLC","SLYG":"Belvedere Trading LLC","SLYV":"Belvedere Trading LLC","XBI":"Susquehanna Securities, LLC","KBE":"Susquehanna Securities, LLC","KCE":"Citadel Securities LLC","SDY":"Citadel Securities LLC","XHB":"Susquehanna Securities, LLC","KIE":"Citadel Securities LLC","KOMP":"Wolverine Trading, LLC","XME":"Susquehanna Securities, LLC","XOP":"Citadel Securities LLC","XPH":"Morgan Stanley & Co. LLC","KRE":"Susquehanna Securities, LLC","XRT":"Two Sigma Securities, LLC","XSD":"Susquehanna Securities, LLC","XTN":"Wolverine Trading, LLC","MMTM":"Belvedere Trading LLC","SPB":"Susquehanna Securities, LLC","SPPI":"Morgan Stanley & Co. LLC","ANY":"Belvedere Trading LLC","SPHR":"Susquehanna Securities, LLC","SPI":"Susquehanna Securities, LLC","SPIR":"Wolverine Trading, LLC","SR":"Susquehanna Securities, LLC","SPR":"Susquehanna Securities, LLC","SAVE":"Belvedere Trading LLC","SRC":"Group One Trading, L.P.","SBEV":"Citadel Securities LLC","SPLK":"Morgan Stanley & Co. LLC","SPOK":"Citadel Securities LLC","SRAD":"Wolverine Trading, LLC","SPWH":"Belvedere Trading LLC","SPOT":"Morgan Stanley & Co. LLC","SWTX":"Citadel Securities LLC","CXM":"Wolverine Trading, LLC","URNJ":"Belvedere Trading LLC","URNM":"Belvedere Trading LLC","SII":"Belvedere Trading LLC","SPT":"Wolverine Trading, LLC","SFM":"Susquehanna Securities, LLC","SPRU":"Citadel Securities LLC","SPSC":"Wolverine Trading, LLC","SPX":null,"SPXC":"Susquehanna Securities, LLC","SQSP":"Susquehanna Securities, LLC","SRAX":"Wolverine Trading, LLC","SSNC":"Citadel Securities LLC","SRLN":"Wolverine Trading, LLC","GAL":"Wolverine Trading, LLC","INKM":"Belvedere Trading LLC","RLY":"Citadel Securities LLC","TOTL":"Belvedere Trading LLC","SSRM":"Wolverine Trading, LLC","JOE":"Morgan Stanley & Co. LLC","STAA":"Susquehanna Securities, LLC","STAG":"Citadel Securities LLC","STGW":"Belvedere Trading LLC","LAB":"Wolverine Trading, LLC","SLI":"Susquehanna Securities, LLC","SMP":"Wolverine Trading, LLC","SXI":"Citadel Securities LLC","SWK":"Citadel Securities LLC","STN":"Susquehanna Securities, LLC","SBLK":"Susquehanna Securities, LLC","SGU":"Group One Trading, L.P.","STHO":"Group One Trading, L.P.","SBUX":"Citadel Securities LLC","SRT":"Wolverine Trading, LLC","STWD":"Wolverine Trading, LLC","STT":"Susquehanna Securities, LLC","STKH":"Belvedere Trading LLC","GASS":"Wolverine Trading, LLC","STLD":"Group One Trading, L.P.","SCS":"Morgan Stanley & Co. LLC","STLA":"Susquehanna Securities, LLC","SCM":"Belvedere Trading LLC","STEM":"Wolverine Trading, LLC","SCL":"Citadel Securities LLC","STEP":"Susquehanna Securities, LLC","SRCL":"Susquehanna Securities, LLC","STE":"Susquehanna Securities, LLC","STER":"Wolverine Trading, LLC","STRL":"Belvedere Trading LLC","STVN":"Citadel Securities LLC","STC":"Citadel Securities LLC","SF":"Susquehanna Securities, LLC","SFIX":"Susquehanna Securities, LLC","STM":"Citadel Securities LLC","SYBT":"Group One Trading, L.P.","STOK":"Group One Trading, L.P.","STNE":"Citadel Securities LLC","SRI":"Group One Trading, L.P.","SNEX":"Wolverine Trading, LLC","SSYS":"Susquehanna Securities, LLC","STRA":"Citadel Securities LLC","GLDB":"Belvedere Trading LLC","NZRO":"Belvedere Trading LLC","HNDL":"Citadel Securities LLC","LRN":"Wolverine Trading, LLC","SDIG":"Susquehanna Securities, LLC","SYK":"Susquehanna Securities, LLC","RGR":"GTS Securities LLC","SPH":"Morgan Stanley & Co. LLC","SMFG":"Wolverine Trading, LLC","SMMF":"Wolverine Trading, LLC","INN":"Susquehanna Securities, LLC","SUM":"Susquehanna Securities, LLC","SMLP":"Citadel Securities LLC","SMMT":"Citadel Securities LLC","SUI":"Wolverine Trading, LLC","SNCY":"Wolverine Trading, LLC","SLF":"Susquehanna Securities, LLC","SXC":"Susquehanna Securities, LLC","SU":"Citadel Securities LLC","SUNL":"Citadel Securities LLC","NOVA":"Susquehanna Securities, LLC","SUN":"Group One Trading, L.P.","STKL":"Wolverine Trading, LLC","SPWR":"Susquehanna Securities, LLC","RUN":"Citadel Securities LLC","SHO":"Group One Trading, L.P.","SUNW":"Wolverine Trading, LLC","SGHC":"Group One Trading, L.P.","SLGG":"Morgan Stanley & Co. LLC","SMCI":"Susquehanna Securities, LLC","SUP":"Citadel Securities LLC","SUPN":"Group One Trading, L.P.","SURF":"Susquehanna Securities, LLC","SURG":"Citadel Securities LLC","SGRY":"Group One Trading, L.P.","SRDX":"Susquehanna Securities, LLC","SSSS":"Wolverine Trading, LLC","STRO":"Citadel Securities LLC","SG":"Citadel Securities LLC","SLVM":"Wolverine Trading, LLC","SYM":"Group One Trading, L.P.","SYNA":"Citadel Securities LLC","SNCR":"Citadel Securities LLC","SYF":"Susquehanna Securities, LLC","SNDX":"Group One Trading, L.P.","SYNH":"Belvedere Trading LLC","SNPS":"Susquehanna Securities, LLC","SNV":"GTS Securities LLC","SYPR":"Susquehanna Securities, LLC","SYRS":"Group One Trading, L.P.","SYY":"Susquehanna Securities, LLC","SST":"Citadel Securities LLC","TMUS":"Susquehanna Securities, LLC","TTOO":"Citadel Securities LLC","TBLA":"Wolverine Trading, LLC","TRHC":"Wolverine Trading, LLC","TSM":"Morgan Stanley & Co. LLC","TTWO":"Citadel Securities LLC","TAK":"GTS Securities LLC","TKAT":"Citadel Securities LLC","TAL":"Citadel Securities LLC","TLIS":"Susquehanna Securities, LLC","TALK":"Wolverine Trading, LLC","TALO":"Wolverine Trading, LLC","TNDM":"Susquehanna Securities, LLC","SKT":"Group One Trading, L.P.","TPR":"Susquehanna Securities, LLC","TRGP":"Citadel Securities LLC","TGT":"Susquehanna Securities, LLC","TH":"Group One Trading, L.P.","TARS":"Belvedere Trading LLC","TGB":"Group One Trading, L.P.","TASK":"Susquehanna Securities, LLC","TMHC":"Susquehanna Securities, LLC","TRP":"Susquehanna Securities, LLC","SNX":"Citadel Securities LLC","TDCX":"Belvedere Trading LLC","TEL":"GTS Securities LLC","FTI":"Wolverine Trading, LLC","TTGT":"Wolverine Trading, LLC","TECK":"GTS Securities LLC","TGLS":"Susquehanna Securities, LLC","TK":"Citadel Securities LLC","TNK":"Wolverine Trading, LLC","TGNA":"Belvedere Trading LLC","TRC":"Susquehanna Securities, LLC","TELA":"Citadel Securities LLC","TDOC":"Citadel Securities LLC","TEO":"Susquehanna Securities, LLC","TDY":"Wolverine Trading, LLC","TFX":"Citadel Securities LLC","VIV":"Wolverine Trading, LLC","TEF":"Susquehanna Securities, LLC","TDS":"GTS Securities LLC","TSAT":"GTS Securities LLC","TBIO":"Belvedere Trading LLC","TELL":"Wolverine Trading, LLC","TLS":"Wolverine Trading, LLC","TU":"Wolverine Trading, LLC","TIXT":"Citadel Securities LLC","TMPO":"Wolverine Trading, LLC","TPX":"GTS Securities LLC","TENB":"Group One Trading, L.P.","TS":null,"TNYA":"Group One Trading, L.P.","TME":"Citadel Securities LLC","THC":"Morgan Stanley & Co. LLC","TNC":"Group One Trading, L.P.","TDC":"Group One Trading, L.P.","TER":"Susquehanna Securities, LLC","WULF":"Belvedere Trading LLC","TEX":"Belvedere Trading LLC","TX":"GTS Securities LLC","TERN":"Group One Trading, L.P.","LLAP":"Group One Trading, L.P.","TRNO":"Wolverine Trading, LLC","TBNK":"Wolverine Trading, LLC","TSLA":"Susquehanna Securities, LLC","TTEK":"Citadel Securities LLC","TTI":"Group One Trading, L.P.","TAGS":"Belvedere Trading LLC","CORN":"Wolverine Trading, LLC","SOYB":"Belvedere Trading LLC","CANE":"Wolverine Trading, LLC","WEAT":"Susquehanna Securities, LLC","TEVA":"GTS Securities LLC","TCBI":"Belvedere Trading LLC","TXN":"Susquehanna Securities, LLC","TXRH":"GTS Securities LLC","TGH":"Wolverine Trading, LLC","TXT":"Morgan Stanley & Co. LLC","TFII":"Wolverine Trading, LLC","TFSL":"Susquehanna Securities, LLC","TGTX":"Morgan Stanley & Co. LLC","THCH":"Group One Trading, L.P.","PRNT":"Belvedere Trading LLC","AAN":"Susquehanna Securities, LLC","AREN":"Susquehanna Securities, LLC","BODY":"Citadel Securities LLC","SKIN":"Citadel Securities LLC","CI":"Susquehanna Securities, LLC","LEV":"Susquehanna Securities, LLC","RTL":"Group One Trading, L.P.","ODP":"Wolverine Trading, LLC","STKS":"Susquehanna Securities, LLC","REAX":"Susquehanna Securities, LLC","REAL":"Susquehanna Securities, LLC","TTD":"Citadel Securities LLC","NCTY":"Belvedere Trading LLC","TXMD":"Citadel Securities LLC","THTX":"Citadel Securities LLC","TBPH":"Group One Trading, L.P.","TMO":"GTS Securities LLC","TRI":"GTS Securities LLC","THO":"Morgan Stanley & Co. LLC","TWKS":"Susquehanna Securities, LLC","TDUP":"Susquehanna Securities, LLC","THRY":"Group One Trading, L.P.","PP":"Wolverine Trading, LLC","CPII":"Belvedere Trading LLC","AHOY":"Belvedere Trading LLC","RPAR":"Belvedere Trading LLC","HFND":"Belvedere Trading LLC","UPAR":"Belvedere Trading LLC","CHAT":"Belvedere Trading LLC","TDW":"Susquehanna Securities, LLC","TTSH":"Susquehanna Securities, LLC","TLYS":"Susquehanna Securities, LLC","TLRY":"Citadel Securities LLC","TIMB":"Citadel Securities LLC","TKR":"Two Sigma Securities, LLC","TMST":"Susquehanna Securities, LLC","TIO":"Group One Trading, L.P.","TIPT":"Wolverine Trading, LLC","TWI":"GTS Securities LLC","TITN":"Susquehanna Securities, LLC","TJX":"GTS Securities LLC","TMC":"Wolverine Trading, LLC","TOST":"Susquehanna Securities, LLC","TOL":"Two Sigma Securities, LLC","TR":"Susquehanna Securities, LLC","BLD":"Morgan Stanley & Co. LLC","MODG":"GTS Securities LLC","TRMD":"Citadel Securities LLC","TTC":"Citadel Securities LLC","TD":"Two Sigma Securities, LLC","CURV":"Group One Trading, L.P.","TTE":"Two Sigma Securities, LLC","TSEM":"Belvedere Trading LLC","TSQ":"Belvedere Trading LLC","TM":"Citadel Securities LLC","TPG":"Susquehanna Securities, LLC","TRTX":"Wolverine Trading, LLC","TPIC":"Susquehanna Securities, LLC","TSCO":"Citadel Securities LLC","TW":"Citadel Securities LLC","COOK":"Susquehanna Securities, LLC","TT":"Susquehanna Securities, LLC","TACT":"Belvedere Trading LLC","TAC":"Citadel Securities LLC","TDG":"Susquehanna Securities, LLC","TMDX":"Susquehanna Securities, LLC","RIG":"Susquehanna Securities, LLC","TRU":"Wolverine Trading, LLC","TNL":"Citadel Securities LLC","TRV":"Susquehanna Securities, LLC","TVTX":"Citadel Securities LLC","TG":"Wolverine Trading, LLC","THS":"Citadel Securities LLC","TRMR":"Citadel Securities LLC","TRVN":"Citadel Securities LLC","TREX":"Wolverine Trading, LLC","TPH":"Morgan Stanley & Co. LLC","TCBK":"Wolverine Trading, LLC","TCN":"Susquehanna Securities, LLC","TMQ":"Susquehanna Securities, LLC","TRS":"Susquehanna Securities, LLC","TRMB":"Citadel Securities LLC","TNET":"Susquehanna Securities, LLC","TRIB":"Susquehanna Securities, LLC","TRIN":"Group One Trading, L.P.","TRN":"GTS Securities LLC","TSE":"Citadel Securities LLC","TCOM":"Susquehanna Securities, LLC","TRIP":"Susquehanna Securities, LLC","TPVG":"Wolverine Trading, LLC","DCFC":"Belvedere Trading LLC","TRTN":"Susquehanna Securities, LLC","TFIN":"Belvedere Trading LLC","TGI":"Wolverine Trading, LLC","TRVG":"Susquehanna Securities, LLC","TROX":"Citadel Securities LLC","TROO":"Susquehanna Securities, LLC","TBI":"Belvedere Trading LLC","TRUE":"Susquehanna Securities, LLC","TFC":"Susquehanna Securities, LLC","TRUP":"Susquehanna Securities, LLC","SPC":"Belvedere Trading LLC","TRST":"Wolverine Trading, LLC","TRMK":"Citadel Securities LLC","TRX":"Belvedere Trading LLC","TNP":"GTS Securities LLC","TTEC":"Susquehanna Securities, LLC","TTMI":"Citadel Securities LLC","TCX":"Citadel Securities LLC","TOUR":"Group One Trading, L.P.","TUP":"GTS Securities LLC","TKC":"Citadel Securities LLC","TPB":"Group One Trading, L.P.","HEAR":"Citadel Securities LLC","TSP":"Belvedere Trading LLC","TPC":"Citadel Securities LLC","TUYA":"Citadel Securities LLC","TWLO":"Morgan Stanley & Co. LLC","TWIN":"Susquehanna Securities, LLC","TWST":"Citadel Securities LLC","TWO":"Citadel Securities LLC","TYL":"Wolverine Trading, LLC","TYRA":"Belvedere Trading LLC","TSN":"Citadel Securities LLC","UHAL":"Citadel Securities LLC","UCAR":"Citadel Securities LLC","GROW":"Susquehanna Securities, LLC","USAU":"Susquehanna Securities, LLC","USPH":"Belvedere Trading LLC","SLCA":"Susquehanna Securities, LLC","UBER":"Citadel Securities LLC","UI":"Susquehanna Securities, LLC","UBS":"Morgan Stanley & Co. LLC","UDMY":"Susquehanna Securities, LLC","UDR":"Wolverine Trading, LLC","UFPI":"Susquehanna Securities, LLC","UFPT":"Wolverine Trading, LLC","UGI":"GTS Securities LLC","PATH":"Susquehanna Securities, LLC","ULTA":"Wolverine Trading, LLC","UCTT":"Susquehanna Securities, LLC","RARE":"Citadel Securities LLC","UGP":"Wolverine Trading, LLC","UMBF":"Wolverine Trading, LLC","UMH":"Wolverine Trading, LLC","UAA":"Citadel Securities LLC","UA":"Citadel Securities LLC","UFI":"Wolverine Trading, LLC","NIWM":"Belvedere Trading LLC","NSPY":"Wolverine Trading, LLC","OACP":"Belvedere Trading LLC","UL":"GTS Securities LLC","UNP":"GTS Securities LLC","QURE":"Citadel Securities LLC","UIS":"Susquehanna Securities, LLC","UAL":"Citadel Securities LLC","UFCS":"Wolverine Trading, LLC","UIHC":"Citadel Securities LLC","UMC":"Wolverine Trading, LLC","UNFI":"Susquehanna Securities, LLC","UPS":"Susquehanna Securities, LLC","URI":"Citadel Securities LLC","UAMY":"Susquehanna Securities, LLC","USM":"Morgan Stanley & Co. LLC","X":"GTS Securities LLC","UNL":"Susquehanna Securities, LLC","USL":"Citadel Securities LLC","BNO":"Susquehanna Securities, LLC","CPER":"Susquehanna Securities, LLC","USCI":"Belvedere Trading LLC","UGA":"Citadel Securities LLC","UNG":"Citadel Securities LLC","USO":"Susquehanna Securities, LLC","UTHR":"Susquehanna Securities, LLC","UNH":"Susquehanna Securities, LLC","UNIT":"Citadel Securities LLC","UNTY":"Wolverine Trading, LLC","U":"Susquehanna Securities, LLC","UNVR":"Susquehanna Securities, LLC","UVV":"Citadel Securities LLC","OLED":"GTS Securities LLC","UEIC":"Citadel Securities LLC","UHT":"Wolverine Trading, LLC","UHS":"Susquehanna Securities, LLC","UVE":"Citadel Securities LLC","UTI":"Wolverine Trading, LLC","UVSP":"Wolverine Trading, LLC","UNM":"Susquehanna Securities, LLC","TIGR":"Citadel Securities LLC","UPBD":"GTS Securities LLC","UPXI":"Wolverine Trading, LLC","UPH":"Wolverine Trading, LLC","UPLD":"Group One Trading, L.P.","UPST":"Susquehanna Securities, LLC","UPWK":"Citadel Securities LLC","UEC":"Susquehanna Securities, LLC","UROY":"Citadel Securities LLC","UE":"Group One Trading, L.P.","UONE":"Citadel Securities LLC","URBN":"Susquehanna Securities, LLC","URGN":"Susquehanna Securities, LLC","USB":"GTS Securities LLC","USFD":"Morgan Stanley & Co. LLC","USAC":"Susquehanna Securities, LLC","USNA":"Citadel Securities LLC","SIXU":"Susquehanna Securities, LLC","UTZ":"Citadel Securities LLC","UWMC":"Wolverine Trading, LLC","UXIN":"Wolverine Trading, LLC","VFC":"Susquehanna Securities, LLC","VVX":"Wolverine Trading, LLC","EGY":"Belvedere Trading LLC","VCSA":"Susquehanna Securities, LLC","VCNX":"Susquehanna Securities, LLC","MTN":"GTS Securities LLC","VAL":"Susquehanna Securities, LLC","VALE":"GTS Securities LLC","VLN":"Group One Trading, L.P.","VLO":"Wolverine Trading, LLC","WGMI":"Belvedere Trading LLC","BTF":"Citadel Securities LLC","VLY":"Citadel Securities LLC","VMI":"Wolverine Trading, LLC","VVV":"Citadel Securities LLC","VNDA":"Citadel Securities LLC","XBTF":"Susquehanna Securities, LLC","MOO":"Citadel Securities LLC","BIZD":"Citadel Securities LLC","BBH":"Susquehanna Securities, LLC","BRF":"Susquehanna Securities, LLC","GLCN":"Belvedere Trading LLC","CNXT":"Citadel Securities LLC","DAPP":"Belvedere Trading LLC","EINC":"Belvedere Trading LLC","ANGL":"Belvedere Trading LLC","BJK":"Susquehanna Securities, LLC","GDX":"Citadel Securities LLC","RAAX":"Wolverine Trading, LLC","IHY":"Susquehanna Securities, LLC","ISRA":"Susquehanna Securities, LLC","EMLC":"Susquehanna Securities, LLC","GDXJ":"Susquehanna Securities, LLC","SMOG":"Susquehanna Securities, LLC","MORT":"Citadel Securities LLC","CRAK":"Wolverine Trading, LLC","OIH":"GTS Securities LLC","PPH":"Belvedere Trading LLC","PFXF":"Citadel Securities LLC","REMX":"Susquehanna Securities, LLC","RTH":"Susquehanna Securities, LLC","SMH":"Susquehanna Securities, LLC","BUZZ":"Citadel Securities LLC","SLX":"Citadel Securities LLC","ESPO":"Belvedere Trading LLC","HYD":"Belvedere Trading LLC","MLN":"Citadel Securities LLC","OUNZ":"Belvedere Trading LLC","SMOT":"Belvedere Trading LLC","MOAT":"Belvedere Trading LLC","SMB":"Wolverine Trading, LLC","VOOG":"Belvedere Trading LLC","VOOV":"Belvedere Trading LLC","BIV":"Susquehanna Securities, LLC","BLV":"Susquehanna Securities, LLC","BSV":"Wolverine Trading, LLC","BND":"Susquehanna Securities, LLC","BNDX":"Wolverine Trading, LLC","VXF":"Susquehanna Securities, LLC","VUG":"Susquehanna Securities, LLC","VV":"Susquehanna Securities, LLC","VOT":"Susquehanna Securities, LLC","VOE":"Susquehanna Securities, LLC","VO":"Susquehanna Securities, LLC","VNQ":"GTS Securities LLC","VOO":"Susquehanna Securities, LLC","VBR":"Susquehanna Securities, LLC","VB":"Susquehanna Securities, LLC","VBK":"Susquehanna Securities, LLC","VTI":"Susquehanna Securities, LLC","VTV":"Susquehanna Securities, LLC","VEU":"Susquehanna Securities, LLC","VWO":"Susquehanna Securities, LLC","VGK":"Susquehanna Securities, LLC","VPL":"Susquehanna Securities, LLC","VSS":"Susquehanna Securities, LLC","VNQI":"Susquehanna Securities, LLC","VT":"Susquehanna Securities, LLC","VTIP":"Wolverine Trading, LLC","VTEB":"Wolverine Trading, LLC","VCIT":"Susquehanna Securities, LLC","VGIT":"Wolverine Trading, LLC","VCLT":"Susquehanna Securities, LLC","VGLT":"Citadel Securities LLC","VMBS":"Wolverine Trading, LLC","VGSH":"Wolverine Trading, LLC","VCSH":"Belvedere Trading LLC","VTC":"Belvedere Trading LLC","VONE":"Wolverine Trading, LLC","VTWG":"Belvedere Trading LLC","VTWO":"Susquehanna Securities, LLC","VIG":"Susquehanna Securities, LLC","VXUS":"Susquehanna Securities, LLC","VEA":"Susquehanna Securities, LLC","VFMO":"Belvedere Trading LLC","VFMF":"Belvedere Trading LLC","VFQY":"Belvedere Trading LLC","VWOB":"Citadel Securities LLC","VYM":"Susquehanna Securities, LLC","VIGI":"Belvedere Trading LLC","VYMI":"Belvedere Trading LLC","EDV":"Belvedere Trading LLC","MGC":"Susquehanna Securities, LLC","MGV":"Susquehanna Securities, LLC","MGK":"Susquehanna Securities, LLC","VOX":"Susquehanna Securities, LLC","VCR":"Susquehanna Securities, LLC","VDC":"Susquehanna Securities, LLC","VDE":"Susquehanna Securities, LLC","VFH":"Susquehanna Securities, LLC","VHT":"Susquehanna Securities, LLC","VIS":"Susquehanna Securities, LLC","VGT":"Susquehanna Securities, LLC","VAW":"Susquehanna Securities, LLC","VPU":"Susquehanna Securities, LLC","VAPO":"Wolverine Trading, LLC","VREX":"Group One Trading, L.P.","VRNS":"Wolverine Trading, LLC","VBLT":"Group One Trading, L.P.","VXRT":"Group One Trading, L.P.","PCVX":"Belvedere Trading LLC","VBIV":"Susquehanna Securities, LLC","VGR":"Susquehanna Securities, LLC","VECO":"Citadel Securities LLC","VEEV":"Susquehanna Securities, LLC","VLD":"Susquehanna Securities, LLC","VEL":"Group One Trading, L.P.","VNTRQ":"Wolverine Trading, LLC","VTR":"Citadel Securities LLC","VRA":"Morgan Stanley & Co. LLC","VERA":"Citadel Securities LLC","VCYT":"Susquehanna Securities, LLC","MDRX":"Citadel Securities LLC","VSTM":"Citadel Securities LLC","VCEL":"Group One Trading, L.P.","VRNT":"Susquehanna Securities, LLC","VRE":"Wolverine Trading, LLC","VRSN":"Susquehanna Securities, LLC","VRSK":"Citadel Securities LLC","VRTV":"Wolverine Trading, LLC","VERI":"Citadel Securities LLC","VZ":"Susquehanna Securities, LLC","VET":"Susquehanna Securities, LLC","VRNA":"Citadel Securities LLC","VRRM":"Belvedere Trading LLC","VRCA":"Group One Trading, L.P.","VTNR":"Wolverine Trading, LLC","VRTX":"Citadel Securities LLC","EVTL":"Susquehanna Securities, LLC","VRT":"Citadel Securities LLC","VERU":"Wolverine Trading, LLC","VERV":"Citadel Securities LLC","VIA":"Citadel Securities LLC","VVI":"Wolverine Trading, LLC","DSP":"Group One Trading, L.P.","VSAT":"GTS Securities LLC","VTRS":"Citadel Securities LLC","VIAV":"Susquehanna Securities, LLC","RBOT":"Group One Trading, L.P.","VICI":"Group One Trading, L.P.","VICR":"GTS Securities LLC","VSCO":"Wolverine Trading, LLC","VCTR":"Wolverine Trading, LLC","CFO":"Wolverine Trading, LLC","CFA":"Belvedere Trading LLC","CDC":"Wolverine Trading, LLC","CSB":"Wolverine Trading, LLC","VSDA":"Belvedere Trading LLC","VIEW":"Wolverine Trading, LLC","VKTX":"Group One Trading, L.P.","VFF":"Wolverine Trading, LLC","VMEO":"Wolverine Trading, LLC","BBIG":"Susquehanna Securities, LLC","VWE":"Wolverine Trading, LLC","VNOM":"Wolverine Trading, LLC","VIPS":"Susquehanna Securities, LLC","VQS":"Belvedere Trading LLC","VIR":"Susquehanna Securities, LLC","VIRX":"Belvedere Trading LLC","SPCE":"Citadel Securities LLC","VRDN":"Citadel Securities LLC","VHC":"GTS Securities LLC","VTSI":"Susquehanna Securities, LLC","VIRT":"Citadel Securities LLC","V":"GTS Securities LLC","VSH":"Susquehanna Securities, LLC","VPG":"Susquehanna Securities, LLC","VISL":"Group One Trading, L.P.","VIST":"Group One Trading, L.P.","VGZ":"Wolverine Trading, LLC","VSTO":"Wolverine Trading, LLC","VTGN":"Belvedere Trading LLC","VC":"Citadel Securities LLC","VST":"Susquehanna Securities, LLC","COCO":"Belvedere Trading LLC","VTLE":"Morgan Stanley & Co. LLC","VITL":"Wolverine Trading, LLC","VANI":"Citadel Securities LLC","SEAT":"Citadel Securities LLC","VVPR":"Wolverine Trading, LLC","VVOS":"Belvedere Trading LLC","VZIO":"Wolverine Trading, LLC","VNET":"Citadel Securities LLC","VOC":"Morgan Stanley & Co. LLC","VOD":"Citadel Securities LLC","VNRX":"Citadel Securities LLC","VNT":"Group One Trading, L.P.","VOR":"Group One Trading, L.P.","VNO":"Susquehanna Securities, LLC","VOXX":"Citadel Securities LLC","VOYA":"Susquehanna Securities, LLC","VYGR":"Belvedere Trading LLC","VRM":"Susquehanna Securities, LLC","VTEX":"Susquehanna Securities, LLC","VMC":"Morgan Stanley & Co. LLC","VUZI":"Group One Trading, L.P.","WTI":"Susquehanna Securities, LLC","WNC":"Susquehanna Securities, LLC","WAB":"GTS Securities LLC","WBA":"Citadel Securities LLC","WD":"Wolverine Trading, LLC","WKME":"Group One Trading, L.P.","WBX":"Wolverine Trading, LLC","WMT":"GTS Securities LLC","WRBY":"Citadel Securities LLC","WBD":"Susquehanna Securities, LLC","WMG":"Susquehanna Securities, LLC","HCC":"Susquehanna Securities, LLC","WAFD":"Wolverine Trading, LLC","WASH":"Wolverine Trading, LLC","WCN":"Citadel Securities LLC","WM":"Morgan Stanley & Co. LLC","WAT":"GTS Securities LLC","WSBF":"Susquehanna Securities, LLC","WSO":"Wolverine Trading, LLC","WTS":"Wolverine Trading, LLC","WVE":"Citadel Securities LLC","W":"Wolverine Trading, LLC","WDFC":"Susquehanna Securities, LLC","WFRD":"Belvedere Trading LLC","WEAV":"Wolverine Trading, LLC","WBS":"GTS Securities LLC","WEC":"Wolverine Trading, LLC","WB":"Susquehanna Securities, LLC","WEJOQ":"Belvedere Trading LLC","WFC":"Susquehanna Securities, LLC","WELL":"Wolverine Trading, LLC","WEN":"Susquehanna Securities, LLC","HOWL":"Group One Trading, L.P.","WERN":"Citadel Securities LLC","WCC":"GTS Securities LLC","WFG":"Citadel Securities LLC","WST":"Wolverine Trading, LLC","WABC":"Susquehanna Securities, LLC","WAL":"Susquehanna Securities, LLC","WMC":"Susquehanna Securities, LLC","WDC":"Susquehanna Securities, LLC","WES":"Citadel Securities LLC","WU":"Citadel Securities LLC","WLKP":"Citadel Securities LLC","WLK":"GTS Securities LLC","WPRT":"Wolverine Trading, LLC","WRK":"Citadel Securities LLC","WEST":"Group One Trading, L.P.","WWR":"Citadel Securities LLC","WE":"Belvedere Trading LLC","WEX":"Susquehanna Securities, LLC","WY":"Susquehanna Securities, LLC","WPM":"GTS Securities LLC","UP":"Susquehanna Securities, LLC","WHR":"GTS Securities LLC","WHF":"Susquehanna Securities, LLC","WSR":"Citadel Securities LLC","FREE":"Wolverine Trading, LLC","WOW":"Morgan Stanley & Co. LLC","WLY":"Susquehanna Securities, LLC","WLDN":"Citadel Securities LLC","WMB":"Susquehanna Securities, LLC","WSM":"Susquehanna Securities, LLC","WTW":"Susquehanna Securities, LLC","WSC":"Group One Trading, L.P.","WIMI":"Citadel Securities LLC","WING":"Wolverine Trading, LLC","WGO":"Susquehanna Securities, LLC","WTFC":"Wolverine Trading, LLC","WIT":"Citadel Securities LLC","WTT":"Belvedere Trading LLC","WISA":"Citadel Securities LLC","WBAT":"Belvedere Trading LLC","GDE":"Belvedere Trading LLC","WT":"Citadel Securities LLC","USDU":"Wolverine Trading, LLC","CYB":"Citadel Securities LLC","WCLD":"Wolverine Trading, LLC","XSOE":"Wolverine Trading, LLC","ELD":"Susquehanna Securities, LLC","DEM":"Susquehanna Securities, LLC","CEW":"Susquehanna Securities, LLC","DGS":"Susquehanna Securities, LLC","GCC":"Belvedere Trading LLC","HEDJ":"Susquehanna Securities, LLC","DFE":"Susquehanna Securities, LLC","USFR":"Belvedere Trading LLC","DNL":"Wolverine Trading, LLC","EPI":"Wolverine Trading, LLC","AIVI":"Belvedere Trading LLC","DLS":"Belvedere Trading LLC","IHDG":"Belvedere Trading LLC","DXJ":"Susquehanna Securities, LLC","DFJ":"Belvedere Trading LLC","DXJS":"Susquehanna Securities, LLC","AIVL":"Susquehanna Securities, LLC","DLN":"Susquehanna Securities, LLC","DON":"Wolverine Trading, LLC","DGRW":"Susquehanna Securities, LLC","EES":"Belvedere Trading LLC","AGGY":"Wolverine Trading, LLC","USMF":"Belvedere Trading LLC","WKEY":"Citadel Securities LLC","WIX":"Wolverine Trading, LLC","MAPS":"Wolverine Trading, LLC","WNS":"Wolverine Trading, LLC","WOLF":"Susquehanna Securities, LLC","WWW":"Wolverine Trading, LLC","WDS":"Citadel Securities LLC","WWD":"Morgan Stanley & Co. LLC","WDAY":"Susquehanna Securities, LLC","WKHS":"Susquehanna Securities, LLC","WK":"Citadel Securities LLC","WKSP":"Wolverine Trading, LLC","WRLD":"Citadel Securities LLC","WKC":"GTS Securities LLC","WWE":"Citadel Securities LLC","WOR":"GTS Securities LLC","WPC":"Susquehanna Securities, LLC","WPP":"Wolverine Trading, LLC","WRAP":"Citadel Securities LLC","WSFS":"Susquehanna Securities, LLC","WW":"Morgan Stanley & Co. LLC","WH":"Susquehanna Securities, LLC","WYNN":"Susquehanna Securities, LLC","XFOR":"Wolverine Trading, LLC","XBIT":"Susquehanna Securities, LLC","XEL":"Susquehanna Securities, LLC","XNCR":"Susquehanna Securities, LLC","XBIO":"Citadel Securities LLC","XHR":"Belvedere Trading LLC","XENE":"Susquehanna Securities, LLC","XERS":"Citadel Securities LLC","XRX":"Susquehanna Securities, LLC","XOMA":"Group One Trading, L.P.","XMTR":"Belvedere Trading LLC","XOS":"Susquehanna Securities, LLC","XP":"Citadel Securities LLC","XPEL":"Group One Trading, L.P.","XPEV":"Susquehanna Securities, LLC","XPO":"Susquehanna Securities, LLC","XPOF":"Belvedere Trading LLC","XNET":"Susquehanna Securities, LLC","XYL":"GTS Securities LLC","YMAB":"Group One Trading, L.P.","YALA":"Wolverine Trading, LLC","YSG":"Susquehanna Securities, LLC","YELL":"Citadel Securities LLC","YELP":"Susquehanna Securities, LLC","YETI":"Susquehanna Securities, LLC","YEXT":"Susquehanna Securities, LLC","YRD":"Susquehanna Securities, LLC","DAO":"Wolverine Trading, LLC","YPF":"Group One Trading, L.P.","YUM":"Susquehanna Securities, LLC","YUMC":"Susquehanna Securities, LLC","ZLAB":"Susquehanna Securities, LLC","ZBRA":"Susquehanna Securities, LLC","ZDGE":"Citadel Securities LLC","ZEPP":"Citadel Securities LLC","ZETA":"Susquehanna Securities, LLC","ZVRA":"Citadel Securities LLC","ZH":"Citadel Securities LLC","ZD":"Citadel Securities LLC","ZG":"Wolverine Trading, LLC","Z":"Wolverine Trading, LLC","ZIM":"Susquehanna Securities, LLC","ZBH":"Two Sigma Securities, LLC","ZIMV":"Citadel Securities LLC","ZION":"GTS Securities LLC","ZIP":"Susquehanna Securities, LLC","ZTS":"Wolverine Trading, LLC","ZM":"Citadel Securities LLC","ZI":"Citadel Securities LLC","ZS":"Morgan Stanley & Co. LLC","ZTO":"Morgan Stanley & Co. LLC","ZUMZ":"GTS Securities LLC","ZUO":"Susquehanna Securities, LLC","ZWS":"Susquehanna Securities, LLC","CNET":"Susquehanna Securities, LLC","ZYME":"Citadel Securities LLC","ZYNE":"Susquehanna Securities, LLC","ZYXI":"Group One Trading, L.P."},"Post\/Station":{"SVIX":"3\/1","FLWS":"6\/1","VCXA":"4\/1","TXG":"4\/1","YQ":"4\/1","TURN":"5\/1","ATNF":"6\/1","DIBS":"3\/1","XXII":"3\/1","ME":"2\/1","TSVT":"4\/1","TWOU":"3\/1","BITX":"8\/1","UVIX":"3\/1","DDD":"1\/1","MMM":"2\/1","FDMT":"4\/1","FEAM":"2\/1","ETNB":"2\/1","EGHT":"6\/1","NMTRQ":"16\/1","MASS":"1\/1","AKA":"1\/1","AMRK":"1\/1","ATEN":"3\/1","AAON":"3\/1","AIR":"1\/1","ABT":"4\/1","ABBV":"1\/1","ABCM":"3\/1","ABCL":"4\/1","ABEO":"1\/1","ANF":"5\/1","ABM":"3\/1","BCIM":"1\/1","BCI":"2\/1","BCD":"1\/1","SGOL":"5\/1","SIVR":"3\/1","ABSI":"6\/1","ABST":"1\/1","ACTG":"1\/1","ASO":"1\/1","ACHC":"1\/1","ACAD":"3\/1","ACEL":"3\/1","AXDX":"4\/1","ACN":"5\/1","ACCO":"1\/1","ACCD":"3\/1","ARAY":"4\/1","ACRX":"2\/1","SLRN":"5\/1","ACER":"3\/1","ACGN":"4\/1","ACHV":"1\/1","ACIW":"2\/1","ACRS":"4\/1","ACMR":"4\/1","ACNB":"3\/1","ACOR":"2\/1","ACR":"1\/1","ATNM":"3\/1","ATVI":"1\/1","AYI":"4\/1","ABOS":"4\/1","GOLF":"3\/1","AFIB":"1\/1","ACVA":"1\/1","PEO":"3\/1","ADMP":"4\/1","AHCO":"4\/1","ADAP":"3\/1","ADPT":"1\/1","ADCT":"2\/1","ADUS":"1\/1","AGRO":"3\/1","ADEA":"5\/1","ADIL":"3\/1","ACET":"4\/1","ADNT":"2\/1","ADTX":"4\/1","ADMA":"2\/1","ADBE":"5\/1","ADT":"3\/1","ATGE":"1\/1","ADTN":"2\/1","AAP":"1\/1","WMS":"3\/1","AEIS":"6\/1","AMD":"2\/1","ASIX":"6\/1","ADV":"3\/1","ADN":"5\/1","ADVM":"3\/1","EATV":"6\/1","GK":"3\/1","LETB":"5\/1","MSOX":"2\/1","YOLO":"3\/1","MSOS":"3\/1","HDGE":"7\/1","ACM":"5\/1","AGLE":"4\/1","AEG":"2\/1","AEHR":"1\/1","AMTX":"3\/1","AER":"4\/1","AJRD":"4\/1","AVAV":"3\/1","ASLE":"3\/1","AES":"6\/1","AEMD":"1\/1","AEVA":"5\/1","LIDR":"5\/1","AFCG":"1\/1","AMG":"3\/1","AFMD":"2\/1","AFRM":"2\/1","AFL":"5\/1","MITT":"3\/1","AGCO":"6\/1","UAVS":"3\/1","AGEN":"4\/1","A":"3\/1","AGTI":"3\/1","AGL":"1\/1","AGYS":"4\/1","AGIO":"4\/1","AGNC":"4\/1","AEM":"1\/1","API":"3\/1","ADC":"3\/1","AGRI":"4\/1","AL":"2\/1","APD":"1\/1","ATSG":"4\/1","ABNB":"3\/1","AIRG":"3\/1","MIMO":"4\/1","AKAM":"6\/1","AKBA":"1\/1","KERN":"3\/1","AKRO":"4\/1","AKTS":"4\/1","AKYA":"3\/1","ALG":"3\/1","AGI":"3\/1","ALRM":"1\/1","ALK":"5\/1","AIN":"1\/1","ALB":"1\/1","ACI":"3\/1","AA":"5\/1","ALC":"4\/1","ALDX":"4\/1","ALEC":"1\/1","ALRS":"3\/1","ALEX":"3\/1","ARE":"2\/1","ASTL":"4\/1","AQN":"3\/1","BABA":"3\/1","ALIT":"6\/1","ALGN":"2\/1","ALHC":"3\/1","ALGS":"6\/1","ALKT":"1\/1","ALKS":"2\/1","ALLK":"3\/1","BIRD":"1\/1","ALGT":"5\/1","ALLE":"3\/1","ALLG":"3\/1","ALGM":"6\/1","ARLP":"5\/1","AB":"3\/1","LNT":"3\/1","AMOT":"3\/1","ALSN":"5\/1","ALLO":"4\/1","ALLT":"2\/1","ALVR":"1\/1","ALL":"5\/1","ALLY":"1\/1","AAU":"3\/1","ALNY":"2\/1","AOSL":"2\/1","QMOM":"4\/1","AMR":"1\/1","APT":"2\/1","GOOGL":"6\/1","GOOG":"6\/1","ATEC":"4\/1","ALPP":"3\/1","ALPN":"3\/1","PINE":"5\/1","OGIG":"2\/1","OUSA":"3\/1","AMLP":"7\/1","BFOR":"7\/1","ACES":"3\/1","DTEC":"3\/1","SBIO":"6\/1","ALTG":"4\/1","ALTR":"6\/1","AYX":"4\/1","ATUS":"5\/1","ALT":"4\/1","ALTU":"3\/1","ALTO":"4\/1","MO":"1\/1","AMPS":"1\/1","ALXO":"4\/1","ALZN":"1\/1","AMAL":"4\/1","AMRN":"4\/1","AMZN":"5\/1","AMBC":"3\/1","AMBA":"1\/1","ABEV":"2\/1","AMAM":"1\/1","AMC":"6\/1","AMCX":"4\/1","AMCR":"6\/1","DOX":"2\/1","AMED":"3\/1","AMSWA":"6\/1","AWR":"1\/1","AMTB":"1\/1","AEE":"6\/1","AMRC":"3\/1","AMX":"5\/1","AAL":"2\/1","AAT":"3\/1","AXL":"2\/1","QPFF":"6\/1","AVEM":"2\/1","AVDE":"3\/1","QGRO":"5\/1","AEO":"3\/1","AEP":"5\/1","AEL":"4\/1","AXP":"6\/1","AFG":"3\/1","AMH":"2\/1","AIG":"1\/1","AOUT":"6\/1","APEI":"5\/1","AREC":"3\/1","AMSC":"3\/1","AMT":"1\/1","AVD":"2\/1","AMWL":"3\/1","AMWD":"1\/1","AWK":"4\/1","CRMT":"3\/1","COLD":"3\/1","AMP":"1\/1","ABCB":"2\/1","ABC":"4\/1","ATLO":"1\/1","AME":"4\/1","AMGN":"4\/1","FOLD":"4\/1","AMKR":"5\/1","POWW":"6\/1","AMN":"2\/1","AMRX":"4\/1","AP":"3\/1","AMPH":"6\/1","APH":"5\/1","AMPY":"3\/1","BATT":"3\/1","SWAN":"2\/1","BLOK":"1\/1","DIVO":"3\/1","IWIN":"4\/1","IBUY":"6\/1","CNBS":"2\/1","AMPL":"4\/1","AMPX":"2\/1","ASYS":"1\/1","AMLX":"3\/1","AMRS":"2\/1","ADI":"4\/1","ANAB":"1\/1","AVXL":"3\/1","ANDE":"4\/1","ANGI":"3\/1","ANGO":"1\/1","AU":"3\/1","BUD":"1\/1","ANIP":"6\/1","ANIK":"4\/1","NLY":"1\/1","ANNX":"3\/1","ANSS":"3\/1","ATEX":"5\/1","AM":"5\/1","AR":"1\/1","HOUS":"4\/1","AON":"3\/1","APA":"4\/1","AIRC":"4\/1","AIV":"4\/1","APLS":"1\/1","APG":"3\/1","APOG":"6\/1","ARI":"5\/1","APO":"5\/1","AMEH":"3\/1","APPF":"4\/1","APPH":"3\/1","APPN":"1\/1","APLE":"1\/1","AAPL":"3\/1","APLD":"1\/1","APDN":"1\/1","AIT":"4\/1","AMAT":"5\/1","AMTI":"1\/1","AAOI":"2\/1","APP":"2\/1","APRE":"3\/1","ATR":"1\/1","APTV":"3\/1","APTO":"1\/1","AQMS":"4\/1","AQB":"3\/1","AQST":"6\/1","ARMK":"3\/1","ARAV":"4\/1","ARBE":"3\/1","ABR":"3\/1","ABUS":"3\/1","ARC":"1\/1","RKDA":"2\/1","ARCB":"5\/1","ACLX":"1\/1","MT":"6\/1","ACGL":"6\/1","ARCH":"6\/1","ACHR":"3\/1","ADM":"6\/1","AROC":"6\/1","FUV":"4\/1","ARCE":"2\/1","ARNC":"5\/1","ARCO":"4\/1","ACA":"1\/1","ARCT":"4\/1","RCUS":"6\/1","ARQT":"6\/1","AMBP":"1\/1","ARDX":"2\/1","ASC":"2\/1","AAC":"1\/1","ARCC":"6\/1","ACRE":"5\/1","ARES":"1\/1","ARGX":"2\/1","ARBK":"4\/1","ARGO":"2\/1","ARHS":"1\/1","ARIS":"1\/1","ANET":"1\/1","ARKQ":"3\/1","ARKF":"4\/1","ARKK":"1\/1","ARKW":"3\/1","ARKG":"2\/1","IZRL":"6\/1","ARKX":"3\/1","ARKO":"3\/1","AAIC":"2\/1","ARLO":"4\/1","AHH":"6\/1","ARR":"4\/1","AWI":"2\/1","ARQQ":"6\/1","ARRY":"1\/1","ARVL":"1\/1","ARW":"2\/1","GYLD":"3\/1","YPS":"4\/1","ARWR":"3\/1","AIP":"3\/1","APAM":"3\/1","AORT":"5\/1","ARVN":"3\/1","ASA":"3\/1","ASAN":"3\/1","ABG":"5\/1","ASND":"4\/1","ASX":"4\/1","ASXC":"3\/1","ASGN":"2\/1","AHT":"2\/1","ASH":"5\/1","ASLN":"4\/1","ASML":"4\/1","ASPN":"4\/1","ASPU":"1\/1","AZPN":"2\/1","ASMB":"1\/1","ASRT":"4\/1","AMK":"1\/1","ASB":"1\/1","AIZ":"3\/1","AGO":"4\/1","ASTS":"1\/1","ASTE":"4\/1","ASTR":"5\/1","AZN":"1\/1","ATXS":"1\/1","ATRO":"3\/1","ASUR":"3\/1","T":"6\/1","ATAI":"2\/1","ATRA":"5\/1","AVIR":"1\/1","ATER":"2\/1","ATHX":"4\/1","ATHA":"4\/1","ATI":"3\/1","ATIP":"4\/1","ATKR":"3\/1","BATRA":"5\/1","AUB":"3\/1","AY":"1\/1","ATLC":"3\/1","AESI":"1\/1","TEAM":"1\/1","ATO":"5\/1","ATNI":"3\/1","ATOM":"3\/1","ATOS":"6\/1","BCEL":"4\/1","ATRC":"2\/1","LIFE":"1\/1","AUDAD":"6\/1","AUDC":"2\/1","AURA":"3\/1","AUPH":"1\/1","ACB":"1\/1","AUR":"5\/1","JG":"2\/1","ADSK":"5\/1","ATHM":"2\/1","ALV":"2\/1","AUTL":"2\/1","ADP":"5\/1","AN":"4\/1","AZO":"1\/1","AVDL":"5\/1","AVB":"3\/1","AVNS":"1\/1","AVTA":"3\/1","AVTR":"3\/1","AVAH":"1\/1","AVPT":"1\/1","AVY":"5\/1","AVNW":"1\/1","CDMO":"4\/1","AVID":"2\/1","RNA":"1\/1","AVDX":"3\/1","AVNT":"3\/1","CAR":"1\/1","AVA":"6\/1","RCEL":"2\/1","AVT":"4\/1","AWRE":"2\/1","AXTA":"5\/1","ACLS":"1\/1","AXS":"1\/1","AXGN":"3\/1","AXON":"1\/1","AXNX":"3\/1","AX":"4\/1","AXSM":"3\/1","AXTI":"3\/1","AYRO":"6\/1","AZEK":"3\/1","AZTA":"3\/1","AZUL":"5\/1","AZZ":"3\/1","BGS":"4\/1","RILY":"4\/1","BTG":"3\/1","BW":"4\/1","BLZE":"3\/1","BMI":"1\/1","BIDU":"3\/1","BKR":"2\/1","BKKT":"4\/1","BCPC":"2\/1","BALL":"2\/1","BLDP":"5\/1","BALY":"4\/1","BANC":"2\/1","BBAR":"6\/1","BBVA":"4\/1","BBD":"1\/1","BCH":"3\/1","BLX":"5\/1","BMA":"4\/1","BSBR":"2\/1","BSAC":"3\/1","SAN":"3\/1","BAND":"3\/1","BAC":"5\/1","BOH":"4\/1","BMRC":"3\/1","FNGS":"3\/1","BMO":"5\/1","BK":"6\/1","BNS":"3\/1","NTB":"3\/1","OZK":"3\/1","BFIN":"2\/1","BKU":"3\/1","BANR":"2\/1","BZUN":"1\/1","BHB":"3\/1","DJP":"8\/1","GRN":"3\/1","BCS":"1\/1","BBDC":"1\/1","BARK":"4\/1","BNED":"6\/1","B":"6\/1","BBSI":"2\/1","GOLD":"6\/1","BSET":"6\/1","BBWI":"3\/1","BHC":"5\/1","BLCO":"6\/1","BAX":"5\/1","BCML":"2\/1","BTE":"3\/1","BCE":"5\/1","BECN":"2\/1","BEEM":"3\/1","BEAM":"1\/1","BZH":"2\/1","BDX":"2\/1","BGNE":"3\/1","BDC":"1\/1","BLPH":"1\/1","BRBR":"5\/1","BHE":"1\/1","BHIL":"4\/1","BSY":"4\/1","WRB":"3\/1","BRK.B":"5\/1","BERY":"3\/1","BBY":"1\/1","BEST":"4\/1","BTTX":"4\/1","BWAC":"4\/1","BWMX":"3\/1","XAIR":"3\/1","BYND":"1\/1","BYSI":"3\/1","BGC":"2\/1","BHP":"2\/1","BCYC":"4\/1","BGFV":"4\/1","BIG":"5\/1","BBAI":"3\/1","BIGC":"1\/1","BILI":"5\/1","BILL":"3\/1","BIO":"3\/1","BKYI":"1\/1","BPTH":"4\/1","TECH":"6\/1","BCAB":"4\/1","BCDA":"3\/1","BIOC":"6\/1","BCRX":"4\/1","BDSX":"3\/1","BFRI":"1\/1","BIIB":"2\/1","BHVN":"3\/1","BLFS":"1\/1","BMRN":"1\/1","BMEA":"3\/1","BNGO":"3\/1","BNTX":"3\/1","BIOR":"3\/1","BSGM":"3\/1","BTCY":"1\/1","BVS":"5\/1","BIVI":"2\/1","BTAI":"5\/1","BRDS":"4\/1","BTBT":"3\/1","BTCM":"2\/1","BITF":"1\/1","BNMV":"2\/1","BJRI":"1\/1","BJ":"2\/1","BKH":"3\/1","BKI":"3\/1","BSM":"4\/1","BLKB":"3\/1","BB":"3\/1","BL":"3\/1","BKCC":"5\/1","LCTD":"3\/1","BLK":"1\/1","NEAR":"6\/1","TCPC":"3\/1","ICSH":"4\/1","BKSY":"4\/1","BX":"3\/1","BXMT":"3\/1","BXSL":"3\/1","BLDE":"2\/1","BLND":"3\/1","BLNK":"4\/1","HRB":"6\/1","SQ":"3\/1","BE":"4\/1","BLMN":"5\/1","APRN":"2\/1","BLBD":"3\/1","BLFY":"3\/1","OBDC":"3\/1","OWL":"4\/1","BRBS":"3\/1","BLUE":"4\/1","BXC":"6\/1","BPMC":"1\/1","BMTX":"3\/1","BA":"5\/1","BCC":"3\/1","BOKF":"5\/1","BKNG":"3\/1","BOOT":"2\/1","BAH":"3\/1","BWA":"5\/1","BORR":"2\/1","SAM":"4\/1","BOC":"3\/1","BXP":"5\/1","BSX":"5\/1","BOWL":"3\/1","BOX":"5\/1","BOXDQ":"3\/1","BYD":"4\/1","BP":"6\/1","BPT":"5\/1","BRC":"6\/1","BHR":"3\/1","BRAG":"4\/1","BCLI":"4\/1","BDN":"4\/1","BRZE":"1\/1","BRCC":"6\/1","BFH":"1\/1","BREZ":"6\/1","BRFS":"5\/1","BCTX":"5\/1","BRDG":"2\/1","BBIO":"6\/1","BTWN":"3\/1","BWB":"3\/1","BGXX":"3\/1","BHG":"5\/1","BFAM":"6\/1","BCOV":"1\/1","BHF":"3\/1","BSIG":"4\/1","BRSP":"4\/1","BV":"2\/1","BRLT":"3\/1","EAT":"3\/1","BCO":"3\/1","BMY":"6\/1","VTOL":"1\/1","BTI":"4\/1","BRX":"3\/1","AVGO":"4\/1","BR":"4\/1","BNL":"3\/1","BWEN":"3\/1","BKD":"2\/1","BBU":"3\/1","BN":"6\/1","BIP":"3\/1","BIPC":"3\/1","BNRE":"4\/1","BEPC":"3\/1","BEP":"3\/1","BRKL":"3\/1","BRO":"3\/1","BF.B":"1\/1","DOOO":"4\/1","BRKR":"3\/1","BC":"3\/1","BSQR":"3\/1","BKE":"4\/1","BFIX":"3\/1","BBW":"1\/1","BLDR":"5\/1","BMBL":"1\/1","BG":"3\/1","BUR":"1\/1","BFI":"4\/1","BURL":"1\/1","BFST":"3\/1","BFLY":"4\/1","BZFD":"2\/1","BWXT":"2\/1","BY":"1\/1","BYRN":"4\/1","CHRW":"1\/1","AI":"2\/1","CCCC":"1\/1","CABA":"3\/1","CBT":"3\/1","CACI":"6\/1","CADE":"3\/1","CDNS":"6\/1","CDZI":"1\/1","CDRE":"3\/1","CAE":"3\/1","CZR":"1\/1","CSTE":"1\/1","CALM":"4\/1","CAMP":"3\/1","CVGW":"4\/1","CALC":"2\/1","CAL":"6\/1","CRC":"3\/1","CWT":"5\/1","CALX":"4\/1","CALT":"1\/1","CPE":"4\/1","CLMT":"3\/1","CEI":"4\/1","CMBM":"1\/1","TOKE":"3\/1","SYLD":"3\/1","TAIL":"6\/1","CATC":"1\/1","CPT":"1\/1","CCJ":"5\/1","CPB":"6\/1","CWH":"3\/1","CAMT":"1\/1","CAN":"3\/1","GOOS":"3\/1","CM":"4\/1","CNQ":"5\/1","CNI":"6\/1","CP":"4\/1","CSIQ":"3\/1","CNNE":"3\/1","CANO":"4\/1","GOEV":"2\/1","CGC":"3\/1","CTLP":"2\/1","CCBG":"3\/1","CGUS":"3\/1","CGDV":"3\/1","CGGR":"2\/1","COF":"6\/1","CPLP":"6\/1","CSWC":"3\/1","CFFN":"4\/1","TIME":"1\/1","CPRI":"4\/1","CAPR":"1\/1","CGRN":"1\/1","CARA":"4\/1","CRDF":"1\/1","CAH":"4\/1","CRDL":"5\/1","CDLX":"3\/1","CDNA":"4\/1","CMAX":"2\/1","CTRE":"2\/1","CARG":"5\/1","CRBU":"5\/1","CARM":"3\/1","CSL":"3\/1","CG":"4\/1","CGBD":"3\/1","KMX":"2\/1","CCL":"6\/1","CUK":"2\/1","PRTS":"4\/1","CRS":"1\/1","CSV":"3\/1","CARR":"1\/1","TAST":"2\/1","CARS":"5\/1","CARE":"4\/1","CRI":"1\/1","CVNA":"3\/1","CASA":"1\/1","CWST":"3\/1","CASY":"3\/1","CASI":"3\/1","SAVA":"4\/1","CSTL":"2\/1","CTRM":"1\/1","CTLT":"2\/1","CPRX":"1\/1","CAT":"4\/1","CATY":"4\/1","CATO":"6\/1","CAVA":"1\/1","CVCO":"4\/1","CZOO":"1\/1","CBAT":"3\/1","YCBD":"5\/1","CBZ":"5\/1","CBOE":"3\/1","VIX":"9\/1","CBRE":"1\/1","CCCS":"3\/1","CDW":"4\/1","CECO":"1\/1","FUN":"1\/1","CVM":"1\/1","CE":"5\/1","CELC":"4\/1","CLS":"5\/1","CLDX":"5\/1","CLBT":"3\/1","CLLS":"6\/1","CELH":"3\/1","CELU":"1\/1","CX":"4\/1","CENN":"6\/1","CVE":"1\/1","CNC":"6\/1","CNP":"3\/1","CSR":"6\/1","CNTA":"2\/1","CENTA":"6\/1","CPF":"3\/1","CEPU":"1\/1","CVCY":"5\/1","LEU":"3\/1","CENX":"6\/1","CNTY":"3\/1","CCS":"4\/1","IPSC":"3\/1","CRNT":"5\/1","CRNC":"3\/1","CERE":"4\/1","CDAY":"1\/1","CERT":"6\/1","CERS":"5\/1","CEVA":"3\/1","CF":"1\/1","GIB":"6\/1","CSBR":"1\/1","CHX":"1\/1","CRGE":"1\/1","CHPT":"3\/1","CRL":"6\/1","GTLS":"1\/1","CHTR":"3\/1","CCF":"4\/1","CLDT":"2\/1","CHKP":"3\/1","CKPT":"4\/1","CAKE":"5\/1","CMCM":"4\/1","CHEF":"3\/1","CHGG":"3\/1","CHE":"1\/1","CC":"6\/1","LNG":"2\/1","CQP":"2\/1","CHK":"2\/1","CVX":"3\/1","CHWY":"3\/1","CSSE":"4\/1","CHS":"5\/1","PLCE":"3\/1","CIM":"3\/1","CMRX":"4\/1","CAAS":"2\/1","CYD":"4\/1","CD":"4\/1","KDNY":"1\/1","CMG":"5\/1","CHH":"3\/1","CHRD":"5\/1","CDXC":"3\/1","CB":"3\/1","CHT":"3\/1","CHD":"3\/1","CCV":"2\/1","CVII":"3\/1","CHDN":"6\/1","CHUY":"4\/1","CIXXF":"2\/1","CINT":"5\/1","CIG":"5\/1","CDTX":"4\/1","CIEN":"5\/1","CMPR":"1\/1","CINF":"1\/1","CNK":"1\/1","CTAS":"1\/1","CION":"1\/1","CIFR":"3\/1","CIR":"1\/1","CRUS":"4\/1","CSCO":"5\/1","CISO":"6\/1","CTRN":"5\/1","C":"1\/1","CTXR":"1\/1","CFG":"3\/1","CIA":"1\/1","CIO":"2\/1","CVEO":"5\/1","CIVI":"4\/1","CLVT":"4\/1","CMTG":"2\/1","CLAR":"5\/1","CLNE":"3\/1","CLH":"1\/1","CLSK":"4\/1","CCO":"3\/1","YOU":"3\/1","CLFD":"2\/1","CLPT":"6\/1","CLSD":"6\/1","CLIR":"4\/1","CWAN":"2\/1","CLW":"3\/1","CWEN.A":"1\/1","CWEN":"5\/1","CLNN":"3\/1","CLF":"2\/1","CLVR":"3\/1","RAASY":"2\/1","CLX":"1\/1","NET":"5\/1","CLOV":"2\/1","CME":"1\/1","CMS":"6\/1","CNA":"4\/1","CNHI":"6\/1","CNO":"4\/1","CNX":"6\/1","CODX":"1\/1","KO":"5\/1","CCEP":"4\/1","KOF":"3\/1","CDXS":"3\/1","CDE":"5\/1","CCOI":"4\/1","CGNX":"6\/1","CTSH":"5\/1","CGNT":"4\/1","CNS":"4\/1","COHR":"4\/1","CHRS":"4\/1","COHU":"3\/1","COIN":"2\/1","CL":"6\/1","SPCX":"5\/1","COLL":"2\/1","CIGI":"2\/1","CLGN":"2\/1","COLB":"2\/1","ECON":"7\/1","CLBK":"4\/1","COLM":"6\/1","CMCO":"3\/1","CMCSA":"5\/1","CMA":"5\/1","FIX":"5\/1","CBSH":"1\/1","CMC":"3\/1","CVGI":"1\/1","COMM":"2\/1","CBU":"3\/1","CYH":"3\/1","CHCT":"5\/1","CTBI":"6\/1","CVLT":"4\/1","CBD":"3\/1","SBS":"4\/1","ELP":"6\/1","SID":"6\/1","CCU":"3\/1","BVN":"5\/1","CODI":"6\/1","COMP":"3\/1","CMP":"4\/1","CMPS":"6\/1","CGEN":"1\/1","CPUH":"3\/1","CPSI":"3\/1","CTG":"5\/1","SCOR":"3\/1","COMS":"4\/1","LODE":"5\/1","CRK":"3\/1","CMTL":"1\/1","CAG":"4\/1","CNXC":"3\/1","CNDT":"1\/1","CFLT":"3\/1","CNMD":"5\/1","CNTB":"4\/1","CNOB":"1\/1","CONN":"2\/1","COP":"2\/1","CCSI":"4\/1","CEIX":"3\/1","CNSL":"3\/1","ED":"3\/1","CWCO":"3\/1","STZ":"5\/1","CEG":"1\/1","CSTM":"4\/1","CPSS":"4\/1","TCS":"3\/1","WISH":"2\/1","VLRS":"3\/1","CONX":"3\/1","COO":"1\/1","CPS":"3\/1","CPA":"6\/1","CPRT":"6\/1","CORT":"4\/1","CNM":"1\/1","CLB":"3\/1","CRBG":"5\/1","CXW":"3\/1","CORR":"2\/1","CRMD":"3\/1","GLW":"6\/1","CAAP":"4\/1","OFC":"5\/1","CRSR":"3\/1","CTVA":"2\/1","CRVS":"4\/1","COSM":"3\/1","CMRE":"3\/1","CSGP":"2\/1","COST":"5\/1","CTRA":"3\/1","COTY":"3\/1","BASE":"5\/1","CPNG":"3\/1","COUR":"1\/1","CUZ":"4\/1","CVLG":"3\/1","CPSH":"3\/1","CRAI":"3\/1","CBRL":"1\/1","CR":"2\/1","CXT":"3\/1","BAP":"5\/1","CACC":"3\/1","CRDO":"2\/1","CCAP":"3\/1","CPG":"6\/1","CEQP":"1\/1","CRESY":"5\/1","CRH":"4\/1","CRCT":"4\/1","CRNX":"3\/1","CRSP":"4\/1","CRTO":"6\/1","CROX":"5\/1","CRON":"4\/1","CCRN":"5\/1","CAPL":"6\/1","CFB":"5\/1","CRWD":"3\/1","CCI":"6\/1","CRWS":"3\/1","CCK":"2\/1","CYRX":"1\/1","LAW":"5\/1","CSGS":"1\/1","CCLP":"6\/1","CSWI":"3\/1","CSX":"5\/1","CTO":"6\/1","CTS":"2\/1","CUBE":"2\/1","CUE":"3\/1","HLTH":"1\/1","CFR":"3\/1","CGEM":"4\/1","CULP":"5\/1","CPIX":"4\/1","CMI":"3\/1","CMLS":"6\/1","CVAC":"4\/1","CURI":"3\/1","CRIS":"2\/1","CURO":"4\/1","CW":"3\/1","CWK":"3\/1","CTOS":"3\/1","CUBI":"3\/1","CUTR":"6\/1","CVBF":"1\/1","CVI":"2\/1","UAN":"3\/1","CVRX":"3\/1","CVS":"1\/1","CYBR":"1\/1","CYCN":"3\/1","CBAY":"4\/1","CYN":"3\/1","CTKB":"3\/1","CYTK":"4\/1","CTSO":"1\/1","DHI":"4\/1","DADA":"3\/1","DAKT":"2\/1","DAN":"6\/1","DHR":"1\/1","DAC":"3\/1","DNMR":"6\/1","DQ":"2\/1","DRI":"6\/1","DRIO":"1\/1","DAR":"6\/1","DSKE":"6\/1","DAIO":"3\/1","DDOG":"6\/1","PLAY":"6\/1","DTEAF":"4\/1","DVA":"3\/1","DAWN":"6\/1","DBVT":"3\/1","NAIL":"6\/1","ASHS":"2\/1","ASHR":"7\/1","CN":"3\/1","DBEF":"7\/1","DBEU":"7\/1","DBJP":"4\/1","HYLB":"3\/1","SNPE":"3\/1","DBTX":"4\/1","DCPH":"1\/1","DECK":"3\/1","DE":"2\/1","DH":"3\/1","DCTH":"4\/1","DKL":"6\/1","DK":"3\/1","DELL":"1\/1","DAL":"1\/1","DLX":"3\/1","DNLI":"4\/1","DEN":"1\/1","DNN":"4\/1","DENN":"3\/1","XRAY":"1\/1","DMTK":"2\/1","DSGX":"2\/1","DSGN":"4\/1","DBI":"6\/1","DM":"1\/1","DESP":"3\/1","DXLG":"5\/1","DB":"5\/1","DVN":"1\/1","DXCM":"3\/1","DHX":"1\/1","DHT":"3\/1","DEO":"1\/1","DMAC":"3\/1","DO":"2\/1","FANG":"4\/1","DRH":"3\/1","DSX":"5\/1","DICE":"4\/1","DKS":"2\/1","DBDQQ":"16\/1","DGII":"3\/1","DMRC":"3\/1","DGLY":"3\/1","DLR":"6\/1","APPS":"6\/1","DWAC":"1\/1","DBRG":"5\/1","DOCN":"5\/1","DCOM":"2\/1","DFIP":"3\/1","DFIV":"4\/1","DFAU":"3\/1","DFUS":"2\/1","DUHP":"5\/1","DFUV":"3\/1","DFAR":"3\/1","DFSV":"3\/1","DFAX":"4\/1","DFIC":"3\/1","DIN":"4\/1","DIOD":"3\/1","TMV":"2\/1","TMF":"6\/1","TYO":"7\/1","TYD":"7\/1","COM":"3\/1","BRZU":"2\/1","CHAU":"5\/1","CWEB":"3\/1","WEBL":"3\/1","ERY":"4\/1","FAZ":"6\/1","YANG":"7\/1","DUST":"3\/1","JNUG":"7\/1","EDZ":"5\/1","INDL":"7\/1","DRN":"2\/1","DRV":"6\/1","DPST":"2\/1","UBOT":"5\/1","HIBS":"2\/1","LABD":"3\/1","HIBL":"2\/1","TZA":"4\/1","TECS":"3\/1","TPOR":"3\/1","YINN":"7\/1","AAPD":"3\/1","AAPU":"3\/1","DFEN":"6\/1","WANT":"6\/1","EDC":"3\/1","ERX":"4\/1","FAS":"5\/1","EURL":"3\/1","NUGT":"7\/1","DUSL":"3\/1","JDST":"7\/1","MIDU":"3\/1","MEXX":"5\/1","DRIP":"7\/1","SPUU":"5\/1","SPDN":"2\/1","SPXS":"5\/1","SOXL":"5\/1","SOXS":"1\/1","TNA":"5\/1","TECL":"5\/1","TSLS":"1\/1","UTSL":"1\/1","SPXL":"5\/1","CURE":"7\/1","HJEN":"6\/1","MOON":"3\/1","QQQE":"1\/1","GUSH":"3\/1","RETL":"2\/1","LABU":"3\/1","TSLL":"1\/1","IRON":"6\/1","DFS":"5\/1","DISH":"2\/1","DIS":"2\/1","DHC":"6\/1","DLHC":"4\/1","DLO":"1\/1","BOOM":"1\/1","DCBO":"4\/1","DCGO":"2\/1","DOCU":"2\/1","DOGZ":"4\/1","DLB":"1\/1","DOLE":"3\/1","DG":"6\/1","DLTR":"1\/1","DLPN":"4\/1","DOMA":"5\/1","D":"3\/1","DPZ":"4\/1","DOMO":"1\/1","DCI":"3\/1","DFIN":"4\/1","DASH":"6\/1","DMLP":"6\/1","LPG":"3\/1","DORM":"6\/1","DSL":"7\/1","DV":"3\/1","PLOW":"4\/1","DOUG":"2\/1","DEI":"4\/1","DOYU":"2\/1","DOV":"5\/1","DOW":"3\/1","DJX":"8\/1","DOCS":"1\/1","RDY":"3\/1","DKNG":"5\/1","DPRO":"6\/1","DRD":"1\/1","DFH":"4\/1","DRQ":"5\/1","DSHK":"2\/1","DRVN":"1\/1","DBX":"6\/1","DTM":"4\/1","DTE":"2\/1","NAPA":"3\/1","DCO":"1\/1","DUK":"3\/1","DNB":"3\/1","DUOL":"1\/1","DD":"3\/1","DRRX":"4\/1","BROS":"1\/1","DXC":"2\/1","DXPE":"3\/1","DYAI":"3\/1","DY":"3\/1","DLNG":"2\/1","DT":"3\/1","DVAX":"1\/1","DYN":"4\/1","DX":"6\/1","DZSI":"2\/1","ELF":"2\/1","ETWO":"1\/1","BSVO":"3\/1","DRLL":"1\/1","EGBN":"6\/1","EGLE":"5\/1","EXP":"5\/1","EGRX":"4\/1","ESTE":"2\/1","EWBC":"3\/1","DEA":"2\/1","EBC":"3\/1","EMN":"3\/1","KODK":"2\/1","ETN":"5\/1","EBON":"3\/1","EBAY":"5\/1","EBET":"4\/1","EBIX":"3\/1","SATS":"3\/1","ECL":"1\/1","EC":"4\/1","ECVT":"5\/1","EDAP":"6\/1","EPC":"3\/1","EGIO":"4\/1","EIX":"1\/1","EDIT":"5\/1","EW":"4\/1","EFTR":"6\/1","EGAN":"6\/1","EH":"3\/1","EHTH":"3\/1","EIGR":"5\/1","EKSO":"2\/1","LOCO":"1\/1","ELAN":"4\/1","ESTC":"3\/1","EGO":"3\/1","SOLO":"4\/1","EA":"3\/1","ELDN":"5\/1","ESI":"2\/1","ELV":"5\/1","EFC":"2\/1","EARN":"6\/1","ELME":"5\/1","ELYS":"3\/1","EMAN":"3\/1","EMBK":"5\/1","EMBC":"2\/1","ERJ":"2\/1","EME":"4\/1","EMKR":"2\/1","EEX":"3\/1","SOL":"5\/1","EBS":"3\/1","EMR":"3\/1","ESRT":"5\/1","EMX":"2\/1","ACT":"3\/1","ENTA":"6\/1","ENB":"5\/1","EHC":"5\/1","ECPG":"5\/1","WIRE":"3\/1","DAVA":"4\/1","EDR":"1\/1","EXK":"3\/1","ENR":"5\/1","WATT":"4\/1","UUUU":"4\/1","ERII":"2\/1","SIXE":"7\/1","ET":"3\/1","NRGV":"2\/1","EPAC":"3\/1","ERF":"3\/1","ENS":"3\/1","NETI":"4\/1","ENFN":"4\/1","ESMT":"5\/1","NETZ":"1\/1","ENG":"1\/1","EHAB":"4\/1","E":"3\/1","ENLC":"6\/1","ELVN":"5\/1","ENOB":"2\/1","ENVA":"4\/1","ENOV":"2\/1","ENVX":"6\/1","ENPH":"4\/1","NPO":"6\/1","ENSV":"2\/1","ENSG":"3\/1","ESGR":"3\/1","ENTG":"2\/1","ENTX":"3\/1","ETR":"1\/1","EBTC":"5\/1","EFSC":"2\/1","EPD":"4\/1","EGLX":"4\/1","EVC":"2\/1","ELA":"3\/1","ENV":"5\/1","NVRI":"2\/1","EVTV":"2\/1","NVST":"6\/1","EVA":"2\/1","NVNO":"6\/1","ENZ":"6\/1","EOG":"5\/1","EOSE":"4\/1","EPAM":"6\/1","PLUS":"1\/1","EPR":"3\/1","EPSN":"3\/1","EQOSQ":"6\/1","EQRX":"1\/1","EQT":"5\/1","EFX":"5\/1","EQ":"5\/1","EQIX":"1\/1","EQNR":"4\/1","EQX":"3\/1","EQH":"3\/1","ETRN":"3\/1","EQBK":"3\/1","EQC":"6\/1","EQR":"5\/1","ERAS":"6\/1","ERIC":"3\/1","ERIE":"6\/1","ZGN":"1\/1","ERO":"4\/1","ESAB":"6\/1","ESE":"3\/1","ESPR":"3\/1","GWH":"3\/1","EPIX":"4\/1","ESNT":"2\/1","EPRT":"6\/1","WTRG":"6\/1","ESS":"4\/1","ESTA":"1\/1","ERNA":"4\/1","BDRY":"1\/1","ITEQ":"5\/1","MJ":"5\/1","VALT":"3\/1","AWAY":"2\/1","HACK":"2\/1","SILJ":"5\/1","GERM":"3\/1","IVES":"4\/1","HDRO":"2\/1","GFOF":"5\/1","RIET":"3\/1","NUSI":"3\/1","DEEP":"1\/1","SEA":"2\/1","JETS":"3\/1","PFFA":"3\/1","ETD":"1\/1","ETSY":"2\/1","EURN":"5\/1","EEFT":"1\/1","EWCZ":"4\/1","EVAX":"1\/1","EVEX":"4\/1","EVLO":"2\/1","EB":"4\/1","EVBG":"3\/1","EVCM":"3\/1","EVR":"3\/1","EG":"6\/1","EVRG":"3\/1","EVRI":"1\/1","EVER":"5\/1","ES":"6\/1","MRAM":"3\/1","EVTC":"3\/1","EVGO":"3\/1","EVGN":"1\/1","EVH":"6\/1","EOLS":"4\/1","EPM":"3\/1","EVLV":"4\/1","EXAS":"4\/1","EE":"3\/1","TDSC":"2\/1","HYLD":"8\/1","NVQ":"2\/1","QRFT":"6\/1","BITQ":"3\/1","KOIN":"4\/1","EMQQ":"6\/1","ROBO":"1\/1","XELA":"3\/1","EXEL":"4\/1","EXC":"5\/1","EXLS":"3\/1","EXPI":"3\/1","EXPE":"3\/1","EXPD":"4\/1","EXFY":"3\/1","EXPO":"3\/1","EXPR":"6\/1","XPRO":"5\/1","EXAI":"4\/1","EXR":"6\/1","EXTR":"3\/1","XOM":"3\/1","EYEN":"4\/1","EYPT":"4\/1","EZPW":"1\/1","FNB":"3\/1","FG":"1\/1","FXLV":"4\/1","FFIV":"3\/1","FN":"5\/1","FDS":"2\/1","FICO":"2\/1","FANH":"3\/1","FFIE":"2\/1","FTCH":"4\/1","FMAO":"1\/1","FMNB":"3\/1","FPI":"2\/1","FARO":"6\/1","FAST":"1\/1","FSLY":"3\/1","FATE":"6\/1","FATH":"1\/1","FTHM":"4\/1","FAZE":"3\/1","TTAC":"2\/1","AGM":"3\/1","FRT":"6\/1","FSS":"2\/1","FHI":"4\/1","FDX":"6\/1","FENC":"2\/1","FERG":"3\/1","RACE":"2\/1","GSM":"6\/1","FGH":"6\/1","FGEN":"4\/1","FRNW":"6\/1","ONEQ":"5\/1","FSTA":"5\/1","FDVV":"3\/1","FIDI":"1\/1","FDMO":"6\/1","FCOM":"3\/1","FDIS":"3\/1","FENY":"6\/1","FNCL":"1\/1","FHLC":"2\/1","FIDU":"6\/1","FTEC":"3\/1","FMAT":"2\/1","FREL":"1\/1","FUTY":"6\/1","FQAL":"3\/1","FSMD":"1\/1","FBND":"5\/1","FNF":"3\/1","FIS":"5\/1","FDUS":"3\/1","FRGI":"2\/1","FITB":"5\/1","FIGS":"6\/1","FOA":"4\/1","FISI":"3\/1","SIXM":"7\/1","FNCH":"4\/1","FNGR":"2\/1","FINV":"3\/1","FA":"5\/1","FAF":"3\/1","FNLC":"4\/1","FBNC":"3\/1","FBP":"2\/1","FBMS":"5\/1","FRBA":"4\/1","FCBC":"3\/1","FCF":"1\/1","FCNCA":"1\/1","FFBC":"2\/1","FFWM":"6\/1","FHB":"6\/1","FHN":"5\/1","FR":"4\/1","INBK":"5\/1","FIBK":"3\/1","AG":"4\/1","FMBH":"1\/1","FRCB":"4\/1","FSLR":"3\/1","FPE":"3\/1","FCA":"2\/1","FDT":"1\/1","FEMS":"6\/1","FEM":"8\/1","FEUZ":"2\/1","FEP":"7\/1","FGM":"4\/1","FJP":"5\/1","FSZ":"1\/1","FTGC":"1\/1","SKYY":"7\/1","FXD":"7\/1","FXG":"7\/1","FDNI":"3\/1","FXN":"7\/1","FXH":"7\/1","FXR":"7\/1","FTAG":"4\/1","FXZ":"7\/1","CIBR":"3\/1","FXL":"7\/1","FXU":"7\/1","FPX":"3\/1","FTCS":"2\/1","FDN":"2\/1","FAN":"3\/1","FTSM":"3\/1","LMBS":"3\/1","QCLN":"5\/1","FCG":"5\/1","FBT":"3\/1","FV":"6\/1","TDIV":"5\/1","ROBT":"5\/1","SDVY":"5\/1","CRPT":"8\/1","FIXD":"6\/1","FEX":"5\/1","FDL":"1\/1","QQEW":"7\/1","QTEC":"7\/1","QABA":"5\/1","FRI":"3\/1","FVD":"3\/1","FTC":"7\/1","FWRG":"3\/1","FCFS":"2\/1","FE":"5\/1","SVVC":"2\/1","FSV":"4\/1","FI":"6\/1","FSR":"4\/1","FIVE":"2\/1","FIVN":"3\/1","FVRR":"4\/1","FLT":"3\/1","FLNG":"2\/1","FLEX":"3\/1","IQDF":"3\/1","GUNR":"4\/1","QDEF":"6\/1","FND":"5\/1","FTK":"6\/1","FLO":"3\/1","FLS":"1\/1","FLNC":"6\/1","FLNT":"6\/1","FLR":"5\/1","FLUX":"3\/1","FLYW":"2\/1","FMC":"3\/1","FOCS":"5\/1","FCUV":"6\/1","FHTX":"6\/1","FMX":"3\/1","FL":"2\/1","F":"6\/1","FRSX":"3\/1","FOR":"2\/1","FRGE":"1\/1","FORG":"4\/1","FORM":"1\/1","FORR":"5\/1","FBRX":"3\/1","FTNT":"4\/1","FTS":"3\/1","FTV":"5\/1","FBIO":"3\/1","FSM":"4\/1","FBIN":"5\/1","FET":"6\/1","FWRD":"3\/1","FOSL":"4\/1","FSTR":"5\/1","FOXA":"3\/1","FOX":"3\/1","FOXF":"3\/1","FRG":"4\/1","FNV":"2\/1","FBRT":"1\/1","FELE":"1\/1","HELX":"5\/1","BEN":"5\/1","FSP":"2\/1","FLJP":"6\/1","FLQL":"5\/1","FRHC":"6\/1","FCX":"6\/1","RAIL":"5\/1","FREQ":"3\/1","FMS":"2\/1","FDP":"2\/1","FRPT":"4\/1","FRSH":"3\/1","FREY":"3\/1","FTDR":"3\/1","FYBR":"3\/1","ULCC":"6\/1","FRO":"2\/1","FSK":"3\/1","HUGE":"4\/1","IGLD":"8\/1","RDVI":"6\/1","FTAI":"4\/1","FTCI":"4\/1","FCN":"2\/1","FUBO":"2\/1","FTEK":"3\/1","FCEL":"4\/1","FULC":"1\/1","FLGT":"3\/1","FLL":"1\/1","YMM":"6\/1","FUL":"4\/1","FULT":"3\/1","FNKO":"5\/1","HTOO":"3\/1","FUSN":"5\/1","FUTU":"3\/1","FTFT":"3\/1","FF":"4\/1","FVCB":"1\/1","GIII":"3\/1","GTHX":"5\/1","GAIA":"3\/1","GANX":"3\/1","GLPG":"3\/1","GALT":"5\/1","GLTO":"1\/1","GRTX":"4\/1","GAU":"3\/1","AJG":"3\/1","GAMB":"2\/1","GAME":"5\/1","GME":"3\/1","GMDA":"6\/1","GLPI":"1\/1","GAN":"3\/1","GCI":"1\/1","GOTU":"1\/1","GPS":"3\/1","GRMN":"3\/1","GTX":"1\/1","IT":"1\/1","GTES":"4\/1","GATO":"4\/1","GATX":"1\/1","GCMG":"5\/1","GDS":"3\/1","GEHC":"3\/1","GEN":"4\/1","GNSS":"4\/1","GNK":"3\/1","GENC":"6\/1","WGS":"3\/1","GNRC":"6\/1","GD":"3\/1","GE":"2\/1","GIS":"6\/1","GM":"1\/1","GBIO":"4\/1","GCO":"1\/1","GEL":"6\/1","GENE":"3\/1","GNE":"6\/1","GNS":"2\/1","GENI":"6\/1","G":"5\/1","GNPX":"1\/1","GNTX":"4\/1","THRM":"3\/1","GPC":"3\/1","GNW":"1\/1","GEO":"1\/1","GPRK":"2\/1","GEOS":"3\/1","GGB":"4\/1","GERN":"1\/1","GETY":"1\/1","GTY":"6\/1","GEVO":"3\/1","GFL":"4\/1","ROCK":"6\/1","GILT":"1\/1","GIL":"3\/1","GILD":"5\/1","DNA":"4\/1","GTLB":"5\/1","GBCI":"3\/1","GLAD":"3\/1","GOOD":"2\/1","GAIN":"6\/1","LAND":"3\/1","GLT":"1\/1","GKOS":"1\/1","VRAR":"3\/1","GB":"3\/1","GBTG":"3\/1","GLBE":"5\/1","GIC":"4\/1","GMRE":"6\/1","GLP":"1\/1","GPN":"1\/1","GSL":"3\/1","GWRS":"4\/1","AGNG":"3\/1","AIQ":"1\/1","DRIV":"1\/1","POTX":"3\/1","AQWA":"1\/1","CLOU":"2\/1","KRMA":"3\/1","BUG":"3\/1","DJIA":"4\/1","EBIZ":"2\/1","FYLG":"4\/1","FINX":"5\/1","ARGT":"7\/1","ASEA":"3\/1","HYDR":"1\/1","GNOM":"1\/1","GURU":"7\/1","MLPX":"7\/1","MLPA":"4\/1","GXG":"7\/1","KROP":"3\/1","COPX":"3\/1","GOEX":"2\/1","SIL":"1\/1","URA":"2\/1","DIV":"3\/1","HYLG":"6\/1","TYLG":"1\/1","LIT":"6\/1","MILN":"6\/1","CHIQ":"7\/1","CHIC":"3\/1","CHIE":"3\/1","CHIX":"7\/1","CHII":"4\/1","CHIK":"3\/1","CHIM":"3\/1","CHIR":"1\/1","GREK":"7\/1","EMFM":"4\/1","SDEM":"3\/1","QYLD":"3\/1","QRMI":"1\/1","QYLG":"4\/1","PFFV":"4\/1","BOTZ":"1\/1","RYLD":"4\/1","RYLG":"4\/1","CATH":"3\/1","XYLD":"3\/1","XYLG":"6\/1","XRMI":"3\/1","SOCL":"7\/1","SDIV":"7\/1","EDOC":"6\/1","GXTG":"3\/1","PFFD":"3\/1","HERO":"4\/1","WNDY":"4\/1","EMBD":"2\/1","PAVE":"5\/1","GFS":"5\/1","GSAT":"4\/1","GLOB":"4\/1","GL":"3\/1","GLBS":"4\/1","GMED":"5\/1","GLYC":"3\/1","GMS":"3\/1","GDDY":"1\/1","GOGO":"4\/1","GGR":"3\/1","GOCO":"6\/1","GOL":"4\/1","GLNG":"4\/1","GFI":"6\/1","GORO":"6\/1","GROY":"1\/1","GDEN":"3\/1","GMGI":"2\/1","GOGL":"4\/1","GLOV":"3\/1","GSBD":"2\/1","GSEW":"6\/1","GBIL":"6\/1","GHYB":"4\/1","GIGB":"3\/1","GEM":"5\/1","GSIE":"3\/1","GSLC":"2\/1","GDEF":"2\/1","GVIP":"3\/1","GINN":"4\/1","JUST":"5\/1","GS":"1\/1","GBDC":"3\/1","GDRX":"6\/1","GT":"3\/1","GSHD":"4\/1","GPRO":"4\/1","GRC":"6\/1","GOSS":"4\/1","GRAB":"3\/1","GGG":"3\/1","EAF":"6\/1","GHM":"3\/1","GWW":"6\/1","GTE":"4\/1","LOPE":"1\/1","GVA":"3\/1","GPMT":"3\/1","TSL":"5\/1","CONL":"1\/1","AAPB":"3\/1","COMB":"2\/1","GPK":"3\/1","GRPH":"5\/1","GTN":"3\/1","AJX":"4\/1","GLDD":"3\/1","GRBK":"6\/1","GDOT":"3\/1","GPRE":"1\/1","GPP":"4\/1","GBX":"4\/1","GHL":"6\/1","GREE":"3\/1","GLRE":"1\/1","GP":"3\/1","GEF":"1\/1","GDYN":"3\/1","GFF":"5\/1","GRFS":"6\/1","GRND":"5\/1","GRTS":"3\/1","GO":"3\/1","GPI":"1\/1","GRPN":"2\/1","GROV":"2\/1","GRWG":"3\/1","OMAB":"6\/1","ASR":"1\/1","GGAL":"4\/1","SUPV":"6\/1","TV":"4\/1","GSIT":"1\/1","GSK":"5\/1","GTBP":"1\/1","GNTY":"1\/1","GH":"2\/1","GES":"6\/1","GWRE":"2\/1","GIFI":"3\/1","GPOR":"3\/1","GXO":"4\/1","HEES":"6\/1","HTHT":"3\/1","HCKT":"2\/1","HAE":"3\/1","HGTY":"4\/1","HAIN":"6\/1","HOFV":"2\/1","HNRG":"6\/1","HAL":"6\/1","HALO":"4\/1","HLNE":"3\/1","HWC":"3\/1","HBI":"5\/1","HAFC":"5\/1","HASI":"3\/1","HONE":"3\/1","HOG":"5\/1","HLIT":"4\/1","HRMY":"1\/1","HMY":"2\/1","HROW":"1\/1","HCOM":"1\/1","HIG":"3\/1","HBIO":"1\/1","HAS":"5\/1","HCP":"5\/1","HVT":"3\/1","HE":"6\/1","HA":"4\/1","HWKN":"4\/1","HAYN":"3\/1","HAYW":"3\/1","HBT":"3\/1","HCA":"4\/1","HCI":"6\/1","HDB":"6\/1","SIXV":"7\/1","HCAT":"5\/1","HR":"2\/1","HCSG":"3\/1","HQY":"5\/1","PEAK":"6\/1","HSTM":"2\/1","HTLD":"1\/1","HTLF":"1\/1","HL":"5\/1","HEI":"3\/1","HSII":"2\/1","HELE":"1\/1","HLGN":"3\/1","HLIO":"3\/1","HLX":"1\/1","MOMO":"3\/1","HP":"5\/1","JKHY":"4\/1","HSIC":"4\/1","HEPA":"3\/1","HLF":"2\/1","HRI":"6\/1","HTGC":"3\/1","HCCI":"2\/1","HFWA":"2\/1","HRTG":"2\/1","HRTX":"4\/1","HT":"4\/1","HSY":"6\/1","HTZ":"3\/1","HES":"5\/1","HESM":"4\/1","HPE":"3\/1","HXL":"3\/1","DINO":"5\/1","HIBB":"3\/1","HITI":"5\/1","SNLN":"3\/1","HPK":"4\/1","HIW":"3\/1","HI":"3\/1","HLMN":"4\/1","HTH":"3\/1","HGV":"3\/1","HLT":"3\/1","HIMX":"2\/1","HIMS":"3\/1","HIPO":"6\/1","HRT":"4\/1","HIVE":"4\/1","HNI":"5\/1","HLLY":"1\/1","HEP":"3\/1","HOLI":"6\/1","HOLX":"2\/1","HBCP":"3\/1","HOMB":"4\/1","HD":"3\/1","HMPT":"4\/1","HMST":"5\/1","FIXX":"4\/1","HMC":"6\/1","HNST":"1\/1","HON":"5\/1","HOFT":"6\/1","HOOK":"5\/1","HRZN":"5\/1","HZNP":"5\/1","HRL":"2\/1","HST":"5\/1","TWNK":"1\/1","HUSA":"4\/1","HHC":"3\/1","HWM":"5\/1","HPQ":"3\/1","HSBC":"1\/1","HUBG":"1\/1","HUBS":"2\/1","HBM":"3\/1","HPP":"3\/1","HDSN":"4\/1","HUMA":"6\/1","HUM":"1\/1","JBHT":"5\/1","HBAN":"1\/1","HII":"3\/1","HUN":"1\/1","HURN":"2\/1","HUT":"2\/1","HCM":"5\/1","HUYA":"4\/1","H":"3\/1","HYMC":"1\/1","HYFM":"4\/1","HYLN":"3\/1","HYPR":"4\/1","HYREQ":"4\/1","HY":"3\/1","HYZN":"3\/1","IMAB":"2\/1","IIIV":"3\/1","IAC":"5\/1","IAG":"3\/1","IBEX":"1\/1","IBIO":"4\/1","ICAD":"1\/1","IEP":"4\/1","ICHR":"5\/1","IBN":"5\/1","ICL":"5\/1","ICLK":"2\/1","ICLR":"5\/1","ICVX":"6\/1","ICUI":"3\/1","IDA":"5\/1","IDR":"5\/1","IDEX":"5\/1","IDYA":"4\/1","INVE":"2\/1","IEX":"3\/1","IDXX":"5\/1","IDT":"4\/1","IESC":"3\/1","IGC":"4\/1","IGMS":"1\/1","IHRT":"3\/1","IHS":"4\/1","ITW":"2\/1","ILMN":"3\/1","IMAX":"2\/1","IMBIQ":"3\/1","IMTX":"6\/1","IMMR":"3\/1","IMUX":"2\/1","IBRX":"5\/1","IMCR":"4\/1","IMGN":"1\/1","IMNM":"2\/1","IPA":"6\/1","IMVT":"6\/1","IMMP":"3\/1","IMO":"6\/1","IMPP":"3\/1","PI":"4\/1","NARI":"6\/1","INCY":"2\/1","ICD":"4\/1","IRT":"6\/1","INDB":"4\/1","IBCP":"2\/1","QAI":"4\/1","MNA":"1\/1","INDI":"3\/1","ILPT":"3\/1","SIXI":"7\/1","INFN":"3\/1","INFI":"4\/1","INFA":"3\/1","INFY":"5\/1","INFU":"4\/1","ING":"3\/1","IR":"3\/1","IMKTA":"5\/1","INGR":"5\/1","INBX":"1\/1","INMD":"3\/1","INMB":"2\/1","INOD":"3\/1","IOSP":"4\/1","INNV":"3\/1","VATE":"3\/1","IIPR":"5\/1","FFTY":"5\/1","LOUP":"4\/1","PSEP":"4\/1","INVA":"3\/1","INVZ":"2\/1","INGN":"4\/1","NOTV":"6\/1","INO":"1\/1","INZY":"6\/1","INSG":"4\/1","NSIT":"5\/1","INSM":"4\/1","NSP":"2\/1","ISPO":"2\/1","INSP":"3\/1","INSE":"4\/1","NSPR":"3\/1","IBP":"3\/1","IIIN":"3\/1","TIL":"4\/1","INST":"4\/1","PODD":"5\/1","INTA":"2\/1","ITGR":"2\/1","IART":"3\/1","IAS":"2\/1","INTC":"3\/1","NTLA":"3\/1","IDN":"2\/1","IPAR":"2\/1","IBKR":"3\/1","ICPT":"2\/1","ICE":"3\/1","INCR":"4\/1","IDCC":"5\/1","TILE":"2\/1","IBOC":"4\/1","IBM":"5\/1","IFF":"2\/1","IGT":"2\/1","IP":"3\/1","INSW":"4\/1","IPG":"6\/1","INTT":"1\/1","IVAC":"5\/1","ITCI":"3\/1","IPI":"3\/1","INTZ":"1\/1","INTU":"5\/1","ISRG":"2\/1","IVT":"3\/1","SJIM":"1\/1","GSY":"5\/1","EVMT":"1\/1","PDBC":"2\/1","SATO":"4\/1","FXA":"7\/1","FXB":"7\/1","FXC":"6\/1","FXE":"7\/1","FXY":"7\/1","FXF":"1\/1","DBC":"7\/1","DBA":"1\/1","DBB":"7\/1","DBE":"6\/1","DBO":"3\/1","DBP":"1\/1","UDN":"1\/1","UUP":"7\/1","PWZ":"5\/1","PCEF":"8\/1","PIZ":"7\/1","PIE":"7\/1","DWAS":"7\/1","PCY":"7\/1","PHB":"1\/1","PXH":"4\/1","PBD":"1\/1","KBWB":"7\/1","KBWD":"5\/1","KBWP":"2\/1","KBWY":"4\/1","CUT":"3\/1","QQQJ":"2\/1","PGX":"7\/1","SPVU":"5\/1","SPHB":"7\/1","RWL":"7\/1","EELV":"6\/1","CGW":"3\/1","RWK":"7\/1","XMLV":"2\/1","RWJ":"7\/1","PSCE":"5\/1","PSCH":"3\/1","SPHD":"5\/1","SPLV":"7\/1","TAN":"3\/1","BKLN":"6\/1","VRP":"3\/1","PPA":"3\/1","PKW":"7\/1","PDP":"2\/1","PTF":"1\/1","PXE":"3\/1","PEJ":"4\/1","PXJ":"7\/1","PJP":"7\/1","PSI":"3\/1","PGF":"2\/1","PRF":"7\/1","PRFZ":"3\/1","PSP":"7\/1","PGJ":"1\/1","PEY":"2\/1","PID":"8\/1","PNQI":"7\/1","SPGP":"4\/1","XLG":"1\/1","XMMO":"3\/1","XMHQ":"3\/1","XMVM":"3\/1","RFV":"3\/1","XSVM":"3\/1","RZV":"5\/1","CSD":"7\/1","RSPD":"1\/1","RSPG":"3\/1","RSPF":"3\/1","RSPH":"4\/1","RSPN":"3\/1","RSPM":"3\/1","RSPR":"3\/1","RSPT":"6\/1","RSP":"4\/1","RPV":"7\/1","SPHQ":"1\/1","PHO":"7\/1","PBW":"7\/1","CVY":"7\/1","PIN":"3\/1","IVZ":"4\/1","IVR":"5\/1","QQQ":"8\/1","NVDS":"6\/1","PYPT":"1\/1","TARK":"2\/1","THCX":"3\/1","SARK":"6\/1","TSLQ":"6\/1","NVTA":"3\/1","INVH":"2\/1","IVVD":"6\/1","IONS":"6\/1","IONQ":"4\/1","IOVA":"2\/1","VXZ":"9\/1","VXX":"9\/1","IPGP":"2\/1","IQ":"5\/1","IQV":"4\/1","IRTC":"5\/1","IRDM":"4\/1","IREN":"4\/1","IRBT":"2\/1","IRM":"6\/1","IRNT":"6\/1","IRWD":"4\/1","IRS":"3\/1","USHY":"3\/1","ICF":"7\/1","ICVT":"2\/1","IAGG":"2\/1","IEFA":"7\/1","HEFA":"8\/1","IGV":"7\/1","IAUF":"8\/1","IAU":"2\/1","IEMG":"7\/1","DVYE":"3\/1","ESGE":"2\/1","FM":"1\/1","FILL":"1\/1","LEMB":"7\/1","VEGI":"3\/1","EWA":"3\/1","EWK":"7\/1","BKF":"8\/1","EWZ":"7\/1","EWC":"1\/1","EWQ":"7\/1","RING":"7\/1","EWG":"1\/1","EWH":"1\/1","EWI":"4\/1","SCJ":"7\/1","EWJ":"7\/1","EWW":"7\/1","EWM":"5\/1","EWN":"7\/1","EPP":"1\/1","EWS":"7\/1","EWP":"5\/1","EZA":"3\/1","EWY":"2\/1","EWD":"8\/1","EWL":"7\/1","EWT":"5\/1","THD":"3\/1","TUR":"7\/1","GVI":"7\/1","HYXU":"3\/1","IDV":"7\/1","CEMB":"3\/1","REM":"7\/1","ECH":"8\/1","CNYA":"2\/1","EFG":"2\/1","EFAV":"7\/1","EFV":"5\/1","EEMV":"7\/1","EZU":"7\/1","PICK":"7\/1","ACWV":"7\/1","SLVP":"3\/1","INDA":"8\/1","USMV":"7\/1","MTUM":"8\/1","QUAL":"3\/1","VLUE":"3\/1","IGE":"3\/1","GSG":"5\/1","SLV":"8\/1","STIP":"3\/1","SHYG":"3\/1","SHY":"5\/1","IGLB":"7\/1","TLH":"7\/1","TLT":"7\/1","IEI":"1\/1","IEF":"2\/1","AIA":"2\/1","FXI":"7\/1","ECNS":"3\/1","ISTB":"5\/1","DGRO":"3\/1","HDV":"1\/1","IEUR":"6\/1","IPAC":"5\/1","IXUS":"7\/1","IJH":"4\/1","IJR":"3\/1","ITOT":"7\/1","IUSG":"5\/1","IUSV":"3\/1","IVV":"7\/1","IUSB":"2\/1","AGG":"7\/1","USRT":"3\/1","HEZU":"4\/1","HEWG":"3\/1","IHAK":"3\/1","SCZ":"8\/1","SUSB":"3\/1","IEV":"4\/1","IGM":"2\/1","XT":"5\/1","FALN":"3\/1","IXP":"7\/1","IDNA":"1\/1","ICLN":"2\/1","WOOD":"7\/1","IGF":"7\/1","IXJ":"1\/1","IOO":"7\/1","IXC":"7\/1","IXG":"6\/1","MXI":"3\/1","REET":"3\/1","IXN":"3\/1","HEWJ":"3\/1","HYG":"7\/1","LQD":"7\/1","IFGL":"7\/1","WPS":"4\/1","INTF":"3\/1","IGOV":"7\/1","IBB":"6\/1","SOXX":"7\/1","IGSB":"3\/1","IGIB":"7\/1","EMB":"7\/1","ILF":"6\/1","MBB":"7\/1","IWC":"7\/1","ILCG":"3\/1","IMCG":"4\/1","AAXJ":"7\/1","ACWI":"7\/1","ACWX":"7\/1","MCHI":"7\/1","EFA":"7\/1","EEM":"7\/1","EUFN":"7\/1","IQLT":"2\/1","IVLU":"3\/1","EWU":"2\/1","SUSA":"2\/1","SIZE":"3\/1","IGN":"7\/1","MUB":"5\/1","ENZL":"7\/1","PFF":"7\/1","REZ":"7\/1","IRBO":"6\/1","IWB":"8\/1","IWF":"7\/1","IWD":"8\/1","IWO":"8\/1","IWN":"8\/1","IWP":"7\/1","IWS":"7\/1","IWR":"7\/1","IWX":"1\/1","IWM":"8\/1","IWV":"5\/1","OEF":"5\/1","IVW":"7\/1","IVE":"3\/1","IJK":"7\/1","IJJ":"7\/1","IJT":"7\/1","DVY":"6\/1","IDRV":"1\/1","SHV":"3\/1","IJS":"7\/1","TIP":"3\/1","TFLO":"3\/1","LRGF":"4\/1","IYM":"2\/1","IYE":"7\/1","IYF":"2\/1","IHI":"6\/1","IHE":"1\/1","IYR":"5\/1","IYW":"7\/1","IDU":"7\/1","IAI":"1\/1","IYC":"6\/1","IYH":"7\/1","IHF":"8\/1","IEZ":"6\/1","IAT":"2\/1","SMLF":"1\/1","USIG":"7\/1","IWFH":"4\/1","CMDY":"1\/1","CCRV":"3\/1","COMT":"2\/1","LQDH":"3\/1","HYGH":"3\/1","ITA":"3\/1","IEDI":"4\/1","ITB":"1\/1","IFRA":"3\/1","IEO":"5\/1","IYZ":"3\/1","IYT":"5\/1","GOVT":"3\/1","SVAL":"1\/1","ISUN":"3\/1","ITP":"3\/1","ITUB":"4\/1","ITOS":"2\/1","ITRI":"1\/1","ITT":"2\/1","IZEA":"5\/1","JPEM":"5\/1","JPIN":"5\/1","JEPI":"3\/1","JIRE":"4\/1","JPUS":"5\/1","JEPQ":"2\/1","JPST":"3\/1","JQUA":"6\/1","JVAL":"1\/1","JBL":"3\/1","JACK":"2\/1","JXN":"3\/1","J":"5\/1","JAGX":"2\/1","JHX":"2\/1","JRVR":"4\/1","JAMF":"4\/1","JMBS":"4\/1","JAAA":"3\/1","JHG":"5\/1","JBI":"4\/1","JANX":"1\/1","JSPR":"4\/1","JAZZ":"3\/1","JBGS":"3\/1","JD":"4\/1","JEF":"5\/1","JELD":"5\/1","JBLU":"1\/1","FROG":"1\/1","JKS":"1\/1","JOAN":"2\/1","JOBY":"1\/1","JBT":"3\/1","JHML":"6\/1","JMSB":"2\/1","JNJ":"5\/1","JCI":"3\/1","JYNT":"3\/1","JLL":"3\/1","YY":"1\/1","BBCA":"2\/1","BBEU":"3\/1","AMJ":"8\/1","JPM":"4\/1","JCPI":"2\/1","JMST":"2\/1","JMIA":"3\/1","JNPR":"1\/1","KAI":"3\/1","KALU":"4\/1","KLTR":"4\/1","KALV":"2\/1","KAMN":"3\/1","KNDI":"4\/1","BZ":"3\/1","TOON":"6\/1","KRTX":"4\/1","KPTI":"2\/1","KPLT":"4\/1","KYN":"3\/1","KB":"6\/1","KBH":"6\/1","KBR":"4\/1","BEKE":"5\/1","KRNY":"3\/1","K":"5\/1","KELYA":"1\/1","KMT":"1\/1","KW":"1\/1","KEN":"3\/1","KVUE":"3\/1","KROS":"4\/1","KDP":"2\/1","KTCC":"3\/1","KEY":"6\/1","KEYS":"3\/1","KZR":"3\/1","KFRC":"4\/1","KVSA":"4\/1","KRC":"3\/1","KE":"3\/1","KRP":"1\/1","KMB":"4\/1","KIM":"6\/1","KMI":"3\/1","KNTK":"3\/1","KC":"4\/1","KNSA":"1\/1","KNTE":"6\/1","KGC":"3\/1","KNSL":"3\/1","KEX":"1\/1","KIRK":"4\/1","KRG":"4\/1","KKR":"3\/1","KREF":"6\/1","KLAC":"3\/1","KLXE":"4\/1","KNX":"3\/1","KNOP":"2\/1","KN":"6\/1","KOD":"3\/1","KSS":"5\/1","PHG":"2\/1","KTB":"4\/1","KOPN":"5\/1","KOP":"6\/1","KEP":"4\/1","KFY":"2\/1","KRNT":"3\/1","KRMD":"5\/1","KOS":"3\/1","KHC":"2\/1","KCCA":"5\/1","KWEB":"3\/1","KARS":"5\/1","KMED":"4\/1","KEUA":"4\/1","KRBN":"3\/1","KTEC":"4\/1","BNDD":"6\/1","IVOL":"2\/1","KTOS":"4\/1","DNUT":"5\/1","KR":"1\/1","KRON":"4\/1","KRO":"3\/1","KRYS":"3\/1","KT":"2\/1","KBNT":"6\/1","KLIC":"2\/1","KULR":"1\/1","KURA":"4\/1","KYMR":"2\/1","KD":"3\/1","LHX":"3\/1","LZB":"2\/1","LH":"1\/1","LADR":"6\/1","LKFN":"5\/1","LAKE":"6\/1","LRCX":"6\/1","LAMR":"5\/1","LW":"4\/1","LE":"3\/1","LSTR":"1\/1","LNTH":"5\/1","LGO":"1\/1","LRMR":"4\/1","LVS":"2\/1","LTCH":"3\/1","SWIM":"6\/1","LSCC":"6\/1","RODM":"3\/1","EL":"3\/1","LAUR":"4\/1","LAZ":"3\/1","LCII":"3\/1","LFLY":"4\/1","LPTX":"3\/1","LEA":"3\/1","LZ":"6\/1","LEGN":"3\/1","LEG":"3\/1","LDOS":"4\/1","LMAT":"4\/1","LMND":"1\/1","LC":"2\/1","TREE":"1\/1","LEN":"5\/1","LII":"2\/1","DRS":"3\/1","LSAK":"5\/1","LESL":"5\/1","LEVI":"3\/1","LXRX":"4\/1","LX":"5\/1","LPL":"1\/1","LGIH":"3\/1","LI":"1\/1","LICY":"6\/1","LBRDA":"5\/1","LBRDK":"3\/1","LBRT":"4\/1","LBTYA":"5\/1","LBTYK":"1\/1","LILAK":"3\/1","LSXMA":"1\/1","LSXMK":"6\/1","FWONA":"3\/1","FWONK":"3\/1","LTRPA":"4\/1","LTH":"4\/1","LFCR":"1\/1","LFMD":"1\/1","LFST":"3\/1","LFVN":"1\/1","LGND":"1\/1","LNW":"6\/1","LTBR":"2\/1","ZEV":"3\/1","LSPD":"3\/1","LWLG":"6\/1","LILM":"3\/1","LLY":"5\/1","LMB":"3\/1","LMNL":"4\/1","LMNR":"6\/1","LINC":"2\/1","LECO":"3\/1","LNC":"2\/1","LIN":"2\/1","LNN":"2\/1","LCTX":"4\/1","LGHL":"5\/1","LGF.A":"4\/1","LGF.B":"4\/1","LPCN":"3\/1","YVR":"2\/1","LQDA":"5\/1","LQDT":"1\/1","BAD":"1\/1","CCOR":"4\/1","INFL":"3\/1","OVLH":"3\/1","OVT":"3\/1","METV":"2\/1","MEME":"4\/1","BETZ":"2\/1","NERD":"4\/1","SPRX":"5\/1","TILL":"3\/1","LAD":"3\/1","LAC":"3\/1","DBMF":"1\/1","LFUS":"2\/1","LIVN":"3\/1","LYV":"6\/1","LOB":"2\/1","LTHM":"3\/1","LVO":"5\/1","LPSN":"1\/1","RAMP":"1\/1","LVOX":"3\/1","LVWR":"3\/1","LIZI":"5\/1","LKQ":"6\/1","LL":"6\/1","LYG":"2\/1","LMFA":"4\/1","LDI":"2\/1","LOCL":"3\/1","LMT":"5\/1","L":"1\/1","LGMK":"6\/1","LOGI":"5\/1","LOMA":"6\/1","LOOP":"5\/1","RIDEQ":"5\/1","LTRY":"3\/1","LPX":"2\/1","LOVE":"5\/1","LOW":"3\/1","LPLA":"2\/1","LXU":"5\/1","LYTS":"5\/1","LCID":"1\/1","LHDXQ":"3\/1","LU":"3\/1","LULU":"2\/1","LVLU":"3\/1","LUMN":"2\/1","LITE":"1\/1","LAZR":"1\/1","LUNA":"3\/1","LXFR":"3\/1","LXP":"4\/1","LYEL":"4\/1","LYFT":"5\/1","LYB":"3\/1","MTB":"2\/1","MDC":"3\/1","MHO":"2\/1","MAC":"6\/1","MTSI":"3\/1","MGNX":"3\/1","M":"5\/1","SHOO":"6\/1","MSGE":"3\/1","MSGS":"2\/1","MDGL":"4\/1","MAG":"5\/1","MMP":"3\/1","MGTA":"4\/1","MGIC":"3\/1","MGA":"1\/1","MX":"5\/1","MGNI":"2\/1","MGY":"3\/1","MHLD":"2\/1","SECT":"2\/1","MAIN":"4\/1","TMAT":"1\/1","MMYT":"4\/1","MBUU":"5\/1","TUSK":"4\/1","TPYP":"5\/1","MANU":"6\/1","MANH":"3\/1","MNTX":"3\/1","MTW":"4\/1","MNKD":"5\/1","MAN":"1\/1","MFC":"1\/1","MARA":"2\/1","MRO":"3\/1","MPC":"2\/1","MRVI":"6\/1","MMI":"3\/1","MCS":"1\/1","MRIN":"4\/1","MPX":"5\/1","HZO":"1\/1","MRNS":"2\/1","MKL":"3\/1","MKTX":"3\/1","MKFG":"3\/1","MQ":"3\/1","MAR":"2\/1","VAC":"3\/1","MMC":"3\/1","MRTN":"4\/1","MLM":"6\/1","MMLP":"2\/1","MRVL":"3\/1","MAS":"2\/1","MASI":"5\/1","DOOR":"4\/1","MTZ":"2\/1","MBC":"5\/1","MA":"6\/1","MTDR":"6\/1","MTCH":"3\/1","MTLS":"3\/1","SIXB":"7\/1","MTRN":"3\/1","MATV":"5\/1","MTRX":"4\/1","MATX":"1\/1","MAT":"2\/1","MTTR":"5\/1","MATW":"4\/1","MXCT":"4\/1","MAXN":"4\/1","MMS":"4\/1","MXL":"1\/1","MEC":"4\/1","MBI":"3\/1","MKC":"3\/1","MCD":"1\/1","MUX":"4\/1","MCK":"4\/1","MDU":"3\/1","MFIN":"1\/1","MDVL":"6\/1","MAX":"6\/1","MPW":"4\/1","MNOV":"3\/1","MED":"6\/1","MEDP":"1\/1","MDT":"3\/1","MEIP":"4\/1","MGTX":"5\/1","MLCO":"2\/1","MELI":"2\/1","MBWM":"3\/1","MERC":"5\/1","MBIN":"2\/1","MRK":"2\/1","MFH":"1\/1","MCY":"4\/1","MRCY":"3\/1","MLNK":"5\/1","MMSI":"3\/1","MTH":"3\/1","MACK":"2\/1","MRSN":"3\/1","MRUS":"4\/1","MESA":"1\/1","MSB":"2\/1","MESO":"3\/1","MMAT":"3\/1","META":"1\/1","MTA":"6\/1","MEOH":"4\/1","MEI":"3\/1","MET":"1\/1","MCBS":"5\/1","MCB":"5\/1","MTD":"6\/1","MFA":"3\/1","MGEE":"3\/1","MTG":"4\/1","MGM":"6\/1","MGPI":"3\/1","MCHP":"6\/1","MU":"5\/1","MSFT":"6\/1","MSTR":"1\/1","MVST":"3\/1","MVIS":"2\/1","MPB":"3\/1","MAA":"3\/1","MFIC":"3\/1","MIDD":"1\/1","MSBI":"6\/1","MOFG":"2\/1","MIST":"4\/1","MLR":"4\/1","MLKN":"2\/1","TIGO":"2\/1","MDXG":"4\/1","MNDO":"3\/1","MNMD":"3\/1","MIND":"3\/1","MTX":"6\/1","MRUT":"8\/1","XSP":"8\/1","MNSO":"3\/1","MRTX":"3\/1","MIR":"2\/1","MIRO":"4\/1","MIRM":"4\/1","AVO":"3\/1","MCW":"2\/1","MG":"3\/1","MITK":"4\/1","MUFG":"3\/1","MIXT":"3\/1","MFG":"3\/1","MKSI":"3\/1","MBLY":"5\/1","MODN":"6\/1","MRNA":"4\/1","MOD":"1\/1","MODV":"2\/1","MC":"3\/1","MOGO":"3\/1","MHK":"1\/1","MTEM":"4\/1","MOH":"4\/1","TAP":"3\/1","MNTS":"4\/1","MCRI":"5\/1","MNDY":"3\/1","MDLZ":"1\/1","ML":"3\/1","MDB":"3\/1","MPWR":"5\/1","MNRO":"2\/1","MRCC":"3\/1","MNST":"2\/1","MNTK":"5\/1","MEG":"3\/1","MCO":"3\/1","CAF":"3\/1","MS":"3\/1","CVIE":"6\/1","CVLC":"1\/1","CDEI":"4\/1","CVSE":"2\/1","MORN":"1\/1","MORF":"3\/1","MOS":"6\/1","MPAA":"3\/1","MSI":"6\/1","MOV":"2\/1","MOXC":"6\/1","MP":"4\/1","MPLX":"3\/1","COOP":"4\/1","MRC":"3\/1","MSA":"5\/1","MSM":"1\/1","MXEF":"7\/1","MXEA":"7\/1","MSCI":"6\/1","MLI":"1\/1","MWA":"4\/1","MULN":"4\/1","MPLN":"3\/1","MUR":"5\/1","MUSA":"5\/1","MVO":"4\/1","MYE":"2\/1","MYMD":"4\/1","MYRG":"2\/1","MYGN":"3\/1","MYTE":"1\/1","NABL":"3\/1","NAAS":"4\/1","NBR":"5\/1","NNDM":"4\/1","NNOX":"4\/1","NANOS":"8\/1","NSTG":"3\/1","NNVC":"4\/1","NSSC":"4\/1","NDX":"16\/1","NDAQ":"4\/1","NTRA":"1\/1","FIZZ":"4\/1","NBHC":"2\/1","NCMI":"1\/1","NFG":"4\/1","NGG":"1\/1","NHC":"2\/1","NATI":"1\/1","NRC":"6\/1","NSA":"3\/1","EYE":"3\/1","NTCO":"1\/1","NGS":"5\/1","NGVC":"3\/1","NHTC":"2\/1","NRP":"6\/1","NATR":"4\/1","NWG":"3\/1","NAUT":"6\/1","NLS":"2\/1","NAVB":"3\/1","NAVI":"1\/1","NVGS":"4\/1","NM":"3\/1","NMM":"4\/1","NVTS":"3\/1","NBTB":"1\/1","NCNO":"4\/1","NCR":"3\/1","NKTR":"4\/1","NNI":"4\/1","NMRD":"3\/1","NGMS":"1\/1","NEOG":"4\/1","NEO":"4\/1","NLTX":"2\/1","NEON":"1\/1","NRDS":"5\/1","NRDY":"6\/1","NTAP":"6\/1","NTES":"1\/1","NFLX":"2\/1","NTGR":"2\/1","NTCT":"6\/1","NTWK":"1\/1","NTST":"2\/1","NBIX":"5\/1","STIM":"2\/1","NMTC":"4\/1","NVRO":"4\/1","NFE":"3\/1","NFGC":"4\/1","NGD":"1\/1","NMFC":"2\/1","EDU":"1\/1","NEWP":"3\/1","NEWR":"1\/1","NYCB":"2\/1","NYT":"6\/1","NEGG":"3\/1","NWL":"2\/1","NMRK":"1\/1","NEU":"3\/1","NEM":"3\/1","NR":"5\/1","NWSA":"3\/1","NWS":"4\/1","NEWT":"3\/1","NEXA":"3\/1","NXE":"2\/1","NXDT":"4\/1","NREF":"4\/1","NXRT":"3\/1","NXST":"4\/1","NEXT":"3\/1","KIND":"3\/1","NEE":"2\/1","NEP":"4\/1","NXGN":"4\/1","NEX":"4\/1","NXT":"4\/1","NGL":"2\/1","NICE":"4\/1","NHWK":"5\/1","NKE":"3\/1","NKLA":"3\/1","NINE":"5\/1","NIO":"5\/1","NI":"4\/1","NIU":"4\/1","NKTX":"4\/1","LASR":"2\/1","NMIH":"5\/1","NNBR":"1\/1","NNN":"1\/1","NOAH":"2\/1","NE":"6\/1","NOK":"3\/1","NOMD":"5\/1","NMR":"3\/1","NDLS":"3\/1","NAT":"4\/1","NDSN":"2\/1","JWN":"1\/1","NSC":"2\/1","NOA":"2\/1","NECB":"2\/1","NAK":"6\/1","GDVD":"6\/1","NOG":"4\/1","NSTB":"1\/1","NTRS":"5\/1","NFBK":"5\/1","NOC":"5\/1","NWN":"2\/1","NWPX":"1\/1","NWE":"6\/1","NCLH":"4\/1","NOV":"3\/1","NVMI":"1\/1","NG":"1\/1","NOVT":"1\/1","NVS":"4\/1","NVAX":"3\/1","NVO":"4\/1","NVCR":"4\/1","DNOW":"3\/1","NRG":"3\/1","NRXP":"1\/1","NU":"5\/1","NUS":"2\/1","BURU":"3\/1","NUE":"1\/1","NRIX":"3\/1","SMR":"3\/1","NS":"3\/1","NTNX":"2\/1","NTR":"2\/1","NUVL":"3\/1","NUVA":"1\/1","NUVB":"3\/1","NAN":"6\/1","NVEI":"2\/1","NVVE":"6\/1","NVEE":"5\/1","NVT":"5\/1","NVDA":"5\/1","NXPI":"1\/1","NYMXF":"4\/1","OI":"3\/1","OCSL":"3\/1","OTLY":"2\/1","OBE":"3\/1","OXY":"5\/1","OPTT":"4\/1","OII":"3\/1","OCFC":"3\/1","OCGN":"3\/1","OCUL":"3\/1","OCUP":"4\/1","OCN":"4\/1","OMEX":"4\/1","OPAD":"2\/1","OPI":"2\/1","OFG":"3\/1","OFS":"4\/1","OGE":"1\/1","OIS":"3\/1","OKTA":"5\/1","OLPX":"2\/1","ODFL":"3\/1","ONB":"6\/1","ORI":"1\/1","OSBC":"6\/1","OLMA":"1\/1","OLN":"6\/1","OLK":"3\/1","OLLI":"3\/1","OLO":"1\/1","ZEUS":"4\/1","OHI":"6\/1","OMGA":"6\/1","OMER":"6\/1","OMCL":"4\/1","OMC":"4\/1","ONON":"1\/1","ON":"4\/1","ONTF":"1\/1","OCX":"4\/1","ONTX":"1\/1","ONCT":"6\/1","ONDS":"5\/1","OGS":"4\/1","OLP":"3\/1","OSS":"3\/1","OMF":"2\/1","OKE":"2\/1","OSPN":"3\/1","OSW":"3\/1","ONEW":"1\/1","ONTO":"4\/1","OTRK":"4\/1","OOMA":"3\/1","OPBK":"1\/1","OPAL":"5\/1","LPRO":"3\/1","OTEX":"3\/1","OPEN":"4\/1","KAR":"5\/1","OPRA":"4\/1","OPK":"4\/1","OPRT":"3\/1","OPY":"3\/1","OPFI":"4\/1","OPRX":"3\/1","OPCH":"2\/1","ORCL":"5\/1","ORMP":"4\/1","ORAN":"4\/1","OSUR":"3\/1","OIG":"3\/1","ORC":"2\/1","ORLY":"2\/1","OGI":"2\/1","ORGO":"4\/1","OGN":"6\/1","ONVO":"5\/1","ORGS":"3\/1","ORIC":"3\/1","OCG":"6\/1","OBK":"4\/1","ORGN":"3\/1","OESX":"3\/1","ORN":"1\/1","ONL":"6\/1","OEC":"3\/1","ORLA":"6\/1","ORA":"1\/1","OFIX":"2\/1","KIDS":"3\/1","OSCR":"1\/1","OSK":"1\/1","OSIS":"2\/1","OR":"4\/1","OTIS":"3\/1","OTMO":"4\/1","OTTR":"4\/1","OUST":"2\/1","OB":"5\/1","OUT":"2\/1","OM":"4\/1","OSG":"4\/1","OSTK":"5\/1","OVID":"5\/1","OVV":"4\/1","OMI":"4\/1","OC":"3\/1","OWLT":"1\/1","OXM":"6\/1","OXSQ":"3\/1","PX":"4\/1","PCAR":"1\/1","ODDS":"2\/1","AFTY":"1\/1","SRVR":"6\/1","INDS":"5\/1","ALTL":"1\/1","PALC":"5\/1","PTNQ":"5\/1","PTBD":"3\/1","PTLC":"4\/1","COWZ":"1\/1","CALF":"1\/1","PACB":"4\/1","PCRX":"6\/1","PKG":"6\/1","PTVE":"5\/1","PACW":"4\/1","PGY":"6\/1","PD":"5\/1","PAGS":"3\/1","PLTR":"3\/1","PTN":"5\/1","PANW":"2\/1","PLMR":"3\/1","PAM":"3\/1","PAAS":"6\/1","PANL":"4\/1","PZZA":"6\/1","PARR":"1\/1","PAR":"1\/1","FNA":"3\/1","PARAA":"5\/1","PARA":"5\/1","PGRE":"4\/1","PRTK":"5\/1","PKE":"3\/1","PCYG":"2\/1","PK":"3\/1","PRK":"1\/1","PKOH":"6\/1","PH":"5\/1","PSN":"3\/1","PASG":"1\/1","CASH":"5\/1","PAX":"4\/1","PATK":"3\/1","PDCO":"1\/1","PTEN":"3\/1","PAVM":"4\/1","PAYX":"3\/1","PAYC":"1\/1","PYCR":"6\/1","PCTY":"1\/1","PAY":"2\/1","PAYO":"1\/1","PYPL":"6\/1","PSFE":"3\/1","PAYS":"5\/1","PBF":"3\/1","CNXN":"6\/1","PCB":"1\/1","PDCE":"3\/1","PDD":"6\/1","PDFS":"6\/1","PDSB":"1\/1","BTU":"3\/1","PKST":"5\/1","PSO":"3\/1","PEB":"3\/1","MD":"2\/1","PEGA":"3\/1","PTON":"1\/1","PBA":"6\/1","PENN":"5\/1","PNTG":"1\/1","PFLT":"5\/1","PNNT":"3\/1","PRET":"4\/1","PFSI":"4\/1","PMT":"3\/1","PAG":"1\/1","PNR":"3\/1","PEN":"6\/1","PEBO":"4\/1","PEP":"2\/1","PRSO":"3\/1","PRDO":"2\/1","PWP":"3\/1","PRFT":"3\/1","PFGC":"2\/1","PFMT":"6\/1","PRM":"2\/1","PERI":"3\/1","PPIH":"3\/1","PBT":"3\/1","PR":"3\/1","PVL":"3\/1","PRGO":"3\/1","WOOF":"4\/1","PETQ":"3\/1","PETS":"2\/1","PBR":"2\/1","PFE":"1\/1","PFSW":"6\/1","PCG":"5\/1","PGTI":"1\/1","PMCB":"2\/1","PHAT":"6\/1","PHXM":"5\/1","CELL":"4\/1","PM":"2\/1","PSX":"3\/1","PECO":"6\/1","FENG":"3\/1","PLAB":"1\/1","PHR":"3\/1","PHUN":"3\/1","PHX":"2\/1","DOC":"4\/1","PLL":"6\/1","PDM":"1\/1","PIRS":"1\/1","PPC":"2\/1","HYS":"7\/1","LTPZ":"7\/1","ZROZ":"7\/1","BOND":"3\/1","MINT":"3\/1","MUNI":"7\/1","PNFP":"2\/1","PNW":"4\/1","PINS":"6\/1","PXD":"1\/1","PIPR":"2\/1","PBI":"3\/1","PXLW":"5\/1","PJT":"2\/1","PAA":"3\/1","PAGP":"1\/1","PLNT":"6\/1","PL":"4\/1","PLG":"3\/1","PLYA":"3\/1","AGS":"3\/1","MYPS":"3\/1","PLTK":"3\/1","PLBY":"5\/1","PLXS":"4\/1","PLRX":"6\/1","PLUG":"3\/1","PLUR":"6\/1","PLYM":"6\/1","PMVP":"4\/1","PNC":"2\/1","PNM":"3\/1","MAGA":"4\/1","PII":"5\/1","PSNY":"6\/1","POL":"2\/1","PYPD":"3\/1","POOL":"1\/1","BPOP":"4\/1","PRCH":"5\/1","PTLO":"4\/1","POR":"1\/1","PTMN":"1\/1","PKX":"2\/1","POST":"4\/1","PSTL":"3\/1","PBPB":"3\/1","PCH":"4\/1","POWL":"4\/1","POWI":"6\/1","PWFL":"3\/1","PWSC":"2\/1","PPG":"5\/1","PPL":"1\/1","PRAA":"2\/1","PRAX":"1\/1","PGEN":"4\/1","PRPO":"2\/1","DTIL":"4\/1","PDS":"1\/1","PRLD":"5\/1","PFC":"3\/1","PINC":"3\/1","PBH":"5\/1","TROW":"3\/1","PSMT":"2\/1","PRME":"4\/1","PRI":"5\/1","FRST":"2\/1","PRMW":"3\/1","PRIM":"3\/1","YLD":"1\/1","USMC":"1\/1","PFG":"5\/1","PRVA":"2\/1","PRA":"4\/1","PRCT":"3\/1","PCOR":"5\/1","PG":"5\/1","UFO":"3\/1","PROF":"3\/1","ACDC":"3\/1","PRG":"1\/1","PRGS":"4\/1","PGR":"5\/1","PGNY":"4\/1","PROK":"5\/1","PLD":"2\/1","PGRU":"4\/1","PUMP":"3\/1","PRPH":"5\/1","PRQR":"6\/1","PRO":"2\/1","OILK":"4\/1","SMDV":"1\/1","TMDV":"5\/1","NOBL":"7\/1","TDV":"4\/1","REGL":"3\/1","SVXY":"9\/1","BITO":"8\/1","ZSL":"3\/1","KOLD":"7\/1","SCO":"3\/1","UCO":"2\/1","BOIL":"7\/1","UGL":"2\/1","AGQ":"2\/1","YCL":"7\/1","YCS":"2\/1","EUO":"6\/1","GLL":"6\/1","VERS":"6\/1","EET":"8\/1","QQQA":"6\/1","OND":"5\/1","ONLN":"6\/1","MYY":"2\/1","EFZ":"3\/1","EUM":"7\/1","DOG":"7\/1","DXD":"7\/1","PST":"4\/1","RXL":"3\/1","BIB":"7\/1","SSO":"7\/1","SAA":"8\/1","USD":"3\/1","DDM":"2\/1","QLD":"4\/1","ROM":"6\/1","UPW":"4\/1","UWM":"2\/1","TBT":"7\/1","BITI":"8\/1","PSQ":"7\/1","SH":"3\/1","TBF":"2\/1","SJB":"7\/1","REK":"3\/1","RWM":"4\/1","SBB":"6\/1","YXI":"5\/1","EEV":"3\/1","SPXN":"2\/1","SPXT":"1\/1","SUPL":"5\/1","EZJ":"7\/1","TTT":"7\/1","SSG":"3\/1","REW":"8\/1","SDP":"3\/1","XPP":"1\/1","BZQ":"1\/1","URE":"3\/1","SMDD":"1\/1","SRTY":"5\/1","UST":"7\/1","SKYU":"6\/1","URTY":"1\/1","UBT":"7\/1","LTL":"4\/1","UCYB":"1\/1","DIG":"3\/1","UYG":"2\/1","UYM":"2\/1","TQQQ":"3\/1","SPXU":"5\/1","SQQQ":"5\/1","SZK":"4\/1","DUG":"5\/1","SIJ":"5\/1","SMN":"5\/1","SDOW":"5\/1","SDS":"7\/1","UDOW":"1\/1","UPRO":"5\/1","QID":"2\/1","SKF":"2\/1","FXP":"3\/1","EPV":"3\/1","RXD":"4\/1","MZZ":"3\/1","EWV":"7\/1","SRS":"3\/1","TWM":"3\/1","SDD":"3\/1","BIS":"7\/1","UVXY":"9\/1","VIXM":"9\/1","VIXY":"9\/1","PSEC":"3\/1","PRSR":"5\/1","PB":"3\/1","PTGX":"4\/1","PLX":"5\/1","TARA":"6\/1","PTRA":"1\/1","PRTA":"5\/1","PRLB":"3\/1","PVBC":"6\/1","PFS":"3\/1","PRU":"4\/1","PSQH":"1\/1","PTC":"2\/1","PTCT":"4\/1","PSA":"2\/1","PEG":"2\/1","PUBM":"4\/1","LUNG":"5\/1","PLSE":"1\/1","PHM":"3\/1","PBYI":"1\/1","PSTG":"5\/1","PCT":"1\/1","PPBT":"4\/1","PRPL":"4\/1","PVH":"3\/1","PYR":"3\/1","QTWO":"4\/1","QGEN":"1\/1","QFIN":"1\/1","QRVO":"3\/1","QUAD":"3\/1","KWR":"4\/1","QCOM":"6\/1","QLYS":"2\/1","NX":"4\/1","PWR":"1\/1","QTRX":"3\/1","QUBT":"6\/1","QSI":"6\/1","QS":"3\/1","QD":"3\/1","DGX":"6\/1","QRHC":"3\/1","QUIK":"2\/1","QDEL":"6\/1","QNCX":"1\/1","QNST":"3\/1","QIPT":"3\/1","QUOT":"1\/1","QRTEA":"3\/1","RCM":"1\/1","RXT":"2\/1","RDN":"1\/1","RLGT":"2\/1","RADI":"2\/1","RDNT":"3\/1","RDWR":"5\/1","RFL":"3\/1","RAIN":"4\/1","RL":"5\/1","METC":"4\/1","RMBS":"4\/1","RRC":"4\/1","RANI":"3\/1","PACK":"4\/1","RPD":"2\/1","RAPT":"1\/1","FLTN":"2\/1","RAVE":"1\/1","RJF":"3\/1","RYAM":"3\/1","RYN":"1\/1","RTX":"3\/1","RBA":"3\/1","UTWY":"5\/1","UTHY":"4\/1","XBIL":"4\/1","RBC":"3\/1","RICK":"5\/1","RCMT":"3\/1","RMAX":"4\/1","RDI":"1\/1","RC":"3\/1","SIXRE":"7\/1","O":"3\/1","RETA":"6\/1","RCON":"4\/1","RXRX":"1\/1","RCAT":"2\/1","RRGB":"2\/1","RRR":"4\/1","RDFN":"5\/1","RDW":"3\/1","RWT":"3\/1","REE":"2\/1","REED":"5\/1","RRX":"4\/1","REG":"5\/1","REGN":"5\/1","RPHS":"6\/1","RGNX":"3\/1","RM":"3\/1","RF":"2\/1","RGLS":"4\/1","RGA":"1\/1","REKR":"3\/1","RLAY":"2\/1","RS":"4\/1","RLMD":"4\/1","RELX":"3\/1","MARK":"6\/1","RELY":"1\/1","IPOS":"4\/1","IPO":"3\/1","RNR":"2\/1","RNLX":"6\/1","RNST":"2\/1","RNW":"3\/1","RENT":"3\/1","RTO":"1\/1","RPTX":"2\/1","RPAY":"5\/1","RGEN":"5\/1","REPL":"5\/1","FRBK":"3\/1","RSG":"2\/1","REFR":"3\/1","RSVR":"4\/1","HAUS":"1\/1","REZI":"3\/1","RMD":"3\/1","RGP":"2\/1","QSR":"3\/1","ROIC":"2\/1","RVP":"5\/1","REVG":"2\/1","RVNC":"4\/1","RVPH":"2\/1","RVMD":"4\/1","RVLV":"6\/1","RVTY":"6\/1","RWLK":"6\/1","REX":"6\/1","REXR":"3\/1","REYN":"1\/1","RH":"5\/1","RBBN":"3\/1","RELL":"3\/1","RIGL":"5\/1","RGTI":"4\/1","REPX":"4\/1","RMNI":"3\/1","REI":"1\/1","RNG":"3\/1","RIO":"2\/1","RIOT":"6\/1","RSKD":"3\/1","RAD":"3\/1","RITM":"4\/1","RVSB":"4\/1","RIVN":"6\/1","RLI":"1\/1","RLJ":"5\/1","RLX":"1\/1","RMR":"5\/1","RHI":"5\/1","HOOD":"2\/1","RBLX":"1\/1","RKT":"3\/1","RKLB":"3\/1","RCKT":"2\/1","ROK":"3\/1","RMTI":"1\/1","RCI":"3\/1","ROG":"1\/1","ROIV":"6\/1","ROKU":"6\/1","ROL":"3\/1","ROP":"1\/1","ROST":"5\/1","WEED":"2\/1","ROVR":"3\/1","RY":"6\/1","RCL":"6\/1","RGLD":"4\/1","RPRX":"4\/1","RES":"4\/1","RPM":"1\/1","RPT":"4\/1","RBT":"2\/1","RUBY":"6\/1","RUM":"6\/1","RMBL":"4\/1","RWAY":"5\/1","RUSHA":"5\/1","RSI":"6\/1","RUI":"7\/1","RLV":"7\/1","RUT":"7\/1","RVLP":"1\/1","RXO":"4\/1","RXST":"4\/1","RYAN":"3\/1","RYAAY":"3\/1","R":"3\/1","RYI":"2\/1","RHP":"1\/1","RVYL":"3\/1","OEX":"5\/1","XEO":"5\/1","SPESG":"9\/1","SPGI":"3\/1","SANW":"4\/1","SBRA":"1\/1","SABR":"5\/1","SACH":"4\/1","SGBX":"4\/1","SB":"4\/1","SFE":"6\/1","SAFE":"4\/1","SAFT":"3\/1","SAGE":"4\/1","CRM":"5\/1","SBH":"2\/1","IOT":"6\/1","SJT":"3\/1","SANA":"2\/1","SD":"2\/1","SAND":"4\/1","JBSS":"1\/1","SGMO":"3\/1","SANM":"2\/1","SNY":"2\/1","SAP":"5\/1","SPNS":"6\/1","SAR":"3\/1","SRPT":"4\/1","SSL":"2\/1","SATL":"3\/1","BFS":"3\/1","SVRA":"2\/1","SBAC":"2\/1","SCSC":"2\/1","SLB":"2\/1","SNDR":"1\/1","SCHN":"1\/1","SRRK":"5\/1","SCHL":"1\/1","SDGR":"3\/1","SCHW":"2\/1","SCHK":"3\/1","SCHE":"7\/1","SCHR":"3\/1","SCHF":"7\/1","SCHC":"8\/1","FNDX":"2\/1","FNDA":"2\/1","FNDE":"3\/1","FNDF":"6\/1","SCHO":"2\/1","SCHZ":"6\/1","SCHB":"7\/1","SCHD":"7\/1","SCHG":"7\/1","SCHV":"7\/1","SCHX":"7\/1","SCHM":"7\/1","SCHH":"7\/1","SCHA":"7\/1","SCHP":"7\/1","SAIC":"3\/1","SCLX":"3\/1","SCPL":"5\/1","STNG":"3\/1","SMG":"3\/1","SCPH":"2\/1","SSP":"4\/1","SRL":"2\/1","SCU":"6\/1","SCYX":"3\/1","SE":"5\/1","SA":"3\/1","SEAC":"2\/1","SBCF":"3\/1","SMHI":"4\/1","SDRL":"3\/1","STX":"1\/1","SGEN":"4\/1","SEE":"6\/1","SHIP":"3\/1","SEAS":"6\/1","SCWX":"3\/1","SEEL":"1\/1","SEER":"3\/1","SEIC":"5\/1","SEM":"2\/1","XLC":"4\/1","XLE":"6\/1","XLF":"6\/1","XLRE":"3\/1","XLY":"5\/1","XLP":"6\/1","XLV":"6\/1","XLI":"5\/1","XLU":"6\/1","XLB":"6\/1","XLK":"6\/1","WTTR":"3\/1","SELB":"4\/1","SIGI":"5\/1","SLQT":"3\/1","SLS":"6\/1","SRE":"2\/1","SEMR":"3\/1","SMTC":"2\/1","ASAI":"3\/1","ST":"5\/1","SENS":"3\/1","SXT":"6\/1","SRTS":"1\/1","S":"2\/1","MCRB":"4\/1","SRG":"3\/1","SCI":"3\/1","SVC":"6\/1","NOW":"3\/1","SFBS":"4\/1","SES":"5\/1","SEVN":"1\/1","SFL":"3\/1","SHAK":"5\/1","SHPW":"1\/1","SHCR":"4\/1","SHEL":"3\/1","SHEN":"2\/1","SHW":"5\/1","SFT":"4\/1","FOUR":"3\/1","PIXY":"4\/1","SHG":"5\/1","SHLS":"3\/1","SWAV":"3\/1","SCVL":"3\/1","SHOP":"3\/1","SSTK":"3\/1","SHYF":"5\/1","SIBN":"5\/1","SBSW":"1\/1","SIEB":"3\/1","SIEN":"2\/1","BSRR":"4\/1","SIFY":"2\/1","SIGA":"4\/1","SGHT":"4\/1","SGTX":"3\/1","SASI":"1\/1","SGML":"1\/1","SIG":"6\/1","SLGN":"3\/1","SLAB":"3\/1","SIMO":"5\/1","SILK":"3\/1","SBOW":"4\/1","SVM":"1\/1","SILV":"6\/1","SMWB":"4\/1","SFNC":"4\/1","SPG":"3\/1","TUA":"6\/1","PFIX":"6\/1","SVOL":"3\/1","VCAR":"3\/1","SMPL":"6\/1","SSD":"1\/1","SLP":"5\/1","SBGI":"6\/1","OMIC":"3\/1","SGLY":"3\/1","SIOX":"5\/1","BLCN":"3\/1","SIRI":"2\/1","SPNT":"3\/1","SITC":"2\/1","SITE":"3\/1","SITM":"6\/1","STR":"5\/1","SIX":"2\/1","TSLX":"3\/1","SKM":"1\/1","SKX":"3\/1","SKE":"4\/1","SKIL":"4\/1","SKLZ":"4\/1","SKY":"4\/1","SKYT":"3\/1","SKYW":"1\/1","SWKS":"3\/1","SLG":"2\/1","SNBR":"1\/1","SLM":"1\/1","SLRC":"1\/1","SM":"2\/1","SGH":"4\/1","SND":"3\/1","SMBK":"4\/1","SMAR":"4\/1","SDC":"3\/1","SNN":"3\/1","SWBI":"3\/1","AOS":"2\/1","SMSI":"3\/1","SJM":"5\/1","SNAP":"3\/1","SNA":"5\/1","SNPO":"3\/1","SNDL":"5\/1","SNOW":"3\/1","SY":"3\/1","SLAC":"6\/1","SQM":"2\/1","SCTL":"3\/1","SOFI":"3\/1","SHCO":"3\/1","SOHU":"3\/1","SLGL":"3\/1","SEDG":"5\/1","SOI":"3\/1","SWI":"6\/1","SLDP":"3\/1","DTC":"3\/1","SLNH":"3\/1","SLGC":"4\/1","SOND":"6\/1","SAH":"1\/1","SEVCQ":"1\/1","SON":"3\/1","SONO":"3\/1","SONY":"5\/1","SOPH":"6\/1","SRNEQ":"3\/1","SHC":"2\/1","SOUN":"2\/1","SSTI":"6\/1","SPFI":"1\/1","SO":"1\/1","SCCO":"3\/1","SFST":"2\/1","SBSI":"3\/1","SSB":"3\/1","LUV":"5\/1","SWN":"2\/1","SOVO":"3\/1","SP":"3\/1","LOV":"4\/1","SPTN":"2\/1","DIA":"8\/1","GLD":"8\/1","GMF":"1\/1","RWO":"7\/1","RWX":"7\/1","FEZ":"7\/1","GNR":"7\/1","CWI":"6\/1","EEMX":"3\/1","QWLD":"2\/1","SPDW":"7\/1","SPEM":"5\/1","GXC":"7\/1","EDIV":"7\/1","EWX":"7\/1","DWX":"7\/1","GWX":"7\/1","NANR":"6\/1","SPY":"8\/1","MDY":"6\/1","XAR":"2\/1","CWB":"7\/1","TIPX":"6\/1","BIL":"3\/1","BILS":"6\/1","EBND":"8\/1","JNK":"3\/1","IBND":"3\/1","BWX":"7\/1","FLRN":"3\/1","SJNK":"8\/1","XSW":"2\/1","RWR":"7\/1","WIP":"3\/1","XHE":"2\/1","PSK":"1\/1","LQIG":"4\/1","NZUS":"6\/1","SHM":"3\/1","HYMB":"7\/1","XES":"7\/1","SPMB":"3\/1","SPTI":"4\/1","SPIP":"5\/1","SPTM":"3\/1","SPAB":"3\/1","SPBO":"5\/1","SPIB":"3\/1","SPLB":"3\/1","SPTL":"3\/1","SPMD":"3\/1","SPLG":"3\/1","SPSM":"4\/1","SPTS":"5\/1","SPSB":"3\/1","SPYG":"6\/1","SPYD":"6\/1","SPYV":"6\/1","ONEO":"4\/1","MDYG":"3\/1","MDYV":"5\/1","SLYG":"1\/1","SLYV":"2\/1","XBI":"7\/1","KBE":"7\/1","KCE":"3\/1","SDY":"3\/1","XHB":"7\/1","KIE":"5\/1","KOMP":"3\/1","XME":"7\/1","XOP":"6\/1","XPH":"4\/1","KRE":"7\/1","XRT":"6\/1","XSD":"7\/1","XTN":"3\/1","MMTM":"3\/1","SPB":"6\/1","SPPI":"4\/1","ANY":"6\/1","SPHR":"3\/1","SPI":"6\/1","SPIR":"3\/1","SR":"1\/1","SPR":"6\/1","SAVE":"6\/1","SRC":"1\/1","SBEV":"6\/1","SPLK":"2\/1","SPOK":"2\/1","SRAD":"3\/1","SPWH":"4\/1","SPOT":"5\/1","SWTX":"5\/1","CXM":"3\/1","URNJ":"1\/1","URNM":"1\/1","SII":"5\/1","SPT":"3\/1","SFM":"3\/1","SPRU":"3\/1","SPSC":"2\/1","SPX":"10\/1","SPXC":"1\/1","SQSP":"2\/1","SRAX":"3\/1","SSNC":"4\/1","SRLN":"3\/1","GAL":"3\/1","INKM":"1\/1","RLY":"2\/1","TOTL":"6\/1","SSRM":"3\/1","JOE":"3\/1","STAA":"1\/1","STAG":"1\/1","STGW":"5\/1","LAB":"2\/1","SLI":"5\/1","SMP":"3\/1","SXI":"1\/1","SWK":"5\/1","STN":"2\/1","SBLK":"1\/1","SGU":"4\/1","STHO":"3\/1","SBUX":"1\/1","SRT":"3\/1","STWD":"6\/1","STT":"5\/1","STKH":"1\/1","GASS":"2\/1","STLD":"4\/1","SCS":"1\/1","STLA":"1\/1","SCM":"2\/1","STEM":"3\/1","SCL":"3\/1","STEP":"3\/1","SRCL":"3\/1","STE":"1\/1","STER":"3\/1","STRL":"1\/1","STVN":"5\/1","STC":"3\/1","SF":"6\/1","SFIX":"6\/1","STM":"3\/1","SYBT":"1\/1","STOK":"2\/1","STNE":"3\/1","SRI":"4\/1","SNEX":"1\/1","SSYS":"3\/1","STRA":"2\/1","GLDB":"5\/1","NZRO":"5\/1","HNDL":"4\/1","LRN":"5\/1","SDIG":"5\/1","SYK":"3\/1","RGR":"3\/1","SPH":"4\/1","SMFG":"3\/1","SMMF":"3\/1","INN":"1\/1","SUM":"3\/1","SMLP":"5\/1","SMMT":"4\/1","SUI":"4\/1","SNCY":"3\/1","SLF":"6\/1","SXC":"2\/1","SU":"5\/1","SUNL":"5\/1","NOVA":"6\/1","SUN":"4\/1","STKL":"3\/1","SPWR":"1\/1","RUN":"4\/1","SHO":"4\/1","SUNW":"3\/1","SGHC":"4\/1","SLGG":"2\/1","SMCI":"2\/1","SUP":"1\/1","SUPN":"4\/1","SURF":"4\/1","SURG":"3\/1","SGRY":"4\/1","SRDX":"4\/1","SSSS":"3\/1","STRO":"4\/1","SG":"1\/1","SLVM":"3\/1","SYM":"3\/1","SYNA":"6\/1","SNCR":"6\/1","SYF":"3\/1","SNDX":"4\/1","SYNH":"1\/1","SNPS":"2\/1","SNV":"1\/1","SYPR":"5\/1","SYRS":"4\/1","SYY":"4\/1","SST":"1\/1","TMUS":"3\/1","TTOO":"5\/1","TBLA":"3\/1","TRHC":"3\/1","TSM":"4\/1","TTWO":"3\/1","TAK":"6\/1","TKAT":"6\/1","TAL":"3\/1","TLIS":"1\/1","TALK":"3\/1","TALO":"3\/1","TNDM":"3\/1","SKT":"3\/1","TPR":"3\/1","TRGP":"2\/1","TGT":"2\/1","TH":"4\/1","TARS":"2\/1","TGB":"4\/1","TASK":"2\/1","TMHC":"3\/1","TRP":"3\/1","SNX":"6\/1","TDCX":"6\/1","TEL":"2\/1","FTI":"3\/1","TTGT":"3\/1","TECK":"4\/1","TGLS":"2\/1","TK":"5\/1","TNK":"3\/1","TGNA":"3\/1","TRC":"2\/1","TELA":"3\/1","TDOC":"4\/1","TEO":"3\/1","TDY":"3\/1","TFX":"2\/1","VIV":"5\/1","TEF":"4\/1","TDS":"3\/1","TSAT":"1\/1","TBIO":"5\/1","TELL":"3\/1","TLS":"3\/1","TU":"3\/1","TIXT":"6\/1","TMPO":"3\/1","TPX":"4\/1","TENB":"4\/1","TS":"4\/1","TNYA":"4\/1","TME":"3\/1","THC":"6\/1","TNC":"4\/1","TDC":"4\/1","TER":"1\/1","WULF":"1\/1","TEX":"6\/1","TX":"3\/1","TERN":"3\/1","LLAP":"4\/1","TRNO":"3\/1","TBNK":"3\/1","TSLA":"3\/1","TTEK":"3\/1","TTI":"4\/1","TAGS":"6\/1","CORN":"3\/1","SOYB":"2\/1","CANE":"3\/1","WEAT":"7\/1","TEVA":"3\/1","TCBI":"6\/1","TXN":"3\/1","TXRH":"1\/1","TGH":"3\/1","TXT":"3\/1","TFII":"3\/1","TFSL":"1\/1","TGTX":"4\/1","THCH":"3\/1","PRNT":"6\/1","AAN":"5\/1","AREN":"1\/1","BODY":"2\/1","SKIN":"3\/1","CI":"5\/1","LEV":"1\/1","RTL":"4\/1","ODP":"1\/1","STKS":"6\/1","REAX":"6\/1","REAL":"1\/1","TTD":"3\/1","NCTY":"3\/1","TXMD":"6\/1","THTX":"1\/1","TBPH":"4\/1","TMO":"6\/1","TRI":"3\/1","THO":"4\/1","TWKS":"2\/1","TDUP":"6\/1","THRY":"4\/1","PP":"6\/1","CPII":"1\/1","AHOY":"1\/1","RPAR":"2\/1","HFND":"5\/1","UPAR":"3\/1","CHAT":"6\/1","TDW":"3\/1","TTSH":"4\/1","TLYS":"3\/1","TLRY":"4\/1","TIMB":"1\/1","TKR":"6\/1","TMST":"2\/1","TIO":"1\/1","TIPT":"3\/1","TWI":"3\/1","TITN":"2\/1","TJX":"5\/1","TMC":"3\/1","TOST":"6\/1","TOL":"6\/1","TR":"5\/1","BLD":"2\/1","MODG":"1\/1","TRMD":"1\/1","TTC":"3\/1","TD":"6\/1","CURV":"4\/1","TTE":"6\/1","TSEM":"1\/1","TSQ":"6\/1","TM":"2\/1","TPG":"5\/1","TRTX":"3\/1","TPIC":"6\/1","TSCO":"5\/1","TW":"2\/1","COOK":"2\/1","TT":"1\/1","TACT":"5\/1","TAC":"3\/1","TDG":"3\/1","TMDX":"6\/1","RIG":"5\/1","TRU":"3\/1","TNL":"4\/1","TRV":"3\/1","TVTX":"5\/1","TG":"4\/1","THS":"1\/1","TRMR":"5\/1","TRVN":"5\/1","TREX":"5\/1","TPH":"5\/1","TCBK":"3\/1","TCN":"3\/1","TMQ":"3\/1","TRS":"6\/1","TRMB":"2\/1","TNET":"6\/1","TRIB":"2\/1","TRIN":"4\/1","TRN":"2\/1","TSE":"2\/1","TCOM":"1\/1","TRIP":"5\/1","TPVG":"4\/1","DCFC":"2\/1","TRTN":"4\/1","TFIN":"3\/1","TGI":"3\/1","TRVG":"3\/1","TROX":"5\/1","TROO":"2\/1","TBI":"4\/1","TRUE":"5\/1","TFC":"4\/1","TRUP":"2\/1","SPC":"6\/1","TRST":"1\/1","TRMK":"6\/1","TRX":"1\/1","TNP":"3\/1","TTEC":"1\/1","TTMI":"1\/1","TCX":"1\/1","TOUR":"4\/1","TUP":"2\/1","TKC":"5\/1","TPB":"4\/1","HEAR":"5\/1","TSP":"5\/1","TPC":"5\/1","TUYA":"1\/1","TWLO":"3\/1","TWIN":"2\/1","TWST":"4\/1","TWO":"1\/1","TYL":"3\/1","TYRA":"4\/1","TSN":"2\/1","UHAL":"4\/1","UCAR":"1\/1","GROW":"1\/1","USAU":"2\/1","USPH":"1\/1","SLCA":"6\/1","UBER":"5\/1","UI":"1\/1","UBS":"2\/1","UDMY":"3\/1","UDR":"3\/1","UFPI":"1\/1","UFPT":"3\/1","UGI":"2\/1","PATH":"6\/1","ULTA":"6\/1","UCTT":"2\/1","RARE":"3\/1","UGP":"2\/1","UMBF":"3\/1","UMH":"3\/1","UAA":"3\/1","UA":"3\/1","UFI":"2\/1","NIWM":"5\/1","NSPY":"3\/1","OACP":"1\/1","UL":"3\/1","UNP":"5\/1","QURE":"2\/1","UIS":"4\/1","UAL":"6\/1","UFCS":"3\/1","UIHC":"2\/1","UMC":"3\/1","UNFI":"2\/1","UPS":"5\/1","URI":"2\/1","UAMY":"6\/1","USM":"3\/1","X":"5\/1","UNL":"7\/1","USL":"1\/1","BNO":"7\/1","CPER":"6\/1","USCI":"1\/1","UGA":"3\/1","UNG":"7\/1","USO":"7\/1","UTHR":"1\/1","UNH":"3\/1","UNIT":"6\/1","UNTY":"3\/1","U":"3\/1","UNVR":"1\/1","UVV":"3\/1","OLED":"2\/1","UEIC":"3\/1","UHT":"3\/1","UHS":"1\/1","UVE":"1\/1","UTI":"3\/1","UVSP":"4\/1","UNM":"1\/1","TIGR":"2\/1","UPBD":"2\/1","UPXI":"3\/1","UPH":"3\/1","UPLD":"4\/1","UPST":"1\/1","UPWK":"3\/1","UEC":"4\/1","UROY":"2\/1","UE":"4\/1","UONE":"5\/1","URBN":"2\/1","URGN":"1\/1","USB":"3\/1","USFD":"6\/1","USAC":"3\/1","USNA":"5\/1","SIXU":"7\/1","UTZ":"6\/1","UWMC":"3\/1","UXIN":"3\/1","VFC":"3\/1","VVX":"3\/1","EGY":"3\/1","VCSA":"1\/1","VCNX":"5\/1","MTN":"4\/1","VAL":"3\/1","VALE":"5\/1","VLN":"3\/1","VLO":"4\/1","WGMI":"2\/1","BTF":"8\/1","VLY":"6\/1","VMI":"3\/1","VVV":"2\/1","VNDA":"6\/1","XBTF":"8\/1","MOO":"2\/1","BIZD":"3\/1","BBH":"7\/1","BRF":"7\/1","GLCN":"3\/1","CNXT":"5\/1","DAPP":"4\/1","EINC":"6\/1","ANGL":"4\/1","BJK":"7\/1","GDX":"7\/1","RAAX":"2\/1","IHY":"7\/1","ISRA":"7\/1","EMLC":"7\/1","GDXJ":"4\/1","SMOG":"7\/1","MORT":"6\/1","CRAK":"3\/1","OIH":"2\/1","PPH":"3\/1","PFXF":"1\/1","REMX":"7\/1","RTH":"7\/1","SMH":"7\/1","BUZZ":"3\/1","SLX":"6\/1","ESPO":"6\/1","HYD":"1\/1","MLN":"2\/1","OUNZ":"5\/1","SMOT":"5\/1","MOAT":"1\/1","SMB":"4\/1","VOOG":"5\/1","VOOV":"5\/1","BIV":"7\/1","BLV":"7\/1","BSV":"3\/1","BND":"7\/1","BNDX":"8\/1","VXF":"7\/1","VUG":"7\/1","VV":"7\/1","VOT":"7\/1","VOE":"7\/1","VO":"7\/1","VNQ":"5\/1","VOO":"7\/1","VBR":"7\/1","VB":"7\/1","VBK":"7\/1","VTI":"7\/1","VTV":"7\/1","VEU":"7\/1","VWO":"7\/1","VGK":"7\/1","VPL":"7\/1","VSS":"7\/1","VNQI":"7\/1","VT":"7\/1","VTIP":"3\/1","VTEB":"3\/1","VCIT":"7\/1","VGIT":"3\/1","VCLT":"7\/1","VGLT":"3\/1","VMBS":"3\/1","VGSH":"3\/1","VCSH":"5\/1","VTC":"5\/1","VONE":"2\/1","VTWG":"1\/1","VTWO":"7\/1","VIG":"7\/1","VXUS":"7\/1","VEA":"7\/1","VFMO":"1\/1","VFMF":"1\/1","VFQY":"2\/1","VWOB":"1\/1","VYM":"7\/1","VIGI":"5\/1","VYMI":"1\/1","EDV":"5\/1","MGC":"7\/1","MGV":"7\/1","MGK":"7\/1","VOX":"7\/1","VCR":"7\/1","VDC":"7\/1","VDE":"7\/1","VFH":"7\/1","VHT":"7\/1","VIS":"7\/1","VGT":"7\/1","VAW":"7\/1","VPU":"7\/1","VAPO":"3\/1","VREX":"4\/1","VRNS":"3\/1","VBLT":"4\/1","VXRT":"4\/1","PCVX":"2\/1","VBIV":"2\/1","VGR":"3\/1","VECO":"5\/1","VEEV":"4\/1","VLD":"5\/1","VEL":"4\/1","VNTRQ":"3\/1","VTR":"2\/1","VRA":"4\/1","VERA":"2\/1","VCYT":"3\/1","MDRX":"3\/1","VSTM":"6\/1","VCEL":"4\/1","VRNT":"3\/1","VRE":"6\/1","VRSN":"4\/1","VRSK":"1\/1","VRTV":"2\/1","VERI":"6\/1","VZ":"4\/1","VET":"3\/1","VRNA":"5\/1","VRRM":"6\/1","VRCA":"4\/1","VTNR":"3\/1","VRTX":"1\/1","EVTL":"3\/1","VRT":"3\/1","VERU":"5\/1","VERV":"6\/1","VIA":"3\/1","VVI":"3\/1","DSP":"4\/1","VSAT":"5\/1","VTRS":"5\/1","VIAV":"6\/1","RBOT":"4\/1","VICI":"4\/1","VICR":"3\/1","VSCO":"3\/1","VCTR":"3\/1","CFO":"3\/1","CFA":"5\/1","CDC":"3\/1","CSB":"3\/1","VSDA":"3\/1","VIEW":"3\/1","VKTX":"4\/1","VFF":"3\/1","VMEO":"3\/1","BBIG":"1\/1","VWE":"3\/1","VNOM":"5\/1","VIPS":"1\/1","VQS":"5\/1","VIR":"3\/1","VIRX":"6\/1","SPCE":"2\/1","VRDN":"4\/1","VHC":"1\/1","VTSI":"3\/1","VIRT":"1\/1","V":"5\/1","VSH":"1\/1","VPG":"1\/1","VISL":"4\/1","VIST":"4\/1","VGZ":"3\/1","VSTO":"3\/1","VTGN":"6\/1","VC":"4\/1","VST":"2\/1","COCO":"5\/1","VTLE":"4\/1","VITL":"3\/1","VANI":"1\/1","SEAT":"1\/1","VVPR":"3\/1","VVOS":"4\/1","VZIO":"3\/1","VNET":"5\/1","VOC":"1\/1","VOD":"6\/1","VNRX":"3\/1","VNT":"4\/1","VOR":"4\/1","VNO":"5\/1","VOXX":"3\/1","VOYA":"3\/1","VYGR":"1\/1","VRM":"5\/1","VTEX":"5\/1","VMC":"1\/1","VUZI":"4\/1","WTI":"1\/1","WNC":"3\/1","WAB":"3\/1","WBA":"5\/1","WD":"5\/1","WKME":"4\/1","WBX":"3\/1","WMT":"2\/1","WRBY":"2\/1","WBD":"6\/1","WMG":"3\/1","HCC":"1\/1","WAFD":"5\/1","WASH":"3\/1","WCN":"3\/1","WM":"2\/1","WAT":"3\/1","WSBF":"3\/1","WSO":"4\/1","WTS":"3\/1","WVE":"2\/1","W":"4\/1","WDFC":"6\/1","WFRD":"1\/1","WEAV":"3\/1","WBS":"3\/1","WEC":"5\/1","WB":"3\/1","WEJOQ":"4\/1","WFC":"6\/1","WELL":"3\/1","WEN":"3\/1","HOWL":"4\/1","WERN":"3\/1","WCC":"5\/1","WFG":"2\/1","WST":"3\/1","WABC":"3\/1","WAL":"4\/1","WMC":"4\/1","WDC":"3\/1","WES":"2\/1","WU":"2\/1","WLKP":"1\/1","WLK":"6\/1","WPRT":"3\/1","WRK":"5\/1","WEST":"4\/1","WWR":"5\/1","WE":"3\/1","WEX":"5\/1","WY":"4\/1","WPM":"5\/1","UP":"3\/1","WHR":"5\/1","WHF":"2\/1","WSR":"3\/1","FREE":"3\/1","WOW":"5\/1","WLY":"3\/1","WLDN":"1\/1","WMB":"3\/1","WSM":"3\/1","WTW":"4\/1","WSC":"4\/1","WIMI":"6\/1","WING":"1\/1","WGO":"1\/1","WTFC":"1\/1","WIT":"3\/1","WTT":"3\/1","WISA":"6\/1","WBAT":"1\/1","GDE":"5\/1","WT":"3\/1","USDU":"1\/1","CYB":"1\/1","WCLD":"3\/1","XSOE":"3\/1","ELD":"7\/1","DEM":"7\/1","CEW":"7\/1","DGS":"7\/1","GCC":"5\/1","HEDJ":"7\/1","DFE":"7\/1","USFR":"3\/1","DNL":"5\/1","EPI":"3\/1","AIVI":"2\/1","DLS":"3\/1","IHDG":"2\/1","DXJ":"7\/1","DFJ":"7\/1","DXJS":"7\/1","AIVL":"7\/1","DLN":"7\/1","DON":"1\/1","DGRW":"7\/1","EES":"6\/1","AGGY":"3\/1","USMF":"2\/1","WKEY":"6\/1","WIX":"6\/1","MAPS":"3\/1","WNS":"3\/1","WOLF":"3\/1","WWW":"4\/1","WDS":"6\/1","WWD":"2\/1","WDAY":"1\/1","WKHS":"1\/1","WK":"3\/1","WKSP":"3\/1","WRLD":"2\/1","WKC":"3\/1","WWE":"1\/1","WOR":"3\/1","WPC":"3\/1","WPP":"3\/1","WRAP":"6\/1","WSFS":"2\/1","WW":"3\/1","WH":"1\/1","WYNN":"6\/1","XFOR":"3\/1","XBIT":"4\/1","XEL":"6\/1","XNCR":"1\/1","XBIO":"4\/1","XHR":"1\/1","XENE":"5\/1","XERS":"6\/1","XRX":"1\/1","XOMA":"4\/1","XMTR":"2\/1","XOS":"4\/1","XP":"3\/1","XPEL":"4\/1","XPEV":"6\/1","XPO":"6\/1","XPOF":"3\/1","XNET":"5\/1","XYL":"5\/1","YMAB":"1\/1","YALA":"3\/1","YSG":"3\/1","YELL":"5\/1","YELP":"2\/1","YETI":"1\/1","YEXT":"3\/1","YRD":"3\/1","DAO":"3\/1","YPF":"4\/1","YUM":"2\/1","YUMC":"2\/1","ZLAB":"5\/1","ZBRA":"3\/1","ZDGE":"3\/1","ZEPP":"1\/1","ZETA":"2\/1","ZVRA":"6\/1","ZH":"5\/1","ZD":"6\/1","ZG":"3\/1","Z":"4\/1","ZIM":"4\/1","ZBH":"6\/1","ZIMV":"6\/1","ZION":"3\/1","ZIP":"1\/1","ZTS":"1\/1","ZM":"4\/1","ZI":"1\/1","ZS":"3\/1","ZTO":"2\/1","ZUMZ":"3\/1","ZUO":"3\/1","ZWS":"3\/1","CNET":"6\/1","ZYME":"2\/1","ZYNE":"5\/1","ZYXI":"4\/1"}} \ No newline at end of file diff --git a/openbb_sdk/providers/cboe/openbb_cboe/utils/helpers.py b/openbb_sdk/providers/cboe/openbb_cboe/utils/helpers.py new file mode 100644 index 00000000000..f863f43b44d --- /dev/null +++ b/openbb_sdk/providers/cboe/openbb_cboe/utils/helpers.py @@ -0,0 +1,702 @@ +"""CBOE Helpers Module""" + +import os +from datetime import date, datetime, timedelta +from pathlib import Path +from typing import Optional, Tuple + +import numpy as np +import pandas as pd +import requests +from requests import HTTPError + +TICKER_EXCEPTIONS = ["NDX", "RUT"] + + +def get_user_agent() -> str: + """Get a not very random user agent.""" + user_agent_strings = [ + "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:86.1) Gecko/20100101 Firefox/86.1", + "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:86.1) Gecko/20100101 Firefox/86.1", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:82.1) Gecko/20100101 Firefox/82.1", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:86.0) Gecko/20100101 Firefox/86.0", + "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:86.0) Gecko/20100101 Firefox/86.0", + "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.10; rv:83.0) Gecko/20100101 Firefox/83.0", + "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:84.0) Gecko/20100101 Firefox/84.0", + ] + + return np.random.choice(user_agent_strings) # nosec + + +def request( + url: str, method: str = "GET", timeout: int = 10, **kwargs +) -> requests.Response: + """Abstract helper to make requests from a url with potential headers and params. + + Parameters + ---------- + url : str + Url to make the request to + method : str, optional + HTTP method to use. Can be "GET" or "POST", by default "GET" + + Returns + ------- + requests.Response + Request response object + + Raises + ------ + ValueError + If invalid method is passed + """ + + # If there are headers, check if there is a user agent, if not add one. + # Some requests seem to work only with a specific user agent, so we want to be able to override it. + headers = kwargs.pop("headers", {}) + + if "User-Agent" not in headers: + headers["User-Agent"] = get_user_agent() + if method.upper() == "GET": + return requests.get( + url, + headers=headers, + timeout=timeout, + **kwargs, + ) + if method.upper() == "POST": + return requests.post( + url, + headers=headers, + timeout=timeout, + **kwargs, + ) + raise ValueError("Method must be GET or POST") + + +def camel_to_snake(str): + """Convert camelCase to snake_case.""" + return "".join(["_" + i.lower() if i.isupper() else i for i in str]).lstrip("_") + + +def get_cboe_directory() -> pd.DataFrame: + """Gets the US Listings Directory for the CBOE. + + Returns + ------- + pd.DataFrame: CBOE_DIRECTORY + DataFrame of the CBOE listings directory + """ + try: + CBOE_DIRECTORY: pd.DataFrame = pd.read_csv( + "https://www.cboe.com/us/options/symboldir/equity_index_options/?download=csv" + ) + CBOE_DIRECTORY = CBOE_DIRECTORY.rename( + columns={ + " Stock Symbol": "Symbol", + " DPM Name": "DPM Name", + " Post/Station": "Post/Station", + } + ).set_index("Symbol") + return CBOE_DIRECTORY + except HTTPError: + return pd.DataFrame() + + +def get_cboe_index_directory() -> pd.DataFrame: + """Gets the US Listings Directory for the CBOE + + Returns + ------- + pd.DataFrame: CBOE_INDEXES + """ + try: + r = request( + "https://cdn.cboe.com/api/global/us_indices/definitions/all_indices.json" + ) + + if r.status_code != 200: + raise HTTPError + + CBOE_INDEXES = pd.DataFrame(r.json()) + + CBOE_INDEXES = CBOE_INDEXES.rename( + columns={ + "calc_end_time": "Close Time", + "calc_start_time": "Open Time", + "currency": "Currency", + "description": "Description", + "display": "Display", + "featured": "Featured", + "featured_order": "Featured Order", + "index_symbol": "Ticker", + "mkt_data_delay": "Data Delay", + "name": "Name", + "tick_days": "Tick Days", + "tick_frequency": "Frequency", + "tick_period": "Period", + "time_zone": "Time Zone", + }, + ) + + indices_order: list[str] = [ + "Ticker", + "Name", + "Description", + "Currency", + "Tick Days", + "Frequency", + "Period", + "Time Zone", + ] + + CBOE_INDEXES = pd.DataFrame(CBOE_INDEXES, columns=indices_order).set_index( + "Ticker" + ) + + return CBOE_INDEXES + + except HTTPError: + return pd.DataFrame() + + +INDEXES = get_cboe_index_directory().index.tolist() +SYMBOLS = pd.DataFrame() +try: + SYMBOLS = get_cboe_directory() +except SYMBOLS.empty: + current_dir = os.path.dirname(os.path.realpath(__file__)) + file = "cboe_companies.json" + SYMBOLS = pd.read_json(Path(current_dir, file)) + + +def stock_search(query: str, ticker: bool = False) -> dict: + """Search the CBOE company directory by name or ticker. + Parameters + ----------- + query: str + The search query + ticker: bool + Whether to search by ticker. Default is False. + + Returns + ------- + dict + Dictionary of the results. + """ + data = {} + symbols = SYMBOLS.copy() if not SYMBOLS.empty else get_cboe_directory() + symbols = symbols.reset_index() + target = "Company Name" if not ticker else "Symbol" + idx = symbols[target].str.contains(query, case=False) + result = symbols[idx].to_dict("records") + if len(result) > 0: + data.update({"results": result}) + return data + print(f"No results found for: {query}. Try another search query.") + return pd.DataFrame() + + +def get_ticker_info(symbol: str) -> Tuple[pd.DataFrame, list[str]]: + """Gets basic info for the symbol and expiration dates + + Parameters + ---------- + symbol: str + The ticker to lookup + + Returns + ------- + Tuple: [pd.DataFrame, pd.Series] + ticker_details + ticker_expirations + """ + + stock = "stock" + index = "index" + symbol = symbol.upper() + new_ticker: str = "" + ticker_details = pd.DataFrame() + ticker_expirations: list = [] + try: + if symbol in TICKER_EXCEPTIONS: + new_ticker = "^" + symbol + else: + if symbol not in INDEXES: + new_ticker = symbol + + elif symbol in INDEXES: + new_ticker = "^" + symbol + + # Gets the data to return, and if none returns empty Tuple # + + symbol_info_url = ( + "https://www.cboe.com/education/tools/trade-optimizer/symbol-info/?symbol=" + f"{new_ticker}" + ) + + symbol_info = request(symbol_info_url) + symbol_info_json = pd.Series(symbol_info.json()) + + if symbol_info_json.success is False: + ticker_details = pd.DataFrame() + ticker_expirations = [] + print("No data found for the symbol: " f"{symbol}" "") + else: + symbol_details = pd.Series(symbol_info_json["details"]) + symbol_details = pd.DataFrame(symbol_details).transpose() + symbol_details = symbol_details.reset_index() + ticker_expirations = symbol_info_json["expirations"] + + # Cleans columns depending on if the security type is a stock or an index + + type_ = symbol_details.security_type + + if stock[0] in type_[0]: + stock_details = symbol_details + ticker_details = pd.DataFrame(stock_details).rename( + columns={ + "current_price": "price", + "bid_size": "bidSize", + "ask_size": "askSize", + "iv30": "ivThirty", + "prev_day_close": "previousClose", + "price_change": "change", + "price_change_percent": "changePercent", + "iv30_change": "ivThirtyChange", + "iv30_percent_change": "ivThirtyChangePercent", + "last_trade_time": "lastTradeTimestamp", + "exchange_id": "exchangeID", + "tick": "tick", + "security_type": "type", + } + ) + details_columns = [ + "symbol", + "type", + "tick", + "bid", + "bidSize", + "askSize", + "ask", + "price", + "open", + "high", + "low", + "close", + "volume", + "previousClose", + "change", + "changePercent", + "ivThirty", + "ivThirtyChange", + "ivThirtyChangePercent", + "lastTradeTimestamp", + ] + ticker_details = ( + pd.DataFrame(ticker_details, columns=details_columns) + .set_index(keys="symbol") + .dropna(axis=1) + .transpose() + ) + + if index[0] in type_[0]: + index_details = symbol_details + ticker_details = pd.DataFrame(index_details).rename( + columns={ + "symbol": "symbol", + "security_type": "type", + "current_price": "price", + "price_change": "change", + "price_change_percent": "changePercent", + "prev_day_close": "previousClose", + "iv30": "ivThirty", + "iv30_change": "ivThirtyChange", + "iv30_change_percent": "ivThirtyChangePercent", + "last_trade_time": "lastTradeTimestamp", + } + ) + + index_columns = [ + "symbol", + "type", + "tick", + "price", + "open", + "high", + "low", + "close", + "previousClose", + "change", + "changePercent", + "ivThirty", + "ivThirtyChange", + "ivThirtyChangePercent", + "lastTradeTimestamp", + ] + + ticker_details = ( + pd.DataFrame(ticker_details, columns=index_columns) + .set_index(keys="symbol") + .dropna(axis=1) + .transpose() + ).rename(columns={f"{new_ticker}": f"{symbol}"}) + + except HTTPError: + print("There was an error with the request'\n") + ticker_details = pd.DataFrame() + ticker_expirations = list() + return ticker_details, ticker_expirations + + return ticker_details, ticker_expirations + + +def get_ticker_iv(symbol: str) -> pd.DataFrame: + """Gets annualized high/low historical and implied volatility over 30/60/90 day windows. + + Parameters + ---------- + symbol: str + The loaded ticker + + Returns + ------- + pd.DataFrame: ticker_iv + """ + + # Checks ticker to determine if ticker is an index or an exception that requires modifying the request's URLs + + try: + if symbol in TICKER_EXCEPTIONS: + quotes_iv_url = ( + "https://cdn.cboe.com/api/global/delayed_quotes/historical_data/_" + f"{symbol}" + ".json" + ) + else: + if symbol not in INDEXES: + quotes_iv_url = ( + "https://cdn.cboe.com/api/global/delayed_quotes/historical_data/" + f"{symbol}" + ".json" + ) + + elif symbol in INDEXES: + quotes_iv_url = ( + "https://cdn.cboe.com/api/global/delayed_quotes/historical_data/_" + f"{symbol}" + ".json" + ) + h_iv = request(quotes_iv_url) + + if h_iv.status_code != 200: + print("No data found for the symbol: " f"{symbol}" "") + return pd.DataFrame() + + data = h_iv.json() + h_data = pd.DataFrame(data)[2:-1]["data"].rename(f"{symbol}") + h_data.rename( + { + "hv30_annual_high": "hvThirtyOneYearHigh", + "hv30_annual_low": "hvThirtyOneYearLow", + "hv60_annual_high": "hvSixtyOneYearHigh", + "hv60_annual_low": "hvSixtyOneYearLow", + "hv90_annual_high": "hvNinetyOneYearHigh", + "hv90_annual_low": "hvNinetyOneYearLow", + "iv30_annual_high": "ivThirtyOneYearHigh", + "iv30_annual_low": "ivThirtyOneYearLow", + "iv60_annual_high": "ivSixtyOneYearHigh", + "iv60_annual_low": "ivSixtyOneYearLow", + "iv90_annual_high": "ivNinetyOneYearHigh", + "iv90_annual_low": "ivNinetyOneYearLow", + }, + inplace=True, + ) + + iv_order = [ + "ivThirtyOneYearHigh", + "hvThirtyOneYearHigh", + "ivThirtyOneYearLow", + "hvThirtyOneYearLow", + "ivSixtyOneYearHigh", + "hvSixtyOneYearHigh", + "ivSixtyOneYearLow", + "hvSixtyOneYearLow", + "ivNinetyOneYearHigh", + "hvNinetyOneYearHigh", + "ivNinetyOneYearLow", + "hvNinetyOneYearLow", + ] + + ticker_iv = pd.DataFrame(h_data).transpose() + except HTTPError: + print("There was an error with the request'\n") + + return pd.DataFrame(ticker_iv, columns=iv_order).transpose() + + +def get_chains(symbol: str) -> pd.DataFrame: + """Gets the complete options chains for a ticker. + + Parameters + ---------- + symbol: str + The ticker get options data for + + Returns + ------- + pd.DataFrame + DataFrame with all active options contracts for the underlying symbol. + """ + + # Checks ticker to determine if ticker is an index or an exception that requires modifying the request's URLs. + symbol = symbol.upper() + try: + if symbol in TICKER_EXCEPTIONS: + quotes_url = ( + "https://cdn.cboe.com/api/global/delayed_quotes/options/_" + f"{symbol}" + ".json" + ) + else: + if symbol not in INDEXES: + quotes_url = ( + "https://cdn.cboe.com/api/global/delayed_quotes/options/" + f"{symbol}" + ".json" + ) + if symbol in INDEXES: + quotes_url = ( + "https://cdn.cboe.com/api/global/delayed_quotes/options/_" + f"{symbol}" + ".json" + ) + + r = request(quotes_url) + if r.status_code != 200: + print("No data found for the symbol: " f"{symbol}" "") + return pd.DataFrame() + + r_json = r.json() + data = pd.DataFrame(r_json["data"]) + options = pd.Series(data.options, index=data.index) + options_columns = list(options[0]) + options_data = list(options[:]) + options_df = pd.DataFrame(options_data, columns=options_columns) + + options_df = options_df.rename( + columns={ + "option": "contractSymbol", + "bid_size": "bidSize", + "ask_size": "askSize", + "iv": "impliedVolatility", + "open_interest": "openInterest", + "theo": "theoretical", + "last_trade_price": "lastTradePrice", + "last_trade_time": "lastTradeTimestamp", + "percent_change": "changePercent", + "prev_day_close": "previousClose", + } + ) + + # Parses the option symbols into columns for expiration, strike, and optionType + + option_df_index = options_df["contractSymbol"].str.extractall( + r"^(?P\D*)(?P\d*)(?P\D*)(?P\d*)" + ) + option_df_index = option_df_index.reset_index().drop( + columns=["match", "level_0"] + ) + option_df_index.optionType = option_df_index.optionType.str.replace( + "C", "call" + ).str.replace("P", "put") + option_df_index.strike = [ele.lstrip("0") for ele in option_df_index.strike] + option_df_index.strike = pd.Series(option_df_index.strike).astype(float) + option_df_index.strike = option_df_index.strike * (1 / 1000) + option_df_index.strike = option_df_index.strike.to_list() + option_df_index.expiration = [ + ele.lstrip("1") for ele in option_df_index.expiration + ] + option_df_index.expiration = pd.DatetimeIndex( + option_df_index.expiration, yearfirst=True + ).astype(str) + option_df_index = option_df_index.drop(columns=["Ticker"]) + + # Joins the parsed symbol into the dataframe. + + quotes = option_df_index.join(options_df) + + now = datetime.now() + temp = pd.DatetimeIndex(quotes.expiration) + temp_ = (temp - now).days + 1 + quotes["dte"] = temp_ + + quotes["lastTradeTimestamp"] = pd.to_datetime(quotes["lastTradeTimestamp"]) + quotes = quotes.set_index( + keys=["expiration", "strike", "optionType"] + ).sort_index() + quotes["openInterest"] = quotes["openInterest"].astype("int64") + quotes["volume"] = quotes["volume"].astype("int64") + quotes["bidSize"] = quotes["bidSize"].astype("int64") + quotes["askSize"] = quotes["askSize"].astype("int64") + quotes["previousClose"] = round(quotes["previousClose"], 2) + quotes["changePercent"] = round(quotes["changePercent"], 2) + + except HTTPError: + print("There was an error with the request'\n") + return pd.DataFrame() + + return quotes.reset_index() + + +def __generate_historical_prices_url( + symbol, data_type: Optional[str] = "historical" +) -> str: + """Generates the final URL for historical prices data.""" + + url: str = "" + + if data_type not in ["historical", "intraday"]: + print( + "Invalid data_type. Must be either 'historical' or 'intraday'. Defaulting to 'historical'." + ) + data_type = "historical" + + if symbol in TICKER_EXCEPTIONS: + url = ( + f"https://cdn.cboe.com/api/global/delayed_quotes/charts/{data_type}/_" + f"{symbol}" + ".json" + ) + else: + if symbol not in INDEXES: + url = ( + f"https://cdn.cboe.com/api/global/delayed_quotes/charts/{data_type}/" + f"{symbol}" + ".json" + ) + + elif symbol in INDEXES: + url = ( + f"https://cdn.cboe.com/api/global/delayed_quotes/charts/{data_type}/_" + f"{symbol}" + ".json" + ) + return url + + +def get_eod_prices( + symbol: str, + start_date: Optional[date] = None, + end_date: Optional[date] = None, +) -> pd.DataFrame: + """Gets EOD data from CBOE. + + Parameters + ---------- + symbol: str + The symbol of the company. + start_date: Optional[date] + The start date. [YYYY-MM-DD] + end_date: Optional[date] + The end date. [YYYY-MM-DD] + + Returns + ------- + pd.DataFrame + DataFrame of daily EOD OHLC+V prices. + """ + + symbol = symbol.upper() + if symbol == ("NDX", "^NDX"): + print("NDX time series data is not currently supported by the CBOE provider.") + return pd.DataFrame() + if "^" in symbol: + symbol = symbol.replace("^", "") + now = datetime.now() + start_date = start_date if start_date else now - timedelta(days=50000) + end_date = end_date if end_date else now + if symbol not in SYMBOLS.index: + print("The symbol, " f"{symbol}" ", was not found in the CBOE directory.") + return pd.DataFrame() + + url = __generate_historical_prices_url(symbol) + r = request(url) + + if r.status_code != 200: + print(f"Error: {r.status_code}") + return pd.DataFrame() + + data = ( + pd.DataFrame(r.json()["data"])[ + ["date", "open", "high", "low", "close", "volume"] + ] + ).set_index("date") + + # Fill in missing data from current or most recent trading session. + + today = pd.to_datetime(datetime.now().date()) + if today.weekday() > 4: + day_minus = today.weekday() - 4 + today = pd.to_datetime(today - timedelta(days=day_minus)) + if today != data.index[-1]: + _today, _ = get_ticker_info(symbol) + today_df = pd.DataFrame() + today_df["open"] = round(_today.loc["open"].astype(float), 2) + today_df["high"] = round(_today.loc["high"].astype(float), 2) + today_df["low"] = round(_today.loc["low"].astype(float), 2) + today_df["close"] = round(_today.loc["close"].astype(float), 2) + if symbol not in INDEXES and symbol not in TICKER_EXCEPTIONS: + data = data[data["volume"] > 0] + today_df["volume"] = _today.loc["volume"] + today_df["date"] = today + today_df = today_df.reset_index(drop=True).set_index("date") + + data = pd.concat([data, today_df], axis=0) + + # If ticker is an index there is no volume data and the types must be set. + + if symbol in INDEXES or symbol in TICKER_EXCEPTIONS: + data = data[["open", "high", "low", "close", "volume"]] + data["open"] = round(data.open.astype(float), 2) + data["high"] = round(data.high.astype(float), 2) + data["low"] = round(data.low.astype(float), 2) + data["close"] = round(data.close.astype(float), 2) + data["volume"] = 0 + + data.index = pd.to_datetime(data.index, format="%Y-%m-%d") + data = data[data["open"] > 0] + + data = data[ + (data.index >= pd.to_datetime(start_date, format="%Y-%m-%d")) + & (data.index <= pd.to_datetime(end_date, format="%Y-%m-%d")) + ] + data.index = data.index.strftime("%Y-%m-%d") + return data.reset_index() + + +def get_info(symbol: str) -> pd.DataFrame: + """Gets information and current statistics for a ticker. + + Parameters + ---------- + symbol: str + The symbol of the company. + + Returns + ------- + pd.DataFrame + Pandas DataFrame with results. + """ + + symbol = symbol.upper() + info = pd.DataFrame() + + _info = get_ticker_info(symbol)[0] + _iv = get_ticker_iv(symbol) + info = pd.concat([_info, _iv]) + info.index = [camel_to_snake(c) for c in info.index] + info.loc["symbol", symbol] = symbol + info.loc["name", symbol] = SYMBOLS[SYMBOLS.index == symbol]["Company Name"][0] + + return info[symbol] diff --git a/openbb_sdk/providers/cboe/poetry.lock b/openbb_sdk/providers/cboe/poetry.lock new file mode 100644 index 00000000000..583148ff3cf --- /dev/null +++ b/openbb_sdk/providers/cboe/poetry.lock @@ -0,0 +1,245 @@ +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. + +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.2.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.2.0.tar.gz", hash = "sha256:3bb3d25a8e6c0aedd251753a79ae98a093c7e7b471faa3aa9a93a81431987ace"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b87549028f680ca955556e3bd57013ab47474c3124dc069faa0b6545b6c9710"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7c70087bfee18a42b4040bb9ec1ca15a08242cf5867c58726530bdf3945672ed"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a103b3a7069b62f5d4890ae1b8f0597618f628b286b03d4bc9195230b154bfa9"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94aea8eff76ee6d1cdacb07dd2123a68283cb5569e0250feab1240058f53b623"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:db901e2ac34c931d73054d9797383d0f8009991e723dab15109740a63e7f902a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0dac0ff919ba34d4df1b6131f59ce95b08b9065233446be7e459f95554c0dc8"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193cbc708ea3aca45e7221ae58f0fd63f933753a9bfb498a3b474878f12caaad"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09393e1b2a9461950b1c9a45d5fd251dc7c6f228acab64da1c9c0165d9c7765c"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:baacc6aee0b2ef6f3d308e197b5d7a81c0e70b06beae1f1fcacffdbd124fe0e3"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:bf420121d4c8dce6b889f0e8e4ec0ca34b7f40186203f06a946fa0276ba54029"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c04a46716adde8d927adb9457bbe39cf473e1e2c2f5d0a16ceb837e5d841ad4f"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:aaf63899c94de41fe3cf934601b0f7ccb6b428c6e4eeb80da72c58eab077b19a"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62e51710986674142526ab9f78663ca2b0726066ae26b78b22e0f5e571238dd"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win32.whl", hash = "sha256:04e57ab9fbf9607b77f7d057974694b4f6b142da9ed4a199859d9d4d5c63fe96"}, + {file = "charset_normalizer-3.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:48021783bdf96e3d6de03a6e39a1171ed5bd7e8bb93fc84cc649d11490f87cea"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4957669ef390f0e6719db3613ab3a7631e68424604a7b448f079bee145da6e09"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46fb8c61d794b78ec7134a715a3e564aafc8f6b5e338417cb19fe9f57a5a9bf2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f779d3ad205f108d14e99bb3859aa7dd8e9c68874617c72354d7ecaec2a054ac"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25c229a6ba38a35ae6e25ca1264621cc25d4d38dca2942a7fce0b67a4efe918"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2efb1bd13885392adfda4614c33d3b68dee4921fd0ac1d3988f8cbb7d589e72a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f30b48dd7fa1474554b0b0f3fdfdd4c13b5c737a3c6284d3cdc424ec0ffff3a"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:246de67b99b6851627d945db38147d1b209a899311b1305dd84916f2b88526c6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd9b3b31adcb054116447ea22caa61a285d92e94d710aa5ec97992ff5eb7cf3"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c2f5e83493748286002f9369f3e6607c565a6a90425a3a1fef5ae32a36d749d"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:3170c9399da12c9dc66366e9d14da8bf7147e1e9d9ea566067bbce7bb74bd9c2"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7a4826ad2bd6b07ca615c74ab91f32f6c96d08f6fcc3902ceeedaec8cdc3bcd6"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:3b1613dd5aee995ec6d4c69f00378bbd07614702a315a2cf6c1d21461fe17c23"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9e608aafdb55eb9f255034709e20d5a83b6d60c054df0802fa9c9883d0a937aa"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win32.whl", hash = "sha256:f2a1d0fd4242bd8643ce6f98927cf9c04540af6efa92323e9d3124f57727bfc1"}, + {file = "charset_normalizer-3.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:681eb3d7e02e3c3655d1b16059fbfb605ac464c834a0c629048a30fad2b27489"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c57921cda3a80d0f2b8aec7e25c8aa14479ea92b5b51b6876d975d925a2ea346"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41b25eaa7d15909cf3ac4c96088c1f266a9a93ec44f87f1d13d4a0e86c81b982"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f058f6963fd82eb143c692cecdc89e075fa0828db2e5b291070485390b2f1c9c"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7647ebdfb9682b7bb97e2a5e7cb6ae735b1c25008a70b906aecca294ee96cf4"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eef9df1eefada2c09a5e7a40991b9fc6ac6ef20b1372abd48d2794a316dc0449"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e03b8895a6990c9ab2cdcd0f2fe44088ca1c65ae592b8f795c3294af00a461c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ee4006268ed33370957f55bf2e6f4d263eaf4dc3cfc473d1d90baff6ed36ce4a"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c4983bf937209c57240cff65906b18bb35e64ae872da6a0db937d7b4af845dd7"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:3bb7fda7260735efe66d5107fb7e6af6a7c04c7fce9b2514e04b7a74b06bf5dd"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:72814c01533f51d68702802d74f77ea026b5ec52793c791e2da806a3844a46c3"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:70c610f6cbe4b9fce272c407dd9d07e33e6bf7b4aa1b7ffb6f6ded8e634e3592"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win32.whl", hash = "sha256:a401b4598e5d3f4a9a811f3daf42ee2291790c7f9d74b18d75d6e21dda98a1a1"}, + {file = "charset_normalizer-3.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c0b21078a4b56965e2b12f247467b234734491897e99c1d51cee628da9786959"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:95eb302ff792e12aba9a8b8f8474ab229a83c103d74a750ec0bd1c1eea32e669"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a100c6d595a7f316f1b6f01d20815d916e75ff98c27a01ae817439ea7726329"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6339d047dab2780cc6220f46306628e04d9750f02f983ddb37439ca47ced7149"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b749b9cc6ee664a3300bb3a273c1ca8068c46be705b6c31cf5d276f8628a94"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a38856a971c602f98472050165cea2cdc97709240373041b69030be15047691f"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f87f746ee241d30d6ed93969de31e5ffd09a2961a051e60ae6bddde9ec3583aa"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89f1b185a01fe560bc8ae5f619e924407efca2191b56ce749ec84982fc59a32a"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e1c8a2f4c69e08e89632defbfabec2feb8a8d99edc9f89ce33c4b9e36ab63037"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2f4ac36d8e2b4cc1aa71df3dd84ff8efbe3bfb97ac41242fbcfc053c67434f46"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a386ebe437176aab38c041de1260cd3ea459c6ce5263594399880bbc398225b2"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ccd16eb18a849fd8dcb23e23380e2f0a354e8daa0c984b8a732d9cfaba3a776d"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6a5bf2cba5ae1bb80b154ed68a3cfa2fa00fde979a7f50d6598d3e17d9ac20c"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45de3f87179c1823e6d9e32156fb14c1927fcc9aba21433f088fdfb555b77c10"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win32.whl", hash = "sha256:1000fba1057b92a65daec275aec30586c3de2401ccdcd41f8a5c1e2c87078706"}, + {file = "charset_normalizer-3.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b2c760cfc7042b27ebdb4a43a4453bd829a5742503599144d54a032c5dc7e9e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:855eafa5d5a2034b4621c74925d89c5efef61418570e5ef9b37717d9c796419c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:203f0c8871d5a7987be20c72442488a0b8cfd0f43b7973771640fc593f56321f"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e857a2232ba53ae940d3456f7533ce6ca98b81917d47adc3c7fd55dad8fab858"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e86d77b090dbddbe78867a0275cb4df08ea195e660f1f7f13435a4649e954e5"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fb39a81950ec280984b3a44f5bd12819953dc5fa3a7e6fa7a80db5ee853952"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2dee8e57f052ef5353cf608e0b4c871aee320dd1b87d351c28764fc0ca55f9f4"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8700f06d0ce6f128de3ccdbc1acaea1ee264d2caa9ca05daaf492fde7c2a7200"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1920d4ff15ce893210c1f0c0e9d19bfbecb7983c76b33f046c13a8ffbd570252"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c1c76a1743432b4b60ab3358c937a3fe1341c828ae6194108a94c69028247f22"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f7560358a6811e52e9c4d142d497f1a6e10103d3a6881f18d04dbce3729c0e2c"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c8063cf17b19661471ecbdb3df1c84f24ad2e389e326ccaf89e3fb2484d8dd7e"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:cd6dbe0238f7743d0efe563ab46294f54f9bc8f4b9bcf57c3c666cc5bc9d1299"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:1249cbbf3d3b04902ff081ffbb33ce3377fa6e4c7356f759f3cd076cc138d020"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win32.whl", hash = "sha256:6c409c0deba34f147f77efaa67b8e4bb83d2f11c8806405f76397ae5b8c0d1c9"}, + {file = "charset_normalizer-3.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:7095f6fbfaa55defb6b733cfeb14efaae7a29f0b59d8cf213be4e7ca0b857b80"}, + {file = "charset_normalizer-3.2.0-py3-none-any.whl", hash = "sha256:8e098148dd37b4ce3baca71fb394c81dc5d9c7728c95df695d2dca218edf40e6"}, +] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "openbb-provider" +version = "0.2.0" +description = "" +optional = false +python-versions = "^3.8" +files = [] +develop = false + +[package.dependencies] +pydantic = {version = "^1.10", extras = ["dotenv"]} +requests = "^2.31.0" +urllib3 = "<2.0.0" + +[package.source] +type = "directory" +url = "../../sdk/provider" + +[[package]] +name = "pydantic" +version = "1.10.11" +description = "Data validation and settings management using python type hints" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pydantic-1.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ff44c5e89315b15ff1f7fdaf9853770b810936d6b01a7bcecaa227d2f8fe444f"}, + {file = "pydantic-1.10.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c098d4ab5e2d5b3984d3cb2527e2d6099d3de85630c8934efcfdc348a9760e"}, + {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16928fdc9cb273c6af00d9d5045434c39afba5f42325fb990add2c241402d151"}, + {file = "pydantic-1.10.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0588788a9a85f3e5e9ebca14211a496409cb3deca5b6971ff37c556d581854e7"}, + {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e9baf78b31da2dc3d3f346ef18e58ec5f12f5aaa17ac517e2ffd026a92a87588"}, + {file = "pydantic-1.10.11-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:373c0840f5c2b5b1ccadd9286782852b901055998136287828731868027a724f"}, + {file = "pydantic-1.10.11-cp310-cp310-win_amd64.whl", hash = "sha256:c3339a46bbe6013ef7bdd2844679bfe500347ac5742cd4019a88312aa58a9847"}, + {file = "pydantic-1.10.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:08a6c32e1c3809fbc49debb96bf833164f3438b3696abf0fbeceb417d123e6eb"}, + {file = "pydantic-1.10.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a451ccab49971af043ec4e0d207cbc8cbe53dbf148ef9f19599024076fe9c25b"}, + {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b02d24f7b2b365fed586ed73582c20f353a4c50e4be9ba2c57ab96f8091ddae"}, + {file = "pydantic-1.10.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f34739a89260dfa420aa3cbd069fbcc794b25bbe5c0a214f8fb29e363484b66"}, + {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e297897eb4bebde985f72a46a7552a7556a3dd11e7f76acda0c1093e3dbcf216"}, + {file = "pydantic-1.10.11-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d185819a7a059550ecb85d5134e7d40f2565f3dd94cfd870132c5f91a89cf58c"}, + {file = "pydantic-1.10.11-cp311-cp311-win_amd64.whl", hash = "sha256:4400015f15c9b464c9db2d5d951b6a780102cfa5870f2c036d37c23b56f7fc1b"}, + {file = "pydantic-1.10.11-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2417de68290434461a266271fc57274a138510dca19982336639484c73a07af6"}, + {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:331c031ba1554b974c98679bd0780d89670d6fd6f53f5d70b10bdc9addee1713"}, + {file = "pydantic-1.10.11-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8268a735a14c308923e8958363e3a3404f6834bb98c11f5ab43251a4e410170c"}, + {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:44e51ba599c3ef227e168424e220cd3e544288c57829520dc90ea9cb190c3248"}, + {file = "pydantic-1.10.11-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d7781f1d13b19700b7949c5a639c764a077cbbdd4322ed505b449d3ca8edcb36"}, + {file = "pydantic-1.10.11-cp37-cp37m-win_amd64.whl", hash = "sha256:7522a7666157aa22b812ce14c827574ddccc94f361237ca6ea8bb0d5c38f1629"}, + {file = "pydantic-1.10.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bc64eab9b19cd794a380179ac0e6752335e9555d214cfcb755820333c0784cb3"}, + {file = "pydantic-1.10.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8dc77064471780262b6a68fe67e013298d130414d5aaf9b562c33987dbd2cf4f"}, + {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe429898f2c9dd209bd0632a606bddc06f8bce081bbd03d1c775a45886e2c1cb"}, + {file = "pydantic-1.10.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:192c608ad002a748e4a0bed2ddbcd98f9b56df50a7c24d9a931a8c5dd053bd3d"}, + {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ef55392ec4bb5721f4ded1096241e4b7151ba6d50a50a80a2526c854f42e6a2f"}, + {file = "pydantic-1.10.11-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:41e0bb6efe86281623abbeeb0be64eab740c865388ee934cd3e6a358784aca6e"}, + {file = "pydantic-1.10.11-cp38-cp38-win_amd64.whl", hash = "sha256:265a60da42f9f27e0b1014eab8acd3e53bd0bad5c5b4884e98a55f8f596b2c19"}, + {file = "pydantic-1.10.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:469adf96c8e2c2bbfa655fc7735a2a82f4c543d9fee97bd113a7fb509bf5e622"}, + {file = "pydantic-1.10.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e6cbfbd010b14c8a905a7b10f9fe090068d1744d46f9e0c021db28daeb8b6de1"}, + {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abade85268cc92dff86d6effcd917893130f0ff516f3d637f50dadc22ae93999"}, + {file = "pydantic-1.10.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9738b0f2e6c70f44ee0de53f2089d6002b10c33264abee07bdb5c7f03038303"}, + {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:787cf23e5a0cde753f2eabac1b2e73ae3844eb873fd1f5bdbff3048d8dbb7604"}, + {file = "pydantic-1.10.11-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:174899023337b9fc685ac8adaa7b047050616136ccd30e9070627c1aaab53a13"}, + {file = "pydantic-1.10.11-cp39-cp39-win_amd64.whl", hash = "sha256:1954f8778489a04b245a1e7b8b22a9d3ea8ef49337285693cf6959e4b757535e"}, + {file = "pydantic-1.10.11-py3-none-any.whl", hash = "sha256:008c5e266c8aada206d0627a011504e14268a62091450210eda7c07fabe6963e"}, + {file = "pydantic-1.10.11.tar.gz", hash = "sha256:f66d479cf7eb331372c470614be6511eae96f1f120344c25f3f9bb59fb1b5528"}, +] + +[package.dependencies] +python-dotenv = {version = ">=0.10.4", optional = true, markers = "extra == \"dotenv\""} +typing-extensions = ">=4.2.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + +[[package]] +name = "python-dotenv" +version = "1.0.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.8" +files = [ + {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, + {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "typing-extensions" +version = "4.7.1" +description = "Backported and Experimental Type Hints for Python 3.7+" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, + {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, +] + +[[package]] +name = "urllib3" +version = "1.26.16" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.16-py2.py3-none-any.whl", hash = "sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f"}, + {file = "urllib3-1.26.16.tar.gz", hash = "sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "26269b8a989dcc6ac67961b7a43d485d231c8ac878265ac90f310ced959fc532" diff --git a/openbb_sdk/providers/cboe/pyproject.toml b/openbb_sdk/providers/cboe/pyproject.toml new file mode 100644 index 00000000000..4519e29480c --- /dev/null +++ b/openbb_sdk/providers/cboe/pyproject.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "openbb-cboe" +version = "0.1.1" +description = "" +authors = ["OpenBB Team "] +readme = "README.md" +packages = [{ include = "openbb_cboe" }] + +[tool.poetry.dependencies] +python = "^3.8" +openbb-provider = { path = "../../sdk/provider" } + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.plugins."openbb_provider_extension"] +cboe = "openbb_cboe:cboe_provider" diff --git a/openbb_sdk/providers/cboe/tests/.gitkeep b/openbb_sdk/providers/cboe/tests/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d From d7e7107d5a603abc8c46705907e4f5022b210b44 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 17:55:38 +0530 Subject: [PATCH 04/14] Added `standard_models` courtesy @deeleeramone --- .../standard_models/options_chains.py | 25 ++++++++++++ .../standard_models/stock_info.py | 38 +++++++++++++++++++ .../standard_models/stock_search.py | 22 +++++++++++ 3 files changed, 85 insertions(+) create mode 100644 openbb_sdk/sdk/provider/openbb_provider/standard_models/options_chains.py create mode 100644 openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_info.py create mode 100644 openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_search.py diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/options_chains.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/options_chains.py new file mode 100644 index 00000000000..95772b26528 --- /dev/null +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/options_chains.py @@ -0,0 +1,25 @@ +"""Options Chains data model.""" + +from datetime import datetime + +from pydantic import Field + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams +from openbb_provider.standard_models.base import BaseSymbol + + +class OptionsChainsQueryParams(QueryParams, BaseSymbol): + """Options Chains Query Params""" + + +class OptionsChainsData(Data): + """Options Chains Data.""" + + expiration: datetime = Field(description="The expiration date of the contract.") + strike: float = Field(description="The strike price of the contract.") + optionType: str = Field(description="Call or Put.") + bid: float = Field(description="The bid price of the contract.") + ask: float = Field(description="The ask price of the contract.") + openInterest: float = Field(description="The open interest on the contract.") + volume: float = Field(description="The current trading volume on the contract.") diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_info.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_info.py new file mode 100644 index 00000000000..389b7ec9dda --- /dev/null +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_info.py @@ -0,0 +1,38 @@ +"""Stock Info data model.""" + +from typing import Optional + +from pydantic import Field + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams +from openbb_provider.standard_models.base import BaseSymbol + + +class StockInfoQueryParams(QueryParams, BaseSymbol): + """Stock Info Query Params""" + + +class StockInfoData(Data): + """Stock Info Data.""" + + symbol: str = Field(description="The ticker symbol.") + name: str = Field(description="The name associated with the ticker symbol.") + price: float = Field(description="The last price of the stock.") + open: Optional[float] = Field(description="The opening price of the stock.") + high: Optional[float] = Field( + description="The high price of the current trading day." + ) + low: Optional[float] = Field( + description="The low price of the current trading day." + ) + close: Optional[float] = Field(description="The closing price of the stock.") + change: Optional[float] = Field( + description="The change in price over the current trading period." + ) + change_percent: Optional[float] = Field( + description="The % change in price over the current trading period." + ) + previous_close: Optional[float] = Field( + description="The previous closing price of the stock." + ) diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_search.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_search.py new file mode 100644 index 00000000000..f711a3f6bca --- /dev/null +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_search.py @@ -0,0 +1,22 @@ +"""Stock Search data model.""" + +from pydantic import Field + +from openbb_provider.abstract.data import Data +from openbb_provider.abstract.query_params import QueryParams + + +class StockSearchQueryParams(QueryParams): + """Company Search Query Params""" + + query: str = Field(description="The search query.", default="") + ticker: bool = Field( + description="Whether to search by ticker symbol.", default=False + ) + + +class StockSearchData(Data): + """Company Search Data.""" + + symbol: str = Field(description="The ticker symbol of the company.") + name: str = Field(description="The name of the company.") From 9770f02947611b33f5f780e4ef4de16f449b0a66 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 17:57:07 +0530 Subject: [PATCH 05/14] Added the `yfinance` provider --- openbb_sdk/providers/yfinance/README.md | 11 ++ .../yfinance/openbb_yfinance/__init__.py | 22 ++++ .../openbb_yfinance/models/__init__.py | 0 .../openbb_yfinance/models/crypto_eod.py | 104 +++++++++++++++++ .../openbb_yfinance/models/forex_eod.py | 103 +++++++++++++++++ .../models/major_indices_eod.py | 106 ++++++++++++++++++ .../openbb_yfinance/models/stock_eod.py | 101 +++++++++++++++++ .../openbb_yfinance/utils/__init__.py | 0 .../yfinance/openbb_yfinance/utils/types.py | 11 ++ openbb_sdk/providers/yfinance/pyproject.toml | 19 ++++ openbb_sdk/providers/yfinance/tests/.gitkeep | 0 11 files changed, 477 insertions(+) create mode 100644 openbb_sdk/providers/yfinance/README.md create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/__init__.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/models/__init__.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/utils/__init__.py create mode 100644 openbb_sdk/providers/yfinance/openbb_yfinance/utils/types.py create mode 100644 openbb_sdk/providers/yfinance/pyproject.toml create mode 100644 openbb_sdk/providers/yfinance/tests/.gitkeep diff --git a/openbb_sdk/providers/yfinance/README.md b/openbb_sdk/providers/yfinance/README.md new file mode 100644 index 00000000000..072f33d14c3 --- /dev/null +++ b/openbb_sdk/providers/yfinance/README.md @@ -0,0 +1,11 @@ +# OpenBB yfinance Provider + +This extension integrates the yfinance (Yahoo! Finance) data provider into the OpenBB SDK. + +## Installation + +To install the extension, run the following command in this folder: + +```bash +pip install . +``` diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/__init__.py b/openbb_sdk/providers/yfinance/openbb_yfinance/__init__.py new file mode 100644 index 00000000000..0e366c8681e --- /dev/null +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/__init__.py @@ -0,0 +1,22 @@ +"""yfinance (Yahoo!Finance) provider module.""" +from openbb_provider.abstract.provider import Provider + +from openbb_yfinance.models.crypto_eod import YFinanceCryptoEODFetcher +from openbb_yfinance.models.forex_eod import YFinanceForexEODFetcher +from openbb_yfinance.models.major_indices_eod import YFinanceMajorIndicesEODFetcher +from openbb_yfinance.models.stock_eod import YFinanceStockEODFetcher + +yfinance_provider = Provider( + name="yfinance", + website="https://finance.yahoo.com/", + description="""Yahoo! Finance is a web-based platform that offers financial news, + data, and tools for investors and individuals interested in tracking and analyzing + financial markets and assets.""", + required_credentials=None, + fetcher_dict={ + "CryptoEOD": YFinanceCryptoEODFetcher, + "ForexEOD": YFinanceForexEODFetcher, + "MajorIndicesEOD": YFinanceMajorIndicesEODFetcher, + "StockEOD": YFinanceStockEODFetcher, + }, +) diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/__init__.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py new file mode 100644 index 00000000000..ece2f90ef6f --- /dev/null +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py @@ -0,0 +1,104 @@ +"""yfinance Crypto end of day fetcher.""" + + +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.crypto_eod import ( + CryptoEODData, + CryptoEODQueryParams, +) +from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, validator +from yfinance import Ticker + +from openbb_yfinance.utils.types import INTERVALS, PERIODS + + +class YFinanceCryptoEODQueryParams(CryptoEODQueryParams): + """YFinance Crypto end of day Query. + + Source: https://finance.yahoo.com/crypto/ + """ + + interval: Optional[INTERVALS] = Field(default="1d", description="Data granularity.") + period: Optional[PERIODS] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("period", "") + ) + + +class YFinanceCryptoEODData(CryptoEODData): + """YFinance Crypto end of day Data.""" + + class Config: + fields = { + "date": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close", + "volume": "Volume", + } + + @validator("Date", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%dT%H:%M:%S") + + +class YFinanceCryptoEODFetcher( + Fetcher[ + YFinanceCryptoEODQueryParams, + List[YFinanceCryptoEODData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> YFinanceCryptoEODQueryParams: + now = datetime.now().date() + transformed_params = params + if params.get("start_date") is None: + transformed_params["start_date"] = now - timedelta(days=7) + + if params.get("end_date") is None: + transformed_params["end_date"] = now + return YFinanceCryptoEODQueryParams(**params) + + @staticmethod + def extract_data( + query: YFinanceCryptoEODQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[YFinanceCryptoEODData]: + now = datetime.now().date() + query.start_date = query.start_date or (now - timedelta(days=8)) + query.end_date = query.end_date or (now - timedelta(days=1)) + + if query.period: + data = Ticker(query.symbol).history( + interval=query.interval, + period=query.period, + actions=False, + raise_errors=True, + ) + else: + data = Ticker(query.symbol).history( + interval=query.interval, + start=query.start_date, + end=query.end_date, + actions=False, + raise_errors=True, + ) + + data = data.reset_index() + data["Date"] = ( + data["Date"].dt.tz_localize(None).dt.strftime("%Y-%m-%dT%H:%M:%S") + ) + data = data.to_dict("records") + + return [YFinanceCryptoEODData.parse_obj(d) for d in data] + + @staticmethod + def transform_data( + data: List[YFinanceCryptoEODData], + ) -> List[YFinanceCryptoEODData]: + return data diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py new file mode 100644 index 00000000000..4bcfac96986 --- /dev/null +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py @@ -0,0 +1,103 @@ +"""yfinance Forex end of day fetcher.""" + + +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.forex_eod import ForexEODData, ForexEODQueryParams +from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, validator +from yfinance import Ticker + +from openbb_yfinance.utils.types import INTERVALS, PERIODS + + +class YFinanceForexEODQueryParams(ForexEODQueryParams): + """YFinance Forex end of day Query. + + Source: https://finance.yahoo.com/currencies/ + """ + + interval: Optional[INTERVALS] = Field(default="1d", description="Data granularity.") + period: Optional[PERIODS] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("period", "") + ) + + +class YFinanceForexEODData(ForexEODData): + """YFinance Forex end of day Data.""" + + class Config: + fields = { + "date": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close", + "volume": "Volume", + } + + @validator("Date", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%dT%H:%M:%S") + + +class YFinanceForexEODFetcher( + Fetcher[ + YFinanceForexEODQueryParams, + List[YFinanceForexEODData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> YFinanceForexEODQueryParams: + now = datetime.now().date() + transformed_params = params + if params.get("start_date") is None: + transformed_params["start_date"] = now - timedelta(days=7) + + if params.get("end_date") is None: + transformed_params["end_date"] = now + return YFinanceForexEODQueryParams(**params) + + @staticmethod + def extract_data( + query: YFinanceForexEODQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[YFinanceForexEODData]: + query.symbol = f"{query.symbol}=X" + + now = datetime.now().date() + query.start_date = query.start_date or (now - timedelta(days=8)) + query.end_date = query.end_date or (now - timedelta(days=1)) + + if query.period: + data = Ticker(query.symbol).history( + interval=query.interval, + period=query.period, + actions=False, + raise_errors=True, + ) + else: + data = Ticker(query.symbol).history( + interval=query.interval, + start=query.start_date, + end=query.end_date, + actions=False, + raise_errors=True, + ) + + data = data.reset_index() + data["Date"] = ( + data["Date"].dt.tz_localize(None).dt.strftime("%Y-%m-%dT%H:%M:%S") + ) + data = data.to_dict("records") + + return [YFinanceForexEODData.parse_obj(d) for d in data] + + @staticmethod + def transform_data( + data: List[YFinanceForexEODData], + ) -> List[YFinanceForexEODData]: + return data diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py new file mode 100644 index 00000000000..e139b607325 --- /dev/null +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py @@ -0,0 +1,106 @@ +"""yfinance Major Indices end of day fetcher.""" + + +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.major_indices_eod import ( + MajorIndicesEODData, + MajorIndicesEODQueryParams, +) +from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, validator +from yfinance import Ticker + +from openbb_yfinance.utils.types import INTERVALS, PERIODS + + +class YFinanceMajorIndicesEODQueryParams(MajorIndicesEODQueryParams): + """YFinance Major Indices end of day Query. + + Source: https://finance.yahoo.com/world-indices + """ + + interval: Optional[INTERVALS] = Field(default="1d", description="Data granularity.") + period: Optional[PERIODS] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("period", "") + ) + + +class YFinanceMajorIndicesEODData(MajorIndicesEODData): + """YFinance Major Indices end of day Data.""" + + class Config: + fields = { + "date": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close", + "volume": "Volume", + } + + @validator("Date", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%dT%H:%M:%S") + + +class YFinanceMajorIndicesEODFetcher( + Fetcher[ + YFinanceMajorIndicesEODQueryParams, + List[YFinanceMajorIndicesEODData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> YFinanceMajorIndicesEODQueryParams: + now = datetime.now().date() + transformed_params = params + if params.get("start_date") is None: + transformed_params["start_date"] = now - timedelta(days=7) + + if params.get("end_date") is None: + transformed_params["end_date"] = now + return YFinanceMajorIndicesEODQueryParams(**params) + + @staticmethod + def extract_data( + query: YFinanceMajorIndicesEODQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[YFinanceMajorIndicesEODData]: + query.symbol = f"^{query.symbol}" + + now = datetime.now().date() + query.start_date = query.start_date or (now - timedelta(days=8)) + query.end_date = query.end_date or (now - timedelta(days=1)) + + if query.period: + data = Ticker(query.symbol).history( + interval=query.interval, + period=query.period, + actions=False, + raise_errors=True, + ) + else: + data = Ticker(query.symbol).history( + interval=query.interval, + start=query.start_date, + end=query.end_date, + actions=False, + raise_errors=True, + ) + + data = data.reset_index() + data["Date"] = ( + data["Date"].dt.tz_localize(None).dt.strftime("%Y-%m-%dT%H:%M:%S") + ) + data = data.to_dict("records") + + return [YFinanceMajorIndicesEODData.parse_obj(d) for d in data] + + @staticmethod + def transform_data( + data: List[YFinanceMajorIndicesEODData], + ) -> List[YFinanceMajorIndicesEODData]: + return data diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py new file mode 100644 index 00000000000..9ef87ce0729 --- /dev/null +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py @@ -0,0 +1,101 @@ +"""yfinance Stock end of day fetcher.""" + + +from datetime import datetime, timedelta +from typing import Any, Dict, List, Optional + +from openbb_provider.abstract.fetcher import Fetcher +from openbb_provider.standard_models.stock_eod import StockEODData, StockEODQueryParams +from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS +from pydantic import Field, validator +from yfinance import Ticker + +from openbb_yfinance.utils.types import INTERVALS, PERIODS + + +class YFinanceStockEODQueryParams(StockEODQueryParams): + """YFinance Stock end of day Query. + + Source: https://finance.yahoo.com/ + """ + + interval: Optional[INTERVALS] = Field(default="1d", description="Data granularity.") + period: Optional[PERIODS] = Field( + default=None, description=QUERY_DESCRIPTIONS.get("period", "") + ) + + +class YFinanceStockEODData(StockEODData): + """YFinance Stock end of day Data.""" + + class Config: + fields = { + "date": "Date", + "open": "Open", + "high": "High", + "low": "Low", + "close": "Close", + "volume": "Volume", + } + + @validator("Date", pre=True, check_fields=False) + def date_validate(cls, v): # pylint: disable=E0213 + return datetime.strptime(v, "%Y-%m-%dT%H:%M:%S") + + +class YFinanceStockEODFetcher( + Fetcher[ + YFinanceStockEODQueryParams, + List[YFinanceStockEODData], + ] +): + @staticmethod + def transform_query(params: Dict[str, Any]) -> YFinanceStockEODQueryParams: + now = datetime.now().date() + transformed_params = params + if params.get("start_date") is None: + transformed_params["start_date"] = now - timedelta(days=7) + + if params.get("end_date") is None: + transformed_params["end_date"] = now + return YFinanceStockEODQueryParams(**params) + + @staticmethod + def extract_data( + query: YFinanceStockEODQueryParams, + credentials: Optional[Dict[str, str]], + **kwargs: Any, + ) -> List[YFinanceStockEODData]: + now = datetime.now().date() + query.start_date = query.start_date or (now - timedelta(days=8)) + query.end_date = query.end_date or (now - timedelta(days=1)) + + if query.period: + data = Ticker(query.symbol).history( + interval=query.interval, + period=query.period, + actions=False, + raise_errors=True, + ) + else: + data = Ticker(query.symbol).history( + interval=query.interval, + start=query.start_date, + end=query.end_date, + actions=False, + raise_errors=True, + ) + + data = data.reset_index() + data["Date"] = ( + data["Date"].dt.tz_localize(None).dt.strftime("%Y-%m-%dT%H:%M:%S") + ) + data = data.to_dict("records") + + return [YFinanceStockEODData.parse_obj(d) for d in data] + + @staticmethod + def transform_data( + data: List[YFinanceStockEODData], + ) -> List[YFinanceStockEODData]: + return data diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/utils/__init__.py b/openbb_sdk/providers/yfinance/openbb_yfinance/utils/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/utils/types.py b/openbb_sdk/providers/yfinance/openbb_yfinance/utils/types.py new file mode 100644 index 00000000000..d44e7ca63d6 --- /dev/null +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/utils/types.py @@ -0,0 +1,11 @@ +"""yfinance types helpers.""" + +from typing import Literal + +INTERVALS = Literal[ + "1m", "2m", "5m", "15m", "30m", "60m", "90m", "1h", "1d", "5d", "1wk", "1mo", "3mo" +] + +PERIODS = Literal[ + "1d", "5d", "1mo", "3mo", "6mo", "1y", "2y", "5y", "10y", "ytd", "max" +] diff --git a/openbb_sdk/providers/yfinance/pyproject.toml b/openbb_sdk/providers/yfinance/pyproject.toml new file mode 100644 index 00000000000..a8448b71a45 --- /dev/null +++ b/openbb_sdk/providers/yfinance/pyproject.toml @@ -0,0 +1,19 @@ +[tool.poetry] +name = "openbb-yfinance" +version = "0.1.1" +description = "" +authors = ["OpenBB Team "] +readme = "README.md" +packages = [{ include = "openbb_yfinance" }] + +[tool.poetry.dependencies] +python = "^3.8" +yfinance="^0.2.27" +openbb-provider = { path = "../../sdk/provider" } + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" + +[tool.poetry.plugins."openbb_provider_extension"] +yfinance = "openbb_yfinance:yfinance_provider" diff --git a/openbb_sdk/providers/yfinance/tests/.gitkeep b/openbb_sdk/providers/yfinance/tests/.gitkeep new file mode 100644 index 00000000000..e69de29bb2d From 8bc7169f2e83ffcf78baf24da81adbd7c1fa1804 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 14 Aug 2023 14:11:11 +0100 Subject: [PATCH 06/14] small fix on yf stock_eod --- .../providers/yfinance/openbb_yfinance/models/stock_eod.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py index 9ef87ce0729..0e4a90929d5 100644 --- a/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py @@ -58,7 +58,7 @@ class YFinanceStockEODFetcher( if params.get("end_date") is None: transformed_params["end_date"] = now - return YFinanceStockEODQueryParams(**params) + return YFinanceStockEODQueryParams(**transformed_params) @staticmethod def extract_data( From 5a01c7eb7f4b25fc5462b670945355425560ac07 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 19:51:45 +0530 Subject: [PATCH 07/14] bye obbject tests @hjoaquim --- openbb_sdk/extensions/charting/README.md | 2 +- .../openbb_charting/charting_router.py | 6 +- .../crypto/openbb_crypto/crypto_router.py | 6 +- .../economy/openbb_economy/economy_router.py | 138 ++++++------- .../openbb_fixedincome/fixedincome_router.py | 10 +- .../forex/openbb_forex/forex_router.py | 10 +- .../news/openbb_news/news_router.py | 10 +- .../extensions/qa/openbb_qa/qa_router.py | 118 +++++------ .../stocks/openbb_stocks/ca/ca_router.py | 46 ++--- .../stocks/openbb_stocks/dd/dd_router.py | 6 +- .../stocks/openbb_stocks/disc/disc_router.py | 74 +++---- .../stocks/openbb_stocks/dps/dps_router.py | 50 ++--- .../stocks/openbb_stocks/fa/fa_router.py | 194 +++++++++--------- .../stocks/openbb_stocks/gov/gov_router.py | 46 ++--- .../stocks/openbb_stocks/ins/ins_router.py | 66 +++--- .../openbb_stocks/options/options_router.py | 62 +++--- .../stocks/openbb_stocks/stocks_router.py | 26 +-- .../extensions/ta/openbb_ta/ta_router.py | 176 ++++++++-------- openbb_sdk/sdk/core/README.md | 10 +- .../core/openbb_core/api/router/commands.py | 18 +- .../core/openbb_core/app/charting_manager.py | 6 +- .../core/openbb_core/app/command_runner.py | 42 ++-- .../openbb_core/app/logs/logging_manager.py | 16 +- .../openbb_core/app/model/journal_entry.py | 4 +- .../openbb_core/app/model/journal_query.py | 2 +- .../sdk/core/openbb_core/app/model/obbject.py | 2 +- openbb_sdk/sdk/core/openbb_core/app/router.py | 22 +- .../core/openbb_core/app/static/filters.py | 14 +- .../openbb_core/app/static/package/crypto.py | 6 +- .../openbb_core/app/static/package/economy.py | 80 ++++---- .../app/static/package/fixedincome.py | 8 +- .../openbb_core/app/static/package/forex.py | 10 +- .../openbb_core/app/static/package/news.py | 8 +- .../core/openbb_core/app/static/package/qa.py | 68 +++--- .../openbb_core/app/static/package/stocks.py | 20 +- .../app/static/package/stocks_ca.py | 26 +-- .../app/static/package/stocks_dd.py | 6 +- .../app/static/package/stocks_disc.py | 38 ++-- .../app/static/package/stocks_dps.py | 26 +-- .../app/static/package/stocks_fa.py | 150 +++++++------- .../app/static/package/stocks_gov.py | 24 +-- .../app/static/package/stocks_ins.py | 34 +-- .../app/static/package/stocks_options.py | 32 +-- .../core/openbb_core/app/static/package/ta.py | 114 +++++----- .../openbb_core/app/static/package_builder.py | 14 +- .../tests/app/logs/test_logging_manager.py | 20 +- .../sdk/core/tests/app/model/test_obbject.py | 24 +-- .../sdk/core/tests/app/static/test_filters.py | 6 +- openbb_sdk/sdk/core/tests/app/test_router.py | 24 +-- openbb_sdk/sdk/core/tests/test_router.py | 24 +-- 50 files changed, 972 insertions(+), 972 deletions(-) diff --git a/openbb_sdk/extensions/charting/README.md b/openbb_sdk/extensions/charting/README.md index 2a03a0906d9..a4fcdc03090 100644 --- a/openbb_sdk/extensions/charting/README.md +++ b/openbb_sdk/extensions/charting/README.md @@ -43,7 +43,7 @@ from openbb import obb stock_data = obb.stocks.load(symbol="TSLA", chart=True) ``` -This results in a `Obbject` object containing a `chart` attribute, which contains Plotly JSON data. +This results in a `OBBject` object containing a `chart` attribute, which contains Plotly JSON data. In order to display the chart, you need to call the `show()` method: diff --git a/openbb_sdk/extensions/charting/openbb_charting/charting_router.py b/openbb_sdk/extensions/charting/openbb_charting/charting_router.py index cf296370ec3..e957e829297 100644 --- a/openbb_sdk/extensions/charting/openbb_charting/charting_router.py +++ b/openbb_sdk/extensions/charting/openbb_charting/charting_router.py @@ -1819,7 +1819,7 @@ def stocks_load(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: k["rma"] = dict(length=ma) return k - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["OBBject_item"], index=kwargs.get("index", "date")) standard_params = kwargs["standard_params"].__dict__ ma = standard_params.get("ma", None) prepost = standard_params.get("prepost", False) @@ -1838,7 +1838,7 @@ def stocks_load(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: def stocks_news(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["OBBject_item"], index=kwargs.get("index", "date")) standard_params = kwargs["standard_params"].__dict__ columnwidth = standard_params.get("columnwidth", None) @@ -2104,7 +2104,7 @@ def stocks_ins_filt(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: def stocks_multiples(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: - data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["OBBject_item"], index=kwargs.get("index", "date")) standard_params = kwargs["standard_params"].__dict__ columnwidth = standard_params.get("columnwidth", None) diff --git a/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py b/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py index eac56a98873..b1a80a4c6cc 100644 --- a/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py +++ b/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -19,6 +19,6 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Crypto Intraday Price.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/economy/openbb_economy/economy_router.py b/openbb_sdk/extensions/economy/openbb_economy/economy_router.py index 5be7f73bffb..3574c99313f 100644 --- a/openbb_sdk/extensions/economy/openbb_economy/economy_router.py +++ b/openbb_sdk/extensions/economy/openbb_economy/economy_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -21,9 +21,9 @@ router = Router(prefix="") @router.command def corecpi( cc: CommandContext, provider_choices: ProviderChoices -) -> Obbject[Empty]: # type: ignore +) -> OBBject[Empty]: # type: ignore """CORECPI.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="MajorIndicesConstituents") @@ -32,9 +32,9 @@ def const( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get the constituents of an index.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="CPI") @@ -43,17 +43,17 @@ def cpi( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """CPI.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command def cpi_options( cc: CommandContext, provider_choices: ProviderChoices -) -> Obbject[Empty]: +) -> OBBject[Empty]: """Get the options for v3 cpi(options=True)""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="MajorIndicesEOD") @@ -62,9 +62,9 @@ def index( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get OHLCV data for an index.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="AvailableIndices") @@ -73,9 +73,9 @@ def available_indices( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """AVAILABLE_INDICES.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="RiskPremium") @@ -84,249 +84,249 @@ def risk( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Market Risk Premium.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command def macro( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: # type: ignore +) -> OBBject[Empty]: # type: ignore """Query EconDB for macro data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def macro_countries( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """MACRO_COUNTRIES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def macro_parameters( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """MACRO_PARAMETERS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def balance( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """BALANCE.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def bigmac( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """BIGMAC.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def country_codes( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """COUNTRY_CODES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def currencies( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """CURRENCIES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def debt( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """DEBT.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def events( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """EVENTS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def fgdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FGDP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def fred( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FRED.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def fred_search( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FRED Search (was fred_notes).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def futures( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FUTURES. 2 sources""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def gdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """GDP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def glbonds( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """GLBONDS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def indices( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """INDICES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def overview( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """OVERVIEW.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def perfmap( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """PERFMAP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def performance( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """PERFORMANCE.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def revenue( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """REVENUE.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def rgdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """RGDP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def rtps( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """RTPS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def search_index( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """SEARCH_INDEX.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def spending( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """SPENDING.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def trust( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """TRUST.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def usbonds( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """USBONDS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def valuation( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """VALUATION.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py b/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py index 1d3af373a0b..7a693f006ee 100644 --- a/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py +++ b/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py @@ -1,7 +1,7 @@ # pylint: disable=W0613:unused-argument from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -21,12 +21,12 @@ def treasury( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get treasury rates.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def ycrv() -> Obbject[Empty]: # type: ignore +def ycrv() -> OBBject[Empty]: # type: ignore """Yield curve.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/forex/openbb_forex/forex_router.py b/openbb_sdk/extensions/forex/openbb_forex/forex_router.py index 352ff04654f..5e852a72b8d 100644 --- a/openbb_sdk/extensions/forex/openbb_forex/forex_router.py +++ b/openbb_sdk/extensions/forex/openbb_forex/forex_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -19,9 +19,9 @@ def pairs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Forex Available Pairs.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) # pylint: disable=unused-argument @@ -31,6 +31,6 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Forex Intraday Price.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/news/openbb_news/news_router.py b/openbb_sdk/extensions/news/openbb_news/news_router.py index 9cd0798c0cf..c69bb4104c4 100644 --- a/openbb_sdk/extensions/news/openbb_news/news_router.py +++ b/openbb_sdk/extensions/news/openbb_news/news_router.py @@ -2,7 +2,7 @@ """News Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -22,12 +22,12 @@ def globalnews( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Global News.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def sectornews() -> Obbject[Empty]: # type: ignore +def sectornews() -> OBBject[Empty]: # type: ignore """Sector news.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py index c7522cfade2..cedb0cb0981 100644 --- a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py +++ b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py @@ -4,7 +4,7 @@ import numpy as np import pandas as pd import pandas_ta as ta import statsmodels.api as sm -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router from openbb_core.app.utils import ( @@ -34,7 +34,7 @@ router = Router(prefix="") @router.command(methods=["POST"]) -def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: +def normality(data: List[Data], target: str) -> OBBject[NormalityModel]: """ Normality Statistics. @@ -53,7 +53,7 @@ def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: Returns ------- - Obbject[NormalityModel] + OBBject[NormalityModel] Normality tests summary. See qa_models.NormalityModel for details. """ @@ -74,11 +74,11 @@ def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: kolmogorov_smirnov=TestModel(statistic=ks_statistic, p_value=ks_pvalue), ) - return Obbject(results=norm_summary) + return OBBject(results=norm_summary) @router.command(methods=["POST"]) -def capm(data: List[Data], target: str) -> Obbject[CAPMModel]: +def capm(data: List[Data], target: str) -> OBBject[CAPMModel]: """Capital Asset Pricing Model.""" df = basemodel_to_df(data) @@ -106,13 +106,13 @@ def capm(data: List[Data], target: str) -> Obbject[CAPMModel]: idiosyncratic_risk=1 - model.rsquared, ) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def qqplot() -> Obbject[Empty]: +def qqplot() -> OBBject[Empty]: """QQ Plot.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -121,7 +121,7 @@ def om( target: str, threshold_start: float = 0.0, threshold_end: float = 1.5, -) -> Obbject[List[OmegaModel]]: +) -> OBBject[List[OmegaModel]]: """Omega Ratio. Parameters @@ -137,7 +137,7 @@ def om( Returns ------- - Obbject[List[OmegaModel]] + OBBject[List[OmegaModel]] Omega ratios. """ @@ -156,11 +156,11 @@ def om( for i in threshold: results.append(OmegaModel(threshold=i, omega=get_omega_ratio(series_target, i))) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Data]]: +def kurtosis(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Data]]: """Kurtosis. Parameters @@ -174,7 +174,7 @@ def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Kurtosis. """ df = basemodel_to_df(data) @@ -182,43 +182,43 @@ def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List results = ta.kurtosis(close=series_target, length=window).dropna() results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def pick() -> Obbject[Empty]: +def pick() -> OBBject[Empty]: """Pick.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def spread() -> Obbject[Empty]: +def spread() -> OBBject[Empty]: """Spread.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def rolling() -> Obbject[Empty]: +def rolling() -> OBBject[Empty]: """Rolling.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def var() -> Obbject[Empty]: +def var() -> OBBject[Empty]: """Value at Risk.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def line() -> Obbject[Empty]: +def line() -> OBBject[Empty]: """Line.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def hist() -> Obbject[Empty]: +def hist() -> OBBject[Empty]: """Histogram.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -227,7 +227,7 @@ def unitroot( target: str, fuller_reg: Literal["c", "ct", "ctt", "nc", "c"] = "c", kpss_reg: Literal["c", "ct"] = "c", -) -> Obbject[UnitRootModel]: +) -> OBBject[UnitRootModel]: """Unit Root Test. Augmented Dickey-Fuller test for unit root. @@ -246,7 +246,7 @@ def unitroot( Returns ------- - Obbject[UnitRootModel] + OBBject[UnitRootModel] Unit root tests summary. """ @@ -270,19 +270,19 @@ def unitroot( nlags=kpss[2], ), ) - return Obbject(results=unitroot_summary) + return OBBject(results=unitroot_summary) @router.command(methods=["POST"]) -def beta() -> Obbject[Empty]: +def beta() -> OBBject[Empty]: """Beta.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) def sh( data: List[Data], target: str, rfr: float = 0.0, window: PositiveInt = 252 -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Sharpe Ratio. Parameters @@ -298,7 +298,7 @@ def sh( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sharpe ratio. """ @@ -311,7 +311,7 @@ def sh( results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -321,7 +321,7 @@ def so( target_return: float = 0.0, window: PositiveInt = 252, adjusted: bool = False, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Sortino Ratio. For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf @@ -341,7 +341,7 @@ def so( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sortino ratio. """ @@ -359,35 +359,35 @@ def so( results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def cusum() -> Obbject[Empty]: +def cusum() -> OBBject[Empty]: """Cumulative Sum.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def raw() -> Obbject[Empty]: +def raw() -> OBBject[Empty]: """Raw.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def cdf() -> Obbject[Empty]: +def cdf() -> OBBject[Empty]: """Cumulative Distribution Function.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def decompose() -> Obbject[Empty]: +def decompose() -> OBBject[Empty]: """Decompose.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Data]]: +def skew(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Data]]: """Skewness. Parameters @@ -401,7 +401,7 @@ def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Dat Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Skewness. """ df = basemodel_to_df(data) @@ -409,7 +409,7 @@ def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Dat results = ta.skew(close=series_target, length=window).dropna() results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -418,7 +418,7 @@ def quantile( target: str, window: PositiveInt, quantile_pct: NonNegativeFloat = 0.5, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Quantile.""" df = basemodel_to_df(data) @@ -430,29 +430,29 @@ def quantile( results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def bw() -> Obbject[Empty]: +def bw() -> OBBject[Empty]: """Bandwidth.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def es() -> Obbject[Empty]: +def es() -> OBBject[Empty]: """Expected Shortfall.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def acf() -> Obbject[Empty]: +def acf() -> OBBject[Empty]: """Autocorrelation Function.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: +def summary(data: List[Data], target: str) -> OBBject[SummaryModel]: """Summary. Parameters @@ -464,7 +464,7 @@ def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: Returns ------- - Obbject[SummaryModel] + OBBject[SummaryModel] Summary table. """ @@ -485,4 +485,4 @@ def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: max=df_stats.loc["max"], ) - return Obbject(results=results) + return OBBject(results=results) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py index 7e69e283f07..2dcdde8fc03 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py @@ -2,7 +2,7 @@ """Comparison Analysis Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -22,66 +22,66 @@ def peers( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Company peers.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def balance() -> Obbject[Empty]: # type: ignore +def balance() -> OBBject[Empty]: # type: ignore """Company balance sheet.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def cashflow() -> Obbject[Empty]: # type: ignore +def cashflow() -> OBBject[Empty]: # type: ignore """Company cashflow.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hcorr() -> Obbject[Empty]: # type: ignore +def hcorr() -> OBBject[Empty]: # type: ignore """Company historical correlation.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hist() -> Obbject[Empty]: # type: ignore +def hist() -> OBBject[Empty]: # type: ignore """Company historical prices.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def income() -> Obbject[Empty]: # type: ignore +def income() -> OBBject[Empty]: # type: ignore """Company income statement.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def scorr() -> Obbject[Empty]: # type: ignore +def scorr() -> OBBject[Empty]: # type: ignore """Company sector correlation.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def screener() -> Obbject[Empty]: # type: ignore +def screener() -> OBBject[Empty]: # type: ignore """Company screener.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def sentiment() -> Obbject[Empty]: # type: ignore +def sentiment() -> OBBject[Empty]: # type: ignore """Company sentiment.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def similar() -> Obbject[Empty]: # type: ignore +def similar() -> OBBject[Empty]: # type: ignore """Company similar.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def volume() -> Obbject[Empty]: # type: ignore +def volume() -> OBBject[Empty]: # type: ignore """Company volume.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py index b4344d961b9..42bd9296238 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py @@ -2,7 +2,7 @@ """Due Diligence Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -21,6 +21,6 @@ def sec( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """SEC Filings.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py index e5a040040be..4fba79ad2a5 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,106 +6,106 @@ router = Router(prefix="/disc") @router.command -def active() -> Obbject[Empty]: # type: ignore +def active() -> OBBject[Empty]: # type: ignore """Most active stocks by intraday trade volumes.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def arkord() -> Obbject[Empty]: # type: ignore +def arkord() -> OBBject[Empty]: # type: ignore """Order by ARK INvestment Management LLC.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def asc() -> Obbject[Empty]: # type: ignore +def asc() -> OBBject[Empty]: # type: ignore """Small cap stocks with revenue and earnings growth more than 25%.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dividends() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def dividends() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def filings() -> Obbject[Empty]: # type: ignore +def filings() -> OBBject[Empty]: # type: ignore """The most-recent form submissions to the SEC.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def fipo() -> Obbject[Empty]: # type: ignore +def fipo() -> OBBject[Empty]: # type: ignore """Future IPOs dates.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def gainers() -> Obbject[Empty]: # type: ignore +def gainers() -> OBBject[Empty]: # type: ignore """Show latest top gainers.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def gtech() -> Obbject[Empty]: # type: ignore +def gtech() -> OBBject[Empty]: # type: ignore """Tech stocks with revenue and earnings growth more than 25%.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hotpenny() -> Obbject[Empty]: # type: ignore +def hotpenny() -> OBBject[Empty]: # type: ignore """Today's hot penny stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ipo() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def ipo() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def losers() -> Obbject[Empty]: # type: ignore +def losers() -> OBBject[Empty]: # type: ignore """Show latest top losers.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lowfloat() -> Obbject[Empty]: # type: ignore +def lowfloat() -> OBBject[Empty]: # type: ignore """Low float stocks under 10M shares float.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def pipo() -> Obbject[Empty]: # type: ignore +def pipo() -> OBBject[Empty]: # type: ignore """Past IPOs dates.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def rtat() -> Obbject[Empty]: # type: ignore +def rtat() -> OBBject[Empty]: # type: ignore """Top 10 retail traded stocks per day.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def trending() -> Obbject[Empty]: # type: ignore +def trending() -> OBBject[Empty]: # type: ignore """Trending news.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ugs() -> Obbject[Empty]: # type: ignore +def ugs() -> OBBject[Empty]: # type: ignore """Undervalued stocks with revenue and earnings growth above 25%.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ulc() -> Obbject[Empty]: # type: ignore +def ulc() -> OBBject[Empty]: # type: ignore """Potentially undervalued large cap stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def upcoming() -> Obbject[Empty]: # type: ignore +def upcoming() -> OBBject[Empty]: # type: ignore """Upcoming earnings release dates.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py index dc517ac826f..c78b74e8719 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,70 +6,70 @@ router = Router(prefix="/dps") @router.command -def psi() -> Obbject[Empty]: # type: ignore +def psi() -> OBBject[Empty]: # type: ignore """Price vs short interest volume""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ctb() -> Obbject[Empty]: # type: ignore +def ctb() -> OBBject[Empty]: # type: ignore """Cost to borrow of stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dpotc() -> Obbject[Empty]: # type: ignore +def dpotc() -> OBBject[Empty]: # type: ignore """Dark pools (ATS) vs OTC data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ftd() -> Obbject[Empty]: # type: ignore +def ftd() -> OBBject[Empty]: # type: ignore """Fails-to-deliver data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hsi() -> Obbject[Empty]: # type: ignore +def hsi() -> OBBject[Empty]: # type: ignore """Show top high short interest stocks of over 20% ratio.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def pos() -> Obbject[Empty]: # type: ignore +def pos() -> OBBject[Empty]: # type: ignore """Dark pool short position.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def prom() -> Obbject[Empty]: # type: ignore +def prom() -> OBBject[Empty]: # type: ignore """Promising tickers based on dark pool shares regression.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def psi_q() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def psi_q() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def psi_sg() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def psi_sg() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def shorted() -> Obbject[Empty]: # type: ignore +def shorted() -> OBBject[Empty]: # type: ignore """Most shorted stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def sidtc() -> Obbject[Empty]: # type: ignore +def sidtc() -> OBBject[Empty]: # type: ignore """Short interest and days to cover.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def spos() -> Obbject[Empty]: # type: ignore +def spos() -> OBBject[Empty]: # type: ignore """Net short vs position.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py index 233202d3b21..df78527740e 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py @@ -2,7 +2,7 @@ """Fundamental Analysis Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -17,9 +17,9 @@ router = Router(prefix="/fa") @router.command -def analysis() -> Obbject[Empty]: # type: ignore +def analysis() -> OBBject[Empty]: # type: ignore """Analyse SEC filings with the help of machine learning.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="BalanceSheet") @@ -28,9 +28,9 @@ def balance( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Balance Sheet.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="BalanceSheetGrowth") @@ -39,9 +39,9 @@ def balance_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Balance Sheet Statement Growth.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="DividendCalendar") @@ -50,9 +50,9 @@ def cal( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Show Dividend Calendar for a given start and end dates.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="CashFlowStatement") @@ -61,9 +61,9 @@ def cash( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Cash Flow Statement.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="CashFlowStatementGrowth") @@ -72,9 +72,9 @@ def cash_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Cash Flow Statement Growth.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="ExecutiveCompensation") @@ -83,9 +83,9 @@ def comp( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Executive Compensation.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockSplitCalendar") @@ -94,21 +94,21 @@ def comsplit( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Stock Split Calendar.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def customer() -> Obbject[Empty]: # type: ignore +def customer() -> OBBject[Empty]: # type: ignore """List of customers of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dcfc() -> Obbject[Empty]: # type: ignore +def dcfc() -> OBBject[Empty]: # type: ignore """Determine the (historical) discounted cash flow.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="HistoricalDividends") @@ -117,15 +117,15 @@ def divs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Historical Dividends.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def dupont() -> Obbject[Empty]: # type: ignore +def dupont() -> OBBject[Empty]: # type: ignore """Detailed breakdown for Return on Equity (RoE).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="EarningsCalendar") @@ -134,9 +134,9 @@ def earning( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Earnings Calendar.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="HistoricalEmployees") @@ -145,21 +145,21 @@ def emp( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Number of Employees.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def enterprise() -> Obbject[Empty]: # type: ignore +def enterprise() -> OBBject[Empty]: # type: ignore """Enterprise value.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def epsfc() -> Obbject[Empty]: # type: ignore +def epsfc() -> OBBject[Empty]: # type: ignore """Earnings Estimate by Analysts - EPS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="AnalystEstimates") @@ -168,38 +168,38 @@ def est( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Analyst Estimates.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def fama_coe() -> Obbject[Empty]: # type: ignore +def fama_coe() -> OBBject[Empty]: # type: ignore """Fama French 3 Factor Model - Coefficient of Earnings.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def fama_raw() -> Obbject[Empty]: # type: ignore +def fama_raw() -> OBBject[Empty]: # type: ignore """Fama French 3 Factor Model - Raw Data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def fraud() -> Obbject[Empty]: # type: ignore +def fraud() -> OBBject[Empty]: # type: ignore """Key fraud ratios including M-score, Z-score and McKee.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def growth() -> Obbject[Empty]: # type: ignore +def growth() -> OBBject[Empty]: # type: ignore """Growth of financial statement items and ratios.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def historical_5() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def historical_5() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="IncomeStatement") @@ -208,9 +208,9 @@ def income( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Income Statement.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="IncomeStatementGrowth") @@ -219,9 +219,9 @@ def income_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Income Statement Growth.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockInsiderTrading") @@ -230,9 +230,9 @@ def ins( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Stock Insider Trading.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="InstitutionalOwnership") @@ -241,14 +241,14 @@ def ins_own( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Institutional Ownership.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def key() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def key() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="KeyMetrics") @@ -257,9 +257,9 @@ def metrics( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Key Metrics.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="KeyExecutives") @@ -268,20 +268,20 @@ def mgmt( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Key Executives.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def mktcap() -> Obbject[Empty]: # type: ignore +def mktcap() -> OBBject[Empty]: # type: ignore """Obtain the market capitalization or enterprise value.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command # CHECK IF NEWS IS NEEDED HERE -def news() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def news() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="CompanyOverview") @@ -290,9 +290,9 @@ def overview( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Company Overview.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockOwnership") @@ -301,9 +301,9 @@ def own( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Stock Ownership.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="PriceTargetConsensus") @@ -312,9 +312,9 @@ def pt( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Price Target Consensus.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="PriceTarget") @@ -323,27 +323,27 @@ def pta( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Price Target.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def rating() -> Obbject[Empty]: # type: ignore +def rating() -> OBBject[Empty]: # type: ignore """Analyst prices and ratings over time of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ratios() -> Obbject[Empty]: # type: ignore +def ratios() -> OBBject[Empty]: # type: ignore """Extensive set of ratios over time.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def revfc() -> Obbject[Empty]: # type: ignore +def revfc() -> OBBject[Empty]: # type: ignore """Earning Estimate by Analysts - Revenue.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="RevenueGeographic") @@ -352,9 +352,9 @@ def revgeo( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Revenue Geographic.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="RevenueBusinessLine") @@ -363,31 +363,31 @@ def revseg( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Revenue Business Line.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def rot() -> Obbject[Empty]: # type: ignore +def rot() -> OBBject[Empty]: # type: ignore """Number of analyst ratings over time on a monthly basis.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def score() -> Obbject[Empty]: # type: ignore +def score() -> OBBject[Empty]: # type: ignore """Value investing scores for any time period.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def sec() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def sec() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def shares() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def shares() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="ShareStatistics") @@ -396,9 +396,9 @@ def shrs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Share Statistics.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="HistoricalStockSplits") @@ -407,15 +407,15 @@ def split( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Historical Stock Splits.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def supplier() -> Obbject[Empty]: # type: ignore +def supplier() -> OBBject[Empty]: # type: ignore """List of suppliers of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="EarningsCallTranscript") @@ -424,6 +424,6 @@ def transcript( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Earnings Call Transcript.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py index 737ea0b0051..1b76252f6ab 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py @@ -1,7 +1,7 @@ """Due Diligence Router.""" -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -9,66 +9,66 @@ router = Router(prefix="/gov") @router.command -def contracts() -> Obbject[Empty]: # type: ignore +def contracts() -> OBBject[Empty]: # type: ignore """Return government contracts.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def government_trading() -> Obbject[Empty]: # type: ignore +def government_trading() -> OBBject[Empty]: # type: ignore """Return government trading.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command # Isn't this one the same as the one above? -def gtrades() -> Obbject[Empty]: # type: ignore +def gtrades() -> OBBject[Empty]: # type: ignore """Return government trades.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def histcont() -> Obbject[Empty]: # type: ignore +def histcont() -> OBBject[Empty]: # type: ignore """Historical quarterly government contracts.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lastcontracts() -> Obbject[Empty]: # type: ignore +def lastcontracts() -> OBBject[Empty]: # type: ignore """Return last government contracts given out.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lasttrades() -> Obbject[Empty]: # type: ignore +def lasttrades() -> OBBject[Empty]: # type: ignore """Last trades.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lobbying() -> Obbject[Empty]: # type: ignore +def lobbying() -> OBBject[Empty]: # type: ignore """Corporate lobbying details.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def qtrcontracts() -> Obbject[Empty]: # type: ignore +def qtrcontracts() -> OBBject[Empty]: # type: ignore """Quarterly government contracts analysis.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def topbuys() -> Obbject[Empty]: # type: ignore +def topbuys() -> OBBject[Empty]: # type: ignore """Show most purchased stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def toplobbying() -> Obbject[Empty]: # type: ignore +def toplobbying() -> OBBject[Empty]: # type: ignore """Top corporate lobbying tickers.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def topsells() -> Obbject[Empty]: # type: ignore +def topsells() -> OBBject[Empty]: # type: ignore """Show most sold stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py index 06d3b757771..bb0bd1b2882 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py @@ -1,7 +1,7 @@ """Due Diligence Router.""" -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -9,96 +9,96 @@ router = Router(prefix="/ins") @router.command -def act() -> Obbject[Empty]: # type: ignore +def act() -> OBBject[Empty]: # type: ignore """Insider activity over time.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blcp() -> Obbject[Empty]: # type: ignore +def blcp() -> OBBject[Empty]: # type: ignore """Big latest CEO/CFO purchaces ($25k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blcs() -> Obbject[Empty]: # type: ignore +def blcs() -> OBBject[Empty]: # type: ignore """Big latest CEO/CFO sales ($100k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blip() -> Obbject[Empty]: # type: ignore +def blip() -> OBBject[Empty]: # type: ignore """Big latest insider purchaces ($25+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blis() -> Obbject[Empty]: # type: ignore +def blis() -> OBBject[Empty]: # type: ignore """Big latest insider sales ($100k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blop() -> Obbject[Empty]: # type: ignore +def blop() -> OBBject[Empty]: # type: ignore """Big latest officer purchaces ($25k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blos() -> Obbject[Empty]: # type: ignore +def blos() -> OBBject[Empty]: # type: ignore """Big latest officer sales ($100k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command # Can't use filter because it's a python keyword -def filt() -> Obbject[Empty]: # type: ignore +def filt() -> OBBject[Empty]: # type: ignore """Filter insiders based on preset.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lcb() -> Obbject[Empty]: # type: ignore +def lcb() -> OBBject[Empty]: # type: ignore """Latest cluster buys.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lins() -> Obbject[Empty]: # type: ignore +def lins() -> OBBject[Empty]: # type: ignore """Last insider trading of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lip() -> Obbject[Empty]: # type: ignore +def lip() -> OBBject[Empty]: # type: ignore """Latest insider purchaces.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lis() -> Obbject[Empty]: # type: ignore +def lis() -> OBBject[Empty]: # type: ignore """Latest insider sales.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lit() -> Obbject[Empty]: # type: ignore +def lit() -> OBBject[Empty]: # type: ignore """Latest insider trading (all filings).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lpsb() -> Obbject[Empty]: # type: ignore +def lpsb() -> OBBject[Empty]: # type: ignore """Latest penny stock buys.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def print_insider_data() -> Obbject[Empty]: # type: ignore +def print_insider_data() -> OBBject[Empty]: # type: ignore """Print insider data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def stats() -> Obbject[Empty]: # type: ignore +def stats() -> OBBject[Empty]: # type: ignore """Insider stats of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py index e2416f75c90..c8352e2d903 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,88 +6,88 @@ router = Router(prefix="/options") @router.command -def chains() -> Obbject[Empty]: # type: ignore +def chains() -> OBBject[Empty]: # type: ignore """Return options chains with greeks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dte() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def dte() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def eodchain() -> Obbject[Empty]: # type: ignore +def eodchain() -> OBBject[Empty]: # type: ignore """Gets option chain at a specific date.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def expirations() -> Obbject[Empty]: # type: ignore +def expirations() -> OBBject[Empty]: # type: ignore """Return options expirations.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def grhist() -> Obbject[Empty]: # type: ignore +def grhist() -> OBBject[Empty]: # type: ignore """Plot option greek history.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hist() -> Obbject[Empty]: # type: ignore +def hist() -> OBBject[Empty]: # type: ignore """Plot option history.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def info() -> Obbject[Empty]: # type: ignore +def info() -> OBBject[Empty]: # type: ignore """Display option information (volatility, IV rank, etc.).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def last_price() -> Obbject[Empty]: # type: ignore +def last_price() -> OBBject[Empty]: # type: ignore """Return last price of an option.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def oi() -> Obbject[Empty]: # type: ignore +def oi() -> OBBject[Empty]: # type: ignore """Plot option open interest.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def pcr() -> Obbject[Empty]: # type: ignore +def pcr() -> OBBject[Empty]: # type: ignore """Display put/call ratio for ticker.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def price() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def price() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def unu() -> Obbject[Empty]: # type: ignore +def unu() -> OBBject[Empty]: # type: ignore """Show unusual options activity.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def voi() -> Obbject[Empty]: # type: ignore +def voi() -> OBBject[Empty]: # type: ignore """Plot volume and open interest.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def vol() -> Obbject[Empty]: # type: ignore +def vol() -> OBBject[Empty]: # type: ignore """Plot volume.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def vsurf() -> Obbject[Empty]: # type: ignore +def vsurf() -> OBBject[Empty]: # type: ignore """Show 3D volatility surface.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py index f0e147c8921..479def6ae1a 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py @@ -2,7 +2,7 @@ """Stocks Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -39,9 +39,9 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Load stock data for a specific ticker.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockNews") @@ -50,9 +50,9 @@ def news( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get news for one or more stock tickers.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockMultiples") @@ -61,24 +61,24 @@ def multiples( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get valuation multiples for a stock ticker.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def tob() -> Obbject[Empty]: +def tob() -> OBBject[Empty]: """View top of book for loaded ticker (US exchanges only).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def quote() -> Obbject[Empty]: +def quote() -> OBBject[Empty]: """View the current price for a specific stock ticker.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def search() -> Obbject[Empty]: +def search() -> OBBject[Empty]: """Search a specific stock ticker for analysis.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/ta/openbb_ta/ta_router.py b/openbb_sdk/extensions/ta/openbb_ta/ta_router.py index e5076baeb6f..3e4d4c13106 100644 --- a/openbb_sdk/extensions/ta/openbb_ta/ta_router.py +++ b/openbb_sdk/extensions/ta/openbb_ta/ta_router.py @@ -1,7 +1,7 @@ from typing import List, Literal, Optional import pandas as pd -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router from openbb_core.app.utils import ( @@ -31,7 +31,7 @@ def atr( mamode: Literal["rma", "ema", "sma", "wma"] = "rma", drift: NonNegativeInt = 1, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Average True Range is used to measure volatility, especially volatility caused by gaps or limit moves. @@ -53,7 +53,7 @@ def atr( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -71,7 +71,7 @@ def atr( results = df_to_basemodel(df_target.join(df_atr, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -82,7 +82,7 @@ def fib( period: PositiveInt = 120, start_date: Optional[str] = None, end_date: Optional[str] = None, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Fibonacci Retracement Levels. @@ -97,7 +97,7 @@ def fib( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -132,7 +132,7 @@ def fib( results = df_to_basemodel(df_fib) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -140,7 +140,7 @@ def obv( data: List[Data], index: str = "date", offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The On Balance Volume (OBV) is a cumulative total of the up and down volume. When the close is higher than the previous close, the volume is added @@ -161,7 +161,7 @@ def obv( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -177,7 +177,7 @@ def obv( results = df_to_basemodel(df_target.join(df_obv, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -186,7 +186,7 @@ def fisher( index: str = "date", length: PositiveInt = 14, signal: PositiveInt = 1, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.1 The indicator @@ -207,7 +207,7 @@ def fisher( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -223,7 +223,7 @@ def fisher( results = df_to_basemodel(df_target.join(df_fisher, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -233,7 +233,7 @@ def adosc( fast: PositiveInt = 3, slow: PositiveInt = 10, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator is essentially a momentum indicator, but of the Accumulation-Distribution line @@ -256,7 +256,7 @@ def adosc( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -271,16 +271,16 @@ def adosc( results = df_to_basemodel(df_target.join(df_adosc, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def tv() -> Obbject[Empty]: +def tv() -> OBBject[Empty]: """TradingView.""" # TODO : probably out of scope for now - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -292,7 +292,7 @@ def bbands( std: NonNegativeFloat = 2, mamode: Literal["sma", "ema", "wma", "rma"] = "sma", offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Bollinger Bands consist of three lines. The middle band is a simple moving average (generally 20 periods) of the typical price (TP). The upper and lower @@ -324,7 +324,7 @@ def bbands( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -344,16 +344,16 @@ def bbands( results = df_to_basemodel(df_target.join(bbands_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def multi() -> Obbject[Empty]: +def multi() -> OBBject[Empty]: """Plot multiple indicators on the same chart.""" # TODO : probably out of scope for now - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -363,7 +363,7 @@ def zlma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The zero lag exponential moving average (ZLEMA) indicator was created by John Ehlers and Ric Way. The idea is do a @@ -388,7 +388,7 @@ def zlma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -403,7 +403,7 @@ def zlma( results = df_to_basemodel(df_target.join(zlma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -412,7 +412,7 @@ def aroon( index: str = "date", length: int = 25, scalar: int = 100, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The word aroon is Sanskrit for "dawn's early light." The Aroon indicator attempts to show when a new trend is dawning. The indicator consists @@ -438,7 +438,7 @@ def aroon( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -453,7 +453,7 @@ def aroon( results = df_to_basemodel(df_target.join(aroon_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -463,7 +463,7 @@ def sma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Moving Averages are used to smooth the data in an array to help eliminate noise and identify trends. The Simple Moving Average is literally @@ -488,7 +488,7 @@ def sma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -503,7 +503,7 @@ def sma( results = df_to_basemodel(df_target.join(sma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -514,7 +514,7 @@ def demark( show_all: bool = False, asint: bool = False, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Demark sequential indicator @@ -535,7 +535,7 @@ def demark( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -553,7 +553,7 @@ def demark( results = df_to_basemodel(df_target.join(demark_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -562,7 +562,7 @@ def vwap( index: str = "date", anchor: str = "D", offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Volume Weighted Average Price that measures the average typical price by volume. It is typically used with intraday charts to identify general direction. @@ -582,7 +582,7 @@ def vwap( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -598,17 +598,17 @@ def vwap( results = df_to_basemodel(df_target.join(df_vwap, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def recom() -> Obbject[Empty]: +def recom() -> OBBject[Empty]: """Recommendation.""" # TODO : this command does only a call to a Tradingview's endpoint # thus, it should probably be implement on a provider level - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -619,7 +619,7 @@ def macd( fast: int = 12, slow: int = 26, signal: int = 9, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Moving Average Convergence Divergence (MACD) is the difference between two Exponential Moving Averages. The Signal line is an Exponential Moving @@ -646,7 +646,7 @@ def macd( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -663,7 +663,7 @@ def macd( results = df_to_basemodel(df_target.join(macd_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -673,7 +673,7 @@ def hma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Hull Moving Average solves the age old dilemma of making a moving average more responsive to current price activity whilst maintaining curve smoothness. @@ -695,7 +695,7 @@ def hma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -710,7 +710,7 @@ def hma( results = df_to_basemodel(df_target.join(hma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -720,7 +720,7 @@ def donchian( lower_length: PositiveInt = 20, upper_length: PositiveInt = 20, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Donchian Channels are three lines generated by moving average calculations that comprise an indicator formed by upper and lower @@ -744,7 +744,7 @@ def donchian( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -764,7 +764,7 @@ def donchian( results = df_to_basemodel(df_target.join(donchian_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -776,7 +776,7 @@ def ichimoku( lagging: PositiveInt = 52, offset: PositiveInt = 26, lookahead: bool = False, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that defines support and resistance, identifies trend direction, gauges momentum and provides @@ -816,7 +816,7 @@ def ichimoku( results = df_to_basemodel(df_result, index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -825,7 +825,7 @@ def clenow( index: str = "date", target: str = "adj_close", period: PositiveInt = 90, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Clenow Volatility Adjusted Momentum. @@ -842,7 +842,7 @@ def clenow( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -868,11 +868,11 @@ def clenow( results = df_to_basemodel(df_clenow) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[Data]]: +def ad(data: List[Data], index: str = "date", offset: int = 0) -> OBBject[List[Data]]: """ The Accumulation/Distribution Line is similar to the On Balance Volume (OBV), which sums the volume times +1/-1 based on whether the close is @@ -896,7 +896,7 @@ def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[D Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -911,7 +911,7 @@ def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[D results = df_to_basemodel(df_target.join(ad_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -921,7 +921,7 @@ def adx( length: int = 50, scalar: float = 100.0, drift: int = 1, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider @@ -942,7 +942,7 @@ def adx( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -959,7 +959,7 @@ def adx( results = df_to_basemodel(df_target.join(adx_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -969,7 +969,7 @@ def wma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ A Weighted Moving Average puts more weight on recent data and less on past data. This is done by multiplying each bar’s price by a weighting factor. Because of its @@ -991,7 +991,7 @@ def wma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The WMA data. Examples @@ -1006,7 +1006,7 @@ def wma( results = df_to_basemodel(df_target.join(wma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1015,7 +1015,7 @@ def cci( index: str = "date", length: PositiveInt = 14, scalar: PositiveFloat = 0.015, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The CCI is designed to detect beginning and ending market trends. The range of 100 to -100 is the normal trading range. CCI values outside of this @@ -1036,7 +1036,7 @@ def cci( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The CCI data. """ @@ -1046,7 +1046,7 @@ def cci( results = df_to_basemodel(df_target.join(cci_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1057,7 +1057,7 @@ def rsi( length: int = 14, scalar: float = 100.0, drift: int = 1, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Relative Strength Index (RSI) calculates a ratio of the recent upward price movements to the absolute price movement. The RSI ranges @@ -1082,7 +1082,7 @@ def rsi( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The RSI data. Examples @@ -1099,17 +1099,17 @@ def rsi( results = df_to_basemodel(df_target.join(rsi_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def summary() -> Obbject[Empty]: +def summary() -> OBBject[Empty]: """Summary.""" # TODO : this command does only a call to a finbrain's endpoint # thus, it should probably be implement on a provider level - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -1119,7 +1119,7 @@ def stoch( fast_k_period: NonNegativeInt = 14, slow_d_period: NonNegativeInt = 3, slow_k_period: NonNegativeInt = 3, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Stochastic Oscillator measures where the close is in relation to the recent trading range. The values range from zero to 100. %D values over 75 @@ -1143,7 +1143,7 @@ def stoch( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Stochastic Oscillator data. Examples @@ -1165,16 +1165,16 @@ def stoch( results = df_to_basemodel(df_target.join(stoch_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def rsp() -> Obbject[Empty]: +def rsp() -> OBBject[Empty]: """Relative Strength Performance.""" # TODO : https://github.com/OpenBB-finance/OpenBBTerminal/issues/5167 - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -1185,7 +1185,7 @@ def kc( scalar: PositiveFloat = 20, mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", offset: NonNegativeInt = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Keltner Channels are volatility-based bands that are placed on either side of an asset's price and can aid in determining @@ -1210,7 +1210,7 @@ def kc( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Keltner Channels data. Examples @@ -1233,13 +1233,13 @@ def kc( results = df_to_basemodel(df_target.join(kc_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) def cg( data: List[Data], index: str = "date", length: PositiveInt = 14 -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Center of Gravity indicator, in short, is used to anticipate future price movements and to trade on price reversals as soon as they happen. However, just like other oscillators, @@ -1258,7 +1258,7 @@ def cg( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The COG data. Examples @@ -1274,7 +1274,7 @@ def cg( results = df_to_basemodel(df_target.join(cg_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1292,7 +1292,7 @@ def cones( "Yang-Zhang", ] = "STD", is_crypto: bool = False, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Calculate the realized volatility quantiles over rolling windows of time. The model for calculating volatility is selectable. @@ -1334,7 +1334,7 @@ def cones( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The cones data. Examples @@ -1354,7 +1354,7 @@ def cones( results = df_to_basemodel(df_cones, index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1364,7 +1364,7 @@ def ema( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Exponential Moving Average is a staple of technical analysis and is used in countless technical indicators. In a Simple Moving @@ -1390,7 +1390,7 @@ def ema( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -1406,4 +1406,4 @@ def ema( results = df_to_basemodel(df_target.join(ema_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) diff --git a/openbb_sdk/sdk/core/README.md b/openbb_sdk/sdk/core/README.md index 2c0f30fa296..3107d5b96d5 100644 --- a/openbb_sdk/sdk/core/README.md +++ b/openbb_sdk/sdk/core/README.md @@ -70,7 +70,7 @@ router = Router(prefix="/router_name") @router.command def some_command( some_param: some_param_type, -) -> Obbject[Item]: +) -> OBBject[Item]: pass ``` @@ -85,9 +85,9 @@ def load( provider_choices: ProviderChoices, # available providers standard_params: StandardParams, # symbol, start_date, etc. extra_params: ExtraParams, # provider specific parameters -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Load stock data for a specific ticker.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) ``` ### Entrypoint @@ -165,7 +165,7 @@ output = obb.stocks.load( ### 4.1.1. Command output -Each command will always return a `Obbject`. There you will find: +Each command will always return a `OBBject`. There you will find: - `results`: the data returned by the command `None` - `provider`: the provider name (only available provider names allowed) used to get the data or `None` @@ -341,7 +341,7 @@ timestamp: ... # Execution starting timestamp. alias_list: ... # List of alias to find a JournalEntry easier than with it's `tag`. >>> response.output -Obbject +OBBject id: ... # UUID Tag results: ... # Serializable results. diff --git a/openbb_sdk/sdk/core/openbb_core/api/router/commands.py b/openbb_sdk/sdk/core/openbb_core/api/router/commands.py index b89713a2877..237ef121e05 100644 --- a/openbb_sdk/sdk/core/openbb_core/api/router/commands.py +++ b/openbb_sdk/sdk/core/openbb_core/api/router/commands.py @@ -8,7 +8,7 @@ from fastapi.routing import APIRoute from openbb_core.api.dependency.user import get_user from openbb_core.app.command_runner import CommandRunner from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import RouterLoader from openbb_core.app.service.system_service import SystemService @@ -76,22 +76,22 @@ def build_new_signature(func): ) -def validate_output(c_out: Obbject) -> Obbject: +def validate_output(c_out: OBBject) -> OBBject: """ - Validate Obbject object. - Checks against the Obbject schema and removes fields that contain the + Validate OBBject object. + Checks against the OBBject schema and removes fields that contain the `exclude_from_api` extra `pydantic.Field` kwarg. - Note that the modification to the `Obbject` object is done in-place. + Note that the modification to the `OBBject` object is done in-place. Parameters ---------- - c_out : Obbject - Obbject object to validate. + c_out : OBBject + OBBject object to validate. Returns ------- - Obbject - Validated Obbject object. + OBBject + Validated OBBject object. """ def is_model(type_): diff --git a/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py b/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py index 93eee1342c8..92bda5da0fd 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py +++ b/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py @@ -195,7 +195,7 @@ class ChartingManager(metaclass=SingletonMeta): user_settings: UserSettings, system_settings: SystemSettings, route: str, - obbject_item: Generic[T], + OBBject_item: Generic[T], **kwargs, ): """ @@ -215,7 +215,7 @@ class ChartingManager(metaclass=SingletonMeta): User settings. route : str Route name, example: `/stocks/load`. - obbject_item + OBBject_item Command output item. Returns ------- @@ -235,7 +235,7 @@ class ChartingManager(metaclass=SingletonMeta): self.handle_backend(self._charting_extension, self._charting_settings) - kwargs["obbject_item"] = obbject_item + kwargs["OBBject_item"] = OBBject_item kwargs["charting_settings"] = self._charting_settings charting_function = self.get_chart_function(self._charting_extension, route) diff --git a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py index 8f9ae9b595f..bcc8862f281 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py +++ b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py @@ -18,7 +18,7 @@ from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.journal import Journal from openbb_core.app.model.journal_entry import JournalEntry from openbb_core.app.model.journal_query import JournalQuery -from openbb_core.app.model.obbject import Error, Obbject +from openbb_core.app.modelobbject import Error, OBBject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import CommandMap @@ -232,7 +232,7 @@ class StaticCommandRunner: charting_manager = ChartingManager() @staticmethod - def __run_in_isolation(func, args=None, kwargs=None) -> Obbject: + def __run_in_isolation(func, args=None, kwargs=None) -> OBBject: args = args or () kwargs = kwargs or {} @@ -244,7 +244,7 @@ class StaticCommandRunner: @classmethod def __command( cls, system_settings: SystemSettings, func: Callable, kwargs: Dict[str, Any] - ) -> Obbject: + ) -> OBBject: """Run a command and return the output""" try: context_manager: Union[warnings.catch_warnings, ContextManager[None]] = ( @@ -255,30 +255,30 @@ class StaticCommandRunner: with context_manager as warning_list: if system_settings.run_in_isolation: - obbject = cls.__run_in_isolation(func=func, kwargs=kwargs) + OBBject = cls.__run_in_isolation(func=func, kwargs=kwargs) else: - obbject = func(**kwargs) + OBBject = func(**kwargs) - obbject.provider = getattr( + OBBject.provider = getattr( kwargs.get("provider_choices", None), "provider", None ) if warning_list: - obbject.warnings = list(map(cast_warning, warning_list)) + OBBject.warnings = list(map(cast_warning, warning_list)) except Exception as e: - obbject = Obbject( + OBBject = OBBject( error=Error(message=str(e), error_kind=e.__class__.__name__) ) if system_settings.debug_mode: raise - return obbject + return OBBject @classmethod def __chart( cls, - obbject: Obbject, + OBBject: OBBject, user_settings: UserSettings, system_settings: SystemSettings, route: str, @@ -286,15 +286,15 @@ class StaticCommandRunner: ) -> None: """Create a chart from the command output""" try: - obbject.chart = cls.charting_manager.chart( + OBBject.chart = cls.charting_manager.chart( user_settings=user_settings, system_settings=system_settings, route=route, - obbject_item=obbject.results, + OBBject_item=OBBject.results, **kwargs, ) except Exception as e: - obbject.chart = Chart(error=Error(message=str(e))) + OBBject.chart = Chart(error=Error(message=str(e))) if system_settings.debug_mode: raise @@ -306,7 +306,7 @@ class StaticCommandRunner: execution_context: ExecutionContext, func: Callable, kwargs: Dict[str, Any], - ) -> Obbject: + ) -> OBBject: """Execute a function and return the output""" user_settings = execution_context.user_settings system_settings = execution_context.system_settings @@ -332,15 +332,15 @@ class StaticCommandRunner: # commands.py and the function signature does not expect "chart" kwargs.pop("chart", None) - obbject = cls.__command( + OBBject = cls.__command( system_settings=system_settings, func=func, kwargs=kwargs, ) - if chart and obbject.results: + if chart and OBBject.results: cls.__chart( - obbject=obbject, + OBBject=OBBject, user_settings=user_settings, system_settings=system_settings, route=route, @@ -350,13 +350,13 @@ class StaticCommandRunner: cls.logging_manager.log( user_settings=user_settings, system_settings=system_settings, - obbject=obbject, + OBBject=OBBject, route=route, func=func, kwargs=kwargs, ) - return obbject + return OBBject @classmethod def __update_managers_settings( @@ -388,7 +388,7 @@ class StaticCommandRunner: func = command_map.get_command(route=route) if func: - obbject = cls.__execute_func( + OBBject = cls.__execute_func( route=route, args=args, # type: ignore execution_context=execution_context, @@ -404,7 +404,7 @@ class StaticCommandRunner: journal_id=journal.id, arguments=kwargs, duration=duration, - output=obbject, + output=OBBject, route=route, timestamp=timestamp, ) diff --git a/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py b/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py index a0b3fa620d1..213de66df0a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py +++ b/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py @@ -10,7 +10,7 @@ from openbb_core.app.logs.formatters.formatter_with_exceptions import ( from openbb_core.app.logs.handlers_manager import HandlersManager from openbb_core.app.logs.models.logging_settings import LoggingSettings from openbb_core.app.model.abstract.singleton import SingletonMeta -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings @@ -42,7 +42,7 @@ class LoggingManager(metaclass=SingletonMeta): __init__(system_settings, user_settings) Logging Manager Constructor. - log(user_settings, system_settings, obbject, route, func, kwargs) + log(user_settings, system_settings, OBBject, route, func, kwargs) Log command output and relevant information. logging_settings @@ -182,7 +182,7 @@ class LoggingManager(metaclass=SingletonMeta): self, user_settings: UserSettings, system_settings: SystemSettings, - obbject: Obbject, + OBBject: OBBject, route: str, func: Callable, kwargs: Dict[str, Any], @@ -196,8 +196,8 @@ class LoggingManager(metaclass=SingletonMeta): User Settings object. system_settings : SystemSettings System Settings object. - obbject : Obbject - Obbject object containing command output and error information. + OBBject : OBBject + OBBject object containing command output and error information. route : str Route for the command. func : Callable @@ -225,14 +225,14 @@ class LoggingManager(metaclass=SingletonMeta): # Truncate kwargs if too long kwargs = {k: str(v)[:100] for k, v in kwargs.items()} - log_level = logger.error if obbject.error else logger.info + log_level = logger.error if OBBject.error else logger.info log_level( - "ERROR: %s" if obbject.error else "CMD: %s", + "ERROR: %s" if OBBject.error else "CMD: %s", json.dumps( { "route": route, "input": kwargs, - "error": obbject.error, + "error": OBBject.error, }, default=pydantic_encoder, ), diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py b/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py index f21b1a85ef9..0d5b1e8efa6 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py @@ -4,7 +4,7 @@ from typing import Any, Dict, List from pydantic import Field from openbb_core.app.model.abstract.tagged import Tagged -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject class JournalEntry(Tagged): @@ -16,7 +16,7 @@ class JournalEntry(Tagged): duration: int = Field( description="Execution duration in nano second of the command." ) - output: Obbject = Field(description="Output of the command.") + output: OBBject = Field(description="Output of the command.") route: str = Field(description="Route of the command.") timestamp: datetime = Field(description="Execution starting timestamp.") alias_list: List[str] = Field( diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py b/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py index 38bac063c07..e15aeedf40e 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py @@ -8,7 +8,7 @@ class JournalQuery(BaseModel): ) ignore_error_output: bool = Field( default=True, - description="Whether or not the JournalEntry with an Obbject.Error should be ignored.", + description="Whether or not the JournalEntry with an OBBject.Error should be ignored.", ) class Config: diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py index 2708e3367a6..6883b23ab83 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py @@ -20,7 +20,7 @@ class OpenBBError(Exception): pass -class Obbject(GenericModel, Generic[T], Tagged): +class OBBject(GenericModel, Generic[T], Tagged): results: Optional[T] = Field( default=None, description="Serializable results.", diff --git a/openbb_sdk/sdk/core/openbb_core/app/router.py b/openbb_sdk/sdk/core/openbb_core/app/router.py index 36c8c640d6b..021028890c4 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/router.py +++ b/openbb_sdk/sdk/core/openbb_core/app/router.py @@ -24,7 +24,7 @@ from typing_extensions import Annotated, _AnnotatedAlias from openbb_core.app.model.abstract.warning import OpenBBWarning from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -125,7 +125,7 @@ class CommandValidator: sig = signature(func) return_type = sig.return_annotation - if issubclass(return_type, Obbject): + if issubclass(return_type, OBBject): results_type = get_type_hints(return_type)["results"] if isinstance(results_type, type(None)): valid_return_type = False @@ -144,7 +144,7 @@ class CommandValidator: "Invalid return type in signature:" f" {func.__name__}(...) -> {sig.return_annotation}:\n" "Allowed return type:" - f" {func.__name__}(...) -> Obbject[T] :\n" + f" {func.__name__}(...) -> OBBject[T] :\n" "If you need T = None, use an empty model instead.\n" ) @@ -166,7 +166,7 @@ class Router: self._api_router = APIRouter(prefix=prefix) @overload - def command(self, func: Optional[Callable[P, Obbject]]) -> Callable[P, Obbject]: + def command(self, func: Optional[Callable[P, OBBject]]) -> Callable[P, OBBject]: pass @overload @@ -175,7 +175,7 @@ class Router: def command( self, - func: Optional[Callable[P, Obbject]] = None, + func: Optional[Callable[P, OBBject]] = None, **kwargs, ) -> Optional[Callable]: if func is None: @@ -215,8 +215,8 @@ class Router: class SignatureInspector: @classmethod def complete_signature( - cls, func: Callable[P, Obbject], model: str - ) -> Optional[Callable[P, Obbject]]: + cls, func: Callable[P, OBBject], model: str + ) -> Optional[Callable[P, OBBject]]: """Complete function signature.""" provider_interface = get_provider_interface() if model: @@ -257,7 +257,7 @@ class SignatureInspector: ) ReturnModel = provider_interface.return_schema[model] - func.__annotations__["return"] = Obbject[ReturnModel] # type: ignore + func.__annotations__["return"] = OBBject[ReturnModel] # type: ignore elif ( "provider_choices" in func.__annotations__ @@ -272,7 +272,7 @@ class SignatureInspector: @staticmethod def validate_signature( - func: Callable[P, Obbject], expected: Dict[str, type] + func: Callable[P, OBBject], expected: Dict[str, type] ) -> None: """Validate function signature before binding to model.""" for k, v in expected.items(): @@ -288,8 +288,8 @@ class SignatureInspector: @staticmethod def inject_dependency( - func: Callable[P, Obbject], arg: str, callable_: Any - ) -> Callable[P, Obbject]: + func: Callable[P, OBBject], arg: str, callable_: Any + ) -> Callable[P, OBBject]: """Annotate function with dependency injection.""" func.__annotations__[arg] = Annotated[callable_, Depends()] # type: ignore return func diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/filters.py b/openbb_sdk/sdk/core/openbb_core/app/static/filters.py index b1e96b7d627..53207d2e1c3 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/filters.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/filters.py @@ -7,7 +7,7 @@ import pandas as pd from pydantic import ValidationError from openbb_core.app.model.abstract.warning import OpenBBWarning -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.utils import df_to_basemodel @@ -48,19 +48,19 @@ def filter_inputs(**kwargs) -> dict: return kwargs -def filter_output(obbject: Obbject) -> Obbject: +def filter_output(OBBject: OBBject) -> OBBject: """Filter command output.""" - if obbject.warnings: - for w in obbject.warnings: + if OBBject.warnings: + for w in OBBject.warnings: category = getattr(builtins, w.category, OpenBBWarning) print(f"{category.__name__}: {w.message}") - error = obbject.error + error = OBBject.error if error: raise OpenBBError(error.message) - chart = obbject.chart + chart = OBBject.chart if chart and chart.error: raise OpenBBError(chart.error.message) - return obbject + return OBBject diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py index 3ca625a6272..b1144b3b4af 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py @@ -7,7 +7,7 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -35,7 +35,7 @@ class CLASS_crypto(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Crypto Intraday Price. @@ -55,7 +55,7 @@ class CLASS_crypto(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py index 2bdb9b0678a..670ad633c83 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -21,7 +21,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """CORECPI.""" inputs = filter_inputs( provider_choices={ @@ -50,7 +50,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get the constituents of an index. @@ -66,7 +66,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -216,7 +216,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["fred"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """CPI. @@ -242,7 +242,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -306,7 +306,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Get the options for v3 cpi(options=True)""" inputs = filter_inputs( provider_choices={ @@ -344,7 +344,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Get OHLCV data for an index. @@ -364,7 +364,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -467,7 +467,7 @@ class CLASS_economy(Container): @validate_arguments def available_indices( self, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """AVAILABLE_INDICES. @@ -482,7 +482,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -539,7 +539,7 @@ class CLASS_economy(Container): @validate_arguments def risk( self, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Market Risk Premium. @@ -554,7 +554,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -611,7 +611,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Query EconDB for macro data.""" inputs = filter_inputs( provider_choices={ @@ -633,7 +633,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """MACRO_COUNTRIES.""" inputs = filter_inputs( provider_choices={ @@ -655,7 +655,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """MACRO_PARAMETERS.""" inputs = filter_inputs( provider_choices={ @@ -677,7 +677,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """BALANCE.""" inputs = filter_inputs( provider_choices={ @@ -699,7 +699,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """BIGMAC.""" inputs = filter_inputs( provider_choices={ @@ -721,7 +721,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """COUNTRY_CODES.""" inputs = filter_inputs( provider_choices={ @@ -743,7 +743,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """CURRENCIES.""" inputs = filter_inputs( provider_choices={ @@ -765,7 +765,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """DEBT.""" inputs = filter_inputs( provider_choices={ @@ -787,7 +787,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """EVENTS.""" inputs = filter_inputs( provider_choices={ @@ -809,7 +809,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FGDP.""" inputs = filter_inputs( provider_choices={ @@ -831,7 +831,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FRED.""" inputs = filter_inputs( provider_choices={ @@ -853,7 +853,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FRED Search (was fred_notes).""" inputs = filter_inputs( provider_choices={ @@ -875,7 +875,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FUTURES. 2 sources""" inputs = filter_inputs( provider_choices={ @@ -897,7 +897,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """GDP.""" inputs = filter_inputs( provider_choices={ @@ -919,7 +919,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """GLBONDS.""" inputs = filter_inputs( provider_choices={ @@ -941,7 +941,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """INDICES.""" inputs = filter_inputs( provider_choices={ @@ -963,7 +963,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """OVERVIEW.""" inputs = filter_inputs( provider_choices={ @@ -985,7 +985,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """PERFMAP.""" inputs = filter_inputs( provider_choices={ @@ -1007,7 +1007,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """PERFORMANCE.""" inputs = filter_inputs( provider_choices={ @@ -1029,7 +1029,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """REVENUE.""" inputs = filter_inputs( provider_choices={ @@ -1051,7 +1051,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """RGDP.""" inputs = filter_inputs( provider_choices={ @@ -1073,7 +1073,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """RTPS.""" inputs = filter_inputs( provider_choices={ @@ -1095,7 +1095,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """SEARCH_INDEX.""" inputs = filter_inputs( provider_choices={ @@ -1117,7 +1117,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """SPENDING.""" inputs = filter_inputs( provider_choices={ @@ -1139,7 +1139,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """TRUST.""" inputs = filter_inputs( provider_choices={ @@ -1161,7 +1161,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """USBONDS.""" inputs = filter_inputs( provider_choices={ @@ -1183,7 +1183,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """VALUATION.""" inputs = filter_inputs( provider_choices={ diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py index be4e1656a0a..bee573ccc90 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -34,7 +34,7 @@ class CLASS_fixedincome(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get treasury rates. @@ -52,7 +52,7 @@ class CLASS_fixedincome(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -128,7 +128,7 @@ class CLASS_fixedincome(Container): @validate_arguments def ycrv( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Yield curve.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py index 2aaf8e6f81b..42baa811d85 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py @@ -7,7 +7,7 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -20,7 +20,7 @@ class CLASS_forex(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Forex Available Pairs. @@ -35,7 +35,7 @@ class CLASS_forex(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -149,7 +149,7 @@ class CLASS_forex(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Forex Intraday Price. @@ -169,7 +169,7 @@ class CLASS_forex(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py index 2e01558c016..b4ac3561e67 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -26,7 +26,7 @@ class CLASS_news(Container): chart: bool = False, provider: Optional[Literal["benzinga", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Global News. @@ -42,7 +42,7 @@ class CLASS_news(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -143,7 +143,7 @@ class CLASS_news(Container): @validate_arguments def sectornews( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Sector news.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py index cfc6c340ff0..8ce022fcb07 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py @@ -11,7 +11,7 @@ import pydantic.types from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -24,7 +24,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.NormalityModel]: + ) -> OBBject[openbb_qa.qa_models.NormalityModel]: """ Normality Statistics. @@ -43,7 +43,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[NormalityModel] + OBBject[NormalityModel] Normality tests summary. See qa_models.NormalityModel for details. """ inputs = filter_inputs( @@ -66,7 +66,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.CAPMModel]: + ) -> OBBject[openbb_qa.qa_models.CAPMModel]: """Capital Asset Pricing Model.""" inputs = filter_inputs( data=data, @@ -85,7 +85,7 @@ class CLASS_qa(Container): @validate_arguments def qqplot( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """QQ Plot.""" inputs = filter_inputs( chart=chart, @@ -107,7 +107,7 @@ class CLASS_qa(Container): threshold_start: float = 0.0, threshold_end: float = 1.5, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Omega Ratio. Parameters @@ -123,7 +123,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[OmegaModel]] + OBBject[List[OmegaModel]] Omega ratios. """ inputs = filter_inputs( @@ -149,7 +149,7 @@ class CLASS_qa(Container): target: str, window: pydantic.types.PositiveInt, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Kurtosis. Parameters @@ -163,7 +163,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Kurtosis. """ inputs = filter_inputs( @@ -184,7 +184,7 @@ class CLASS_qa(Container): @validate_arguments def pick( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Pick.""" inputs = filter_inputs( chart=chart, @@ -201,7 +201,7 @@ class CLASS_qa(Container): @validate_arguments def spread( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Spread.""" inputs = filter_inputs( chart=chart, @@ -218,7 +218,7 @@ class CLASS_qa(Container): @validate_arguments def rolling( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Rolling.""" inputs = filter_inputs( chart=chart, @@ -235,7 +235,7 @@ class CLASS_qa(Container): @validate_arguments def var( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Value at Risk.""" inputs = filter_inputs( chart=chart, @@ -252,7 +252,7 @@ class CLASS_qa(Container): @validate_arguments def line( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Line.""" inputs = filter_inputs( chart=chart, @@ -269,7 +269,7 @@ class CLASS_qa(Container): @validate_arguments def hist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Histogram.""" inputs = filter_inputs( chart=chart, @@ -291,7 +291,7 @@ class CLASS_qa(Container): fuller_reg: Literal["c", "ct", "ctt", "nc"] = "c", kpss_reg: Literal["c", "ct"] = "c", chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.UnitRootModel]: + ) -> OBBject[openbb_qa.qa_models.UnitRootModel]: """Unit Root Test. Augmented Dickey-Fuller test for unit root. @@ -310,7 +310,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[UnitRootModel] + OBBject[UnitRootModel] Unit root tests summary. """ inputs = filter_inputs( @@ -332,7 +332,7 @@ class CLASS_qa(Container): @validate_arguments def beta( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Beta.""" inputs = filter_inputs( chart=chart, @@ -354,7 +354,7 @@ class CLASS_qa(Container): rfr: float = 0.0, window: pydantic.types.PositiveInt = 252, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Sharpe Ratio. Parameters @@ -370,7 +370,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sharpe ratio. """ inputs = filter_inputs( @@ -398,7 +398,7 @@ class CLASS_qa(Container): window: pydantic.types.PositiveInt = 252, adjusted: bool = False, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Sortino Ratio. For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf @@ -418,7 +418,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sortino ratio. """ inputs = filter_inputs( @@ -441,7 +441,7 @@ class CLASS_qa(Container): @validate_arguments def cusum( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Cumulative Sum.""" inputs = filter_inputs( chart=chart, @@ -458,7 +458,7 @@ class CLASS_qa(Container): @validate_arguments def raw( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Raw.""" inputs = filter_inputs( chart=chart, @@ -475,7 +475,7 @@ class CLASS_qa(Container): @validate_arguments def cdf( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Cumulative Distribution Function.""" inputs = filter_inputs( chart=chart, @@ -492,7 +492,7 @@ class CLASS_qa(Container): @validate_arguments def decompose( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Decompose.""" inputs = filter_inputs( chart=chart, @@ -513,7 +513,7 @@ class CLASS_qa(Container): target: str, window: pydantic.types.PositiveInt, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Skewness. Parameters @@ -527,7 +527,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Skewness. """ inputs = filter_inputs( @@ -553,7 +553,7 @@ class CLASS_qa(Container): window: pydantic.types.PositiveInt, quantile_pct: pydantic.types.NonNegativeFloat = 0.5, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Quantile.""" inputs = filter_inputs( data=data, @@ -574,7 +574,7 @@ class CLASS_qa(Container): @validate_arguments def bw( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Bandwidth.""" inputs = filter_inputs( chart=chart, @@ -591,7 +591,7 @@ class CLASS_qa(Container): @validate_arguments def es( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Expected Shortfall.""" inputs = filter_inputs( chart=chart, @@ -608,7 +608,7 @@ class CLASS_qa(Container): @validate_arguments def acf( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Autocorrelation Function.""" inputs = filter_inputs( chart=chart, @@ -628,7 +628,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.SummaryModel]: + ) -> OBBject[openbb_qa.qa_models.SummaryModel]: """Summary. Parameters @@ -640,7 +640,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[SummaryModel] + OBBject[SummaryModel] Summary table. """ inputs = filter_inputs( diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py index 89727ced9a5..6afacc5a59e 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py @@ -10,7 +10,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -102,7 +102,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Load stock data for a specific ticker. @@ -122,7 +122,7 @@ class CLASS_stocks(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -239,7 +239,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["benzinga", "polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get news for one or more stock tickers. @@ -259,7 +259,7 @@ class CLASS_stocks(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -417,7 +417,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get valuation multiples for a stock ticker. @@ -435,7 +435,7 @@ class CLASS_stocks(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -599,7 +599,7 @@ class CLASS_stocks(Container): @validate_arguments def tob( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """View top of book for loaded ticker (US exchanges only).""" inputs = filter_inputs( chart=chart, @@ -616,7 +616,7 @@ class CLASS_stocks(Container): @validate_arguments def quote( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """View the current price for a specific stock ticker.""" inputs = filter_inputs( chart=chart, @@ -633,7 +633,7 @@ class CLASS_stocks(Container): @validate_arguments def search( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Search a specific stock ticker for analysis.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py index 1477bf63a92..85d3b27b40c 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py @@ -8,7 +8,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -24,7 +24,7 @@ class CLASS_stocks_ca(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Company peers. @@ -40,7 +40,7 @@ class CLASS_stocks_ca(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -93,7 +93,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def balance( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company balance sheet.""" inputs = filter_inputs( chart=chart, @@ -110,7 +110,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def cashflow( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company cashflow.""" inputs = filter_inputs( chart=chart, @@ -127,7 +127,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def hcorr( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company historical correlation.""" inputs = filter_inputs( chart=chart, @@ -144,7 +144,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def hist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company historical prices.""" inputs = filter_inputs( chart=chart, @@ -161,7 +161,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def income( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company income statement.""" inputs = filter_inputs( chart=chart, @@ -178,7 +178,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def scorr( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company sector correlation.""" inputs = filter_inputs( chart=chart, @@ -195,7 +195,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def screener( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company screener.""" inputs = filter_inputs( chart=chart, @@ -212,7 +212,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def sentiment( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company sentiment.""" inputs = filter_inputs( chart=chart, @@ -229,7 +229,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def similar( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company similar.""" inputs = filter_inputs( chart=chart, @@ -246,7 +246,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def volume( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company volume.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py index c06f397b0bc..1f64684c9e0 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py @@ -6,7 +6,7 @@ from typing import Annotated, Literal, Optional from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -135,7 +135,7 @@ class CLASS_stocks_dd(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """SEC Filings. @@ -157,7 +157,7 @@ class CLASS_stocks_dd(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py index 4fdd4f85057..fcec4a9b072 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def active( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Most active stocks by intraday trade volumes.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def arkord( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Order by ARK INvestment Management LLC.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def asc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Small cap stocks with revenue and earnings growth more than 25%.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def dividends( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -81,7 +81,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def filings( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """The most-recent form submissions to the SEC.""" inputs = filter_inputs( chart=chart, @@ -98,7 +98,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def fipo( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Future IPOs dates.""" inputs = filter_inputs( chart=chart, @@ -115,7 +115,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def gainers( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show latest top gainers.""" inputs = filter_inputs( chart=chart, @@ -132,7 +132,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def gtech( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Tech stocks with revenue and earnings growth more than 25%.""" inputs = filter_inputs( chart=chart, @@ -149,7 +149,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def hotpenny( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Today's hot penny stocks.""" inputs = filter_inputs( chart=chart, @@ -166,7 +166,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ipo( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -182,7 +182,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def losers( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show latest top losers.""" inputs = filter_inputs( chart=chart, @@ -199,7 +199,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def lowfloat( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Low float stocks under 10M shares float.""" inputs = filter_inputs( chart=chart, @@ -216,7 +216,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def pipo( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Past IPOs dates.""" inputs = filter_inputs( chart=chart, @@ -233,7 +233,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def rtat( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Top 10 retail traded stocks per day.""" inputs = filter_inputs( chart=chart, @@ -250,7 +250,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def trending( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Trending news.""" inputs = filter_inputs( chart=chart, @@ -267,7 +267,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ugs( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Undervalued stocks with revenue and earnings growth above 25%.""" inputs = filter_inputs( chart=chart, @@ -284,7 +284,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ulc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Potentially undervalued large cap stocks.""" inputs = filter_inputs( chart=chart, @@ -301,7 +301,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def upcoming( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Upcoming earnings release dates.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py index ebb575ffbb2..66c01e4f7f0 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Price vs short interest volume""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def ctb( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Cost to borrow of stocks.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def dpotc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Dark pools (ATS) vs OTC data.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def ftd( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Fails-to-deliver data.""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def hsi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show top high short interest stocks of over 20% ratio.""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def pos( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Dark pool short position.""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def prom( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Promising tickers based on dark pool shares regression.""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi_q( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -149,7 +149,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi_sg( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -165,7 +165,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def shorted( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Most shorted stocks.""" inputs = filter_inputs( chart=chart, @@ -182,7 +182,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def sidtc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Short interest and days to cover.""" inputs = filter_inputs( chart=chart, @@ -199,7 +199,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def spos( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Net short vs position.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py index a4edbd658fd..e0847bb66c7 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py @@ -10,7 +10,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -20,7 +20,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def analysis( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Analyse SEC filings with the help of machine learning.""" inputs = filter_inputs( chart=chart, @@ -53,7 +53,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Balance Sheet. @@ -73,7 +73,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -287,7 +287,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Balance Sheet Statement Growth. @@ -305,7 +305,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -454,7 +454,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Show Dividend Calendar for a given start and end dates. @@ -472,7 +472,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -554,7 +554,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Cash Flow Statement. @@ -574,7 +574,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -750,7 +750,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Cash Flow Statement Growth. @@ -768,7 +768,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -890,7 +890,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Executive Compensation. @@ -906,7 +906,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -996,7 +996,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Stock Split Calendar. @@ -1014,7 +1014,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1074,7 +1074,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def customer( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """List of customers of the company.""" inputs = filter_inputs( chart=chart, @@ -1091,7 +1091,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def dcfc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Determine the (historical) discounted cash flow.""" inputs = filter_inputs( chart=chart, @@ -1114,7 +1114,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Historical Dividends. @@ -1130,7 +1130,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1193,7 +1193,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def dupont( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Detailed breakdown for Return on Equity (RoE).""" inputs = filter_inputs( chart=chart, @@ -1220,7 +1220,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Earnings Calendar. @@ -1238,7 +1238,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1312,7 +1312,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Number of Employees. @@ -1328,7 +1328,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1395,7 +1395,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def enterprise( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Enterprise value.""" inputs = filter_inputs( chart=chart, @@ -1412,7 +1412,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def epsfc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Earnings Estimate by Analysts - EPS.""" inputs = filter_inputs( chart=chart, @@ -1445,7 +1445,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Analyst Estimates. @@ -1465,7 +1465,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1560,7 +1560,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fama_coe( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Fama French 3 Factor Model - Coefficient of Earnings.""" inputs = filter_inputs( chart=chart, @@ -1577,7 +1577,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fama_raw( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Fama French 3 Factor Model - Raw Data.""" inputs = filter_inputs( chart=chart, @@ -1594,7 +1594,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fraud( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Key fraud ratios including M-score, Z-score and McKee.""" inputs = filter_inputs( chart=chart, @@ -1611,7 +1611,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def growth( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Growth of financial statement items and ratios.""" inputs = filter_inputs( chart=chart, @@ -1628,7 +1628,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def historical_5( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -1660,7 +1660,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Income Statement. @@ -1680,7 +1680,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1877,7 +1877,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Income Statement Growth. @@ -1897,7 +1897,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2051,7 +2051,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Stock Insider Trading. @@ -2075,7 +2075,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2171,7 +2171,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Institutional Ownership. @@ -2191,7 +2191,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2314,7 +2314,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def key( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -2346,7 +2346,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Key Metrics. @@ -2366,7 +2366,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2543,7 +2543,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Key Executives. @@ -2559,7 +2559,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2622,7 +2622,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def mktcap( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Obtain the market capitalization or enterprise value.""" inputs = filter_inputs( chart=chart, @@ -2639,7 +2639,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def news( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -2661,7 +2661,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Company Overview. @@ -2677,7 +2677,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2812,7 +2812,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Stock Ownership. @@ -2832,7 +2832,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2967,7 +2967,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Price Target Consensus. @@ -2983,7 +2983,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3048,7 +3048,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Price Target. @@ -3064,7 +3064,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3135,7 +3135,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def rating( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Analyst prices and ratings over time of the company.""" inputs = filter_inputs( chart=chart, @@ -3152,7 +3152,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def ratios( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Extensive set of ratios over time.""" inputs = filter_inputs( chart=chart, @@ -3169,7 +3169,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def revfc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Earning Estimate by Analysts - Revenue.""" inputs = filter_inputs( chart=chart, @@ -3202,7 +3202,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Revenue Geographic. @@ -3222,7 +3222,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3301,7 +3301,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Revenue Business Line. @@ -3321,7 +3321,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3376,7 +3376,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def rot( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Number of analyst ratings over time on a monthly basis.""" inputs = filter_inputs( chart=chart, @@ -3393,7 +3393,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def score( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Value investing scores for any time period.""" inputs = filter_inputs( chart=chart, @@ -3410,7 +3410,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def sec( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -3426,7 +3426,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def shares( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -3448,7 +3448,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Share Statistics. @@ -3464,7 +3464,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3531,7 +3531,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Historical Stock Splits. @@ -3547,7 +3547,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3604,7 +3604,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def supplier( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """List of suppliers of the company.""" inputs = filter_inputs( chart=chart, @@ -3639,7 +3639,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Earnings Call Transcript. @@ -3659,7 +3659,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py index c43689bd272..6f0cfbb878e 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def contracts( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return government contracts.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def government_trading( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return government trading.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def gtrades( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return government trades.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def histcont( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Historical quarterly government contracts.""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lastcontracts( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return last government contracts given out.""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lasttrades( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Last trades.""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lobbying( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Corporate lobbying details.""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def qtrcontracts( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Quarterly government contracts analysis.""" inputs = filter_inputs( chart=chart, @@ -150,7 +150,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def topbuys( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show most purchased stocks.""" inputs = filter_inputs( chart=chart, @@ -167,7 +167,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def toplobbying( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Top corporate lobbying tickers.""" inputs = filter_inputs( chart=chart, @@ -184,7 +184,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def topsells( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show most sold stocks.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py index 07ad1e47983..7a181fc20a1 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def act( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Insider activity over time.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blcp( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest CEO/CFO purchaces ($25k+).""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blcs( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest CEO/CFO sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blip( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest insider purchaces ($25+).""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blis( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest insider sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blop( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest officer purchaces ($25k+).""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blos( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest officer sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def filt( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Filter insiders based on preset.""" inputs = filter_inputs( chart=chart, @@ -150,7 +150,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lcb( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest cluster buys.""" inputs = filter_inputs( chart=chart, @@ -167,7 +167,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lins( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Last insider trading of the company.""" inputs = filter_inputs( chart=chart, @@ -184,7 +184,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lip( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest insider purchaces.""" inputs = filter_inputs( chart=chart, @@ -201,7 +201,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lis( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest insider sales.""" inputs = filter_inputs( chart=chart, @@ -218,7 +218,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lit( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest insider trading (all filings).""" inputs = filter_inputs( chart=chart, @@ -235,7 +235,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lpsb( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest penny stock buys.""" inputs = filter_inputs( chart=chart, @@ -252,7 +252,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def print_insider_data( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Print insider data.""" inputs = filter_inputs( chart=chart, @@ -269,7 +269,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def stats( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Insider stats of the company.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py index bc3cbb6c59d..d45fb220c85 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_options(Container): @validate_arguments def chains( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return options chains with greeks.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_options(Container): @validate_arguments def dte( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -47,7 +47,7 @@ class CLASS_stocks_options(Container): @validate_arguments def eodchain( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Gets option chain at a specific date.""" inputs = filter_inputs( chart=chart, @@ -64,7 +64,7 @@ class CLASS_stocks_options(Container): @validate_arguments def expirations( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return options expirations.""" inputs = filter_inputs( chart=chart, @@ -81,7 +81,7 @@ class CLASS_stocks_options(Container): @validate_arguments def grhist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot option greek history.""" inputs = filter_inputs( chart=chart, @@ -98,7 +98,7 @@ class CLASS_stocks_options(Container): @validate_arguments def hist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot option history.""" inputs = filter_inputs( chart=chart, @@ -115,7 +115,7 @@ class CLASS_stocks_options(Container): @validate_arguments def info( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Display option information (volatility, IV rank, etc.).""" inputs = filter_inputs( chart=chart, @@ -132,7 +132,7 @@ class CLASS_stocks_options(Container): @validate_arguments def last_price( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return last price of an option.""" inputs = filter_inputs( chart=chart, @@ -149,7 +149,7 @@ class CLASS_stocks_options(Container): @validate_arguments def oi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot option open interest.""" inputs = filter_inputs( chart=chart, @@ -166,7 +166,7 @@ class CLASS_stocks_options(Container): @validate_arguments def pcr( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Display put/call ratio for ticker.""" inputs = filter_inputs( chart=chart, @@ -183,7 +183,7 @@ class CLASS_stocks_options(Container): @validate_arguments def price( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -199,7 +199,7 @@ class CLASS_stocks_options(Container): @validate_arguments def unu( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show unusual options activity.""" inputs = filter_inputs( chart=chart, @@ -216,7 +216,7 @@ class CLASS_stocks_options(Container): @validate_arguments def voi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot volume and open interest.""" inputs = filter_inputs( chart=chart, @@ -233,7 +233,7 @@ class CLASS_stocks_options(Container): @validate_arguments def vol( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot volume.""" inputs = filter_inputs( chart=chart, @@ -250,7 +250,7 @@ class CLASS_stocks_options(Container): @validate_arguments def vsurf( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show 3D volatility surface.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py index efdde43592a..87e274b9bf6 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py @@ -10,7 +10,7 @@ import pydantic.types from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -27,7 +27,7 @@ class CLASS_ta(Container): drift: pydantic.types.NonNegativeInt = 1, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Average True Range is used to measure volatility, especially volatility caused by gaps or limit moves. @@ -49,7 +49,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -86,7 +86,7 @@ class CLASS_ta(Container): start_date: Optional[str] = None, end_date: Optional[str] = None, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Fibonacci Retracement Levels. @@ -101,7 +101,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -135,7 +135,7 @@ class CLASS_ta(Container): index: str = "date", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The On Balance Volume (OBV) is a cumulative total of the up and down volume. When the close is higher than the previous close, the volume is added @@ -158,7 +158,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -190,7 +190,7 @@ class CLASS_ta(Container): length: pydantic.types.PositiveInt = 14, signal: pydantic.types.PositiveInt = 1, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.1 The indicator @@ -211,7 +211,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -245,7 +245,7 @@ class CLASS_ta(Container): slow: pydantic.types.PositiveInt = 10, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator is essentially a momentum indicator, but of the Accumulation-Distribution line @@ -268,7 +268,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -296,7 +296,7 @@ class CLASS_ta(Container): @validate_arguments def tv( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """TradingView.""" inputs = filter_inputs( chart=chart, @@ -321,7 +321,7 @@ class CLASS_ta(Container): mamode: Literal["sma", "ema", "wma", "rma"] = "sma", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Bollinger Bands consist of three lines. The middle band is a simple moving average (generally 20 periods) of the typical price (TP). The upper and lower @@ -355,7 +355,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -388,7 +388,7 @@ class CLASS_ta(Container): @validate_arguments def multi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot multiple indicators on the same chart.""" inputs = filter_inputs( chart=chart, @@ -411,7 +411,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The zero lag exponential moving average (ZLEMA) indicator was created by John Ehlers and Ric Way. The idea is do a @@ -436,7 +436,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -470,7 +470,7 @@ class CLASS_ta(Container): length: int = 25, scalar: int = 100, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The word aroon is Sanskrit for "dawn's early light." The Aroon indicator attempts to show when a new trend is dawning. The indicator consists @@ -498,7 +498,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -532,7 +532,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Moving Averages are used to smooth the data in an array to help eliminate noise and identify trends. The Simple Moving Average is literally @@ -557,7 +557,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -593,7 +593,7 @@ class CLASS_ta(Container): asint: bool = False, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Demark sequential indicator @@ -614,7 +614,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -649,7 +649,7 @@ class CLASS_ta(Container): anchor: str = "D", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Volume Weighted Average Price that measures the average typical price by volume. It is typically used with intraday charts to identify general direction. @@ -669,7 +669,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -697,7 +697,7 @@ class CLASS_ta(Container): @validate_arguments def recom( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Recommendation.""" inputs = filter_inputs( chart=chart, @@ -721,7 +721,7 @@ class CLASS_ta(Container): slow: int = 26, signal: int = 9, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Moving Average Convergence Divergence (MACD) is the difference between two Exponential Moving Averages. The Signal line is an Exponential Moving @@ -750,7 +750,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -786,7 +786,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Hull Moving Average solves the age old dilemma of making a moving average more responsive to current price activity whilst maintaining curve smoothness. @@ -808,7 +808,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -843,7 +843,7 @@ class CLASS_ta(Container): upper_length: pydantic.types.PositiveInt = 20, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Donchian Channels are three lines generated by moving average calculations that comprise an indicator formed by upper and lower @@ -867,7 +867,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -904,7 +904,7 @@ class CLASS_ta(Container): offset: pydantic.types.PositiveInt = 26, lookahead: bool = False, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that defines support and resistance, identifies trend direction, gauges momentum and provides @@ -955,7 +955,7 @@ class CLASS_ta(Container): target: str = "adj_close", period: pydantic.types.PositiveInt = 90, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Clenow Volatility Adjusted Momentum. @@ -972,7 +972,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -1004,7 +1004,7 @@ class CLASS_ta(Container): index: str = "date", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Accumulation/Distribution Line is similar to the On Balance Volume (OBV), which sums the volume times +1/-1 based on whether the close is @@ -1030,7 +1030,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -1062,7 +1062,7 @@ class CLASS_ta(Container): scalar: float = 100.0, drift: int = 1, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider @@ -1083,7 +1083,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -1118,7 +1118,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ A Weighted Moving Average puts more weight on recent data and less on past data. This is done by multiplying each bar’s price by a weighting factor. Because of its @@ -1140,7 +1140,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The WMA data. Examples @@ -1174,7 +1174,7 @@ class CLASS_ta(Container): length: pydantic.types.PositiveInt = 14, scalar: pydantic.types.PositiveFloat = 0.015, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The CCI is designed to detect beginning and ending market trends. The range of 100 to -100 is the normal trading range. CCI values outside of this @@ -1195,7 +1195,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The CCI data. """ inputs = filter_inputs( @@ -1224,7 +1224,7 @@ class CLASS_ta(Container): scalar: float = 100.0, drift: int = 1, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Relative Strength Index (RSI) calculates a ratio of the recent upward price movements to the absolute price movement. The RSI ranges @@ -1249,7 +1249,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The RSI data. Examples @@ -1279,7 +1279,7 @@ class CLASS_ta(Container): @validate_arguments def summary( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Summary.""" inputs = filter_inputs( chart=chart, @@ -1302,7 +1302,7 @@ class CLASS_ta(Container): slow_d_period: pydantic.types.NonNegativeInt = 3, slow_k_period: pydantic.types.NonNegativeInt = 3, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Stochastic Oscillator measures where the close is in relation to the recent trading range. The values range from zero to 100. %D values over 75 @@ -1326,7 +1326,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Stochastic Oscillator data. Examples @@ -1355,7 +1355,7 @@ class CLASS_ta(Container): @validate_arguments def rsp( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Relative Strength Performance.""" inputs = filter_inputs( chart=chart, @@ -1379,7 +1379,7 @@ class CLASS_ta(Container): mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", offset: pydantic.types.NonNegativeInt = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Keltner Channels are volatility-based bands that are placed on either side of an asset's price and can aid in determining @@ -1404,7 +1404,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Keltner Channels data. Examples @@ -1438,7 +1438,7 @@ class CLASS_ta(Container): index: str = "date", length: pydantic.types.PositiveInt = 14, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Center of Gravity indicator, in short, is used to anticipate future price movements and to trade on price reversals as soon as they happen. However, just like other oscillators, @@ -1457,7 +1457,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The COG data. Examples @@ -1498,7 +1498,7 @@ class CLASS_ta(Container): ] = "STD", is_crypto: bool = False, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Calculate the realized volatility quantiles over rolling windows of time. The model for calculating volatility is selectable. @@ -1540,7 +1540,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The cones data. Examples @@ -1576,7 +1576,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Exponential Moving Average is a staple of technical analysis and is used in countless technical indicators. In a Simple Moving @@ -1602,7 +1602,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py index 053fcbb8d6a..e9d1aec3bbe 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py @@ -179,7 +179,7 @@ class ImportDefinition: """Build the import definition.""" hint_type_list = cls.get_path_hint_type_list(path=path) code = "\nfrom openbb_core.app.static.container import Container" - code += "\nfrom openbb_core.app.model.obbject import Obbject" + code += "\nfrom openbb_core.app.modelobbject import OBBject" code += ( "\nfrom openbb_core.app.model.custom_parameter import OpenBBCustomParameter" ) @@ -244,10 +244,10 @@ class DocstringGenerator: @staticmethod def get_object_description() -> str: """Get the command output description.""" - obbject_description = ( + OBBject_description = ( "\nReturns\n" "-------\n" - "Obbject\n" + "OBBject\n" " results: List[Data]\n" " Serializable results.\n" " provider: Optional[PROVIDERS]\n" @@ -260,7 +260,7 @@ class DocstringGenerator: " Chart object.\n" ) - return obbject_description + return OBBject_description @staticmethod def get_available_providers(query_mapping: dict) -> str: @@ -582,18 +582,18 @@ class MethodDefinition: else: item_type = get_args(get_type_hints(return_type)["results"])[0] if item_type.__module__ == "builtins": - func_returns = f"Obbject[{item_type.__name__}]" + func_returns = f"OBBject[{item_type.__name__}]" # elif get_origin(item_type) == list: # inner_type = get_args(item_type)[0] # select = f"[{inner_type.__module__}.{inner_type.__name__}]" - # func_returns = f"Obbject[{item_type.__module__}.{item_type.__name__}[{select}]]" + # func_returns = f"OBBject[{item_type.__module__}.{item_type.__name__}[{select}]]" else: inner_type_name = ( item_type.__name__ if hasattr(item_type, "__name__") else item_type._name ) - func_returns = f"Obbject[{item_type.__module__}.{inner_type_name}]" + func_returns = f"OBBject[{item_type.__module__}.{inner_type_name}]" return func_returns diff --git a/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py b/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py index 35c6d2c6019..ac82a6eb9f5 100644 --- a/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py +++ b/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py @@ -13,7 +13,7 @@ class MockLoggingSettings: self.user_settings = user_settings -class MockObbject(BaseModel): +class MockOBBject(BaseModel): output: Optional[str] error: Optional[str] @@ -103,12 +103,12 @@ def test_log_startup(logging_manager): @pytest.mark.parametrize( - "user_settings, system_settings, obbject, route, func, kwargs", + "user_settings, system_settings, OBBject, route, func, kwargs", [ ( "mock_settings", "mock_system", - MockObbject(output="mock_output"), + MockOBBject(output="mock_output"), "mock_route", "mock_func", {}, @@ -116,7 +116,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockObbject(error="mock_error"), + MockOBBject(error="mock_error"), "mock_route", "mock_func", {}, @@ -124,7 +124,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockObbject(error="mock_error"), + MockOBBject(error="mock_error"), "login", "mock_func", {}, @@ -132,7 +132,7 @@ def test_log_startup(logging_manager): ], ) def test_log( - logging_manager, user_settings, system_settings, obbject, route, func, kwargs + logging_manager, user_settings, system_settings, OBBject, route, func, kwargs ): with patch( "openbb_core.app.logs.logging_manager.LoggingSettings", @@ -145,7 +145,7 @@ def test_log( logging_manager.log( user_settings=user_settings, system_settings=system_settings, - obbject=obbject, + OBBject=OBBject, route=route, func=func, kwargs=kwargs, @@ -162,7 +162,7 @@ def test_log( logging_manager.log( user_settings=user_settings, system_settings=system_settings, - obbject=obbject, + OBBject=OBBject, route=route, func=mock_callable, kwargs=kwargs, @@ -171,10 +171,10 @@ def test_log( expected_log_data = { "route": route, "input": kwargs, - "error": obbject.error, + "error": OBBject.error, } - if obbject.error: + if OBBject.error: mock_error.assert_called_once_with( "ERROR: %s", json.dumps(expected_log_data), diff --git a/openbb_sdk/sdk/core/tests/app/model/test_obbject.py b/openbb_sdk/sdk/core/tests/app/model/test_obbject.py index 3cb1252d0e5..3bb0c20464b 100644 --- a/openbb_sdk/sdk/core/tests/app/model/test_obbject.py +++ b/openbb_sdk/sdk/core/tests/app/model/test_obbject.py @@ -2,16 +2,16 @@ from unittest.mock import MagicMock, patch import pandas as pd import pytest -from openbb_core.app.model.command_output import Chart, Obbject, OpenBBError +from openbb_core.app.model.command_output import Chart, OBBject, OpenBBError def test_command_output(): - co = Obbject() - assert isinstance(co, Obbject) + co = OBBject() + assert isinstance(co, OBBject) def test_fields(): - fields = Obbject.__fields__.keys() + fields = OBBject.__fields__.keys() assert "results" in fields assert "provider" in fields @@ -21,7 +21,7 @@ def test_fields(): def test_to_dataframe_no_results(): - co = Obbject() + co = OBBject() with pytest.raises(Exception): co.to_dataframe() @@ -50,7 +50,7 @@ def test_to_dataframe_no_results(): ) def test_to_dataframe(results, expected_df): # Arrange - co = Obbject(results=results) + co = OBBject(results=results) # Act and Assert if isinstance(expected_df, pd.DataFrame): @@ -87,7 +87,7 @@ def test_to_dataframe(results, expected_df): ) def test_to_dict(results, expected): # Arrange - co = Obbject(results=results) + co = OBBject(results=results) # Act result = co.to_dict() @@ -101,7 +101,7 @@ def test_to_dict(results, expected): @patch("openbb_core.app.model.command_output.Chart") def test_to_plotly_json_with_existing_chart(mock_chart, mock_charting_manager): # Arrange - mock_instance = Obbject() + mock_instance = OBBject() mock_instance.chart = Chart(content={"existing_chart_data": "some_data"}) # Act @@ -115,7 +115,7 @@ def test_to_plotly_json_with_existing_chart(mock_chart, mock_charting_manager): mock_chart.assert_not_called() -@patch("openbb_core.app.model.command_output.Obbject.to_dataframe") +@patch("openbb_core.app.model.command_outputobbject.to_dataframe") @patch("openbb_core.app.model.command_output.ChartingManager") @patch("openbb_core.app.model.command_output.Chart") def test_to_plotly_json_with_new_chart( @@ -133,7 +133,7 @@ def test_to_plotly_json_with_new_chart( return pd.DataFrame(data) # Arrange - mock_instance = Obbject() + mock_instance = OBBject() mock_charting_manager_instance = mock_charting_manager.return_value mock_charting_manager_instance.to_plotly_json.return_value = { "new_chart_data": "some_data" @@ -161,7 +161,7 @@ def test_to_plotly_json_with_new_chart( def test_show_chart_exists(): - mock_instance = Obbject() + mock_instance = OBBject() # Arrange mock_instance.chart = MagicMock(spec=Chart) @@ -173,7 +173,7 @@ def test_show_chart_exists(): def test_show_chart_not_found(): - mock_instance = Obbject() + mock_instance = OBBject() # Arrange mock_instance.chart = None diff --git a/openbb_sdk/sdk/core/tests/app/static/test_filters.py b/openbb_sdk/sdk/core/tests/app/static/test_filters.py index c1bcb6e6dbc..607afafc48a 100644 --- a/openbb_sdk/sdk/core/tests/app/static/test_filters.py +++ b/openbb_sdk/sdk/core/tests/app/static/test_filters.py @@ -1,7 +1,7 @@ """Test the filters.py file.""" import pytest -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output from pandas import DataFrame @@ -39,6 +39,6 @@ def test_filter_inputs_df(): def test_filter_output(): """Test filter_output.""" - obbject = filter_output(Obbject()) + OBBject = filter_output(OBBject()) - assert obbject is not None + assert OBBject is not None diff --git a/openbb_sdk/sdk/core/tests/app/test_router.py b/openbb_sdk/sdk/core/tests/app/test_router.py index a501a26553b..0e260e74466 100644 --- a/openbb_sdk/sdk/core/tests/app/test_router.py +++ b/openbb_sdk/sdk/core/tests/app/test_router.py @@ -5,7 +5,7 @@ import pytest from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -105,8 +105,8 @@ def test_check_return_error(command_validator): def test_check_return(command_validator): """Test check_return.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check_return(valid_function) is None @@ -114,8 +114,8 @@ def test_check_return(command_validator): def test_check(command_validator): """Test check.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check(valid_function) is None @@ -135,8 +135,8 @@ def test_command(router): """Test command.""" @router.command - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert valid_function @@ -182,7 +182,7 @@ def test_complete_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass model = "StockEOD" @@ -193,8 +193,8 @@ def test_complete_signature(signature_inspector): def test_complete_signature_error(signature_inspector): """Test complete_signature.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) with pytest.raises(AttributeError): signature_inspector.complete_signature(valid_function, "invalid_model") @@ -208,7 +208,7 @@ def test_validate_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass expected_signature = { @@ -232,7 +232,7 @@ def test_inject_dependency(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass assert signature_inspector.inject_dependency(sample_function, "cc", CommandContext) diff --git a/openbb_sdk/sdk/core/tests/test_router.py b/openbb_sdk/sdk/core/tests/test_router.py index a501a26553b..0e260e74466 100644 --- a/openbb_sdk/sdk/core/tests/test_router.py +++ b/openbb_sdk/sdk/core/tests/test_router.py @@ -5,7 +5,7 @@ import pytest from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.modelobbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -105,8 +105,8 @@ def test_check_return_error(command_validator): def test_check_return(command_validator): """Test check_return.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check_return(valid_function) is None @@ -114,8 +114,8 @@ def test_check_return(command_validator): def test_check(command_validator): """Test check.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check(valid_function) is None @@ -135,8 +135,8 @@ def test_command(router): """Test command.""" @router.command - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert valid_function @@ -182,7 +182,7 @@ def test_complete_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass model = "StockEOD" @@ -193,8 +193,8 @@ def test_complete_signature(signature_inspector): def test_complete_signature_error(signature_inspector): """Test complete_signature.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) with pytest.raises(AttributeError): signature_inspector.complete_signature(valid_function, "invalid_model") @@ -208,7 +208,7 @@ def test_validate_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass expected_signature = { @@ -232,7 +232,7 @@ def test_inject_dependency(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass assert signature_inspector.inject_dependency(sample_function, "cc", CommandContext) From 8b563c262798e25aa97d3884cd4b1d93c3b3d119 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 19:58:34 +0530 Subject: [PATCH 08/14] Revert "bye obbject tests @hjoaquim" This reverts commit 5a01c7eb7f4b25fc5462b670945355425560ac07. --- openbb_sdk/extensions/charting/README.md | 2 +- .../openbb_charting/charting_router.py | 6 +- .../crypto/openbb_crypto/crypto_router.py | 6 +- .../economy/openbb_economy/economy_router.py | 138 ++++++------- .../openbb_fixedincome/fixedincome_router.py | 10 +- .../forex/openbb_forex/forex_router.py | 10 +- .../news/openbb_news/news_router.py | 10 +- .../extensions/qa/openbb_qa/qa_router.py | 118 +++++------ .../stocks/openbb_stocks/ca/ca_router.py | 46 ++--- .../stocks/openbb_stocks/dd/dd_router.py | 6 +- .../stocks/openbb_stocks/disc/disc_router.py | 74 +++---- .../stocks/openbb_stocks/dps/dps_router.py | 50 ++--- .../stocks/openbb_stocks/fa/fa_router.py | 194 +++++++++--------- .../stocks/openbb_stocks/gov/gov_router.py | 46 ++--- .../stocks/openbb_stocks/ins/ins_router.py | 66 +++--- .../openbb_stocks/options/options_router.py | 62 +++--- .../stocks/openbb_stocks/stocks_router.py | 26 +-- .../extensions/ta/openbb_ta/ta_router.py | 176 ++++++++-------- openbb_sdk/sdk/core/README.md | 10 +- .../core/openbb_core/api/router/commands.py | 18 +- .../core/openbb_core/app/charting_manager.py | 6 +- .../core/openbb_core/app/command_runner.py | 42 ++-- .../openbb_core/app/logs/logging_manager.py | 16 +- .../openbb_core/app/model/journal_entry.py | 4 +- .../openbb_core/app/model/journal_query.py | 2 +- .../sdk/core/openbb_core/app/model/obbject.py | 2 +- openbb_sdk/sdk/core/openbb_core/app/router.py | 22 +- .../core/openbb_core/app/static/filters.py | 14 +- .../openbb_core/app/static/package/crypto.py | 6 +- .../openbb_core/app/static/package/economy.py | 80 ++++---- .../app/static/package/fixedincome.py | 8 +- .../openbb_core/app/static/package/forex.py | 10 +- .../openbb_core/app/static/package/news.py | 8 +- .../core/openbb_core/app/static/package/qa.py | 68 +++--- .../openbb_core/app/static/package/stocks.py | 20 +- .../app/static/package/stocks_ca.py | 26 +-- .../app/static/package/stocks_dd.py | 6 +- .../app/static/package/stocks_disc.py | 38 ++-- .../app/static/package/stocks_dps.py | 26 +-- .../app/static/package/stocks_fa.py | 150 +++++++------- .../app/static/package/stocks_gov.py | 24 +-- .../app/static/package/stocks_ins.py | 34 +-- .../app/static/package/stocks_options.py | 32 +-- .../core/openbb_core/app/static/package/ta.py | 114 +++++----- .../openbb_core/app/static/package_builder.py | 14 +- .../tests/app/logs/test_logging_manager.py | 20 +- .../sdk/core/tests/app/model/test_obbject.py | 24 +-- .../sdk/core/tests/app/static/test_filters.py | 6 +- openbb_sdk/sdk/core/tests/app/test_router.py | 24 +-- openbb_sdk/sdk/core/tests/test_router.py | 24 +-- 50 files changed, 972 insertions(+), 972 deletions(-) diff --git a/openbb_sdk/extensions/charting/README.md b/openbb_sdk/extensions/charting/README.md index a4fcdc03090..2a03a0906d9 100644 --- a/openbb_sdk/extensions/charting/README.md +++ b/openbb_sdk/extensions/charting/README.md @@ -43,7 +43,7 @@ from openbb import obb stock_data = obb.stocks.load(symbol="TSLA", chart=True) ``` -This results in a `OBBject` object containing a `chart` attribute, which contains Plotly JSON data. +This results in a `Obbject` object containing a `chart` attribute, which contains Plotly JSON data. In order to display the chart, you need to call the `show()` method: diff --git a/openbb_sdk/extensions/charting/openbb_charting/charting_router.py b/openbb_sdk/extensions/charting/openbb_charting/charting_router.py index e957e829297..cf296370ec3 100644 --- a/openbb_sdk/extensions/charting/openbb_charting/charting_router.py +++ b/openbb_sdk/extensions/charting/openbb_charting/charting_router.py @@ -1819,7 +1819,7 @@ def stocks_load(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: k["rma"] = dict(length=ma) return k - data = basemodel_to_df(kwargs["OBBject_item"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) standard_params = kwargs["standard_params"].__dict__ ma = standard_params.get("ma", None) prepost = standard_params.get("prepost", False) @@ -1838,7 +1838,7 @@ def stocks_load(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: def stocks_news(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: - data = basemodel_to_df(kwargs["OBBject_item"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) standard_params = kwargs["standard_params"].__dict__ columnwidth = standard_params.get("columnwidth", None) @@ -2104,7 +2104,7 @@ def stocks_ins_filt(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: def stocks_multiples(**kwargs) -> Tuple[OpenBBFigure, Dict[str, Any]]: - data = basemodel_to_df(kwargs["OBBject_item"], index=kwargs.get("index", "date")) + data = basemodel_to_df(kwargs["obbject_item"], index=kwargs.get("index", "date")) standard_params = kwargs["standard_params"].__dict__ columnwidth = standard_params.get("columnwidth", None) diff --git a/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py b/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py index b1a80a4c6cc..eac56a98873 100644 --- a/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py +++ b/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -19,6 +19,6 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Crypto Intraday Price.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/economy/openbb_economy/economy_router.py b/openbb_sdk/extensions/economy/openbb_economy/economy_router.py index 3574c99313f..5be7f73bffb 100644 --- a/openbb_sdk/extensions/economy/openbb_economy/economy_router.py +++ b/openbb_sdk/extensions/economy/openbb_economy/economy_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -21,9 +21,9 @@ router = Router(prefix="") @router.command def corecpi( cc: CommandContext, provider_choices: ProviderChoices -) -> OBBject[Empty]: # type: ignore +) -> Obbject[Empty]: # type: ignore """CORECPI.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="MajorIndicesConstituents") @@ -32,9 +32,9 @@ def const( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Get the constituents of an index.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="CPI") @@ -43,17 +43,17 @@ def cpi( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """CPI.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command def cpi_options( cc: CommandContext, provider_choices: ProviderChoices -) -> OBBject[Empty]: +) -> Obbject[Empty]: """Get the options for v3 cpi(options=True)""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="MajorIndicesEOD") @@ -62,9 +62,9 @@ def index( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Get OHLCV data for an index.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="AvailableIndices") @@ -73,9 +73,9 @@ def available_indices( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """AVAILABLE_INDICES.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="RiskPremium") @@ -84,249 +84,249 @@ def risk( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Market Risk Premium.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command def macro( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: # type: ignore +) -> Obbject[Empty]: # type: ignore """Query EconDB for macro data.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def macro_countries( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """MACRO_COUNTRIES.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def macro_parameters( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """MACRO_PARAMETERS.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def balance( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """BALANCE.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def bigmac( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """BIGMAC.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def country_codes( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """COUNTRY_CODES.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def currencies( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """CURRENCIES.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def debt( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """DEBT.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def events( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """EVENTS.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def fgdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """FGDP.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def fred( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """FRED.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def fred_search( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """FRED Search (was fred_notes).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def futures( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """FUTURES. 2 sources""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def gdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """GDP.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def glbonds( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """GLBONDS.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def indices( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """INDICES.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def overview( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """OVERVIEW.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def perfmap( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """PERFMAP.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def performance( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """PERFORMANCE.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def revenue( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """REVENUE.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def rgdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """RGDP.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def rtps( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """RTPS.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def search_index( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """SEARCH_INDEX.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def spending( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """SPENDING.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def trust( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """TRUST.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def usbonds( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """USBONDS.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command def valuation( cc: CommandContext, provider_choices: ProviderChoices, -) -> OBBject[Empty]: +) -> Obbject[Empty]: """VALUATION.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py b/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py index 7a693f006ee..1d3af373a0b 100644 --- a/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py +++ b/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py @@ -1,7 +1,7 @@ # pylint: disable=W0613:unused-argument from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -21,12 +21,12 @@ def treasury( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Get treasury rates.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def ycrv() -> OBBject[Empty]: # type: ignore +def ycrv() -> Obbject[Empty]: # type: ignore """Yield curve.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/forex/openbb_forex/forex_router.py b/openbb_sdk/extensions/forex/openbb_forex/forex_router.py index 5e852a72b8d..352ff04654f 100644 --- a/openbb_sdk/extensions/forex/openbb_forex/forex_router.py +++ b/openbb_sdk/extensions/forex/openbb_forex/forex_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -19,9 +19,9 @@ def pairs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Forex Available Pairs.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) # pylint: disable=unused-argument @@ -31,6 +31,6 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Forex Intraday Price.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/news/openbb_news/news_router.py b/openbb_sdk/extensions/news/openbb_news/news_router.py index c69bb4104c4..9cd0798c0cf 100644 --- a/openbb_sdk/extensions/news/openbb_news/news_router.py +++ b/openbb_sdk/extensions/news/openbb_news/news_router.py @@ -2,7 +2,7 @@ """News Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -22,12 +22,12 @@ def globalnews( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Global News.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def sectornews() -> OBBject[Empty]: # type: ignore +def sectornews() -> Obbject[Empty]: # type: ignore """Sector news.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py index cedb0cb0981..c7522cfade2 100644 --- a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py +++ b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py @@ -4,7 +4,7 @@ import numpy as np import pandas as pd import pandas_ta as ta import statsmodels.api as sm -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router from openbb_core.app.utils import ( @@ -34,7 +34,7 @@ router = Router(prefix="") @router.command(methods=["POST"]) -def normality(data: List[Data], target: str) -> OBBject[NormalityModel]: +def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: """ Normality Statistics. @@ -53,7 +53,7 @@ def normality(data: List[Data], target: str) -> OBBject[NormalityModel]: Returns ------- - OBBject[NormalityModel] + Obbject[NormalityModel] Normality tests summary. See qa_models.NormalityModel for details. """ @@ -74,11 +74,11 @@ def normality(data: List[Data], target: str) -> OBBject[NormalityModel]: kolmogorov_smirnov=TestModel(statistic=ks_statistic, p_value=ks_pvalue), ) - return OBBject(results=norm_summary) + return Obbject(results=norm_summary) @router.command(methods=["POST"]) -def capm(data: List[Data], target: str) -> OBBject[CAPMModel]: +def capm(data: List[Data], target: str) -> Obbject[CAPMModel]: """Capital Asset Pricing Model.""" df = basemodel_to_df(data) @@ -106,13 +106,13 @@ def capm(data: List[Data], target: str) -> OBBject[CAPMModel]: idiosyncratic_risk=1 - model.rsquared, ) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def qqplot() -> OBBject[Empty]: +def qqplot() -> Obbject[Empty]: """QQ Plot.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -121,7 +121,7 @@ def om( target: str, threshold_start: float = 0.0, threshold_end: float = 1.5, -) -> OBBject[List[OmegaModel]]: +) -> Obbject[List[OmegaModel]]: """Omega Ratio. Parameters @@ -137,7 +137,7 @@ def om( Returns ------- - OBBject[List[OmegaModel]] + Obbject[List[OmegaModel]] Omega ratios. """ @@ -156,11 +156,11 @@ def om( for i in threshold: results.append(OmegaModel(threshold=i, omega=get_omega_ratio(series_target, i))) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def kurtosis(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Data]]: +def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Data]]: """Kurtosis. Parameters @@ -174,7 +174,7 @@ def kurtosis(data: List[Data], target: str, window: PositiveInt) -> OBBject[List Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Kurtosis. """ df = basemodel_to_df(data) @@ -182,43 +182,43 @@ def kurtosis(data: List[Data], target: str, window: PositiveInt) -> OBBject[List results = ta.kurtosis(close=series_target, length=window).dropna() results = df_to_basemodel(results) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def pick() -> OBBject[Empty]: +def pick() -> Obbject[Empty]: """Pick.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def spread() -> OBBject[Empty]: +def spread() -> Obbject[Empty]: """Spread.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def rolling() -> OBBject[Empty]: +def rolling() -> Obbject[Empty]: """Rolling.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def var() -> OBBject[Empty]: +def var() -> Obbject[Empty]: """Value at Risk.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def line() -> OBBject[Empty]: +def line() -> Obbject[Empty]: """Line.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def hist() -> OBBject[Empty]: +def hist() -> Obbject[Empty]: """Histogram.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -227,7 +227,7 @@ def unitroot( target: str, fuller_reg: Literal["c", "ct", "ctt", "nc", "c"] = "c", kpss_reg: Literal["c", "ct"] = "c", -) -> OBBject[UnitRootModel]: +) -> Obbject[UnitRootModel]: """Unit Root Test. Augmented Dickey-Fuller test for unit root. @@ -246,7 +246,7 @@ def unitroot( Returns ------- - OBBject[UnitRootModel] + Obbject[UnitRootModel] Unit root tests summary. """ @@ -270,19 +270,19 @@ def unitroot( nlags=kpss[2], ), ) - return OBBject(results=unitroot_summary) + return Obbject(results=unitroot_summary) @router.command(methods=["POST"]) -def beta() -> OBBject[Empty]: +def beta() -> Obbject[Empty]: """Beta.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) def sh( data: List[Data], target: str, rfr: float = 0.0, window: PositiveInt = 252 -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """Sharpe Ratio. Parameters @@ -298,7 +298,7 @@ def sh( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Sharpe ratio. """ @@ -311,7 +311,7 @@ def sh( results = df_to_basemodel(results) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -321,7 +321,7 @@ def so( target_return: float = 0.0, window: PositiveInt = 252, adjusted: bool = False, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """Sortino Ratio. For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf @@ -341,7 +341,7 @@ def so( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Sortino ratio. """ @@ -359,35 +359,35 @@ def so( results = df_to_basemodel(results) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def cusum() -> OBBject[Empty]: +def cusum() -> Obbject[Empty]: """Cumulative Sum.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def raw() -> OBBject[Empty]: +def raw() -> Obbject[Empty]: """Raw.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def cdf() -> OBBject[Empty]: +def cdf() -> Obbject[Empty]: """Cumulative Distribution Function.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def decompose() -> OBBject[Empty]: +def decompose() -> Obbject[Empty]: """Decompose.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def skew(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Data]]: +def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Data]]: """Skewness. Parameters @@ -401,7 +401,7 @@ def skew(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Dat Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Skewness. """ df = basemodel_to_df(data) @@ -409,7 +409,7 @@ def skew(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Dat results = ta.skew(close=series_target, length=window).dropna() results = df_to_basemodel(results) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -418,7 +418,7 @@ def quantile( target: str, window: PositiveInt, quantile_pct: NonNegativeFloat = 0.5, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """Quantile.""" df = basemodel_to_df(data) @@ -430,29 +430,29 @@ def quantile( results = df_to_basemodel(results) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def bw() -> OBBject[Empty]: +def bw() -> Obbject[Empty]: """Bandwidth.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def es() -> OBBject[Empty]: +def es() -> Obbject[Empty]: """Expected Shortfall.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def acf() -> OBBject[Empty]: +def acf() -> Obbject[Empty]: """Autocorrelation Function.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) -def summary(data: List[Data], target: str) -> OBBject[SummaryModel]: +def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: """Summary. Parameters @@ -464,7 +464,7 @@ def summary(data: List[Data], target: str) -> OBBject[SummaryModel]: Returns ------- - OBBject[SummaryModel] + Obbject[SummaryModel] Summary table. """ @@ -485,4 +485,4 @@ def summary(data: List[Data], target: str) -> OBBject[SummaryModel]: max=df_stats.loc["max"], ) - return OBBject(results=results) + return Obbject(results=results) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py index 2dcdde8fc03..7e69e283f07 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py @@ -2,7 +2,7 @@ """Comparison Analysis Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -22,66 +22,66 @@ def peers( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Company peers.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def balance() -> OBBject[Empty]: # type: ignore +def balance() -> Obbject[Empty]: # type: ignore """Company balance sheet.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def cashflow() -> OBBject[Empty]: # type: ignore +def cashflow() -> Obbject[Empty]: # type: ignore """Company cashflow.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def hcorr() -> OBBject[Empty]: # type: ignore +def hcorr() -> Obbject[Empty]: # type: ignore """Company historical correlation.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def hist() -> OBBject[Empty]: # type: ignore +def hist() -> Obbject[Empty]: # type: ignore """Company historical prices.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def income() -> OBBject[Empty]: # type: ignore +def income() -> Obbject[Empty]: # type: ignore """Company income statement.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def scorr() -> OBBject[Empty]: # type: ignore +def scorr() -> Obbject[Empty]: # type: ignore """Company sector correlation.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def screener() -> OBBject[Empty]: # type: ignore +def screener() -> Obbject[Empty]: # type: ignore """Company screener.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def sentiment() -> OBBject[Empty]: # type: ignore +def sentiment() -> Obbject[Empty]: # type: ignore """Company sentiment.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def similar() -> OBBject[Empty]: # type: ignore +def similar() -> Obbject[Empty]: # type: ignore """Company similar.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def volume() -> OBBject[Empty]: # type: ignore +def volume() -> Obbject[Empty]: # type: ignore """Company volume.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py index 42bd9296238..b4344d961b9 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py @@ -2,7 +2,7 @@ """Due Diligence Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -21,6 +21,6 @@ def sec( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """SEC Filings.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py index 4fba79ad2a5..e5a040040be 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,106 +6,106 @@ router = Router(prefix="/disc") @router.command -def active() -> OBBject[Empty]: # type: ignore +def active() -> Obbject[Empty]: # type: ignore """Most active stocks by intraday trade volumes.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def arkord() -> OBBject[Empty]: # type: ignore +def arkord() -> Obbject[Empty]: # type: ignore """Order by ARK INvestment Management LLC.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def asc() -> OBBject[Empty]: # type: ignore +def asc() -> Obbject[Empty]: # type: ignore """Small cap stocks with revenue and earnings growth more than 25%.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def dividends() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def dividends() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def filings() -> OBBject[Empty]: # type: ignore +def filings() -> Obbject[Empty]: # type: ignore """The most-recent form submissions to the SEC.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def fipo() -> OBBject[Empty]: # type: ignore +def fipo() -> Obbject[Empty]: # type: ignore """Future IPOs dates.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def gainers() -> OBBject[Empty]: # type: ignore +def gainers() -> Obbject[Empty]: # type: ignore """Show latest top gainers.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def gtech() -> OBBject[Empty]: # type: ignore +def gtech() -> Obbject[Empty]: # type: ignore """Tech stocks with revenue and earnings growth more than 25%.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def hotpenny() -> OBBject[Empty]: # type: ignore +def hotpenny() -> Obbject[Empty]: # type: ignore """Today's hot penny stocks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def ipo() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def ipo() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def losers() -> OBBject[Empty]: # type: ignore +def losers() -> Obbject[Empty]: # type: ignore """Show latest top losers.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lowfloat() -> OBBject[Empty]: # type: ignore +def lowfloat() -> Obbject[Empty]: # type: ignore """Low float stocks under 10M shares float.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def pipo() -> OBBject[Empty]: # type: ignore +def pipo() -> Obbject[Empty]: # type: ignore """Past IPOs dates.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def rtat() -> OBBject[Empty]: # type: ignore +def rtat() -> Obbject[Empty]: # type: ignore """Top 10 retail traded stocks per day.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def trending() -> OBBject[Empty]: # type: ignore +def trending() -> Obbject[Empty]: # type: ignore """Trending news.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def ugs() -> OBBject[Empty]: # type: ignore +def ugs() -> Obbject[Empty]: # type: ignore """Undervalued stocks with revenue and earnings growth above 25%.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def ulc() -> OBBject[Empty]: # type: ignore +def ulc() -> Obbject[Empty]: # type: ignore """Potentially undervalued large cap stocks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def upcoming() -> OBBject[Empty]: # type: ignore +def upcoming() -> Obbject[Empty]: # type: ignore """Upcoming earnings release dates.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py index c78b74e8719..dc517ac826f 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,70 +6,70 @@ router = Router(prefix="/dps") @router.command -def psi() -> OBBject[Empty]: # type: ignore +def psi() -> Obbject[Empty]: # type: ignore """Price vs short interest volume""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def ctb() -> OBBject[Empty]: # type: ignore +def ctb() -> Obbject[Empty]: # type: ignore """Cost to borrow of stocks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def dpotc() -> OBBject[Empty]: # type: ignore +def dpotc() -> Obbject[Empty]: # type: ignore """Dark pools (ATS) vs OTC data.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def ftd() -> OBBject[Empty]: # type: ignore +def ftd() -> Obbject[Empty]: # type: ignore """Fails-to-deliver data.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def hsi() -> OBBject[Empty]: # type: ignore +def hsi() -> Obbject[Empty]: # type: ignore """Show top high short interest stocks of over 20% ratio.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def pos() -> OBBject[Empty]: # type: ignore +def pos() -> Obbject[Empty]: # type: ignore """Dark pool short position.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def prom() -> OBBject[Empty]: # type: ignore +def prom() -> Obbject[Empty]: # type: ignore """Promising tickers based on dark pool shares regression.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def psi_q() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def psi_q() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def psi_sg() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def psi_sg() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def shorted() -> OBBject[Empty]: # type: ignore +def shorted() -> Obbject[Empty]: # type: ignore """Most shorted stocks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def sidtc() -> OBBject[Empty]: # type: ignore +def sidtc() -> Obbject[Empty]: # type: ignore """Short interest and days to cover.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def spos() -> OBBject[Empty]: # type: ignore +def spos() -> Obbject[Empty]: # type: ignore """Net short vs position.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py index df78527740e..233202d3b21 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py @@ -2,7 +2,7 @@ """Fundamental Analysis Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -17,9 +17,9 @@ router = Router(prefix="/fa") @router.command -def analysis() -> OBBject[Empty]: # type: ignore +def analysis() -> Obbject[Empty]: # type: ignore """Analyse SEC filings with the help of machine learning.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="BalanceSheet") @@ -28,9 +28,9 @@ def balance( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Balance Sheet.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="BalanceSheetGrowth") @@ -39,9 +39,9 @@ def balance_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Balance Sheet Statement Growth.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="DividendCalendar") @@ -50,9 +50,9 @@ def cal( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Show Dividend Calendar for a given start and end dates.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="CashFlowStatement") @@ -61,9 +61,9 @@ def cash( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Cash Flow Statement.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="CashFlowStatementGrowth") @@ -72,9 +72,9 @@ def cash_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Cash Flow Statement Growth.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="ExecutiveCompensation") @@ -83,9 +83,9 @@ def comp( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Executive Compensation.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="StockSplitCalendar") @@ -94,21 +94,21 @@ def comsplit( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Stock Split Calendar.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def customer() -> OBBject[Empty]: # type: ignore +def customer() -> Obbject[Empty]: # type: ignore """List of customers of the company.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def dcfc() -> OBBject[Empty]: # type: ignore +def dcfc() -> Obbject[Empty]: # type: ignore """Determine the (historical) discounted cash flow.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="HistoricalDividends") @@ -117,15 +117,15 @@ def divs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Historical Dividends.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def dupont() -> OBBject[Empty]: # type: ignore +def dupont() -> Obbject[Empty]: # type: ignore """Detailed breakdown for Return on Equity (RoE).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="EarningsCalendar") @@ -134,9 +134,9 @@ def earning( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Earnings Calendar.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="HistoricalEmployees") @@ -145,21 +145,21 @@ def emp( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Number of Employees.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def enterprise() -> OBBject[Empty]: # type: ignore +def enterprise() -> Obbject[Empty]: # type: ignore """Enterprise value.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def epsfc() -> OBBject[Empty]: # type: ignore +def epsfc() -> Obbject[Empty]: # type: ignore """Earnings Estimate by Analysts - EPS.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="AnalystEstimates") @@ -168,38 +168,38 @@ def est( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Analyst Estimates.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def fama_coe() -> OBBject[Empty]: # type: ignore +def fama_coe() -> Obbject[Empty]: # type: ignore """Fama French 3 Factor Model - Coefficient of Earnings.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def fama_raw() -> OBBject[Empty]: # type: ignore +def fama_raw() -> Obbject[Empty]: # type: ignore """Fama French 3 Factor Model - Raw Data.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def fraud() -> OBBject[Empty]: # type: ignore +def fraud() -> Obbject[Empty]: # type: ignore """Key fraud ratios including M-score, Z-score and McKee.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def growth() -> OBBject[Empty]: # type: ignore +def growth() -> Obbject[Empty]: # type: ignore """Growth of financial statement items and ratios.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def historical_5() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def historical_5() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command(model="IncomeStatement") @@ -208,9 +208,9 @@ def income( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Income Statement.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="IncomeStatementGrowth") @@ -219,9 +219,9 @@ def income_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Income Statement Growth.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="StockInsiderTrading") @@ -230,9 +230,9 @@ def ins( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Stock Insider Trading.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="InstitutionalOwnership") @@ -241,14 +241,14 @@ def ins_own( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Institutional Ownership.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def key() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def key() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command(model="KeyMetrics") @@ -257,9 +257,9 @@ def metrics( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Key Metrics.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="KeyExecutives") @@ -268,20 +268,20 @@ def mgmt( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Key Executives.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def mktcap() -> OBBject[Empty]: # type: ignore +def mktcap() -> Obbject[Empty]: # type: ignore """Obtain the market capitalization or enterprise value.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command # CHECK IF NEWS IS NEEDED HERE -def news() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def news() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command(model="CompanyOverview") @@ -290,9 +290,9 @@ def overview( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Company Overview.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="StockOwnership") @@ -301,9 +301,9 @@ def own( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Stock Ownership.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="PriceTargetConsensus") @@ -312,9 +312,9 @@ def pt( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Price Target Consensus.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="PriceTarget") @@ -323,27 +323,27 @@ def pta( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Price Target.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def rating() -> OBBject[Empty]: # type: ignore +def rating() -> Obbject[Empty]: # type: ignore """Analyst prices and ratings over time of the company.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def ratios() -> OBBject[Empty]: # type: ignore +def ratios() -> Obbject[Empty]: # type: ignore """Extensive set of ratios over time.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def revfc() -> OBBject[Empty]: # type: ignore +def revfc() -> Obbject[Empty]: # type: ignore """Earning Estimate by Analysts - Revenue.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="RevenueGeographic") @@ -352,9 +352,9 @@ def revgeo( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Revenue Geographic.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="RevenueBusinessLine") @@ -363,31 +363,31 @@ def revseg( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Revenue Business Line.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def rot() -> OBBject[Empty]: # type: ignore +def rot() -> Obbject[Empty]: # type: ignore """Number of analyst ratings over time on a monthly basis.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def score() -> OBBject[Empty]: # type: ignore +def score() -> Obbject[Empty]: # type: ignore """Value investing scores for any time period.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def sec() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def sec() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def shares() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def shares() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command(model="ShareStatistics") @@ -396,9 +396,9 @@ def shrs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Share Statistics.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="HistoricalStockSplits") @@ -407,15 +407,15 @@ def split( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Historical Stock Splits.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def supplier() -> OBBject[Empty]: # type: ignore +def supplier() -> Obbject[Empty]: # type: ignore """List of suppliers of the company.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(model="EarningsCallTranscript") @@ -424,6 +424,6 @@ def transcript( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Earnings Call Transcript.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py index 1b76252f6ab..737ea0b0051 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py @@ -1,7 +1,7 @@ """Due Diligence Router.""" -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -9,66 +9,66 @@ router = Router(prefix="/gov") @router.command -def contracts() -> OBBject[Empty]: # type: ignore +def contracts() -> Obbject[Empty]: # type: ignore """Return government contracts.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def government_trading() -> OBBject[Empty]: # type: ignore +def government_trading() -> Obbject[Empty]: # type: ignore """Return government trading.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command # Isn't this one the same as the one above? -def gtrades() -> OBBject[Empty]: # type: ignore +def gtrades() -> Obbject[Empty]: # type: ignore """Return government trades.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def histcont() -> OBBject[Empty]: # type: ignore +def histcont() -> Obbject[Empty]: # type: ignore """Historical quarterly government contracts.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lastcontracts() -> OBBject[Empty]: # type: ignore +def lastcontracts() -> Obbject[Empty]: # type: ignore """Return last government contracts given out.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lasttrades() -> OBBject[Empty]: # type: ignore +def lasttrades() -> Obbject[Empty]: # type: ignore """Last trades.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lobbying() -> OBBject[Empty]: # type: ignore +def lobbying() -> Obbject[Empty]: # type: ignore """Corporate lobbying details.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def qtrcontracts() -> OBBject[Empty]: # type: ignore +def qtrcontracts() -> Obbject[Empty]: # type: ignore """Quarterly government contracts analysis.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def topbuys() -> OBBject[Empty]: # type: ignore +def topbuys() -> Obbject[Empty]: # type: ignore """Show most purchased stocks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def toplobbying() -> OBBject[Empty]: # type: ignore +def toplobbying() -> Obbject[Empty]: # type: ignore """Top corporate lobbying tickers.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def topsells() -> OBBject[Empty]: # type: ignore +def topsells() -> Obbject[Empty]: # type: ignore """Show most sold stocks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py index bb0bd1b2882..06d3b757771 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py @@ -1,7 +1,7 @@ """Due Diligence Router.""" -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -9,96 +9,96 @@ router = Router(prefix="/ins") @router.command -def act() -> OBBject[Empty]: # type: ignore +def act() -> Obbject[Empty]: # type: ignore """Insider activity over time.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def blcp() -> OBBject[Empty]: # type: ignore +def blcp() -> Obbject[Empty]: # type: ignore """Big latest CEO/CFO purchaces ($25k+).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def blcs() -> OBBject[Empty]: # type: ignore +def blcs() -> Obbject[Empty]: # type: ignore """Big latest CEO/CFO sales ($100k+).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def blip() -> OBBject[Empty]: # type: ignore +def blip() -> Obbject[Empty]: # type: ignore """Big latest insider purchaces ($25+).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def blis() -> OBBject[Empty]: # type: ignore +def blis() -> Obbject[Empty]: # type: ignore """Big latest insider sales ($100k+).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def blop() -> OBBject[Empty]: # type: ignore +def blop() -> Obbject[Empty]: # type: ignore """Big latest officer purchaces ($25k+).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def blos() -> OBBject[Empty]: # type: ignore +def blos() -> Obbject[Empty]: # type: ignore """Big latest officer sales ($100k+).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command # Can't use filter because it's a python keyword -def filt() -> OBBject[Empty]: # type: ignore +def filt() -> Obbject[Empty]: # type: ignore """Filter insiders based on preset.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lcb() -> OBBject[Empty]: # type: ignore +def lcb() -> Obbject[Empty]: # type: ignore """Latest cluster buys.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lins() -> OBBject[Empty]: # type: ignore +def lins() -> Obbject[Empty]: # type: ignore """Last insider trading of the company.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lip() -> OBBject[Empty]: # type: ignore +def lip() -> Obbject[Empty]: # type: ignore """Latest insider purchaces.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lis() -> OBBject[Empty]: # type: ignore +def lis() -> Obbject[Empty]: # type: ignore """Latest insider sales.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lit() -> OBBject[Empty]: # type: ignore +def lit() -> Obbject[Empty]: # type: ignore """Latest insider trading (all filings).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def lpsb() -> OBBject[Empty]: # type: ignore +def lpsb() -> Obbject[Empty]: # type: ignore """Latest penny stock buys.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def print_insider_data() -> OBBject[Empty]: # type: ignore +def print_insider_data() -> Obbject[Empty]: # type: ignore """Print insider data.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def stats() -> OBBject[Empty]: # type: ignore +def stats() -> Obbject[Empty]: # type: ignore """Insider stats of the company.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py index c8352e2d903..e2416f75c90 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,88 +6,88 @@ router = Router(prefix="/options") @router.command -def chains() -> OBBject[Empty]: # type: ignore +def chains() -> Obbject[Empty]: # type: ignore """Return options chains with greeks.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def dte() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def dte() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def eodchain() -> OBBject[Empty]: # type: ignore +def eodchain() -> Obbject[Empty]: # type: ignore """Gets option chain at a specific date.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def expirations() -> OBBject[Empty]: # type: ignore +def expirations() -> Obbject[Empty]: # type: ignore """Return options expirations.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def grhist() -> OBBject[Empty]: # type: ignore +def grhist() -> Obbject[Empty]: # type: ignore """Plot option greek history.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def hist() -> OBBject[Empty]: # type: ignore +def hist() -> Obbject[Empty]: # type: ignore """Plot option history.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def info() -> OBBject[Empty]: # type: ignore +def info() -> Obbject[Empty]: # type: ignore """Display option information (volatility, IV rank, etc.).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def last_price() -> OBBject[Empty]: # type: ignore +def last_price() -> Obbject[Empty]: # type: ignore """Return last price of an option.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def oi() -> OBBject[Empty]: # type: ignore +def oi() -> Obbject[Empty]: # type: ignore """Plot option open interest.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def pcr() -> OBBject[Empty]: # type: ignore +def pcr() -> Obbject[Empty]: # type: ignore """Display put/call ratio for ticker.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def price() -> OBBject[Empty]: # type: ignore - return OBBject(results=Empty()) +def price() -> Obbject[Empty]: # type: ignore + return Obbject(results=Empty()) @router.command -def unu() -> OBBject[Empty]: # type: ignore +def unu() -> Obbject[Empty]: # type: ignore """Show unusual options activity.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def voi() -> OBBject[Empty]: # type: ignore +def voi() -> Obbject[Empty]: # type: ignore """Plot volume and open interest.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def vol() -> OBBject[Empty]: # type: ignore +def vol() -> Obbject[Empty]: # type: ignore """Plot volume.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def vsurf() -> OBBject[Empty]: # type: ignore +def vsurf() -> Obbject[Empty]: # type: ignore """Show 3D volatility surface.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py index 479def6ae1a..f0e147c8921 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py @@ -2,7 +2,7 @@ """Stocks Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -39,9 +39,9 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Load stock data for a specific ticker.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="StockNews") @@ -50,9 +50,9 @@ def news( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Get news for one or more stock tickers.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command(model="StockMultiples") @@ -61,24 +61,24 @@ def multiples( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Get valuation multiples for a stock ticker.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) @router.command -def tob() -> OBBject[Empty]: +def tob() -> Obbject[Empty]: """View top of book for loaded ticker (US exchanges only).""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def quote() -> OBBject[Empty]: +def quote() -> Obbject[Empty]: """View the current price for a specific stock ticker.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command -def search() -> OBBject[Empty]: +def search() -> Obbject[Empty]: """Search a specific stock ticker for analysis.""" - return OBBject(results=Empty()) + return Obbject(results=Empty()) diff --git a/openbb_sdk/extensions/ta/openbb_ta/ta_router.py b/openbb_sdk/extensions/ta/openbb_ta/ta_router.py index 3e4d4c13106..e5076baeb6f 100644 --- a/openbb_sdk/extensions/ta/openbb_ta/ta_router.py +++ b/openbb_sdk/extensions/ta/openbb_ta/ta_router.py @@ -1,7 +1,7 @@ from typing import List, Literal, Optional import pandas as pd -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router from openbb_core.app.utils import ( @@ -31,7 +31,7 @@ def atr( mamode: Literal["rma", "ema", "sma", "wma"] = "rma", drift: NonNegativeInt = 1, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Average True Range is used to measure volatility, especially volatility caused by gaps or limit moves. @@ -53,7 +53,7 @@ def atr( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -71,7 +71,7 @@ def atr( results = df_to_basemodel(df_target.join(df_atr, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -82,7 +82,7 @@ def fib( period: PositiveInt = 120, start_date: Optional[str] = None, end_date: Optional[str] = None, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Fibonacci Retracement Levels. @@ -97,7 +97,7 @@ def fib( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -132,7 +132,7 @@ def fib( results = df_to_basemodel(df_fib) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -140,7 +140,7 @@ def obv( data: List[Data], index: str = "date", offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The On Balance Volume (OBV) is a cumulative total of the up and down volume. When the close is higher than the previous close, the volume is added @@ -161,7 +161,7 @@ def obv( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -177,7 +177,7 @@ def obv( results = df_to_basemodel(df_target.join(df_obv, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -186,7 +186,7 @@ def fisher( index: str = "date", length: PositiveInt = 14, signal: PositiveInt = 1, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.1 The indicator @@ -207,7 +207,7 @@ def fisher( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -223,7 +223,7 @@ def fisher( results = df_to_basemodel(df_target.join(df_fisher, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -233,7 +233,7 @@ def adosc( fast: PositiveInt = 3, slow: PositiveInt = 10, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator is essentially a momentum indicator, but of the Accumulation-Distribution line @@ -256,7 +256,7 @@ def adosc( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Examples -------- @@ -271,16 +271,16 @@ def adosc( results = df_to_basemodel(df_target.join(df_adosc, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def tv() -> OBBject[Empty]: +def tv() -> Obbject[Empty]: """TradingView.""" # TODO : probably out of scope for now - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -292,7 +292,7 @@ def bbands( std: NonNegativeFloat = 2, mamode: Literal["sma", "ema", "wma", "rma"] = "sma", offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Bollinger Bands consist of three lines. The middle band is a simple moving average (generally 20 periods) of the typical price (TP). The upper and lower @@ -324,7 +324,7 @@ def bbands( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -344,16 +344,16 @@ def bbands( results = df_to_basemodel(df_target.join(bbands_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def multi() -> OBBject[Empty]: +def multi() -> Obbject[Empty]: """Plot multiple indicators on the same chart.""" # TODO : probably out of scope for now - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -363,7 +363,7 @@ def zlma( index: str = "date", length: int = 50, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The zero lag exponential moving average (ZLEMA) indicator was created by John Ehlers and Ric Way. The idea is do a @@ -388,7 +388,7 @@ def zlma( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -403,7 +403,7 @@ def zlma( results = df_to_basemodel(df_target.join(zlma_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -412,7 +412,7 @@ def aroon( index: str = "date", length: int = 25, scalar: int = 100, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The word aroon is Sanskrit for "dawn's early light." The Aroon indicator attempts to show when a new trend is dawning. The indicator consists @@ -438,7 +438,7 @@ def aroon( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -453,7 +453,7 @@ def aroon( results = df_to_basemodel(df_target.join(aroon_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -463,7 +463,7 @@ def sma( index: str = "date", length: int = 50, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Moving Averages are used to smooth the data in an array to help eliminate noise and identify trends. The Simple Moving Average is literally @@ -488,7 +488,7 @@ def sma( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -503,7 +503,7 @@ def sma( results = df_to_basemodel(df_target.join(sma_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -514,7 +514,7 @@ def demark( show_all: bool = False, asint: bool = False, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Demark sequential indicator @@ -535,7 +535,7 @@ def demark( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -553,7 +553,7 @@ def demark( results = df_to_basemodel(df_target.join(demark_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -562,7 +562,7 @@ def vwap( index: str = "date", anchor: str = "D", offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Volume Weighted Average Price that measures the average typical price by volume. It is typically used with intraday charts to identify general direction. @@ -582,7 +582,7 @@ def vwap( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -598,17 +598,17 @@ def vwap( results = df_to_basemodel(df_target.join(df_vwap, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def recom() -> OBBject[Empty]: +def recom() -> Obbject[Empty]: """Recommendation.""" # TODO : this command does only a call to a Tradingview's endpoint # thus, it should probably be implement on a provider level - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -619,7 +619,7 @@ def macd( fast: int = 12, slow: int = 26, signal: int = 9, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Moving Average Convergence Divergence (MACD) is the difference between two Exponential Moving Averages. The Signal line is an Exponential Moving @@ -646,7 +646,7 @@ def macd( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -663,7 +663,7 @@ def macd( results = df_to_basemodel(df_target.join(macd_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -673,7 +673,7 @@ def hma( index: str = "date", length: int = 50, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Hull Moving Average solves the age old dilemma of making a moving average more responsive to current price activity whilst maintaining curve smoothness. @@ -695,7 +695,7 @@ def hma( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -710,7 +710,7 @@ def hma( results = df_to_basemodel(df_target.join(hma_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -720,7 +720,7 @@ def donchian( lower_length: PositiveInt = 20, upper_length: PositiveInt = 20, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Donchian Channels are three lines generated by moving average calculations that comprise an indicator formed by upper and lower @@ -744,7 +744,7 @@ def donchian( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -764,7 +764,7 @@ def donchian( results = df_to_basemodel(df_target.join(donchian_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -776,7 +776,7 @@ def ichimoku( lagging: PositiveInt = 52, offset: PositiveInt = 26, lookahead: bool = False, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that defines support and resistance, identifies trend direction, gauges momentum and provides @@ -816,7 +816,7 @@ def ichimoku( results = df_to_basemodel(df_result, index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -825,7 +825,7 @@ def clenow( index: str = "date", target: str = "adj_close", period: PositiveInt = 90, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Clenow Volatility Adjusted Momentum. @@ -842,7 +842,7 @@ def clenow( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -868,11 +868,11 @@ def clenow( results = df_to_basemodel(df_clenow) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def ad(data: List[Data], index: str = "date", offset: int = 0) -> OBBject[List[Data]]: +def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[Data]]: """ The Accumulation/Distribution Line is similar to the On Balance Volume (OBV), which sums the volume times +1/-1 based on whether the close is @@ -896,7 +896,7 @@ def ad(data: List[Data], index: str = "date", offset: int = 0) -> OBBject[List[D Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Examples -------- @@ -911,7 +911,7 @@ def ad(data: List[Data], index: str = "date", offset: int = 0) -> OBBject[List[D results = df_to_basemodel(df_target.join(ad_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -921,7 +921,7 @@ def adx( length: int = 50, scalar: float = 100.0, drift: int = 1, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider @@ -942,7 +942,7 @@ def adx( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -959,7 +959,7 @@ def adx( results = df_to_basemodel(df_target.join(adx_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -969,7 +969,7 @@ def wma( index: str = "date", length: int = 50, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ A Weighted Moving Average puts more weight on recent data and less on past data. This is done by multiplying each bar’s price by a weighting factor. Because of its @@ -991,7 +991,7 @@ def wma( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The WMA data. Examples @@ -1006,7 +1006,7 @@ def wma( results = df_to_basemodel(df_target.join(wma_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -1015,7 +1015,7 @@ def cci( index: str = "date", length: PositiveInt = 14, scalar: PositiveFloat = 0.015, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The CCI is designed to detect beginning and ending market trends. The range of 100 to -100 is the normal trading range. CCI values outside of this @@ -1036,7 +1036,7 @@ def cci( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The CCI data. """ @@ -1046,7 +1046,7 @@ def cci( results = df_to_basemodel(df_target.join(cci_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -1057,7 +1057,7 @@ def rsi( length: int = 14, scalar: float = 100.0, drift: int = 1, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Relative Strength Index (RSI) calculates a ratio of the recent upward price movements to the absolute price movement. The RSI ranges @@ -1082,7 +1082,7 @@ def rsi( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The RSI data. Examples @@ -1099,17 +1099,17 @@ def rsi( results = df_to_basemodel(df_target.join(rsi_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def summary() -> OBBject[Empty]: +def summary() -> Obbject[Empty]: """Summary.""" # TODO : this command does only a call to a finbrain's endpoint # thus, it should probably be implement on a provider level - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -1119,7 +1119,7 @@ def stoch( fast_k_period: NonNegativeInt = 14, slow_d_period: NonNegativeInt = 3, slow_k_period: NonNegativeInt = 3, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Stochastic Oscillator measures where the close is in relation to the recent trading range. The values range from zero to 100. %D values over 75 @@ -1143,7 +1143,7 @@ def stoch( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The Stochastic Oscillator data. Examples @@ -1165,16 +1165,16 @@ def stoch( results = df_to_basemodel(df_target.join(stoch_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) -def rsp() -> OBBject[Empty]: +def rsp() -> Obbject[Empty]: """Relative Strength Performance.""" # TODO : https://github.com/OpenBB-finance/OpenBBTerminal/issues/5167 - return OBBject(results=Empty()) + return Obbject(results=Empty()) @router.command(methods=["POST"]) @@ -1185,7 +1185,7 @@ def kc( scalar: PositiveFloat = 20, mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", offset: NonNegativeInt = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ Keltner Channels are volatility-based bands that are placed on either side of an asset's price and can aid in determining @@ -1210,7 +1210,7 @@ def kc( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The Keltner Channels data. Examples @@ -1233,13 +1233,13 @@ def kc( results = df_to_basemodel(df_target.join(kc_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) def cg( data: List[Data], index: str = "date", length: PositiveInt = 14 -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Center of Gravity indicator, in short, is used to anticipate future price movements and to trade on price reversals as soon as they happen. However, just like other oscillators, @@ -1258,7 +1258,7 @@ def cg( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The COG data. Examples @@ -1274,7 +1274,7 @@ def cg( results = df_to_basemodel(df_target.join(cg_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -1292,7 +1292,7 @@ def cones( "Yang-Zhang", ] = "STD", is_crypto: bool = False, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """Calculate the realized volatility quantiles over rolling windows of time. The model for calculating volatility is selectable. @@ -1334,7 +1334,7 @@ def cones( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The cones data. Examples @@ -1354,7 +1354,7 @@ def cones( results = df_to_basemodel(df_cones, index=True) - return OBBject(results=results) + return Obbject(results=results) @router.command(methods=["POST"]) @@ -1364,7 +1364,7 @@ def ema( index: str = "date", length: int = 50, offset: int = 0, -) -> OBBject[List[Data]]: +) -> Obbject[List[Data]]: """ The Exponential Moving Average is a staple of technical analysis and is used in countless technical indicators. In a Simple Moving @@ -1390,7 +1390,7 @@ def ema( Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -1406,4 +1406,4 @@ def ema( results = df_to_basemodel(df_target.join(ema_df, how="left"), index=True) - return OBBject(results=results) + return Obbject(results=results) diff --git a/openbb_sdk/sdk/core/README.md b/openbb_sdk/sdk/core/README.md index 3107d5b96d5..2c0f30fa296 100644 --- a/openbb_sdk/sdk/core/README.md +++ b/openbb_sdk/sdk/core/README.md @@ -70,7 +70,7 @@ router = Router(prefix="/router_name") @router.command def some_command( some_param: some_param_type, -) -> OBBject[Item]: +) -> Obbject[Item]: pass ``` @@ -85,9 +85,9 @@ def load( provider_choices: ProviderChoices, # available providers standard_params: StandardParams, # symbol, start_date, etc. extra_params: ExtraParams, # provider specific parameters -) -> OBBject[BaseModel]: +) -> Obbject[BaseModel]: """Load stock data for a specific ticker.""" - return OBBject(results=Query(**locals()).execute()) + return Obbject(results=Query(**locals()).execute()) ``` ### Entrypoint @@ -165,7 +165,7 @@ output = obb.stocks.load( ### 4.1.1. Command output -Each command will always return a `OBBject`. There you will find: +Each command will always return a `Obbject`. There you will find: - `results`: the data returned by the command `None` - `provider`: the provider name (only available provider names allowed) used to get the data or `None` @@ -341,7 +341,7 @@ timestamp: ... # Execution starting timestamp. alias_list: ... # List of alias to find a JournalEntry easier than with it's `tag`. >>> response.output -OBBject +Obbject id: ... # UUID Tag results: ... # Serializable results. diff --git a/openbb_sdk/sdk/core/openbb_core/api/router/commands.py b/openbb_sdk/sdk/core/openbb_core/api/router/commands.py index 237ef121e05..b89713a2877 100644 --- a/openbb_sdk/sdk/core/openbb_core/api/router/commands.py +++ b/openbb_sdk/sdk/core/openbb_core/api/router/commands.py @@ -8,7 +8,7 @@ from fastapi.routing import APIRoute from openbb_core.api.dependency.user import get_user from openbb_core.app.command_runner import CommandRunner from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import RouterLoader from openbb_core.app.service.system_service import SystemService @@ -76,22 +76,22 @@ def build_new_signature(func): ) -def validate_output(c_out: OBBject) -> OBBject: +def validate_output(c_out: Obbject) -> Obbject: """ - Validate OBBject object. - Checks against the OBBject schema and removes fields that contain the + Validate Obbject object. + Checks against the Obbject schema and removes fields that contain the `exclude_from_api` extra `pydantic.Field` kwarg. - Note that the modification to the `OBBject` object is done in-place. + Note that the modification to the `Obbject` object is done in-place. Parameters ---------- - c_out : OBBject - OBBject object to validate. + c_out : Obbject + Obbject object to validate. Returns ------- - OBBject - Validated OBBject object. + Obbject + Validated Obbject object. """ def is_model(type_): diff --git a/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py b/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py index 92bda5da0fd..93eee1342c8 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py +++ b/openbb_sdk/sdk/core/openbb_core/app/charting_manager.py @@ -195,7 +195,7 @@ class ChartingManager(metaclass=SingletonMeta): user_settings: UserSettings, system_settings: SystemSettings, route: str, - OBBject_item: Generic[T], + obbject_item: Generic[T], **kwargs, ): """ @@ -215,7 +215,7 @@ class ChartingManager(metaclass=SingletonMeta): User settings. route : str Route name, example: `/stocks/load`. - OBBject_item + obbject_item Command output item. Returns ------- @@ -235,7 +235,7 @@ class ChartingManager(metaclass=SingletonMeta): self.handle_backend(self._charting_extension, self._charting_settings) - kwargs["OBBject_item"] = OBBject_item + kwargs["obbject_item"] = obbject_item kwargs["charting_settings"] = self._charting_settings charting_function = self.get_chart_function(self._charting_extension, route) diff --git a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py index bcc8862f281..8f9ae9b595f 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py +++ b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py @@ -18,7 +18,7 @@ from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.journal import Journal from openbb_core.app.model.journal_entry import JournalEntry from openbb_core.app.model.journal_query import JournalQuery -from openbb_core.app.modelobbject import Error, OBBject +from openbb_core.app.model.obbject import Error, Obbject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import CommandMap @@ -232,7 +232,7 @@ class StaticCommandRunner: charting_manager = ChartingManager() @staticmethod - def __run_in_isolation(func, args=None, kwargs=None) -> OBBject: + def __run_in_isolation(func, args=None, kwargs=None) -> Obbject: args = args or () kwargs = kwargs or {} @@ -244,7 +244,7 @@ class StaticCommandRunner: @classmethod def __command( cls, system_settings: SystemSettings, func: Callable, kwargs: Dict[str, Any] - ) -> OBBject: + ) -> Obbject: """Run a command and return the output""" try: context_manager: Union[warnings.catch_warnings, ContextManager[None]] = ( @@ -255,30 +255,30 @@ class StaticCommandRunner: with context_manager as warning_list: if system_settings.run_in_isolation: - OBBject = cls.__run_in_isolation(func=func, kwargs=kwargs) + obbject = cls.__run_in_isolation(func=func, kwargs=kwargs) else: - OBBject = func(**kwargs) + obbject = func(**kwargs) - OBBject.provider = getattr( + obbject.provider = getattr( kwargs.get("provider_choices", None), "provider", None ) if warning_list: - OBBject.warnings = list(map(cast_warning, warning_list)) + obbject.warnings = list(map(cast_warning, warning_list)) except Exception as e: - OBBject = OBBject( + obbject = Obbject( error=Error(message=str(e), error_kind=e.__class__.__name__) ) if system_settings.debug_mode: raise - return OBBject + return obbject @classmethod def __chart( cls, - OBBject: OBBject, + obbject: Obbject, user_settings: UserSettings, system_settings: SystemSettings, route: str, @@ -286,15 +286,15 @@ class StaticCommandRunner: ) -> None: """Create a chart from the command output""" try: - OBBject.chart = cls.charting_manager.chart( + obbject.chart = cls.charting_manager.chart( user_settings=user_settings, system_settings=system_settings, route=route, - OBBject_item=OBBject.results, + obbject_item=obbject.results, **kwargs, ) except Exception as e: - OBBject.chart = Chart(error=Error(message=str(e))) + obbject.chart = Chart(error=Error(message=str(e))) if system_settings.debug_mode: raise @@ -306,7 +306,7 @@ class StaticCommandRunner: execution_context: ExecutionContext, func: Callable, kwargs: Dict[str, Any], - ) -> OBBject: + ) -> Obbject: """Execute a function and return the output""" user_settings = execution_context.user_settings system_settings = execution_context.system_settings @@ -332,15 +332,15 @@ class StaticCommandRunner: # commands.py and the function signature does not expect "chart" kwargs.pop("chart", None) - OBBject = cls.__command( + obbject = cls.__command( system_settings=system_settings, func=func, kwargs=kwargs, ) - if chart and OBBject.results: + if chart and obbject.results: cls.__chart( - OBBject=OBBject, + obbject=obbject, user_settings=user_settings, system_settings=system_settings, route=route, @@ -350,13 +350,13 @@ class StaticCommandRunner: cls.logging_manager.log( user_settings=user_settings, system_settings=system_settings, - OBBject=OBBject, + obbject=obbject, route=route, func=func, kwargs=kwargs, ) - return OBBject + return obbject @classmethod def __update_managers_settings( @@ -388,7 +388,7 @@ class StaticCommandRunner: func = command_map.get_command(route=route) if func: - OBBject = cls.__execute_func( + obbject = cls.__execute_func( route=route, args=args, # type: ignore execution_context=execution_context, @@ -404,7 +404,7 @@ class StaticCommandRunner: journal_id=journal.id, arguments=kwargs, duration=duration, - output=OBBject, + output=obbject, route=route, timestamp=timestamp, ) diff --git a/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py b/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py index 213de66df0a..a0b3fa620d1 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py +++ b/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py @@ -10,7 +10,7 @@ from openbb_core.app.logs.formatters.formatter_with_exceptions import ( from openbb_core.app.logs.handlers_manager import HandlersManager from openbb_core.app.logs.models.logging_settings import LoggingSettings from openbb_core.app.model.abstract.singleton import SingletonMeta -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings @@ -42,7 +42,7 @@ class LoggingManager(metaclass=SingletonMeta): __init__(system_settings, user_settings) Logging Manager Constructor. - log(user_settings, system_settings, OBBject, route, func, kwargs) + log(user_settings, system_settings, obbject, route, func, kwargs) Log command output and relevant information. logging_settings @@ -182,7 +182,7 @@ class LoggingManager(metaclass=SingletonMeta): self, user_settings: UserSettings, system_settings: SystemSettings, - OBBject: OBBject, + obbject: Obbject, route: str, func: Callable, kwargs: Dict[str, Any], @@ -196,8 +196,8 @@ class LoggingManager(metaclass=SingletonMeta): User Settings object. system_settings : SystemSettings System Settings object. - OBBject : OBBject - OBBject object containing command output and error information. + obbject : Obbject + Obbject object containing command output and error information. route : str Route for the command. func : Callable @@ -225,14 +225,14 @@ class LoggingManager(metaclass=SingletonMeta): # Truncate kwargs if too long kwargs = {k: str(v)[:100] for k, v in kwargs.items()} - log_level = logger.error if OBBject.error else logger.info + log_level = logger.error if obbject.error else logger.info log_level( - "ERROR: %s" if OBBject.error else "CMD: %s", + "ERROR: %s" if obbject.error else "CMD: %s", json.dumps( { "route": route, "input": kwargs, - "error": OBBject.error, + "error": obbject.error, }, default=pydantic_encoder, ), diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py b/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py index 0d5b1e8efa6..f21b1a85ef9 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py @@ -4,7 +4,7 @@ from typing import Any, Dict, List from pydantic import Field from openbb_core.app.model.abstract.tagged import Tagged -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject class JournalEntry(Tagged): @@ -16,7 +16,7 @@ class JournalEntry(Tagged): duration: int = Field( description="Execution duration in nano second of the command." ) - output: OBBject = Field(description="Output of the command.") + output: Obbject = Field(description="Output of the command.") route: str = Field(description="Route of the command.") timestamp: datetime = Field(description="Execution starting timestamp.") alias_list: List[str] = Field( diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py b/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py index e15aeedf40e..38bac063c07 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py @@ -8,7 +8,7 @@ class JournalQuery(BaseModel): ) ignore_error_output: bool = Field( default=True, - description="Whether or not the JournalEntry with an OBBject.Error should be ignored.", + description="Whether or not the JournalEntry with an Obbject.Error should be ignored.", ) class Config: diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py index 6883b23ab83..2708e3367a6 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py @@ -20,7 +20,7 @@ class OpenBBError(Exception): pass -class OBBject(GenericModel, Generic[T], Tagged): +class Obbject(GenericModel, Generic[T], Tagged): results: Optional[T] = Field( default=None, description="Serializable results.", diff --git a/openbb_sdk/sdk/core/openbb_core/app/router.py b/openbb_sdk/sdk/core/openbb_core/app/router.py index 021028890c4..36c8c640d6b 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/router.py +++ b/openbb_sdk/sdk/core/openbb_core/app/router.py @@ -24,7 +24,7 @@ from typing_extensions import Annotated, _AnnotatedAlias from openbb_core.app.model.abstract.warning import OpenBBWarning from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -125,7 +125,7 @@ class CommandValidator: sig = signature(func) return_type = sig.return_annotation - if issubclass(return_type, OBBject): + if issubclass(return_type, Obbject): results_type = get_type_hints(return_type)["results"] if isinstance(results_type, type(None)): valid_return_type = False @@ -144,7 +144,7 @@ class CommandValidator: "Invalid return type in signature:" f" {func.__name__}(...) -> {sig.return_annotation}:\n" "Allowed return type:" - f" {func.__name__}(...) -> OBBject[T] :\n" + f" {func.__name__}(...) -> Obbject[T] :\n" "If you need T = None, use an empty model instead.\n" ) @@ -166,7 +166,7 @@ class Router: self._api_router = APIRouter(prefix=prefix) @overload - def command(self, func: Optional[Callable[P, OBBject]]) -> Callable[P, OBBject]: + def command(self, func: Optional[Callable[P, Obbject]]) -> Callable[P, Obbject]: pass @overload @@ -175,7 +175,7 @@ class Router: def command( self, - func: Optional[Callable[P, OBBject]] = None, + func: Optional[Callable[P, Obbject]] = None, **kwargs, ) -> Optional[Callable]: if func is None: @@ -215,8 +215,8 @@ class Router: class SignatureInspector: @classmethod def complete_signature( - cls, func: Callable[P, OBBject], model: str - ) -> Optional[Callable[P, OBBject]]: + cls, func: Callable[P, Obbject], model: str + ) -> Optional[Callable[P, Obbject]]: """Complete function signature.""" provider_interface = get_provider_interface() if model: @@ -257,7 +257,7 @@ class SignatureInspector: ) ReturnModel = provider_interface.return_schema[model] - func.__annotations__["return"] = OBBject[ReturnModel] # type: ignore + func.__annotations__["return"] = Obbject[ReturnModel] # type: ignore elif ( "provider_choices" in func.__annotations__ @@ -272,7 +272,7 @@ class SignatureInspector: @staticmethod def validate_signature( - func: Callable[P, OBBject], expected: Dict[str, type] + func: Callable[P, Obbject], expected: Dict[str, type] ) -> None: """Validate function signature before binding to model.""" for k, v in expected.items(): @@ -288,8 +288,8 @@ class SignatureInspector: @staticmethod def inject_dependency( - func: Callable[P, OBBject], arg: str, callable_: Any - ) -> Callable[P, OBBject]: + func: Callable[P, Obbject], arg: str, callable_: Any + ) -> Callable[P, Obbject]: """Annotate function with dependency injection.""" func.__annotations__[arg] = Annotated[callable_, Depends()] # type: ignore return func diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/filters.py b/openbb_sdk/sdk/core/openbb_core/app/static/filters.py index 53207d2e1c3..b1e96b7d627 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/filters.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/filters.py @@ -7,7 +7,7 @@ import pandas as pd from pydantic import ValidationError from openbb_core.app.model.abstract.warning import OpenBBWarning -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.utils import df_to_basemodel @@ -48,19 +48,19 @@ def filter_inputs(**kwargs) -> dict: return kwargs -def filter_output(OBBject: OBBject) -> OBBject: +def filter_output(obbject: Obbject) -> Obbject: """Filter command output.""" - if OBBject.warnings: - for w in OBBject.warnings: + if obbject.warnings: + for w in obbject.warnings: category = getattr(builtins, w.category, OpenBBWarning) print(f"{category.__name__}: {w.message}") - error = OBBject.error + error = obbject.error if error: raise OpenBBError(error.message) - chart = OBBject.chart + chart = obbject.chart if chart and chart.error: raise OpenBBError(chart.error.message) - return OBBject + return obbject diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py index b1144b3b4af..3ca625a6272 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py @@ -7,7 +7,7 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -35,7 +35,7 @@ class CLASS_crypto(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: r"""Crypto Intraday Price. @@ -55,7 +55,7 @@ class CLASS_crypto(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py index 670ad633c83..2bdb9b0678a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -21,7 +21,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """CORECPI.""" inputs = filter_inputs( provider_choices={ @@ -50,7 +50,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Get the constituents of an index. @@ -66,7 +66,7 @@ class CLASS_economy(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -216,7 +216,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["fred"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """CPI. @@ -242,7 +242,7 @@ class CLASS_economy(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -306,7 +306,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Get the options for v3 cpi(options=True)""" inputs = filter_inputs( provider_choices={ @@ -344,7 +344,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: r"""Get OHLCV data for an index. @@ -364,7 +364,7 @@ class CLASS_economy(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -467,7 +467,7 @@ class CLASS_economy(Container): @validate_arguments def available_indices( self, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """AVAILABLE_INDICES. @@ -482,7 +482,7 @@ class CLASS_economy(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -539,7 +539,7 @@ class CLASS_economy(Container): @validate_arguments def risk( self, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Market Risk Premium. @@ -554,7 +554,7 @@ class CLASS_economy(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -611,7 +611,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Query EconDB for macro data.""" inputs = filter_inputs( provider_choices={ @@ -633,7 +633,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """MACRO_COUNTRIES.""" inputs = filter_inputs( provider_choices={ @@ -655,7 +655,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """MACRO_PARAMETERS.""" inputs = filter_inputs( provider_choices={ @@ -677,7 +677,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """BALANCE.""" inputs = filter_inputs( provider_choices={ @@ -699,7 +699,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """BIGMAC.""" inputs = filter_inputs( provider_choices={ @@ -721,7 +721,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """COUNTRY_CODES.""" inputs = filter_inputs( provider_choices={ @@ -743,7 +743,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """CURRENCIES.""" inputs = filter_inputs( provider_choices={ @@ -765,7 +765,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """DEBT.""" inputs = filter_inputs( provider_choices={ @@ -787,7 +787,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """EVENTS.""" inputs = filter_inputs( provider_choices={ @@ -809,7 +809,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """FGDP.""" inputs = filter_inputs( provider_choices={ @@ -831,7 +831,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """FRED.""" inputs = filter_inputs( provider_choices={ @@ -853,7 +853,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """FRED Search (was fred_notes).""" inputs = filter_inputs( provider_choices={ @@ -875,7 +875,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """FUTURES. 2 sources""" inputs = filter_inputs( provider_choices={ @@ -897,7 +897,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """GDP.""" inputs = filter_inputs( provider_choices={ @@ -919,7 +919,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """GLBONDS.""" inputs = filter_inputs( provider_choices={ @@ -941,7 +941,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """INDICES.""" inputs = filter_inputs( provider_choices={ @@ -963,7 +963,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """OVERVIEW.""" inputs = filter_inputs( provider_choices={ @@ -985,7 +985,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """PERFMAP.""" inputs = filter_inputs( provider_choices={ @@ -1007,7 +1007,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """PERFORMANCE.""" inputs = filter_inputs( provider_choices={ @@ -1029,7 +1029,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """REVENUE.""" inputs = filter_inputs( provider_choices={ @@ -1051,7 +1051,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """RGDP.""" inputs = filter_inputs( provider_choices={ @@ -1073,7 +1073,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """RTPS.""" inputs = filter_inputs( provider_choices={ @@ -1095,7 +1095,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """SEARCH_INDEX.""" inputs = filter_inputs( provider_choices={ @@ -1117,7 +1117,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """SPENDING.""" inputs = filter_inputs( provider_choices={ @@ -1139,7 +1139,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """TRUST.""" inputs = filter_inputs( provider_choices={ @@ -1161,7 +1161,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """USBONDS.""" inputs = filter_inputs( provider_choices={ @@ -1183,7 +1183,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """VALUATION.""" inputs = filter_inputs( provider_choices={ diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py index bee573ccc90..be4e1656a0a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -34,7 +34,7 @@ class CLASS_fixedincome(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Get treasury rates. @@ -52,7 +52,7 @@ class CLASS_fixedincome(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -128,7 +128,7 @@ class CLASS_fixedincome(Container): @validate_arguments def ycrv( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Yield curve.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py index 42baa811d85..2aaf8e6f81b 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py @@ -7,7 +7,7 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -20,7 +20,7 @@ class CLASS_forex(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Forex Available Pairs. @@ -35,7 +35,7 @@ class CLASS_forex(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -149,7 +149,7 @@ class CLASS_forex(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: r"""Forex Intraday Price. @@ -169,7 +169,7 @@ class CLASS_forex(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py index b4ac3561e67..2e01558c016 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -26,7 +26,7 @@ class CLASS_news(Container): chart: bool = False, provider: Optional[Literal["benzinga", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Global News. @@ -42,7 +42,7 @@ class CLASS_news(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -143,7 +143,7 @@ class CLASS_news(Container): @validate_arguments def sectornews( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Sector news.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py index 8ce022fcb07..cfc6c340ff0 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py @@ -11,7 +11,7 @@ import pydantic.types from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -24,7 +24,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> OBBject[openbb_qa.qa_models.NormalityModel]: + ) -> Obbject[openbb_qa.qa_models.NormalityModel]: """ Normality Statistics. @@ -43,7 +43,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[NormalityModel] + Obbject[NormalityModel] Normality tests summary. See qa_models.NormalityModel for details. """ inputs = filter_inputs( @@ -66,7 +66,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> OBBject[openbb_qa.qa_models.CAPMModel]: + ) -> Obbject[openbb_qa.qa_models.CAPMModel]: """Capital Asset Pricing Model.""" inputs = filter_inputs( data=data, @@ -85,7 +85,7 @@ class CLASS_qa(Container): @validate_arguments def qqplot( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """QQ Plot.""" inputs = filter_inputs( chart=chart, @@ -107,7 +107,7 @@ class CLASS_qa(Container): threshold_start: float = 0.0, threshold_end: float = 1.5, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Omega Ratio. Parameters @@ -123,7 +123,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[List[OmegaModel]] + Obbject[List[OmegaModel]] Omega ratios. """ inputs = filter_inputs( @@ -149,7 +149,7 @@ class CLASS_qa(Container): target: str, window: pydantic.types.PositiveInt, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Kurtosis. Parameters @@ -163,7 +163,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Kurtosis. """ inputs = filter_inputs( @@ -184,7 +184,7 @@ class CLASS_qa(Container): @validate_arguments def pick( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Pick.""" inputs = filter_inputs( chart=chart, @@ -201,7 +201,7 @@ class CLASS_qa(Container): @validate_arguments def spread( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Spread.""" inputs = filter_inputs( chart=chart, @@ -218,7 +218,7 @@ class CLASS_qa(Container): @validate_arguments def rolling( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Rolling.""" inputs = filter_inputs( chart=chart, @@ -235,7 +235,7 @@ class CLASS_qa(Container): @validate_arguments def var( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Value at Risk.""" inputs = filter_inputs( chart=chart, @@ -252,7 +252,7 @@ class CLASS_qa(Container): @validate_arguments def line( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Line.""" inputs = filter_inputs( chart=chart, @@ -269,7 +269,7 @@ class CLASS_qa(Container): @validate_arguments def hist( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Histogram.""" inputs = filter_inputs( chart=chart, @@ -291,7 +291,7 @@ class CLASS_qa(Container): fuller_reg: Literal["c", "ct", "ctt", "nc"] = "c", kpss_reg: Literal["c", "ct"] = "c", chart: bool = False, - ) -> OBBject[openbb_qa.qa_models.UnitRootModel]: + ) -> Obbject[openbb_qa.qa_models.UnitRootModel]: """Unit Root Test. Augmented Dickey-Fuller test for unit root. @@ -310,7 +310,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[UnitRootModel] + Obbject[UnitRootModel] Unit root tests summary. """ inputs = filter_inputs( @@ -332,7 +332,7 @@ class CLASS_qa(Container): @validate_arguments def beta( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Beta.""" inputs = filter_inputs( chart=chart, @@ -354,7 +354,7 @@ class CLASS_qa(Container): rfr: float = 0.0, window: pydantic.types.PositiveInt = 252, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Sharpe Ratio. Parameters @@ -370,7 +370,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Sharpe ratio. """ inputs = filter_inputs( @@ -398,7 +398,7 @@ class CLASS_qa(Container): window: pydantic.types.PositiveInt = 252, adjusted: bool = False, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Sortino Ratio. For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf @@ -418,7 +418,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Sortino ratio. """ inputs = filter_inputs( @@ -441,7 +441,7 @@ class CLASS_qa(Container): @validate_arguments def cusum( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Cumulative Sum.""" inputs = filter_inputs( chart=chart, @@ -458,7 +458,7 @@ class CLASS_qa(Container): @validate_arguments def raw( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Raw.""" inputs = filter_inputs( chart=chart, @@ -475,7 +475,7 @@ class CLASS_qa(Container): @validate_arguments def cdf( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Cumulative Distribution Function.""" inputs = filter_inputs( chart=chart, @@ -492,7 +492,7 @@ class CLASS_qa(Container): @validate_arguments def decompose( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Decompose.""" inputs = filter_inputs( chart=chart, @@ -513,7 +513,7 @@ class CLASS_qa(Container): target: str, window: pydantic.types.PositiveInt, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Skewness. Parameters @@ -527,7 +527,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Skewness. """ inputs = filter_inputs( @@ -553,7 +553,7 @@ class CLASS_qa(Container): window: pydantic.types.PositiveInt, quantile_pct: pydantic.types.NonNegativeFloat = 0.5, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Quantile.""" inputs = filter_inputs( data=data, @@ -574,7 +574,7 @@ class CLASS_qa(Container): @validate_arguments def bw( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Bandwidth.""" inputs = filter_inputs( chart=chart, @@ -591,7 +591,7 @@ class CLASS_qa(Container): @validate_arguments def es( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Expected Shortfall.""" inputs = filter_inputs( chart=chart, @@ -608,7 +608,7 @@ class CLASS_qa(Container): @validate_arguments def acf( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Autocorrelation Function.""" inputs = filter_inputs( chart=chart, @@ -628,7 +628,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> OBBject[openbb_qa.qa_models.SummaryModel]: + ) -> Obbject[openbb_qa.qa_models.SummaryModel]: """Summary. Parameters @@ -640,7 +640,7 @@ class CLASS_qa(Container): Returns ------- - OBBject[SummaryModel] + Obbject[SummaryModel] Summary table. """ inputs = filter_inputs( diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py index 6afacc5a59e..89727ced9a5 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py @@ -10,7 +10,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -102,7 +102,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: r"""Load stock data for a specific ticker. @@ -122,7 +122,7 @@ class CLASS_stocks(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -239,7 +239,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["benzinga", "polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Get news for one or more stock tickers. @@ -259,7 +259,7 @@ class CLASS_stocks(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -417,7 +417,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Get valuation multiples for a stock ticker. @@ -435,7 +435,7 @@ class CLASS_stocks(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -599,7 +599,7 @@ class CLASS_stocks(Container): @validate_arguments def tob( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """View top of book for loaded ticker (US exchanges only).""" inputs = filter_inputs( chart=chart, @@ -616,7 +616,7 @@ class CLASS_stocks(Container): @validate_arguments def quote( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """View the current price for a specific stock ticker.""" inputs = filter_inputs( chart=chart, @@ -633,7 +633,7 @@ class CLASS_stocks(Container): @validate_arguments def search( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Search a specific stock ticker for analysis.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py index 85d3b27b40c..1477bf63a92 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py @@ -8,7 +8,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -24,7 +24,7 @@ class CLASS_stocks_ca(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Company peers. @@ -40,7 +40,7 @@ class CLASS_stocks_ca(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -93,7 +93,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def balance( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company balance sheet.""" inputs = filter_inputs( chart=chart, @@ -110,7 +110,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def cashflow( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company cashflow.""" inputs = filter_inputs( chart=chart, @@ -127,7 +127,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def hcorr( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company historical correlation.""" inputs = filter_inputs( chart=chart, @@ -144,7 +144,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def hist( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company historical prices.""" inputs = filter_inputs( chart=chart, @@ -161,7 +161,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def income( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company income statement.""" inputs = filter_inputs( chart=chart, @@ -178,7 +178,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def scorr( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company sector correlation.""" inputs = filter_inputs( chart=chart, @@ -195,7 +195,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def screener( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company screener.""" inputs = filter_inputs( chart=chart, @@ -212,7 +212,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def sentiment( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company sentiment.""" inputs = filter_inputs( chart=chart, @@ -229,7 +229,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def similar( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company similar.""" inputs = filter_inputs( chart=chart, @@ -246,7 +246,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def volume( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Company volume.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py index 1f64684c9e0..c06f397b0bc 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py @@ -6,7 +6,7 @@ from typing import Annotated, Literal, Optional from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -135,7 +135,7 @@ class CLASS_stocks_dd(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """SEC Filings. @@ -157,7 +157,7 @@ class CLASS_stocks_dd(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py index fcec4a9b072..4fdd4f85057 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def active( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Most active stocks by intraday trade volumes.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def arkord( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Order by ARK INvestment Management LLC.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def asc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Small cap stocks with revenue and earnings growth more than 25%.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def dividends( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -81,7 +81,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def filings( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """The most-recent form submissions to the SEC.""" inputs = filter_inputs( chart=chart, @@ -98,7 +98,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def fipo( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Future IPOs dates.""" inputs = filter_inputs( chart=chart, @@ -115,7 +115,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def gainers( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show latest top gainers.""" inputs = filter_inputs( chart=chart, @@ -132,7 +132,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def gtech( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Tech stocks with revenue and earnings growth more than 25%.""" inputs = filter_inputs( chart=chart, @@ -149,7 +149,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def hotpenny( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Today's hot penny stocks.""" inputs = filter_inputs( chart=chart, @@ -166,7 +166,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ipo( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -182,7 +182,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def losers( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show latest top losers.""" inputs = filter_inputs( chart=chart, @@ -199,7 +199,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def lowfloat( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Low float stocks under 10M shares float.""" inputs = filter_inputs( chart=chart, @@ -216,7 +216,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def pipo( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Past IPOs dates.""" inputs = filter_inputs( chart=chart, @@ -233,7 +233,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def rtat( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Top 10 retail traded stocks per day.""" inputs = filter_inputs( chart=chart, @@ -250,7 +250,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def trending( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Trending news.""" inputs = filter_inputs( chart=chart, @@ -267,7 +267,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ugs( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Undervalued stocks with revenue and earnings growth above 25%.""" inputs = filter_inputs( chart=chart, @@ -284,7 +284,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ulc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Potentially undervalued large cap stocks.""" inputs = filter_inputs( chart=chart, @@ -301,7 +301,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def upcoming( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Upcoming earnings release dates.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py index 66c01e4f7f0..ebb575ffbb2 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Price vs short interest volume""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def ctb( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Cost to borrow of stocks.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def dpotc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Dark pools (ATS) vs OTC data.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def ftd( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Fails-to-deliver data.""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def hsi( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show top high short interest stocks of over 20% ratio.""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def pos( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Dark pool short position.""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def prom( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Promising tickers based on dark pool shares regression.""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi_q( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -149,7 +149,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi_sg( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -165,7 +165,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def shorted( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Most shorted stocks.""" inputs = filter_inputs( chart=chart, @@ -182,7 +182,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def sidtc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Short interest and days to cover.""" inputs = filter_inputs( chart=chart, @@ -199,7 +199,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def spos( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Net short vs position.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py index e0847bb66c7..a4edbd658fd 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py @@ -10,7 +10,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -20,7 +20,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def analysis( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Analyse SEC filings with the help of machine learning.""" inputs = filter_inputs( chart=chart, @@ -53,7 +53,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Balance Sheet. @@ -73,7 +73,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -287,7 +287,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Balance Sheet Statement Growth. @@ -305,7 +305,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -454,7 +454,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Show Dividend Calendar for a given start and end dates. @@ -472,7 +472,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -554,7 +554,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Cash Flow Statement. @@ -574,7 +574,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -750,7 +750,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Cash Flow Statement Growth. @@ -768,7 +768,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -890,7 +890,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Executive Compensation. @@ -906,7 +906,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -996,7 +996,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Stock Split Calendar. @@ -1014,7 +1014,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1074,7 +1074,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def customer( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """List of customers of the company.""" inputs = filter_inputs( chart=chart, @@ -1091,7 +1091,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def dcfc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Determine the (historical) discounted cash flow.""" inputs = filter_inputs( chart=chart, @@ -1114,7 +1114,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Historical Dividends. @@ -1130,7 +1130,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1193,7 +1193,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def dupont( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Detailed breakdown for Return on Equity (RoE).""" inputs = filter_inputs( chart=chart, @@ -1220,7 +1220,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Earnings Calendar. @@ -1238,7 +1238,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1312,7 +1312,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Number of Employees. @@ -1328,7 +1328,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1395,7 +1395,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def enterprise( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Enterprise value.""" inputs = filter_inputs( chart=chart, @@ -1412,7 +1412,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def epsfc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Earnings Estimate by Analysts - EPS.""" inputs = filter_inputs( chart=chart, @@ -1445,7 +1445,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Analyst Estimates. @@ -1465,7 +1465,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1560,7 +1560,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fama_coe( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Fama French 3 Factor Model - Coefficient of Earnings.""" inputs = filter_inputs( chart=chart, @@ -1577,7 +1577,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fama_raw( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Fama French 3 Factor Model - Raw Data.""" inputs = filter_inputs( chart=chart, @@ -1594,7 +1594,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fraud( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Key fraud ratios including M-score, Z-score and McKee.""" inputs = filter_inputs( chart=chart, @@ -1611,7 +1611,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def growth( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Growth of financial statement items and ratios.""" inputs = filter_inputs( chart=chart, @@ -1628,7 +1628,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def historical_5( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -1660,7 +1660,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Income Statement. @@ -1680,7 +1680,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1877,7 +1877,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Income Statement Growth. @@ -1897,7 +1897,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2051,7 +2051,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Stock Insider Trading. @@ -2075,7 +2075,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2171,7 +2171,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Institutional Ownership. @@ -2191,7 +2191,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2314,7 +2314,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def key( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -2346,7 +2346,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Key Metrics. @@ -2366,7 +2366,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2543,7 +2543,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Key Executives. @@ -2559,7 +2559,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2622,7 +2622,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def mktcap( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Obtain the market capitalization or enterprise value.""" inputs = filter_inputs( chart=chart, @@ -2639,7 +2639,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def news( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -2661,7 +2661,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Company Overview. @@ -2677,7 +2677,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2812,7 +2812,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Stock Ownership. @@ -2832,7 +2832,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2967,7 +2967,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Price Target Consensus. @@ -2983,7 +2983,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3048,7 +3048,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Price Target. @@ -3064,7 +3064,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3135,7 +3135,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def rating( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Analyst prices and ratings over time of the company.""" inputs = filter_inputs( chart=chart, @@ -3152,7 +3152,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def ratios( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Extensive set of ratios over time.""" inputs = filter_inputs( chart=chart, @@ -3169,7 +3169,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def revfc( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Earning Estimate by Analysts - Revenue.""" inputs = filter_inputs( chart=chart, @@ -3202,7 +3202,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Revenue Geographic. @@ -3222,7 +3222,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3301,7 +3301,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Revenue Business Line. @@ -3321,7 +3321,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3376,7 +3376,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def rot( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Number of analyst ratings over time on a monthly basis.""" inputs = filter_inputs( chart=chart, @@ -3393,7 +3393,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def score( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Value investing scores for any time period.""" inputs = filter_inputs( chart=chart, @@ -3410,7 +3410,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def sec( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -3426,7 +3426,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def shares( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -3448,7 +3448,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Share Statistics. @@ -3464,7 +3464,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3531,7 +3531,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Historical Stock Splits. @@ -3547,7 +3547,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3604,7 +3604,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def supplier( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """List of suppliers of the company.""" inputs = filter_inputs( chart=chart, @@ -3639,7 +3639,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Earnings Call Transcript. @@ -3659,7 +3659,7 @@ class CLASS_stocks_fa(Container): Returns ------- - OBBject + Obbject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py index 6f0cfbb878e..c43689bd272 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def contracts( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return government contracts.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def government_trading( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return government trading.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def gtrades( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return government trades.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def histcont( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Historical quarterly government contracts.""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lastcontracts( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return last government contracts given out.""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lasttrades( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Last trades.""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lobbying( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Corporate lobbying details.""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def qtrcontracts( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Quarterly government contracts analysis.""" inputs = filter_inputs( chart=chart, @@ -150,7 +150,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def topbuys( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show most purchased stocks.""" inputs = filter_inputs( chart=chart, @@ -167,7 +167,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def toplobbying( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Top corporate lobbying tickers.""" inputs = filter_inputs( chart=chart, @@ -184,7 +184,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def topsells( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show most sold stocks.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py index 7a181fc20a1..07ad1e47983 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def act( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Insider activity over time.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blcp( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Big latest CEO/CFO purchaces ($25k+).""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blcs( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Big latest CEO/CFO sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blip( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Big latest insider purchaces ($25+).""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blis( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Big latest insider sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blop( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Big latest officer purchaces ($25k+).""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blos( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Big latest officer sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def filt( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Filter insiders based on preset.""" inputs = filter_inputs( chart=chart, @@ -150,7 +150,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lcb( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Latest cluster buys.""" inputs = filter_inputs( chart=chart, @@ -167,7 +167,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lins( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Last insider trading of the company.""" inputs = filter_inputs( chart=chart, @@ -184,7 +184,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lip( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Latest insider purchaces.""" inputs = filter_inputs( chart=chart, @@ -201,7 +201,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lis( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Latest insider sales.""" inputs = filter_inputs( chart=chart, @@ -218,7 +218,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lit( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Latest insider trading (all filings).""" inputs = filter_inputs( chart=chart, @@ -235,7 +235,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lpsb( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Latest penny stock buys.""" inputs = filter_inputs( chart=chart, @@ -252,7 +252,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def print_insider_data( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Print insider data.""" inputs = filter_inputs( chart=chart, @@ -269,7 +269,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def stats( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Insider stats of the company.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py index d45fb220c85..bc3cbb6c59d 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_options(Container): @validate_arguments def chains( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return options chains with greeks.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_options(Container): @validate_arguments def dte( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -47,7 +47,7 @@ class CLASS_stocks_options(Container): @validate_arguments def eodchain( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Gets option chain at a specific date.""" inputs = filter_inputs( chart=chart, @@ -64,7 +64,7 @@ class CLASS_stocks_options(Container): @validate_arguments def expirations( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return options expirations.""" inputs = filter_inputs( chart=chart, @@ -81,7 +81,7 @@ class CLASS_stocks_options(Container): @validate_arguments def grhist( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Plot option greek history.""" inputs = filter_inputs( chart=chart, @@ -98,7 +98,7 @@ class CLASS_stocks_options(Container): @validate_arguments def hist( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Plot option history.""" inputs = filter_inputs( chart=chart, @@ -115,7 +115,7 @@ class CLASS_stocks_options(Container): @validate_arguments def info( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Display option information (volatility, IV rank, etc.).""" inputs = filter_inputs( chart=chart, @@ -132,7 +132,7 @@ class CLASS_stocks_options(Container): @validate_arguments def last_price( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Return last price of an option.""" inputs = filter_inputs( chart=chart, @@ -149,7 +149,7 @@ class CLASS_stocks_options(Container): @validate_arguments def oi( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Plot option open interest.""" inputs = filter_inputs( chart=chart, @@ -166,7 +166,7 @@ class CLASS_stocks_options(Container): @validate_arguments def pcr( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Display put/call ratio for ticker.""" inputs = filter_inputs( chart=chart, @@ -183,7 +183,7 @@ class CLASS_stocks_options(Container): @validate_arguments def price( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -199,7 +199,7 @@ class CLASS_stocks_options(Container): @validate_arguments def unu( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show unusual options activity.""" inputs = filter_inputs( chart=chart, @@ -216,7 +216,7 @@ class CLASS_stocks_options(Container): @validate_arguments def voi( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Plot volume and open interest.""" inputs = filter_inputs( chart=chart, @@ -233,7 +233,7 @@ class CLASS_stocks_options(Container): @validate_arguments def vol( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Plot volume.""" inputs = filter_inputs( chart=chart, @@ -250,7 +250,7 @@ class CLASS_stocks_options(Container): @validate_arguments def vsurf( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Show 3D volatility surface.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py index 87e274b9bf6..efdde43592a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py @@ -10,7 +10,7 @@ import pydantic.types from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -27,7 +27,7 @@ class CLASS_ta(Container): drift: pydantic.types.NonNegativeInt = 1, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Average True Range is used to measure volatility, especially volatility caused by gaps or limit moves. @@ -49,7 +49,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -86,7 +86,7 @@ class CLASS_ta(Container): start_date: Optional[str] = None, end_date: Optional[str] = None, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Fibonacci Retracement Levels. @@ -101,7 +101,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -135,7 +135,7 @@ class CLASS_ta(Container): index: str = "date", offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The On Balance Volume (OBV) is a cumulative total of the up and down volume. When the close is higher than the previous close, the volume is added @@ -158,7 +158,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -190,7 +190,7 @@ class CLASS_ta(Container): length: pydantic.types.PositiveInt = 14, signal: pydantic.types.PositiveInt = 1, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.1 The indicator @@ -211,7 +211,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] List of data with the indicator applied. Examples @@ -245,7 +245,7 @@ class CLASS_ta(Container): slow: pydantic.types.PositiveInt = 10, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator is essentially a momentum indicator, but of the Accumulation-Distribution line @@ -268,7 +268,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Examples -------- @@ -296,7 +296,7 @@ class CLASS_ta(Container): @validate_arguments def tv( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """TradingView.""" inputs = filter_inputs( chart=chart, @@ -321,7 +321,7 @@ class CLASS_ta(Container): mamode: Literal["sma", "ema", "wma", "rma"] = "sma", offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Bollinger Bands consist of three lines. The middle band is a simple moving average (generally 20 periods) of the typical price (TP). The upper and lower @@ -355,7 +355,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -388,7 +388,7 @@ class CLASS_ta(Container): @validate_arguments def multi( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Plot multiple indicators on the same chart.""" inputs = filter_inputs( chart=chart, @@ -411,7 +411,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The zero lag exponential moving average (ZLEMA) indicator was created by John Ehlers and Ric Way. The idea is do a @@ -436,7 +436,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -470,7 +470,7 @@ class CLASS_ta(Container): length: int = 25, scalar: int = 100, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The word aroon is Sanskrit for "dawn's early light." The Aroon indicator attempts to show when a new trend is dawning. The indicator consists @@ -498,7 +498,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -532,7 +532,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Moving Averages are used to smooth the data in an array to help eliminate noise and identify trends. The Simple Moving Average is literally @@ -557,7 +557,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -593,7 +593,7 @@ class CLASS_ta(Container): asint: bool = False, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Demark sequential indicator @@ -614,7 +614,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -649,7 +649,7 @@ class CLASS_ta(Container): anchor: str = "D", offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Volume Weighted Average Price that measures the average typical price by volume. It is typically used with intraday charts to identify general direction. @@ -669,7 +669,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -697,7 +697,7 @@ class CLASS_ta(Container): @validate_arguments def recom( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Recommendation.""" inputs = filter_inputs( chart=chart, @@ -721,7 +721,7 @@ class CLASS_ta(Container): slow: int = 26, signal: int = 9, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Moving Average Convergence Divergence (MACD) is the difference between two Exponential Moving Averages. The Signal line is an Exponential Moving @@ -750,7 +750,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -786,7 +786,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Hull Moving Average solves the age old dilemma of making a moving average more responsive to current price activity whilst maintaining curve smoothness. @@ -808,7 +808,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -843,7 +843,7 @@ class CLASS_ta(Container): upper_length: pydantic.types.PositiveInt = 20, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Donchian Channels are three lines generated by moving average calculations that comprise an indicator formed by upper and lower @@ -867,7 +867,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -904,7 +904,7 @@ class CLASS_ta(Container): offset: pydantic.types.PositiveInt = 26, lookahead: bool = False, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that defines support and resistance, identifies trend direction, gauges momentum and provides @@ -955,7 +955,7 @@ class CLASS_ta(Container): target: str = "adj_close", period: pydantic.types.PositiveInt = 90, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Clenow Volatility Adjusted Momentum. @@ -972,7 +972,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -1004,7 +1004,7 @@ class CLASS_ta(Container): index: str = "date", offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Accumulation/Distribution Line is similar to the On Balance Volume (OBV), which sums the volume times +1/-1 based on whether the close is @@ -1030,7 +1030,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] Examples -------- @@ -1062,7 +1062,7 @@ class CLASS_ta(Container): scalar: float = 100.0, drift: int = 1, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider @@ -1083,7 +1083,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples @@ -1118,7 +1118,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ A Weighted Moving Average puts more weight on recent data and less on past data. This is done by multiplying each bar’s price by a weighting factor. Because of its @@ -1140,7 +1140,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The WMA data. Examples @@ -1174,7 +1174,7 @@ class CLASS_ta(Container): length: pydantic.types.PositiveInt = 14, scalar: pydantic.types.PositiveFloat = 0.015, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The CCI is designed to detect beginning and ending market trends. The range of 100 to -100 is the normal trading range. CCI values outside of this @@ -1195,7 +1195,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The CCI data. """ inputs = filter_inputs( @@ -1224,7 +1224,7 @@ class CLASS_ta(Container): scalar: float = 100.0, drift: int = 1, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Relative Strength Index (RSI) calculates a ratio of the recent upward price movements to the absolute price movement. The RSI ranges @@ -1249,7 +1249,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The RSI data. Examples @@ -1279,7 +1279,7 @@ class CLASS_ta(Container): @validate_arguments def summary( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Summary.""" inputs = filter_inputs( chart=chart, @@ -1302,7 +1302,7 @@ class CLASS_ta(Container): slow_d_period: pydantic.types.NonNegativeInt = 3, slow_k_period: pydantic.types.NonNegativeInt = 3, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Stochastic Oscillator measures where the close is in relation to the recent trading range. The values range from zero to 100. %D values over 75 @@ -1326,7 +1326,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The Stochastic Oscillator data. Examples @@ -1355,7 +1355,7 @@ class CLASS_ta(Container): @validate_arguments def rsp( self, chart: bool = False - ) -> OBBject[openbb_core.app.model.results.empty.Empty]: + ) -> Obbject[openbb_core.app.model.results.empty.Empty]: """Relative Strength Performance.""" inputs = filter_inputs( chart=chart, @@ -1379,7 +1379,7 @@ class CLASS_ta(Container): mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", offset: pydantic.types.NonNegativeInt = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ Keltner Channels are volatility-based bands that are placed on either side of an asset's price and can aid in determining @@ -1404,7 +1404,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The Keltner Channels data. Examples @@ -1438,7 +1438,7 @@ class CLASS_ta(Container): index: str = "date", length: pydantic.types.PositiveInt = 14, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Center of Gravity indicator, in short, is used to anticipate future price movements and to trade on price reversals as soon as they happen. However, just like other oscillators, @@ -1457,7 +1457,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The COG data. Examples @@ -1498,7 +1498,7 @@ class CLASS_ta(Container): ] = "STD", is_crypto: bool = False, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """Calculate the realized volatility quantiles over rolling windows of time. The model for calculating volatility is selectable. @@ -1540,7 +1540,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The cones data. Examples @@ -1576,7 +1576,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> OBBject[typing.List]: + ) -> Obbject[typing.List]: """ The Exponential Moving Average is a staple of technical analysis and is used in countless technical indicators. In a Simple Moving @@ -1602,7 +1602,7 @@ class CLASS_ta(Container): Returns ------- - OBBject[List[Data]] + Obbject[List[Data]] The calculated data. Examples diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py index e9d1aec3bbe..053fcbb8d6a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py @@ -179,7 +179,7 @@ class ImportDefinition: """Build the import definition.""" hint_type_list = cls.get_path_hint_type_list(path=path) code = "\nfrom openbb_core.app.static.container import Container" - code += "\nfrom openbb_core.app.modelobbject import OBBject" + code += "\nfrom openbb_core.app.model.obbject import Obbject" code += ( "\nfrom openbb_core.app.model.custom_parameter import OpenBBCustomParameter" ) @@ -244,10 +244,10 @@ class DocstringGenerator: @staticmethod def get_object_description() -> str: """Get the command output description.""" - OBBject_description = ( + obbject_description = ( "\nReturns\n" "-------\n" - "OBBject\n" + "Obbject\n" " results: List[Data]\n" " Serializable results.\n" " provider: Optional[PROVIDERS]\n" @@ -260,7 +260,7 @@ class DocstringGenerator: " Chart object.\n" ) - return OBBject_description + return obbject_description @staticmethod def get_available_providers(query_mapping: dict) -> str: @@ -582,18 +582,18 @@ class MethodDefinition: else: item_type = get_args(get_type_hints(return_type)["results"])[0] if item_type.__module__ == "builtins": - func_returns = f"OBBject[{item_type.__name__}]" + func_returns = f"Obbject[{item_type.__name__}]" # elif get_origin(item_type) == list: # inner_type = get_args(item_type)[0] # select = f"[{inner_type.__module__}.{inner_type.__name__}]" - # func_returns = f"OBBject[{item_type.__module__}.{item_type.__name__}[{select}]]" + # func_returns = f"Obbject[{item_type.__module__}.{item_type.__name__}[{select}]]" else: inner_type_name = ( item_type.__name__ if hasattr(item_type, "__name__") else item_type._name ) - func_returns = f"OBBject[{item_type.__module__}.{inner_type_name}]" + func_returns = f"Obbject[{item_type.__module__}.{inner_type_name}]" return func_returns diff --git a/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py b/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py index ac82a6eb9f5..35c6d2c6019 100644 --- a/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py +++ b/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py @@ -13,7 +13,7 @@ class MockLoggingSettings: self.user_settings = user_settings -class MockOBBject(BaseModel): +class MockObbject(BaseModel): output: Optional[str] error: Optional[str] @@ -103,12 +103,12 @@ def test_log_startup(logging_manager): @pytest.mark.parametrize( - "user_settings, system_settings, OBBject, route, func, kwargs", + "user_settings, system_settings, obbject, route, func, kwargs", [ ( "mock_settings", "mock_system", - MockOBBject(output="mock_output"), + MockObbject(output="mock_output"), "mock_route", "mock_func", {}, @@ -116,7 +116,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockOBBject(error="mock_error"), + MockObbject(error="mock_error"), "mock_route", "mock_func", {}, @@ -124,7 +124,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockOBBject(error="mock_error"), + MockObbject(error="mock_error"), "login", "mock_func", {}, @@ -132,7 +132,7 @@ def test_log_startup(logging_manager): ], ) def test_log( - logging_manager, user_settings, system_settings, OBBject, route, func, kwargs + logging_manager, user_settings, system_settings, obbject, route, func, kwargs ): with patch( "openbb_core.app.logs.logging_manager.LoggingSettings", @@ -145,7 +145,7 @@ def test_log( logging_manager.log( user_settings=user_settings, system_settings=system_settings, - OBBject=OBBject, + obbject=obbject, route=route, func=func, kwargs=kwargs, @@ -162,7 +162,7 @@ def test_log( logging_manager.log( user_settings=user_settings, system_settings=system_settings, - OBBject=OBBject, + obbject=obbject, route=route, func=mock_callable, kwargs=kwargs, @@ -171,10 +171,10 @@ def test_log( expected_log_data = { "route": route, "input": kwargs, - "error": OBBject.error, + "error": obbject.error, } - if OBBject.error: + if obbject.error: mock_error.assert_called_once_with( "ERROR: %s", json.dumps(expected_log_data), diff --git a/openbb_sdk/sdk/core/tests/app/model/test_obbject.py b/openbb_sdk/sdk/core/tests/app/model/test_obbject.py index 3bb0c20464b..3cb1252d0e5 100644 --- a/openbb_sdk/sdk/core/tests/app/model/test_obbject.py +++ b/openbb_sdk/sdk/core/tests/app/model/test_obbject.py @@ -2,16 +2,16 @@ from unittest.mock import MagicMock, patch import pandas as pd import pytest -from openbb_core.app.model.command_output import Chart, OBBject, OpenBBError +from openbb_core.app.model.command_output import Chart, Obbject, OpenBBError def test_command_output(): - co = OBBject() - assert isinstance(co, OBBject) + co = Obbject() + assert isinstance(co, Obbject) def test_fields(): - fields = OBBject.__fields__.keys() + fields = Obbject.__fields__.keys() assert "results" in fields assert "provider" in fields @@ -21,7 +21,7 @@ def test_fields(): def test_to_dataframe_no_results(): - co = OBBject() + co = Obbject() with pytest.raises(Exception): co.to_dataframe() @@ -50,7 +50,7 @@ def test_to_dataframe_no_results(): ) def test_to_dataframe(results, expected_df): # Arrange - co = OBBject(results=results) + co = Obbject(results=results) # Act and Assert if isinstance(expected_df, pd.DataFrame): @@ -87,7 +87,7 @@ def test_to_dataframe(results, expected_df): ) def test_to_dict(results, expected): # Arrange - co = OBBject(results=results) + co = Obbject(results=results) # Act result = co.to_dict() @@ -101,7 +101,7 @@ def test_to_dict(results, expected): @patch("openbb_core.app.model.command_output.Chart") def test_to_plotly_json_with_existing_chart(mock_chart, mock_charting_manager): # Arrange - mock_instance = OBBject() + mock_instance = Obbject() mock_instance.chart = Chart(content={"existing_chart_data": "some_data"}) # Act @@ -115,7 +115,7 @@ def test_to_plotly_json_with_existing_chart(mock_chart, mock_charting_manager): mock_chart.assert_not_called() -@patch("openbb_core.app.model.command_outputobbject.to_dataframe") +@patch("openbb_core.app.model.command_output.Obbject.to_dataframe") @patch("openbb_core.app.model.command_output.ChartingManager") @patch("openbb_core.app.model.command_output.Chart") def test_to_plotly_json_with_new_chart( @@ -133,7 +133,7 @@ def test_to_plotly_json_with_new_chart( return pd.DataFrame(data) # Arrange - mock_instance = OBBject() + mock_instance = Obbject() mock_charting_manager_instance = mock_charting_manager.return_value mock_charting_manager_instance.to_plotly_json.return_value = { "new_chart_data": "some_data" @@ -161,7 +161,7 @@ def test_to_plotly_json_with_new_chart( def test_show_chart_exists(): - mock_instance = OBBject() + mock_instance = Obbject() # Arrange mock_instance.chart = MagicMock(spec=Chart) @@ -173,7 +173,7 @@ def test_show_chart_exists(): def test_show_chart_not_found(): - mock_instance = OBBject() + mock_instance = Obbject() # Arrange mock_instance.chart = None diff --git a/openbb_sdk/sdk/core/tests/app/static/test_filters.py b/openbb_sdk/sdk/core/tests/app/static/test_filters.py index 607afafc48a..c1bcb6e6dbc 100644 --- a/openbb_sdk/sdk/core/tests/app/static/test_filters.py +++ b/openbb_sdk/sdk/core/tests/app/static/test_filters.py @@ -1,7 +1,7 @@ """Test the filters.py file.""" import pytest -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output from pandas import DataFrame @@ -39,6 +39,6 @@ def test_filter_inputs_df(): def test_filter_output(): """Test filter_output.""" - OBBject = filter_output(OBBject()) + obbject = filter_output(Obbject()) - assert OBBject is not None + assert obbject is not None diff --git a/openbb_sdk/sdk/core/tests/app/test_router.py b/openbb_sdk/sdk/core/tests/app/test_router.py index 0e260e74466..a501a26553b 100644 --- a/openbb_sdk/sdk/core/tests/app/test_router.py +++ b/openbb_sdk/sdk/core/tests/app/test_router.py @@ -5,7 +5,7 @@ import pytest from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -105,8 +105,8 @@ def test_check_return_error(command_validator): def test_check_return(command_validator): """Test check_return.""" - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) assert command_validator.check_return(valid_function) is None @@ -114,8 +114,8 @@ def test_check_return(command_validator): def test_check(command_validator): """Test check.""" - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) assert command_validator.check(valid_function) is None @@ -135,8 +135,8 @@ def test_command(router): """Test command.""" @router.command - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) assert valid_function @@ -182,7 +182,7 @@ def test_complete_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> OBBject: + ) -> Obbject: pass model = "StockEOD" @@ -193,8 +193,8 @@ def test_complete_signature(signature_inspector): def test_complete_signature_error(signature_inspector): """Test complete_signature.""" - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) with pytest.raises(AttributeError): signature_inspector.complete_signature(valid_function, "invalid_model") @@ -208,7 +208,7 @@ def test_validate_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> OBBject: + ) -> Obbject: pass expected_signature = { @@ -232,7 +232,7 @@ def test_inject_dependency(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> OBBject: + ) -> Obbject: pass assert signature_inspector.inject_dependency(sample_function, "cc", CommandContext) diff --git a/openbb_sdk/sdk/core/tests/test_router.py b/openbb_sdk/sdk/core/tests/test_router.py index 0e260e74466..a501a26553b 100644 --- a/openbb_sdk/sdk/core/tests/test_router.py +++ b/openbb_sdk/sdk/core/tests/test_router.py @@ -5,7 +5,7 @@ import pytest from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.modelobbject import OBBject +from openbb_core.app.model.obbject import Obbject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -105,8 +105,8 @@ def test_check_return_error(command_validator): def test_check_return(command_validator): """Test check_return.""" - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) assert command_validator.check_return(valid_function) is None @@ -114,8 +114,8 @@ def test_check_return(command_validator): def test_check(command_validator): """Test check.""" - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) assert command_validator.check(valid_function) is None @@ -135,8 +135,8 @@ def test_command(router): """Test command.""" @router.command - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) assert valid_function @@ -182,7 +182,7 @@ def test_complete_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> OBBject: + ) -> Obbject: pass model = "StockEOD" @@ -193,8 +193,8 @@ def test_complete_signature(signature_inspector): def test_complete_signature_error(signature_inspector): """Test complete_signature.""" - def valid_function() -> OBBject[int]: - return OBBject(results=[1, 2, 3]) + def valid_function() -> Obbject[int]: + return Obbject(results=[1, 2, 3]) with pytest.raises(AttributeError): signature_inspector.complete_signature(valid_function, "invalid_model") @@ -208,7 +208,7 @@ def test_validate_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> OBBject: + ) -> Obbject: pass expected_signature = { @@ -232,7 +232,7 @@ def test_inject_dependency(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> OBBject: + ) -> Obbject: pass assert signature_inspector.inject_dependency(sample_function, "cc", CommandContext) From bd98a61b93251fb6ad385e0ebf455a3fed9a203f Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 20:00:48 +0530 Subject: [PATCH 09/14] OBBject properly --- openbb_sdk/extensions/charting/README.md | 2 +- .../crypto/openbb_crypto/crypto_router.py | 6 +- .../economy/openbb_economy/economy_router.py | 138 ++++++------- .../openbb_fixedincome/fixedincome_router.py | 10 +- .../forex/openbb_forex/forex_router.py | 10 +- .../news/openbb_news/news_router.py | 10 +- .../extensions/qa/openbb_qa/qa_router.py | 118 +++++------ .../stocks/openbb_stocks/ca/ca_router.py | 46 ++--- .../stocks/openbb_stocks/dd/dd_router.py | 6 +- .../stocks/openbb_stocks/disc/disc_router.py | 74 +++---- .../stocks/openbb_stocks/dps/dps_router.py | 50 ++--- .../stocks/openbb_stocks/fa/fa_router.py | 194 +++++++++--------- .../stocks/openbb_stocks/gov/gov_router.py | 46 ++--- .../stocks/openbb_stocks/ins/ins_router.py | 66 +++--- .../openbb_stocks/options/options_router.py | 62 +++--- .../stocks/openbb_stocks/stocks_router.py | 26 +-- .../extensions/ta/openbb_ta/ta_router.py | 176 ++++++++-------- openbb_sdk/sdk/core/README.md | 10 +- .../core/openbb_core/api/router/commands.py | 18 +- .../core/openbb_core/app/command_runner.py | 12 +- .../openbb_core/app/logs/logging_manager.py | 8 +- .../openbb_core/app/model/journal_entry.py | 4 +- .../openbb_core/app/model/journal_query.py | 2 +- .../sdk/core/openbb_core/app/model/obbject.py | 2 +- openbb_sdk/sdk/core/openbb_core/app/router.py | 22 +- .../core/openbb_core/app/static/filters.py | 4 +- .../openbb_core/app/static/package/crypto.py | 6 +- .../openbb_core/app/static/package/economy.py | 80 ++++---- .../app/static/package/fixedincome.py | 8 +- .../openbb_core/app/static/package/forex.py | 10 +- .../openbb_core/app/static/package/news.py | 8 +- .../core/openbb_core/app/static/package/qa.py | 68 +++--- .../openbb_core/app/static/package/stocks.py | 20 +- .../app/static/package/stocks_ca.py | 26 +-- .../app/static/package/stocks_dd.py | 6 +- .../app/static/package/stocks_disc.py | 38 ++-- .../app/static/package/stocks_dps.py | 26 +-- .../app/static/package/stocks_fa.py | 150 +++++++------- .../app/static/package/stocks_gov.py | 24 +-- .../app/static/package/stocks_ins.py | 34 +-- .../app/static/package/stocks_options.py | 32 +-- .../core/openbb_core/app/static/package/ta.py | 114 +++++----- .../openbb_core/app/static/package_builder.py | 10 +- .../tests/app/logs/test_logging_manager.py | 8 +- .../sdk/core/tests/app/model/test_obbject.py | 24 +-- .../sdk/core/tests/app/static/test_filters.py | 4 +- openbb_sdk/sdk/core/tests/app/test_router.py | 24 +-- openbb_sdk/sdk/core/tests/test_router.py | 24 +-- 48 files changed, 933 insertions(+), 933 deletions(-) diff --git a/openbb_sdk/extensions/charting/README.md b/openbb_sdk/extensions/charting/README.md index 2a03a0906d9..a4fcdc03090 100644 --- a/openbb_sdk/extensions/charting/README.md +++ b/openbb_sdk/extensions/charting/README.md @@ -43,7 +43,7 @@ from openbb import obb stock_data = obb.stocks.load(symbol="TSLA", chart=True) ``` -This results in a `Obbject` object containing a `chart` attribute, which contains Plotly JSON data. +This results in a `OBBject` object containing a `chart` attribute, which contains Plotly JSON data. In order to display the chart, you need to call the `show()` method: diff --git a/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py b/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py index eac56a98873..222335545b1 100644 --- a/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py +++ b/openbb_sdk/extensions/crypto/openbb_crypto/crypto_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -19,6 +19,6 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Crypto Intraday Price.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/economy/openbb_economy/economy_router.py b/openbb_sdk/extensions/economy/openbb_economy/economy_router.py index 5be7f73bffb..b2db78777a1 100644 --- a/openbb_sdk/extensions/economy/openbb_economy/economy_router.py +++ b/openbb_sdk/extensions/economy/openbb_economy/economy_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -21,9 +21,9 @@ router = Router(prefix="") @router.command def corecpi( cc: CommandContext, provider_choices: ProviderChoices -) -> Obbject[Empty]: # type: ignore +) -> OBBject[Empty]: # type: ignore """CORECPI.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="MajorIndicesConstituents") @@ -32,9 +32,9 @@ def const( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get the constituents of an index.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="CPI") @@ -43,17 +43,17 @@ def cpi( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """CPI.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command def cpi_options( cc: CommandContext, provider_choices: ProviderChoices -) -> Obbject[Empty]: +) -> OBBject[Empty]: """Get the options for v3 cpi(options=True)""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="MajorIndicesEOD") @@ -62,9 +62,9 @@ def index( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get OHLCV data for an index.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="AvailableIndices") @@ -73,9 +73,9 @@ def available_indices( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """AVAILABLE_INDICES.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="RiskPremium") @@ -84,249 +84,249 @@ def risk( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Market Risk Premium.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command def macro( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: # type: ignore +) -> OBBject[Empty]: # type: ignore """Query EconDB for macro data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def macro_countries( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """MACRO_COUNTRIES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def macro_parameters( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """MACRO_PARAMETERS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def balance( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """BALANCE.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def bigmac( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """BIGMAC.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def country_codes( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """COUNTRY_CODES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def currencies( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """CURRENCIES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def debt( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """DEBT.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def events( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """EVENTS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def fgdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FGDP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def fred( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FRED.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def fred_search( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FRED Search (was fred_notes).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def futures( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """FUTURES. 2 sources""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def gdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """GDP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def glbonds( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """GLBONDS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def indices( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """INDICES.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def overview( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """OVERVIEW.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def perfmap( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """PERFMAP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def performance( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """PERFORMANCE.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def revenue( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """REVENUE.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def rgdp( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """RGDP.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def rtps( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """RTPS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def search_index( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """SEARCH_INDEX.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def spending( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """SPENDING.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def trust( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """TRUST.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def usbonds( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """USBONDS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command def valuation( cc: CommandContext, provider_choices: ProviderChoices, -) -> Obbject[Empty]: +) -> OBBject[Empty]: """VALUATION.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py b/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py index 1d3af373a0b..be418b6069d 100644 --- a/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py +++ b/openbb_sdk/extensions/fixedincome/openbb_fixedincome/fixedincome_router.py @@ -1,7 +1,7 @@ # pylint: disable=W0613:unused-argument from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -21,12 +21,12 @@ def treasury( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get treasury rates.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def ycrv() -> Obbject[Empty]: # type: ignore +def ycrv() -> OBBject[Empty]: # type: ignore """Yield curve.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/forex/openbb_forex/forex_router.py b/openbb_sdk/extensions/forex/openbb_forex/forex_router.py index 352ff04654f..d82014036ce 100644 --- a/openbb_sdk/extensions/forex/openbb_forex/forex_router.py +++ b/openbb_sdk/extensions/forex/openbb_forex/forex_router.py @@ -1,5 +1,5 @@ from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -19,9 +19,9 @@ def pairs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Forex Available Pairs.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) # pylint: disable=unused-argument @@ -31,6 +31,6 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Forex Intraday Price.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/news/openbb_news/news_router.py b/openbb_sdk/extensions/news/openbb_news/news_router.py index 9cd0798c0cf..88c0edba943 100644 --- a/openbb_sdk/extensions/news/openbb_news/news_router.py +++ b/openbb_sdk/extensions/news/openbb_news/news_router.py @@ -2,7 +2,7 @@ """News Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -22,12 +22,12 @@ def globalnews( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Global News.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def sectornews() -> Obbject[Empty]: # type: ignore +def sectornews() -> OBBject[Empty]: # type: ignore """Sector news.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py index c7522cfade2..79eccc03dbf 100644 --- a/openbb_sdk/extensions/qa/openbb_qa/qa_router.py +++ b/openbb_sdk/extensions/qa/openbb_qa/qa_router.py @@ -4,7 +4,7 @@ import numpy as np import pandas as pd import pandas_ta as ta import statsmodels.api as sm -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router from openbb_core.app.utils import ( @@ -34,7 +34,7 @@ router = Router(prefix="") @router.command(methods=["POST"]) -def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: +def normality(data: List[Data], target: str) -> OBBject[NormalityModel]: """ Normality Statistics. @@ -53,7 +53,7 @@ def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: Returns ------- - Obbject[NormalityModel] + OBBject[NormalityModel] Normality tests summary. See qa_models.NormalityModel for details. """ @@ -74,11 +74,11 @@ def normality(data: List[Data], target: str) -> Obbject[NormalityModel]: kolmogorov_smirnov=TestModel(statistic=ks_statistic, p_value=ks_pvalue), ) - return Obbject(results=norm_summary) + return OBBject(results=norm_summary) @router.command(methods=["POST"]) -def capm(data: List[Data], target: str) -> Obbject[CAPMModel]: +def capm(data: List[Data], target: str) -> OBBject[CAPMModel]: """Capital Asset Pricing Model.""" df = basemodel_to_df(data) @@ -106,13 +106,13 @@ def capm(data: List[Data], target: str) -> Obbject[CAPMModel]: idiosyncratic_risk=1 - model.rsquared, ) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def qqplot() -> Obbject[Empty]: +def qqplot() -> OBBject[Empty]: """QQ Plot.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -121,7 +121,7 @@ def om( target: str, threshold_start: float = 0.0, threshold_end: float = 1.5, -) -> Obbject[List[OmegaModel]]: +) -> OBBject[List[OmegaModel]]: """Omega Ratio. Parameters @@ -137,7 +137,7 @@ def om( Returns ------- - Obbject[List[OmegaModel]] + OBBject[List[OmegaModel]] Omega ratios. """ @@ -156,11 +156,11 @@ def om( for i in threshold: results.append(OmegaModel(threshold=i, omega=get_omega_ratio(series_target, i))) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Data]]: +def kurtosis(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Data]]: """Kurtosis. Parameters @@ -174,7 +174,7 @@ def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Kurtosis. """ df = basemodel_to_df(data) @@ -182,43 +182,43 @@ def kurtosis(data: List[Data], target: str, window: PositiveInt) -> Obbject[List results = ta.kurtosis(close=series_target, length=window).dropna() results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def pick() -> Obbject[Empty]: +def pick() -> OBBject[Empty]: """Pick.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def spread() -> Obbject[Empty]: +def spread() -> OBBject[Empty]: """Spread.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def rolling() -> Obbject[Empty]: +def rolling() -> OBBject[Empty]: """Rolling.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def var() -> Obbject[Empty]: +def var() -> OBBject[Empty]: """Value at Risk.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def line() -> Obbject[Empty]: +def line() -> OBBject[Empty]: """Line.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def hist() -> Obbject[Empty]: +def hist() -> OBBject[Empty]: """Histogram.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -227,7 +227,7 @@ def unitroot( target: str, fuller_reg: Literal["c", "ct", "ctt", "nc", "c"] = "c", kpss_reg: Literal["c", "ct"] = "c", -) -> Obbject[UnitRootModel]: +) -> OBBject[UnitRootModel]: """Unit Root Test. Augmented Dickey-Fuller test for unit root. @@ -246,7 +246,7 @@ def unitroot( Returns ------- - Obbject[UnitRootModel] + OBBject[UnitRootModel] Unit root tests summary. """ @@ -270,19 +270,19 @@ def unitroot( nlags=kpss[2], ), ) - return Obbject(results=unitroot_summary) + return OBBject(results=unitroot_summary) @router.command(methods=["POST"]) -def beta() -> Obbject[Empty]: +def beta() -> OBBject[Empty]: """Beta.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) def sh( data: List[Data], target: str, rfr: float = 0.0, window: PositiveInt = 252 -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Sharpe Ratio. Parameters @@ -298,7 +298,7 @@ def sh( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sharpe ratio. """ @@ -311,7 +311,7 @@ def sh( results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -321,7 +321,7 @@ def so( target_return: float = 0.0, window: PositiveInt = 252, adjusted: bool = False, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Sortino Ratio. For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf @@ -341,7 +341,7 @@ def so( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sortino ratio. """ @@ -359,35 +359,35 @@ def so( results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def cusum() -> Obbject[Empty]: +def cusum() -> OBBject[Empty]: """Cumulative Sum.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def raw() -> Obbject[Empty]: +def raw() -> OBBject[Empty]: """Raw.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def cdf() -> Obbject[Empty]: +def cdf() -> OBBject[Empty]: """Cumulative Distribution Function.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def decompose() -> Obbject[Empty]: +def decompose() -> OBBject[Empty]: """Decompose.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Data]]: +def skew(data: List[Data], target: str, window: PositiveInt) -> OBBject[List[Data]]: """Skewness. Parameters @@ -401,7 +401,7 @@ def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Dat Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Skewness. """ df = basemodel_to_df(data) @@ -409,7 +409,7 @@ def skew(data: List[Data], target: str, window: PositiveInt) -> Obbject[List[Dat results = ta.skew(close=series_target, length=window).dropna() results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -418,7 +418,7 @@ def quantile( target: str, window: PositiveInt, quantile_pct: NonNegativeFloat = 0.5, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Quantile.""" df = basemodel_to_df(data) @@ -430,29 +430,29 @@ def quantile( results = df_to_basemodel(results) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def bw() -> Obbject[Empty]: +def bw() -> OBBject[Empty]: """Bandwidth.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def es() -> Obbject[Empty]: +def es() -> OBBject[Empty]: """Expected Shortfall.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def acf() -> Obbject[Empty]: +def acf() -> OBBject[Empty]: """Autocorrelation Function.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) -def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: +def summary(data: List[Data], target: str) -> OBBject[SummaryModel]: """Summary. Parameters @@ -464,7 +464,7 @@ def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: Returns ------- - Obbject[SummaryModel] + OBBject[SummaryModel] Summary table. """ @@ -485,4 +485,4 @@ def summary(data: List[Data], target: str) -> Obbject[SummaryModel]: max=df_stats.loc["max"], ) - return Obbject(results=results) + return OBBject(results=results) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py index 7e69e283f07..bdc4a11b64b 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ca/ca_router.py @@ -2,7 +2,7 @@ """Comparison Analysis Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -22,66 +22,66 @@ def peers( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Company peers.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def balance() -> Obbject[Empty]: # type: ignore +def balance() -> OBBject[Empty]: # type: ignore """Company balance sheet.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def cashflow() -> Obbject[Empty]: # type: ignore +def cashflow() -> OBBject[Empty]: # type: ignore """Company cashflow.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hcorr() -> Obbject[Empty]: # type: ignore +def hcorr() -> OBBject[Empty]: # type: ignore """Company historical correlation.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hist() -> Obbject[Empty]: # type: ignore +def hist() -> OBBject[Empty]: # type: ignore """Company historical prices.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def income() -> Obbject[Empty]: # type: ignore +def income() -> OBBject[Empty]: # type: ignore """Company income statement.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def scorr() -> Obbject[Empty]: # type: ignore +def scorr() -> OBBject[Empty]: # type: ignore """Company sector correlation.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def screener() -> Obbject[Empty]: # type: ignore +def screener() -> OBBject[Empty]: # type: ignore """Company screener.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def sentiment() -> Obbject[Empty]: # type: ignore +def sentiment() -> OBBject[Empty]: # type: ignore """Company sentiment.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def similar() -> Obbject[Empty]: # type: ignore +def similar() -> OBBject[Empty]: # type: ignore """Company similar.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def volume() -> Obbject[Empty]: # type: ignore +def volume() -> OBBject[Empty]: # type: ignore """Company volume.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py index b4344d961b9..2d554b8fd98 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/dd/dd_router.py @@ -2,7 +2,7 @@ """Due Diligence Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -21,6 +21,6 @@ def sec( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """SEC Filings.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py index e5a040040be..a3ac1e435af 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/disc/disc_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,106 +6,106 @@ router = Router(prefix="/disc") @router.command -def active() -> Obbject[Empty]: # type: ignore +def active() -> OBBject[Empty]: # type: ignore """Most active stocks by intraday trade volumes.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def arkord() -> Obbject[Empty]: # type: ignore +def arkord() -> OBBject[Empty]: # type: ignore """Order by ARK INvestment Management LLC.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def asc() -> Obbject[Empty]: # type: ignore +def asc() -> OBBject[Empty]: # type: ignore """Small cap stocks with revenue and earnings growth more than 25%.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dividends() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def dividends() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def filings() -> Obbject[Empty]: # type: ignore +def filings() -> OBBject[Empty]: # type: ignore """The most-recent form submissions to the SEC.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def fipo() -> Obbject[Empty]: # type: ignore +def fipo() -> OBBject[Empty]: # type: ignore """Future IPOs dates.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def gainers() -> Obbject[Empty]: # type: ignore +def gainers() -> OBBject[Empty]: # type: ignore """Show latest top gainers.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def gtech() -> Obbject[Empty]: # type: ignore +def gtech() -> OBBject[Empty]: # type: ignore """Tech stocks with revenue and earnings growth more than 25%.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hotpenny() -> Obbject[Empty]: # type: ignore +def hotpenny() -> OBBject[Empty]: # type: ignore """Today's hot penny stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ipo() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def ipo() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def losers() -> Obbject[Empty]: # type: ignore +def losers() -> OBBject[Empty]: # type: ignore """Show latest top losers.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lowfloat() -> Obbject[Empty]: # type: ignore +def lowfloat() -> OBBject[Empty]: # type: ignore """Low float stocks under 10M shares float.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def pipo() -> Obbject[Empty]: # type: ignore +def pipo() -> OBBject[Empty]: # type: ignore """Past IPOs dates.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def rtat() -> Obbject[Empty]: # type: ignore +def rtat() -> OBBject[Empty]: # type: ignore """Top 10 retail traded stocks per day.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def trending() -> Obbject[Empty]: # type: ignore +def trending() -> OBBject[Empty]: # type: ignore """Trending news.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ugs() -> Obbject[Empty]: # type: ignore +def ugs() -> OBBject[Empty]: # type: ignore """Undervalued stocks with revenue and earnings growth above 25%.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ulc() -> Obbject[Empty]: # type: ignore +def ulc() -> OBBject[Empty]: # type: ignore """Potentially undervalued large cap stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def upcoming() -> Obbject[Empty]: # type: ignore +def upcoming() -> OBBject[Empty]: # type: ignore """Upcoming earnings release dates.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py index dc517ac826f..2670a591d70 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/dps/dps_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,70 +6,70 @@ router = Router(prefix="/dps") @router.command -def psi() -> Obbject[Empty]: # type: ignore +def psi() -> OBBject[Empty]: # type: ignore """Price vs short interest volume""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ctb() -> Obbject[Empty]: # type: ignore +def ctb() -> OBBject[Empty]: # type: ignore """Cost to borrow of stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dpotc() -> Obbject[Empty]: # type: ignore +def dpotc() -> OBBject[Empty]: # type: ignore """Dark pools (ATS) vs OTC data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ftd() -> Obbject[Empty]: # type: ignore +def ftd() -> OBBject[Empty]: # type: ignore """Fails-to-deliver data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hsi() -> Obbject[Empty]: # type: ignore +def hsi() -> OBBject[Empty]: # type: ignore """Show top high short interest stocks of over 20% ratio.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def pos() -> Obbject[Empty]: # type: ignore +def pos() -> OBBject[Empty]: # type: ignore """Dark pool short position.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def prom() -> Obbject[Empty]: # type: ignore +def prom() -> OBBject[Empty]: # type: ignore """Promising tickers based on dark pool shares regression.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def psi_q() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def psi_q() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def psi_sg() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def psi_sg() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def shorted() -> Obbject[Empty]: # type: ignore +def shorted() -> OBBject[Empty]: # type: ignore """Most shorted stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def sidtc() -> Obbject[Empty]: # type: ignore +def sidtc() -> OBBject[Empty]: # type: ignore """Short interest and days to cover.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def spos() -> Obbject[Empty]: # type: ignore +def spos() -> OBBject[Empty]: # type: ignore """Net short vs position.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py index 233202d3b21..8e036dba5fb 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/fa/fa_router.py @@ -2,7 +2,7 @@ """Fundamental Analysis Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -17,9 +17,9 @@ router = Router(prefix="/fa") @router.command -def analysis() -> Obbject[Empty]: # type: ignore +def analysis() -> OBBject[Empty]: # type: ignore """Analyse SEC filings with the help of machine learning.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="BalanceSheet") @@ -28,9 +28,9 @@ def balance( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Balance Sheet.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="BalanceSheetGrowth") @@ -39,9 +39,9 @@ def balance_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Balance Sheet Statement Growth.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="DividendCalendar") @@ -50,9 +50,9 @@ def cal( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Show Dividend Calendar for a given start and end dates.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="CashFlowStatement") @@ -61,9 +61,9 @@ def cash( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Cash Flow Statement.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="CashFlowStatementGrowth") @@ -72,9 +72,9 @@ def cash_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Cash Flow Statement Growth.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="ExecutiveCompensation") @@ -83,9 +83,9 @@ def comp( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Executive Compensation.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockSplitCalendar") @@ -94,21 +94,21 @@ def comsplit( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Stock Split Calendar.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def customer() -> Obbject[Empty]: # type: ignore +def customer() -> OBBject[Empty]: # type: ignore """List of customers of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dcfc() -> Obbject[Empty]: # type: ignore +def dcfc() -> OBBject[Empty]: # type: ignore """Determine the (historical) discounted cash flow.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="HistoricalDividends") @@ -117,15 +117,15 @@ def divs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Historical Dividends.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def dupont() -> Obbject[Empty]: # type: ignore +def dupont() -> OBBject[Empty]: # type: ignore """Detailed breakdown for Return on Equity (RoE).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="EarningsCalendar") @@ -134,9 +134,9 @@ def earning( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Earnings Calendar.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="HistoricalEmployees") @@ -145,21 +145,21 @@ def emp( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Number of Employees.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def enterprise() -> Obbject[Empty]: # type: ignore +def enterprise() -> OBBject[Empty]: # type: ignore """Enterprise value.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def epsfc() -> Obbject[Empty]: # type: ignore +def epsfc() -> OBBject[Empty]: # type: ignore """Earnings Estimate by Analysts - EPS.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="AnalystEstimates") @@ -168,38 +168,38 @@ def est( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Analyst Estimates.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def fama_coe() -> Obbject[Empty]: # type: ignore +def fama_coe() -> OBBject[Empty]: # type: ignore """Fama French 3 Factor Model - Coefficient of Earnings.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def fama_raw() -> Obbject[Empty]: # type: ignore +def fama_raw() -> OBBject[Empty]: # type: ignore """Fama French 3 Factor Model - Raw Data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def fraud() -> Obbject[Empty]: # type: ignore +def fraud() -> OBBject[Empty]: # type: ignore """Key fraud ratios including M-score, Z-score and McKee.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def growth() -> Obbject[Empty]: # type: ignore +def growth() -> OBBject[Empty]: # type: ignore """Growth of financial statement items and ratios.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def historical_5() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def historical_5() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="IncomeStatement") @@ -208,9 +208,9 @@ def income( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Income Statement.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="IncomeStatementGrowth") @@ -219,9 +219,9 @@ def income_growth( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Income Statement Growth.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockInsiderTrading") @@ -230,9 +230,9 @@ def ins( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Stock Insider Trading.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="InstitutionalOwnership") @@ -241,14 +241,14 @@ def ins_own( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Institutional Ownership.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def key() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def key() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="KeyMetrics") @@ -257,9 +257,9 @@ def metrics( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Key Metrics.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="KeyExecutives") @@ -268,20 +268,20 @@ def mgmt( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Key Executives.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def mktcap() -> Obbject[Empty]: # type: ignore +def mktcap() -> OBBject[Empty]: # type: ignore """Obtain the market capitalization or enterprise value.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command # CHECK IF NEWS IS NEEDED HERE -def news() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def news() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="CompanyOverview") @@ -290,9 +290,9 @@ def overview( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Company Overview.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockOwnership") @@ -301,9 +301,9 @@ def own( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Stock Ownership.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="PriceTargetConsensus") @@ -312,9 +312,9 @@ def pt( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Price Target Consensus.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="PriceTarget") @@ -323,27 +323,27 @@ def pta( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Price Target.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def rating() -> Obbject[Empty]: # type: ignore +def rating() -> OBBject[Empty]: # type: ignore """Analyst prices and ratings over time of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def ratios() -> Obbject[Empty]: # type: ignore +def ratios() -> OBBject[Empty]: # type: ignore """Extensive set of ratios over time.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def revfc() -> Obbject[Empty]: # type: ignore +def revfc() -> OBBject[Empty]: # type: ignore """Earning Estimate by Analysts - Revenue.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="RevenueGeographic") @@ -352,9 +352,9 @@ def revgeo( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Revenue Geographic.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="RevenueBusinessLine") @@ -363,31 +363,31 @@ def revseg( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Revenue Business Line.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def rot() -> Obbject[Empty]: # type: ignore +def rot() -> OBBject[Empty]: # type: ignore """Number of analyst ratings over time on a monthly basis.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def score() -> Obbject[Empty]: # type: ignore +def score() -> OBBject[Empty]: # type: ignore """Value investing scores for any time period.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def sec() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def sec() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def shares() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def shares() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command(model="ShareStatistics") @@ -396,9 +396,9 @@ def shrs( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Share Statistics.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="HistoricalStockSplits") @@ -407,15 +407,15 @@ def split( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Historical Stock Splits.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def supplier() -> Obbject[Empty]: # type: ignore +def supplier() -> OBBject[Empty]: # type: ignore """List of suppliers of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(model="EarningsCallTranscript") @@ -424,6 +424,6 @@ def transcript( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Earnings Call Transcript.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py index 737ea0b0051..f1ed355720d 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/gov/gov_router.py @@ -1,7 +1,7 @@ """Due Diligence Router.""" -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -9,66 +9,66 @@ router = Router(prefix="/gov") @router.command -def contracts() -> Obbject[Empty]: # type: ignore +def contracts() -> OBBject[Empty]: # type: ignore """Return government contracts.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def government_trading() -> Obbject[Empty]: # type: ignore +def government_trading() -> OBBject[Empty]: # type: ignore """Return government trading.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command # Isn't this one the same as the one above? -def gtrades() -> Obbject[Empty]: # type: ignore +def gtrades() -> OBBject[Empty]: # type: ignore """Return government trades.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def histcont() -> Obbject[Empty]: # type: ignore +def histcont() -> OBBject[Empty]: # type: ignore """Historical quarterly government contracts.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lastcontracts() -> Obbject[Empty]: # type: ignore +def lastcontracts() -> OBBject[Empty]: # type: ignore """Return last government contracts given out.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lasttrades() -> Obbject[Empty]: # type: ignore +def lasttrades() -> OBBject[Empty]: # type: ignore """Last trades.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lobbying() -> Obbject[Empty]: # type: ignore +def lobbying() -> OBBject[Empty]: # type: ignore """Corporate lobbying details.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def qtrcontracts() -> Obbject[Empty]: # type: ignore +def qtrcontracts() -> OBBject[Empty]: # type: ignore """Quarterly government contracts analysis.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def topbuys() -> Obbject[Empty]: # type: ignore +def topbuys() -> OBBject[Empty]: # type: ignore """Show most purchased stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def toplobbying() -> Obbject[Empty]: # type: ignore +def toplobbying() -> OBBject[Empty]: # type: ignore """Top corporate lobbying tickers.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def topsells() -> Obbject[Empty]: # type: ignore +def topsells() -> OBBject[Empty]: # type: ignore """Show most sold stocks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py index 06d3b757771..ebf2307817c 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/ins/ins_router.py @@ -1,7 +1,7 @@ """Due Diligence Router.""" -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -9,96 +9,96 @@ router = Router(prefix="/ins") @router.command -def act() -> Obbject[Empty]: # type: ignore +def act() -> OBBject[Empty]: # type: ignore """Insider activity over time.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blcp() -> Obbject[Empty]: # type: ignore +def blcp() -> OBBject[Empty]: # type: ignore """Big latest CEO/CFO purchaces ($25k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blcs() -> Obbject[Empty]: # type: ignore +def blcs() -> OBBject[Empty]: # type: ignore """Big latest CEO/CFO sales ($100k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blip() -> Obbject[Empty]: # type: ignore +def blip() -> OBBject[Empty]: # type: ignore """Big latest insider purchaces ($25+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blis() -> Obbject[Empty]: # type: ignore +def blis() -> OBBject[Empty]: # type: ignore """Big latest insider sales ($100k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blop() -> Obbject[Empty]: # type: ignore +def blop() -> OBBject[Empty]: # type: ignore """Big latest officer purchaces ($25k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def blos() -> Obbject[Empty]: # type: ignore +def blos() -> OBBject[Empty]: # type: ignore """Big latest officer sales ($100k+).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command # Can't use filter because it's a python keyword -def filt() -> Obbject[Empty]: # type: ignore +def filt() -> OBBject[Empty]: # type: ignore """Filter insiders based on preset.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lcb() -> Obbject[Empty]: # type: ignore +def lcb() -> OBBject[Empty]: # type: ignore """Latest cluster buys.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lins() -> Obbject[Empty]: # type: ignore +def lins() -> OBBject[Empty]: # type: ignore """Last insider trading of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lip() -> Obbject[Empty]: # type: ignore +def lip() -> OBBject[Empty]: # type: ignore """Latest insider purchaces.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lis() -> Obbject[Empty]: # type: ignore +def lis() -> OBBject[Empty]: # type: ignore """Latest insider sales.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lit() -> Obbject[Empty]: # type: ignore +def lit() -> OBBject[Empty]: # type: ignore """Latest insider trading (all filings).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def lpsb() -> Obbject[Empty]: # type: ignore +def lpsb() -> OBBject[Empty]: # type: ignore """Latest penny stock buys.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def print_insider_data() -> Obbject[Empty]: # type: ignore +def print_insider_data() -> OBBject[Empty]: # type: ignore """Print insider data.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def stats() -> Obbject[Empty]: # type: ignore +def stats() -> OBBject[Empty]: # type: ignore """Insider stats of the company.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py index e2416f75c90..db744461ca0 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/options/options_router.py @@ -1,4 +1,4 @@ -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router @@ -6,88 +6,88 @@ router = Router(prefix="/options") @router.command -def chains() -> Obbject[Empty]: # type: ignore +def chains() -> OBBject[Empty]: # type: ignore """Return options chains with greeks.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def dte() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def dte() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def eodchain() -> Obbject[Empty]: # type: ignore +def eodchain() -> OBBject[Empty]: # type: ignore """Gets option chain at a specific date.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def expirations() -> Obbject[Empty]: # type: ignore +def expirations() -> OBBject[Empty]: # type: ignore """Return options expirations.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def grhist() -> Obbject[Empty]: # type: ignore +def grhist() -> OBBject[Empty]: # type: ignore """Plot option greek history.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def hist() -> Obbject[Empty]: # type: ignore +def hist() -> OBBject[Empty]: # type: ignore """Plot option history.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def info() -> Obbject[Empty]: # type: ignore +def info() -> OBBject[Empty]: # type: ignore """Display option information (volatility, IV rank, etc.).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def last_price() -> Obbject[Empty]: # type: ignore +def last_price() -> OBBject[Empty]: # type: ignore """Return last price of an option.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def oi() -> Obbject[Empty]: # type: ignore +def oi() -> OBBject[Empty]: # type: ignore """Plot option open interest.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def pcr() -> Obbject[Empty]: # type: ignore +def pcr() -> OBBject[Empty]: # type: ignore """Display put/call ratio for ticker.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def price() -> Obbject[Empty]: # type: ignore - return Obbject(results=Empty()) +def price() -> OBBject[Empty]: # type: ignore + return OBBject(results=Empty()) @router.command -def unu() -> Obbject[Empty]: # type: ignore +def unu() -> OBBject[Empty]: # type: ignore """Show unusual options activity.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def voi() -> Obbject[Empty]: # type: ignore +def voi() -> OBBject[Empty]: # type: ignore """Plot volume and open interest.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def vol() -> Obbject[Empty]: # type: ignore +def vol() -> OBBject[Empty]: # type: ignore """Plot volume.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def vsurf() -> Obbject[Empty]: # type: ignore +def vsurf() -> OBBject[Empty]: # type: ignore """Show 3D volatility surface.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py b/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py index f0e147c8921..0ae208a6792 100644 --- a/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py +++ b/openbb_sdk/extensions/stocks/openbb_stocks/stocks_router.py @@ -2,7 +2,7 @@ """Stocks Router.""" from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.provider_interface import ( ExtraParams, @@ -39,9 +39,9 @@ def load( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Load stock data for a specific ticker.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockNews") @@ -50,9 +50,9 @@ def news( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get news for one or more stock tickers.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command(model="StockMultiples") @@ -61,24 +61,24 @@ def multiples( provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Get valuation multiples for a stock ticker.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) @router.command -def tob() -> Obbject[Empty]: +def tob() -> OBBject[Empty]: """View top of book for loaded ticker (US exchanges only).""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def quote() -> Obbject[Empty]: +def quote() -> OBBject[Empty]: """View the current price for a specific stock ticker.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command -def search() -> Obbject[Empty]: +def search() -> OBBject[Empty]: """Search a specific stock ticker for analysis.""" - return Obbject(results=Empty()) + return OBBject(results=Empty()) diff --git a/openbb_sdk/extensions/ta/openbb_ta/ta_router.py b/openbb_sdk/extensions/ta/openbb_ta/ta_router.py index e5076baeb6f..775580f6ee8 100644 --- a/openbb_sdk/extensions/ta/openbb_ta/ta_router.py +++ b/openbb_sdk/extensions/ta/openbb_ta/ta_router.py @@ -1,7 +1,7 @@ from typing import List, Literal, Optional import pandas as pd -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.results.empty import Empty from openbb_core.app.router import Router from openbb_core.app.utils import ( @@ -31,7 +31,7 @@ def atr( mamode: Literal["rma", "ema", "sma", "wma"] = "rma", drift: NonNegativeInt = 1, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Average True Range is used to measure volatility, especially volatility caused by gaps or limit moves. @@ -53,7 +53,7 @@ def atr( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -71,7 +71,7 @@ def atr( results = df_to_basemodel(df_target.join(df_atr, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -82,7 +82,7 @@ def fib( period: PositiveInt = 120, start_date: Optional[str] = None, end_date: Optional[str] = None, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Fibonacci Retracement Levels. @@ -97,7 +97,7 @@ def fib( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -132,7 +132,7 @@ def fib( results = df_to_basemodel(df_fib) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -140,7 +140,7 @@ def obv( data: List[Data], index: str = "date", offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The On Balance Volume (OBV) is a cumulative total of the up and down volume. When the close is higher than the previous close, the volume is added @@ -161,7 +161,7 @@ def obv( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -177,7 +177,7 @@ def obv( results = df_to_basemodel(df_target.join(df_obv, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -186,7 +186,7 @@ def fisher( index: str = "date", length: PositiveInt = 14, signal: PositiveInt = 1, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.1 The indicator @@ -207,7 +207,7 @@ def fisher( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -223,7 +223,7 @@ def fisher( results = df_to_basemodel(df_target.join(df_fisher, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -233,7 +233,7 @@ def adosc( fast: PositiveInt = 3, slow: PositiveInt = 10, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator is essentially a momentum indicator, but of the Accumulation-Distribution line @@ -256,7 +256,7 @@ def adosc( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -271,16 +271,16 @@ def adosc( results = df_to_basemodel(df_target.join(df_adosc, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def tv() -> Obbject[Empty]: +def tv() -> OBBject[Empty]: """TradingView.""" # TODO : probably out of scope for now - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -292,7 +292,7 @@ def bbands( std: NonNegativeFloat = 2, mamode: Literal["sma", "ema", "wma", "rma"] = "sma", offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Bollinger Bands consist of three lines. The middle band is a simple moving average (generally 20 periods) of the typical price (TP). The upper and lower @@ -324,7 +324,7 @@ def bbands( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -344,16 +344,16 @@ def bbands( results = df_to_basemodel(df_target.join(bbands_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def multi() -> Obbject[Empty]: +def multi() -> OBBject[Empty]: """Plot multiple indicators on the same chart.""" # TODO : probably out of scope for now - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -363,7 +363,7 @@ def zlma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The zero lag exponential moving average (ZLEMA) indicator was created by John Ehlers and Ric Way. The idea is do a @@ -388,7 +388,7 @@ def zlma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -403,7 +403,7 @@ def zlma( results = df_to_basemodel(df_target.join(zlma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -412,7 +412,7 @@ def aroon( index: str = "date", length: int = 25, scalar: int = 100, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The word aroon is Sanskrit for "dawn's early light." The Aroon indicator attempts to show when a new trend is dawning. The indicator consists @@ -438,7 +438,7 @@ def aroon( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -453,7 +453,7 @@ def aroon( results = df_to_basemodel(df_target.join(aroon_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -463,7 +463,7 @@ def sma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Moving Averages are used to smooth the data in an array to help eliminate noise and identify trends. The Simple Moving Average is literally @@ -488,7 +488,7 @@ def sma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -503,7 +503,7 @@ def sma( results = df_to_basemodel(df_target.join(sma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -514,7 +514,7 @@ def demark( show_all: bool = False, asint: bool = False, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Demark sequential indicator @@ -535,7 +535,7 @@ def demark( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -553,7 +553,7 @@ def demark( results = df_to_basemodel(df_target.join(demark_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -562,7 +562,7 @@ def vwap( index: str = "date", anchor: str = "D", offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Volume Weighted Average Price that measures the average typical price by volume. It is typically used with intraday charts to identify general direction. @@ -582,7 +582,7 @@ def vwap( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -598,17 +598,17 @@ def vwap( results = df_to_basemodel(df_target.join(df_vwap, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def recom() -> Obbject[Empty]: +def recom() -> OBBject[Empty]: """Recommendation.""" # TODO : this command does only a call to a Tradingview's endpoint # thus, it should probably be implement on a provider level - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -619,7 +619,7 @@ def macd( fast: int = 12, slow: int = 26, signal: int = 9, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Moving Average Convergence Divergence (MACD) is the difference between two Exponential Moving Averages. The Signal line is an Exponential Moving @@ -646,7 +646,7 @@ def macd( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -663,7 +663,7 @@ def macd( results = df_to_basemodel(df_target.join(macd_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -673,7 +673,7 @@ def hma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Hull Moving Average solves the age old dilemma of making a moving average more responsive to current price activity whilst maintaining curve smoothness. @@ -695,7 +695,7 @@ def hma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -710,7 +710,7 @@ def hma( results = df_to_basemodel(df_target.join(hma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -720,7 +720,7 @@ def donchian( lower_length: PositiveInt = 20, upper_length: PositiveInt = 20, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Donchian Channels are three lines generated by moving average calculations that comprise an indicator formed by upper and lower @@ -744,7 +744,7 @@ def donchian( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -764,7 +764,7 @@ def donchian( results = df_to_basemodel(df_target.join(donchian_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -776,7 +776,7 @@ def ichimoku( lagging: PositiveInt = 52, offset: PositiveInt = 26, lookahead: bool = False, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that defines support and resistance, identifies trend direction, gauges momentum and provides @@ -816,7 +816,7 @@ def ichimoku( results = df_to_basemodel(df_result, index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -825,7 +825,7 @@ def clenow( index: str = "date", target: str = "adj_close", period: PositiveInt = 90, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Clenow Volatility Adjusted Momentum. @@ -842,7 +842,7 @@ def clenow( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -868,11 +868,11 @@ def clenow( results = df_to_basemodel(df_clenow) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[Data]]: +def ad(data: List[Data], index: str = "date", offset: int = 0) -> OBBject[List[Data]]: """ The Accumulation/Distribution Line is similar to the On Balance Volume (OBV), which sums the volume times +1/-1 based on whether the close is @@ -896,7 +896,7 @@ def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[D Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -911,7 +911,7 @@ def ad(data: List[Data], index: str = "date", offset: int = 0) -> Obbject[List[D results = df_to_basemodel(df_target.join(ad_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -921,7 +921,7 @@ def adx( length: int = 50, scalar: float = 100.0, drift: int = 1, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider @@ -942,7 +942,7 @@ def adx( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -959,7 +959,7 @@ def adx( results = df_to_basemodel(df_target.join(adx_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -969,7 +969,7 @@ def wma( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ A Weighted Moving Average puts more weight on recent data and less on past data. This is done by multiplying each bar’s price by a weighting factor. Because of its @@ -991,7 +991,7 @@ def wma( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The WMA data. Examples @@ -1006,7 +1006,7 @@ def wma( results = df_to_basemodel(df_target.join(wma_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1015,7 +1015,7 @@ def cci( index: str = "date", length: PositiveInt = 14, scalar: PositiveFloat = 0.015, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The CCI is designed to detect beginning and ending market trends. The range of 100 to -100 is the normal trading range. CCI values outside of this @@ -1036,7 +1036,7 @@ def cci( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The CCI data. """ @@ -1046,7 +1046,7 @@ def cci( results = df_to_basemodel(df_target.join(cci_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1057,7 +1057,7 @@ def rsi( length: int = 14, scalar: float = 100.0, drift: int = 1, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Relative Strength Index (RSI) calculates a ratio of the recent upward price movements to the absolute price movement. The RSI ranges @@ -1082,7 +1082,7 @@ def rsi( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The RSI data. Examples @@ -1099,17 +1099,17 @@ def rsi( results = df_to_basemodel(df_target.join(rsi_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def summary() -> Obbject[Empty]: +def summary() -> OBBject[Empty]: """Summary.""" # TODO : this command does only a call to a finbrain's endpoint # thus, it should probably be implement on a provider level - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -1119,7 +1119,7 @@ def stoch( fast_k_period: NonNegativeInt = 14, slow_d_period: NonNegativeInt = 3, slow_k_period: NonNegativeInt = 3, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Stochastic Oscillator measures where the close is in relation to the recent trading range. The values range from zero to 100. %D values over 75 @@ -1143,7 +1143,7 @@ def stoch( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Stochastic Oscillator data. Examples @@ -1165,16 +1165,16 @@ def stoch( results = df_to_basemodel(df_target.join(stoch_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) -def rsp() -> Obbject[Empty]: +def rsp() -> OBBject[Empty]: """Relative Strength Performance.""" # TODO : https://github.com/OpenBB-finance/OpenBBTerminal/issues/5167 - return Obbject(results=Empty()) + return OBBject(results=Empty()) @router.command(methods=["POST"]) @@ -1185,7 +1185,7 @@ def kc( scalar: PositiveFloat = 20, mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", offset: NonNegativeInt = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ Keltner Channels are volatility-based bands that are placed on either side of an asset's price and can aid in determining @@ -1210,7 +1210,7 @@ def kc( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Keltner Channels data. Examples @@ -1233,13 +1233,13 @@ def kc( results = df_to_basemodel(df_target.join(kc_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) def cg( data: List[Data], index: str = "date", length: PositiveInt = 14 -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Center of Gravity indicator, in short, is used to anticipate future price movements and to trade on price reversals as soon as they happen. However, just like other oscillators, @@ -1258,7 +1258,7 @@ def cg( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The COG data. Examples @@ -1274,7 +1274,7 @@ def cg( results = df_to_basemodel(df_target.join(cg_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1292,7 +1292,7 @@ def cones( "Yang-Zhang", ] = "STD", is_crypto: bool = False, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """Calculate the realized volatility quantiles over rolling windows of time. The model for calculating volatility is selectable. @@ -1334,7 +1334,7 @@ def cones( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The cones data. Examples @@ -1354,7 +1354,7 @@ def cones( results = df_to_basemodel(df_cones, index=True) - return Obbject(results=results) + return OBBject(results=results) @router.command(methods=["POST"]) @@ -1364,7 +1364,7 @@ def ema( index: str = "date", length: int = 50, offset: int = 0, -) -> Obbject[List[Data]]: +) -> OBBject[List[Data]]: """ The Exponential Moving Average is a staple of technical analysis and is used in countless technical indicators. In a Simple Moving @@ -1390,7 +1390,7 @@ def ema( Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -1406,4 +1406,4 @@ def ema( results = df_to_basemodel(df_target.join(ema_df, how="left"), index=True) - return Obbject(results=results) + return OBBject(results=results) diff --git a/openbb_sdk/sdk/core/README.md b/openbb_sdk/sdk/core/README.md index 2c0f30fa296..3107d5b96d5 100644 --- a/openbb_sdk/sdk/core/README.md +++ b/openbb_sdk/sdk/core/README.md @@ -70,7 +70,7 @@ router = Router(prefix="/router_name") @router.command def some_command( some_param: some_param_type, -) -> Obbject[Item]: +) -> OBBject[Item]: pass ``` @@ -85,9 +85,9 @@ def load( provider_choices: ProviderChoices, # available providers standard_params: StandardParams, # symbol, start_date, etc. extra_params: ExtraParams, # provider specific parameters -) -> Obbject[BaseModel]: +) -> OBBject[BaseModel]: """Load stock data for a specific ticker.""" - return Obbject(results=Query(**locals()).execute()) + return OBBject(results=Query(**locals()).execute()) ``` ### Entrypoint @@ -165,7 +165,7 @@ output = obb.stocks.load( ### 4.1.1. Command output -Each command will always return a `Obbject`. There you will find: +Each command will always return a `OBBject`. There you will find: - `results`: the data returned by the command `None` - `provider`: the provider name (only available provider names allowed) used to get the data or `None` @@ -341,7 +341,7 @@ timestamp: ... # Execution starting timestamp. alias_list: ... # List of alias to find a JournalEntry easier than with it's `tag`. >>> response.output -Obbject +OBBject id: ... # UUID Tag results: ... # Serializable results. diff --git a/openbb_sdk/sdk/core/openbb_core/api/router/commands.py b/openbb_sdk/sdk/core/openbb_core/api/router/commands.py index b89713a2877..255ed6a3e8b 100644 --- a/openbb_sdk/sdk/core/openbb_core/api/router/commands.py +++ b/openbb_sdk/sdk/core/openbb_core/api/router/commands.py @@ -8,7 +8,7 @@ from fastapi.routing import APIRoute from openbb_core.api.dependency.user import get_user from openbb_core.app.command_runner import CommandRunner from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import RouterLoader from openbb_core.app.service.system_service import SystemService @@ -76,22 +76,22 @@ def build_new_signature(func): ) -def validate_output(c_out: Obbject) -> Obbject: +def validate_output(c_out: OBBject) -> OBBject: """ - Validate Obbject object. - Checks against the Obbject schema and removes fields that contain the + Validate OBBject object. + Checks against the OBBject schema and removes fields that contain the `exclude_from_api` extra `pydantic.Field` kwarg. - Note that the modification to the `Obbject` object is done in-place. + Note that the modification to the `OBBject` object is done in-place. Parameters ---------- - c_out : Obbject - Obbject object to validate. + c_out : OBBject + OBBject object to validate. Returns ------- - Obbject - Validated Obbject object. + OBBject + Validated OBBject object. """ def is_model(type_): diff --git a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py index 8f9ae9b595f..daccfa82201 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/command_runner.py +++ b/openbb_sdk/sdk/core/openbb_core/app/command_runner.py @@ -18,7 +18,7 @@ from openbb_core.app.model.command_context import CommandContext from openbb_core.app.model.journal import Journal from openbb_core.app.model.journal_entry import JournalEntry from openbb_core.app.model.journal_query import JournalQuery -from openbb_core.app.model.obbject import Error, Obbject +from openbb_core.app.model.obbject import Error, OBBject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings from openbb_core.app.router import CommandMap @@ -232,7 +232,7 @@ class StaticCommandRunner: charting_manager = ChartingManager() @staticmethod - def __run_in_isolation(func, args=None, kwargs=None) -> Obbject: + def __run_in_isolation(func, args=None, kwargs=None) -> OBBject: args = args or () kwargs = kwargs or {} @@ -244,7 +244,7 @@ class StaticCommandRunner: @classmethod def __command( cls, system_settings: SystemSettings, func: Callable, kwargs: Dict[str, Any] - ) -> Obbject: + ) -> OBBject: """Run a command and return the output""" try: context_manager: Union[warnings.catch_warnings, ContextManager[None]] = ( @@ -267,7 +267,7 @@ class StaticCommandRunner: obbject.warnings = list(map(cast_warning, warning_list)) except Exception as e: - obbject = Obbject( + obbject = OBBject( error=Error(message=str(e), error_kind=e.__class__.__name__) ) if system_settings.debug_mode: @@ -278,7 +278,7 @@ class StaticCommandRunner: @classmethod def __chart( cls, - obbject: Obbject, + obbject: OBBject, user_settings: UserSettings, system_settings: SystemSettings, route: str, @@ -306,7 +306,7 @@ class StaticCommandRunner: execution_context: ExecutionContext, func: Callable, kwargs: Dict[str, Any], - ) -> Obbject: + ) -> OBBject: """Execute a function and return the output""" user_settings = execution_context.user_settings system_settings = execution_context.system_settings diff --git a/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py b/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py index a0b3fa620d1..40a721b8044 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py +++ b/openbb_sdk/sdk/core/openbb_core/app/logs/logging_manager.py @@ -10,7 +10,7 @@ from openbb_core.app.logs.formatters.formatter_with_exceptions import ( from openbb_core.app.logs.handlers_manager import HandlersManager from openbb_core.app.logs.models.logging_settings import LoggingSettings from openbb_core.app.model.abstract.singleton import SingletonMeta -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.model.system_settings import SystemSettings from openbb_core.app.model.user_settings import UserSettings @@ -182,7 +182,7 @@ class LoggingManager(metaclass=SingletonMeta): self, user_settings: UserSettings, system_settings: SystemSettings, - obbject: Obbject, + obbject: OBBject, route: str, func: Callable, kwargs: Dict[str, Any], @@ -196,8 +196,8 @@ class LoggingManager(metaclass=SingletonMeta): User Settings object. system_settings : SystemSettings System Settings object. - obbject : Obbject - Obbject object containing command output and error information. + obbject : OBBject + OBBject object containing command output and error information. route : str Route for the command. func : Callable diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py b/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py index f21b1a85ef9..9024fc15952 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/journal_entry.py @@ -4,7 +4,7 @@ from typing import Any, Dict, List from pydantic import Field from openbb_core.app.model.abstract.tagged import Tagged -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject class JournalEntry(Tagged): @@ -16,7 +16,7 @@ class JournalEntry(Tagged): duration: int = Field( description="Execution duration in nano second of the command." ) - output: Obbject = Field(description="Output of the command.") + output: OBBject = Field(description="Output of the command.") route: str = Field(description="Route of the command.") timestamp: datetime = Field(description="Execution starting timestamp.") alias_list: List[str] = Field( diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py b/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py index 38bac063c07..e15aeedf40e 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/journal_query.py @@ -8,7 +8,7 @@ class JournalQuery(BaseModel): ) ignore_error_output: bool = Field( default=True, - description="Whether or not the JournalEntry with an Obbject.Error should be ignored.", + description="Whether or not the JournalEntry with an OBBject.Error should be ignored.", ) class Config: diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py index 2708e3367a6..6883b23ab83 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py @@ -20,7 +20,7 @@ class OpenBBError(Exception): pass -class Obbject(GenericModel, Generic[T], Tagged): +class OBBject(GenericModel, Generic[T], Tagged): results: Optional[T] = Field( default=None, description="Serializable results.", diff --git a/openbb_sdk/sdk/core/openbb_core/app/router.py b/openbb_sdk/sdk/core/openbb_core/app/router.py index 36c8c640d6b..8757ce0867d 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/router.py +++ b/openbb_sdk/sdk/core/openbb_core/app/router.py @@ -24,7 +24,7 @@ from typing_extensions import Annotated, _AnnotatedAlias from openbb_core.app.model.abstract.warning import OpenBBWarning from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -125,7 +125,7 @@ class CommandValidator: sig = signature(func) return_type = sig.return_annotation - if issubclass(return_type, Obbject): + if issubclass(return_type, OBBject): results_type = get_type_hints(return_type)["results"] if isinstance(results_type, type(None)): valid_return_type = False @@ -144,7 +144,7 @@ class CommandValidator: "Invalid return type in signature:" f" {func.__name__}(...) -> {sig.return_annotation}:\n" "Allowed return type:" - f" {func.__name__}(...) -> Obbject[T] :\n" + f" {func.__name__}(...) -> OBBject[T] :\n" "If you need T = None, use an empty model instead.\n" ) @@ -166,7 +166,7 @@ class Router: self._api_router = APIRouter(prefix=prefix) @overload - def command(self, func: Optional[Callable[P, Obbject]]) -> Callable[P, Obbject]: + def command(self, func: Optional[Callable[P, OBBject]]) -> Callable[P, OBBject]: pass @overload @@ -175,7 +175,7 @@ class Router: def command( self, - func: Optional[Callable[P, Obbject]] = None, + func: Optional[Callable[P, OBBject]] = None, **kwargs, ) -> Optional[Callable]: if func is None: @@ -215,8 +215,8 @@ class Router: class SignatureInspector: @classmethod def complete_signature( - cls, func: Callable[P, Obbject], model: str - ) -> Optional[Callable[P, Obbject]]: + cls, func: Callable[P, OBBject], model: str + ) -> Optional[Callable[P, OBBject]]: """Complete function signature.""" provider_interface = get_provider_interface() if model: @@ -257,7 +257,7 @@ class SignatureInspector: ) ReturnModel = provider_interface.return_schema[model] - func.__annotations__["return"] = Obbject[ReturnModel] # type: ignore + func.__annotations__["return"] = OBBject[ReturnModel] # type: ignore elif ( "provider_choices" in func.__annotations__ @@ -272,7 +272,7 @@ class SignatureInspector: @staticmethod def validate_signature( - func: Callable[P, Obbject], expected: Dict[str, type] + func: Callable[P, OBBject], expected: Dict[str, type] ) -> None: """Validate function signature before binding to model.""" for k, v in expected.items(): @@ -288,8 +288,8 @@ class SignatureInspector: @staticmethod def inject_dependency( - func: Callable[P, Obbject], arg: str, callable_: Any - ) -> Callable[P, Obbject]: + func: Callable[P, OBBject], arg: str, callable_: Any + ) -> Callable[P, OBBject]: """Annotate function with dependency injection.""" func.__annotations__[arg] = Annotated[callable_, Depends()] # type: ignore return func diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/filters.py b/openbb_sdk/sdk/core/openbb_core/app/static/filters.py index b1e96b7d627..ca74038b665 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/filters.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/filters.py @@ -7,7 +7,7 @@ import pandas as pd from pydantic import ValidationError from openbb_core.app.model.abstract.warning import OpenBBWarning -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.utils import df_to_basemodel @@ -48,7 +48,7 @@ def filter_inputs(**kwargs) -> dict: return kwargs -def filter_output(obbject: Obbject) -> Obbject: +def filter_output(obbject: OBBject) -> OBBject: """Filter command output.""" if obbject.warnings: for w in obbject.warnings: diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py index 3ca625a6272..9d9a99c4eda 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/crypto.py @@ -7,7 +7,7 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -35,7 +35,7 @@ class CLASS_crypto(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Crypto Intraday Price. @@ -55,7 +55,7 @@ class CLASS_crypto(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py index 2bdb9b0678a..cd6032fb1f2 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/economy.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -21,7 +21,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """CORECPI.""" inputs = filter_inputs( provider_choices={ @@ -50,7 +50,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get the constituents of an index. @@ -66,7 +66,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -216,7 +216,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["fred"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """CPI. @@ -242,7 +242,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -306,7 +306,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Get the options for v3 cpi(options=True)""" inputs = filter_inputs( provider_choices={ @@ -344,7 +344,7 @@ class CLASS_economy(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Get OHLCV data for an index. @@ -364,7 +364,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -467,7 +467,7 @@ class CLASS_economy(Container): @validate_arguments def available_indices( self, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """AVAILABLE_INDICES. @@ -482,7 +482,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -539,7 +539,7 @@ class CLASS_economy(Container): @validate_arguments def risk( self, chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Market Risk Premium. @@ -554,7 +554,7 @@ class CLASS_economy(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -611,7 +611,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Query EconDB for macro data.""" inputs = filter_inputs( provider_choices={ @@ -633,7 +633,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """MACRO_COUNTRIES.""" inputs = filter_inputs( provider_choices={ @@ -655,7 +655,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """MACRO_PARAMETERS.""" inputs = filter_inputs( provider_choices={ @@ -677,7 +677,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """BALANCE.""" inputs = filter_inputs( provider_choices={ @@ -699,7 +699,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """BIGMAC.""" inputs = filter_inputs( provider_choices={ @@ -721,7 +721,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """COUNTRY_CODES.""" inputs = filter_inputs( provider_choices={ @@ -743,7 +743,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """CURRENCIES.""" inputs = filter_inputs( provider_choices={ @@ -765,7 +765,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """DEBT.""" inputs = filter_inputs( provider_choices={ @@ -787,7 +787,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """EVENTS.""" inputs = filter_inputs( provider_choices={ @@ -809,7 +809,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FGDP.""" inputs = filter_inputs( provider_choices={ @@ -831,7 +831,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FRED.""" inputs = filter_inputs( provider_choices={ @@ -853,7 +853,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FRED Search (was fred_notes).""" inputs = filter_inputs( provider_choices={ @@ -875,7 +875,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """FUTURES. 2 sources""" inputs = filter_inputs( provider_choices={ @@ -897,7 +897,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """GDP.""" inputs = filter_inputs( provider_choices={ @@ -919,7 +919,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """GLBONDS.""" inputs = filter_inputs( provider_choices={ @@ -941,7 +941,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """INDICES.""" inputs = filter_inputs( provider_choices={ @@ -963,7 +963,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """OVERVIEW.""" inputs = filter_inputs( provider_choices={ @@ -985,7 +985,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """PERFMAP.""" inputs = filter_inputs( provider_choices={ @@ -1007,7 +1007,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """PERFORMANCE.""" inputs = filter_inputs( provider_choices={ @@ -1029,7 +1029,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """REVENUE.""" inputs = filter_inputs( provider_choices={ @@ -1051,7 +1051,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """RGDP.""" inputs = filter_inputs( provider_choices={ @@ -1073,7 +1073,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """RTPS.""" inputs = filter_inputs( provider_choices={ @@ -1095,7 +1095,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """SEARCH_INDEX.""" inputs = filter_inputs( provider_choices={ @@ -1117,7 +1117,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """SPENDING.""" inputs = filter_inputs( provider_choices={ @@ -1139,7 +1139,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """TRUST.""" inputs = filter_inputs( provider_choices={ @@ -1161,7 +1161,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """USBONDS.""" inputs = filter_inputs( provider_choices={ @@ -1183,7 +1183,7 @@ class CLASS_economy(Container): self, chart: bool = False, provider: Optional[Literal["benzinga", "fmp", "fred", "polygon"]] = None, - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """VALUATION.""" inputs = filter_inputs( provider_choices={ diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py index be4e1656a0a..56f2d9aadc5 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/fixedincome.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -34,7 +34,7 @@ class CLASS_fixedincome(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get treasury rates. @@ -52,7 +52,7 @@ class CLASS_fixedincome(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -128,7 +128,7 @@ class CLASS_fixedincome(Container): @validate_arguments def ycrv( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Yield curve.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py index 2aaf8e6f81b..dd571184539 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/forex.py @@ -7,7 +7,7 @@ from typing import Annotated, Literal, Optional, Union from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -20,7 +20,7 @@ class CLASS_forex(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Forex Available Pairs. @@ -35,7 +35,7 @@ class CLASS_forex(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -149,7 +149,7 @@ class CLASS_forex(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Forex Intraday Price. @@ -169,7 +169,7 @@ class CLASS_forex(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py index 2e01558c016..dc9ceb1d68a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/news.py @@ -9,7 +9,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -26,7 +26,7 @@ class CLASS_news(Container): chart: bool = False, provider: Optional[Literal["benzinga", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Global News. @@ -42,7 +42,7 @@ class CLASS_news(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -143,7 +143,7 @@ class CLASS_news(Container): @validate_arguments def sectornews( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Sector news.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py index cfc6c340ff0..e3b84cad340 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/qa.py @@ -11,7 +11,7 @@ import pydantic.types from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -24,7 +24,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.NormalityModel]: + ) -> OBBject[openbb_qa.qa_models.NormalityModel]: """ Normality Statistics. @@ -43,7 +43,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[NormalityModel] + OBBject[NormalityModel] Normality tests summary. See qa_models.NormalityModel for details. """ inputs = filter_inputs( @@ -66,7 +66,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.CAPMModel]: + ) -> OBBject[openbb_qa.qa_models.CAPMModel]: """Capital Asset Pricing Model.""" inputs = filter_inputs( data=data, @@ -85,7 +85,7 @@ class CLASS_qa(Container): @validate_arguments def qqplot( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """QQ Plot.""" inputs = filter_inputs( chart=chart, @@ -107,7 +107,7 @@ class CLASS_qa(Container): threshold_start: float = 0.0, threshold_end: float = 1.5, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Omega Ratio. Parameters @@ -123,7 +123,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[OmegaModel]] + OBBject[List[OmegaModel]] Omega ratios. """ inputs = filter_inputs( @@ -149,7 +149,7 @@ class CLASS_qa(Container): target: str, window: pydantic.types.PositiveInt, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Kurtosis. Parameters @@ -163,7 +163,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Kurtosis. """ inputs = filter_inputs( @@ -184,7 +184,7 @@ class CLASS_qa(Container): @validate_arguments def pick( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Pick.""" inputs = filter_inputs( chart=chart, @@ -201,7 +201,7 @@ class CLASS_qa(Container): @validate_arguments def spread( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Spread.""" inputs = filter_inputs( chart=chart, @@ -218,7 +218,7 @@ class CLASS_qa(Container): @validate_arguments def rolling( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Rolling.""" inputs = filter_inputs( chart=chart, @@ -235,7 +235,7 @@ class CLASS_qa(Container): @validate_arguments def var( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Value at Risk.""" inputs = filter_inputs( chart=chart, @@ -252,7 +252,7 @@ class CLASS_qa(Container): @validate_arguments def line( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Line.""" inputs = filter_inputs( chart=chart, @@ -269,7 +269,7 @@ class CLASS_qa(Container): @validate_arguments def hist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Histogram.""" inputs = filter_inputs( chart=chart, @@ -291,7 +291,7 @@ class CLASS_qa(Container): fuller_reg: Literal["c", "ct", "ctt", "nc"] = "c", kpss_reg: Literal["c", "ct"] = "c", chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.UnitRootModel]: + ) -> OBBject[openbb_qa.qa_models.UnitRootModel]: """Unit Root Test. Augmented Dickey-Fuller test for unit root. @@ -310,7 +310,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[UnitRootModel] + OBBject[UnitRootModel] Unit root tests summary. """ inputs = filter_inputs( @@ -332,7 +332,7 @@ class CLASS_qa(Container): @validate_arguments def beta( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Beta.""" inputs = filter_inputs( chart=chart, @@ -354,7 +354,7 @@ class CLASS_qa(Container): rfr: float = 0.0, window: pydantic.types.PositiveInt = 252, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Sharpe Ratio. Parameters @@ -370,7 +370,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sharpe ratio. """ inputs = filter_inputs( @@ -398,7 +398,7 @@ class CLASS_qa(Container): window: pydantic.types.PositiveInt = 252, adjusted: bool = False, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Sortino Ratio. For method & terminology see: http://www.redrockcapital.com/Sortino__A__Sharper__Ratio_Red_Rock_Capital.pdf @@ -418,7 +418,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Sortino ratio. """ inputs = filter_inputs( @@ -441,7 +441,7 @@ class CLASS_qa(Container): @validate_arguments def cusum( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Cumulative Sum.""" inputs = filter_inputs( chart=chart, @@ -458,7 +458,7 @@ class CLASS_qa(Container): @validate_arguments def raw( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Raw.""" inputs = filter_inputs( chart=chart, @@ -475,7 +475,7 @@ class CLASS_qa(Container): @validate_arguments def cdf( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Cumulative Distribution Function.""" inputs = filter_inputs( chart=chart, @@ -492,7 +492,7 @@ class CLASS_qa(Container): @validate_arguments def decompose( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Decompose.""" inputs = filter_inputs( chart=chart, @@ -513,7 +513,7 @@ class CLASS_qa(Container): target: str, window: pydantic.types.PositiveInt, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Skewness. Parameters @@ -527,7 +527,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Skewness. """ inputs = filter_inputs( @@ -553,7 +553,7 @@ class CLASS_qa(Container): window: pydantic.types.PositiveInt, quantile_pct: pydantic.types.NonNegativeFloat = 0.5, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Quantile.""" inputs = filter_inputs( data=data, @@ -574,7 +574,7 @@ class CLASS_qa(Container): @validate_arguments def bw( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Bandwidth.""" inputs = filter_inputs( chart=chart, @@ -591,7 +591,7 @@ class CLASS_qa(Container): @validate_arguments def es( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Expected Shortfall.""" inputs = filter_inputs( chart=chart, @@ -608,7 +608,7 @@ class CLASS_qa(Container): @validate_arguments def acf( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Autocorrelation Function.""" inputs = filter_inputs( chart=chart, @@ -628,7 +628,7 @@ class CLASS_qa(Container): data: Union[List[openbb_provider.abstract.data.Data], pandas.DataFrame], target: str, chart: bool = False, - ) -> Obbject[openbb_qa.qa_models.SummaryModel]: + ) -> OBBject[openbb_qa.qa_models.SummaryModel]: """Summary. Parameters @@ -640,7 +640,7 @@ class CLASS_qa(Container): Returns ------- - Obbject[SummaryModel] + OBBject[SummaryModel] Summary table. """ inputs = filter_inputs( diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py index 89727ced9a5..a6c8b0b304d 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks.py @@ -10,7 +10,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -102,7 +102,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: r"""Load stock data for a specific ticker. @@ -122,7 +122,7 @@ class CLASS_stocks(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -239,7 +239,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["benzinga", "polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get news for one or more stock tickers. @@ -259,7 +259,7 @@ class CLASS_stocks(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -417,7 +417,7 @@ class CLASS_stocks(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Get valuation multiples for a stock ticker. @@ -435,7 +435,7 @@ class CLASS_stocks(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -599,7 +599,7 @@ class CLASS_stocks(Container): @validate_arguments def tob( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """View top of book for loaded ticker (US exchanges only).""" inputs = filter_inputs( chart=chart, @@ -616,7 +616,7 @@ class CLASS_stocks(Container): @validate_arguments def quote( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """View the current price for a specific stock ticker.""" inputs = filter_inputs( chart=chart, @@ -633,7 +633,7 @@ class CLASS_stocks(Container): @validate_arguments def search( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Search a specific stock ticker for analysis.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py index 1477bf63a92..264caf7181c 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ca.py @@ -8,7 +8,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -24,7 +24,7 @@ class CLASS_stocks_ca(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Company peers. @@ -40,7 +40,7 @@ class CLASS_stocks_ca(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -93,7 +93,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def balance( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company balance sheet.""" inputs = filter_inputs( chart=chart, @@ -110,7 +110,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def cashflow( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company cashflow.""" inputs = filter_inputs( chart=chart, @@ -127,7 +127,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def hcorr( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company historical correlation.""" inputs = filter_inputs( chart=chart, @@ -144,7 +144,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def hist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company historical prices.""" inputs = filter_inputs( chart=chart, @@ -161,7 +161,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def income( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company income statement.""" inputs = filter_inputs( chart=chart, @@ -178,7 +178,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def scorr( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company sector correlation.""" inputs = filter_inputs( chart=chart, @@ -195,7 +195,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def screener( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company screener.""" inputs = filter_inputs( chart=chart, @@ -212,7 +212,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def sentiment( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company sentiment.""" inputs = filter_inputs( chart=chart, @@ -229,7 +229,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def similar( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company similar.""" inputs = filter_inputs( chart=chart, @@ -246,7 +246,7 @@ class CLASS_stocks_ca(Container): @validate_arguments def volume( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Company volume.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py index c06f397b0bc..296a96de050 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dd.py @@ -6,7 +6,7 @@ from typing import Annotated, Literal, Optional from pydantic import validate_arguments from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -135,7 +135,7 @@ class CLASS_stocks_dd(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """SEC Filings. @@ -157,7 +157,7 @@ class CLASS_stocks_dd(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py index 4fdd4f85057..f56d101faf1 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_disc.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def active( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Most active stocks by intraday trade volumes.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def arkord( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Order by ARK INvestment Management LLC.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def asc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Small cap stocks with revenue and earnings growth more than 25%.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def dividends( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -81,7 +81,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def filings( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """The most-recent form submissions to the SEC.""" inputs = filter_inputs( chart=chart, @@ -98,7 +98,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def fipo( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Future IPOs dates.""" inputs = filter_inputs( chart=chart, @@ -115,7 +115,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def gainers( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show latest top gainers.""" inputs = filter_inputs( chart=chart, @@ -132,7 +132,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def gtech( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Tech stocks with revenue and earnings growth more than 25%.""" inputs = filter_inputs( chart=chart, @@ -149,7 +149,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def hotpenny( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Today's hot penny stocks.""" inputs = filter_inputs( chart=chart, @@ -166,7 +166,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ipo( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -182,7 +182,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def losers( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show latest top losers.""" inputs = filter_inputs( chart=chart, @@ -199,7 +199,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def lowfloat( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Low float stocks under 10M shares float.""" inputs = filter_inputs( chart=chart, @@ -216,7 +216,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def pipo( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Past IPOs dates.""" inputs = filter_inputs( chart=chart, @@ -233,7 +233,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def rtat( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Top 10 retail traded stocks per day.""" inputs = filter_inputs( chart=chart, @@ -250,7 +250,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def trending( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Trending news.""" inputs = filter_inputs( chart=chart, @@ -267,7 +267,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ugs( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Undervalued stocks with revenue and earnings growth above 25%.""" inputs = filter_inputs( chart=chart, @@ -284,7 +284,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def ulc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Potentially undervalued large cap stocks.""" inputs = filter_inputs( chart=chart, @@ -301,7 +301,7 @@ class CLASS_stocks_disc(Container): @validate_arguments def upcoming( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Upcoming earnings release dates.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py index ebb575ffbb2..7dd5988591a 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_dps.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Price vs short interest volume""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def ctb( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Cost to borrow of stocks.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def dpotc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Dark pools (ATS) vs OTC data.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def ftd( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Fails-to-deliver data.""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def hsi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show top high short interest stocks of over 20% ratio.""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def pos( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Dark pool short position.""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def prom( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Promising tickers based on dark pool shares regression.""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi_q( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -149,7 +149,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def psi_sg( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -165,7 +165,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def shorted( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Most shorted stocks.""" inputs = filter_inputs( chart=chart, @@ -182,7 +182,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def sidtc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Short interest and days to cover.""" inputs = filter_inputs( chart=chart, @@ -199,7 +199,7 @@ class CLASS_stocks_dps(Container): @validate_arguments def spos( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Net short vs position.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py index a4edbd658fd..4ca6ee752b8 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_fa.py @@ -10,7 +10,7 @@ from pydantic import validate_arguments import openbb_core.app.model.command_context import openbb_core.app.model.results.empty from openbb_core.app.model.custom_parameter import OpenBBCustomParameter -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -20,7 +20,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def analysis( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Analyse SEC filings with the help of machine learning.""" inputs = filter_inputs( chart=chart, @@ -53,7 +53,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Balance Sheet. @@ -73,7 +73,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -287,7 +287,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Balance Sheet Statement Growth. @@ -305,7 +305,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -454,7 +454,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Show Dividend Calendar for a given start and end dates. @@ -472,7 +472,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -554,7 +554,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Cash Flow Statement. @@ -574,7 +574,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -750,7 +750,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Cash Flow Statement Growth. @@ -768,7 +768,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -890,7 +890,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Executive Compensation. @@ -906,7 +906,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -996,7 +996,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Stock Split Calendar. @@ -1014,7 +1014,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1074,7 +1074,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def customer( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """List of customers of the company.""" inputs = filter_inputs( chart=chart, @@ -1091,7 +1091,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def dcfc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Determine the (historical) discounted cash flow.""" inputs = filter_inputs( chart=chart, @@ -1114,7 +1114,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Historical Dividends. @@ -1130,7 +1130,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1193,7 +1193,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def dupont( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Detailed breakdown for Return on Equity (RoE).""" inputs = filter_inputs( chart=chart, @@ -1220,7 +1220,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Earnings Calendar. @@ -1238,7 +1238,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1312,7 +1312,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Number of Employees. @@ -1328,7 +1328,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1395,7 +1395,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def enterprise( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Enterprise value.""" inputs = filter_inputs( chart=chart, @@ -1412,7 +1412,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def epsfc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Earnings Estimate by Analysts - EPS.""" inputs = filter_inputs( chart=chart, @@ -1445,7 +1445,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Analyst Estimates. @@ -1465,7 +1465,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1560,7 +1560,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fama_coe( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Fama French 3 Factor Model - Coefficient of Earnings.""" inputs = filter_inputs( chart=chart, @@ -1577,7 +1577,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fama_raw( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Fama French 3 Factor Model - Raw Data.""" inputs = filter_inputs( chart=chart, @@ -1594,7 +1594,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def fraud( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Key fraud ratios including M-score, Z-score and McKee.""" inputs = filter_inputs( chart=chart, @@ -1611,7 +1611,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def growth( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Growth of financial statement items and ratios.""" inputs = filter_inputs( chart=chart, @@ -1628,7 +1628,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def historical_5( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -1660,7 +1660,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["polygon", "fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Income Statement. @@ -1680,7 +1680,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -1877,7 +1877,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Income Statement Growth. @@ -1897,7 +1897,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2051,7 +2051,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Stock Insider Trading. @@ -2075,7 +2075,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2171,7 +2171,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Institutional Ownership. @@ -2191,7 +2191,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2314,7 +2314,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def key( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -2346,7 +2346,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Key Metrics. @@ -2366,7 +2366,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2543,7 +2543,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Key Executives. @@ -2559,7 +2559,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2622,7 +2622,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def mktcap( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Obtain the market capitalization or enterprise value.""" inputs = filter_inputs( chart=chart, @@ -2639,7 +2639,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def news( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -2661,7 +2661,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Company Overview. @@ -2677,7 +2677,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2812,7 +2812,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Stock Ownership. @@ -2832,7 +2832,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -2967,7 +2967,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Price Target Consensus. @@ -2983,7 +2983,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3048,7 +3048,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Price Target. @@ -3064,7 +3064,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3135,7 +3135,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def rating( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Analyst prices and ratings over time of the company.""" inputs = filter_inputs( chart=chart, @@ -3152,7 +3152,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def ratios( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Extensive set of ratios over time.""" inputs = filter_inputs( chart=chart, @@ -3169,7 +3169,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def revfc( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Earning Estimate by Analysts - Revenue.""" inputs = filter_inputs( chart=chart, @@ -3202,7 +3202,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Revenue Geographic. @@ -3222,7 +3222,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3301,7 +3301,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Revenue Business Line. @@ -3321,7 +3321,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3376,7 +3376,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def rot( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Number of analyst ratings over time on a monthly basis.""" inputs = filter_inputs( chart=chart, @@ -3393,7 +3393,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def score( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Value investing scores for any time period.""" inputs = filter_inputs( chart=chart, @@ -3410,7 +3410,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def sec( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -3426,7 +3426,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def shares( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -3448,7 +3448,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Share Statistics. @@ -3464,7 +3464,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3531,7 +3531,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Historical Stock Splits. @@ -3547,7 +3547,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] @@ -3604,7 +3604,7 @@ class CLASS_stocks_fa(Container): @validate_arguments def supplier( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """List of suppliers of the company.""" inputs = filter_inputs( chart=chart, @@ -3639,7 +3639,7 @@ class CLASS_stocks_fa(Container): chart: bool = False, provider: Optional[Literal["fmp"]] = None, **kwargs - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Earnings Call Transcript. @@ -3659,7 +3659,7 @@ class CLASS_stocks_fa(Container): Returns ------- - Obbject + OBBject results: List[Data] Serializable results. provider: Optional[PROVIDERS] diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py index c43689bd272..3c56efb244e 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_gov.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def contracts( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return government contracts.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def government_trading( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return government trading.""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def gtrades( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return government trades.""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def histcont( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Historical quarterly government contracts.""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lastcontracts( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return last government contracts given out.""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lasttrades( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Last trades.""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def lobbying( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Corporate lobbying details.""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def qtrcontracts( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Quarterly government contracts analysis.""" inputs = filter_inputs( chart=chart, @@ -150,7 +150,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def topbuys( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show most purchased stocks.""" inputs = filter_inputs( chart=chart, @@ -167,7 +167,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def toplobbying( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Top corporate lobbying tickers.""" inputs = filter_inputs( chart=chart, @@ -184,7 +184,7 @@ class CLASS_stocks_gov(Container): @validate_arguments def topsells( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show most sold stocks.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py index 07ad1e47983..40a503e7776 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_ins.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def act( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Insider activity over time.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blcp( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest CEO/CFO purchaces ($25k+).""" inputs = filter_inputs( chart=chart, @@ -48,7 +48,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blcs( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest CEO/CFO sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -65,7 +65,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blip( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest insider purchaces ($25+).""" inputs = filter_inputs( chart=chart, @@ -82,7 +82,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blis( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest insider sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -99,7 +99,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blop( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest officer purchaces ($25k+).""" inputs = filter_inputs( chart=chart, @@ -116,7 +116,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def blos( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Big latest officer sales ($100k+).""" inputs = filter_inputs( chart=chart, @@ -133,7 +133,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def filt( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Filter insiders based on preset.""" inputs = filter_inputs( chart=chart, @@ -150,7 +150,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lcb( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest cluster buys.""" inputs = filter_inputs( chart=chart, @@ -167,7 +167,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lins( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Last insider trading of the company.""" inputs = filter_inputs( chart=chart, @@ -184,7 +184,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lip( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest insider purchaces.""" inputs = filter_inputs( chart=chart, @@ -201,7 +201,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lis( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest insider sales.""" inputs = filter_inputs( chart=chart, @@ -218,7 +218,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lit( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest insider trading (all filings).""" inputs = filter_inputs( chart=chart, @@ -235,7 +235,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def lpsb( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Latest penny stock buys.""" inputs = filter_inputs( chart=chart, @@ -252,7 +252,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def print_insider_data( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Print insider data.""" inputs = filter_inputs( chart=chart, @@ -269,7 +269,7 @@ class CLASS_stocks_ins(Container): @validate_arguments def stats( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Insider stats of the company.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py index bc3cbb6c59d..543b63cc7a8 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/stocks_options.py @@ -4,7 +4,7 @@ from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -14,7 +14,7 @@ class CLASS_stocks_options(Container): @validate_arguments def chains( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return options chains with greeks.""" inputs = filter_inputs( chart=chart, @@ -31,7 +31,7 @@ class CLASS_stocks_options(Container): @validate_arguments def dte( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -47,7 +47,7 @@ class CLASS_stocks_options(Container): @validate_arguments def eodchain( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Gets option chain at a specific date.""" inputs = filter_inputs( chart=chart, @@ -64,7 +64,7 @@ class CLASS_stocks_options(Container): @validate_arguments def expirations( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return options expirations.""" inputs = filter_inputs( chart=chart, @@ -81,7 +81,7 @@ class CLASS_stocks_options(Container): @validate_arguments def grhist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot option greek history.""" inputs = filter_inputs( chart=chart, @@ -98,7 +98,7 @@ class CLASS_stocks_options(Container): @validate_arguments def hist( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot option history.""" inputs = filter_inputs( chart=chart, @@ -115,7 +115,7 @@ class CLASS_stocks_options(Container): @validate_arguments def info( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Display option information (volatility, IV rank, etc.).""" inputs = filter_inputs( chart=chart, @@ -132,7 +132,7 @@ class CLASS_stocks_options(Container): @validate_arguments def last_price( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Return last price of an option.""" inputs = filter_inputs( chart=chart, @@ -149,7 +149,7 @@ class CLASS_stocks_options(Container): @validate_arguments def oi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot option open interest.""" inputs = filter_inputs( chart=chart, @@ -166,7 +166,7 @@ class CLASS_stocks_options(Container): @validate_arguments def pcr( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Display put/call ratio for ticker.""" inputs = filter_inputs( chart=chart, @@ -183,7 +183,7 @@ class CLASS_stocks_options(Container): @validate_arguments def price( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: inputs = filter_inputs( chart=chart, ) @@ -199,7 +199,7 @@ class CLASS_stocks_options(Container): @validate_arguments def unu( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show unusual options activity.""" inputs = filter_inputs( chart=chart, @@ -216,7 +216,7 @@ class CLASS_stocks_options(Container): @validate_arguments def voi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot volume and open interest.""" inputs = filter_inputs( chart=chart, @@ -233,7 +233,7 @@ class CLASS_stocks_options(Container): @validate_arguments def vol( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot volume.""" inputs = filter_inputs( chart=chart, @@ -250,7 +250,7 @@ class CLASS_stocks_options(Container): @validate_arguments def vsurf( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Show 3D volatility surface.""" inputs = filter_inputs( chart=chart, diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py index efdde43592a..6c2d32b0b5c 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package/ta.py @@ -10,7 +10,7 @@ import pydantic.types from pydantic import validate_arguments import openbb_core.app.model.results.empty -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.container import Container from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output @@ -27,7 +27,7 @@ class CLASS_ta(Container): drift: pydantic.types.NonNegativeInt = 1, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Average True Range is used to measure volatility, especially volatility caused by gaps or limit moves. @@ -49,7 +49,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -86,7 +86,7 @@ class CLASS_ta(Container): start_date: Optional[str] = None, end_date: Optional[str] = None, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Fibonacci Retracement Levels. @@ -101,7 +101,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -135,7 +135,7 @@ class CLASS_ta(Container): index: str = "date", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The On Balance Volume (OBV) is a cumulative total of the up and down volume. When the close is higher than the previous close, the volume is added @@ -158,7 +158,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -190,7 +190,7 @@ class CLASS_ta(Container): length: pydantic.types.PositiveInt = 14, signal: pydantic.types.PositiveInt = 1, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Fisher Transform is a technical indicator created by John F. Ehlers that converts prices into a Gaussian normal distribution.1 The indicator @@ -211,7 +211,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] List of data with the indicator applied. Examples @@ -245,7 +245,7 @@ class CLASS_ta(Container): slow: pydantic.types.PositiveInt = 10, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Accumulation/Distribution Oscillator, also known as the Chaikin Oscillator is essentially a momentum indicator, but of the Accumulation-Distribution line @@ -268,7 +268,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -296,7 +296,7 @@ class CLASS_ta(Container): @validate_arguments def tv( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """TradingView.""" inputs = filter_inputs( chart=chart, @@ -321,7 +321,7 @@ class CLASS_ta(Container): mamode: Literal["sma", "ema", "wma", "rma"] = "sma", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Bollinger Bands consist of three lines. The middle band is a simple moving average (generally 20 periods) of the typical price (TP). The upper and lower @@ -355,7 +355,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -388,7 +388,7 @@ class CLASS_ta(Container): @validate_arguments def multi( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Plot multiple indicators on the same chart.""" inputs = filter_inputs( chart=chart, @@ -411,7 +411,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The zero lag exponential moving average (ZLEMA) indicator was created by John Ehlers and Ric Way. The idea is do a @@ -436,7 +436,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -470,7 +470,7 @@ class CLASS_ta(Container): length: int = 25, scalar: int = 100, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The word aroon is Sanskrit for "dawn's early light." The Aroon indicator attempts to show when a new trend is dawning. The indicator consists @@ -498,7 +498,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -532,7 +532,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Moving Averages are used to smooth the data in an array to help eliminate noise and identify trends. The Simple Moving Average is literally @@ -557,7 +557,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -593,7 +593,7 @@ class CLASS_ta(Container): asint: bool = False, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Demark sequential indicator @@ -614,7 +614,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -649,7 +649,7 @@ class CLASS_ta(Container): anchor: str = "D", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Volume Weighted Average Price that measures the average typical price by volume. It is typically used with intraday charts to identify general direction. @@ -669,7 +669,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -697,7 +697,7 @@ class CLASS_ta(Container): @validate_arguments def recom( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Recommendation.""" inputs = filter_inputs( chart=chart, @@ -721,7 +721,7 @@ class CLASS_ta(Container): slow: int = 26, signal: int = 9, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Moving Average Convergence Divergence (MACD) is the difference between two Exponential Moving Averages. The Signal line is an Exponential Moving @@ -750,7 +750,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -786,7 +786,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Hull Moving Average solves the age old dilemma of making a moving average more responsive to current price activity whilst maintaining curve smoothness. @@ -808,7 +808,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -843,7 +843,7 @@ class CLASS_ta(Container): upper_length: pydantic.types.PositiveInt = 20, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Donchian Channels are three lines generated by moving average calculations that comprise an indicator formed by upper and lower @@ -867,7 +867,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -904,7 +904,7 @@ class CLASS_ta(Container): offset: pydantic.types.PositiveInt = 26, lookahead: bool = False, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Ichimoku Cloud, also known as Ichimoku Kinko Hyo, is a versatile indicator that defines support and resistance, identifies trend direction, gauges momentum and provides @@ -955,7 +955,7 @@ class CLASS_ta(Container): target: str = "adj_close", period: pydantic.types.PositiveInt = 90, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Clenow Volatility Adjusted Momentum. @@ -972,7 +972,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -1004,7 +1004,7 @@ class CLASS_ta(Container): index: str = "date", offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Accumulation/Distribution Line is similar to the On Balance Volume (OBV), which sums the volume times +1/-1 based on whether the close is @@ -1030,7 +1030,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] Examples -------- @@ -1062,7 +1062,7 @@ class CLASS_ta(Container): scalar: float = 100.0, drift: int = 1, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The ADX is a Welles Wilder style moving average of the Directional Movement Index (DX). The values range from 0 to 100, but rarely get above 60. To interpret the ADX, consider @@ -1083,7 +1083,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples @@ -1118,7 +1118,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ A Weighted Moving Average puts more weight on recent data and less on past data. This is done by multiplying each bar’s price by a weighting factor. Because of its @@ -1140,7 +1140,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The WMA data. Examples @@ -1174,7 +1174,7 @@ class CLASS_ta(Container): length: pydantic.types.PositiveInt = 14, scalar: pydantic.types.PositiveFloat = 0.015, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The CCI is designed to detect beginning and ending market trends. The range of 100 to -100 is the normal trading range. CCI values outside of this @@ -1195,7 +1195,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The CCI data. """ inputs = filter_inputs( @@ -1224,7 +1224,7 @@ class CLASS_ta(Container): scalar: float = 100.0, drift: int = 1, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Relative Strength Index (RSI) calculates a ratio of the recent upward price movements to the absolute price movement. The RSI ranges @@ -1249,7 +1249,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The RSI data. Examples @@ -1279,7 +1279,7 @@ class CLASS_ta(Container): @validate_arguments def summary( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Summary.""" inputs = filter_inputs( chart=chart, @@ -1302,7 +1302,7 @@ class CLASS_ta(Container): slow_d_period: pydantic.types.NonNegativeInt = 3, slow_k_period: pydantic.types.NonNegativeInt = 3, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Stochastic Oscillator measures where the close is in relation to the recent trading range. The values range from zero to 100. %D values over 75 @@ -1326,7 +1326,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Stochastic Oscillator data. Examples @@ -1355,7 +1355,7 @@ class CLASS_ta(Container): @validate_arguments def rsp( self, chart: bool = False - ) -> Obbject[openbb_core.app.model.results.empty.Empty]: + ) -> OBBject[openbb_core.app.model.results.empty.Empty]: """Relative Strength Performance.""" inputs = filter_inputs( chart=chart, @@ -1379,7 +1379,7 @@ class CLASS_ta(Container): mamode: Literal["ema", "sma", "wma", "hma", "zlma"] = "ema", offset: pydantic.types.NonNegativeInt = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ Keltner Channels are volatility-based bands that are placed on either side of an asset's price and can aid in determining @@ -1404,7 +1404,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The Keltner Channels data. Examples @@ -1438,7 +1438,7 @@ class CLASS_ta(Container): index: str = "date", length: pydantic.types.PositiveInt = 14, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Center of Gravity indicator, in short, is used to anticipate future price movements and to trade on price reversals as soon as they happen. However, just like other oscillators, @@ -1457,7 +1457,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The COG data. Examples @@ -1498,7 +1498,7 @@ class CLASS_ta(Container): ] = "STD", is_crypto: bool = False, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """Calculate the realized volatility quantiles over rolling windows of time. The model for calculating volatility is selectable. @@ -1540,7 +1540,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The cones data. Examples @@ -1576,7 +1576,7 @@ class CLASS_ta(Container): length: int = 50, offset: int = 0, chart: bool = False, - ) -> Obbject[typing.List]: + ) -> OBBject[typing.List]: """ The Exponential Moving Average is a staple of technical analysis and is used in countless technical indicators. In a Simple Moving @@ -1602,7 +1602,7 @@ class CLASS_ta(Container): Returns ------- - Obbject[List[Data]] + OBBject[List[Data]] The calculated data. Examples diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py index 053fcbb8d6a..06205ffdfad 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py @@ -179,7 +179,7 @@ class ImportDefinition: """Build the import definition.""" hint_type_list = cls.get_path_hint_type_list(path=path) code = "\nfrom openbb_core.app.static.container import Container" - code += "\nfrom openbb_core.app.model.obbject import Obbject" + code += "\nfrom openbb_core.app.model.obbject import OBBject" code += ( "\nfrom openbb_core.app.model.custom_parameter import OpenBBCustomParameter" ) @@ -247,7 +247,7 @@ class DocstringGenerator: obbject_description = ( "\nReturns\n" "-------\n" - "Obbject\n" + "OBBject\n" " results: List[Data]\n" " Serializable results.\n" " provider: Optional[PROVIDERS]\n" @@ -582,18 +582,18 @@ class MethodDefinition: else: item_type = get_args(get_type_hints(return_type)["results"])[0] if item_type.__module__ == "builtins": - func_returns = f"Obbject[{item_type.__name__}]" + func_returns = f"OBBject[{item_type.__name__}]" # elif get_origin(item_type) == list: # inner_type = get_args(item_type)[0] # select = f"[{inner_type.__module__}.{inner_type.__name__}]" - # func_returns = f"Obbject[{item_type.__module__}.{item_type.__name__}[{select}]]" + # func_returns = f"OBBject[{item_type.__module__}.{item_type.__name__}[{select}]]" else: inner_type_name = ( item_type.__name__ if hasattr(item_type, "__name__") else item_type._name ) - func_returns = f"Obbject[{item_type.__module__}.{inner_type_name}]" + func_returns = f"OBBject[{item_type.__module__}.{inner_type_name}]" return func_returns diff --git a/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py b/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py index 35c6d2c6019..50acd1a4cbd 100644 --- a/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py +++ b/openbb_sdk/sdk/core/tests/app/logs/test_logging_manager.py @@ -13,7 +13,7 @@ class MockLoggingSettings: self.user_settings = user_settings -class MockObbject(BaseModel): +class MockOBBject(BaseModel): output: Optional[str] error: Optional[str] @@ -108,7 +108,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockObbject(output="mock_output"), + MockOBBject(output="mock_output"), "mock_route", "mock_func", {}, @@ -116,7 +116,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockObbject(error="mock_error"), + MockOBBject(error="mock_error"), "mock_route", "mock_func", {}, @@ -124,7 +124,7 @@ def test_log_startup(logging_manager): ( "mock_settings", "mock_system", - MockObbject(error="mock_error"), + MockOBBject(error="mock_error"), "login", "mock_func", {}, diff --git a/openbb_sdk/sdk/core/tests/app/model/test_obbject.py b/openbb_sdk/sdk/core/tests/app/model/test_obbject.py index 3cb1252d0e5..badfb01571c 100644 --- a/openbb_sdk/sdk/core/tests/app/model/test_obbject.py +++ b/openbb_sdk/sdk/core/tests/app/model/test_obbject.py @@ -2,16 +2,16 @@ from unittest.mock import MagicMock, patch import pandas as pd import pytest -from openbb_core.app.model.command_output import Chart, Obbject, OpenBBError +from openbb_core.app.model.command_output import Chart, OBBject, OpenBBError def test_command_output(): - co = Obbject() - assert isinstance(co, Obbject) + co = OBBject() + assert isinstance(co, OBBject) def test_fields(): - fields = Obbject.__fields__.keys() + fields = OBBject.__fields__.keys() assert "results" in fields assert "provider" in fields @@ -21,7 +21,7 @@ def test_fields(): def test_to_dataframe_no_results(): - co = Obbject() + co = OBBject() with pytest.raises(Exception): co.to_dataframe() @@ -50,7 +50,7 @@ def test_to_dataframe_no_results(): ) def test_to_dataframe(results, expected_df): # Arrange - co = Obbject(results=results) + co = OBBject(results=results) # Act and Assert if isinstance(expected_df, pd.DataFrame): @@ -87,7 +87,7 @@ def test_to_dataframe(results, expected_df): ) def test_to_dict(results, expected): # Arrange - co = Obbject(results=results) + co = OBBject(results=results) # Act result = co.to_dict() @@ -101,7 +101,7 @@ def test_to_dict(results, expected): @patch("openbb_core.app.model.command_output.Chart") def test_to_plotly_json_with_existing_chart(mock_chart, mock_charting_manager): # Arrange - mock_instance = Obbject() + mock_instance = OBBject() mock_instance.chart = Chart(content={"existing_chart_data": "some_data"}) # Act @@ -115,7 +115,7 @@ def test_to_plotly_json_with_existing_chart(mock_chart, mock_charting_manager): mock_chart.assert_not_called() -@patch("openbb_core.app.model.command_output.Obbject.to_dataframe") +@patch("openbb_core.app.model.command_output.OBBject.to_dataframe") @patch("openbb_core.app.model.command_output.ChartingManager") @patch("openbb_core.app.model.command_output.Chart") def test_to_plotly_json_with_new_chart( @@ -133,7 +133,7 @@ def test_to_plotly_json_with_new_chart( return pd.DataFrame(data) # Arrange - mock_instance = Obbject() + mock_instance = OBBject() mock_charting_manager_instance = mock_charting_manager.return_value mock_charting_manager_instance.to_plotly_json.return_value = { "new_chart_data": "some_data" @@ -161,7 +161,7 @@ def test_to_plotly_json_with_new_chart( def test_show_chart_exists(): - mock_instance = Obbject() + mock_instance = OBBject() # Arrange mock_instance.chart = MagicMock(spec=Chart) @@ -173,7 +173,7 @@ def test_show_chart_exists(): def test_show_chart_not_found(): - mock_instance = Obbject() + mock_instance = OBBject() # Arrange mock_instance.chart = None diff --git a/openbb_sdk/sdk/core/tests/app/static/test_filters.py b/openbb_sdk/sdk/core/tests/app/static/test_filters.py index c1bcb6e6dbc..01e418553d0 100644 --- a/openbb_sdk/sdk/core/tests/app/static/test_filters.py +++ b/openbb_sdk/sdk/core/tests/app/static/test_filters.py @@ -1,7 +1,7 @@ """Test the filters.py file.""" import pytest -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.static.filters import filter_call, filter_inputs, filter_output from pandas import DataFrame @@ -39,6 +39,6 @@ def test_filter_inputs_df(): def test_filter_output(): """Test filter_output.""" - obbject = filter_output(Obbject()) + obbject = filter_output(OBBject()) assert obbject is not None diff --git a/openbb_sdk/sdk/core/tests/app/test_router.py b/openbb_sdk/sdk/core/tests/app/test_router.py index a501a26553b..214032a4c41 100644 --- a/openbb_sdk/sdk/core/tests/app/test_router.py +++ b/openbb_sdk/sdk/core/tests/app/test_router.py @@ -5,7 +5,7 @@ import pytest from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -105,8 +105,8 @@ def test_check_return_error(command_validator): def test_check_return(command_validator): """Test check_return.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check_return(valid_function) is None @@ -114,8 +114,8 @@ def test_check_return(command_validator): def test_check(command_validator): """Test check.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check(valid_function) is None @@ -135,8 +135,8 @@ def test_command(router): """Test command.""" @router.command - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert valid_function @@ -182,7 +182,7 @@ def test_complete_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass model = "StockEOD" @@ -193,8 +193,8 @@ def test_complete_signature(signature_inspector): def test_complete_signature_error(signature_inspector): """Test complete_signature.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) with pytest.raises(AttributeError): signature_inspector.complete_signature(valid_function, "invalid_model") @@ -208,7 +208,7 @@ def test_validate_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass expected_signature = { @@ -232,7 +232,7 @@ def test_inject_dependency(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass assert signature_inspector.inject_dependency(sample_function, "cc", CommandContext) diff --git a/openbb_sdk/sdk/core/tests/test_router.py b/openbb_sdk/sdk/core/tests/test_router.py index a501a26553b..214032a4c41 100644 --- a/openbb_sdk/sdk/core/tests/test_router.py +++ b/openbb_sdk/sdk/core/tests/test_router.py @@ -5,7 +5,7 @@ import pytest from openbb_core.app.model.command_context import CommandContext -from openbb_core.app.model.obbject import Obbject +from openbb_core.app.model.obbject import OBBject from openbb_core.app.provider_interface import ( ExtraParams, ProviderChoices, @@ -105,8 +105,8 @@ def test_check_return_error(command_validator): def test_check_return(command_validator): """Test check_return.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check_return(valid_function) is None @@ -114,8 +114,8 @@ def test_check_return(command_validator): def test_check(command_validator): """Test check.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert command_validator.check(valid_function) is None @@ -135,8 +135,8 @@ def test_command(router): """Test command.""" @router.command - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) assert valid_function @@ -182,7 +182,7 @@ def test_complete_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass model = "StockEOD" @@ -193,8 +193,8 @@ def test_complete_signature(signature_inspector): def test_complete_signature_error(signature_inspector): """Test complete_signature.""" - def valid_function() -> Obbject[int]: - return Obbject(results=[1, 2, 3]) + def valid_function() -> OBBject[int]: + return OBBject(results=[1, 2, 3]) with pytest.raises(AttributeError): signature_inspector.complete_signature(valid_function, "invalid_model") @@ -208,7 +208,7 @@ def test_validate_signature(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass expected_signature = { @@ -232,7 +232,7 @@ def test_inject_dependency(signature_inspector): provider_choices: ProviderChoices, standard_params: StandardParams, extra_params: ExtraParams, - ) -> Obbject: + ) -> OBBject: pass assert signature_inspector.inject_dependency(sample_function, "cc", CommandContext) From 76ea5f39756f05a0bcd2675f69b4d39e01f950c2 Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 20:05:42 +0530 Subject: [PATCH 10/14] Fixed `Fetcher` functions --- openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py | 2 +- openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py | 2 +- openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py | 2 +- .../providers/yfinance/openbb_yfinance/models/crypto_eod.py | 2 +- .../providers/yfinance/openbb_yfinance/models/forex_eod.py | 2 +- .../yfinance/openbb_yfinance/models/major_indices_eod.py | 2 +- .../providers/yfinance/openbb_yfinance/models/stock_eod.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py b/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py index 6ddb36d9a43..a31ac9fbd66 100644 --- a/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/options_chains.py @@ -93,7 +93,7 @@ class CboeOptionsChainsData(OptionsChainsData): class CboeOptionsChainsFetcher( Fetcher[ CboeOptionsChainsQueryParams, - List[CboeOptionsChainsData], + CboeOptionsChainsData, ] ): @staticmethod diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py index 094ab95e52b..1fea6745f00 100644 --- a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_eod.py @@ -29,7 +29,7 @@ class CboeStockEODData(StockEODData): class CboeStockEODFetcher( Fetcher[ CboeStockEODQueryParams, - List[CboeStockEODData], + CboeStockEODData, ] ): @staticmethod diff --git a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py index bfbdfcbc2ab..80b1d2aa6d3 100644 --- a/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py +++ b/openbb_sdk/providers/cboe/openbb_cboe/models/stock_search.py @@ -46,7 +46,7 @@ class CboeStockSearchData(StockSearchData): class CboeStockSearchFetcher( Fetcher[ CboeStockSearchQueryParams, - List[CboeStockSearchData], + CboeStockSearchData, ] ): @staticmethod diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py index ece2f90ef6f..2ad194014c9 100644 --- a/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/crypto_eod.py @@ -49,7 +49,7 @@ class YFinanceCryptoEODData(CryptoEODData): class YFinanceCryptoEODFetcher( Fetcher[ YFinanceCryptoEODQueryParams, - List[YFinanceCryptoEODData], + YFinanceCryptoEODData, ] ): @staticmethod diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py index 4bcfac96986..19f1cf18bbe 100644 --- a/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/forex_eod.py @@ -46,7 +46,7 @@ class YFinanceForexEODData(ForexEODData): class YFinanceForexEODFetcher( Fetcher[ YFinanceForexEODQueryParams, - List[YFinanceForexEODData], + YFinanceForexEODData, ] ): @staticmethod diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py index e139b607325..c645bb669e3 100644 --- a/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/major_indices_eod.py @@ -49,7 +49,7 @@ class YFinanceMajorIndicesEODData(MajorIndicesEODData): class YFinanceMajorIndicesEODFetcher( Fetcher[ YFinanceMajorIndicesEODQueryParams, - List[YFinanceMajorIndicesEODData], + YFinanceMajorIndicesEODData, ] ): @staticmethod diff --git a/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py b/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py index 0e4a90929d5..ae57aa993b6 100644 --- a/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py +++ b/openbb_sdk/providers/yfinance/openbb_yfinance/models/stock_eod.py @@ -46,7 +46,7 @@ class YFinanceStockEODData(StockEODData): class YFinanceStockEODFetcher( Fetcher[ YFinanceStockEODQueryParams, - List[YFinanceStockEODData], + YFinanceStockEODData, ] ): @staticmethod From cf646df6b9bea53271ea6e7022fd691ab8db5943 Mon Sep 17 00:00:00 2001 From: Theodore Aptekarev Date: Mon, 14 Aug 2023 16:42:56 +0200 Subject: [PATCH 11/14] Add pydocstyle to v4 pre-commit hook (#5322) * Add pydocstyle pre-commit hook * Fix regex vs glob field value * Add pydocstyle linting github action * Fix pyproject.toml syntax for pydocstyle to work * Remove pydocstyle from GHA --- .github/workflows/linting.yml | 8 +- .pre-commit-config.yaml | 11 + poetry.lock | 484 ++-------------------------------- pyproject.toml | 2 +- requirements-full.txt | 6 +- requirements.txt | 6 +- 6 files changed, 40 insertions(+), 477 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 217cadebb82..db2a26e7e6a 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -12,9 +12,9 @@ on: types: [opened, synchronize, edited] push: branches: - - 'feature/*' - - 'hotfix/*' - - 'release/*' + - "feature/*" + - "hotfix/*" + - "release/*" merge_group: types: [checks_requested] @@ -74,4 +74,4 @@ jobs: id: json-yaml-validate uses: GrantBirki/json-yaml-validate@v2.0.0 with: - exclude_file: json_validate_exclude.txt \ No newline at end of file + exclude_file: json_validate_exclude.txt diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 380facc5318..89e2abc8181 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -17,6 +17,17 @@ repos: rev: "v0.0.256" hooks: - id: ruff + - repo: https://github.com/pycqa/pydocstyle + rev: 6.3.0 + hooks: + - id: pydocstyle + name: pydocstyle + entry: pydocstyle + language: python + types: [python] + files: '^openbb_sdk/.*\.py$' + exclude: 'tests/.*\.py|openbb_sdk/test_.*\.py' + args: ["--config=pyproject.toml"] - repo: https://github.com/codespell-project/codespell rev: v2.2.5 hooks: diff --git a/poetry.lock b/poetry.lock index 943196d1e9b..00c92419841 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "absl-py" version = "1.4.0" description = "Abseil Python Common Libraries, see https://github.com/abseil/abseil-py." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -16,7 +15,6 @@ files = [ name = "adagio" version = "0.2.4" description = "The Dag IO Framework for Fugue projects" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -31,7 +29,6 @@ triad = ">=0.6.1" name = "aiodns" version = "3.0.0" description = "Simple DNS resolver for asyncio" -category = "main" optional = false python-versions = "*" files = [ @@ -46,7 +43,6 @@ pycares = ">=4.0.0" name = "aiofiles" version = "22.1.0" description = "File support for asyncio." -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -58,7 +54,6 @@ files = [ name = "aiohttp" version = "3.8.5" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -167,7 +162,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -182,7 +176,6 @@ frozenlist = ">=1.1.0" name = "aiosqlite" version = "0.19.0" description = "asyncio bridge to the standard sqlite3 module" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -198,7 +191,6 @@ docs = ["sphinx (==6.1.3)", "sphinx-mdinclude (==0.5.3)"] name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -210,7 +202,6 @@ files = [ name = "alpha-vantage" version = "2.3.1" description = "Python module to get stock data from the Alpha Vantage Api" -category = "main" optional = false python-versions = "*" files = [ @@ -226,7 +217,6 @@ requests = "*" name = "altair" version = "5.0.1" description = "Vega-Altair: A declarative statistical visualization library for Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -250,7 +240,6 @@ doc = ["docutils", "geopandas", "jinja2", "myst-parser", "numpydoc", "pillow", " name = "altgraph" version = "0.17.3" description = "Python graph (network) package" -category = "main" optional = true python-versions = "*" files = [ @@ -262,7 +251,6 @@ files = [ name = "ansi2html" version = "1.8.0" description = "" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -278,7 +266,6 @@ test = ["pytest", "pytest-cov"] name = "ansiwrap" version = "0.8.4" description = "textwrap, but savvy to ANSI colors and styles" -category = "main" optional = false python-versions = "*" files = [ @@ -293,7 +280,6 @@ textwrap3 = ">=0.9.2" name = "antlr4-python3-runtime" version = "4.11.1" description = "ANTLR 4.11.1 runtime for Python 3" -category = "main" optional = true python-versions = "*" files = [ @@ -305,7 +291,6 @@ files = [ name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -327,7 +312,6 @@ trio = ["trio (<0.22)"] name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = "*" files = [ @@ -339,7 +323,6 @@ files = [ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = "*" files = [ @@ -351,7 +334,6 @@ files = [ name = "arch" version = "5.6.0" description = "ARCH for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -391,7 +373,6 @@ statsmodels = ">=0.11" name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -411,7 +392,6 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -449,7 +429,6 @@ tests = ["pytest"] name = "arrow" version = "1.2.3" description = "Better dates & times for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -464,7 +443,6 @@ python-dateutil = ">=2.7.0" name = "ascii-magic" version = "1.6" description = "Converts pictures into ASCII art" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -480,7 +458,6 @@ Pillow = "*" name = "astor" version = "0.8.1" description = "Read/rewrite/write Python ASTs" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" files = [ @@ -492,7 +469,6 @@ files = [ name = "astroid" version = "2.15.6" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -509,7 +485,6 @@ wrapt = {version = ">=1.11,<2", markers = "python_version < \"3.11\""} name = "astropy" version = "5.2.2" description = "Astronomy and astrophysics core library" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -563,7 +538,6 @@ test-all = ["coverage[toml]", "ipython (>=4.2)", "objgraph", "pytest (>=7.0)", " name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" -category = "main" optional = false python-versions = "*" files = [ @@ -581,7 +555,6 @@ test = ["astroid", "pytest"] name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -593,7 +566,6 @@ files = [ name = "atomicwrites" version = "1.4.1" description = "Atomic file writes." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -604,7 +576,6 @@ files = [ name = "attrs" version = "21.4.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -622,7 +593,6 @@ tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy" name = "babel" version = "2.12.1" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -637,7 +607,6 @@ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -649,7 +618,6 @@ files = [ name = "backoff" version = "2.2.1" description = "Function decoration for backoff and retry" -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -661,7 +629,6 @@ files = [ name = "backports-zoneinfo" version = "0.2.1" description = "Backport of the standard library zoneinfo module" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -690,7 +657,6 @@ tzdata = ["tzdata"] name = "bandit" version = "1.7.5" description = "Security oriented static analyser for python code." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -714,7 +680,6 @@ yaml = ["PyYAML"] name = "base58" version = "2.1.1" description = "Base58 and Base58Check implementation." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -729,7 +694,6 @@ tests = ["PyHamcrest (>=2.0.2)", "mypy", "pytest (>=4.6)", "pytest-benchmark", " name = "beautifulsoup4" version = "4.12.2" description = "Screen-scraping library" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -748,7 +712,6 @@ lxml = ["lxml"] name = "black" version = "23.7.0" description = "The uncompromising code formatter." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -795,7 +758,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "bleach" version = "6.0.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -814,7 +776,6 @@ css = ["tinycss2 (>=1.1.0,<1.2)"] name = "blinker" version = "1.6.2" description = "Fast, simple object-to-object and broadcast signaling" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -826,7 +787,6 @@ files = [ name = "brotli" version = "1.0.9" description = "Python bindings for the Brotli compression library" -category = "main" optional = true python-versions = "*" files = [ @@ -918,7 +878,6 @@ files = [ name = "brotlicffi" version = "1.0.9.2" description = "Python CFFI bindings to the Brotli library" -category = "main" optional = true python-versions = "*" files = [ @@ -961,7 +920,6 @@ cffi = ">=1.0.0" name = "bs4" version = "0.0.1" description = "Dummy package for Beautiful Soup" -category = "main" optional = false python-versions = "*" files = [ @@ -975,7 +933,6 @@ beautifulsoup4 = "*" name = "bt" version = "0.2.9" description = "A flexible backtesting framework for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -1001,7 +958,6 @@ dev = ["black (>=20.8b1)", "codecov", "coverage", "cython (>=0.25)", "ffn (>=0.3 name = "cachetools" version = "5.3.1" description = "Extensible memoizing collections and decorators" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1013,7 +969,6 @@ files = [ name = "catboost" version = "1.2" description = "CatBoost Python Package" -category = "main" optional = true python-versions = "*" files = [ @@ -1056,7 +1011,6 @@ widget = ["ipython", "ipywidgets (>=7.0,<9.0)", "traitlets"] name = "cattrs" version = "23.1.2" description = "Composable complex class support for attrs and dataclasses." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1082,7 +1036,6 @@ ujson = ["ujson (>=5.4.0,<6.0.0)"] name = "ccxt" version = "4.0.33" description = "A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges" -category = "main" optional = false python-versions = "*" files = [ @@ -1106,7 +1059,6 @@ qa = ["flake8 (==3.7.9)"] name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1118,7 +1070,6 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = "*" files = [ @@ -1195,7 +1146,6 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -1207,7 +1157,6 @@ files = [ name = "charset-normalizer" version = "3.2.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -1292,7 +1241,6 @@ files = [ name = "click" version = "8.1.6" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1307,7 +1255,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "cloudpickle" version = "2.2.1" description = "Extended pickling support for Python objects" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1319,7 +1266,6 @@ files = [ name = "cmdstanpy" version = "1.1.0" description = "Python interface to CmdStan" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1341,7 +1287,6 @@ tests = ["flake8", "mypy", "pylint", "pytest", "pytest-cov", "pytest-order", "tq name = "codespell" version = "2.2.5" description = "Codespell" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1359,7 +1304,6 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -1371,7 +1315,6 @@ files = [ name = "comm" version = "0.1.3" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1391,7 +1334,6 @@ typing = ["mypy (>=0.990)"] name = "commonmark" version = "0.9.1" description = "Python parser for the CommonMark Markdown spec" -category = "main" optional = false python-versions = "*" files = [ @@ -1406,7 +1348,6 @@ test = ["flake8 (==3.7.8)", "hypothesis (==3.55.3)"] name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1465,7 +1406,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "convertdate" version = "2.4.0" description = "Converts between Gregorian dates and other calendar systems" -category = "main" optional = false python-versions = "<4,>=3.7" files = [ @@ -1485,7 +1425,6 @@ tests = ["coverage"] name = "coverage" version = "7.2.7" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1561,7 +1500,6 @@ toml = ["tomli"] name = "cryptography" version = "41.0.2" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1607,7 +1545,6 @@ test-randomorder = ["pytest-randomly"] name = "cssselect" version = "1.2.0" description = "cssselect parses CSS3 Selectors and translates them to XPath 1.0" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1619,7 +1556,6 @@ files = [ name = "cssselect2" version = "0.7.0" description = "CSS selectors for Python ElementTree" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1639,7 +1575,6 @@ test = ["flake8", "isort", "pytest"] name = "cvxpy" version = "1.2.2" description = "A domain-specific language for modeling convex optimization problems in Python." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -1672,7 +1607,6 @@ scs = ">=1.1.6" name = "cycler" version = "0.11.0" description = "Composable style cycles" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1684,7 +1618,6 @@ files = [ name = "cython" version = "3.0.0" description = "The Cython compiler for writing C extensions in the Python language." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1752,7 +1685,6 @@ files = [ name = "dash" version = "2.9.3" description = "A Python framework for building reactive web-apps. Developed by Plotly." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1779,7 +1711,6 @@ testing = ["beautifulsoup4 (>=4.8.2)", "cryptography (<3.4)", "dash-testing-stub name = "dash-core-components" version = "2.0.0" description = "Core component suite for Dash" -category = "main" optional = true python-versions = "*" files = [ @@ -1791,7 +1722,6 @@ files = [ name = "dash-html-components" version = "2.0.0" description = "Vanilla HTML components for Dash" -category = "main" optional = true python-versions = "*" files = [ @@ -1803,7 +1733,6 @@ files = [ name = "dash-table" version = "5.0.0" description = "Dash table" -category = "main" optional = true python-versions = "*" files = [ @@ -1815,7 +1744,6 @@ files = [ name = "dataclasses-json" version = "0.5.12" description = "Easily serialize dataclasses to and from JSON." -category = "main" optional = false python-versions = ">=3.7,<3.12" files = [ @@ -1831,7 +1759,6 @@ typing-inspect = ">=0.4.0,<1" name = "dateparser" version = "1.1.8" description = "Date parsing library designed to parse dates from HTML pages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1854,7 +1781,6 @@ langdetect = ["langdetect"] name = "datetime" version = "5.2" description = "This package provides a DateTime data type, as known from Zope. Unless you need to communicate with Zope APIs, you're probably better off using Python's built-in datetime module." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1870,7 +1796,6 @@ pytz = "*" name = "debugpy" version = "1.6.7" description = "An implementation of the Debug Adapter Protocol for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1898,7 +1823,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1910,7 +1834,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1922,7 +1845,6 @@ files = [ name = "degiro-connector" version = "2.0.21" description = "This is yet another library to access Degiro's API." -category = "main" optional = false python-versions = ">=3.7.1,<4.0.0" files = [ @@ -1942,7 +1864,6 @@ wrapt = ">=1.12.1,<2.0.0" name = "detecta" version = "0.0.5" description = "Detect events in data" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1954,7 +1875,6 @@ files = [ name = "dill" version = "0.3.6" description = "serialize all of python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1969,7 +1889,6 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -1981,7 +1900,6 @@ files = [ name = "dnspython" version = "2.4.0" description = "DNS toolkit" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -2005,7 +1923,6 @@ wmi = ["wmi (>=1.5.1,<2.0.0)"] name = "docstring-parser" version = "0.15" description = "Parse Python docstrings in reST, Google and Numpydoc format" -category = "main" optional = true python-versions = ">=3.6,<4.0" files = [ @@ -2017,7 +1934,6 @@ files = [ name = "docstring-to-markdown" version = "0.12" description = "On the fly conversion of Python docstrings to markdown" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2029,7 +1945,6 @@ files = [ name = "docutils" version = "0.17.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -2041,7 +1956,6 @@ files = [ name = "ecdsa" version = "0.18.0" description = "ECDSA cryptographic signature library (pure python)" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2060,7 +1974,6 @@ gmpy2 = ["gmpy2"] name = "ecos" version = "2.0.12" description = "This is the Python package for ECOS: Embedded Cone Solver. See Github page for more information." -category = "main" optional = true python-versions = "*" files = [ @@ -2090,7 +2003,6 @@ scipy = ">=0.9" name = "entrypoints" version = "0.4" description = "Discover and load entry points from installed packages." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2102,7 +2014,6 @@ files = [ name = "ephem" version = "4.1.4" description = "Compute positions of the planets and stars" -category = "main" optional = true python-versions = "*" files = [ @@ -2179,7 +2090,6 @@ files = [ name = "et-xmlfile" version = "1.1.0" description = "An implementation of lxml.xmlfile for the standard library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2191,7 +2101,6 @@ files = [ name = "exceptiongroup" version = "1.1.2" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2206,7 +2115,6 @@ test = ["pytest (>=6)"] name = "exchange-calendars" version = "4.2.8" description = "Calendars for securities exchanges" -category = "main" optional = false python-versions = "~=3.8" files = [ @@ -2230,7 +2138,6 @@ dev = ["flake8", "hypothesis", "pip-tools", "pytest", "pytest-benchmark", "pytes name = "execnet" version = "2.0.2" description = "execnet: rapid multi-Python deployment" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2245,7 +2152,6 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = false python-versions = "*" files = [ @@ -2260,7 +2166,6 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "fastjsonschema" version = "2.17.1" description = "Fastest Python implementation of JSON schema" -category = "main" optional = false python-versions = "*" files = [ @@ -2275,7 +2180,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "feedparser" version = "6.0.10" description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2290,7 +2194,6 @@ sgmllib3k = "*" name = "ffmpeg-python" version = "0.2.0" description = "Python bindings for FFmpeg - with complex filtering support" -category = "main" optional = true python-versions = "*" files = [ @@ -2308,7 +2211,6 @@ dev = ["Sphinx (==2.1.0)", "future (==0.17.1)", "numpy (==1.16.4)", "pytest (==4 name = "ffn" version = "0.3.6" description = "Financial functions for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -2334,7 +2236,6 @@ dev = ["black (>=20.8b1)", "codecov", "coverage", "flake8", "flake8-black", "fut name = "filelock" version = "3.12.2" description = "A platform independent file lock." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2350,7 +2251,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "financedatabase" version = "2.1.0" description = "This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets." -category = "main" optional = false python-versions = "*" files = [ @@ -2365,7 +2265,6 @@ pandas = "*" name = "finnhub-python" version = "2.4.18" description = "Finnhub API" -category = "main" optional = false python-versions = "*" files = [ @@ -2380,7 +2279,6 @@ requests = ">=2.22.0" name = "finviz" version = "1.4.6" description = "Unofficial API for FinViz.com" -category = "main" optional = false python-versions = "*" files = [ @@ -2402,7 +2300,6 @@ user_agent = "*" name = "finvizfinance" version = "0.14.5" description = "Finviz Finance. Information downloader." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -2421,7 +2318,6 @@ requests = "*" name = "flake8" version = "6.0.0" description = "the modular source code checker: pep8 pyflakes and co" -category = "main" optional = false python-versions = ">=3.8.1" files = [ @@ -2438,7 +2334,6 @@ pyflakes = ">=3.0.0,<3.1.0" name = "flask" version = "2.3.2" description = "A simple framework for building complex web applications." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2462,7 +2357,6 @@ dotenv = ["python-dotenv"] name = "fonttools" version = "4.41.0" description = "Tools to manipulate font files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2520,7 +2414,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "formulaic" version = "0.6.4" description = "An implementation of Wilkinson formulas." -category = "main" optional = false python-versions = ">=3.7.2" files = [ @@ -2546,7 +2439,6 @@ calculus = ["sympy (>=1.3,!=1.10)"] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "main" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -2558,7 +2450,6 @@ files = [ name = "fred" version = "3.1" description = "St. Louis Federal Reserve FRED API" -category = "main" optional = false python-versions = "*" files = [ @@ -2572,7 +2463,6 @@ requests = "*" name = "fredapi" version = "0.4.3" description = "Python API for Federal Reserve Economic Data (FRED) from St. Louis Fed" -category = "main" optional = false python-versions = "*" files = [ @@ -2587,7 +2477,6 @@ pandas = "*" name = "freezegun" version = "1.2.2" description = "Let your Python tests travel through time" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2602,7 +2491,6 @@ python-dateutil = ">=2.7" name = "frozendict" version = "2.3.8" description = "A simple immutable dictionary" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2649,7 +2537,6 @@ files = [ name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2720,7 +2607,6 @@ files = [ name = "fs" version = "2.4.16" description = "Python's filesystem abstraction layer" -category = "main" optional = true python-versions = "*" files = [ @@ -2740,7 +2626,6 @@ scandir = ["scandir (>=1.5,<2.0)"] name = "fsspec" version = "2023.6.0" description = "File-system specification" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2780,7 +2665,6 @@ tqdm = ["tqdm"] name = "fugue" version = "0.8.5" description = "An abstraction layer for distributed computation" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2814,7 +2698,6 @@ sql = ["fugue-sql-antlr (>=0.1.6)", "jinja2", "qpd (>=0.4.3)", "sqlglot"] name = "fugue-sql-antlr" version = "0.1.6" description = "Fugue SQL Antlr Parser" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2834,7 +2717,6 @@ test = ["speedy_antlr_tool"] name = "fundamentalanalysis" version = "0.2.14" description = "Fully-fledged Fundamental Analysis package capable of collecting 20 years of Company Profiles, Financial Statements, Ratios and Stock Data of 20.000+ companies." -category = "main" optional = false python-versions = "*" files = [ @@ -2846,7 +2728,6 @@ files = [ name = "future" version = "0.18.3" description = "Clean single-source support for Python 3 and 2" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2857,7 +2738,6 @@ files = [ name = "gitdb" version = "4.0.10" description = "Git Object Database" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2872,7 +2752,6 @@ smmap = ">=3.0.1,<6" name = "gitpython" version = "3.1.32" description = "GitPython is a Python library used to interact with Git repositories" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2887,7 +2766,6 @@ gitdb = ">=4.0.1,<5" name = "google-auth" version = "2.22.0" description = "Google Authentication Library" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2913,7 +2791,6 @@ requests = ["requests (>=2.20.0,<3.0.0.dev0)"] name = "google-auth-oauthlib" version = "1.0.0" description = "Google Authentication Library" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -2932,7 +2809,6 @@ tool = ["click (>=6.0.0)"] name = "graphlib-backport" version = "1.0.3" description = "Backport of the Python 3.9 graphlib module for Python 3.6+" -category = "main" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -2944,7 +2820,6 @@ files = [ name = "graphviz" version = "0.20.1" description = "Simple Python interface for Graphviz" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2961,7 +2836,6 @@ test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>= name = "greenlet" version = "2.0.2" description = "Lightweight in-process concurrent programming" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" files = [ @@ -3035,7 +2909,6 @@ test = ["objgraph", "psutil"] name = "grpcio" version = "1.56.2" description = "HTTP/2-based RPC framework" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3093,7 +2966,6 @@ protobuf = ["grpcio-tools (>=1.56.2)"] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3105,7 +2977,6 @@ files = [ name = "hijri-converter" version = "2.3.1" description = "Accurate Hijri-Gregorian dates converter based on the Umm al-Qura calendar" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3117,7 +2988,6 @@ files = [ name = "holidays" version = "0.14.2" description = "Generate and work with holidays in Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3135,7 +3005,6 @@ python-dateutil = "*" name = "html5lib" version = "1.1" description = "HTML parser based on the WHATWG HTML specification" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -3157,7 +3026,6 @@ lxml = ["lxml"] name = "httpcore" version = "0.17.3" description = "A minimal low-level HTTP client." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3169,17 +3037,16 @@ files = [ anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = ">=1.0.0,<2.0.0" +sniffio = "==1.*" [package.extras] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "huggingface-hub" version = "0.16.4" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -3212,7 +3079,6 @@ typing = ["pydantic", "types-PyYAML", "types-requests", "types-simplejson", "typ name = "identify" version = "2.5.25" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3227,7 +3093,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3239,7 +3104,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3251,7 +3115,6 @@ files = [ name = "importlib-metadata" version = "6.8.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3271,7 +3134,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs name = "importlib-resources" version = "6.0.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3290,7 +3152,6 @@ testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", name = "inflection" version = "0.5.1" description = "A port of Ruby on Rails inflector to Python" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3302,7 +3163,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3314,7 +3174,6 @@ files = [ name = "interface-meta" version = "1.3.0" description = "`interface_meta` provides a convenient way to expose an extensible API with enforced method signatures and consistent documentation." -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -3326,7 +3185,6 @@ files = [ name = "intrinio-sdk" version = "6.24.1" description = "Intrinio API" -category = "main" optional = false python-versions = "*" files = [ @@ -3345,7 +3203,6 @@ urllib3 = ">=1.15" name = "ipykernel" version = "6.24.0" description = "IPython Kernel for Jupyter" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3359,7 +3216,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -3379,7 +3236,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio" name = "ipympl" version = "0.8.4" description = "Matplotlib Jupyter Extension" -category = "main" optional = false python-versions = "*" files = [ @@ -3396,7 +3252,6 @@ matplotlib = ">=2.0.0" name = "ipython" version = "8.11.0" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3435,7 +3290,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "ipython-genutils" version = "0.2.0" description = "Vestigial utilities from IPython" -category = "main" optional = false python-versions = "*" files = [ @@ -3447,7 +3301,6 @@ files = [ name = "ipywidgets" version = "8.0.7" description = "Jupyter interactive widgets" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3469,7 +3322,6 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] name = "iso8601" version = "0.1.16" description = "Simple module to parse ISO 8601 dates" -category = "main" optional = false python-versions = "*" files = [ @@ -3481,7 +3333,6 @@ files = [ name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false python-versions = "*" files = [ @@ -3496,7 +3347,6 @@ six = "*" name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3511,7 +3361,6 @@ arrow = ">=0.15.0" name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -3529,7 +3378,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "itsdangerous" version = "2.1.2" description = "Safely pass data to untrusted environments and back." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3541,7 +3389,6 @@ files = [ name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3561,7 +3408,6 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jedi-language-server" version = "0.40.0" description = "A language server for Jedi!" -category = "main" optional = true python-versions = ">=3.7,<3.12" files = [ @@ -3580,7 +3426,6 @@ pygls = ">=1.0.0,<2.0.0" name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3598,7 +3443,6 @@ i18n = ["Babel (>=2.7)"] name = "joblib" version = "1.3.1" description = "Lightweight pipelining with Python functions" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3610,7 +3454,6 @@ files = [ name = "json5" version = "0.9.14" description = "A Python implementation of the JSON5 data format." -category = "main" optional = false python-versions = "*" files = [ @@ -3625,7 +3468,6 @@ dev = ["hypothesis"] name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ @@ -3637,7 +3479,6 @@ files = [ name = "jsonschema" version = "4.17.3" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3667,7 +3508,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jupyter-client" version = "7.4.1" description = "Jupyter protocol implementation and client libraries" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3692,7 +3532,6 @@ test = ["codecov", "coverage", "ipykernel (>=6.5)", "ipython", "mypy", "pre-comm name = "jupyter-core" version = "5.3.1" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3713,7 +3552,6 @@ test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] name = "jupyter-dash" version = "0.4.2" description = "Dash support for the Jupyter notebook interface" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -3738,7 +3576,6 @@ dev = ["jupyter-server-proxy", "jupyterlab (>=2.0)", "notebook (>=6.0)"] name = "jupyter-events" version = "0.6.3" description = "Jupyter Event System library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3763,7 +3600,6 @@ test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>= name = "jupyter-lsp" version = "2.2.0" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -3779,7 +3615,6 @@ jupyter-server = ">=1.1.2" name = "jupyter-server" version = "1.23.6" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3792,7 +3627,7 @@ anyio = ">=3.1.0,<4" argon2-cffi = "*" jinja2 = "*" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbconvert = ">=6.4.4" nbformat = ">=5.2.0" packaging = "*" @@ -3812,7 +3647,6 @@ test = ["coverage", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console name = "jupyter-server-fileid" version = "0.9.0" description = "" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3832,7 +3666,6 @@ test = ["jupyter-server[test] (>=1.15,<3)", "pytest", "pytest-cov"] name = "jupyter-server-ydoc" version = "0.8.0" description = "A Jupyter Server Extension Providing Y Documents." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3852,7 +3685,6 @@ test = ["coverage", "jupyter-server[test] (>=2.0.0a0)", "pytest (>=7.0)", "pytes name = "jupyter-ydoc" version = "0.2.5" description = "Document structures for collaborative editing using Ypy" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3872,7 +3704,6 @@ test = ["pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)", "ypy-we name = "jupyterlab" version = "3.6.5" description = "JupyterLab computational environment" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3901,7 +3732,6 @@ test = ["check-manifest", "coverage", "jupyterlab-server[test]", "pre-commit", " name = "jupyterlab-code-formatter" version = "1.6.1" description = "Code formatter for JupyterLab" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -3916,7 +3746,6 @@ jupyterlab = ">=3.0,<4.0" name = "jupyterlab-lsp" version = "3.10.2" description = "Coding assistance for JupyterLab with Language Server Protocol" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3932,7 +3761,6 @@ jupyterlab = ">=3.1.0,<4.0.0a0" name = "jupyterlab-pygments" version = "0.2.2" description = "Pygments theme using JupyterLab CSS variables" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3944,7 +3772,6 @@ files = [ name = "jupyterlab-server" version = "2.23.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3971,7 +3798,6 @@ test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-valida name = "jupyterlab-widgets" version = "3.0.8" description = "Jupyter interactive widgets for JupyterLab" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3983,7 +3809,6 @@ files = [ name = "kiwisolver" version = "1.4.4" description = "A fast implementation of the Cassowary constraint solver" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4061,7 +3886,6 @@ files = [ name = "korean-lunar-calendar" version = "0.3.1" description = "Korean Lunar Calendar" -category = "main" optional = false python-versions = "*" files = [ @@ -4073,7 +3897,6 @@ files = [ name = "langchain" version = "0.0.237" description = "Building applications with LLMs through composability" -category = "main" optional = false python-versions = ">=3.8.1,<4.0" files = [ @@ -4113,7 +3936,6 @@ text-helpers = ["chardet (>=5.1.0,<6.0.0)"] name = "langsmith" version = "0.0.10" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." -category = "main" optional = false python-versions = ">=3.8.1,<4.0" files = [ @@ -4129,7 +3951,6 @@ requests = ">=2,<3" name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4175,7 +3996,6 @@ files = [ name = "lightgbm" version = "3.3.5" description = "LightGBM Python Package" -category = "main" optional = true python-versions = "*" files = [ @@ -4199,7 +4019,6 @@ dask = ["dask[array] (>=2.0.0)", "dask[dataframe] (>=2.0.0)", "dask[distributed] name = "lightning-utilities" version = "0.9.0" description = "PyTorch Lightning Sample project." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4220,7 +4039,6 @@ typing = ["mypy (>=1.0.0)"] name = "linearmodels" version = "4.31" description = "Linear Panel, Instrumental Variable, Asset Pricing, and System Regression models for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4265,7 +4083,6 @@ statsmodels = ">=0.11" name = "llama-index" version = "0.7.11" description = "Interface between LLMs and your data" -category = "main" optional = false python-versions = "*" files = [ @@ -4293,7 +4110,6 @@ urllib3 = "<2" name = "llvmlite" version = "0.40.1" description = "lightweight wrapper around basic LLVM functionality" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -4327,7 +4143,6 @@ files = [ name = "loguru" version = "0.7.0" description = "Python logging made (stupidly) simple" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -4346,7 +4161,6 @@ dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegu name = "lsprotocol" version = "2023.0.0a2" description = "Python implementation of the Language Server Protocol." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4362,7 +4176,6 @@ cattrs = "*" name = "lunarcalendar" version = "0.0.9" description = "A lunar calendar converter, including a number of lunar and solar holidays, mainly from China." -category = "main" optional = true python-versions = ">=2.7, <4" files = [ @@ -4379,7 +4192,6 @@ pytz = "*" name = "lxml" version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ @@ -4487,7 +4299,6 @@ source = ["Cython (>=0.29.35)"] name = "macholib" version = "1.16.2" description = "Mach-O header analysis and editing" -category = "main" optional = true python-versions = "*" files = [ @@ -4502,7 +4313,6 @@ altgraph = ">=0.17" name = "markdown" version = "3.4.3" description = "Python implementation of John Gruber's Markdown." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4520,7 +4330,6 @@ testing = ["coverage", "pyyaml"] name = "markdown-it-py" version = "1.1.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" optional = false python-versions = "~=3.6" files = [ @@ -4543,7 +4352,6 @@ testing = ["coverage", "psutil", "pytest (>=3.6,<4)", "pytest-benchmark (>=3.2,< name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4603,7 +4411,6 @@ files = [ name = "marshmallow" version = "3.19.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4624,7 +4431,6 @@ tests = ["pytest", "pytz", "simplejson"] name = "matplotlib" version = "3.7.2" description = "Python plotting package" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4687,7 +4493,6 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -4702,7 +4507,6 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4714,7 +4518,6 @@ files = [ name = "mdit-py-plugins" version = "0.2.8" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = "~=3.6" files = [ @@ -4734,7 +4537,6 @@ testing = ["coverage", "pytest (>=3.6,<4)", "pytest-cov", "pytest-regressions"] name = "mistune" version = "3.0.1" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4746,7 +4548,6 @@ files = [ name = "mock" version = "4.0.3" description = "Rolling backport of unittest.mock for all Pythons" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4763,7 +4564,6 @@ test = ["pytest (<5.4)", "pytest-cov"] name = "monotonic" version = "1.6" description = "An implementation of time.monotonic() for Python 2 & < 3.3" -category = "main" optional = false python-versions = "*" files = [ @@ -4775,7 +4575,6 @@ files = [ name = "more-itertools" version = "9.1.0" description = "More routines for operating on iterables, beyond itertools" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4787,7 +4586,6 @@ files = [ name = "mplfinance" version = "0.12.9b7" description = "Utilities for the visualization, and visual analysis, of financial data" -category = "main" optional = false python-versions = "*" files = [ @@ -4803,7 +4601,6 @@ pandas = "*" name = "mstarpy" version = "0.0.4" description = "Mutual funds data extraction from MorningStar with Python" -category = "main" optional = false python-versions = "*" files = [ @@ -4820,7 +4617,6 @@ requests = ">=2.28.1" name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4904,7 +4700,6 @@ files = [ name = "multitasking" version = "0.0.11" description = "Non-blocking Python methods using decorators" -category = "main" optional = false python-versions = "*" files = [ @@ -4916,7 +4711,6 @@ files = [ name = "mutagen" version = "1.46.0" description = "read and write audio tags for many formats" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -4928,7 +4722,6 @@ files = [ name = "mypy" version = "1.4.1" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4975,7 +4768,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -4987,7 +4779,6 @@ files = [ name = "myst-parser" version = "0.15.2" description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -5013,7 +4804,6 @@ testing = ["beautifulsoup4", "coverage", "docutils (>=0.17.0,<0.18.0)", "pytest name = "nbclassic" version = "1.0.0" description = "Jupyter Notebook as a Jupyter Server extension." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5049,7 +4839,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-p name = "nbclient" version = "0.6.8" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -5071,7 +4860,6 @@ test = ["black", "check-manifest", "flake8", "ipykernel", "ipython", "ipywidgets name = "nbconvert" version = "7.7.2" description = "Converting Jupyter Notebooks" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5110,7 +4898,6 @@ webpdf = ["playwright"] name = "nbformat" version = "5.9.1" description = "The Jupyter Notebook format" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5132,7 +4919,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "nbmake" version = "1.4.1" description = "Pytest plugin for testing notebooks" -category = "dev" optional = false python-versions = ">=3.7.0,<4.0.0" files = [ @@ -5152,7 +4938,6 @@ pytest = ">=6.1.0" name = "nest-asyncio" version = "1.5.6" description = "Patch asyncio to allow nested event loops" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -5164,7 +4949,6 @@ files = [ name = "networkx" version = "3.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -5183,7 +4967,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "nfoursid" version = "1.0.1" description = "Implementation of N4SID, Kalman filtering and state-space models" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5200,7 +4983,6 @@ pandas = ">=1.1" name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -5215,7 +4997,6 @@ setuptools = "*" name = "notebook" version = "6.5.4" description = "A web-based notebook environment for interactive computing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5250,7 +5031,6 @@ test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixs name = "notebook-shim" version = "0.2.3" description = "A shim layer for notebook traits and config" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5268,7 +5048,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numba" version = "0.57.1" description = "compiling Python code using LLVM" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -5300,14 +5079,13 @@ files = [ [package.dependencies] importlib-metadata = {version = "*", markers = "python_version < \"3.9\""} -llvmlite = ">=0.40.0dev0,<0.41" +llvmlite = "==0.40.*" numpy = ">=1.21,<1.25" [[package]] name = "numexpr" version = "2.8.4" description = "Fast numerical expression evaluator for NumPy" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5350,7 +5128,6 @@ numpy = ">=1.13.3" name = "numpy" version = "1.23.4" description = "NumPy is the fundamental package for array computing with Python." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5388,7 +5165,6 @@ files = [ name = "oandapyv20" version = "0.6.3" description = "Python wrapper for the OANDA REST-V20 API" -category = "main" optional = false python-versions = "*" files = [ @@ -5399,7 +5175,6 @@ files = [ name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -5416,7 +5191,6 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] name = "onetimepass" version = "1.0.1" description = "Module for generating and validating HOTP and TOTP tokens" -category = "main" optional = false python-versions = "*" files = [ @@ -5430,7 +5204,6 @@ six = "*" name = "openai" version = "0.27.8" description = "Python client library for the OpenAI API" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -5445,7 +5218,7 @@ tqdm = "*" [package.extras] datalib = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] -dev = ["black (>=21.6b0,<22.0)", "pytest (>=6.0.0,<7.0.0)", "pytest-asyncio", "pytest-mock"] +dev = ["black (>=21.6b0,<22.0)", "pytest (==6.*)", "pytest-asyncio", "pytest-mock"] embeddings = ["matplotlib", "numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "plotly", "scikit-learn (>=1.0.2)", "scipy", "tenacity (>=8.0.1)"] wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)", "wandb"] @@ -5453,7 +5226,6 @@ wandb = ["numpy", "openpyxl (>=3.0.7)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1 name = "openai-whisper" version = "20230124" description = "Robust Speech Recognition via Large-Scale Weak Supervision" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5475,7 +5247,6 @@ dev = ["pytest"] name = "openapi-schema-pydantic" version = "1.2.4" description = "OpenAPI (v3) specification schema as pydantic class" -category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -5490,7 +5261,6 @@ pydantic = ">=1.8.2" name = "openpyxl" version = "3.1.2" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5505,7 +5275,6 @@ et-xmlfile = "*" name = "orjson" version = "3.9.2" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5517,6 +5286,7 @@ files = [ {file = "orjson-3.9.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a39c2529d75373b7167bf84c814ef9b8f3737a339c225ed6c0df40736df8748"}, {file = "orjson-3.9.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:84ebd6fdf138eb0eb4280045442331ee71c0aab5e16397ba6645f32f911bfb37"}, {file = "orjson-3.9.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a60a1cfcfe310547a1946506dd4f1ed0a7d5bd5b02c8697d9d5dcd8d2e9245e"}, + {file = "orjson-3.9.2-cp310-none-win32.whl", hash = "sha256:2ae61f5d544030a6379dbc23405df66fea0777c48a0216d2d83d3e08b69eb676"}, {file = "orjson-3.9.2-cp310-none-win_amd64.whl", hash = "sha256:c290c4f81e8fd0c1683638802c11610b2f722b540f8e5e858b6914b495cf90c8"}, {file = "orjson-3.9.2-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:02ef014f9a605e84b675060785e37ec9c0d2347a04f1307a9d6840ab8ecd6f55"}, {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:992af54265ada1c1579500d6594ed73fe333e726de70d64919cf37f93defdd06"}, @@ -5526,6 +5296,7 @@ files = [ {file = "orjson-3.9.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:275b5a18fd9ed60b2720543d3ddac170051c43d680e47d04ff5203d2c6d8ebf1"}, {file = "orjson-3.9.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b9aea6dcb99fcbc9f6d1dd84fca92322fda261da7fb014514bb4689c7c2097a8"}, {file = "orjson-3.9.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7d74ae0e101d17c22ef67b741ba356ab896fc0fa64b301c2bf2bb0a4d874b190"}, + {file = "orjson-3.9.2-cp311-none-win32.whl", hash = "sha256:a9a7d618f99b2d67365f2b3a588686195cb6e16666cd5471da603a01315c17cc"}, {file = "orjson-3.9.2-cp311-none-win_amd64.whl", hash = "sha256:6320b28e7bdb58c3a3a5efffe04b9edad3318d82409e84670a9b24e8035a249d"}, {file = "orjson-3.9.2-cp37-cp37m-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:368e9cc91ecb7ac21f2aa475e1901204110cf3e714e98649c2502227d248f947"}, {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58e9e70f0dcd6a802c35887f306b555ff7a214840aad7de24901fc8bd9cf5dde"}, @@ -5535,6 +5306,7 @@ files = [ {file = "orjson-3.9.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e46e9c5b404bb9e41d5555762fd410d5466b7eb1ec170ad1b1609cbebe71df21"}, {file = "orjson-3.9.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8170157288714678ffd64f5de33039e1164a73fd8b6be40a8a273f80093f5c4f"}, {file = "orjson-3.9.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e3e2f087161947dafe8319ea2cfcb9cea4bb9d2172ecc60ac3c9738f72ef2909"}, + {file = "orjson-3.9.2-cp37-none-win32.whl", hash = "sha256:373b7b2ad11975d143556fdbd2c27e1150b535d2c07e0b48dc434211ce557fe6"}, {file = "orjson-3.9.2-cp37-none-win_amd64.whl", hash = "sha256:d7de3dbbe74109ae598692113cec327fd30c5a30ebca819b21dfa4052f7b08ef"}, {file = "orjson-3.9.2-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8cd4385c59bbc1433cad4a80aca65d2d9039646a9c57f8084897549b55913b17"}, {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a74036aab1a80c361039290cdbc51aa7adc7ea13f56e5ef94e9be536abd227bd"}, @@ -5544,6 +5316,7 @@ files = [ {file = "orjson-3.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1882a70bb69595b9ec5aac0040a819e94d2833fe54901e2b32f5e734bc259a8b"}, {file = "orjson-3.9.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fc05e060d452145ab3c0b5420769e7356050ea311fc03cb9d79c481982917cca"}, {file = "orjson-3.9.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f8bc2c40d9bb26efefb10949d261a47ca196772c308babc538dd9f4b73e8d386"}, + {file = "orjson-3.9.2-cp38-none-win32.whl", hash = "sha256:302d80198d8d5b658065627da3a356cbe5efa082b89b303f162f030c622e0a17"}, {file = "orjson-3.9.2-cp38-none-win_amd64.whl", hash = "sha256:3164fc20a585ec30a9aff33ad5de3b20ce85702b2b2a456852c413e3f0d7ab09"}, {file = "orjson-3.9.2-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7a6ccadf788531595ed4728aa746bc271955448d2460ff0ef8e21eb3f2a281ba"}, {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3245d230370f571c945f69aab823c279a868dc877352817e22e551de155cb06c"}, @@ -5553,6 +5326,7 @@ files = [ {file = "orjson-3.9.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03fb36f187a0c19ff38f6289418863df8b9b7880cdbe279e920bef3a09d8dab1"}, {file = "orjson-3.9.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:20925d07a97c49c6305bff1635318d9fc1804aa4ccacb5fb0deb8a910e57d97a"}, {file = "orjson-3.9.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:eebfed53bec5674e981ebe8ed2cf00b3f7bcda62d634733ff779c264307ea505"}, + {file = "orjson-3.9.2-cp39-none-win32.whl", hash = "sha256:ba60f09d735f16593950c6adf033fbb526faa94d776925579a87b777db7d0838"}, {file = "orjson-3.9.2-cp39-none-win_amd64.whl", hash = "sha256:869b961df5fcedf6c79f4096119b35679b63272362e9b745e668f0391a892d39"}, {file = "orjson-3.9.2.tar.gz", hash = "sha256:24257c8f641979bf25ecd3e27251b5cc194cdd3a6e96004aac8446f5e63d9664"}, ] @@ -5561,7 +5335,6 @@ files = [ name = "osqp" version = "0.6.3" description = "OSQP: The Operator Splitting QP Solver" -category = "main" optional = true python-versions = "*" files = [ @@ -5601,7 +5374,6 @@ scipy = ">=0.13.2" name = "packaging" version = "23.1" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5613,7 +5385,6 @@ files = [ name = "pandas" version = "1.5.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5661,7 +5432,6 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"] name = "pandas-datareader" version = "0.10.0" description = "Data readers extracted from the pandas codebase,should be compatible with recent pandas versions" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5678,7 +5448,6 @@ requests = ">=2.19.0" name = "pandas-market-calendars" version = "3.2" description = "Market and exchange trading calendars for pandas" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -5696,7 +5465,6 @@ pytz = "*" name = "pandas-ta" version = "0.3.14b" description = "An easy to use Python 3 Pandas Extension with 130+ Technical Analysis Indicators. Can be called from a Pandas DataFrame or standalone like TA-Lib. Correlation tested with TA-Lib." -category = "main" optional = false python-versions = "*" files = [ @@ -5714,7 +5482,6 @@ test = ["ta-lib"] name = "pandocfilters" version = "1.5.0" description = "Utilities for writing pandoc filters in python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -5726,7 +5493,6 @@ files = [ name = "papermill" version = "2.4.0" description = "Parametrize and run Jupyter and nteract Notebooks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5760,7 +5526,6 @@ test = ["attrs (>=17.4.0)", "azure-datalake-store (>=0.0.30)", "azure-storage-bl name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5776,7 +5541,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.1" description = "Utility library for gitignore style pattern matching of file paths." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5788,7 +5552,6 @@ files = [ name = "patsy" version = "0.5.3" description = "A Python package for describing statistical models and for building design matrices." -category = "main" optional = false python-versions = "*" files = [ @@ -5807,7 +5570,6 @@ test = ["pytest", "pytest-cov", "scipy"] name = "pbr" version = "5.11.1" description = "Python Build Reasonableness" -category = "dev" optional = false python-versions = ">=2.6" files = [ @@ -5819,7 +5581,6 @@ files = [ name = "pefile" version = "2023.2.7" description = "Python PE parsing module" -category = "main" optional = true python-versions = ">=3.6.0" files = [ @@ -5831,7 +5592,6 @@ files = [ name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -5846,7 +5606,6 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -5858,7 +5617,6 @@ files = [ name = "pillow" version = "9.5.0" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5938,7 +5696,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "pkgutil-resolve-name" version = "1.3.10" description = "Resolve a name to an object." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5950,7 +5707,6 @@ files = [ name = "platformdirs" version = "3.9.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5966,7 +5722,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "plotly" version = "5.15.0" description = "An open-source, interactive data visualization library for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5982,7 +5737,6 @@ tenacity = ">=6.2.0" name = "plotly-resampler" version = "0.8.3.2" description = "Visualizing large time series with plotly" -category = "main" optional = true python-versions = ">=3.7.1,<4.0.0" files = [ @@ -6006,7 +5760,6 @@ inline-persistent = ["Flask-Cors (>=3.0.10,<4.0.0)", "kaleido (==0.2.1)"] name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6022,7 +5775,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pmaw" version = "3.0.0" description = "A multithread Pushshift.io API Wrapper for reddit.com comment and submission searches." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -6038,7 +5790,6 @@ requests = "*" name = "pmdarima" version = "2.0.3" description = "Python's forecast::auto.arima equivalent" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6084,7 +5835,6 @@ urllib3 = "*" name = "posthog" version = "3.0.1" description = "Integrate PostHog into any python application." -category = "main" optional = false python-versions = "*" files = [ @@ -6108,7 +5858,6 @@ test = ["coverage", "flake8", "freezegun (==0.3.15)", "mock (>=2.0.0)", "pylint" name = "praw" version = "7.7.1" description = "PRAW, an acronym for \"Python Reddit API Wrapper\", is a Python package that allows for simple access to Reddit's API." -category = "main" optional = false python-versions = "~=3.7" files = [ @@ -6123,16 +5872,15 @@ websocket-client = ">=0.54.0" [package.extras] ci = ["coveralls"] -dev = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.3.0,<0.5)", "furo", "packaging", "pre-commit", "pytest (>=2.7.3)", "requests (>=2.20.1,<3)", "sphinx", "urllib3 (>=1.26.0,<1.27.0)"] +dev = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.3.0,<0.5)", "furo", "packaging", "pre-commit", "pytest (>=2.7.3)", "requests (>=2.20.1,<3)", "sphinx", "urllib3 (==1.26.*)"] lint = ["furo", "pre-commit", "sphinx"] readthedocs = ["furo", "sphinx"] -test = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.3.0,<0.5)", "pytest (>=2.7.3)", "requests (>=2.20.1,<3)", "urllib3 (>=1.26.0,<1.27.0)"] +test = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.3.0,<0.5)", "pytest (>=2.7.3)", "requests (>=2.20.1,<3)", "urllib3 (==1.26.*)"] [[package]] name = "prawcore" version = "2.3.0" description = "Low-level communication layer for PRAW 4+." -category = "main" optional = false python-versions = "~=3.6" files = [ @@ -6153,7 +5901,6 @@ test = ["betamax (>=0.8,<0.9)", "betamax-matchers (>=0.4.0,<0.5)", "betamax-seri name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6172,7 +5919,6 @@ virtualenv = ">=20.10.0" name = "prometheus-client" version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6187,7 +5933,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -6202,7 +5947,6 @@ wcwidth = "*" name = "property-cached" version = "1.6.4" description = "A decorator for caching properties in classes (forked from cached-property)." -category = "main" optional = false python-versions = ">= 3.5" files = [ @@ -6214,7 +5958,6 @@ files = [ name = "prophet" version = "1.1.3" description = "Automatic Forecasting Procedure" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6245,7 +5988,6 @@ parallel = ["dask[dataframe]", "distributed"] name = "protobuf" version = "3.20.1" description = "Protocol Buffers" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6279,7 +6021,6 @@ files = [ name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -6306,7 +6047,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -6318,7 +6058,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = false python-versions = "*" files = [ @@ -6333,7 +6072,6 @@ tests = ["pytest"] name = "py" version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -6345,7 +6083,6 @@ files = [ name = "pyarrow" version = "12.0.1" description = "Python library for Apache Arrow" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6383,7 +6120,6 @@ numpy = ">=1.16.6" name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -6395,7 +6131,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -6410,7 +6145,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycares" version = "4.3.0" description = "Python interface for c-ares" -category = "main" optional = false python-versions = "*" files = [ @@ -6478,7 +6212,6 @@ idna = ["idna (>=2.1)"] name = "pycodestyle" version = "2.10.0" description = "Python style guide checker" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6490,7 +6223,6 @@ files = [ name = "pycoingecko" version = "3.1.0" description = "Python wrapper around the CoinGecko API" -category = "main" optional = false python-versions = "*" files = [ @@ -6505,7 +6237,6 @@ requests = "*" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -6517,7 +6248,6 @@ files = [ name = "pycryptodome" version = "3.18.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -6559,7 +6289,6 @@ files = [ name = "pycryptodomex" version = "3.18.0" description = "Cryptographic library for Python" -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -6601,7 +6330,6 @@ files = [ name = "pydantic" version = "1.10.11" description = "Data validation and settings management using python type hints" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6654,7 +6382,6 @@ email = ["email-validator (>=1.0.3)"] name = "pydeck" version = "0.8.0" description = "Widget for deck.gl maps" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6674,7 +6401,6 @@ jupyter = ["ipykernel (>=5.1.2)", "ipython (>=5.8.0)", "ipywidgets (>=7,<8)", "t name = "pydeprecate" version = "0.3.2" description = "Deprecation tooling" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -6686,7 +6412,6 @@ files = [ name = "pydocstyle" version = "6.3.0" description = "Python docstring style checker" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -6704,7 +6429,6 @@ toml = ["tomli (>=1.2.3)"] name = "pyerfa" version = "2.0.0.3" description = "Python bindings for ERFA" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6761,7 +6485,6 @@ test = ["pytest", "pytest-doctestplus (>=0.7)"] name = "pyflakes" version = "3.0.1" description = "passive checker of Python programs" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6773,7 +6496,6 @@ files = [ name = "pygls" version = "1.0.2" description = "a pythonic generic language server (pronounced like \"pie glass\")." -category = "main" optional = true python-versions = "<4,>=3.7" files = [ @@ -6789,13 +6511,12 @@ typeguard = ">=3,<4" dev = ["bandit (==1.7.4)", "flake8 (==4.0.1)", "mypy (==0.961)"] docs = ["sphinx (==5.0.1)", "sphinx-rtd-theme (==1.0.0)"] test = ["pytest (==7.1.2)", "pytest-asyncio (==0.18.3)"] -ws = ["websockets (>=10.0.0,<11.0.0)"] +ws = ["websockets (==10.*)"] [[package]] name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6810,7 +6531,6 @@ plugins = ["importlib-metadata"] name = "pyhdfe" version = "0.1.2" description = "High dimensional fixed effect absorption with Python 3" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6830,7 +6550,6 @@ tests = ["pytest", "pytest-xdist"] name = "pyinstaller" version = "4.10" description = "PyInstaller bundles a Python application and all its dependencies into a single package." -category = "main" optional = true python-versions = "<3.11,>=3.6" files = [ @@ -6863,7 +6582,6 @@ hook-testing = ["execnet (>=1.5.0)", "psutil", "pytest (>=2.7.3)"] name = "pyinstaller-hooks-contrib" version = "2023.6" description = "Community maintained hooks for PyInstaller" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6875,7 +6593,6 @@ files = [ name = "pylint" version = "2.17.0" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.7.2" files = [ @@ -6902,7 +6619,6 @@ testutils = ["gitpython (>3)"] name = "pyluach" version = "2.2.0" description = "A Python package for dealing with Hebrew (Jewish) calendar dates." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6918,7 +6634,6 @@ test = ["beautifulsoup4", "flake8", "pytest", "pytest-cov"] name = "pymeeus" version = "0.5.12" description = "Python implementation of Jean Meeus astronomical routines" -category = "main" optional = false python-versions = "*" files = [ @@ -6929,7 +6644,6 @@ files = [ name = "pympler" version = "1.0.1" description = "A development tool to measure, monitor and analyze the memory behavior of Python objects." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6941,7 +6655,6 @@ files = [ name = "pyobjc-core" version = "9.2" description = "Python<->ObjC Interoperability Module" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6959,7 +6672,6 @@ files = [ name = "pyobjc-framework-cocoa" version = "9.2" description = "Wrappers for the Cocoa frameworks on macOS" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6980,7 +6692,6 @@ pyobjc-core = ">=9.2" name = "pyod" version = "1.1.0" description = "A Comprehensive and Scalable Python Library for Outlier Detection (Anomaly Detection)" -category = "main" optional = true python-versions = "*" files = [ @@ -7000,7 +6711,6 @@ six = "*" name = "pyotp" version = "2.8.0" description = "Python One Time Password Library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7012,7 +6722,6 @@ files = [ name = "pyparsing" version = "3.0.9" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -7027,7 +6736,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyprind" version = "2.11.3" description = "Python Progress Bar and Percent Indicator Utility" -category = "main" optional = false python-versions = "*" files = [ @@ -7039,7 +6747,6 @@ files = [ name = "pyrsistent" version = "0.19.3" description = "Persistent/Functional/Immutable data structures" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7076,7 +6783,6 @@ files = [ name = "pytest" version = "6.2.5" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -7101,7 +6807,6 @@ testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xm name = "pytest-cov" version = "3.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -7120,7 +6825,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale name = "pytest-mock" version = "3.11.1" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7138,7 +6842,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "pytest-recorder" version = "0.2.3" description = "Pytest plugin, meant to facilitate unit tests writing for tools consumming Web APIs." -category = "dev" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -7154,7 +6857,6 @@ vcrpy = ">=4.2.1,<5.0.0" name = "pytest-recording" version = "0.12.2" description = "A pytest plugin that allows you recording of network interactions via VCR.py" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -7171,7 +6873,6 @@ vcrpy = ">=2.0.1" name = "pytest-timeout" version = "2.1.0" description = "pytest plugin to abort hanging tests" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -7186,7 +6887,6 @@ pytest = ">=5.0.0" name = "pytest-xdist" version = "3.3.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -7207,7 +6907,6 @@ testing = ["filelock"] name = "pythclient" version = "0.1.6" description = "A library to retrieve Pyth account structures off the Solana blockchain." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -7233,7 +6932,6 @@ testing = ["aiodns", "aiohttp (>=3.7.4)", "backoff", "base58", "dnspython", "fla name = "python-binance" version = "1.0.17" description = "Binance REST API python implementation" -category = "main" optional = false python-versions = "*" files = [ @@ -7254,7 +6952,6 @@ websockets = "*" name = "python-coinmarketcap" version = "0.2" description = "CoinMarketCap Python API Wrapper" -category = "main" optional = false python-versions = "*" files = [ @@ -7267,7 +6964,6 @@ files = [ name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -7282,7 +6978,6 @@ six = ">=1.5" name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7297,7 +6992,6 @@ cli = ["click (>=5.0)"] name = "python-i18n" version = "0.3.9" description = "Translation library for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -7312,7 +7006,6 @@ yaml = ["pyyaml (>=3.10)"] name = "python-jose" version = "3.3.0" description = "JOSE implementation in Python" -category = "main" optional = false python-versions = "*" files = [ @@ -7334,7 +7027,6 @@ pycryptodome = ["pyasn1", "pycryptodome (>=3.3.1,<4.0.0)"] name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7346,7 +7038,6 @@ files = [ name = "pytorch-lightning" version = "1.6.5" description = "PyTorch Lightning is the lightweight PyTorch wrapper for ML researchers. Scale your models. Write less boilerplate." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7384,7 +7075,6 @@ test = ["cloudpickle (>=1.3)", "codecov (>=2.1)", "coverage (>=6.4)", "flake8 (> name = "pytrends" version = "4.9.2" description = "Pseudo API for Google Trends" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7401,7 +7091,6 @@ requests = ">=2.0" name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -7413,7 +7102,6 @@ files = [ name = "pytz-deprecation-shim" version = "0.1.0.post0" description = "Shims to make deprecation of pytz easier" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -7429,7 +7117,6 @@ tzdata = {version = "*", markers = "python_version >= \"3.6\""} name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -7453,7 +7140,6 @@ files = [ name = "pywin32-ctypes" version = "0.2.2" description = "A (partial) reimplementation of pywin32 using ctypes/cffi" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -7465,7 +7151,6 @@ files = [ name = "pywinpty" version = "2.0.11" description = "Pseudo terminal support for Windows from Python." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7480,7 +7165,6 @@ files = [ name = "pywry" version = "0.5.13" description = "" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7509,7 +7193,6 @@ dev = ["auditwheel", "wheel"] name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7559,7 +7242,6 @@ files = [ name = "pyzmq" version = "25.1.0" description = "Python bindings for 0MQ" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7649,7 +7331,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "qdldl" version = "0.1.7.post0" description = "QDLDL, a free LDL factorization routine." -category = "main" optional = true python-versions = "*" files = [ @@ -7682,7 +7363,6 @@ scipy = ">=0.13.2" name = "qpd" version = "0.4.4" description = "Query Pandas Using SQL" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -7704,7 +7384,6 @@ dask = ["cloudpickle (>=1.4.0)", "dask[dataframe,distributed]"] name = "quandl" version = "3.7.0" description = "Package for quandl API access" -category = "main" optional = false python-versions = ">= 3.6" files = [ @@ -7725,7 +7404,6 @@ six = "*" name = "rdflib" version = "6.3.2" description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -7747,7 +7425,6 @@ networkx = ["networkx (>=2.0.0,<3.0.0)"] name = "regex" version = "2023.6.3" description = "Alternative regular expression module, to replace re." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7845,7 +7522,6 @@ files = [ name = "reportlab" version = "3.6.13" description = "The Reportlab Toolkit" -category = "main" optional = false python-versions = ">=3.7,<4" files = [ @@ -7907,7 +7583,6 @@ rlpycairo = ["rlPyCairo (>=0.1.0)"] name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7929,7 +7604,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-futures" version = "1.0.1" description = "Asynchronous Python HTTP for Humans." -category = "main" optional = false python-versions = "*" files = [ @@ -7947,7 +7621,6 @@ dev = ["black (>=22.3.0)", "build (>=0.7.0)", "isort (>=5.11.4)", "pyflakes (>=2 name = "requests-oauthlib" version = "1.3.1" description = "OAuthlib authentication support for Requests." -category = "main" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -7966,7 +7639,6 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] name = "retrying" version = "1.3.4" description = "Retrying" -category = "main" optional = false python-versions = "*" files = [ @@ -7981,7 +7653,6 @@ six = ">=1.7.0" name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -7996,7 +7667,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -8008,7 +7678,6 @@ files = [ name = "rich" version = "12.6.0" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -category = "main" optional = false python-versions = ">=3.6.3,<4.0.0" files = [ @@ -8028,7 +7697,6 @@ jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] name = "riskfolio-lib" version = "3.3.0" description = "Portfolio Optimization and Quantitative Strategic Asset Allocation in Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8053,7 +7721,6 @@ xlsxwriter = ">=1.3.7" name = "robin-stocks" version = "2.1.0" description = "A Python wrapper around the Robinhood API" -category = "main" optional = false python-versions = ">=3" files = [ @@ -8071,7 +7738,6 @@ requests = "*" name = "rsa" version = "4.9" description = "Pure-Python RSA implementation" -category = "main" optional = false python-versions = ">=3.6,<4" files = [ @@ -8086,7 +7752,6 @@ pyasn1 = ">=0.1.3" name = "ruamel-yaml" version = "0.17.32" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -category = "main" optional = false python-versions = ">=3" files = [ @@ -8105,7 +7770,6 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] name = "ruamel-yaml-clib" version = "0.2.7" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -8152,7 +7816,6 @@ files = [ name = "ruff" version = "0.0.256" description = "An extremely fast Python linter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -8179,7 +7842,6 @@ files = [ name = "scikit-learn" version = "1.3.0" description = "A set of python modules for machine learning and data mining" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -8222,7 +7884,6 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.1.3)", "mypy (>=1.3)", "numpydoc ( name = "scipy" version = "1.10.1" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = "<3.12,>=3.8" files = [ @@ -8261,7 +7922,6 @@ test = ["asv", "gmpy2", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeo name = "screeninfo" version = "0.6.7" description = "Fetch location and size of physical screens." -category = "main" optional = false python-versions = "*" files = [ @@ -8276,7 +7936,6 @@ pyobjc-framework-Cocoa = {version = "*", markers = "sys_platform == \"darwin\""} name = "scs" version = "3.2.3" description = "scs: splitting conic solver" -category = "main" optional = true python-versions = "*" files = [ @@ -8306,7 +7965,6 @@ scipy = ">=0.13.2" name = "seaborn" version = "0.11.2" description = "seaborn: statistical data visualization" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -8324,7 +7982,6 @@ scipy = ">=1.0" name = "semantic-version" version = "2.10.0" description = "A library implementing the 'SemVer' scheme." -category = "main" optional = true python-versions = ">=2.7" files = [ @@ -8340,7 +7997,6 @@ doc = ["Sphinx", "sphinx-rtd-theme"] name = "send2trash" version = "1.8.2" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -8357,7 +8013,6 @@ win32 = ["pywin32"] name = "setproctitle" version = "1.3.2" description = "A Python module to customize the process title" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8442,7 +8097,6 @@ test = ["pytest"] name = "setuptools" version = "65.4.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8459,7 +8113,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "setuptools-rust" version = "1.6.0" description = "Setuptools Rust extension plugin" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8476,7 +8129,6 @@ typing-extensions = ">=3.7.4.3" name = "setuptools-scm" version = "7.1.0" description = "the blessed package to manage your versions by scm tags" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8501,7 +8153,6 @@ toml = ["setuptools (>=42)"] name = "sgmllib3k" version = "1.0.0" description = "Py3k port of sgmllib." -category = "main" optional = false python-versions = "*" files = [ @@ -8512,7 +8163,6 @@ files = [ name = "shap" version = "0.42.1" description = "A unified approach to explain the output of any machine learning model." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8565,7 +8215,6 @@ test-core = ["pytest", "pytest-cov", "pytest-mpl"] name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -8577,7 +8226,6 @@ files = [ name = "slicer" version = "0.0.7" description = "A small package for big slicing." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -8589,7 +8237,6 @@ files = [ name = "smmap" version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -8601,7 +8248,6 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8613,7 +8259,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -8625,7 +8270,6 @@ files = [ name = "soupsieve" version = "2.4.1" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8637,7 +8281,6 @@ files = [ name = "sparqlwrapper" version = "2.0.0" description = "SPARQL Endpoint interface to Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8658,7 +8301,6 @@ pandas = ["pandas (>=1.3.5)"] name = "sphinx" version = "4.5.0" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -8694,7 +8336,6 @@ test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] name = "sphinxcontrib-applehelp" version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -8710,7 +8351,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -8726,7 +8366,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -8742,7 +8381,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -8757,7 +8395,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -8773,7 +8410,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -8789,7 +8425,6 @@ test = ["pytest"] name = "sqlalchemy" version = "2.0.19" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8837,7 +8472,7 @@ files = [ ] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} +greenlet = {version = "!=0.4.17", markers = "platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\""} typing-extensions = ">=4.2.0" [package.extras] @@ -8868,7 +8503,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "sqlglot" version = "17.6.0" description = "An easily customizable SQL parser and transpiler" -category = "main" optional = true python-versions = "*" files = [ @@ -8883,7 +8517,6 @@ dev = ["autoflake", "black", "duckdb (>=0.6)", "isort", "mypy (>=0.990)", "panda name = "squarify" version = "0.4.3" description = "Pure Python implementation of the squarify treemap layout algorithm" -category = "main" optional = false python-versions = "*" files = [ @@ -8895,7 +8528,6 @@ files = [ name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = false python-versions = "*" files = [ @@ -8915,7 +8547,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "statsforecast" version = "1.5.0" description = "Time series forecasting suite using statistical models" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -8943,7 +8574,6 @@ ray = ["fugue[ray] (>=0.8.1)", "protobuf (>=3.15.3,<4.0.0)"] name = "statsmodels" version = "0.13.2" description = "Statistical computations and models for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -8988,7 +8618,6 @@ docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "n name = "statsmodels" version = "0.13.3" description = "Statistical computations and models for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9024,7 +8653,7 @@ numpy = {version = ">=1.17", markers = "python_version != \"3.10\" or platform_s packaging = ">=21.3" pandas = ">=0.25" patsy = ">=0.5.2" -scipy = {version = ">=1.3", markers = "python_version > \"3.7\" and python_version < \"3.12\" or platform_system != \"Windows\" and python_version < \"3.12\" or platform_machine != \"x86\" and python_version < \"3.12\""} +scipy = {version = ">=1.3", markers = "(python_version > \"3.7\" or platform_system != \"Windows\" or platform_machine != \"x86\") and python_version < \"3.12\""} [package.extras] build = ["cython (>=0.29.32)"] @@ -9035,7 +8664,6 @@ docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "n name = "statsmodels" version = "0.13.5" description = "Statistical computations and models for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9074,7 +8702,7 @@ numpy = [ packaging = ">=21.3" pandas = ">=0.25" patsy = ">=0.5.2" -scipy = {version = ">=1.3", markers = "python_version > \"3.9\" and python_version < \"3.12\" or platform_system != \"Windows\" and python_version < \"3.12\" or platform_machine != \"x86\" and python_version < \"3.12\""} +scipy = {version = ">=1.3", markers = "(python_version > \"3.9\" or platform_system != \"Windows\" or platform_machine != \"x86\") and python_version < \"3.12\""} [package.extras] build = ["cython (>=0.29.32)"] @@ -9085,7 +8713,6 @@ docs = ["ipykernel", "jupyter-client", "matplotlib", "nbconvert", "nbformat", "n name = "stevedore" version = "5.1.0" description = "Manage dynamic plugins for Python applications" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -9100,7 +8727,6 @@ pbr = ">=2.0.0,<2.1.0 || >2.1.0" name = "stocksera" version = "0.1.21" description = "Official Stocksera API" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -9116,7 +8742,6 @@ requests = "*" name = "streamlit" version = "1.24.1" description = "A faster way to build and share data apps" -category = "main" optional = false python-versions = ">=3.8, !=3.9.7" files = [ @@ -9157,7 +8782,6 @@ snowflake = ["snowflake-snowpark-python"] name = "svglib" version = "1.5.1" description = "A pure-Python library for reading and converting SVG" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9174,7 +8798,6 @@ tinycss2 = ">=0.6.0" name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9189,7 +8812,6 @@ widechars = ["wcwidth"] name = "tbats" version = "1.1.3" description = "BATS and TBATS for time series forecasting" -category = "main" optional = true python-versions = "*" files = [ @@ -9210,7 +8832,6 @@ dev = ["pip-tools", "pytest", "rpy2"] name = "tenacity" version = "8.2.2" description = "Retry code until it succeeds" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -9225,7 +8846,6 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] name = "tensorboard" version = "2.13.0" description = "TensorBoard lets you watch Tensors Flow" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -9250,7 +8870,6 @@ wheel = ">=0.26" name = "tensorboard-data-server" version = "0.7.1" description = "Fast data loading for TensorBoard" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9263,7 +8882,6 @@ files = [ name = "terminado" version = "0.17.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9284,7 +8902,6 @@ test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] name = "textwrap3" version = "0.9.2" description = "textwrap from Python 3.6 backport (plus a few tweaks)" -category = "main" optional = false python-versions = "*" files = [ @@ -9296,7 +8913,6 @@ files = [ name = "thepassiveinvestor" version = "1.2.1" description = "Passive Investing for the Average Joe." -category = "main" optional = false python-versions = "*" files = [ @@ -9313,7 +8929,6 @@ yahooquery = "*" name = "threadpoolctl" version = "3.2.0" description = "threadpoolctl" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -9325,7 +8940,6 @@ files = [ name = "tiktoken" version = "0.4.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -9371,7 +8985,6 @@ blobfile = ["blobfile (>=2)"] name = "time-machine" version = "2.11.0" description = "Travel through time in your tests." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -9429,7 +9042,6 @@ python-dateutil = "*" name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9448,7 +9060,6 @@ test = ["flake8", "isort", "pytest"] name = "tokenizers" version = "0.13.3" description = "Fast and Customizable Tokenizers" -category = "main" optional = true python-versions = "*" files = [ @@ -9503,7 +9114,6 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] name = "tokenterminal" version = "1.0.1" description = "Unofficial Token Terminal API client." -category = "main" optional = false python-versions = "*" files = [ @@ -9518,7 +9128,6 @@ requests = ">=2.18.4" name = "toml" version = "0.10.2" description = "Python Library for Tom's Obvious, Minimal Language" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -9530,7 +9139,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9542,7 +9150,6 @@ files = [ name = "tomlkit" version = "0.11.8" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -9554,7 +9161,6 @@ files = [ name = "toolz" version = "0.12.0" description = "List processing tools and functional utilities" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -9566,7 +9172,6 @@ files = [ name = "torch" version = "1.11.0" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -9598,7 +9203,6 @@ typing-extensions = "*" name = "torchmetrics" version = "1.0.1" description = "PyTorch native Metrics" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -9628,7 +9232,6 @@ visual = ["SciencePlots (>=2.0.0)", "matplotlib (>=3.2.0)"] name = "tornado" version = "6.3.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = false python-versions = ">= 3.8" files = [ @@ -9649,7 +9252,6 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9670,7 +9272,6 @@ telegram = ["requests"] name = "trace-updater" version = "0.0.9.1" description = "Dash component which allows to update a dcc.Graph its traces. This component is data efficient as it (1) only sends the to-be-updated traces (and not the whole) from the back-end to the client-side and (2) only updates the traces that have changed (and does not redraw the whole figure)." -category = "main" optional = true python-versions = "*" files = [ @@ -9682,7 +9283,6 @@ files = [ name = "tradingview-ta" version = "3.3.0" description = "Unofficial TradingView technical analysis API wrapper." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -9697,7 +9297,6 @@ requests = "*" name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9713,7 +9312,6 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "transformers" version = "4.27.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" -category = "main" optional = true python-versions = ">=3.7.0" files = [ @@ -9781,7 +9379,6 @@ vision = ["Pillow"] name = "triad" version = "0.9.1" description = "A collection of python utils for Fugue projects" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -9804,7 +9401,6 @@ ciso8601 = ["ciso8601"] name = "typeguard" version = "3.0.2" description = "Run-time type checker for Python" -category = "main" optional = true python-versions = ">=3.7.4" files = [ @@ -9824,7 +9420,6 @@ test = ["mypy (>=0.991)", "pytest (>=7)"] name = "types-python-dateutil" version = "2.8.19.14" description = "Typing stubs for python-dateutil" -category = "dev" optional = false python-versions = "*" files = [ @@ -9836,7 +9431,6 @@ files = [ name = "types-pytz" version = "2021.3.8" description = "Typing stubs for pytz" -category = "dev" optional = false python-versions = "*" files = [ @@ -9848,7 +9442,6 @@ files = [ name = "types-pyyaml" version = "6.0.12.11" description = "Typing stubs for PyYAML" -category = "dev" optional = false python-versions = "*" files = [ @@ -9860,7 +9453,6 @@ files = [ name = "types-requests" version = "2.31.0.2" description = "Typing stubs for requests" -category = "dev" optional = false python-versions = "*" files = [ @@ -9875,7 +9467,6 @@ types-urllib3 = "*" name = "types-setuptools" version = "57.4.18" description = "Typing stubs for setuptools" -category = "dev" optional = false python-versions = "*" files = [ @@ -9887,7 +9478,6 @@ files = [ name = "types-six" version = "1.16.21.9" description = "Typing stubs for six" -category = "dev" optional = false python-versions = "*" files = [ @@ -9899,7 +9489,6 @@ files = [ name = "types-urllib3" version = "1.26.25.14" description = "Typing stubs for urllib3" -category = "dev" optional = false python-versions = "*" files = [ @@ -9911,7 +9500,6 @@ files = [ name = "typing-extensions" version = "4.7.1" description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9923,7 +9511,6 @@ files = [ name = "typing-inspect" version = "0.9.0" description = "Runtime inspection utilities for typing module." -category = "main" optional = false python-versions = "*" files = [ @@ -9939,7 +9526,6 @@ typing-extensions = ">=3.7.4" name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -9951,7 +9537,6 @@ files = [ name = "tzlocal" version = "4.3.1" description = "tzinfo object for the local timezone" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -9971,7 +9556,6 @@ devenv = ["black", "check-manifest", "flake8", "pyroma", "pytest (>=4.3)", "pyte name = "u8darts" version = "0.23.0" description = "A python library for easy manipulation and forecasting of time series." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -10012,7 +9596,6 @@ torch = ["pytorch-lightning (>=1.5.0)", "torch (>=1.8.0)"] name = "ujson" version = "5.8.0" description = "Ultra fast JSON encoder and decoder for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -10083,7 +9666,6 @@ files = [ name = "update-checker" version = "0.18.0" description = "A python module that will check for package updates." -category = "main" optional = false python-versions = "*" files = [ @@ -10103,7 +9685,6 @@ test = ["pytest (>=2.7.3)"] name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10118,7 +9699,6 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -10135,7 +9715,6 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "user-agent" version = "0.1.10" description = "User-Agent generator" -category = "main" optional = false python-versions = "*" files = [ @@ -10149,7 +9728,6 @@ six = "*" name = "vadersentiment" version = "3.3.2" description = "VADER Sentiment Analysis. VADER (Valence Aware Dictionary and sEntiment Reasoner) is a lexicon and rule-based sentiment analysis tool that is specifically attuned to sentiments expressed in social media, and works well on texts from other domains." -category = "main" optional = false python-versions = "*" files = [ @@ -10164,7 +9742,6 @@ requests = "*" name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." -category = "main" optional = false python-versions = ">=3.4" files = [ @@ -10181,7 +9758,6 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "valinvest" version = "0.0.2" description = "A value investing tool based on Warren Buffett, Joseph Piotroski and Benjamin Graham thoughts" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -10193,7 +9769,6 @@ files = [ name = "vcrpy" version = "4.4.0" description = "Automatically mock your HTTP interactions to simplify and speed up testing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -10212,7 +9787,6 @@ yarl = "*" name = "virtualenv" version = "20.24.1" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -10233,7 +9807,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "2.3.1" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -10274,7 +9847,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -10286,7 +9858,6 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10302,7 +9873,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "main" optional = false python-versions = "*" files = [ @@ -10314,7 +9884,6 @@ files = [ name = "websocket-client" version = "1.6.1" description = "WebSocket client for Python with low level API options" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10331,7 +9900,6 @@ test = ["websockets"] name = "websockets" version = "11.0.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10411,7 +9979,6 @@ files = [ name = "werkzeug" version = "2.3.6" description = "The comprehensive WSGI web application library." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -10429,7 +9996,6 @@ watchdog = ["watchdog (>=2.3)"] name = "wheel" version = "0.40.0" description = "A built-package format for Python" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -10444,7 +10010,6 @@ test = ["pytest (>=6.0.0)"] name = "widgetsnbextension" version = "4.0.8" description = "Jupyter interactive widgets for Jupyter Notebook" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10456,7 +10021,6 @@ files = [ name = "win32-setctime" version = "1.1.0" description = "A small Python utility to set file creation time on Windows" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -10471,7 +10035,6 @@ dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -10556,7 +10119,6 @@ files = [ name = "xarray" version = "2023.1.0" description = "N-D labeled arrays and datasets in Python" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -10581,7 +10143,6 @@ viz = ["matplotlib", "nc-time-axis", "seaborn"] name = "xgboost" version = "1.7.6" description = "XGBoost Python Package" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -10609,7 +10170,6 @@ scikit-learn = ["scikit-learn"] name = "xlsxwriter" version = "3.1.2" description = "A Python module for creating Excel XLSX files." -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -10621,7 +10181,6 @@ files = [ name = "y-py" version = "0.6.0" description = "Python bindings for the Y-CRDT built from yrs (Rust)" -category = "main" optional = false python-versions = "*" files = [ @@ -10697,7 +10256,6 @@ files = [ name = "yahooquery" version = "2.3.2" description = "Python interface to unofficial Yahoo Finance API endpoints" -category = "main" optional = false python-versions = "*" files = [ @@ -10720,7 +10278,6 @@ test = ["coverage (==5.2.1)", "pytest (==6.0.2)", "pytest-cov (==2.10.1)", "sele name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10808,7 +10365,6 @@ multidict = ">=4.0" name = "yfinance" version = "0.2.25" description = "Download market data from Yahoo! Finance API" -category = "main" optional = false python-versions = "*" files = [ @@ -10832,7 +10388,6 @@ requests = ">=2.26" name = "ypy-websocket" version = "0.8.4" description = "WebSocket connector for Ypy" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -10852,7 +10407,6 @@ test = ["mypy", "pre-commit", "pytest", "pytest-asyncio", "websockets (>=10.0)"] name = "yt-dlp" version = "2023.7.6" description = "A youtube-dl fork with additional features and patches" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -10872,7 +10426,6 @@ websockets = "*" name = "zipp" version = "3.16.2" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -10888,7 +10441,6 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p name = "zope-interface" version = "6.0" description = "Interfaces for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ diff --git a/pyproject.toml b/pyproject.toml index 6bef3746298..5de047c19a5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -170,7 +170,7 @@ build-backend = "poetry.core.masonry.api" [tool.pydocstyle] convention = "numpy" match = '((?!test_).)*\.py' -ignore = "D401" +add-ignore = "D401" [tool.ruff] diff --git a/requirements-full.txt b/requirements-full.txt index 19987f21814..b0e0a4e733e 100644 --- a/requirements-full.txt +++ b/requirements-full.txt @@ -14,7 +14,7 @@ ansiwrap==0.8.4 ; python_full_version >= "3.8.1" and python_full_version != "3.9 antlr4-python3-runtime==4.11.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" anyio==3.7.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" appdirs==1.4.4 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" -appnope==0.1.3 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform == "darwin" or python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and platform_system == "Darwin" +appnope==0.1.3 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and (sys_platform == "darwin" or platform_system == "Darwin") arch==5.6.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" argon2-cffi-bindings==21.2.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" argon2-cffi==21.3.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" @@ -122,7 +122,7 @@ google-auth-oauthlib==1.0.0 ; python_full_version >= "3.8.1" and python_full_ver google-auth==2.22.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" graphlib-backport==1.0.3 ; python_full_version >= "3.8.1" and python_version < "3.9" graphviz==0.20.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" -greenlet==2.0.2 ; python_full_version >= "3.8.1" and platform_machine == "aarch64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "ppc64le" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "x86_64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "amd64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "AMD64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "win32" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "WIN32" and python_full_version != "3.9.7" and python_version < "3.11" +greenlet==2.0.2 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and (platform_machine == "win32" or platform_machine == "WIN32" or platform_machine == "AMD64" or platform_machine == "amd64" or platform_machine == "x86_64" or platform_machine == "ppc64le" or platform_machine == "aarch64") grpcio==1.56.2 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" h11==0.14.0 ; python_full_version >= "3.8.1" and python_version < "3.11" and python_full_version != "3.9.7" hijri-converter==2.3.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" @@ -257,7 +257,7 @@ property-cached==1.6.4 ; python_full_version >= "3.8.1" and python_full_version prophet==1.1.3 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" protobuf==3.20.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" psutil==5.9.5 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" -ptyprocess==0.7.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform != "win32" or python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and os_name != "nt" +ptyprocess==0.7.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and (sys_platform != "win32" or os_name != "nt") pure-eval==0.2.2 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" py==1.11.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" pyarrow==12.0.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" diff --git a/requirements.txt b/requirements.txt index 115a934a9a7..08ea43f9aa6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ altair==5.0.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7 ansiwrap==0.8.4 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" anyio==3.7.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" appdirs==1.4.4 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" -appnope==0.1.3 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform == "darwin" or python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and platform_system == "Darwin" +appnope==0.1.3 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and (sys_platform == "darwin" or platform_system == "Darwin") arch==5.6.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" argon2-cffi-bindings==21.2.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" argon2-cffi==21.3.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" @@ -80,7 +80,7 @@ future==0.18.3 ; python_full_version >= "3.8.1" and python_full_version != "3.9. gitdb==4.0.10 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" gitpython==3.1.32 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" graphlib-backport==1.0.3 ; python_full_version >= "3.8.1" and python_version < "3.9" -greenlet==2.0.2 ; python_full_version >= "3.8.1" and platform_machine == "aarch64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "ppc64le" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "x86_64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "amd64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "AMD64" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "win32" and python_full_version != "3.9.7" and python_version < "3.11" or python_full_version >= "3.8.1" and platform_machine == "WIN32" and python_full_version != "3.9.7" and python_version < "3.11" +greenlet==2.0.2 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and (platform_machine == "win32" or platform_machine == "WIN32" or platform_machine == "AMD64" or platform_machine == "amd64" or platform_machine == "x86_64" or platform_machine == "ppc64le" or platform_machine == "aarch64") grpcio==1.56.2 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" h11==0.14.0 ; python_full_version >= "3.8.1" and python_version < "3.11" and python_full_version != "3.9.7" hijri-converter==2.3.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" @@ -178,7 +178,7 @@ prompt-toolkit==3.0.39 ; python_full_version >= "3.8.1" and python_full_version property-cached==1.6.4 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" protobuf==3.20.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" psutil==5.9.5 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" -ptyprocess==0.7.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and sys_platform != "win32" or python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and os_name != "nt" +ptyprocess==0.7.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" and (sys_platform != "win32" or os_name != "nt") pure-eval==0.2.2 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" pyarrow==12.0.1 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" pyasn1==0.5.0 ; python_full_version >= "3.8.1" and python_full_version != "3.9.7" and python_version < "3.11" From 9b5f962d1906d35280b382a4ce97deec20a07220 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 14 Aug 2023 16:57:35 +0100 Subject: [PATCH 12/14] add description to OBBject --- openbb_sdk/sdk/core/openbb_core/app/model/obbject.py | 1 + 1 file changed, 1 insertion(+) diff --git a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py index 6883b23ab83..e05e5a98060 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py +++ b/openbb_sdk/sdk/core/openbb_core/app/model/obbject.py @@ -21,6 +21,7 @@ class OpenBBError(Exception): class OBBject(GenericModel, Generic[T], Tagged): + """OpenBB custom class that holds command outputs and utility methods.""" results: Optional[T] = Field( default=None, description="Serializable results.", From a22a018df414b8f8f4ea1cc3aa57d6d9111815fa Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Mon, 14 Aug 2023 16:59:20 +0100 Subject: [PATCH 13/14] update core readme with obbject --- openbb_sdk/sdk/core/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/openbb_sdk/sdk/core/README.md b/openbb_sdk/sdk/core/README.md index 3107d5b96d5..d49835cbd60 100644 --- a/openbb_sdk/sdk/core/README.md +++ b/openbb_sdk/sdk/core/README.md @@ -12,7 +12,7 @@ - [Install extension](#install-extension) - [4. Usage](#4-usage) - [4.1 Static version](#41-static-version) - - [4.1.1. Command output](#411-command-output) + - [4.1.1. OBBject](#411-obbject) - [Helpers](#helpers) - [4.1.2. Utilities](#412-utilities) - [Settings](#settings) @@ -163,9 +163,9 @@ output = obb.stocks.load( ) ``` -### 4.1.1. Command output +### 4.1.1. OBBject -Each command will always return a `OBBject`. There you will find: +Each command will always return an `OBBject`. There you will find: - `results`: the data returned by the command `None` - `provider`: the provider name (only available provider names allowed) used to get the data or `None` From 8fac753197db4edf9c1084dc7bc904c099abb11f Mon Sep 17 00:00:00 2001 From: Pratyush Shukla Date: Mon, 14 Aug 2023 23:46:03 +0530 Subject: [PATCH 14/14] Added `install_all.bat` for windows users --- openbb_sdk/install_all.bat | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 openbb_sdk/install_all.bat diff --git a/openbb_sdk/install_all.bat b/openbb_sdk/install_all.bat new file mode 100644 index 00000000000..fab8a0700d6 --- /dev/null +++ b/openbb_sdk/install_all.bat @@ -0,0 +1,33 @@ +@echo off +setlocal enabledelayedexpansion + +REM Check if CONDA_PREFIX is set to check for an active conda environment +IF NOT DEFINED CONDA_PREFIX ( + echo No active conda environment detected. + exit /b +) + +REM Add path to the Python executable in the active conda environment +SET "PYTHON_PATH=%CONDA_PREFIX%\python.exe" + +REM Verify the python executable exists +IF NOT EXIST "%PYTHON_PATH%" ( + echo Python executable not found in active conda environment. + exit /b +) + +echo Installing all packages in editable mode ... +for /d /r %%d in (openbb_*) do ( + REM Extract the parent directory from the full path + for %%i in ("%%~dpd") do set "parentdir=%%~dpi" + REM Move up one level to the parent directory + set "parentdir=!parentdir:~0,-1!" + + for %%j in (!parentdir!) do set "dirname=%%~nxj" + echo Installing !dirname! + + pushd "!parentdir!" + "%PYTHON_PATH%" -m pip install -U -e . >NUL 2>&1 + + popd +)