SYMBOL INDEX (54 symbols across 12 files) FILE: Experiments/chatgpt_micro-cap/graphing/daily_returns.py function plot_daily_returns_distribution (line 4) | def plot_daily_returns_distribution( FILE: Experiments/chatgpt_micro-cap/graphing/data_helper.py function load_data (line 8) | def load_data(trade_log_path: str | Path = TRADE_LOG_PATH, daily_updates... function assemble_path (line 14) | def assemble_path(file_name: str) -> Path: FILE: Experiments/chatgpt_micro-cap/graphing/drawdown.py function plot_drawdown (line 6) | def plot_drawdown(equity_df: pd.DataFrame): FILE: Experiments/chatgpt_micro-cap/graphing/equity_vs_baseline.py function load_portfolio_totals (line 13) | def load_portfolio_totals() -> pd.DataFrame: function download_baseline (line 30) | def download_baseline(ticker: str, start_date: pd.Timestamp, end_date: p... function find_largest_gain (line 49) | def find_largest_gain(df: pd.DataFrame) -> tuple[pd.Timestamp, pd.Timest... function compute_drawdown (line 97) | def compute_drawdown(df: pd.DataFrame) -> tuple[pd.Timestamp, float, flo... function main (line 108) | def main() -> dict: FILE: Experiments/chatgpt_micro-cap/graphing/holding_chart.py function compute_total_logged_days_by_ticker (line 4) | def compute_total_logged_days_by_ticker(daily_df: pd.DataFrame): function plot_total_logged_days_by_ticker (line 19) | def plot_total_logged_days_by_ticker(daily_df: pd.DataFrame): FILE: Experiments/chatgpt_micro-cap/graphing/holding_distribution.py function compute_fifo_holding_days (line 4) | def compute_fifo_holding_days(trades_df: pd.DataFrame): function plot_holding_period_distribution (line 40) | def plot_holding_period_distribution(trades_df: pd.DataFrame, bins: int ... function load_data (line 56) | def load_data(trade_log_path: str, daily_updates_path: str): FILE: Experiments/chatgpt_micro-cap/graphing/max_drawdown_vs_largest_run.py function load_portfolio_totals (line 8) | def load_portfolio_totals() -> pd.DataFrame: function download_baseline (line 25) | def download_baseline(ticker: str, start_date: pd.Timestamp, end_date: p... function find_largest_gain (line 44) | def find_largest_gain(df: pd.DataFrame) -> tuple[pd.Timestamp, pd.Timest... function compute_drawdown (line 92) | def compute_drawdown(df: pd.DataFrame) -> tuple[pd.Timestamp, float, flo... function main (line 103) | def main() -> dict: FILE: Experiments/chatgpt_micro-cap/graphing/repeated_ticker_exposure.py function plot_repeated_ticker_exposure (line 5) | def plot_repeated_ticker_exposure(trades_df: pd.DataFrame): FILE: Experiments/chatgpt_micro-cap/graphing/returns_by_trades.py function plot_return_contribution (line 4) | def plot_return_contribution(trades_df: pd.DataFrame): FILE: Experiments/chatgpt_micro-cap/graphing/top_losses_vs_wins.py function plot_top_wins_vs_losses (line 5) | def plot_top_wins_vs_losses(trades_df: pd.DataFrame, n: int = 3): FILE: Experiments/chatgpt_micro-cap/scripts/metrics/load_dataV3.py function build_fifo_lot_exits (line 7) | def build_fifo_lot_exits(trade_log: pd.DataFrame, exclude_atyr: bool = F... function build_pure_pnl_by_ticker (line 64) | def build_pure_pnl_by_ticker(lot_exits: pd.DataFrame) -> pd.DataFrame: function compute_metrics (line 86) | def compute_metrics(df: pd.DataFrame, pnl_col: str, holding_col: str): function compute_trade_metrics (line 121) | def compute_trade_metrics(trade_log: pd.DataFrame, exclude_atyr: bool = ... function print_results (line 178) | def print_results(results: dict): FILE: Experiments/chatgpt_micro-cap/scripts/processing/trading_script.py function set_asof (line 47) | def set_asof(date: str | datetime | pd.Timestamp | None) -> None: function _effective_now (line 64) | def _effective_now() -> datetime: function _log_initial_state (line 83) | def _log_initial_state(): function _read_json_file (line 101) | def _read_json_file(path: Path) -> Optional[Dict]: function load_benchmarks (line 124) | def load_benchmarks(script_dir: Path | None = None) -> List[str]: function _normalize_number_string (line 179) | def _normalize_number_string(s: str) -> str: function parse_starting_equity (line 188) | def parse_starting_equity(s: Union[str, float, Decimal]) -> Optional[Dec... function last_trading_date (line 213) | def last_trading_date(today: datetime | None = None) -> pd.Timestamp: function check_weekend (line 226) | def check_weekend() -> str: function trading_day_window (line 230) | def trading_day_window(target: datetime | None = None) -> tuple[pd.Times... class FetchResult (line 257) | class FetchResult: function _to_datetime_index (line 261) | def _to_datetime_index(df: pd.DataFrame) -> pd.DataFrame: function _normalize_ohlcv (line 269) | def _normalize_ohlcv(df: pd.DataFrame) -> pd.DataFrame: function _yahoo_download (line 294) | def _yahoo_download(ticker: str, **kwargs: Any) -> pd.DataFrame: function _stooq_csv_download (line 314) | def _stooq_csv_download(ticker: str, start: pd.Timestamp, end: pd.Timest... function _stooq_download (line 352) | def _stooq_download( function _weekend_safe_range (line 376) | def _weekend_safe_range(period: str | None, start: Any, end: Any) -> tup... function download_price_data (line 400) | def download_price_data(ticker: str, **kwargs: Any) -> FetchResult: function set_data_dir (line 463) | def set_data_dir(data_dir: Path) -> None: function _ensure_df (line 478) | def _ensure_df(portfolio: pd.DataFrame | dict[str, list[object]] | list[... function process_portfolio (line 490) | def process_portfolio( function log_sell (line 771) | def log_sell( function log_manual_buy (line 807) | def log_manual_buy( function log_manual_sell (line 917) | def log_manual_sell( function daily_results (line 1009) | def daily_results(chatgpt_portfolio: pd.DataFrame, cash: float) -> None: function load_latest_portfolio_state (line 1286) | def load_latest_portfolio_state( function main (line 1376) | def main(data_dir: Path | None = None, starting_equity_override: Optiona...