{
  "note": "Every text drawn into the five PNGs, with the values behind it. Times are terminal time (trade-server clock).",
  "raster": {
    "width": 1920,
    "height": 1080,
    "dpi": 120,
    "figsize_inches": [
      16.0,
      9.0
    ]
  },
  "logo": {
    "file": "images/brokercheck-logo.png",
    "sha256": "1d03a555099eb04c3a419d51bb544afccf8f7c9014440d6e3a2937083167dc36",
    "position_figure_fraction": [
      0.765,
      0.852,
      0.167,
      0.052
    ],
    "backing": "opaque white rectangle 0.760,0.846 size 0.178x0.065"
  },
  "selection_constants": {
    "context_bars_before_pivot1": 12,
    "context_bars_after_confirm": 24,
    "overview_bars": 240,
    "lag_max_pivot_distance": 30
  },
  "charts": {
    "overview": {
      "title": "Detector output on the last 240 hourly bars",
      "subtitle": "EURUSD · H1 · RSI 14 (Wilder, close) · pivots 5 left / 5 right · terminal time",
      "info_text": [
        "A  bullish: 10 Sep 23:00 / 11 Sep 15:00, confirmed 11 Sep 20:00      B  bullish: 16 Sep 04:00 / 16 Sep 15:00, confirmed 16 Sep 20:00",
        "C  bullish: 22 Sep 00:00 / 22 Sep 11:00, confirmed 22 Sep 16:00      D  bullish: 23 Sep 20:00 / 24 Sep 05:00, confirmed 24 Sep 10:00"
      ],
      "detections": [
        {
          "type": "regular_bullish",
          "p1_index": 4767,
          "p2_index": 4783,
          "confirm_index": 4788,
          "p1_time": "2026-09-10 23:00",
          "p2_time": "2026-09-11 15:00",
          "confirm_time": "2026-09-11 20:00",
          "confirm_bar_closes": "21:00",
          "price_p1": "1.16049",
          "price_p2": "1.15687",
          "rsi_p1": "37.93",
          "rsi_p2": "44.02",
          "rsi_gap": "6.08",
          "bars_between_pivots": 16,
          "close_at_confirm": "1.15976",
          "rsi_at_confirm": "41.61",
          "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)"
        },
        {
          "type": "regular_bullish",
          "p1_index": 4844,
          "p2_index": 4855,
          "confirm_index": 4860,
          "p1_time": "2026-09-16 04:00",
          "p2_time": "2026-09-16 15:00",
          "confirm_time": "2026-09-16 20:00",
          "confirm_bar_closes": "21:00",
          "price_p1": "1.15312",
          "price_p2": "1.15277",
          "rsi_p1": "38.99",
          "rsi_p2": "42.56",
          "rsi_gap": "3.57",
          "bars_between_pivots": 11,
          "close_at_confirm": "1.15385",
          "rsi_at_confirm": "49.03",
          "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)"
        },
        {
          "type": "regular_bullish",
          "p1_index": 4936,
          "p2_index": 4947,
          "confirm_index": 4952,
          "p1_time": "2026-09-22 00:00",
          "p2_time": "2026-09-22 11:00",
          "confirm_time": "2026-09-22 16:00",
          "confirm_bar_closes": "17:00",
          "price_p1": "1.14608",
          "price_p2": "1.14333",
          "rsi_p1": "37.77",
          "rsi_p2": "42.01",
          "rsi_gap": "4.24",
          "bars_between_pivots": 11,
          "close_at_confirm": "1.14530",
          "rsi_at_confirm": "40.55",
          "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)"
        },
        {
          "type": "regular_bullish",
          "p1_index": 4980,
          "p2_index": 4989,
          "confirm_index": 4994,
          "p1_time": "2026-09-23 20:00",
          "p2_time": "2026-09-24 05:00",
          "confirm_time": "2026-09-24 10:00",
          "confirm_bar_closes": "11:00",
          "price_p1": "1.13696",
          "price_p2": "1.13683",
          "rsi_p1": "33.02",
          "rsi_p2": "35.89",
          "rsi_gap": "2.87",
          "bars_between_pivots": 9,
          "close_at_confirm": "1.13924",
          "rsi_at_confirm": "47.77",
          "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)"
        }
      ],
      "counts": {
        "regular_bearish": 0,
        "regular_bullish": 4
      },
      "selection_rule": "Selection rule (newest 240 exported bars; every regular detection whose pivots and confirming bar are inside)",
      "file": "images/img01_overview.png",
      "width": 1920,
      "height": 1080,
      "sha256": "9677f5ab812bf41aedde44e83c9f3961d648140e44fe8a60939f89c334fb5f0b",
      "window": {
        "first_index": 4760,
        "last_index": 4999,
        "bars": 240,
        "first_bar": "2026-09-10 16:00",
        "last_bar": "2026-09-24 15:00",
        "derived_csv_lines": "data/derived.csv lines 4762-5001"
      },
      "x_tick_labels": [
        "10 Sep 16:00",
        "14 Sep 15:00",
        "16 Sep 15:00",
        "18 Sep 15:00",
        "22 Sep 15:00",
        "24 Sep 15:00"
      ],
      "footer_text": [
        "4 regular bullish and 0 regular bearish detections at default settings · letter pairs mark pivots 1 and 2 · ▲ and dashed gold line: confirming bar",
        "Window 2026-09-10 16:00 to 2026-09-24 15:00 · MT5 terminal export, closed bars only · terminal time was UTC+3 at capture · gaps compressed (faint vertical line)"
      ],
      "price_axis_label": "USD per EUR",
      "rsi_axis_label": "RSI 14",
      "price_tick_labels": [
        "1.1350",
        "1.1400",
        "1.1450",
        "1.1500",
        "1.1550",
        "1.1600",
        "1.1650"
      ],
      "rsi_tick_labels": [
        "0",
        "30",
        "70",
        "100"
      ],
      "price_axis_limits": [
        "1.13179",
        "1.16903"
      ]
    },
    "bearish": {
      "type": "regular_bearish",
      "p1_index": 4532,
      "p2_index": 4545,
      "confirm_index": 4550,
      "p1_time": "2026-08-28 04:00",
      "p2_time": "2026-08-28 17:00",
      "confirm_time": "2026-08-28 22:00",
      "confirm_bar_closes": "23:00",
      "price_p1": "1.16549",
      "price_p2": "1.16588",
      "rsi_p1": "47.82",
      "rsi_p2": "28.83",
      "rsi_gap": "18.99",
      "bars_between_pivots": 13,
      "close_at_confirm": "1.15853",
      "rsi_at_confirm": "23.57",
      "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)",
      "title": "Regular bearish divergence: higher high, lower RSI",
      "subtitle": "EURUSD · H1 · RSI 14 (Wilder, close) · pivots 5 left / 5 right · terminal time",
      "info_text": [
        "① Pivot 1  2026-08-28 04:00  high 1.16549  RSI 47.82        ② Pivot 2  2026-08-28 17:00  high 1.16588  RSI 28.83",
        "③ Confirmed when the 22:00 bar closed, 5 closed bars after ②  ·  close of that bar 1.15853"
      ],
      "selection_rule": "Selected by fixed rule: largest RSI gap between the pivots among regular bearish detections with 12 bars before ① and 24 after ③ (outcome not used)",
      "first_bar_beyond_pivot2_within_24": null,
      "file": "images/img02_bearish.png",
      "width": 1920,
      "height": 1080,
      "sha256": "b1f3749393ac87a9ed1ebc95544727f0bcba09727efadaf4f3b9877bc24247b0",
      "window": {
        "first_index": 4520,
        "last_index": 4574,
        "bars": 55,
        "first_bar": "2026-08-27 16:00",
        "last_bar": "2026-08-31 22:00",
        "derived_csv_lines": "data/derived.csv lines 4522-4576"
      },
      "x_tick_labels": [
        "27 Aug 16:00",
        "28 Aug 02:00",
        "28 Aug 13:00",
        "31 Aug 00:00",
        "31 Aug 11:00",
        "31 Aug 22:00"
      ],
      "footer_text": [
        "Selected by fixed rule: largest RSI gap between the pivots among regular bearish detections with 12 bars before ① and 24 after ③ (outcome not used)",
        "MT5 terminal export, closed bars only · terminal time was UTC+3 at capture · gaps compressed (faint vertical line) · dotted line: level of pivot ②"
      ],
      "price_axis_label": "USD per EUR",
      "rsi_axis_label": "RSI 14",
      "price_tick_labels": [
        "1.1580",
        "1.1600",
        "1.1620",
        "1.1640",
        "1.1660"
      ],
      "rsi_tick_labels": [
        "0",
        "30",
        "70",
        "100"
      ],
      "price_axis_limits": [
        "1.15617",
        "1.16778"
      ]
    },
    "bullish": {
      "type": "regular_bullish",
      "p1_index": 2811,
      "p2_index": 2817,
      "confirm_index": 2822,
      "p1_time": "2026-05-20 11:00",
      "p2_time": "2026-05-20 17:00",
      "confirm_time": "2026-05-20 22:00",
      "confirm_bar_closes": "23:00",
      "price_p1": "1.15830",
      "price_p2": "1.15821",
      "rsi_p1": "32.46",
      "rsi_p2": "58.68",
      "rsi_gap": "26.22",
      "bars_between_pivots": 6,
      "close_at_confirm": "1.16273",
      "rsi_at_confirm": "60.86",
      "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)",
      "title": "Regular bullish divergence: lower low, higher RSI",
      "subtitle": "EURUSD · H1 · RSI 14 (Wilder, close) · pivots 5 left / 5 right · terminal time",
      "info_text": [
        "① Pivot 1  2026-05-20 11:00  low 1.15830  RSI 32.46        ② Pivot 2  2026-05-20 17:00  low 1.15821  RSI 58.68",
        "③ Confirmed when the 22:00 bar closed, 5 closed bars after ②  ·  close of that bar 1.16273"
      ],
      "selection_rule": "Selected by fixed rule: largest RSI gap between the pivots among regular bullish detections with 12 bars before ① and 24 after ③ (outcome not used)",
      "first_bar_beyond_pivot2_within_24": {
        "index": 2840,
        "time": "2026-05-21 16:00",
        "bars_after_confirm": 18,
        "price": "1.15757"
      },
      "file": "images/img03_bullish.png",
      "width": 1920,
      "height": 1080,
      "sha256": "39a6d8f27f7738d50894f29aa278b0843be6cb147b054e87487df7ad04ad8022",
      "window": {
        "first_index": 2799,
        "last_index": 2846,
        "bars": 48,
        "first_bar": "2026-05-19 23:00",
        "last_bar": "2026-05-21 22:00",
        "derived_csv_lines": "data/derived.csv lines 2801-2848"
      },
      "x_tick_labels": [
        "19 May 23:00",
        "20 May 08:00",
        "20 May 17:00",
        "21 May 03:00",
        "21 May 12:00",
        "21 May 22:00"
      ],
      "footer_text": [
        "Selected by fixed rule: largest RSI gap between the pivots among regular bullish detections with 12 bars before ① and 24 after ③ (outcome not used)",
        "MT5 terminal export, closed bars only · terminal time was UTC+3 at capture · gaps compressed (faint vertical line) · dotted line: level of pivot ②"
      ],
      "price_axis_label": "USD per EUR",
      "rsi_axis_label": "RSI 14",
      "price_tick_labels": [
        "1.1580",
        "1.1600",
        "1.1620",
        "1.1640"
      ],
      "rsi_tick_labels": [
        "0",
        "30",
        "70",
        "100"
      ],
      "price_axis_limits": [
        "1.15647",
        "1.16598"
      ]
    },
    "failed": {
      "type": "regular_bearish",
      "p1_index": 2042,
      "p2_index": 2049,
      "confirm_index": 2054,
      "p1_time": "2026-04-06 10:00",
      "p2_time": "2026-04-06 17:00",
      "confirm_time": "2026-04-06 22:00",
      "confirm_bar_closes": "23:00",
      "price_p1": "1.15682",
      "price_p2": "1.15710",
      "rsi_p1": "71.11",
      "rsi_p2": "53.23",
      "rsi_gap": "17.88",
      "bars_between_pivots": 7,
      "close_at_confirm": "1.15423",
      "rsi_at_confirm": "52.47",
      "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)",
      "title": "Failed divergence: price later went above ②",
      "subtitle": "EURUSD · H1 · RSI 14 (Wilder, close) · pivots 5 left / 5 right · terminal time",
      "info_text": [
        "① Pivot 1  2026-04-06 10:00  high 1.15682  RSI 71.11        ② Pivot 2  2026-04-06 17:00  high 1.15710  RSI 53.23",
        "③ Confirmed when the 22:00 bar closed, 5 closed bars after ②      ④ First high above ②: 2026-04-07 11:00, high 1.15751, 13 bars after ③"
      ],
      "selection_rule": "Selected by fixed rule: largest RSI gap among regular detections not in figures 2–3 where price went beyond ② within 24 bars after ③",
      "first_bar_beyond_pivot2_within_24": {
        "index": 2067,
        "time": "2026-04-07 11:00",
        "bars_after_confirm": 13,
        "price": "1.15751"
      },
      "file": "images/img04_failed.png",
      "width": 1920,
      "height": 1080,
      "sha256": "b4ed3821769c18e58f16d4b47a715774791c44dcc7061ed0381ecb09e7f54887",
      "window": {
        "first_index": 2030,
        "last_index": 2078,
        "bars": 49,
        "first_bar": "2026-04-03 22:00",
        "last_bar": "2026-04-07 22:00",
        "derived_csv_lines": "data/derived.csv lines 2032-2080"
      },
      "x_tick_labels": [
        "03 Apr 22:00",
        "06 Apr 07:00",
        "06 Apr 17:00",
        "07 Apr 02:00",
        "07 Apr 12:00",
        "07 Apr 22:00"
      ],
      "footer_text": [
        "Selected by fixed rule: largest RSI gap among regular detections not in figures 2–3 where price went beyond ② within 24 bars after ③",
        "MT5 terminal export, closed bars only · terminal time was UTC+3 at capture · gaps compressed (faint vertical line) · dotted line: level of pivot ②"
      ],
      "price_axis_label": "USD per EUR",
      "rsi_axis_label": "RSI 14",
      "price_tick_labels": [
        "1.1500",
        "1.1520",
        "1.1540",
        "1.1560",
        "1.1580",
        "1.1600",
        "1.1620"
      ],
      "rsi_tick_labels": [
        "0",
        "30",
        "70",
        "100"
      ],
      "price_axis_limits": [
        "1.14891",
        "1.16222"
      ]
    },
    "confirmation_lag": {
      "type": "regular_bullish",
      "p1_index": 4980,
      "p2_index": 4989,
      "confirm_index": 4994,
      "p1_time": "2026-09-23 20:00",
      "p2_time": "2026-09-24 05:00",
      "confirm_time": "2026-09-24 10:00",
      "confirm_bar_closes": "11:00",
      "price_p1": "1.13696",
      "price_p2": "1.13683",
      "rsi_p1": "33.02",
      "rsi_p2": "35.89",
      "rsi_gap": "2.87",
      "bars_between_pivots": 9,
      "close_at_confirm": "1.13924",
      "rsi_at_confirm": "47.77",
      "source": "data/divergences.csv (identical to data/mql5-divergences.csv per data/crosscheck.json)",
      "title": "Confirmation lag: 5 closed bars after the swing",
      "subtitle": "EURUSD · H1 · RSI 14 (Wilder, close) · pivots 5 left / 5 right · terminal time",
      "info_text": [
        "① Pivot 1  2026-09-23 20:00  low 1.13696  RSI 33.02        ② Pivot 2  2026-09-24 05:00  low 1.13683  RSI 35.89",
        "② bar closes at 06:00  ·  the right side needs 5 more closed bars  ·  ③ known when the 10:00 bar closes at 11:00"
      ],
      "panel_text": [
        "5 closed bars after ②",
        "Line ①–② and ▲ appear only once ③ has closed; before that the indicator shows no divergence",
        "+1",
        "+2",
        "+3",
        "+4",
        "+5"
      ],
      "pivot2_bar_closes": "06:00",
      "lag_bars": 5,
      "bars_after_confirm_in_export": 5,
      "lowest_low_after_confirm_in_export": {
        "index": 4997,
        "time": "2026-09-24 13:00",
        "low": "1.13611"
      },
      "selection_rule": "Selection rule (most recent regular detection with pivots at most 30 bars apart)",
      "file": "images/img05_confirmation_lag.png",
      "width": 1920,
      "height": 1080,
      "sha256": "dbfb4ebcb7a4f21efd1abffbd00d2d37c0af21e2d551c46ad96c31eb73679930",
      "window": {
        "first_index": 4974,
        "last_index": 4999,
        "bars": 26,
        "first_bar": "2026-09-23 14:00",
        "last_bar": "2026-09-24 15:00",
        "derived_csv_lines": "data/derived.csv lines 4976-5001"
      },
      "x_tick_labels": [
        "23 Sep 14:00",
        "23 Sep 19:00",
        "24 Sep 00:00",
        "24 Sep 05:00",
        "24 Sep 10:00",
        "24 Sep 15:00"
      ],
      "footer_text": [
        "Selected by fixed rule: the most recent regular detection with pivots at most 30 bars apart · the export ends 5 bars after ③",
        "MT5 terminal export, closed bars only · terminal time was UTC+3 at capture · gaps compressed (faint vertical line) · dotted line: level of pivot ②"
      ],
      "price_axis_label": "USD per EUR",
      "rsi_axis_label": "RSI 14",
      "price_tick_labels": [
        "1.1360",
        "1.1380",
        "1.1400",
        "1.1420"
      ],
      "rsi_tick_labels": [
        "0",
        "30",
        "70",
        "100"
      ],
      "price_axis_limits": [
        "1.13518",
        "1.14321"
      ]
    }
  }
}
