{"record":{"id":"3bb296680fb590e2","repo":"OpenBB-finance/OpenBB","slug":"no-strategies-found-for-the-given-parameters","errorCode":null,"errorMessage":"No strategies found for the given parameters.","messagePattern":"No strategies found for the given parameters\\.","errorType":"exception","errorClass":"OpenBBError","httpStatus":null,"severity":"warning","filePath":"openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py","lineNumber":1621,"sourceCode":"                            [_synthetic_shorts, _synthetic_short]\n                        )\n\n            if not _synthetic_shorts.empty:\n                synthetic_shorts_df = concat([synthetic_shorts_df, _synthetic_shorts])\n\n        strategies = concat(\n            [\n                straddles,\n                strangles,\n                synthetic_longs_df,\n                synthetic_shorts_df,\n                call_spreads,\n                put_spreads,\n            ]\n        )\n\n        if strategies.empty:\n            raise OpenBBError(\"No strategies found for the given parameters.\")\n\n        strategies = strategies.reset_index().rename(columns={\"index\": \"Strategy\"})\n        strategies = (\n            strategies.set_index([\"Expiration\", \"DTE\"])\n            .sort_index()\n            .drop(columns=[\"Symbol\"])\n        )\n        return strategies.reset_index()\n\n    def skew(\n        self,\n        date: str | int | None = None,\n        moneyness: float | None = None,\n        underlying_price: float | None = None,\n    ) -> \"DataFrame\":\n        \"\"\"Return skewness of the options, either vertical or horizontal.\n\n        The vertical skew for each expiry and option is calculated by subtracting the IV of the ATM call or put.","sourceCodeStart":1603,"sourceCodeEnd":1639,"githubUrl":"https://github.com/OpenBB-finance/OpenBB/blob/3e071fcc2cd9f891cac6040ae60296dba76dab46/openbb_platform/core/openbb_core/provider/utils/options_chains_properties.py#L1603-L1639","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"# before\nres = chains.strategies(dte_min=25, dte_max=35, min_moneyness=98, max_moneyness=102, oi=True)\n\n# after\nres = chains.strategies(dte_min=25, dte_max=35)  # relax moneyness and oi filters","handlingStrategy":"try-catch","validationCode":"df = chains.dataframe\ncalls = df[df.option_type == 'call']\nputs = df[df.option_type == 'put']\nif 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):\n    raise ValueError('chains cannot support strategies()')","typeGuard":null,"tryCatchPattern":"try:\n    res = chains.strategies(**params)\nexcept OpenBBError as e:\n    if 'No strategies found' in str(e):\n        params.pop('min_moneyness', None); params.pop('max_moneyness', None)\n        params.pop('oi', None); params.pop('volume', None)\n        res = chains.strategies(**params)","preventionTips":["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."],"tags":["options","openbb","no-results","filter"],"backgroundTag":null,"analyzedSha":"3e071fcc2cd9f891cac6040ae60296dba76dab46","analyzedAt":"2026-08-14T23:40:48.960Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}