{"record":{"id":"34e8d9b9054e0a37","repo":"HKUDS/Vibe-Trading","slug":"delay-requires-n-1-lookahead-ban-34e8d9","errorCode":null,"errorMessage":"delay requires n >= 1 (lookahead ban)","messagePattern":"delay requires n >= 1 \\(lookahead ban\\)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"critical","filePath":"agent/src/factors/zoo/alpha101/alpha_029.py","lineNumber":67,"sourceCode":"    'min_warmup_bars': 12,\n    'notes': '',\n}\n\n\ndef _rolling_sum(df: pd.DataFrame, n: int) -> pd.DataFrame:\n    \"\"\"Rolling window sum; warmup -> NaN.\"\"\"\n    return df.rolling(window=n, min_periods=n).sum()\n\n\ndef _rolling_prod(df: pd.DataFrame, n: int) -> pd.DataFrame:\n    \"\"\"Rolling window product; warmup -> NaN.\"\"\"\n    return df.rolling(window=n, min_periods=n).apply(np.prod, raw=True)\n\n\ndef _delay(df: pd.DataFrame, n: int) -> pd.DataFrame:\n    \"\"\"Backward shift by n (lookahead-safe; n>=1 required).\"\"\"\n    if n < 1:\n        raise ValueError(\"delay requires n >= 1 (lookahead ban)\")\n    return df.shift(n)\n\n\ndef compute(panel: dict) -> pd.DataFrame:\n    \"\"\"Compute the alpha on the OHLCV+ panel and return a wide DataFrame.\"\"\"\n    close = panel[\"close\"]\n    returns = close.pct_change(fill_method=None)\n    # Helper aliases (local closures keep the file standalone & purity-safe).\n    rolling_sum = _rolling_sum\n    rolling_prod = _rolling_prod\n    delay = _delay\n    inner = rank(rank(-1.0 * rank(delta(close - 1.0, 5))))\n    inner = ts_min(inner, 2)\n    inner = rolling_sum(inner, 1)\n    inner = np.log(inner.where(inner > 0))\n    inner = scale(inner)\n    inner = rank(rank(inner))\n    inner = rolling_prod(inner, 1)","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/HKUDS/Vibe-Trading/blob/80ffdda44c5c4db0dd84d70e051cca591cea67df/agent/src/factors/zoo/alpha101/alpha_029.py#L49-L85","documentation":"alpha_029's _delay guard: delay counts must be >=1 to be lookahead-safe; n<1 raises ValueError before df.shift(n). Consistent with all Alpha101 zoo modules.","triggerScenarios":"alpha_029 compute hitting a _delay call with n<=0 due to a transcription/parameter error in the formula.","commonSituations":"Formula ports misreading (-d) terms; programmatic parameterization allowing 0.","solutions":["Correct the argument to >=1","Use the unshifted frame for zero-lag intent"],"exampleFix":"# before\n_delay(rank_ret, 0)\n# after\nrank_ret","handlingStrategy":"validation","validationCode":"assert delay_n >= 1, 'lookahead ban'","typeGuard":"def valid_delay(n: int) -> bool:\n    return isinstance(n, int) and n >= 1","tryCatchPattern":null,"preventionTips":["Keep (-d) terms in formula ports as positive delays","Add unit tests asserting delay >= 1 for all zoo helpers"],"tags":["lookahead-bias","validation","alpha101"],"backgroundTag":"invalid-argument-value","analyzedSha":"80ffdda44c5c4db0dd84d70e051cca591cea67df","analyzedAt":"2026-08-28T12:46:38.989Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}