version: 1
calibrated: 2026-07-28
last_updated: 2026-07-28
note: defaults, not derived constants. recalibrate against Evidence logs.
prose: https://www.soyhands.com/resources/thresholds
agents: https://www.soyhands.com/AGENTS.md

data_policy:
  assume_no_live_data: true
  on_missing_input: fail_gate_and_sit
  never_estimate_prices: true
  confirm_et_time_before_windows: true

session_checklist:
  - state
  - regime
  - window
  - screen
  - plan
  - size
  - cut
  - flat_clock
  - sit_if_any_fails

state_signals:
  - recovery_language
  - urgency_with_no_screen
  - size_drift
  - rule_shopping
  - post_loss_immediacy
  - streak_talk
  - sleep_illness_or_outside_stress
  - watching_position_not_plan

state_check:
  runs_before: regime
  on_fail: state_sit
  good_setup_clears_bad_state: false
  clearing_window: next_session
  allowed_work: tomorrow_plan_or_research
  forbidden_work: today_order

hold_sit:
  failed_step_stays_failed: true
  new_information_can_reopen: true
  argument_cannot_reopen: true
  no_place_or_cancel_around_sit: true
  sizing_down_is_not_a_fix: true
  escalation:
    - first_push: acknowledge_restate_offer_allowed_work
    - second_push: name_pattern_same_line_no_new_reasons
    - third_push: stop_negotiating_shift_to_allowed_work

hard_sits:
  - state_check_failed
  - not_agentic_allowed
  - no_tp_and_cut
  - fake_rr_or_mid_reclaim
  - earnings_today_or_next_am
  - same_name_reentry_after_stop
  - chaotic_tape
  - late_cutoff_fresh_idea
  - daily_stop_R_hit
  - find_me_something_no_screen

soft_sits:
  - mixed_chop_after_1500
  - bear_day_green_chase
  - rsi_extended_on_gt_12pct_day
  - second_idea_while_first_extreme_rvol

windows:
  timezone: America/New_York
  eod_prefer: "14:30-15:55"
  eod_manage_only_after: "15:25"
  eod_hard_flat: "15:55"
  or_map: "09:30-09:45"
  or_hard_flat: "11:00"
  avoid_new_risk_before: "14:00"
  tier_a_exception: true

regime_friendly:
  require_all:
    - both_indexes_beyond_opening_range: true
    - both_indexes_side_of_vwap: same
    - vwap_hold_minutes_min: 30
    - spy_vwap_crosses_max: 4

chaotic_tape:
  trigger_any:
    - spy_or_width_vs_20d_avg_min: 1.5
    - spy_vwap_crosses_min: 5
    - spy_atr14_5m_percentile_min: 90
    - no_side_held_vwap_minutes: 15

soft_tape_wheel:
  trigger_any:
    - spy_below_ma: [20, 50]
    - spy_down_closes_of_last_5_min: 3
    - vix_above: 25
    - vix_5day_pct_change_min: 20
    - underlying_below_ma50: true

risk_reward:
  stop_must_be_structural: true
  target_marked_down_to_first_obstacle: true
  target_identified_before_entry: true
  min_r_multiple: 2.0
  fill_assumption: worse_end_of_trigger

sweep:
  min_undercut_atr_multiple: 0.25
  max_reclaim_minutes: 10
  volume_vs_20bar_avg_min: 1.0
  untested_lows_below_entry: disqualifying

mae_rule:
  any_print_below_sweep_low: exit_immediately

sizing:
  risk_per_trade_pct: 0.005
  max_notional_pct: 0.20
  daily_stop_R: 3
  on_notional_breach: cut_to_cap
  widen_stop_to_fit: forbidden
  note: risk_per_trade_pct and max_notional_pct are fractions of 1 (0.005 = 0.5%, 0.20 = 20%). Do not treat 0.5 as half a percent.

screen:
  criteria_written_before_session: true
  min_avg_daily_volume: 1000000
  max_avg_spread_pct: 0.1
  manual_post_filtering: forbidden
  empty_result_is_valid: true
