SYMBOL INDEX (219 symbols across 26 files) FILE: feedback.py function _tradier_headers (line 51) | def _tradier_headers() -> dict: function _use_tradier (line 60) | def _use_tradier() -> bool: function load_history (line 67) | def load_history() -> dict: function save_history (line 75) | def save_history(history: dict) -> None: function get_current_price (line 83) | def get_current_price(ticker: str) -> float: function _tradier_stock_price (line 104) | def _tradier_stock_price(ticker: str) -> float: function get_current_option_price (line 145) | def get_current_option_price( function _option_type_from_strategy (line 183) | def _option_type_from_strategy(strategy: str) -> str: function _tradier_option_price (line 198) | def _tradier_option_price( function _yfinance_option_price (line 259) | def _yfinance_option_price( function compute_outcome (line 282) | def compute_outcome(trade: dict, current_stock_price: float) -> float: function update_bin (line 325) | def update_bin(stats_dict: dict, feature: str, bin_label: str, outcome: ... function retrain_rl_agent (line 339) | def retrain_rl_agent(history: dict) -> None: function compute_pearson_weights (line 375) | def compute_pearson_weights(history: dict) -> dict: function _bin_to_num (line 414) | def _bin_to_num(feature: str, bin_label: str) -> float: function main (line 425) | def main() -> None: FILE: modules/alpha_sources.py function fetch_fda_events (line 53) | def fetch_fda_events(company_name: str, days_back: int = 7) -> list[dict]: function fetch_fda_drug_approvals (line 92) | def fetch_fda_drug_approvals(days_back: int = 7) -> list[dict]: function match_fda_to_ticker (line 132) | def match_fda_to_ticker(ticker: str, company_info: dict, days_back: int ... function fetch_sec_insider_trades (line 162) | def fetch_sec_insider_trades(ticker: str, days_back: int = 14) -> list[d... function _fetch_sec_form4_fallback (line 199) | def _fetch_sec_form4_fallback(ticker: str, days_back: int) -> list[dict]: function detect_insider_cluster (line 225) | def detect_insider_cluster(ticker: str, days_back: int = 14) -> dict: function get_earnings_date_finnhub (line 260) | def get_earnings_date_finnhub(ticker: str) -> Optional[str]: function has_earnings_within_days (line 291) | def has_earnings_within_days( function fetch_options_skew (line 336) | def fetch_options_skew(ticker: str, current_price: float) -> dict: function _fetch_skew_yfinance (line 393) | def _fetch_skew_yfinance(ticker: str, current_price: float) -> Optional[... function _fetch_skew_tradier (line 448) | def _fetch_skew_tradier(ticker: str, current_price: float, api_key: str)... function _build_skew_result (line 522) | def _build_skew_result( function estimate_dealer_gamma (line 555) | def estimate_dealer_gamma(ticker: str, current_price: float) -> dict: function enrich_with_alpha_sources (line 682) | def enrich_with_alpha_sources(candidate: dict) -> dict: FILE: modules/data_ingestion.py class DataIngestion (line 46) | class DataIngestion: method __init__ (line 48) | def __init__(self, history: dict | None = None): method _get_current_vix (line 52) | def _get_current_vix(self) -> float: method run (line 61) | def run(self) -> list[dict]: method _evaluate_ticker (line 98) | def _evaluate_ticker( method _log_filter_stats (line 211) | def _log_filter_stats(self, stats: dict) -> None: method _fetch_news (line 230) | def _fetch_news(self, ticker: str, info: dict) -> list[str]: method _fetch_finnhub_news (line 243) | def _fetch_finnhub_news(self, ticker: str, api_key: str) -> list[str]: method _fetch_newsapi (line 258) | def _fetch_newsapi(self, ticker: str, company_name: str) -> list[str]: method _fetch_yfinance_news (line 275) | def _fetch_yfinance_news(self, ticker: str) -> list[str]: FILE: modules/data_validator.py function fetch_eps_sec_edgar (line 43) | def fetch_eps_sec_edgar(ticker: str) -> Optional[float]: function _get_cik (line 105) | def _get_cik(ticker: str) -> Optional[str]: function cross_check_eps_edgar (line 133) | def cross_check_eps_edgar( function _fetch_eps_alphavantage (line 213) | def _fetch_eps_alphavantage(ticker: str) -> Optional[float]: function compute_option_roi_with_vega (line 239) | def compute_option_roi_with_vega(option: dict, simulation: dict) -> dict: function _bs_delta_vega (line 333) | def _bs_delta_vega(S: float, K: float, sigma: float, T: float) -> tuple[... function _norm_cdf (line 359) | def _norm_cdf(x: float) -> float: function _norm_pdf (line 364) | def _norm_pdf(x: float) -> float: function _roi_empty (line 369) | def _roi_empty() -> dict: function validate_candidate_data (line 379) | def validate_candidate_data(candidate: dict) -> dict: FILE: modules/deep_analysis.py function _format_market_cap (line 131) | def _format_market_cap(market_cap: Optional[int]) -> str: class DeepAnalysis (line 141) | class DeepAnalysis: method __init__ (line 143) | def __init__(self): method run (line 152) | def run(self, shortlist: list[dict]) -> list[dict]: method _analyze (line 223) | def _analyze(self, candidate: dict) -> Optional[dict]: method _get_48h_move (line 376) | def _get_48h_move(self, ticker: str) -> float: FILE: modules/email_reporter.py function send_status_email (line 32) | def send_status_email(pipeline_stats: dict, today: str) -> None: function send_email (line 43) | def send_email(proposals: list[dict], today: str, pipeline_stats: dict |... function _build_status_email (line 57) | def _build_status_email(stats: dict, today: str) -> str: function _build_trade_email (line 99) | def _build_trade_email(proposals: list[dict], today: str) -> str: function _send_smtp (line 254) | def _send_smtp(subject: str, html: str) -> None: FILE: modules/finbert_sentiment.py function _load_model (line 30) | def _load_model(): function score_headlines (line 59) | def score_headlines(headlines: list[str]) -> dict: function _neutral_result (line 106) | def _neutral_result() -> dict: function score_candidate (line 114) | def score_candidate(candidate: dict) -> dict: FILE: modules/intraday_delta.py function get_intraday_move (line 32) | def get_intraday_move(ticker: str) -> dict: function is_already_moved (line 76) | def is_already_moved( function filter_by_intraday_delta (line 123) | def filter_by_intraday_delta( function _no_data (line 155) | def _no_data() -> dict: FILE: modules/macro_context.py function get_macro_context (line 43) | def get_macro_context() -> dict: function _fetch_macro_data (line 70) | def _fetch_macro_data() -> dict: function _fetch_fred_series (line 133) | def _fetch_fred_series(series_id: str, last_n: int = 1) -> Optional[float]: function _build_claude_context (line 174) | def _build_claude_context( function get_vix_term_structure (line 217) | def get_vix_term_structure() -> dict: function get_macro_regime_multiplier (line 312) | def get_macro_regime_multiplier() -> float: FILE: modules/mirofish_simulation.py function _get_hist_params (line 70) | def _get_hist_params(ticker: str) -> tuple[float, float]: function preload_hist_params (line 107) | def preload_hist_params(tickers: list[str]) -> None: function _compute_dynamic_target (line 128) | def _compute_dynamic_target(current: float, sigma: float, days: int) -> ... class MirofishSimulation (line 150) | class MirofishSimulation: method __init__ (line 152) | def __init__(self): method run_for_dte (line 155) | def run_for_dte( method _get_market_params (line 283) | def _get_market_params(self, ticker: str) -> tuple[float, float, float]: function compute_time_value_efficiency (line 298) | def compute_time_value_efficiency(roi_net: float, dte: int) -> dict: FILE: modules/mismatch_scorer.py function _bin_impact (line 29) | def _bin_impact(impact: float) -> str: function _bin_mismatch (line 37) | def _bin_mismatch(mismatch: float) -> str: function _bin_eps_drift (line 51) | def _bin_eps_drift(drift: float) -> str: class MismatchScorer (line 61) | class MismatchScorer: method run (line 63) | def run(self, analyses: list[dict]) -> list[dict]: method _score (line 71) | def _score(self, a: dict) -> dict | None: method _compute_sigma (line 134) | def _compute_sigma(self, ticker: str) -> float: method _compute_48h_move (line 146) | def _compute_48h_move(self, ticker: str) -> float: FILE: modules/news_fetcher.py function fetch_company_news (line 53) | def fetch_company_news( function fetch_news_headlines (line 81) | def fetch_news_headlines(ticker: str, days_back: int = 2) -> list[str]: function get_news_with_timestamps (line 90) | def get_news_with_timestamps(ticker: str, days_back: int = 2) -> list[di... function compute_news_age_hours (line 100) | def compute_news_age_hours(news_items: list[dict]) -> Optional[float]: function _rate_limit (line 125) | def _rate_limit(): function _fetch_finnhub (line 133) | def _fetch_finnhub( function _get_pattern (line 197) | def _get_pattern(ticker: str) -> Optional[re.Pattern]: function _fetch_rss_fallback (line 208) | def _fetch_rss_fallback(ticker: str, max_articles: int) -> list[dict]: FILE: modules/options_designer.py function _classify_catalyst_type (line 110) | def _classify_catalyst_type(s: dict) -> str: function _tradier_headers (line 135) | def _tradier_headers() -> dict: function _tradier_expirations (line 143) | def _tradier_expirations(symbol: str) -> list[str]: function _tradier_chain (line 162) | def _tradier_chain(symbol: str, expiration: str) -> list[dict]: function _tradier_chain_to_df (line 185) | def _tradier_chain_to_df(options: list[dict], option_type: str) -> pd.Da... function _strike_window (line 222) | def _strike_window(current: float, dte_min: int, dte_max: int) -> tuple[... class OptionsDesigner (line 259) | class OptionsDesigner: method __init__ (line 261) | def __init__(self, gates): method run (line 271) | def run(self, signals: list[dict]) -> list[dict]: method _design_with_adaptive_dte (line 286) | def _design_with_adaptive_dte(self, s: dict, t=None) -> Optional[dict]: method _select_strategy (line 466) | def _select_strategy( method _compute_roi (line 519) | def _compute_roi( method _find_option_for_dte (line 648) | def _find_option_for_dte( method _find_option_tradier (line 661) | def _find_option_tradier( method _find_option_yfinance (line 763) | def _find_option_yfinance( method _find_spread_leg (line 837) | def _find_spread_leg(self, opts: pd.DataFrame, long_strike: float) -> ... method _get_atm_straddle (line 852) | def _get_atm_straddle( method _get_iv_rank (line 902) | def _get_iv_rank(self, ticker: str, t: Optional[object] = None) -> float: method _get_term_structure_iv (line 948) | def _get_term_structure_iv( method _term_structure_tradier (line 958) | def _term_structure_tradier( method _term_structure_yfinance (line 988) | def _term_structure_yfinance( method _sector_momentum_ok (line 1017) | def _sector_momentum_ok(self, s: dict, t=None) -> bool: method _bear_case_ok (line 1036) | def _bear_case_ok(self, s: dict) -> bool: method _days_to (line 1044) | def _days_to(self, expiry_str: str) -> int: FILE: modules/premium_signals.py function fetch_flash_alpha (line 30) | def fetch_flash_alpha(ticker: str) -> dict: function _compute_dealer_score (line 125) | def _compute_dealer_score( function _flash_empty (line 156) | def _flash_empty(ticker: str) -> dict: function fetch_eulerpool_vol_surface (line 172) | def fetch_eulerpool_vol_surface(ticker: str) -> dict: function _assess_iv_crush_risk (line 246) | def _assess_iv_crush_risk(iv_percentile: float, iv_skew: float) -> str: function _compute_flow_bias (line 265) | def _compute_flow_bias(net_call_flow: float, net_put_flow: float) -> float: function _eulerpool_empty (line 277) | def _eulerpool_empty(ticker: str) -> dict: function enrich_top_candidates (line 295) | def enrich_top_candidates(signals: list[dict], top_n: int = 2) -> list[d... FILE: modules/prescreener.py class Prescreener (line 74) | class Prescreener: method __init__ (line 76) | def __init__(self): method run (line 79) | def run(self, candidates: list[dict]) -> list[dict]: method _has_options_liquidity (line 151) | def _has_options_liquidity(self, ticker: str) -> bool: method _call_with_retry (line 164) | def _call_with_retry(self, batch: list[dict]) -> list | None: FILE: modules/quasi_ml.py class QuasiML (line 12) | class QuasiML: method __init__ (line 13) | def __init__(self, history: dict): method run (line 20) | def run(self, simulated: list[dict]) -> list[dict]: method _compute_final_score (line 29) | def _compute_final_score(self, s: dict) -> float: method _get_bin_avg_return (line 44) | def _get_bin_avg_return(self, feature: str, bin_label: str) -> float: method _prior_return (line 53) | def _prior_return(self, feature: str, bin_label: str) -> float: method _fallback_score (line 61) | def _fallback_score(self, features: dict) -> float: FILE: modules/reddit_signals.py function fetch_ticker_mentions (line 70) | def fetch_ticker_mentions( function _fetch_subreddit_posts (line 118) | def _fetch_subreddit_posts( function _score_post (line 170) | def _score_post(post: dict) -> dict: function _compute_sentiment (line 197) | def _compute_sentiment(scored_posts: list[dict]) -> float: function _compute_options_intent (line 221) | def _compute_options_intent(scored_posts: list[dict]) -> float: function _empty_result (line 233) | def _empty_result() -> dict: function enrich_candidate (line 242) | def enrich_candidate(candidate: dict) -> dict: FILE: modules/reporter.py function compute_exit_rules (line 21) | def compute_exit_rules(proposal: dict) -> dict: function _empty_exit_rules (line 91) | def _empty_exit_rules() -> dict: class Reporter (line 101) | class Reporter: method __init__ (line 102) | def __init__(self, reports_dir: Path): method save (line 106) | def save(self, today: str, proposals: list[dict], history: dict) -> None: method _save_json (line 115) | def _save_json(self, today: str, proposals: list[dict]) -> None: method _save_markdown (line 124) | def _save_markdown(self, today: str, proposals: list[dict], history: d... FILE: modules/risk_gates.py class RiskGates (line 31) | class RiskGates: method __init__ (line 33) | def __init__(self): method global_ok (line 36) | def global_ok(self) -> bool: method _fetch_vix (line 63) | def _fetch_vix(self) -> Optional[float]: method has_upcoming_earnings (line 104) | def has_upcoming_earnings(self, ticker: str) -> bool: FILE: modules/rl_agent.py function train_agent (line 46) | def train_agent( function _create_new_model (line 104) | def _create_new_model(env: OptionsRLEnv): class RLScorer (line 128) | class RLScorer: method __init__ (line 136) | def __init__(self, history: dict): method _load_model (line 141) | def _load_model(self) -> None: method run (line 157) | def run(self, simulated: list[dict]) -> list[dict]: method _compute_raw_score (line 214) | def _compute_raw_score(self, s: dict) -> float: method _quasi_ml_fallback (line 247) | def _quasi_ml_fallback(self, simulated: list[dict]) -> list[dict]: FILE: modules/rl_environment.py function features_to_obs (line 63) | def features_to_obs( class OptionsRLEnv (line 103) | class OptionsRLEnv(gym.Env): method __init__ (line 113) | def __init__(self, trade_data: list[dict]): method reset (line 131) | def reset(self, seed=None, options=None): method step (line 137) | def step(self, action: int): method _get_obs (line 170) | def _get_obs(self) -> np.ndarray: method render (line 183) | def render(self): function build_env_from_history (line 187) | def build_env_from_history(history: dict) -> Optional[OptionsRLEnv]: FILE: modules/sentiment_tracker.py function update_sentiment_history (line 41) | def update_sentiment_history( function get_sentiment_drift (line 90) | def get_sentiment_drift( function enrich_with_sentiment_drift (line 177) | def enrich_with_sentiment_drift( function get_accumulation_candidates (line 226) | def get_accumulation_candidates(history: dict) -> list[str]: FILE: modules/trade_scorer.py function compute_trade_score (line 62) | def compute_trade_score(proposal: dict) -> dict: function rank_proposals (line 311) | def rank_proposals(proposals: list[dict]) -> list[dict]: FILE: modules/universe.py function _fetch_sp500 (line 113) | def _fetch_sp500() -> list[str]: function _fetch_nasdaq100 (line 133) | def _fetch_nasdaq100() -> list[str]: function _clean (line 157) | def _clean(tickers: list[str]) -> list[str]: function get_universe (line 178) | def get_universe(universe: str = "") -> list[str]: FILE: pipeline.py function get_mc_threshold (line 89) | def get_mc_threshold(vix) -> float: function reject (line 109) | def reject(reason: str, ticker: str | None = None) -> None: function validate_strict (line 122) | def validate_strict(c: dict): function validate_for_simulation (line 141) | def validate_for_simulation(c: dict): function validate_mc_result (line 153) | def validate_mc_result(result: dict): function filter_correlated_proposals (line 166) | def filter_correlated_proposals( function load_history (line 223) | def load_history() -> dict: function save_history (line 240) | def save_history(history: dict) -> None: function main (line 246) | def main() -> None: FILE: tests/test_pipeline.py function empty_history (line 20) | def empty_history(): function sample_candidate (line 34) | def sample_candidate(): function sample_analysis (line 62) | def sample_analysis(sample_candidate): class TestMismatchScorer (line 82) | class TestMismatchScorer: method test_high_impact_low_move_gives_high_mismatch (line 83) | def test_high_impact_low_move_gives_high_mismatch(self): method test_low_impact_high_move_gives_negative_mismatch_filtered (line 109) | def test_low_impact_high_move_gives_negative_mismatch_filtered(self): method test_moderate_impact_moderate_move (line 131) | def test_moderate_impact_moderate_move(self): method test_high_impact_tiny_move_passes (line 153) | def test_high_impact_tiny_move_passes(self): method test_zero_sigma_returns_none (line 178) | def test_zero_sigma_returns_none(self): method test_missing_data_validation_defaults_to_zero (line 195) | def test_missing_data_validation_defaults_to_zero(self): class TestQuasiML (line 218) | class TestQuasiML: method test_fallback_scoring_without_history (line 219) | def test_fallback_scoring_without_history(self, empty_history): method test_signals_sorted_by_score (line 237) | def test_signals_sorted_by_score(self, empty_history): class TestRiskGates (line 250) | class TestRiskGates: method test_vix_below_threshold_passes (line 251) | def test_vix_below_threshold_passes(self): method test_vix_above_threshold_blocks (line 257) | def test_vix_above_threshold_blocks(self): class TestMirofishSimulation (line 266) | class TestMirofishSimulation: method test_strong_signal_passes_gate (line 267) | def test_strong_signal_passes_gate(self): method test_zero_price_returns_none (line 286) | def test_zero_price_returns_none(self): class TestFeedbackLoop (line 302) | class TestFeedbackLoop: method test_bin_update_running_average (line 303) | def test_bin_update_running_average(self): method test_bin_to_num_mapping (line 311) | def test_bin_to_num_mapping(self):