From b48accbdd4a26f2daa16a7543cdf7d6af1383352 Mon Sep 17 00:00:00 2001 From: Danglewood <85772166+deeleeramone@users.noreply.github.com> Date: Thu, 24 Sep 2026 20:04:13 -0700 Subject: [PATCH] [V5] `openbb-mcp-server`: Refactor for v5 - Spec, Config, Packaging, Test Coverage (#7495) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * stash some changes * add more robust testing * mypy * point PR at V5 * introduce spec file * codespell * test fix * fix workflow environment setup * fix workflow environment setup * fix workflow environment setup * add pyyaml to dependencies * split lint jobs * fix workflow environment setup * fix workflow environment setup * workflow env setup * workflow env setup * clean up code comments * add auth hook entrypoints * codespell * add codegen feature * codespell * move _unpack into dispatchers for consistency with codegen packages * surface nested models in the response * fix missing coverage in CI * socrata updates * test fix * detect plotly output * add --include and --exclude flags from generate-extension command * refactor mcp server for v5 * test action * fix tests * tests * test fixture name * revert: drop unrelated provider/README changes from mcp-server refactor Strip the changes to ``README.md`` and ``openbb_platform/providers/{imf, tradingeconomics,yfinance}`` that snuck into 4ac3602 (refactor mcp server for v5). Those files are out of scope for the mcp-server work and were modified inadvertently โ€” restore them to their pre-4ac3602 state. Co-Authored-By: Claude Opus 4.7 (1M context) * tests and workflows * fix workflow * tests and workflows * tests and workflows * tests and workflows * tests and workflows * beartype shim for 3.15 * muck around with beartype for 3.15 * muck around with beartype for 3.15 * no 3.15 runners for mcp-server * update skill files * cap test matrix at python 3.14 * merge branch v5 * no useless comments * platform controller command description split * merge URL overloads from path params * exclude none and unset from model dump * refactor for fastmcp4 * wrap markdown lines that are too long --------- Co-authored-by: deeleeramone <> Co-authored-by: Copilot Co-authored-by: Claude Opus 4.7 (1M context) --- .../workflows/publish-openbb-mcp-server.yml | 167 + .github/workflows/test-unit-mcp-server.yml | 133 + .../core/openbb/assets/reference.json | 10201 +++++++++++++++- .../openbb_derivatives/derivatives_views.py | 9 +- .../extensions/mcp_server/README.md | 308 +- .../openbb_mcp_server/app/__init__.py | 18 +- .../mcp_server/openbb_mcp_server/app/app.py | 521 +- .../mcp_server/openbb_mcp_server/app/args.py | 315 + .../openbb_mcp_server/app/artifacts.py | 345 + .../mcp_server/openbb_mcp_server/app/auth.py | 159 +- .../openbb_mcp_server/app/bootstrap.py | 95 + .../openbb_mcp_server/app/cli_tools.py | 204 + .../openbb_mcp_server/app/config.py | 185 + .../openbb_mcp_server/app/discovery.py | 36 + .../openbb_mcp_server/app/middleware.py | 103 + .../openbb_mcp_server/app/pipeline.py | 117 + .../mcp_server/openbb_mcp_server/app/spec.py | 544 + .../mcp_server/openbb_mcp_server/main.py | 27 + .../openbb_mcp_server/models/__init__.py | 16 +- .../models/category_index.py | 45 +- .../openbb_mcp_server/models/mcp_config.py | 69 +- .../openbb_mcp_server/models/prompts.py | 12 +- .../openbb_mcp_server/models/settings.py | 128 +- .../openbb_mcp_server/models/tools.py | 23 +- .../openbb_mcp_server/service/__init__.py | 6 +- .../openbb_mcp_server/service/mcp_service.py | 70 +- .../skills/build_workspace_app/SKILL.md | 87 +- .../skills/configure_mcp_server/SKILL.md | 334 +- .../skills/develop_extension/SKILL.md | 68 +- .../skills/use_openbb_cli/SKILL.md | 361 + .../skills/work_with_server/SKILL.md | 300 +- .../openbb_mcp_server/utils/__init__.py | 10 +- .../openbb_mcp_server/utils/app_import.py | 269 +- .../openbb_mcp_server/utils/choices.py | 258 + .../openbb_mcp_server/utils/fastapi.py | 345 +- .../extensions/mcp_server/poetry.lock | 3695 ------ .../extensions/mcp_server/pyproject.toml | 168 +- .../mcp_server/tests/app/test_app.py | 1314 +- .../mcp_server/tests/app/test_args.py | 602 + .../mcp_server/tests/app/test_artifacts.py | 507 + .../mcp_server/tests/app/test_auth.py | 236 +- .../mcp_server/tests/app/test_bootstrap.py | 150 + .../mcp_server/tests/app/test_cli_tools.py | 295 + .../mcp_server/tests/app/test_config.py | 311 + .../mcp_server/tests/app/test_discovery.py | 283 + .../mcp_server/tests/app/test_launch_mcp.py | 238 + .../mcp_server/tests/app/test_main.py | 45 + .../mcp_server/tests/app/test_middleware.py | 177 + .../mcp_server/tests/app/test_pipeline.py | 301 + .../tests/app/test_route_exposure.py | 222 + .../tests/app/test_server_prompts.py | 639 +- .../mcp_server/tests/app/test_skills.py | 643 +- .../mcp_server/tests/app/test_spec.py | 872 ++ .../tests/app/test_tool_execution.py | 803 -- .../extensions/mcp_server/tests/conftest.py | 109 + .../openbb_mcp_fixture/__init__.py | 1 + .../openbb_mcp_fixture/router.py | 64 + .../openbb_mcp_fixture/pyproject.toml | 18 + .../tests/models/test_category_index.py | 229 +- .../tests/models/test_mcp_config.py | 254 +- .../tests/models/test_mcp_settings.py | 187 +- .../mcp_server/tests/models/test_prompts.py | 211 +- .../mcp_server/tests/models/test_tools.py | 50 +- .../tests/service/test_mcp_service.py | 335 +- .../mcp_server/tests/utils/test_app_import.py | 443 +- .../mcp_server/tests/utils/test_choices.py | 381 + .../tests/utils/test_compress_schema.py | 53 - .../mcp_server/tests/utils/test_fastapi.py | 753 +- openbb_platform/extensions/mcp_server/uv.lock | 4813 ++++++++ 69 files changed, 27473 insertions(+), 7817 deletions(-) create mode 100644 .github/workflows/publish-openbb-mcp-server.yml create mode 100644 .github/workflows/test-unit-mcp-server.yml create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/args.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/artifacts.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/bootstrap.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/cli_tools.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/config.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/discovery.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/middleware.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/pipeline.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/app/spec.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/main.py create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/skills/use_openbb_cli/SKILL.md create mode 100644 openbb_platform/extensions/mcp_server/openbb_mcp_server/utils/choices.py delete mode 100644 openbb_platform/extensions/mcp_server/poetry.lock create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_args.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_artifacts.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_bootstrap.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_cli_tools.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_config.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_discovery.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_launch_mcp.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_main.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_middleware.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_pipeline.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_route_exposure.py create mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_spec.py delete mode 100644 openbb_platform/extensions/mcp_server/tests/app/test_tool_execution.py create mode 100644 openbb_platform/extensions/mcp_server/tests/conftest.py create mode 100644 openbb_platform/extensions/mcp_server/tests/fixtures/openbb_mcp_fixture/openbb_mcp_fixture/__init__.py create mode 100644 openbb_platform/extensions/mcp_server/tests/fixtures/openbb_mcp_fixture/openbb_mcp_fixture/router.py create mode 100644 openbb_platform/extensions/mcp_server/tests/fixtures/openbb_mcp_fixture/pyproject.toml create mode 100644 openbb_platform/extensions/mcp_server/tests/utils/test_choices.py delete mode 100644 openbb_platform/extensions/mcp_server/tests/utils/test_compress_schema.py create mode 100644 openbb_platform/extensions/mcp_server/uv.lock diff --git a/.github/workflows/publish-openbb-mcp-server.yml b/.github/workflows/publish-openbb-mcp-server.yml new file mode 100644 index 00000000000..7042d5aec7c --- /dev/null +++ b/.github/workflows/publish-openbb-mcp-server.yml @@ -0,0 +1,167 @@ +name: ๐Ÿ“ฆ publish openbb-mcp-server + +on: + pull_request: + types: [closed] + branches: [develop, v5] + workflow_dispatch: + +permissions: + contents: read + +jobs: + version-check: + name: Verify version bump + if: ${{ (github.event_name == 'pull_request' && github.event.pull_request.merged == true && startsWith(github.event.pull_request.head.ref, 'release/openbb-mcp-server-v')) || github.event_name == 'workflow_dispatch' }} + runs-on: ubuntu-latest + outputs: + version: ${{ steps.parse.outputs.version }} + defaults: + run: + shell: bash + working-directory: openbb_platform/extensions/mcp_server + steps: + - uses: actions/checkout@v6 + with: + ref: develop + + - name: Parse [project].version from pyproject.toml + id: parse + run: | + VERSION=$(grep -m1 -E '^version[[:space:]]*=' pyproject.toml | sed -E 's/^version[[:space:]]*=[[:space:]]*"([^"]+)".*/\1/') + if [ -z "$VERSION" ]; then + echo "::error::Could not parse [project].version from pyproject.toml." + exit 1 + fi + echo "Local version: $VERSION" + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + + - name: Fail if version already exists on PyPI + env: + VERSION: ${{ steps.parse.outputs.version }} + run: | + STATUS=$(curl -sS -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/openbb-mcp-server/${VERSION}/json") + case "$STATUS" in + 200) + echo "::error::openbb-mcp-server ${VERSION} is already published on PyPI." + echo "Bump openbb_platform/extensions/mcp_server/pyproject.toml [project].version and re-merge a fresh release branch." + exit 1 + ;; + 404) + echo "openbb-mcp-server ${VERSION} is not yet on PyPI โ€” proceeding." + ;; + *) + echo "::error::Unexpected status $STATUS from PyPI JSON API. Aborting to avoid a silent skip." + exit 1 + ;; + esac + + - name: Verify release branch name matches pyproject version + if: github.event_name == 'pull_request' + env: + VERSION: ${{ steps.parse.outputs.version }} + BRANCH: ${{ github.event.pull_request.head.ref }} + run: | + EXPECTED="release/openbb-mcp-server-v${VERSION}" + if [ "$BRANCH" != "$EXPECTED" ]; then + echo "::error::Release branch '${BRANCH}' does not match pyproject version '${VERSION}'." + echo "Expected branch name: '${EXPECTED}'." + echo "Either rename the release branch or update [project].version in pyproject.toml so they agree." + exit 1 + fi + echo "Branch '${BRANCH}' matches pyproject version '${VERSION}'." + + build: + name: Build sdist + wheel + needs: version-check + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: openbb_platform/extensions/mcp_server + steps: + - uses: actions/checkout@v6 + with: + ref: develop + + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - run: python -m pip install --upgrade pip uv + + - name: Build sdist + wheel + run: uv build --no-sources + + - uses: actions/upload-artifact@v4 + with: + name: openbb-mcp-server-dist + path: openbb_platform/extensions/mcp_server/dist/ + if-no-files-found: error + retention-days: 7 + + test: + name: Test (${{ matrix.os }} / Python ${{ matrix.python_version }}) + needs: build + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, python_version: "3.10" } + - { os: ubuntu-latest, python_version: "3.11" } + - { os: ubuntu-latest, python_version: "3.12" } + - { os: ubuntu-latest, python_version: "3.13" } + - { os: ubuntu-latest, python_version: "3.14" } + - { os: macos-latest, python_version: "3.10" } + - { os: macos-latest, python_version: "3.14" } + - { os: windows-latest, python_version: "3.10" } + - { os: windows-latest, python_version: "3.14" } + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + working-directory: openbb_platform/extensions/mcp_server + steps: + - uses: actions/checkout@v6 + with: + ref: develop + + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python_version }} + allow-prereleases: true + + - uses: actions/download-artifact@v4 + with: + name: openbb-mcp-server-dist + path: openbb_platform/extensions/mcp_server/dist + + - run: python -m pip install --upgrade pip uv + + - name: Install dependencies then openbb-mcp-server wheel + run: | + uv pip install --system ../../core + uv pip install --system --no-sources ../../../cli tests/fixtures/openbb_mcp_fixture + uv pip install --system --no-sources --group dev + uv pip install --system --no-sources dist/openbb_mcp_server-*.whl + + - name: Test the installed wheel + run: | + rm -rf openbb_mcp_server + pytest tests --cov=openbb_mcp_server --cov-branch --cov-report=term-missing --cov-fail-under=100 + + publish: + name: Publish to PyPI + needs: test + runs-on: ubuntu-latest + permissions: + id-token: write + steps: + - uses: actions/download-artifact@v4 + with: + name: openbb-mcp-server-dist + path: dist + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + packages-dir: dist diff --git a/.github/workflows/test-unit-mcp-server.yml b/.github/workflows/test-unit-mcp-server.yml new file mode 100644 index 00000000000..fae086aad53 --- /dev/null +++ b/.github/workflows/test-unit-mcp-server.yml @@ -0,0 +1,133 @@ +name: ๐Ÿงช test openbb-mcp-server + +on: + pull_request: + branches: [develop, main, v5] + paths: + - "openbb_platform/extensions/mcp_server/**" + - "openbb_platform/core/**" + - "cli/**" + - ".github/workflows/test-unit-mcp-server.yml" + merge_group: + types: [checks_requested] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: test-openbb-mcp-server-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build: + name: Build sdist + wheel + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: openbb_platform/extensions/mcp_server + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - run: python -m pip install --upgrade pip uv + + - name: Build sdist + wheel + run: uv build --no-sources + + - uses: actions/upload-artifact@v5 + with: + name: openbb-mcp-server-dist + path: openbb_platform/extensions/mcp_server/dist/ + if-no-files-found: error + retention-days: 7 + + lint: + name: Lint (ruff + ty) + needs: build + runs-on: ubuntu-latest + defaults: + run: + shell: bash + working-directory: openbb_platform/extensions/mcp_server + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-python@v6 + with: + python-version: "3.11" + + - run: python -m pip install --upgrade pip uv + + - uses: actions/download-artifact@v5 + with: + name: openbb-mcp-server-dist + path: openbb_platform/extensions/mcp_server/dist + + - name: Install dependencies then openbb-mcp-server wheel + run: | + uv pip install --system ../../core + uv pip install --system --no-sources ../../../cli tests/fixtures/openbb_mcp_fixture + uv pip install --system --no-sources --group dev + uv pip install --system --no-sources dist/openbb_mcp_server-*.whl + + - name: ruff check + run: ruff check openbb_mcp_server tests + + - name: ruff format --check + run: ruff format --check openbb_mcp_server tests + + - name: ty check + run: ty check openbb_mcp_server + + test: + name: Test (${{ matrix.os }} / Python ${{ matrix.python_version }}) + needs: build + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, python_version: "3.10" } + - { os: ubuntu-latest, python_version: "3.11" } + - { os: ubuntu-latest, python_version: "3.12" } + - { os: ubuntu-latest, python_version: "3.13" } + - { os: ubuntu-latest, python_version: "3.14" } + - { os: macos-latest, python_version: "3.10" } + - { os: macos-latest, python_version: "3.14" } + - { os: windows-latest, python_version: "3.10" } + - { os: windows-latest, python_version: "3.14" } + runs-on: ${{ matrix.os }} + defaults: + run: + shell: bash + working-directory: openbb_platform/extensions/mcp_server + steps: + - uses: actions/checkout@v6 + + - uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python_version }} + allow-prereleases: true + + - uses: actions/download-artifact@v5 + with: + name: openbb-mcp-server-dist + path: openbb_platform/extensions/mcp_server/dist + + - run: python -m pip install --upgrade pip uv + + - name: Install dependencies then openbb-mcp-server wheel + run: | + uv pip install --system ../../core + uv pip install --system --no-sources ../../../cli tests/fixtures/openbb_mcp_fixture + uv pip install --system --no-sources --group dev + uv pip install --system --no-sources dist/openbb_mcp_server-*.whl + + - name: Test the installed wheel + run: | + rm -rf openbb_mcp_server + pytest tests --cov=openbb_mcp_server --cov-branch --cov-report=term-missing --cov-fail-under=100 diff --git a/openbb_platform/core/openbb/assets/reference.json b/openbb_platform/core/openbb/assets/reference.json index 292b7157e3a..335aa04d8aa 100644 --- a/openbb_platform/core/openbb/assets/reference.json +++ b/openbb_platform/core/openbb/assets/reference.json @@ -5,11 +5,10204 @@ "description": "Investment research for everyone, anywhere.", "core": "2.0.0", "extensions": { - "openbb_core_extension": [], - "openbb_provider_extension": [], + "openbb_core_extension": [ + "equity@1.6.1", + "technical@2.0.0" + ], + "openbb_provider_extension": [ + "yfinance@1.6.2" + ], "openbb_obbject_extension": [] } }, - "paths": {}, - "routers": {} + "paths": { + "/equity/estimates/consensus": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get consensus price target and recommendation.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.estimates.consensus(symbol='AAPL,MSFT', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str | None | list[str | None]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": { + "yfinance": { + "multiple_items_allowed": true + } + } + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "PriceTargetConsensus", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "The company name", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "target_high", + "type": "float | None", + "description": "High target of the price target consensus.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "target_low", + "type": "float | None", + "description": "Low target of the price target consensus.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "target_consensus", + "type": "float | None", + "description": "Consensus target of the price target consensus.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "target_median", + "type": "float | None", + "description": "Median target of the price target consensus.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "recommendation", + "type": "str | None", + "description": "Recommendation - buy, sell, etc.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "recommendation_mean", + "type": "float | None", + "description": "Mean recommendation score where 1 is strong buy and 5 is strong sell.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "number_of_analysts", + "type": "int | None", + "description": "Number of analysts providing opinions.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "current_price", + "type": "float | None", + "description": "Current price of the stock.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency the stock is priced in.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "PriceTargetConsensus", + "openapi_extra": { + "model": "PriceTargetConsensus" + } + }, + "/equity/discovery/gainers": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the top price gainers in the stock market.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.gainers(provider='yfinance')\nobb.equity.discovery.gainers(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityGainers", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityGainers", + "openapi_extra": { + "model": "EquityGainers" + } + }, + "/equity/discovery/losers": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the top price losers in the stock market.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.losers(provider='yfinance')\nobb.equity.discovery.losers(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityLosers", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityLosers", + "openapi_extra": { + "model": "EquityLosers" + } + }, + "/equity/discovery/active": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the most actively traded stocks based on volume.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.active(provider='yfinance')\nobb.equity.discovery.active(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityActive", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityActive", + "openapi_extra": { + "model": "EquityActive" + } + }, + "/equity/discovery/undervalued_large_caps": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get potentially undervalued large cap stocks.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.undervalued_large_caps(provider='yfinance')\nobb.equity.discovery.undervalued_large_caps(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityUndervaluedLargeCaps", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityUndervaluedLargeCaps", + "openapi_extra": { + "model": "EquityUndervaluedLargeCaps" + } + }, + "/equity/discovery/undervalued_growth": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get potentially undervalued growth stocks.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.undervalued_growth(provider='yfinance')\nobb.equity.discovery.undervalued_growth(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityUndervaluedGrowth", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityUndervaluedGrowth", + "openapi_extra": { + "model": "EquityUndervaluedGrowth" + } + }, + "/equity/discovery/aggressive_small_caps": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get top small cap stocks based on earnings growth.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.aggressive_small_caps(provider='yfinance')\nobb.equity.discovery.aggressive_small_caps(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results. Default is all.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityAggressiveSmallCaps", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityAggressiveSmallCaps", + "openapi_extra": { + "model": "EquityAggressiveSmallCaps" + } + }, + "/equity/discovery/growth_tech": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get top tech stocks based on revenue and earnings growth.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.equity.discovery.growth_tech(provider='yfinance')\nobb.equity.discovery.growth_tech(sort='desc', provider='yfinance')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "sort", + "type": "Literal['asc', 'desc'] | None", + "description": "Sort order. Possible values: 'asc', 'desc'. Default: 'desc'.", + "default": "desc", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "GrowthTechEquities", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "GrowthTechEquities", + "openapi_extra": { + "model": "GrowthTechEquities" + } + }, + "/equity/fundamental/balance": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the balance sheet for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "limit", + "type": "int | None", + "description": "The number of data entries to return.", + "default": null, + "optional": true, + "choices": null, + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "The number of data entries to return.", + "default": 5, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "period", + "type": "Literal['annual', 'quarter'] | None", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true, + "choices": [ + "annual", + "quarter" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "BalanceSheet", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "fiscal_period", + "type": "str | None", + "description": "The fiscal period of the report.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "fiscal_year", + "type": "int | None", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [] + }, + "model": "BalanceSheet", + "openapi_extra": { + "model": "BalanceSheet" + } + }, + "/equity/fundamental/cash": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the cash flow statement for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "limit", + "type": "int | None", + "description": "The number of data entries to return.", + "default": 5, + "optional": true, + "choices": null, + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "The number of data entries to return.", + "default": 5, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "period", + "type": "Literal['annual', 'quarter'] | None", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true, + "choices": [ + "annual", + "quarter" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "CashFlowStatement", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "fiscal_period", + "type": "str | None", + "description": "The fiscal period of the report.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "fiscal_year", + "type": "int | None", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [] + }, + "model": "CashFlowStatement", + "openapi_extra": { + "model": "CashFlowStatement" + } + }, + "/equity/fundamental/dividends": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical dividend data for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "start_date", + "type": "date | None | str", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "end_date", + "type": "date | None | str", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "HistoricalDividends", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str | None", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "ex_dividend_date", + "type": "date", + "description": "The ex-dividend date - the date on which the stock begins trading without rights to the dividend.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "amount", + "type": "float", + "description": "The dividend amount per share.", + "default": null, + "optional": false, + "json_schema_extra": {} + } + ], + "yfinance": [] + }, + "model": "HistoricalDividends", + "openapi_extra": { + "model": "HistoricalDividends" + } + }, + "/equity/fundamental/income": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the income statement for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "limit", + "type": "int | None", + "description": "The number of data entries to return.", + "default": null, + "optional": true, + "choices": null, + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "limit", + "type": "int | None", + "description": "The number of data entries to return.", + "default": 5, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "period", + "type": "Literal['annual', 'quarter'] | None", + "description": "Time period of the data to return.", + "default": "annual", + "optional": true, + "choices": [ + "annual", + "quarter" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "IncomeStatement", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "period_ending", + "type": "date", + "description": "The end date of the reporting period.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "fiscal_period", + "type": "str | None", + "description": "The fiscal period of the report.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "fiscal_year", + "type": "int | None", + "description": "The fiscal year of the fiscal period.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [] + }, + "model": "IncomeStatement", + "openapi_extra": { + "model": "IncomeStatement" + } + }, + "/equity/fundamental/metrics": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get fundamental metrics for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str | list[str]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": { + "yfinance": { + "multiple_items_allowed": true + } + } + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "KeyMetrics", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "period_ending", + "type": "date | None", + "description": "End date of the reporting period.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "fiscal_year", + "type": "int | None", + "description": "Fiscal year for the fiscal period, if available.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "fiscal_period", + "type": "str | None", + "description": "Fiscal period for the data, if available.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency in which the data is reported.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "market_cap", + "type": "int | None", + "description": "", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "currency", + "type": "str | None", + "description": "Currency in which the data is presented.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "pe_ratio", + "type": "float | None", + "description": "Price-to-earnings ratio (TTM).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "forward_pe", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "peg_ratio", + "type": "float | None", + "description": "PEG ratio (5-year expected).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "peg_ratio_ttm", + "type": "float | None", + "description": "PEG ratio (TTM).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share (TTM).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "enterprise_to_ebitda", + "type": "float | None", + "description": "Enterprise value to EBITDA ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_growth", + "type": "float | None", + "description": "Earnings growth (Year Over Year), as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "earnings_growth_quarterly", + "type": "float | None", + "description": "Quarterly earnings growth (Year Over Year), as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "revenue_per_share", + "type": "float | None", + "description": "Revenue per share (TTM).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "revenue_growth", + "type": "float | None", + "description": "Revenue growth (Year Over Year), as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "enterprise_to_revenue", + "type": "float | None", + "description": "Enterprise value to revenue ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "cash_per_share", + "type": "float | None", + "description": "Cash per share.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "quick_ratio", + "type": "float | None", + "description": "Quick ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "current_ratio", + "type": "float | None", + "description": "Current ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "debt_to_equity", + "type": "float | None", + "description": "Debt-to-equity ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "gross_margin", + "type": "float | None", + "description": "Gross margin, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "operating_margin", + "type": "float | None", + "description": "Operating margin, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "ebitda_margin", + "type": "float | None", + "description": "EBITDA margin, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "profit_margin", + "type": "float | None", + "description": "Profit margin, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "return_on_assets", + "type": "float | None", + "description": "Return on assets, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "return_on_equity", + "type": "float | None", + "description": "Return on equity, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Dividend yield, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "dividend_yield_5y_avg", + "type": "float | None", + "description": "5-year average dividend yield, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "payout_ratio", + "type": "float | None", + "description": "Payout ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price-to-book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "enterprise_value", + "type": "int | None", + "description": "Enterprise value.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "overall_risk", + "type": "float | None", + "description": "Overall risk score.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "audit_risk", + "type": "float | None", + "description": "Audit risk score.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "board_risk", + "type": "float | None", + "description": "Board risk score.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "compensation_risk", + "type": "float | None", + "description": "Compensation risk score.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "shareholder_rights_risk", + "type": "float | None", + "description": "Shareholder rights risk score.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "beta", + "type": "float | None", + "description": "Beta relative to the broad market (5-year monthly).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price_return_1y", + "type": "float | None", + "description": "One-year price return, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + } + ] + }, + "model": "KeyMetrics", + "openapi_extra": { + "model": "KeyMetrics" + } + }, + "/equity/fundamental/management": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get executive management team data for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol to get data for.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "KeyExecutives", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "title", + "type": "str", + "description": "Designation of the key executive.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str", + "description": "Name of the key executive.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "pay", + "type": "int | None", + "description": "Pay of the key executive.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency_pay", + "type": "str | None", + "description": "Currency of the pay.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "gender", + "type": "str | None", + "description": "Gender of the key executive.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "year_born", + "type": "int | None", + "description": "Birth year of the key executive.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "exercised_value", + "type": "int | None", + "description": "Value of shares exercised.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "unexercised_value", + "type": "int | None", + "description": "Value of shares not exercised.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "fiscal_year", + "type": "int | None", + "description": "Fiscal year of the pay.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "KeyExecutives", + "openapi_extra": { + "model": "KeyExecutives" + } + }, + "/equity/ownership/share_statistics": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get data about share float for a given company.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str | list[str]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": { + "yfinance": { + "multiple_items_allowed": true + } + } + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "ShareStatistics", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "date", + "type": "date | None | str", + "description": "The date of the data.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "free_float", + "type": "float | None", + "description": "Percentage of unrestricted shares of a publicly-traded company.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "float_shares", + "type": "int | None", + "description": "Number of shares available for trading by the general public.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "outstanding_shares", + "type": "int | None", + "description": "Total number of shares of a publicly-traded company.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "implied_shares_outstanding", + "type": "int | None", + "description": "Implied Shares Outstanding of common equity, assuming the conversion of all convertible subsidiary equity into common.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "short_interest", + "type": "int | None", + "description": "Number of shares that are reported short.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "short_percent_of_float", + "type": "float | None", + "description": "Percentage of shares that are reported short, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "days_to_cover", + "type": "float | None", + "description": "Number of days to repurchase the shares as a ratio of average daily volume", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "short_interest_prev_month", + "type": "int | None", + "description": "Number of shares that were reported short in the previous month.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "short_interest_prev_date", + "type": "date | None", + "description": "Date of the previous month's report.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "insider_ownership", + "type": "float | None", + "description": "Percentage of shares held by insiders, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "institution_ownership", + "type": "float | None", + "description": "Percentage of shares held by institutions, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "institution_float_ownership", + "type": "float | None", + "description": "Percentage of float held by institutions, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "institutions_count", + "type": "int | None", + "description": "Number of institutions holding shares.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "ShareStatistics", + "openapi_extra": { + "model": "ShareStatistics" + } + }, + "/equity/price/quote": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get the latest quote for a given stock. Quote includes price, volume, and other data.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str | list[str]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": { + "yfinance": { + "multiple_items_allowed": true + } + } + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityQuote", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "asset_type", + "type": "str | None", + "description": "Type of asset - i.e, stock, ETF, etc.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the company or asset.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange", + "type": "str | None", + "description": "The name or symbol of the venue where the data is from.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "bid", + "type": "float | None", + "description": "Price of the top bid order.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "bid_size", + "type": "int | None", + "description": "This represents the number of round lot orders at the given price. The normal round lot size is 100 shares. A size of 2 means there are 200 shares available at the given price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "bid_exchange", + "type": "str | None", + "description": "The specific trading venue where the purchase order was placed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "ask", + "type": "float | None", + "description": "Price of the top ask order.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "ask_size", + "type": "int | None", + "description": "This represents the number of round lot orders at the given price. The normal round lot size is 100 shares. A size of 2 means there are 200 shares available at the given price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "ask_exchange", + "type": "str | None", + "description": "The specific trading venue where the sale order was placed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "quote_conditions", + "type": "str | None", + "description": "Conditions or condition codes applicable to the quote.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "quote_indicators", + "type": "str | None", + "description": "Indicators or indicator codes applicable to the participant quote related to the price bands for the issue, or the affect the quote has on the NBBO.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "sales_conditions", + "type": "str | None", + "description": "Conditions or condition codes applicable to the sale.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "sequence_number", + "type": "int | None", + "description": "The sequence number represents the sequence in which message events happened. These are increasing and unique per ticker symbol, but will not always be sequential (e.g., 1, 2, 6, 9, 10, 11).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "market_center", + "type": "str | None", + "description": "The ID of the UTP participant that originated the message.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "participant_timestamp", + "type": "datetime | None", + "description": "Timestamp for when the quote was generated by the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "trf_timestamp", + "type": "datetime | None", + "description": "Timestamp for when the TRF (Trade Reporting Facility) received the message.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "sip_timestamp", + "type": "datetime | None", + "description": "Timestamp for when the SIP (Security Information Processor) received the message from the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "last_price", + "type": "float | None", + "description": "Price of the last trade.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "last_tick", + "type": "str | None", + "description": "Whether the last sale was an up or down tick.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "last_size", + "type": "int | None", + "description": "Size of the last trade.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "last_timestamp", + "type": "datetime | None", + "description": "Date and Time when the last price was recorded.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "open", + "type": "float | None", + "description": "The open price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "high", + "type": "float | None", + "description": "The high price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "low", + "type": "float | None", + "description": "The low price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "close", + "type": "float | None", + "description": "The close price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_volume", + "type": "int | None", + "description": "Volume of shares exchanged during the trading day on the specific exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "prev_close", + "type": "float | None", + "description": "The previous close price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "change", + "type": "float | None", + "description": "Change in price from previous close.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "change_percent", + "type": "float | None", + "description": "Change in price as a normalized percentage.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "The one year high (52W High).", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "year_low", + "type": "float | None", + "description": "The one year low (52W Low).", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "ma_50d", + "type": "float | None", + "description": "50-day moving average price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "ma_200d", + "type": "float | None", + "description": "200-day moving average price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "volume_average", + "type": "float | None", + "description": "Average daily trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "volume_average_10d", + "type": "float | None", + "description": "Average daily trading volume in the last 10 days.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityQuote", + "openapi_extra": { + "model": "EquityQuote" + } + }, + "/equity/price/historical": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get historical price data for a given stock. This includes open, high, low, close, and volume.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str | list[str]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": { + "yfinance": { + "multiple_items_allowed": true + } + } + }, + { + "name": "start_date", + "type": "date | None | str", + "description": "Start date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "end_date", + "type": "date | None | str", + "description": "End date of the data, in YYYY-MM-DD format.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "interval", + "type": "Literal['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1W', '1M', '1Q'] | None", + "description": "Time interval of the data to return.", + "default": "1d", + "optional": true, + "choices": [ + "1m", + "2m", + "5m", + "15m", + "30m", + "60m", + "90m", + "1h", + "1d", + "5d", + "1W", + "1M", + "1Q" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "extended_hours", + "type": "bool | None", + "description": "Include Pre and Post market data.", + "default": false, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "include_actions", + "type": "bool | None", + "description": "Include dividends and stock splits in results.", + "default": true, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "adjustment", + "type": "Literal['splits_only', 'splits_and_dividends'] | None", + "description": "The adjustment factor to apply. Default is splits only.", + "default": "splits_only", + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityHistorical", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "date", + "type": "date | str", + "description": "The date of the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "open", + "type": "float", + "description": "The open price.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "high", + "type": "float", + "description": "The high price.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "low", + "type": "float", + "description": "The low price.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "close", + "type": "float", + "description": "The close price.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "volume", + "type": "float | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "vwap", + "type": "float | None", + "description": "Volume Weighted Average Price over the period.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "split_ratio", + "type": "float | None", + "description": "Ratio of the equity split, if a split occurred.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend", + "type": "float | None", + "description": "Dividend amount (split-adjusted), if a dividend was paid.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityHistorical", + "openapi_extra": { + "model": "EquityHistorical" + } + }, + "/equity/screener": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Screen for companies meeting various criteria.\n\nThese criteria include market cap, price, beta, volume, and dividend yield.", + "examples": "", + "parameters": { + "standard": [], + "yfinance": [ + { + "name": "country", + "type": "str | None", + "description": "Filter by country. Accepts ISO 3166-1 alpha-2 codes (e.g., 'US', 'DE'), alpha-3 codes (e.g., 'USA'), country names (e.g., 'United States'), or 'all' for all countries.", + "default": "us", + "optional": true, + "choices": [ + "all", + "ar", + "at", + "au", + "be", + "br", + "ca", + "ch", + "cl", + "cn", + "cz", + "de", + "dk", + "ee", + "eg", + "es", + "fi", + "fr", + "gb", + "gr", + "hk", + "hu", + "id", + "ie", + "il", + "in", + "is", + "it", + "jp", + "kr", + "kw", + "lk", + "lt", + "lv", + "mx", + "my", + "nl", + "no", + "nz", + "pe", + "ph", + "pk", + "pl", + "pt", + "qa", + "ro", + "ru", + "sa", + "se", + "sg", + "sr", + "th", + "tr", + "tw", + "us", + "ve", + "vn", + "za" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "exchange", + "type": "Literal['ams', 'aqs', 'ase', 'asx', 'ath', 'ber', 'bru', 'bse', 'bts', 'bud', 'bue', 'bvb', 'bvc', 'ccs', 'cnq', 'cph', 'cxe', 'dfm', 'doh', 'dus', 'ebs', 'fka', 'fra', 'ger', 'ham', 'han', 'hel', 'hkg', 'ice', 'iob', 'ise', 'ist', 'jkt', 'jnb', 'jpx', 'kls', 'kuw', 'lis', 'lit', 'lse', 'mce', 'mex', 'mil', 'mun', 'ncm', 'neo', 'ngm', 'nms', 'nsi', 'nyq', 'nze', 'oem', 'oqb', 'oqx', 'osl', 'par', 'pnk', 'pra', 'ris', 'sau', 'ses', 'set', 'sgo', 'shh', 'shz', 'sto', 'stu', 'tai', 'tal', 'tlv', 'tor', 'two', 'van', 'vie', 'vse', 'wse'] | None", + "description": "Filter by exchange.", + "default": null, + "optional": true, + "choices": [ + "ams", + "aqs", + "ase", + "asx", + "ath", + "ber", + "bru", + "bse", + "bts", + "bud", + "bue", + "bvb", + "bvc", + "ccs", + "cnq", + "cph", + "cxe", + "dfm", + "doh", + "dus", + "ebs", + "fka", + "fra", + "ger", + "ham", + "han", + "hel", + "hkg", + "ice", + "iob", + "ise", + "ist", + "jkt", + "jnb", + "jpx", + "kls", + "kuw", + "lis", + "lit", + "lse", + "mce", + "mex", + "mil", + "mun", + "ncm", + "neo", + "ngm", + "nms", + "nsi", + "nyq", + "nze", + "oem", + "oqb", + "oqx", + "osl", + "par", + "pnk", + "pra", + "ris", + "sau", + "ses", + "set", + "sgo", + "shh", + "shz", + "sto", + "stu", + "tai", + "tal", + "tlv", + "tor", + "two", + "van", + "vie", + "vse", + "wse" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "sector", + "type": "Literal['basic_materials', 'communication_services', 'consumer_cyclical', 'consumer_defensive', 'energy', 'financial_services', 'healthcare', 'industrials', 'real_estate', 'technology', 'utilities'] | None", + "description": "Filter by sector.", + "default": null, + "optional": true, + "choices": [ + "basic_materials", + "communication_services", + "consumer_cyclical", + "consumer_defensive", + "energy", + "financial_services", + "healthcare", + "industrials", + "real_estate", + "technology", + "utilities" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "industry", + "type": "str | None", + "description": "Filter by industry.", + "default": null, + "optional": true, + "choices": [ + "advertising_agencies", + "aerospace_defense", + "agricultural_inputs", + "airlines", + "airports_air_services", + "aluminum", + "apparel_manufacturing", + "apparel_retail", + "asset_management", + "auto_components", + "auto_manufacturers", + "auto_parts", + "auto_truck_dealerships", + "automobiles", + "banks", + "biotechnology", + "broadcasting", + "building_materials", + "building_products", + "building_products_equipment", + "business_equipment_supplies", + "capital_markets", + "chemicals", + "coking_coal", + "commercial_services", + "communication_equipment", + "computer_hardware", + "confectioners", + "construction_engineering", + "construction_materials", + "consulting_services", + "consumer_durables", + "consumer_electronics", + "consumer_services", + "copper", + "credit_services", + "department_stores", + "diagnostics_research", + "discount_stores", + "diversified_financials", + "education_training_services", + "electrical_equipment", + "electrical_equipment_parts", + "electronic_components", + "electronic_gaming_multimedia", + "electronics_computer_distribution", + "energy_services", + "engineering_construction", + "entertainment", + "farm_heavy_construction_machinery", + "farm_products", + "financial_conglomerates", + "financial_data_stock_exchanges", + "food_distribution", + "footwear_accessories", + "furnishings_fixtures_appliances", + "gambling", + "gold", + "grocery_stores", + "health_information_services", + "healthcare_plans", + "home_builders", + "home_improvement_retail", + "household_products", + "household_personal_products", + "industrial_conglomerates", + "industrial_distribution", + "information_technology_services", + "infrastructure_operations", + "insurance", + "integrated_freight_logistics", + "internet_content_information", + "internet_retail", + "leisure", + "lodging", + "lumber_wood_production", + "luxury_goods", + "machinery", + "marine_shipping", + "media", + "medical_care_facilities", + "medical_devices", + "medical_distribution", + "medical_instruments_supplies", + "metal_fabrication", + "mortgage_finance", + "oil_gas_drilling", + "oil_gas_e_p", + "oil_gas_equipment_services", + "oil_gas_integrated", + "oil_gas_midstream", + "oil_gas_producers", + "oil_gas_refining_marketing", + "other_industrial_metals_mining", + "other_precious_metals_mining", + "packaged_foods", + "packaging_containers", + "paper_forestry", + "paper_paper_products", + "personal_services", + "pharmaceuticals", + "pharmaceutical_retailers", + "pollution_treatment_controls", + "precious_metals", + "publishing", + "railroads", + "real_estate", + "recreational_vehicles", + "refiners_pipelines", + "rental_leasing_services", + "residential_construction", + "resorts_casinos", + "restaurants", + "retailing", + "scientific_technical_instruments", + "security_protection_services", + "semiconductor_equipment_materials", + "semiconductors", + "shell_companies", + "silver", + "software_and_services", + "solar", + "specialty_business_services", + "specialty_chemicals", + "specialty_industrial_machinery", + "specialty_retail", + "staffing_employment_services", + "steel", + "technology_hardware", + "telecom_services", + "textiles_apparel", + "textile_manufacturing", + "thermal_coal", + "tobacco", + "tools_accessories", + "traders_distributors", + "transportation", + "transportation_infrastructure", + "travel_services", + "trucking", + "uranium", + "utilities", + "waste_management" + ], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "mktcap_min", + "type": "int | None", + "description": "Filter by market cap greater than this value. Default is 500M.", + "default": 500000000, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "mktcap_max", + "type": "int | None", + "description": "Filter by market cap less than this value.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "price_min", + "type": "float | None", + "description": "Filter by price greater than this value. Default is, 5", + "default": 5, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "price_max", + "type": "float | None", + "description": "Filter by price less than this value.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "volume_min", + "type": "int | None", + "description": "Filter by volume greater than this value. Default is, 10K", + "default": 10000, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "volume_max", + "type": "int | None", + "description": "Filter by volume less than this value.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "beta_min", + "type": "float | None", + "description": "Filter by a beta greater than this value.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "beta_max", + "type": "float | None", + "description": "Filter by a beta less than this value.", + "default": null, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + }, + { + "name": "limit", + "type": "int | None", + "description": "Limit the number of results returned. Default is, 200. Set to, 0, for all results.", + "default": 200, + "optional": true, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": {} + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityScreener", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Name of the entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "price", + "type": "float", + "description": "Last price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "change", + "type": "float", + "description": "Change in price.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "percent_change", + "type": "float", + "description": "Percent change.", + "default": null, + "optional": false, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "volume", + "type": "int | None", + "description": "The trading volume.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "open", + "type": "float | None", + "description": "Open price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "high", + "type": "float | None", + "description": "High price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "low", + "type": "float | None", + "description": "Low price for the day.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "previous_close", + "type": "float | None", + "description": "Previous close price.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma50", + "type": "float | None", + "description": "50-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "ma200", + "type": "float | None", + "description": "200-day moving average.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_high", + "type": "float | None", + "description": "52-week high.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "year_low", + "type": "float | None", + "description": "52-week low.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "market_cap", + "type": "float | None", + "description": "Market Cap.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "shares_outstanding", + "type": "float | None", + "description": "Shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "book_value", + "type": "float | None", + "description": "Book value per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "price_to_book", + "type": "float | None", + "description": "Price to book ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "eps_ttm", + "type": "float | None", + "description": "Earnings per share over the trailing twelve months.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "eps_forward", + "type": "float | None", + "description": "Forward earnings per share.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "currency" + } + }, + { + "name": "pe_forward", + "type": "float | None", + "description": "Forward price-to-earnings ratio.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "Trailing twelve month dividend yield.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "frontend_multiply": 100 + } + }, + { + "name": "exchange", + "type": "str | None", + "description": "Exchange where the stock is listed.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "exchange_timezone", + "type": "str | None", + "description": "Timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "earnings_date", + "type": "datetime | None", + "description": "Most recent earnings date.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "Currency of the price data.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityScreener", + "openapi_extra": { + "model": "EquityScreener" + } + }, + "/equity/profile": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Get general information about a company. This includes company name, industry, sector and price data.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "symbol", + "type": "str | list[str]", + "description": "Symbol to get data for. Multiple items allowed for provider(s): yfinance.", + "default": null, + "optional": false, + "choices": [], + "multiple_items_allowed": false, + "json_schema_extra": { + "yfinance": { + "multiple_items_allowed": true + } + } + } + ], + "yfinance": [] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "EquityInfo", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "Literal['yfinance'] | None", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": { + "standard": [ + { + "name": "symbol", + "type": "str", + "description": "Symbol representing the entity requested in the data.", + "default": null, + "optional": false, + "json_schema_extra": {} + }, + { + "name": "name", + "type": "str | None", + "description": "Common name of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "cik", + "type": "str | None", + "description": "Central Index Key (CIK) for the requested entity.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "cusip", + "type": "str | None", + "description": "CUSIP identifier for the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "isin", + "type": "str | None", + "description": "International Securities Identification Number.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "lei", + "type": "str | None", + "description": "Legal Entity Identifier assigned to the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "legal_name", + "type": "str | None", + "description": "Official legal name of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "stock_exchange", + "type": "str | None", + "description": "Stock exchange where the company is traded.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "sic", + "type": "int | None", + "description": "Standard Industrial Classification code for the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "short_description", + "type": "str | None", + "description": "Short description of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "long_description", + "type": "str | None", + "description": "Long description of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "ceo", + "type": "str | None", + "description": "Chief Executive Officer of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "company_url", + "type": "str | None", + "description": "URL of the company's website.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "business_address", + "type": "str | None", + "description": "Address of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "mailing_address", + "type": "str | None", + "description": "Mailing address of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "business_phone_no", + "type": "str | None", + "description": "Phone number of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "hq_address1", + "type": "str | None", + "description": "Address of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "hq_address2", + "type": "str | None", + "description": "Address of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "hq_address_city", + "type": "str | None", + "description": "City of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "hq_address_postal_code", + "type": "str | None", + "description": "Zip code of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "hq_state", + "type": "str | None", + "description": "State of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "hq_country", + "type": "str | None", + "description": "Country of the company's headquarters.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "inc_state", + "type": "str | None", + "description": "State in which the company is incorporated.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "inc_country", + "type": "str | None", + "description": "Country in which the company is incorporated.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "employees", + "type": "int | None", + "description": "Number of employees working for the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "entity_legal_form", + "type": "str | None", + "description": "Legal form of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "entity_status", + "type": "str | None", + "description": "Status of the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "latest_filing_date", + "type": "date | None", + "description": "Date of the company's latest filing.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "irs_number", + "type": "str | None", + "description": "IRS number assigned to the company.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "sector", + "type": "str | None", + "description": "Sector in which the company operates.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "industry_category", + "type": "str | None", + "description": "Category of industry in which the company operates.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "industry_group", + "type": "str | None", + "description": "Group of industry in which the company operates.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "template", + "type": "str | None", + "description": "Template used to standardize the company's financial statements.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "standardized_active", + "type": "bool | None", + "description": "Whether the company is active or not.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "first_fundamental_date", + "type": "date | None", + "description": "Date of the company's first fundamental.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "last_fundamental_date", + "type": "date | None", + "description": "Date of the company's last fundamental.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "first_stock_price_date", + "type": "date | None", + "description": "Date of the company's first stock price.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "last_stock_price_date", + "type": "date | None", + "description": "Date of the company's last stock price.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ], + "yfinance": [ + { + "name": "exchange_timezone", + "type": "str | None", + "description": "The timezone of the exchange.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "issue_type", + "type": "str | None", + "description": "The issuance type of the asset.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "currency", + "type": "str | None", + "description": "The currency in which the asset is traded.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "market_cap", + "type": "int | None", + "description": "The market capitalization of the asset.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "shares_outstanding", + "type": "int | None", + "description": "The number of listed shares outstanding.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "shares_float", + "type": "int | None", + "description": "The number of shares in the public float.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "shares_implied_outstanding", + "type": "int | None", + "description": "Implied shares outstanding of common equityassuming the conversion of all convertible subsidiary equity into common.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "shares_short", + "type": "int | None", + "description": "The reported number of shares short.", + "default": null, + "optional": true, + "json_schema_extra": {} + }, + { + "name": "dividend_yield", + "type": "float | None", + "description": "The dividend yield of the asset, as a normalized percent.", + "default": null, + "optional": true, + "json_schema_extra": { + "x-unit_measurement": "percent", + "x-frontend_multiply": 100 + } + }, + { + "name": "beta", + "type": "float | None", + "description": "The beta of the asset relative to the broad market.", + "default": null, + "optional": true, + "json_schema_extra": {} + } + ] + }, + "model": "EquityInfo", + "openapi_extra": { + "model": "EquityInfo" + } + }, + "/technical/sma": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Simple Moving Average over the trailing window.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# 50-bar SMA on TSLA close.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nsma = obb.technical.sma(data=data, length=50)\nobb.technical.sma(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Window length in bars.", + "default": 50, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset, positive shifts forward.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/ema": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Exponential Moving Average with recency-weighted smoothing.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.ema(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "EMA period.", + "default": 50, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/hma": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Alan Hull's lag-reduced moving average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.hma(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=4)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "HMA period.", + "default": 50, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/wma": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the linearly-Weighted Moving Average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.wma(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "WMA period.", + "default": 50, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/zlma": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Zero-Lag Exponential Moving Average of Ehlers and Way.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.zlma(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "ZLMA period.", + "default": 50, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/tema": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Patrick Mulloy's Triple Exponential Moving Average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.tema(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=3)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "TEMA period.", + "default": 10, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/dema": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Patrick Mulloy's Double Exponential Moving Average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.dema(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=3)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "DEMA period.", + "default": 10, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/kama": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Perry Kaufman's Adaptive Moving Average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.kama(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=3)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Efficiency-ratio lookback.", + "default": 10, + "optional": true + }, + { + "name": "fast", + "type": "int", + "description": "Fastest EMA period bound.", + "default": 2, + "optional": true + }, + { + "name": "slow", + "type": "int", + "description": "Slowest EMA period bound.", + "default": 30, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/frama": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate John Ehlers' Fractal Adaptive Moving Average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.frama(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', window=4)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series with ``high`` and ``low`` columns.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "window", + "type": "int", + "description": "Window length \u2014 must be even.", + "default": 10, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/vwma": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Volume Weighted Moving Average.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.vwma(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=3)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series with ``close`` and ``volume``.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "VWMA period.", + "default": 10, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/bbands": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Bollinger Bands around a moving-average centreline.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.bbands(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to smooth and band, by default ``\"close\"``.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Moving-average period.", + "default": 20, + "optional": true + }, + { + "name": "std", + "type": "float", + "description": "Standard-deviation multiplier.", + "default": 2.0, + "optional": true + }, + { + "name": "mamode", + "type": "Literal['sma', 'ema', 'wma', 'rma']", + "description": "Type of moving average for the middle band.", + "default": "sma", + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/donchian": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Donchian Channel \u2014 trailing high/low price envelope.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.donchian(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', lower_length=1, upper_length=3)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series with high/low columns.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "lower_length", + "type": "int", + "description": "Lookback for the lower band.", + "default": 20, + "optional": true + }, + { + "name": "upper_length", + "type": "int", + "description": "Lookback for the upper band.", + "default": 20, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset; positive values shift the series forward, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/kc": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Keltner Channel \u2014 an ATR-scaled volatility envelope.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.kc(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Centerline MA period.", + "default": 20, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "ATR multiplier for the bands.", + "default": 2.0, + "optional": true + }, + { + "name": "mamode", + "type": "Literal['ema', 'sma']", + "description": "Centreline moving-average type.", + "default": "ema", + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Output offset in bars, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/ichimoku": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Ichimoku Kinko Hyo cloud \u2014 a five-component trend overlay.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.ichimoku(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "conversion", + "type": "int", + "description": "Tenkan-sen lookback.", + "default": 9, + "optional": true + }, + { + "name": "base", + "type": "int", + "description": "Kijun-sen lookback.", + "default": 26, + "optional": true + }, + { + "name": "lagging", + "type": "int", + "description": "Senkou Span B lookback.", + "default": 52, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Forward projection for the cloud.", + "default": 26, + "optional": true + }, + { + "name": "lookahead", + "type": "bool", + "description": "If ``True``, emit the Chikou Span (look-ahead). Off by default to prevent data leakage.", + "default": false, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/supertrend": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Supertrend ATR-banded trailing-stop overlay.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.supertrend(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "ATR lookback.", + "default": 7, + "optional": true + }, + { + "name": "multiplier", + "type": "float", + "description": "ATR multiplier for the bands.", + "default": 3.0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/rsi": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Relative Strength Index (RSI), Wilder's momentum oscillator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# RSI(14) on daily TSLA closes.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nrsi = obb.technical.rsi(data=data, length=14)\nobb.technical.rsi(length=2, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Target column to apply RSI to.", + "default": "close", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window in bars.", + "default": 14, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "Output scaling. ``100`` produces the conventional 0\u2013100 range.", + "default": 100.0, + "optional": true + }, + { + "name": "drift", + "type": "int", + "description": "Difference period for momentum.", + "default": 1, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/stoch": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Stochastic Oscillator (%K and %D).", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Stochastic oscillator on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nstoch = obb.technical.stoch(data=data)\nobb.technical.stoch(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "fast_k_period", + "type": "int", + "description": "Fast %K lookback.", + "default": 14, + "optional": true + }, + { + "name": "slow_d_period", + "type": "int", + "description": "Slow %D smoothing.", + "default": 3, + "optional": true + }, + { + "name": "slow_k_period", + "type": "int", + "description": "Slow %K smoothing.", + "default": 3, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/cci": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Commodity Channel Index (CCI), Lambert's mean-reversion oscillator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# CCI(14) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\ncci = obb.technical.cci(data=data, length=14)\nobb.technical.cci(length=2, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window in bars.", + "default": 14, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "Mean-deviation scaling factor (Lambert's original constant).", + "default": 0.015, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/fisher": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Ehlers' Fisher Transform of price with a signal line.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Fisher Transform on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nfisher = obb.technical.fisher(data=data, length=14, signal=1)\nobb.technical.fisher(length=2, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series (uses high + low).", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Fisher transform window.", + "default": 14, + "optional": true + }, + { + "name": "signal", + "type": "int", + "description": "Lag for the signal line.", + "default": 1, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/cg": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Ehlers' Center of Gravity oscillator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Center of Gravity on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\ncg = obb.technical.cg(data=data, length=14)\nobb.technical.cg(length=2, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series (uses high/low/close median).", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window in bars.", + "default": 14, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/williams_r": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Williams %R, a momentum oscillator inverted from fast stochastic %K.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Williams %R on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nwr = obb.technical.williams_r(data=data, length=14)\nobb.technical.williams_r(length=14, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window in bars.", + "default": 14, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/mfi": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Money Flow Index (MFI), a volume-weighted RSI.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# MFI(14) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nmfi = obb.technical.mfi(data=data, length=14)\nobb.technical.mfi(length=14, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLCV price series \u2014 ``volume`` is required.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window in bars.", + "default": 14, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/trix": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate TRIX \u2014 the rate of change of a triple-smoothed EMA \u2014 with signal.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# TRIX(30, 9) on daily TSLA closes.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\ntrix = obb.technical.trix(data=data, length=30, signal=9)\nobb.technical.trix(length=5, signal=3, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Target column to apply TRIX to.", + "default": "close", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Triple-EMA window.", + "default": 30, + "optional": true + }, + { + "name": "signal", + "type": "int", + "description": "Signal line EMA length.", + "default": 9, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/ultimate_oscillator": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Larry Williams' Ultimate Oscillator across three timeframes.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Ultimate Oscillator on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nuo = obb.technical.ultimate_oscillator(data=data)\nobb.technical.ultimate_oscillator(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "fast", + "type": "int", + "description": "Short-period lookback.", + "default": 7, + "optional": true + }, + { + "name": "medium", + "type": "int", + "description": "Medium-period lookback.", + "default": 14, + "optional": true + }, + { + "name": "slow", + "type": "int", + "description": "Long-period lookback.", + "default": 28, + "optional": true + }, + { + "name": "fast_weight", + "type": "float", + "description": "Weight applied to the fast period.", + "default": 4.0, + "optional": true + }, + { + "name": "medium_weight", + "type": "float", + "description": "Weight applied to the medium period.", + "default": 2.0, + "optional": true + }, + { + "name": "slow_weight", + "type": "float", + "description": "Weight applied to the slow period.", + "default": 1.0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/awesome_oscillator": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Bill Williams' Awesome Oscillator as a momentum histogram.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Awesome Oscillator on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nao = obb.technical.awesome_oscillator(data=data)\nobb.technical.awesome_oscillator(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series \u2014 uses median of high/low.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "fast", + "type": "int", + "description": "Short SMA window on median price.", + "default": 5, + "optional": true + }, + { + "name": "slow", + "type": "int", + "description": "Long SMA window on median price.", + "default": 34, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/macd": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Moving Average Convergence Divergence (MACD) oscillator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# MACD(12,26,9) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nmacd = obb.technical.macd(data=data, fast=12, slow=26, signal=9)\n# MACD with short windows for mock data.\nobb.technical.macd(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', fast=2, slow=3, signal=1)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column to compute MACD on.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "fast", + "type": "int", + "description": "Fast EMA window.", + "default": 12, + "optional": true + }, + { + "name": "slow", + "type": "int", + "description": "Slow EMA window.", + "default": 26, + "optional": true + }, + { + "name": "signal", + "type": "int", + "description": "Signal-line EMA window.", + "default": 9, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/adx": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Wilder's Average Directional Index (ADX), a trend-strength gauge.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# ADX(14) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nadx = obb.technical.adx(data=data, length=14)\nobb.technical.adx(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "ADX lookback window.", + "default": 14, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "Output magnification factor.", + "default": 100.0, + "optional": true + }, + { + "name": "drift", + "type": "int", + "description": "Difference period for directional movement.", + "default": 1, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/di": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Directional Indicators (+DI, -DI) and raw DX from Wilder's system.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# +DI / -DI / DX(14) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\ndi = obb.technical.di(data=data, length=14)\nobb.technical.di(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window for +DI / -DI.", + "default": 14, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "Output magnification factor.", + "default": 100.0, + "optional": true + }, + { + "name": "drift", + "type": "int", + "description": "Difference period for directional movement.", + "default": 1, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/aroon": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Aroon Up, Aroon Down, and Aroon Oscillator series.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Aroon(25) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\naroon = obb.technical.aroon(data=data, length=25)\nobb.technical.aroon(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Aroon lookback window.", + "default": 25, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "Output magnification factor.", + "default": 100.0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/choppiness": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Choppiness Index, a trending-vs-sideways regime classifier.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Choppiness(14) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nchop = obb.technical.choppiness(data=data, length=14)\nobb.technical.choppiness(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Choppiness lookback window.", + "default": 14, + "optional": true + }, + { + "name": "atr_length", + "type": "int", + "description": "ATR window used inside choppiness.", + "default": 1, + "optional": true + }, + { + "name": "scalar", + "type": "float", + "description": "Output magnification factor.", + "default": 100.0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/obv": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate On-Balance Volume (OBV), a cumulative volume-flow indicator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# OBV on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nobv = obb.technical.obv(data=data)\nobb.technical.obv(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLCV price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Periods to offset the result.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/ad": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Accumulation/Distribution line, a volume-flow indicator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Accumulation/Distribution line on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nad = obb.technical.ad(data=data)\nobb.technical.ad(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLCV price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Periods to offset the result.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/adosc": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Chaikin Accumulation/Distribution Oscillator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Chaikin Oscillator on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nadosc = obb.technical.adosc(data=data, fast=3, slow=10)\nobb.technical.adosc(fast=2, slow=4, data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLCV price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "fast", + "type": "int", + "description": "Fast EMA window.", + "default": 3, + "optional": true + }, + { + "name": "slow", + "type": "int", + "description": "Slow EMA window.", + "default": 10, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Periods to offset the result.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/vwap": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Volume-Weighted Average Price (VWAP), anchored at a chosen boundary.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Daily-anchored VWAP on intraday TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nvwap = obb.technical.vwap(data=data, anchor='D')\nobb.technical.vwap(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLCV price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "anchor", + "type": "str", + "description": "Resample anchor \u2014 pandas offset alias such as ``D``, ``W``, ``ME``. Determines the VWAP reset boundary.", + "default": "D", + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Periods to offset the result.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/realized_volatility": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate annualised rolling realised volatility under a chosen estimator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Yang-Zhang realised volatility on daily SPY.\ndata = obb.equity.price.historical(symbol='SPY', start_date='2022-01-01', provider='yfinance').results\nrv = obb.technical.realized_volatility(data=data, model='yang_zhang', window=30)\nobb.technical.realized_volatility(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', model='parkinson')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLC(V) price series.", + "default": null, + "optional": false + }, + { + "name": "model", + "type": "Literal['std', 'parkinson', 'garman_klass', 'hodges_tompkins', 'rogers_satchell', 'yang_zhang']", + "description": "Volatility estimator. ``yang_zhang`` is the lowest-error blend; ``parkinson`` and ``rogers_satchell`` are range-based and drift-invariant; ``hodges_tompkins`` is bias-corrected close-to-close.", + "default": "yang_zhang", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "window", + "type": "int", + "description": "Rolling window length in bars.", + "default": 30, + "optional": true + }, + { + "name": "trading_periods", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Annualisation factor. ``None`` resolves to 365 when ``is_crypto`` is true, otherwise 252.", + "default": null, + "optional": true + }, + { + "name": "is_crypto", + "type": "bool", + "description": "When true and ``trading_periods`` is unset, annualise over 365 instead of 252.", + "default": false, + "optional": true + }, + { + "name": "clean", + "type": "bool", + "description": "Drop the leading warm-up rows where the rolling window is incomplete.", + "default": true, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/realized_volatility_compare": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute realised volatility under every requested estimator, side by side.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.realized_volatility_compare(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLC price series \u2014 every column required.", + "default": null, + "optional": false + }, + { + "name": "models", + "type": "list[Literal['std', 'parkinson', 'garman_klass', 'hodges_tompkins', 'rogers_satchell', 'yang_zhang']]", + "description": "Estimators to compute. Defaults to all six.", + "default": [ + "std", + "parkinson", + "garman_klass", + "hodges_tompkins", + "rogers_satchell", + "yang_zhang" + ], + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "window", + "type": "int", + "description": "Rolling window length in bars, by default 30.", + "default": 30, + "optional": true + }, + { + "name": "trading_periods", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Annualisation factor. When unset, resolves to 365 if ``is_crypto`` is ``True``, otherwise 252.", + "default": null, + "optional": true + }, + { + "name": "is_crypto", + "type": "bool", + "description": "When ``True`` and ``trading_periods`` is unset, annualise over 365 instead of 252, by default ``False``.", + "default": false, + "optional": true + }, + { + "name": "clean", + "type": "bool", + "description": "Drop rows where ANY requested model has not yet warmed up.", + "default": true, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/cones": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Build a volatility-cone snapshot summarising realised volatility by window.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Get volatility cones for the past two years of SPY.\ndata = obb.equity.price.historical(symbol='SPY', start_date='2022-01-01', provider='yfinance').results\ncones = obb.technical.cones(data=data, model='yang_zhang')\nobb.technical.cones(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "lower_q", + "type": "float", + "description": "Lower quantile for the cone band (0\u20131, exclusive of 1).", + "default": 0.25, + "optional": true + }, + { + "name": "upper_q", + "type": "float", + "description": "Upper quantile for the cone band (0\u20131, exclusive of 1).", + "default": 0.75, + "optional": true + }, + { + "name": "model", + "type": "Literal['std', 'parkinson', 'garman_klass', 'hodges_tompkins', 'rogers_satchell', 'yang_zhang']", + "description": "Estimator applied to each rolling window, by default ``\"std\"``.", + "default": "std", + "optional": true + }, + { + "name": "is_crypto", + "type": "bool", + "description": "When ``True`` and ``trading_periods`` is unset, annualise over 365 instead of 252, by default ``False``.", + "default": false, + "optional": true + }, + { + "name": "trading_periods", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Annualisation factor. When unset, resolves to 365 if ``is_crypto`` is ``True``, otherwise 252.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/atr": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate the Average True Range (ATR), Wilder's volatility measure.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# ATR(14) on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\natr = obb.technical.atr(data=data, length=14)\nobb.technical.atr(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', length=14)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "ATR lookback window.", + "default": 14, + "optional": true + }, + { + "name": "mamode", + "type": "Literal['sma', 'ema', 'wma', 'rma']", + "description": "Smoothing applied to true-range. ``rma`` is the Wilder default.", + "default": "rma", + "optional": true + }, + { + "name": "drift", + "type": "int", + "description": "Difference period for true-range.", + "default": 1, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Shift the output series by this many bars, by default 0.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/fib": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute Fibonacci retracement levels between a swing high and swing low.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Fibonacci retracement on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\nfib = obb.technical.fib(data=data, period=120)\nobb.technical.fib(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC(V) price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "close_column", + "type": "Literal['close', 'adj_close']", + "description": "Column used for high/low detection.", + "default": "close", + "optional": true + }, + { + "name": "period", + "type": "int", + "description": "Lookback in bars for retracement.", + "default": 120, + "optional": true + }, + { + "name": "start_date", + "type": "str", + "description": "Explicit retracement start date.", + "default": null, + "optional": true + }, + { + "name": "end_date", + "type": "str", + "description": "Explicit retracement end date.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/demark": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute Tom DeMark sequential up- and down-count exhaustion indicators.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# DeMark sequential on daily TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\ndemark = obb.technical.demark(data=data)\nobb.technical.demark(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to evaluate.", + "default": "close", + "optional": true + }, + { + "name": "show_all", + "type": "bool", + "description": "When True show counts 1-13; False shows only 6-9.", + "default": true, + "optional": true + }, + { + "name": "asint", + "type": "bool", + "description": "Cast counts to integers and fill NaN with 0.", + "default": true, + "optional": true + }, + { + "name": "offset", + "type": "int", + "description": "Periods to offset the result.", + "default": 0, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/pivot_points": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute pivot-point support and resistance bands under multiple methods.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Classic daily pivot points on TSLA.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='fmp').results\npivots = obb.technical.pivot_points(data=data, method='classic', anchor='day')\nobb.technical.pivot_points(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``, by default ``\"date\"``.", + "default": "date", + "optional": true + }, + { + "name": "method", + "type": "Literal['classic', 'fibonacci', 'woodie', 'camarilla', 'demark']", + "description": "Pivot-point family. ``camarilla`` is the only one that fills r4/s4.", + "default": "classic", + "optional": true + }, + { + "name": "anchor", + "type": "Literal['day', 'week', 'month']", + "description": "Resample anchor for the pivot calculation.", + "default": "day", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/clenow": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate Clenow Volatility-Adjusted Momentum on log prices.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Clenow momentum on TSLA over the trailing 90 days.\ndata = obb.equity.price.historical(symbol='TSLA', start_date='2023-01-01', provider='yfinance').results\nout = obb.technical.clenow(data=data, period=90)\nobb.technical.clenow(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', period=2)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to regress.", + "default": "close", + "optional": true + }, + { + "name": "period", + "type": "int", + "description": "Lookback window for the log-price regression.", + "default": 90, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/drawdown": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute cumulative return, running peak, drawdown, and underwater duration.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.drawdown(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to evaluate drawdowns on.", + "default": "close", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/returns_stats": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Calculate distributional and risk-adjusted statistics on simple returns.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.returns_stats(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to evaluate returns on.", + "default": "close", + "optional": true + }, + { + "name": "frequency", + "type": "Literal['daily', 'weekly', 'monthly', 'quarterly', 'annual']", + "description": "Annualisation frequency for Sharpe/Sortino/Calmar/risk-free.", + "default": "daily", + "optional": true + }, + { + "name": "risk_free_rate", + "type": "float", + "description": "Annualised risk-free rate used for Sharpe and Sortino.", + "default": 0.0, + "optional": true + }, + { + "name": "window", + "type": "Annotated[int, Gt(gt=0)]", + "description": "Rolling window. ``None`` returns a single summary row.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/stationarity": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Test a series for stationarity using ADF, KPSS, or both with a combined verdict.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.stationarity(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to test for stationarity.", + "default": "close", + "optional": true + }, + { + "name": "test", + "type": "Literal['adf', 'kpss', 'both']", + "description": "Which test(s) to run.", + "default": "both", + "optional": true + }, + { + "name": "regression", + "type": "Literal['c', 'ct', 'ctt', 'n']", + "description": "Regression component: constant, trend, quadratic-trend, or none.", + "default": "c", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/hurst": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Estimate the Hurst exponent via Rescaled-Range analysis or DFA.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.hurst(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to evaluate.", + "default": "close", + "optional": true + }, + { + "name": "method", + "type": "Literal['rs', 'dfa']", + "description": "``rs`` = Rescaled Range; ``dfa`` = Detrended Fluctuation.", + "default": "rs", + "optional": true + }, + { + "name": "min_lag", + "type": "int", + "description": "Smallest window length.", + "default": 2, + "optional": true + }, + { + "name": "max_lag", + "type": "int", + "description": "Largest window length (exclusive).", + "default": 100, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/autocorrelation": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute autocorrelation (ACF) and partial autocorrelation (PACF) with bands.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.autocorrelation(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to evaluate.", + "default": "close", + "optional": true + }, + { + "name": "use_returns", + "type": "bool", + "description": "Difference and percent-change before computing.", + "default": true, + "optional": true + }, + { + "name": "max_lag", + "type": "int", + "description": "Largest lag to compute.", + "default": 40, + "optional": true + }, + { + "name": "method", + "type": "Literal['acf', 'pacf', 'both']", + "description": "Which functions to compute.", + "default": "both", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/relative_rotation": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute the Relative Rotation Graph (RRG) for a basket against a benchmark.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Relative Strength Ratio and Momentum for a basket of symbols against a benchmark.\ndata = obb.equity.price.historical(symbol='AAPL,MSFT,GOOGL,META,AMZN,TSLA,SPY', start_date='2022-01-01', provider='yfinance').results\nrr = obb.technical.relative_rotation(data=data, benchmark='SPY')\nobb.technical.relative_rotation(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', benchmark='SPY')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "The data to be used for the relative rotation calculations. This should be the multi-symbol output from the 'equity.price.historical' endpoint, or similar, at a daily interval. Or a pivot table with the 'date' column as the index, the symbols as the columns, and the 'study' as the values. It is recommended to use the 'equity.price.historical' endpoint to get the data, and feed the results as-is.", + "default": null, + "optional": false + }, + { + "name": "benchmark", + "type": "str", + "description": "The symbol to be used as the benchmark.", + "default": null, + "optional": false + }, + { + "name": "study", + "type": "Literal['price', 'volume', 'volatility']", + "description": "The data point for the calculations. If 'price', the closing price will be used. If 'volatility', the standard deviation of the closing price will be used. If 'data' is supplied as a pivot table, the 'study' will assume the values are the closing price and 'volume' will be ignored.", + "default": "price", + "optional": true + }, + { + "name": "long_period", + "type": "int", + "description": "The length of the long period for momentum calculation, by default is 252. Adjust this value, to 365, when supplying assets such as crypto.", + "default": 252, + "optional": true + }, + { + "name": "short_period", + "type": "int", + "description": "The length of the short period for momentum calculation, by default is 21. Adjust this value, to 30, when supplying assets such as crypto.", + "default": 21, + "optional": true + }, + { + "name": "window", + "type": "int", + "description": "The length of window for the standard deviation calculation, by default is 21. Adjust this value, to 30, when supplying assets such as crypto.", + "default": 21, + "optional": true + }, + { + "name": "trading_periods", + "type": "int", + "description": "The number of trading periods per year, for the standard deviation calculation, by default is 252. Adjust this value, to 365, when supplying assets such as crypto.", + "default": 252, + "optional": true + }, + { + "name": "chart_params", + "type": "dict[str, Any]", + "description": "Additional parameters to pass when `chart=True` and the `openbb-charting` extension is installed. Parameters can be passed again to redraw the chart using the charting.to_chart() method of the response.\n\n ChartParams\n -----------\n date: Optional[str]\n A target end date within the data, by default is the last date in the data.\n show_tails: bool\n Show the tails on the chart, by default is True.\n tail_periods: Optional[int]\n Number of periods to show in the tails, by default is 16.\n tail_interval: Literal['day', 'week', 'month']\n Interval to show the tails, by default is 'week'.\n title: Optional[str]\n Title of the chart.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/signals/crossovers": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Detect bullish and bearish moving-average crossover events.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# 20/50 SMA crossover events on daily SPY.\ndata = obb.equity.price.historical(symbol='SPY', start_date='2022-01-01', provider='yfinance').results\nevents = obb.technical.crossovers(data=data, fast_length=20, slow_length=50)\nobb.technical.signals.crossovers(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input price series.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Column on which to compute moving averages.", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "fast_length", + "type": "int", + "description": "Lookback for the fast moving average.", + "default": 20, + "optional": true + }, + { + "name": "slow_length", + "type": "int", + "description": "Lookback for the slow moving average.", + "default": 50, + "optional": true + }, + { + "name": "mamode", + "type": "Literal['sma', 'ema', 'wma', 'hma', 'zlma']", + "description": "Moving-average flavour. ``sma`` is the default; ``ema``, ``wma``, ``hma`` and ``zlma`` are also supported.", + "default": "sma", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/signals/oscillator_signals": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Label every bar with its oscillator regime and emit crossing events.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.signals.oscillator_signals(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', indicator='rsi', length=14)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLC(V) price series.", + "default": null, + "optional": false + }, + { + "name": "indicator", + "type": "Literal['rsi', 'mfi', 'stoch', 'williams_r', 'cci']", + "description": "Which oscillator to evaluate against its threshold bands.", + "default": null, + "optional": false + }, + { + "name": "target", + "type": "str", + "description": "Price column used for oscillators that take a single series (rsi, cci).", + "default": "close", + "optional": true + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window for the oscillator.", + "default": 14, + "optional": true + }, + { + "name": "overbought_threshold", + "type": "float", + "description": "Upper band. ``None`` resolves to the indicator default (rsi 70, mfi 80, stoch 80, williams_r -20, cci 100).", + "default": null, + "optional": true + }, + { + "name": "oversold_threshold", + "type": "float", + "description": "Lower band. ``None`` resolves to the indicator default (rsi 30, mfi 20, stoch 20, williams_r -80, cci -100).", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/signals/divergences": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Detect regular and hidden divergences between price swings and an oscillator.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# RSI divergences on daily SPY.\ndata = obb.equity.price.historical(symbol='SPY', start_date='2022-01-01', provider='yfinance').results\nevents = obb.technical.divergences(data=data, indicator='rsi')\nobb.technical.signals.divergences(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', indicator='rsi')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "indicator", + "type": "Literal['rsi', 'macd', 'stoch', 'cci']", + "description": "Oscillator paired with price for divergence detection.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "indicator_length", + "type": "int", + "description": "Lookback length used inside the oscillator.", + "default": 14, + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Price column used for swings.", + "default": "close", + "optional": true + }, + { + "name": "lookback", + "type": "int", + "description": "Number of recent bars in which to search for swing pairs.", + "default": 60, + "optional": true + }, + { + "name": "min_swing_distance", + "type": "int", + "description": "Minimum number of bars separating two swing points. Also doubles as the half-window for local-extreme detection.", + "default": 5, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/signals/breakouts": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Detect channel breakouts where price closes beyond a rolling envelope.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\nobb.technical.signals.breakouts(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]', method='donchian', length=20)\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "method", + "type": "Literal['donchian', 'bollinger']", + "description": "Channel definition: Donchian (rolling high/low) or Bollinger (mean +/- ``band_std`` * stdev).", + "default": "donchian", + "optional": true + }, + { + "name": "length", + "type": "int", + "description": "Lookback window for the channel.", + "default": 20, + "optional": true + }, + { + "name": "band_std", + "type": "Annotated[float, Gt(gt=0)]", + "description": "Bollinger band multiplier. Ignored for ``donchian``. ``None`` resolves to 2.0 when ``method='bollinger'``.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/signals/candlestick_patterns": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Scan OHLC bars for classical candlestick patterns and emit one row per match.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Scan all supported patterns on daily SPY.\ndata = obb.equity.price.historical(symbol='SPY', start_date='2022-01-01', provider='yfinance').results\npatterns = obb.technical.candlestick_patterns(data=data)\nobb.technical.signals.candlestick_patterns(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "patterns", + "type": "list[str]", + "description": "Subset of patterns to scan for. ``None`` runs every entry in ``SUPPORTED_PATTERNS``.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/signals/regime": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Label each bar with a market regime from ADX and Choppiness Index pairs.", + "examples": "Examples\n--------\n\n```python\nfrom openbb import obb\n# Daily regime labelling on SPY.\ndata = obb.equity.price.historical(symbol='SPY', start_date='2022-01-01', provider='yfinance').results\nregime = obb.technical.regime(data=data)\nobb.technical.signals.regime(data='[{'date': '2023-01-02', 'open': 110.0, 'high': 120.0, 'low': 100.0, 'close': 115.0, 'volume': 10000.0}, {'date': '2023-01-03', 'open': 165.0, 'high': 180.0, 'low': 150.0, 'close': 172.5, 'volume': 15000.0}, {'date': '2023-01-04', 'open': 146.67, 'high': 160.0, 'low': 133.33, 'close': 153.33, 'volume': 13333.33}, {'date': '2023-01-05', 'open': 137.5, 'high': 150.0, 'low': 125.0, 'close': 143.75, 'volume': 12500.0}, {'date': '2023-01-06', 'open': 132.0, 'high': 144.0, 'low': 120.0, 'close': 138.0, 'volume': 12000.0}]')\n```\n\n", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "OHLC price series.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "adx_length", + "type": "int", + "description": "ADX lookback window.", + "default": 14, + "optional": true + }, + { + "name": "choppiness_length", + "type": "int", + "description": "Choppiness Index lookback window.", + "default": 14, + "optional": true + }, + { + "name": "adx_trend_threshold", + "type": "float", + "description": "ADX above this threshold marks a trending bar. Half this value is the cutoff for a weak trend.", + "default": 25.0, + "optional": true + }, + { + "name": "choppiness_range_threshold", + "type": "float", + "description": "Choppiness above this threshold marks a ranging bar. The default 61.8 is a common Fibonacci-derived cutoff.", + "default": 61.8, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/multi": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Run multiple indicators on a single price series and merge them by date.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Input OHLC(V) series.", + "default": null, + "optional": false + }, + { + "name": "indicators", + "type": "list[MultiIndicatorRequest]", + "description": "Indicators to compute, in arbitrary order.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Target column forwarded to indicators that accept one.", + "default": "close", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/correlation": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Compute rolling pairwise correlation of returns across symbols.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Long-format multi-symbol price data with a ``symbol`` column.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to compute correlation on.", + "default": "close", + "optional": true + }, + { + "name": "window", + "type": "int", + "description": "Rolling window length in bars.", + "default": 60, + "optional": true + }, + { + "name": "method", + "type": "Literal['pearson', 'spearman', 'kendall']", + "description": "Correlation method passed through to ``pandas.DataFrame.corr``.", + "default": "pearson", + "optional": true + }, + { + "name": "pairs", + "type": "list[tuple[str, str]]", + "description": "Optional explicit list of ``(symbol_a, symbol_b)`` pairs. Defaults to all unique pairs.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/correlation_matrix": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Build a point-in-time correlation matrix across every symbol in the input.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Long-format multi-symbol price data with a ``symbol`` column.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Column to correlate.", + "default": "close", + "optional": true + }, + { + "name": "window", + "type": "Annotated[int, Gt(gt=0)]", + "description": "If set, restrict correlation to the trailing ``window`` rows before ``as_of_date``. ``None`` uses every available row.", + "default": null, + "optional": true + }, + { + "name": "method", + "type": "Literal['pearson', 'spearman', 'kendall']", + "description": "Correlation method, by default ``\"pearson\"``.", + "default": "pearson", + "optional": true + }, + { + "name": "as_of_date", + "type": "date | datetime | str", + "description": "Anchor date for the snapshot. ``None`` uses the last available row in the input.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/screen": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Filter a multi-symbol basket by indicator-driven conditions.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "data", + "type": "Data | DataFrame | Series | dict | list | list['DataFrame'] | list['Series'] | list[Data] | ndarray", + "description": "Long-format multi-symbol data with a ``symbol`` column.", + "default": null, + "optional": false + }, + { + "name": "conditions", + "type": "list[ScreenCondition]", + "description": "Predicates to evaluate against each symbol's indicators.", + "default": null, + "optional": false + }, + { + "name": "index", + "type": "str", + "description": "Index column name in ``data``.", + "default": "date", + "optional": true + }, + { + "name": "target", + "type": "str", + "description": "Default target column.", + "default": "close", + "optional": true + }, + { + "name": "combine", + "type": "Literal['and', 'or']", + "description": "``and`` returns symbols matching every condition; ``or`` returns symbols matching at least one.", + "default": "and", + "optional": true + }, + { + "name": "as_of_date", + "type": "date | datetime | str", + "description": "Anchor date. Defaults to the latest date per symbol when unset.", + "default": null, + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + }, + "/technical/indicators": { + "deprecated": { + "flag": null, + "message": null + }, + "description": "Return the catalogue of registered technical indicators.", + "examples": "", + "parameters": { + "standard": [ + { + "name": "category", + "type": "None", + "description": "Filter to a single family, or ``all`` to return everything.", + "default": "all", + "optional": true + } + ] + }, + "returns": { + "OBBject": [ + { + "name": "results", + "type": "Any", + "description": "Serializable results." + }, + { + "name": "provider", + "type": "str", + "description": "Provider name." + }, + { + "name": "warnings", + "type": "Optional[list[Warning_]]", + "description": "list of warnings." + }, + { + "name": "chart", + "type": "Optional[Chart]", + "description": "Chart object." + }, + { + "name": "extra", + "type": "dict[str, Any]", + "description": "Extra info." + } + ] + }, + "data": {}, + "model": "", + "openapi_extra": { + "model": "" + } + } + }, + "routers": { + "/equity": { + "description": "Equity market data." + }, + "/technical": { + "description": "Indicator catalogue." + }, + "/technical/signals": { + "description": "Market-regime classification." + } + } } \ No newline at end of file diff --git a/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py b/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py index e0202cef7ab..9c297979c2f 100644 --- a/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py +++ b/openbb_platform/extensions/derivatives/openbb_derivatives/derivatives_views.py @@ -62,14 +62,19 @@ class DerivativesViews: -------- ```python from openbb import obb - data = obb.derivatives.futures.curve(symbol="vx", provider="cboe", date=["2020-03-31", "2024-06-28"], chart=True) + + data = obb.derivatives.futures.curve( + symbol="vx", provider="cboe", date=["2020-03-31", "2024-06-28"], chart=True + ) data.show() ``` Redraw the chart, from the same data, with a custom colorway and title: ```python - data.charting.to_chart(colors=["green", "red"], title="VIX Futures Curve - 2020 vs. 2024") + data.charting.to_chart( + colors=["green", "red"], title="VIX Futures Curve - 2020 vs. 2024" + ) ``` """ from openbb_core.app.model.abstract.error import OpenBBError diff --git a/openbb_platform/extensions/mcp_server/README.md b/openbb_platform/extensions/mcp_server/README.md index 8748f87f88b..c3f77a6d644 100644 --- a/openbb_platform/extensions/mcp_server/README.md +++ b/openbb_platform/extensions/mcp_server/README.md @@ -2,11 +2,10 @@ This extension enables LLM agents to interact with OpenBB Platform's REST API endpoints through the MCP protocol. -The server provides discovery tools that allow agents to explore available categories and dynamically activate only the tools they need. +With tool discovery enabled, the server hides the full tool catalog behind a few discovery tools, so agents search for and call only the tools they need. This keeps the initial tool list small โ€” preventing token bloat โ€” while still giving agents access to the full platform on demand. -Tool visibility changes are **per-session**: each connected client has its own active toolset. -Multiple agents can connect simultaneously and independently activate different tools without interfering with each other. +Discovery is stateless: every client sees the same tool list, and hidden tools are called through `call_tool` or directly by name, so multiple agents can share one server. ## Installation & Usage @@ -14,6 +13,9 @@ Multiple agents can connect simultaneously and independently activate different pip install openbb-mcp-server ``` +The server exposes the routes of the installed OpenBB extensions, so install the data extensions too, either all of them (`pip install openbb`) or the ones you need (`pip install openbb-equity openbb-yfinance`). +Install the `cli` extra (`pip install "openbb-mcp-server[cli]"`) for the `openbb-cli` dispatcher tools. + Start the OpenBB MCP server with default settings: ```bash @@ -47,12 +49,21 @@ Enter `openbb-mcp --help` to see the docstring from the command line. If set, the app is treated as a factory function that will be called to create the FastAPI app instance. +--spec + Path to an `openbb-cli` generated `.spec` file. Serves a proxy app whose + routes forward to the spec's `base_url`. Mutually exclusive with --app. + +--config-file + Path to a TOML config file, the highest-priority layer of the + `openbb.toml` cascade. Also read from $OPENBB_MCP_CONFIG, + $OPENBB_API_CONFIG, or $OPENBB_CONFIG. + --host The host to bind the server to. Defaults to '127.0.0.1'. This is a uvicorn argument. --port - The port to bind the server to. Defaults to 8000. + The port to bind the server to. Defaults to 8001. This is a uvicorn argument. --transport @@ -60,15 +71,16 @@ Enter `openbb-mcp --help` to see the docstring from the command line. Defaults to 'streamable-http'. --allowed-categories - A comma-separated list of tool categories to allow. - If not provided, all categories are allowed. + A comma-separated list of tool categories to serve. Tools in other + categories are not listed, searchable, or callable. + If not provided, all categories are served. --default-categories - A comma-separated list of tool categories to be enabled by default. - Defaults to 'all'. + A comma-separated list of tool categories to list when tool discovery is off. + Tools in other categories are not served. Defaults to 'all'. --tool-discovery - If set, tool discovery will be enabled. + If set, the tools are hidden behind available_categories, available_tools, search_tools, and call_tool. --system-prompt Path to a TXT file with the system prompt. @@ -77,15 +89,22 @@ Enter `openbb-mcp --help` to see the docstring from the command line. Path to a JSON file with a list of server prompts. ``` -#### All other arguments will be passed to `uvicorn.run` +#### Other arguments + +Every other `--key value` is routed by name: + +- An `MCPSettings` field sets that setting, e.g. `--enable-cli-tools false` or `--server-auth '["user", "pass"]'`. +- `--httpx-