OpenBB-finance/OpenBB · warning · OpenBBError
No strategies found for the given parameters.
Error message
No strategies found for the given parameters.
What it means
Raised by OptionsChainsData.strategies() after it builds and concatenates the straddle, strangle, synthetic long/short, call spread and put spread DataFrames for the requested expirations - if the concatenated result is empty, none of the strategy builders produced a single row for the given parameters. It is an aggregate 'nothing matched' error, meaning the input filters (or data quality) excluded every strategy.
Source
Thrown at openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py:1621
[_synthetic_shorts, _synthetic_short]
)
if not _synthetic_shorts.empty:
synthetic_shorts_df = concat([synthetic_shorts_df, _synthetic_shorts])
strategies = concat(
[
straddles,
strangles,
synthetic_longs_df,
synthetic_shorts_df,
call_spreads,
put_spreads,
]
)
if strategies.empty:
raise OpenBBError("No strategies found for the given parameters.")
strategies = strategies.reset_index().rename(columns={"index": "Strategy"})
strategies = (
strategies.set_index(["Expiration", "DTE"])
.sort_index()
.drop(columns=["Symbol"])
)
return strategies.reset_index()
def skew(
self,
date: str | int | None = None,
moneyness: float | None = None,
underlying_price: float | None = None,
) -> "DataFrame":
"""Return skewness of the options, either vertical or horizontal.
The vertical skew for each expiry and option is calculated by subtracting the IV of the ATM call or put.View on GitHub (pinned to 3e071fcc2c)
Solutions
- Relax the filters: widen the moneyness range, extend dte_min/dte_max, disable oi/volume filters.
- Confirm the underlying chain is usable first: chains.dataframe has both calls and puts with non-empty bid/ask for several expirations.
- Retry during market hours or with a provider that returns fuller chains.
- If you need partial results, call the individual builders (straddle(), strangle(), ...) and skip failing ones.
Example fix
# before res = chains.strategies(dte_min=25, dte_max=35, min_moneyness=98, max_moneyness=102, oi=True) # after res = chains.strategies(dte_min=25, dte_max=35) # relax moneyness and oi filters
Defensive patterns
Strategy: try-catch
Validate before calling
df = chains.dataframe
calls = df[df.option_type == 'call']
puts = df[df.option_type == 'put']
if calls.empty or puts.empty or not (df.get('bid') is not None or df.get('ask') is not None or 'last_price' in df.columns):
raise ValueError('chains cannot support strategies()') Try / catch
try:
res = chains.strategies(**params)
except OpenBBError as e:
if 'No strategies found' in str(e):
params.pop('min_moneyness', None); params.pop('max_moneyness', None)
params.pop('oi', None); params.pop('volume', None)
res = chains.strategies(**params) Prevention
- Start with unfiltered strategies() and narrow filters progressively.
- Treat this as an empty-result signal, not a crash - degrade filters or skip the symbol.
- Screen chains for two-sided quotes before running strategy scans.
When it happens
Trigger: Calling chains.strategies(...) where every per-expiration strategy build returned empty - e.g. moneyness/strike filters outside the listed range, no usable bid/ask premiums anywhere, or an empty/one-sided chain loaded from the provider.
Common situations: Passing a min_moneyness/max_moneyness or dte window that excludes all rows; loading a symbol with an expired or nearly empty chain; weekend/holiday snapshots where volume/oi filters (volume=True, oi=True) remove everything.
Related errors
- [Empty] -> {e}
- Error: stat must be one of ['open_interest', 'volume', 'dex'
- Error: column '{column}' not found in data
- Error: No premium data found for the selected strikes. Call:
- Error: No premium data found for the selected strikes. Call:
AI-assisted analysis of OpenBB-finance/OpenBB@3e071fcc2c (2026-08-14).
Data as JSON: /api/errors/3bb296680fb590e2.
Report an issue: GitHub.