* 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 <>
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.