HKUDS/Vibe-Trading · warning · SkipAlpha
{alpha_id}: panel missing required columns {missing}
Error message
{alpha_id}: panel missing required columns {missing} What it means
Registry.compute checks the panel against the alpha's declared columns_required metadata before running compute(). If any required column (e.g. 'open', 'volume', 'vwap') is absent from the panel dict, it raises SkipAlpha so the caller can skip this factor rather than crash inside pandas.
Source
Thrown at agent/src/factors/registry.py:334
"errors": [
{"alpha_id": e.alpha_id, "reason": e.reason} for e in self._load_errors
],
}
def compute(self, alpha_id: str, panel: dict[str, pd.DataFrame]) -> pd.DataFrame:
"""Lazy-import the alpha module and run its ``compute(panel)``.
Raises:
KeyError: alpha_id unknown.
SkipAlpha: required column / sector tag absent in panel.
RegistryError: import/compute failed or output failed sanity checks.
"""
alpha = self.get(alpha_id)
meta = alpha.meta
missing = [c for c in meta.get("columns_required", []) if c not in panel]
if missing:
raise SkipAlpha(f"{alpha_id}: panel missing required columns {missing}")
missing_extra = [c for c in meta.get("extras_required", []) if c not in panel]
if missing_extra:
raise SkipAlpha(f"{alpha_id}: panel missing extras {missing_extra}")
if meta.get("requires_sector") and "sector" not in panel:
raise SkipAlpha(f"{alpha_id}: panel missing sector tag")
try:
module = self._load_module(alpha)
except Exception as exc: # noqa: BLE001 — isolate import failure
raise RegistryError(f"{alpha_id}: import failed: {exc}") from exc
compute_fn = getattr(module, "compute", None)
if compute_fn is None:
raise RegistryError(f"{alpha_id}: module has no compute() function")
try:
result = compute_fn(panel)
except Exception as exc: # noqa: BLE001 — isolate compute failureView on GitHub (pinned to 80ffdda44c)
Solutions
- Add the missing column(s) to the panel before compute
- Pick alphas whose columns_required match your panel (filter via meta)
- Wrap compute in a SkipAlpha handler to skip cleanly in batch runs
Example fix
# before
out = registry.compute('alpha_029', {'close': close_df})
# after
panel = {'close': close_df, 'open': open_df, 'volume': vol_df, 'high': high_df, 'low': low_df, 'returns': ret_df}
out = registry.compute('alpha_029', panel) Defensive patterns
Strategy: validation
Validate before calling
meta = registry.get(alpha_id).meta
missing = [c for c in meta.get('columns_required', []) if c not in panel]
if missing: skip(alpha_id, f'missing {missing}') Type guard
def panel_has(panel: dict, meta: dict) -> bool:
return all(c in panel for c in meta.get('columns_required', [])) Try / catch
try:
out = registry.compute(aid, panel)
except SkipAlpha:
continue Prevention
- Build full OHLCV+ panels by default
- Filter the alpha list by meta before batch runs
When it happens
Trigger: compute(alpha_id, panel) where panel lacks one of meta['columns_required'] — e.g. an OHLC-only panel passed to an alpha requiring 'vwap'.
Common situations: Building panels from a data source that omits adjusted volume or vwap; mixing zoo families (Alpha101 vs GTJA191) with different column needs; forgetting to add benchmark/returns columns.
Related errors
- {alpha_id}: panel missing extras {missing_extra}
- {alpha_id}: panel missing sector tag
- panel missing 'close' — cannot derive forward returns
- {path}: layout={layout!r} needs metric=... -- a wide table h
- {path}: layout={layout!r} needs currency=... -- a wide table
AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28).
Data as JSON: /api/errors/a25ec9ad3c698e05.
Report an issue: GitHub.