OpenBB-finance/OpenBB · error · ValueError
Please make sure that the columns 'High', 'Low', and 'Close
Error message
Please make sure that the columns 'High', 'Low', and 'Close' are in the dataframe.
What it means
check_columns in plotly_ta/ta_helpers.py:42 guards the minimum OHLC inputs for TA charting: it regex-searches str(data.columns) for High, Low, and a close variant (Adj Close / adj_close / Close). When the compound condition trips it raises ValueError(" Please make sure that the columns 'High', 'Low', and 'Close' are in the dataframe.") — the frame passed to the TA engine does not carry the columns the indicators expect. (Note the condition itself is fragile: re.findall returns a list, never None, so in practice it fires via the close_col clause downstream or when defaults high/low are requested on a frame without those columns.)
Source
Thrown at openbb_platform/obbject_extensions/charting/openbb_charting/core/plotly_ta/ta_helpers.py:42
Returns
-------
Optional[str]
The name of the close column, none if df is invalid
"""
# pylint: disable=import-outside-toplevel
import re
close_regex = r"(Adj\sClose|adj_close|Close)"
# pylint: disable=too-many-boolean-expressions
if (
(re.findall(r"High", str(data.columns), re.IGNORECASE) is None and high)
or (re.findall(r"Low", str(data.columns), re.IGNORECASE) is None and low)
or (close_col := re.findall(close_regex, str(data.columns), re.IGNORECASE))
is None
and close
):
raise ValueError(
" Please make sure that the columns 'High', 'Low', and 'Close' are in the dataframe."
)
close_col = [col for col in close_col if col in data.columns]
# giving priority to the standard close column
if "close" in close_col:
return "close"
return close_col[-1]
View on GitHub (pinned to 3e071fcc2c)
Solutions
- Provide a standard OHLC frame: columns named open, high, low, close (volume optional).
- Rename before charting: df.rename(columns={"high_price": "high", "close_price": "close"}).
- If your data is close-only, request only close-based indicators and pass high=False, low=False where the API allows it.
- Flatten MultiIndex columns to plain strings.
Example fix
# before
charting.to_chart(data=df_close_only, indicators={"atr": {}}) # ValueError: High/Low/Close
# after
df = df_close_only.rename(columns={"price": "close"})
charting.to_chart(data=df, indicators={"sma": {"length": 20}}) # close-only indicator Defensive patterns
Strategy: validation
Validate before calling
cols = {str(c).lower() for c in df.columns}
need = set()
if indicators_requires_ohlc(indicators):
need = {"high", "low", "close"}
missing = need - cols
if missing:
df = df.rename(columns={c: c.replace("_price", "") for c in df.columns}) Type guard
def ohlc_frame(df: pd.DataFrame) -> bool:
cols = {str(c).lower() for c in df.columns}
return {"high", "low"} <= cols and bool(cols & {"close", "adj close", "adj_close"}) Try / catch
try:
charting.to_chart(data=df, indicators=indicators)
except ValueError as e:
if "High" in str(e) and "Close" in str(e):
indicators = {k: v for k, v in indicators.items() if k in ("sma", "ema", "rsi")} # close-only
charting.to_chart(data=df, indicators=indicators)
else:
raise Prevention
- Feed charting standard OHLC frames from provider output, not hand-built tables.
- Check for high/low/close (case-insensitive) before requesting OHLC-based indicators.
- Remember the close matcher accepts 'Adj Close', 'adj_close', and 'Close' only.
When it happens
Trigger: Calling charting with TA indicators on a close-only or price-only DataFrame (no 'high'/'low'), or on a frame with renamed columns such as 'High Price'/'Adj_Close' variants the regexes miss.
Common situations: Index/economic series routed through charting with a default indicator set; provider data whose transform renamed OHLC columns; DataFrames with MultiIndex columns that stringify oddly.
Related errors
- No close column found in dataframe
- Please provide data with only one symbol and columns for OHL
- Error processing indicator {indicator.name}: {e}
- Unknown indicator: {indicator}
- pywry is not installed
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/09246303ffd3d423.
Report an issue: GitHub.