Closes#203
Data fetch functions were using today's date as the end bound instead of
the simulation's curr_date, allowing future data to leak into backtests.
Changes:
- stockstats_utils.py: replace pd.Timestamp.today() with curr_date + 1 day
- y_finance.py _get_stock_stats_bulk: same fix for yfinance OHLCV download
- y_finance.py get_balance_sheet/get_cashflow/get_income_statement: filter
out fiscal periods whose column timestamp exceeds curr_date
- alpha_vantage_fundamentals.py get_balance_sheet/get_cashflow/get_income_statement:
filter annualReports and quarterlyReports by fiscalDateEnding <= curr_date
- yfinance_news.py get_global_news_yfinance: skip articles with pub_date
after curr_date
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add _clean_dataframe() to normalize stock DataFrames before stockstats:
coerce invalid dates/prices, drop rows missing Close, fill price gaps.
Also add on_bad_lines="skip" to all cached CSV reads.