{
  "source": "ICMarketsSC-Demo / local MetaTrader 5 Python API",
  "sourceMetadata": {
    "symbol": "EURUSD",
    "timeframe": "H4",
    "file": "EURUSD-H4.csv",
    "bars": 4000,
    "requested": 4000,
    "first_mt5_time": "2024-03-26 08:00",
    "last_mt5_time": "2026-10-20 20:00",
    "digits": 5,
    "point": 1e-05,
    "chart_mode": 0,
    "description": "Euro vs US Dollar",
    "sha256": "34ae38bf65f6268b4a0b9ea3c44eccc6d031dafd687448fdfd10bd31a8e848b1"
  },
  "sourceCSVUnmodified": true,
  "timeBasis": "Original MT5 epoch retained; ISO encoding uses UTC conversion, but the broker's wall-clock offset is not independently verified. Chart labels must say original MT5 time, not UTC/local time.",
  "allBarsClosed": true,
  "selection": "Retrospective educational cases, deliberately including absent confirmation and invalidation; no sampled success rate or P&L. Fixed article conditions; no claims of live ex ante annotation.",
  "priceSide": "Bid",
  "noTradingOrMT5Connection": true,
  "intermediatePrecision": "Decimal, 50 significant digits; only presentation rounded",
  "quoteNormalization": "EURUSD digits=5: nearest 0.00001, ROUND_HALF_EVEN. Removes only binary float serialization tails; deviation verified <0.000001 point (1e-11 price). Raw OHLC strings retained in source and window CSVs. Indicator recurrence uses canonical points, no intermediate rounding.",
  "missingBars": "Available export records used in order; no invented flat bars; equal candle spacing is record sequence, not elapsed time",
  "cases": [
    {
      "code": "55",
      "kind": "engulf",
      "id": "real-eurusd-h4-engulfing-no-confirm-20260604",
      "at": 3406,
      "start": 3400,
      "stop": 3412,
      "tf": "H4",
      "rows": [
        {
          "time_raw_epoch": "1780444800",
          "time_mt5": "2026-06-03 00:00",
          "open": 116315,
          "high": 116315,
          "low": 116197,
          "close": 116287,
          "tick_volume": "4144",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3400,
          "raw_ohlc": {
            "open": "1.16315",
            "high": "1.16315",
            "low": "1.16197",
            "close": "1.16287"
          }
        },
        {
          "time_raw_epoch": "1780459200",
          "time_mt5": "2026-06-03 04:00",
          "open": 116288,
          "high": 116334,
          "low": 116243,
          "close": 116256,
          "tick_volume": "6103",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3401,
          "raw_ohlc": {
            "open": "1.16288",
            "high": "1.16334",
            "low": "1.16243",
            "close": "1.16256"
          }
        },
        {
          "time_raw_epoch": "1780473600",
          "time_mt5": "2026-06-03 08:00",
          "open": 116256,
          "high": 116271,
          "low": 116051,
          "close": 116082,
          "tick_volume": "10919",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3402,
          "raw_ohlc": {
            "open": "1.16256",
            "high": "1.16271",
            "low": "1.16051",
            "close": "1.16082"
          }
        },
        {
          "time_raw_epoch": "1780488000",
          "time_mt5": "2026-06-03 12:00",
          "open": 116082,
          "high": 116228,
          "low": 115968,
          "close": 116003,
          "tick_volume": "11835",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3403,
          "raw_ohlc": {
            "open": "1.16082",
            "high": "1.16228",
            "low": "1.15968",
            "close": "1.16003"
          }
        },
        {
          "time_raw_epoch": "1780502400",
          "time_mt5": "2026-06-03 16:00",
          "open": 116004,
          "high": 116130,
          "low": 115949,
          "close": 116002,
          "tick_volume": "16871",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3404,
          "raw_ohlc": {
            "open": "1.16004",
            "high": "1.1613",
            "low": "1.15949",
            "close": "1.16002"
          }
        },
        {
          "time_raw_epoch": "1780516800",
          "time_mt5": "2026-06-03 20:00",
          "open": 116005,
          "high": 116034,
          "low": 115954,
          "close": 115981,
          "tick_volume": "6184",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3405,
          "raw_ohlc": {
            "open": "1.16005",
            "high": "1.16034",
            "low": "1.15954",
            "close": "1.15981"
          }
        },
        {
          "time_raw_epoch": "1780531200",
          "time_mt5": "2026-06-04 00:00",
          "open": 115965,
          "high": 116125,
          "low": 115945,
          "close": 116068,
          "tick_volume": "5139",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3406,
          "raw_ohlc": {
            "open": "1.15965",
            "high": "1.16125",
            "low": "1.15945",
            "close": "1.16068"
          }
        },
        {
          "time_raw_epoch": "1780545600",
          "time_mt5": "2026-06-04 04:00",
          "open": 116068,
          "high": 116129,
          "low": 116025,
          "close": 116098,
          "tick_volume": "7085",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3407,
          "raw_ohlc": {
            "open": "1.16068",
            "high": "1.16129",
            "low": "1.16025",
            "close": "1.16098"
          }
        },
        {
          "time_raw_epoch": "1780560000",
          "time_mt5": "2026-06-04 08:00",
          "open": 116098,
          "high": 116150,
          "low": 115985,
          "close": 116129,
          "tick_volume": "9679",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3408,
          "raw_ohlc": {
            "open": "1.16098",
            "high": "1.1615",
            "low": "1.15985",
            "close": "1.16129"
          }
        },
        {
          "time_raw_epoch": "1780574400",
          "time_mt5": "2026-06-04 12:00",
          "open": 116129,
          "high": 116450,
          "low": 116129,
          "close": 116369,
          "tick_volume": "13542",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3409,
          "raw_ohlc": {
            "open": "1.16129",
            "high": "1.1645",
            "low": "1.16129",
            "close": "1.16369"
          }
        },
        {
          "time_raw_epoch": "1780588800",
          "time_mt5": "2026-06-04 16:00",
          "open": 116370,
          "high": 116400,
          "low": 116224,
          "close": 116234,
          "tick_volume": "12372",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3410,
          "raw_ohlc": {
            "open": "1.1637",
            "high": "1.164",
            "low": "1.16224",
            "close": "1.16234"
          }
        },
        {
          "time_raw_epoch": "1780603200",
          "time_mt5": "2026-06-04 20:00",
          "open": 116234,
          "high": 116239,
          "low": 116080,
          "close": 116107,
          "tick_volume": "5402",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3411,
          "raw_ohlc": {
            "open": "1.16234",
            "high": "1.16239",
            "low": "1.1608",
            "close": "1.16107"
          }
        }
      ],
      "calc": {
        "patternHigh": 116125,
        "patternLow": 115945,
        "patternBodyOne": [
          115981,
          116005
        ],
        "patternBodyTwo": [
          115965,
          116068
        ],
        "contextCloses": [
          116082,
          116003,
          116002
        ],
        "recognisedAfter": "2026-06-04 04:00",
        "nextClose": 116098,
        "confirmed": false,
        "confirmationKnownAfter": "2026-06-04 08:00",
        "invalidatedAtIndex": null,
        "invalidatedAfter": null,
        "invalidatingClose": null
      },
      "markers": {
        "3405": "1",
        "3406": "2",
        "3407": "3"
      },
      "title": {
        "PL": "Objęcie bez potwierdzenia",
        "EN": "Engulfing without confirmation"
      }
    },
    {
      "code": "55",
      "kind": "engulf",
      "id": "real-eurusd-h4-engulfing-invalidated-20260306",
      "at": 3026,
      "start": 3020,
      "stop": 3032,
      "tf": "H4",
      "rows": [
        {
          "time_raw_epoch": "1772726400",
          "time_mt5": "2026-03-05 16:00",
          "open": 115973,
          "high": 116092,
          "low": 115588,
          "close": 115879,
          "tick_volume": "27989",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3020,
          "raw_ohlc": {
            "open": "1.15973",
            "high": "1.16092",
            "low": "1.15588",
            "close": "1.15879"
          }
        },
        {
          "time_raw_epoch": "1772740800",
          "time_mt5": "2026-03-05 20:00",
          "open": 115878,
          "high": 116104,
          "low": 115701,
          "close": 116081,
          "tick_volume": "18326",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3021,
          "raw_ohlc": {
            "open": "1.15878",
            "high": "1.16104",
            "low": "1.15701",
            "close": "1.1608100000000001"
          }
        },
        {
          "time_raw_epoch": "1772755200",
          "time_mt5": "2026-03-06 00:00",
          "open": 116080,
          "high": 116202,
          "low": 116033,
          "close": 116151,
          "tick_volume": "9007",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3022,
          "raw_ohlc": {
            "open": "1.1608",
            "high": "1.16202",
            "low": "1.16033",
            "close": "1.16151"
          }
        },
        {
          "time_raw_epoch": "1772769600",
          "time_mt5": "2026-03-06 04:00",
          "open": 116150,
          "high": 116212,
          "low": 116057,
          "close": 116064,
          "tick_volume": "7739",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3023,
          "raw_ohlc": {
            "open": "1.1615",
            "high": "1.16212",
            "low": "1.1605699999999999",
            "close": "1.16064"
          }
        },
        {
          "time_raw_epoch": "1772784000",
          "time_mt5": "2026-03-06 08:00",
          "open": 116064,
          "high": 116182,
          "low": 115717,
          "close": 115742,
          "tick_volume": "15034",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3024,
          "raw_ohlc": {
            "open": "1.16064",
            "high": "1.16182",
            "low": "1.15717",
            "close": "1.1574200000000001"
          }
        },
        {
          "time_raw_epoch": "1772798400",
          "time_mt5": "2026-03-06 12:00",
          "open": 115742,
          "high": 115927,
          "low": 115504,
          "close": 115550,
          "tick_volume": "22369",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3025,
          "raw_ohlc": {
            "open": "1.1574200000000001",
            "high": "1.15927",
            "low": "1.15504",
            "close": "1.1555"
          }
        },
        {
          "time_raw_epoch": "1772812800",
          "time_mt5": "2026-03-06 16:00",
          "open": 115549,
          "high": 116131,
          "low": 115458,
          "close": 115957,
          "tick_volume": "32807",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3026,
          "raw_ohlc": {
            "open": "1.15549",
            "high": "1.16131",
            "low": "1.15458",
            "close": "1.15957"
          }
        },
        {
          "time_raw_epoch": "1772827200",
          "time_mt5": "2026-03-06 20:00",
          "open": 115957,
          "high": 116214,
          "low": 115929,
          "close": 116161,
          "tick_volume": "16393",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3027,
          "raw_ohlc": {
            "open": "1.15957",
            "high": "1.16214",
            "low": "1.15929",
            "close": "1.16161"
          }
        },
        {
          "time_raw_epoch": "1773014400",
          "time_mt5": "2026-03-09 00:00",
          "open": 115464,
          "high": 115645,
          "low": 115160,
          "close": 115174,
          "tick_volume": "19141",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3028,
          "raw_ohlc": {
            "open": "1.15464",
            "high": "1.15645",
            "low": "1.1516",
            "close": "1.15174"
          }
        },
        {
          "time_raw_epoch": "1773028800",
          "time_mt5": "2026-03-09 04:00",
          "open": 115172,
          "high": 115296,
          "low": 115072,
          "close": 115259,
          "tick_volume": "20620",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3029,
          "raw_ohlc": {
            "open": "1.15172",
            "high": "1.15296",
            "low": "1.15072",
            "close": "1.15259"
          }
        },
        {
          "time_raw_epoch": "1773043200",
          "time_mt5": "2026-03-09 08:00",
          "open": 115259,
          "high": 115715,
          "low": 115152,
          "close": 115346,
          "tick_volume": "28219",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3030,
          "raw_ohlc": {
            "open": "1.15259",
            "high": "1.1571500000000001",
            "low": "1.15152",
            "close": "1.15346"
          }
        },
        {
          "time_raw_epoch": "1773057600",
          "time_mt5": "2026-03-09 12:00",
          "open": 115348,
          "high": 115729,
          "low": 115311,
          "close": 115533,
          "tick_volume": "26423",
          "spread_points": "0",
          "real_volume": "0",
          "index": 3031,
          "raw_ohlc": {
            "open": "1.15348",
            "high": "1.15729",
            "low": "1.15311",
            "close": "1.15533"
          }
        }
      ],
      "calc": {
        "patternHigh": 116131,
        "patternLow": 115458,
        "patternBodyOne": [
          115550,
          115742
        ],
        "patternBodyTwo": [
          115549,
          115957
        ],
        "contextCloses": [
          116151,
          116064,
          115742
        ],
        "recognisedAfter": "2026-03-06 20:00",
        "nextClose": 116161,
        "confirmed": true,
        "confirmationKnownAfter": "2026-03-07 00:00",
        "invalidatedAtIndex": 3028,
        "invalidatedAfter": "2026-03-09 04:00",
        "invalidatingClose": 115174
      },
      "markers": {
        "3025": "1",
        "3026": "2",
        "3027": "3",
        "3028": "4"
      },
      "title": {
        "PL": "Potwierdzenie nie usuwa ryzyka",
        "EN": "Confirmation does not remove risk"
      }
    }
  ]
}