Files
OpenBB/openbb_platform/extensions/technical/docs/getting-started.md
Danglewood d3d33a219b [V5] openbb-technical: Refactor for V5 & Add More Quick Win Endpoints (#7502)
* refactor openbb-technical for v5

* forward refs

* linting

* no python 3.15 in test matrix

* reame

* ty

* move all params to body

---------

Co-authored-by: deeleeramone <>
2026-05-29 10:48:51 +03:00

2.8 KiB
Vendored

Getting Started

Install

pip install openbb-technical

The extension depends on openbb-core[pandas], pandas-ta-openbb, scikit-learn, scipy, and statsmodels — all installed transitively.

Three ways to call an endpoint

Every endpoint is exposed identically through the Python SDK, the REST API, and the CLI. Pick whichever fits your workflow.

1. Python

from openbb import obb

data = obb.equity.price.historical(
    symbol="SPY", start_date="2024-01-01", provider="yfinance"
).results

result = obb.technical.rsi(data=data, length=14)
print(result.results[0])         # first row of the RSI series
df = result.to_df()              # convert results to a DataFrame

2. REST API

Start the API server (defaults to http://localhost:8000):

openbb-api

POST to the endpoint. The data array is the request body; scalar args are query-string parameters:

curl -X POST 'http://localhost:8000/api/v1/technical/rsi?length=14' \
  -H 'Content-Type: application/json' \
  -d '[{"date":"2024-01-02","open":471.5,"high":473.7,"low":471.0,"close":472.6,"volume":78900},
       {"date":"2024-01-03","open":472.5,"high":473.1,"low":468.7,"close":468.8,"volume":111200},
       ...]'

Endpoints that take more than one body argument (screen, multi, correlation, relative_rotation, realized_volatility_compare, signals/candlestick_patterns) wrap the body as {"data": [...], "<other>": [...]}.

3. CLI

openbb -i
> /technical/rsi --data <path_or_json> --length 14

The CLI auto-generates an argparse interface from each endpoint's signature, so --help after any command lists every parameter with its type and default.

Working with returns

Every endpoint returns an OBBject. The interesting bits:

result = obb.technical.bbands(data=data, length=20)

result.results          # list[BbandsData] — one row per bar
result.to_df()          # pandas DataFrame keyed by date
result.to_dict()        # dict form
len(result.results)     # row count
result.results[-1]      # last row (most recent bar)

Discovering what's available

The indicators endpoint introspects the router and returns a structured catalog:

catalog = obb.technical.indicators(category="all").results
for entry in catalog.indicators:
    print(entry.name, entry.category, [p.name for p in entry.params])

Filter by category — overlay, oscillator, volatility, volume, trend, signal, structure, stats, multi, or all.

Next steps