Logic · fast_news_v3

Read-only view of active client JSON

{
    "config_version": "fast_news_worthy_news_trade_engine_v3_2026_06_02",
    "strategy_name": "FAST_NEWS_ONLY",
    "purpose": "Analyze every incoming news item for market-moving potential, classify direction, validate trade quality, and execute only when the Fast News strategy is clear.",
    "do_not_mix_with": [
        "A_PLUS_CONFIRMATION"
    ],
    "timezone": "America\/New_York",
    "mode": "ANALYZE_WORTHY_NEWS_THEN_TRADE_IF_CLEAR",
    "global_rules": {
        "enabled": true,
        "analyze_every_incoming_headline": true,
        "auto_trade_enabled": true,
        "paper_trade_default": true,
        "live_trade_requires_explicit_flag": true,
        "manual_review_if_unclear": true,
        "minimum_market_impact_score_for_alert": 70,
        "minimum_market_impact_score_for_trade_validation": 85,
        "minimum_strategy_clarity_score_for_auto_trade": 85,
        "minimum_total_trade_score_for_auto_trade": 88,
        "minimum_source_reliability_for_auto_trade": 8,
        "minimum_direction_confidence": 80,
        "max_concurrent_fast_news_positions": 2,
        "max_same_ticker_positions": 1,
        "max_trades_per_day": 5,
        "max_total_daily_fast_news_loss": 600,
        "max_dollar_risk_per_trade": 300,
        "reject_if_no_clear_direction": true,
        "reject_if_news_is_stale": true,
        "reject_if_duplicate_trade": true,
        "reject_if_strategy_conflicts": true,
        "reject_if_fast_news_and_a_plus_overlap": true,
        "block_new_trade_after_daily_loss_hit": true
    },
    "market_session_rules": {
        "regular_session": {
            "enabled": true,
            "start_time": "09:30:00",
            "end_time": "16:00:00",
            "allow_auto_trade": true
        },
        "premarket": {
            "enabled": true,
            "start_time": "04:00:00",
            "end_time": "09:29:59",
            "allow_auto_trade": true,
            "require_option_chain_available": true,
            "max_spread_percent": 15
        },
        "after_hours": {
            "enabled": true,
            "start_time": "16:00:01",
            "end_time": "20:00:00",
            "allow_auto_trade": false,
            "learning_mode_only": true
        },
        "closed_or_holiday_market": {
            "allow_auto_trade": false,
            "learning_mode_only": true,
            "reason": "U.S. options market closed or unreliable liquidity."
        }
    },
    "news_ingestion": {
        "required_fields": [
            "headline",
            "source",
            "published_at",
            "received_at",
            "url"
        ],
        "optional_fields": [
            "summary",
            "body",
            "tickers",
            "symbols_if_available",
            "sector",
            "asset_class",
            "related_assets",
            "language",
            "sentiment",
            "source_rank"
        ],
        "normalize_headline": true,
        "strip_duplicate_words": true,
        "detect_language": true,
        "translate_to_english_if_needed": true,
        "store_raw_news": true,
        "store_normalized_news": true,
        "store_all_incoming_news_even_if_rejected": true
    },
    "source_reliability_scores": {
        "official_company_release": 10,
        "sec_filing": 10,
        "fda_official": 10,
        "federal_reserve_official": 9.8,
        "treasury_official": 9.8,
        "white_house_official": 9.8,
        "court_filing": 9.5,
        "reuters": 9.5,
        "bloomberg": 9.4,
        "dow_jones": 9.2,
        "associated_press": 9.1,
        "wall_street_journal": 9.1,
        "cnbc": 8.5,
        "marketwatch": 8,
        "investors_business_daily": 8,
        "barrons": 8,
        "benzinga": 7.8,
        "unusual_whales": 7.2,
        "verified_reporter_social": 6.5,
        "social_media_unknown": 3,
        "reddit": 2,
        "stocktwits": 2,
        "unknown_source": 1
    },
    "worthy_news_market_impact_scanner": {
        "enabled": true,
        "run_before_specific_scanners": true,
        "purpose": "Catch any incoming headline that can move stocks, ETFs, indexes, commodities, currencies, rates, crypto, volatility, or options even if it does not match a predefined keyword scanner.",
        "analyze_every_headline": true,
        "minimum_market_impact_score_for_alert": 70,
        "minimum_market_impact_score_for_trade_validation": 85,
        "minimum_market_impact_score_for_auto_trade": 90,
        "classify_assets": [
            "single_stock",
            "sector_etf",
            "index_etf",
            "commodity",
            "currency",
            "rates",
            "crypto",
            "volatility",
            "options"
        ],
        "market_moving_event_types": [
            "earnings_surprise",
            "guidance_change",
            "revenue_warning",
            "margin_warning",
            "analyst_upgrade",
            "analyst_downgrade",
            "price_target_change",
            "ceo_resignation",
            "cfo_resignation",
            "executive_departure",
            "accounting_issue",
            "auditor_resignation",
            "fraud_investigation",
            "sec_investigation",
            "doj_investigation",
            "ftc_action",
            "fda_approval",
            "fda_rejection",
            "clinical_trial_success",
            "clinical_trial_failure",
            "major_lawsuit",
            "settlement",
            "cyberattack",
            "data_breach",
            "product_recall",
            "factory_shutdown",
            "factory_fire",
            "labor_strike",
            "supply_chain_disruption",
            "aircraft_incident",
            "transportation_disruption",
            "natural_disaster",
            "tariff_announcement",
            "sanctions",
            "export_controls",
            "import_ban",
            "geopolitical_escalation",
            "geopolitical_deescalation",
            "war_escalation",
            "ceasefire",
            "oil_supply_shock",
            "opec_action",
            "central_bank_surprise",
            "inflation_surprise",
            "jobs_report_surprise",
            "treasury_yield_spike",
            "credit_downgrade",
            "bank_liquidity_stress",
            "short_seller_report",
            "trading_halt",
            "index_inclusion",
            "index_removal",
            "m_and_a",
            "strategic_review",
            "bankruptcy",
            "restructuring",
            "capital_raise",
            "dilution",
            "buyback",
            "dividend_cut",
            "dividend_increase",
            "crypto_regulatory_action",
            "commodity_supply_shock",
            "ai_product_launch",
            "ai_infrastructure_deal",
            "hyperscaler_partnership",
            "government_contract",
            "defense_contract",
            "major_customer_win",
            "major_customer_loss"
        ],
        "required_classification_output": {
            "is_market_moving": "boolean",
            "market_impact_score": "number_0_to_100",
            "event_type": "string",
            "headline_theme": "string",
            "affected_assets": "array",
            "primary_ticker": "string_or_null",
            "sector": "string_or_null",
            "expected_direction": "CALLS | PUTS | MIXED | NO_TRADE",
            "direction_confidence": "number_0_to_100",
            "time_sensitivity": "IMMEDIATE | FAST_CONFIRMATION | SLOW_CONFIRMATION | IGNORE",
            "reason": "string"
        },
        "send_to_specific_scanners_if": [
            "is_market_moving == true",
            "market_impact_score >= 70"
        ],
        "send_to_trade_validation_if": [
            "is_market_moving == true",
            "market_impact_score >= 85",
            "expected_direction in ['CALLS','PUTS']",
            "direction_confidence >= 80",
            "source_reliability_score >= 8",
            "duplicate_check == PASS",
            "news_freshness_check == PASS"
        ],
        "auto_reject_if": [
            "is_market_moving == false",
            "market_impact_score < 70",
            "expected_direction == MIXED",
            "expected_direction == NO_TRADE",
            "affected_assets_empty",
            "source_reliability_score < 7.5",
            "duplicate_check == FAIL",
            "news_age_seconds > 600"
        ],
        "manual_review_if": [
            "market_impact_score >= 70 AND market_impact_score < 85",
            "direction_confidence >= 60 AND direction_confidence < 80",
            "source_reliability_score >= 7.0 AND source_reliability_score < 8.0",
            "affected_assets_unclear == true"
        ]
    },
    "specific_event_scanners": {
        "ai_infrastructure_demand_shock": {
            "enabled": true,
            "keywords": [
                "AI infrastructure demand",
                "hyperscaler demand shock",
                "data center demand surge",
                "AI capex increase",
                "GPU demand rebound",
                "semiconductor recovery",
                "chip demand recovery",
                "memory demand surge",
                "HBM demand",
                "AI backlog expansion"
            ],
            "tickers": [
                "NVDA",
                "AMD",
                "AVGO",
                "MU",
                "MRVL",
                "INTC",
                "SMH",
                "SOXX",
                "SMCI"
            ],
            "default_direction": "CALLS",
            "severity_boost": 2.8,
            "minimum_severity": 8.5
        },
        "panic_washout_reversal": {
            "enabled": true,
            "keywords": [
                "panic selling",
                "washout",
                "capitulation",
                "oversold bounce",
                "rebound after selloff",
                "recovery rally",
                "short covering",
                "sympathy rebound",
                "sector rebound",
                "dead cat bounce"
            ],
            "tickers": [
                "INTC",
                "AMD",
                "MU",
                "MRVL",
                "NVDA",
                "SMH",
                "SOXX",
                "QQQ",
                "SPY"
            ],
            "default_direction": "CALLS",
            "severity_boost": 2.5,
            "minimum_severity": 8.3
        },
        "ai_infrastructure_earnings": {
            "enabled": true,
            "keywords": [
                "AI server demand",
                "AI infrastructure",
                "data center growth",
                "AI networking",
                "custom AI chips",
                "raised guidance",
                "AI backlog",
                "hyperscaler demand",
                "GPU server",
                "AI revenue beat"
            ],
            "tickers": [
                "DELL",
                "HPE",
                "SMCI",
                "MRVL",
                "ANET",
                "NTAP",
                "AVGO",
                "NVDA"
            ],
            "default_direction": "CALLS",
            "severity_boost": 2.5,
            "minimum_severity": 8.7
        },
        "ai_product_launch": {
            "enabled": true,
            "keywords": [
                "AI chip",
                "AI PC",
                "AI platform",
                "AI device",
                "AI operating system",
                "AI partnership",
                "AI product launch",
                "new AI processor"
            ],
            "tickers": [
                "NVDA",
                "AMD",
                "MSFT",
                "INTC",
                "QCOM",
                "AAPL",
                "GOOGL"
            ],
            "default_direction": "CALLS",
            "severity_boost": 2,
            "minimum_severity": 8.5
        },
        "enterprise_ai_deployment": {
            "enabled": true,
            "keywords": [
                "AWS partnership",
                "Microsoft Azure partnership",
                "Google Cloud partnership",
                "enterprise AI deployment",
                "AI monetization",
                "AI SaaS acceleration",
                "cloud AI expansion",
                "hyperscaler agreement"
            ],
            "tickers": [
                "SNOW",
                "CRM",
                "NOW",
                "MSFT",
                "GOOGL",
                "AMZN",
                "ORCL",
                "DDOG"
            ],
            "default_direction": "CALLS",
            "severity_boost": 2.3,
            "minimum_severity": 8.8
        },
        "software_guidance_collapse": {
            "enabled": true,
            "keywords": [
                "weak guidance",
                "cuts forecast",
                "lowers outlook",
                "customer slowdown",
                "software spending slowdown",
                "cybersecurity slowdown",
                "margin pressure",
                "sales deceleration",
                "cloud spending deterioration"
            ],
            "tickers": [
                "ZS",
                "CRWD",
                "PANW",
                "OKTA",
                "DDOG",
                "SNOW",
                "CRM",
                "NOW"
            ],
            "default_direction": "PUTS",
            "severity_boost": 2.5,
            "minimum_severity": 8.8
        },
        "commercial_infrastructure_partnership": {
            "enabled": true,
            "keywords": [
                "Starlink",
                "satellite internet",
                "airline connectivity",
                "commercial deployment",
                "fleet rollout",
                "telecom partnership",
                "transportation technology integration",
                "inflight internet"
            ],
            "tickers": [
                "AAL",
                "DAL",
                "UAL",
                "LUV",
                "TMUS",
                "VZ",
                "T",
                "ASTS"
            ],
            "default_direction": "CALLS",
            "severity_boost": 2.2,
            "minimum_severity": 8.6
        },
        "energy_geopolitical": {
            "enabled": true,
            "keywords": [
                "Iran",
                "Israel",
                "Hormuz",
                "OPEC",
                "oil supply",
                "crude",
                "missile strike",
                "ceasefire",
                "peace deal",
                "sanctions",
                "shipping lane"
            ],
            "tickers": [
                "XLE",
                "XOM",
                "CVX",
                "OXY",
                "USO"
            ],
            "requires_direction_classifier": true,
            "minimum_severity": 8.5
        },
        "regulatory_shock": {
            "enabled": true,
            "keywords": [
                "FDA approval",
                "FDA rejection",
                "clinical hold",
                "SEC investigation",
                "DOJ investigation",
                "FTC lawsuit",
                "China regulatory crackdown",
                "export restriction",
                "ban",
                "delisting risk"
            ],
            "default_direction": "CLASSIFY_FROM_CONTEXT",
            "severity_boost": 2,
            "minimum_severity": 8.7
        },
        "m_and_a_corporate_action": {
            "enabled": true,
            "keywords": [
                "acquisition talks",
                "merger talks",
                "deal terminated",
                "strategic review",
                "exploring sale",
                "takeover bid",
                "private equity interest",
                "activist investor"
            ],
            "default_direction": "CLASSIFY_FROM_CONTEXT",
            "severity_boost": 2.1,
            "minimum_severity": 8.5
        },
        "capital_raise_or_dilution": {
            "enabled": true,
            "keywords": [
                "equity raise",
                "share offering",
                "secondary offering",
                "convertible notes",
                "debt raise",
                "AI capex financing",
                "capital raise",
                "dilution"
            ],
            "classification_rules": {
                "equity_raise": "PUTS_OR_NO_TRADE",
                "share_offering": "PUTS_OR_NO_TRADE",
                "convertible_notes": "MIXED_REVIEW",
                "debt_raise": "NEUTRAL_OR_REVIEW",
                "capex_guidance_without_dilution": "CALLS_IF_CONFIRMED"
            },
            "severity_boost": 1.7,
            "minimum_severity": 8
        },
        "leadership_accounting_or_fraud": {
            "enabled": true,
            "keywords": [
                "CEO resigns",
                "CFO resigns",
                "auditor resigns",
                "accounting issue",
                "restatement",
                "fraud",
                "internal investigation",
                "material weakness"
            ],
            "default_direction": "PUTS",
            "severity_boost": 2.4,
            "minimum_severity": 8.6
        },
        "cyberattack_or_data_breach": {
            "enabled": true,
            "keywords": [
                "cyberattack",
                "data breach",
                "ransomware",
                "system outage",
                "customer data exposed",
                "security incident"
            ],
            "default_direction": "PUTS",
            "severity_boost": 2.2,
            "minimum_severity": 8.4
        },
        "short_seller_report": {
            "enabled": true,
            "keywords": [
                "short seller report",
                "Hindenburg",
                "Muddy Waters",
                "Citron",
                "fraud allegations",
                "research report alleges"
            ],
            "default_direction": "PUTS",
            "severity_boost": 2.5,
            "minimum_severity": 8.5
        }
    },
    "energy_direction_classifier": {
        "enabled": true,
        "critical_rule": "Never map oil, Iran, or Hormuz headlines directly to XLE calls without direction classification.",
        "bullish_energy_triggers": [
            "oil supply shock",
            "confirmed Strait of Hormuz closure",
            "Iran escalation",
            "Israel escalation",
            "missile attack on oil infrastructure",
            "tanker attack",
            "OPEC surprise production cut",
            "major refinery outage",
            "sanctions tightening",
            "crude spike greater than 1.5 percent in 10 minutes",
            "talks collapse",
            "communications breakdown"
        ],
        "bearish_energy_triggers": [
            "ceasefire",
            "peace deal",
            "U.S.-Iran agreement",
            "deal optimism",
            "shipping lane reopening",
            "Strait of Hormuz reopening",
            "sanctions relief",
            "oil supply increasing",
            "crude prices falling",
            "truce extension"
        ],
        "xle_calls_allowed_only_if": [
            "headline_direction == BULLISH_ENERGY",
            "crude_direction == UP",
            "XLE_1m_change_percent >= 0.20",
            "XLE_above_vwap == true",
            "option_premium_acceleration == POSITIVE",
            "spread_percent <= 12",
            "duplicate_check == PASS"
        ],
        "xle_puts_allowed_only_if": [
            "headline_direction == BEARISH_ENERGY",
            "crude_direction == DOWN",
            "XLE_1m_change_percent <= -0.20",
            "XLE_below_vwap == true",
            "put_premium_acceleration == POSITIVE",
            "spread_percent <= 12",
            "duplicate_check == PASS"
        ],
        "reject_xle_calls_if": [
            "headline_direction == BEARISH_ENERGY",
            "crude_direction == DOWN",
            "XLE_red_intraday == true",
            "same_event_duplicate == true",
            "strategy_clarity_score < 85"
        ]
    },
    "duplicate_news_logic": {
        "enabled": true,
        "duplicate_key_fields": [
            "event_date",
            "trading_session",
            "source_cluster",
            "headline_theme",
            "primary_ticker",
            "expected_direction",
            "severity_bucket"
        ],
        "same_day_duplicate_window_minutes": 20,
        "suppress_same_event_same_direction": true,
        "same_event_action": "SUPPRESS_OR_CONFIDENCE_BOOST_ONLY",
        "do_not_create_second_trade": true,
        "new_event_allowed_if": [
            "new_trading_day",
            "new_trading_session",
            "material_escalation",
            "official_confirmation_after_rumor",
            "opposite_direction_update",
            "new_attack_or_retaliation",
            "new_guidance_change",
            "new_contract_confirmation",
            "new_regulatory_action",
            "new_price_breakout_after_consolidation"
        ],
        "duplicate_reject_reasons": [
            "same_headline_theme",
            "same_ticker",
            "same_direction",
            "same_session",
            "inside_duplicate_window",
            "no_material_new_detail"
        ]
    },
    "trade_validation_pipeline": {
        "must_pass_all_for_auto_trade": [
            "worthy_news_market_impact_check",
            "news_freshness_check",
            "source_reliability_check",
            "duplicate_check",
            "direction_classification_check",
            "ticker_mapping_check",
            "underlying_reaction_check",
            "options_chain_check",
            "premium_acceleration_check",
            "spread_check",
            "liquidity_check",
            "slippage_check",
            "risk_check",
            "strategy_clarity_check",
            "existing_position_check",
            "stop_monitor_availability_check"
        ],
        "news_freshness_check": {
            "max_news_age_seconds_for_auto_trade": 180,
            "max_news_age_seconds_for_manual_alert": 600,
            "reject_if_received_after_major_move_without_premium_replay": true
        },
        "direction_classification_check": {
            "required": true,
            "minimum_direction_confidence": 80,
            "reject_if_mixed_or_unclear": true,
            "valid_directions": [
                "CALLS",
                "PUTS",
                "NO_TRADE",
                "WATCHLIST_ONLY"
            ]
        },
        "ticker_mapping_check": {
            "required": true,
            "prefer_direct_ticker_over_sector_etf": true,
            "allow_sector_etf_only_if_primary_ticker_unclear": true,
            "reject_if_ticker_liquidity_poor": true
        },
        "underlying_reaction_check": {
            "required": true,
            "confirmation_windows_seconds": [
                15,
                30,
                60,
                120
            ],
            "calls_require": {
                "price_change_1m_percent_min": 0.2,
                "price_above_vwap": true,
                "volume_relative_min": 1.5,
                "green_candle_confirmation": true
            },
            "puts_require": {
                "price_change_1m_percent_max": -0.2,
                "price_below_vwap": true,
                "volume_relative_min": 1.5,
                "red_candle_confirmation": true
            },
            "reject_if_underlying_disagrees_with_news": true
        },
        "options_chain_check": {
            "required": true,
            "expiration_preference": [
                "same_week",
                "next_week"
            ],
            "minimum_open_interest": 100,
            "minimum_volume": 50,
            "minimum_bid": 0.2,
            "avoid_contracts_with_zero_bid": true,
            "prefer_delta_range": {
                "min": 0.35,
                "max": 0.65
            },
            "max_contract_price": 8
        },
        "premium_acceleration_check": {
            "required": true,
            "premium_snapshots_seconds": [
                3,
                10,
                30,
                60,
                90
            ],
            "calls_require_premium_acceleration_positive": true,
            "puts_require_premium_acceleration_positive": true,
            "ideal_premium_expansion_before_entry_percent": 20,
            "max_premium_expansion_before_entry_percent": 120,
            "reject_if_premium_already_exploded_and_underlying_not_accelerating": true
        },
        "spread_check": {
            "required": true,
            "max_spread_percent_regular_session": 12,
            "max_spread_percent_premarket": 15,
            "max_spread_percent_high_liquidity_exception": 18,
            "reject_if_spread_wider_than_max": true
        },
        "slippage_check": {
            "required": true,
            "max_expected_slippage_percent": 8,
            "max_fees_plus_slippage_percent_of_expected_profit": 25,
            "reject_if_friction_too_high": true
        },
        "strategy_clarity_check": {
            "required": true,
            "score_components": {
                "market_impact_score": 15,
                "source_reliability": 15,
                "headline_direction_clarity": 20,
                "ticker_mapping_clarity": 10,
                "underlying_reaction_alignment": 20,
                "option_premium_alignment": 10,
                "spread_and_liquidity_quality": 5,
                "duplicate_status": 5
            },
            "minimum_score_for_auto_trade": 85,
            "score_below_70_action": "REJECT",
            "score_70_to_84_action": "MANUAL_REVIEW",
            "score_85_plus_action": "ALLOW_IF_TOTAL_SCORE_PASSES"
        }
    },
    "trade_scoring": {
        "total_score_required_for_auto_trade": 88,
        "score_weights": {
            "market_impact_score": 15,
            "news_severity": 15,
            "source_reliability": 15,
            "direction_confidence": 15,
            "reaction_confirmation": 15,
            "premium_acceleration": 10,
            "spread_quality": 5,
            "liquidity_quality": 5,
            "latency_quality": 3,
            "duplicate_cleanliness": 2
        },
        "automatic_reject_conditions": [
            "market_impact_score_below_85",
            "duplicate_check_failed",
            "direction_confidence_below_80",
            "strategy_clarity_below_85",
            "source_reliability_below_8_for_auto_trade",
            "headline_stale",
            "underlying_reaction_disagrees",
            "premium_missing",
            "spread_missing",
            "spread_too_wide",
            "existing_position_same_ticker",
            "daily_loss_limit_hit",
            "market_closed",
            "stop_monitor_not_available"
        ]
    },
    "order_execution": {
        "enabled": true,
        "broker": "Tradier",
        "order_type": "LIMIT",
        "allowed_order_actions": [
            "BUY_TO_OPEN"
        ],
        "blocked_order_actions": [
            "SELL_SHORT_OPTIONS",
            "NAKED_OPTIONS",
            "MARKET_ORDER_OPTIONS"
        ],
        "entry_price_logic": {
            "default": "mid_price_plus_small_offset",
            "max_chase_percent": 5,
            "cancel_if_not_filled_seconds": 8,
            "do_not_market_order_options": true
        },
        "position_sizing": {
            "default_contracts": 1,
            "max_contracts": 2,
            "increase_to_2_contracts_only_if_total_score_above": 94
        },
        "pre_execution_required_log_fields": [
            "signal_id",
            "news_id",
            "headline",
            "source",
            "published_at",
            "received_at",
            "market_impact_score",
            "strategy_bucket",
            "ticker",
            "option_symbol",
            "direction",
            "total_score",
            "strategy_clarity_score",
            "severity_score",
            "source_reliability_score",
            "duplicate_key",
            "duplicate_result",
            "underlying_price",
            "underlying_1m_change",
            "vwap_status",
            "bid",
            "ask",
            "mid",
            "spread_percent",
            "premium_acceleration",
            "reason_trade_allowed"
        ]
    },
    "post_fill_monitoring": {
        "required": true,
        "start_monitor_within_seconds": 5,
        "if_monitor_not_started_action": "FLATTEN_OR_ALERT_IMMEDIATELY",
        "stop_loss": {
            "enabled": true,
            "type": "premium_percent_loss",
            "max_loss_percent": 20,
            "action": "SELL_TO_CLOSE",
            "do_not_disable": true
        },
        "take_profit": {
            "enabled": true,
            "scale_out_rules": [
                {
                    "profit_percent": 25,
                    "action": "consider_partial_or_tighten_stop"
                },
                {
                    "profit_percent": 50,
                    "action": "take_partial_profit_or_trail"
                },
                {
                    "profit_percent": 100,
                    "action": "take_profit_or_aggressive_trail"
                }
            ]
        },
        "trailing_stop": {
            "enabled": true,
            "activate_after_profit_percent": 25,
            "trail_by_percent": 15
        },
        "time_stop": {
            "enabled": true,
            "exit_if_no_follow_through_minutes": 7,
            "exit_if_premium_flat_or_down_after_entry": true
        },
        "exit_if_news_reverses": true,
        "exit_if_underlying_loses_vwap": true,
        "exit_if_spread_explodes_percent": 25,
        "required_monitor_fields": [
            "position_id",
            "order_id",
            "option_symbol",
            "entry_fill_price",
            "current_bid",
            "current_ask",
            "current_mid",
            "premium_change_percent",
            "underlying_price",
            "vwap_status",
            "stop_loss_price",
            "highest_premium_seen",
            "trailing_stop_price",
            "exit_reason"
        ]
    },
    "learning_engine": {
        "enabled": true,
        "run_after_market_close": true,
        "store_all_news": true,
        "store_rejected_events": true,
        "store_missed_events": true,
        "store_selected_events": true,
        "store_duplicate_events": true,
        "store_late_events": true,
        "compare_news_to_market_reaction": true,
        "compare_rejected_to_actual_move": true,
        "compare_selected_to_actual_pnl": true,
        "update_scanner_weights_daily": true,
        "fields_to_log": [
            "date",
            "event_id",
            "news_timestamp",
            "received_timestamp",
            "source",
            "source_reliability",
            "market_impact_score",
            "duplicate_status",
            "stale_status",
            "headline_theme",
            "affected_tickers",
            "sector",
            "expected_direction",
            "actual_direction",
            "severity_score",
            "strategy_clarity_score",
            "reaction_timing_seconds",
            "underlying_move_1m",
            "underlying_move_5m",
            "underlying_move_15m",
            "option_premium_3s",
            "option_premium_10s",
            "option_premium_30s",
            "option_premium_60s",
            "spread_percent",
            "slippage_estimate",
            "fees",
            "entry_price",
            "exit_price",
            "gross_pnl",
            "net_pnl",
            "reject_reason",
            "lesson_learned"
        ],
        "missed_trade_detection": {
            "enabled": true,
            "detect_if_stock_moved_after_rejected_news": true,
            "missed_threshold_underlying_move_percent": 3,
            "missed_threshold_option_move_percent": 40,
            "flag_scanner_gap_if_no_alert_created": true,
            "flag_premium_gap_if_alert_created_but_no_premium_data": true,
            "flag_direction_error_if_trade_direction_opposite_actual_move": true
        }
    },
    "api_decision_output_schema": {
        "required_output": {
            "signal_id": "string",
            "action": "ENTER_TRADE | REJECT | MANUAL_REVIEW | WATCHLIST_ONLY",
            "strategy": "FAST_NEWS_ONLY",
            "ticker": "string_or_null",
            "option_symbol": "string_or_null",
            "direction": "CALLS | PUTS | NO_TRADE",
            "headline_theme": "string",
            "event_type": "string",
            "source": "string",
            "source_reliability_score": "number",
            "market_impact_score": "number",
            "severity_score": "number",
            "direction_confidence": "number",
            "strategy_clarity_score": "number",
            "total_trade_score": "number",
            "duplicate_status": "PASS | FAIL | CONFIDENCE_BOOST_ONLY",
            "stale_status": "FRESH | STALE | LATE",
            "expected_direction": "string",
            "actual_reaction": "string",
            "reason": "string",
            "risk": {
                "contracts": "number",
                "max_loss_percent": 20,
                "max_dollar_risk": "number"
            },
            "execution": {
                "order_type": "LIMIT",
                "limit_price": "number_or_null",
                "should_execute_trade_api": "boolean"
            }
        }
    },
    "hard_blocks": [
        {
            "name": "NOT_WORTHY_NEWS",
            "condition": "market_impact_score < 85",
            "action": "REJECT_FOR_TRADE_VALIDATION"
        },
        {
            "name": "NO_CLEAR_STRATEGY",
            "condition": "strategy_clarity_score < 85",
            "action": "REJECT"
        },
        {
            "name": "DUPLICATE_ENTRY",
            "condition": "duplicate_check == FAIL",
            "action": "REJECT"
        },
        {
            "name": "DIRECTION_CONFLICT",
            "condition": "headline_direction != underlying_reaction_direction",
            "action": "REJECT"
        },
        {
            "name": "MISSING_OPTION_DATA",
            "condition": "bid == null OR ask == null OR spread_percent == null",
            "action": "REJECT"
        },
        {
            "name": "XLE_BAD_DIRECTION",
            "condition": "ticker == XLE AND direction == CALLS AND headline_direction == BEARISH_ENERGY",
            "action": "REJECT"
        },
        {
            "name": "STOP_MONITOR_NOT_AVAILABLE",
            "condition": "post_fill_monitoring_available == false",
            "action": "REJECT"
        }
    ],
    "developer_required_tests": {
        "must_pass_before_live": [
            "every incoming headline is stored and scored for market impact",
            "headlines with market_impact_score below 70 do not alert",
            "headlines with market_impact_score 70 to 84 go to manual review or watchlist only",
            "headlines with market_impact_score 85 plus go to trade validation only if direction is clear",
            "same XLE call headline cannot fire twice within duplicate window",
            "bearish energy headline cannot create XLE calls",
            "bullish energy headline requires crude and XLE confirmation",
            "no trade can execute without bid ask spread data",
            "no trade can execute without stop monitor available",
            "every ENTER_TRADE output must include should_execute_trade_api true",
            "every REJECT output must include should_execute_trade_api false",
            "Fast News engine must not call A+ confirmation strategy"
        ]
    }
}