{
  "tolerance": {
    "rsi_points": 1e-09,
    "average_relative": 1e-12
  },
  "checks": [
    {
      "name": "dataset_hash",
      "result": "PASS",
      "detail": "bd8b94236896c4b09410a10d7ff49a80171660dfc04e7d13a07dad7af7ca1cfe"
    },
    {
      "name": "inputs_bit_identical",
      "result": "PASS",
      "detail": "5000 rows echoed by MQL; 0 time/high/low/close values differ from the pandas parse"
    },
    {
      "name": "buffer_rows",
      "result": "PASS",
      "detail": "5000 MQL buffer rows aligned on bar time"
    },
    {
      "name": "warmup_empty",
      "result": "PASS",
      "detail": "indexes 0..13 empty in both; RSI defined from index 14 on (4986 values)"
    },
    {
      "name": "rsi_within_tolerance",
      "result": "PASS",
      "detail": "max |MQL - pandas| = 4.974e-14 RSI points over 4986 values (2139 bit-identical)"
    },
    {
      "name": "averages_within_tolerance",
      "result": "PASS",
      "detail": "max relative error avg gain 1.608e-15, avg loss 1.657e-15"
    },
    {
      "name": "pivot_flags_identical",
      "result": "PASS",
      "detail": "313 pivot highs and 311 pivot lows in MQL; pandas 313 / 311"
    },
    {
      "name": "pivot_flags_bruteforce",
      "result": "PASS",
      "detail": "explicit loops over every bar agree with the MQL flags"
    },
    {
      "name": "divergences_identical",
      "result": "PASS",
      "detail": "145 MQL detections, 145 pandas detections; exact (type, confirm time, pivot 1 time, pivot 2 time) match"
    },
    {
      "name": "divergence_values",
      "result": "PASS",
      "detail": "RSI at pivots max error 3.553e-14; pivot prices bit-identical: True"
    },
    {
      "name": "confirmation_offset",
      "result": "PASS",
      "detail": "every detection sits exactly 5 bars after pivot 2 and on a closed bar"
    },
    {
      "name": "plotted_lines_and_arrows",
      "result": "PASS",
      "detail": "0 position mismatches; max line error 3.553e-14; max arrow error 3.553e-14"
    },
    {
      "name": "pair_start_buffers",
      "result": "PASS",
      "detail": "stored pivot-1 index at each confirming bar matches pandas"
    },
    {
      "name": "decision_margins",
      "result": "PASS",
      "detail": "621 evaluated pairs; smallest RSI difference 5.350e-02 points; 1 pairs with exactly equal pivot prices (never a divergence)"
    },
    {
      "name": "edge_flat",
      "result": "PASS",
      "detail": "30 rows; return 30; RSI max error 0.000e+00; detections []"
    },
    {
      "name": "edge_one_way_up",
      "result": "PASS",
      "detail": "30 rows; return 30; RSI max error 0.000e+00; detections []"
    },
    {
      "name": "edge_one_way_down",
      "result": "PASS",
      "detail": "30 rows; return 30; RSI max error 0.000e+00; detections []"
    },
    {
      "name": "edge_ties",
      "result": "PASS",
      "detail": "50 rows; return 50; RSI max error 2.132e-14; detections []"
    },
    {
      "name": "edge_known_divergences",
      "result": "PASS",
      "detail": "96 rows; return 96; RSI max error 2.842e-14; detections [('regular_bearish', 49, 20, 44), ('regular_bullish', 89, 60, 84)]"
    },
    {
      "name": "edge_real_prefix_1",
      "result": "PASS",
      "detail": "1 rows; return 0; RSI max error 0.000e+00; detections []"
    },
    {
      "name": "edge_real_prefix_14",
      "result": "PASS",
      "detail": "14 rows; return 0; RSI max error 0.000e+00; detections []"
    },
    {
      "name": "edge_real_prefix_15",
      "result": "PASS",
      "detail": "15 rows; return 15; RSI max error 0.000e+00; detections []"
    },
    {
      "name": "edge_real_prefix_26",
      "result": "PASS",
      "detail": "26 rows; return 26; RSI max error 7.105e-15; detections []"
    },
    {
      "name": "confirmation_timing_pandas",
      "result": "PASS",
      "detail": "145 detections: absent with the confirming bar forming, present once it closed, earlier detections unchanged; failures []"
    }
  ],
  "rsi": {
    "compared_values": 4986,
    "max_abs_error_points": 4.973799150320701e-14,
    "bit_identical_values": 2139,
    "max_rel_error_avg_gain": 1.6083917093523065e-15,
    "max_rel_error_avg_loss": 1.656554801553981e-15,
    "seed_rsi_index_14": 42.78350515463967
  },
  "detections": {
    "total": 145,
    "by_type": {
      "regular_bearish": 29,
      "regular_bullish": 44,
      "hidden_bearish": 43,
      "hidden_bullish": 29
    }
  },
  "decision_margins": {
    "rsi_min_abs_difference": 0.05349819681001122,
    "price_min_nonzero_difference": 1.0000000000065512e-05,
    "equal_price_pairs": 1,
    "equal_rsi_pairs": 0,
    "evaluated_pairs": 621
  },
  "edge_cases": [
    {
      "case": "flat",
      "rows": 30,
      "mql_return": 30,
      "expected_return": 30,
      "defined_rsi_values": 16,
      "max_rsi_error": 0.0,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "one_way_up",
      "rows": 30,
      "mql_return": 30,
      "expected_return": 30,
      "defined_rsi_values": 16,
      "max_rsi_error": 0.0,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "one_way_down",
      "rows": 30,
      "mql_return": 30,
      "expected_return": 30,
      "defined_rsi_values": 16,
      "max_rsi_error": 0.0,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "ties",
      "rows": 50,
      "mql_return": 50,
      "expected_return": 50,
      "defined_rsi_values": 36,
      "max_rsi_error": 2.1316282072803006e-14,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "known_divergences",
      "rows": 96,
      "mql_return": 96,
      "expected_return": 96,
      "defined_rsi_values": 82,
      "max_rsi_error": 2.842170943040401e-14,
      "pivot_flags_identical": true,
      "detections": [
        [
          "regular_bearish",
          49,
          20,
          44
        ],
        [
          "regular_bullish",
          89,
          60,
          84
        ]
      ],
      "result": "PASS"
    },
    {
      "case": "real_prefix_1",
      "rows": 1,
      "mql_return": 0,
      "expected_return": 0,
      "defined_rsi_values": 0,
      "max_rsi_error": 0.0,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "real_prefix_14",
      "rows": 14,
      "mql_return": 0,
      "expected_return": 0,
      "defined_rsi_values": 0,
      "max_rsi_error": 0.0,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "real_prefix_15",
      "rows": 15,
      "mql_return": 15,
      "expected_return": 15,
      "defined_rsi_values": 1,
      "max_rsi_error": 0.0,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    },
    {
      "case": "real_prefix_26",
      "rows": 26,
      "mql_return": 26,
      "expected_return": 26,
      "defined_rsi_values": 12,
      "max_rsi_error": 7.105427357601002e-15,
      "pivot_flags_identical": true,
      "detections": [],
      "result": "PASS"
    }
  ],
  "real_data_rule_coverage": {
    "pivot_high_with_equal_high_on_right": 10,
    "pivot_low_with_equal_low_on_right": 4,
    "rejected_high_equal_to_left_high": 14,
    "rejected_low_equal_to_left_low": 4,
    "zero_close_changes": 36,
    "rsi_exactly_0_50_or_100": 0,
    "note": "Zero-denominator branches (RSI 0/50/100) are exercised by the synthetic flat and one-way cases; real EURUSD H1 data does not reach them"
  },
  "native_harness": {
    "checks_passed": 41,
    "checks_failed": 0,
    "edge_cases_pass_marker": true,
    "summary": "rows=5000 detections=145 failures=0"
  },
  "verdict": "PASS",
  "failed": [],
  "inputs": {
    "eurusd-h1.csv": "bd8b94236896c4b09410a10d7ff49a80171660dfc04e7d13a07dad7af7ca1cfe",
    "mql5-buffers.csv": "168eeffa67419e966dbb463d35396461635b784a53417bc1fe7dcbb96b5c1003",
    "mql5-divergences.csv": "b91de6d9e392a067564790ddc77d57bb07c1b4206738f4e59c7cf02337b9f535",
    "mql5-inputs-echo.csv": "b5a33eeda336920dfa61633f63841fdd8125d906c0d8d27c61dd7d9c2d8247a9",
    "mql5-edge-rows.csv": "a2d46b5be2a2c9845eef5031df68e684db35380c05e14015aec3d62c33fe2b4b",
    "mql5-edge-divergences.csv": "b3547cd3bc22beacdd478de62d4ef06a8bb04731ae582f18b005bdcff2fbd983",
    "mql5-edge-returns.csv": "5ec997838380d95fedfa0bb940dec64f9e2c4845cd11f3f3b542eef76e5c4376",
    "edge-cases.json": "1d8db2124e65c1bda7347cc3d22095affc4753ce7ac6944468fb45ab3e2190d0"
  }
}
