{
  "version": "lab58-practice-v1",
  "source": "ICMarketsSC-Demo / closed exported Bid H1",
  "time_basis": "Original MT5 bar-opening labels. Broker wall-clock offset is not independently verified; never relabel these hours UTC/local. Recognition time is an earliest eligibility boundary after a bar ends, not measured live received_at.",
  "source_provenance_sha256": "a714060ac85cb9ded6c80b70ff6e9d76095c17ccbf9c97a79e5b748619793287",
  "frozen_rules": {
    "rule_version": "fm58-practice-v1",
    "purpose": "Two distinct teaching episodes selected without inspecting later outcomes. Preparation only, no article changes.",
    "frozen_before_first_scan": true,
    "dataset_order": [
      "USDJPY-H1.csv",
      "GBPUSD-H1.csv",
      "EURUSD-H1.csv"
    ],
    "selection_order": "Earliest eligible recognition epoch across all datasets; listed dataset order breaks equal-time ties. Select the first match for each task. Do not filter on later prices, reversal, profitability, visual beauty or number of examples.",
    "original_data": "patterns-5-4-real-2026-10-21/data; original provenance SHA-256 and each selected dataset SHA-256 verified before calculation",
    "price_input": "Closed Bid OHLC. Close is the input to RSI and Bollinger/SMA; High/Low windows are the input to stochastic and True Range. No Ask, spreads, fills or invented ticks.",
    "decimal_policy": "Quantise only binary-float CSV serialisation noise to the original provider digits, with maximum permitted absolute adjustment below 1e-12. Retain source strings and original archive SHA.",
    "time_basis": "Original MT5 bar-opening labels. Broker wall-clock offset is not independently verified; never relabel these hours UTC/local. Recognition time is an earliest eligibility boundary after a bar ends, not measured live received_at.",
    "source_prefix": "Indicators always use every exported preceding record from original index 0. No reinitialisation at the case window, quarter start or image edge.",
    "rsi14": {
      "input": "Close",
      "seed": "Mean of positive and negative parts of first 14 close-to-close changes; first RSI at source index 14",
      "recurrence": "U_t=(13*U_prev+gain_t)/14; D_t=(13*D_prev+loss_t)/14; RSI=100*U/(U+D), no intermediate rounding",
      "zero_policy": "Before seed: unavailable. U=D=0: unavailable. Positive U with D=0:100. U=0 with positive D:0."
    },
    "divergence": {
      "centre_range_start_inclusive": "2026-01-01 00:00",
      "recognition_range_end_exclusive": "2026-04-01 00:00",
      "pivot": "Joint strict local maxima or minima of Close AND RSI at the same centre, greater/lower than both two left and two right closed bars. Equalities and unavailable RSI excluded. This chosen definition compares close-price pivots, not High/Low wicks.",
      "pairing": "Consecutive confirmed joint maxima, or consecutive confirmed joint minima, of the same kind. Never skip an intervening same-kind joint pivot to improve divergence.",
      "spacing_bars_inclusive": [
        5,
        30
      ],
      "continuity": "Every bar from first centre minus 2 through second centre plus 2 must be exactly one nominal hour apart; do not infer a cause of gaps.",
      "bearish": "Close2 >= Close1 + one pip; RSI1 >=60; RSI2 <= RSI1 -3 points",
      "bullish": "Close2 <= Close1 - one pip; RSI1 <=40; RSI2 >= RSI1 +3 points",
      "recognition": "Both right bars of pivot2 must close. The selected event is recorded on index pivot2+2; earliest eligibility is that bar's opening epoch plus 3600 seconds, subject to receiving its final record.",
      "threshold_meaning": "One pip and 3 RSI points are fixed pedagogical separation thresholds, not optimised trading parameters or a statistical edge.",
      "before_frame": "At close of second proposed pivot centre: show it as provisional, not confirmed, with only data then available.",
      "recognition_frame": "At close of pivot2+2: joint pivot and divergence first become testable under this rule.",
      "after_horizon_observed_H1": 12,
      "after_use": "Reveal the next 12 observed closed H1 bars after recognition, without selecting for their direction. Record calendar gaps explicitly. This outcome is not an entry/exit or profitability measure.",
      "plot_context_bars_before_first_pivot": 24
    },
    "stochastic_persistence": {
      "run_start_range_inclusive": "2026-04-01 00:00",
      "recognition_range_end_exclusive": "2026-07-01 00:00",
      "K_period": 14,
      "slowing": 3,
      "D_period": 3,
      "K_formula": "For each bar compute Ln=min(Low over latest 14), Hn=max(High over latest 14), A=Close-Ln, B=Hn-Ln. SlowK=100*sum(A over latest 3)/sum(B over latest 3). This is the disclosed Low/High ratio-of-sums reconstruction, not SMA of 3 raw %K values or a terminal readback.",
      "D_formula": "SMA of latest 3 available SlowK values; no value until complete window",
      "zero_policy": "A zero summed denominator makes SlowK unavailable and resets a streak; no carry-forward or fabricated value",
      "extreme_upper_inclusive": 80,
      "extreme_lower_inclusive": 20,
      "consecutive_extreme_bars": 6,
      "trigger": "First completion of a six-consecutive-bar run. Rearm only after SlowK leaves that extreme zone. The six bars must have exact hourly steps and all open inside the Q2 case range.",
      "past_only_upward_descriptor": "At sixth bar: Close > SMA50, SMA50 > SMA50 ten observed bars earlier, and Close > Close twenty observed bars earlier",
      "past_only_downward_descriptor": "At sixth bar: Close < SMA50, SMA50 < SMA50 ten observed bars earlier, and Close < Close twenty observed bars earlier",
      "direction_matching": "Upper extreme requires upward descriptor; lower extreme requires downward descriptor. These are explicit past-data descriptors, not proof of a future trend regime.",
      "descriptor_continuity": "The latest 60 bars used for the descriptor must be exactly one hour apart. Reject a candidate with a gap in that interval, without altering thresholds.",
      "ATR_context": "TR_i=max(High-Low,abs(High-Close_prev),abs(Low-Close_prev)) for i>=1. ATR14=SMA of latest 14 TR values, first at index14. Explicit MT5-code-style SMA variant, not Wilder RMA. Pure context, no selection gate or independent vote.",
      "Bollinger_context": "SMA20 Close ±2 population standard deviations over the same 20 closes, divisor20. Full windows only. Pure context, no selection gate or independent vote.",
      "before_frame": "At fifth bar of the run: sixth qualifying reading is not yet known; all displayed trend/context readings stop there.",
      "recognition_frame": "At sixth bar close: six-reading persistence is first established under the frozen rule.",
      "after_horizon_observed_H1": 12,
      "plot_context_bars_before_run": 36
    },
    "disjointness": "The two selected case windows must not overlap one another or old EURUSD 2025-12-02 through 2025-12-04. Failure is reported, not repaired by selecting a more attractive later outcome.",
    "no_match_policy": "Report no eligible case under v1; do not silently relax dates, thresholds, dataset ordering or pivot definitions. A revision would require a new explicit rule version before a new scan.",
    "not_authorised": [
      "MT5 calls",
      "trades",
      "article edits",
      "NAS writes",
      "deploy",
      "statistical performance claims"
    ]
  },
  "frozen_rules_sha256": "363e9e45999555a246d2bfed535258de92839cd8cdbf40595d813c6878790e56",
  "selection_seal_sha256": "b87297ccde5fe6509d1669940ef547f0b24369ac40748ae99b9c51836b784605",
  "source_datasets": [
    {
      "file": "USDJPY-H1.csv",
      "bars": 6000,
      "digits": 3,
      "chart_mode": 0,
      "sha256": "143ed1ae9c90c1da7890bbf858911822e8590999180ff4a765689a4718d3530d",
      "public_file": "source-USDJPY-H1.csv"
    },
    {
      "file": "GBPUSD-H1.csv",
      "bars": 6000,
      "digits": 5,
      "chart_mode": 0,
      "sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9",
      "public_file": "source-GBPUSD-H1.csv"
    },
    {
      "file": "EURUSD-H1.csv",
      "bars": 6000,
      "digits": 5,
      "chart_mode": 0,
      "sha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef",
      "public_file": "source-EURUSD-H1.csv"
    }
  ],
  "cases": {
    "rsi_divergence": {
      "case_id": "lab58-rsi-pivots",
      "selected_identity": {
        "dataset": "EURUSD-H1.csv",
        "event_index": 1048,
        "event_epoch": 1767632400,
        "direction": "bullish",
        "first_pivot_center": 1037,
        "second_pivot_center": 1046
      },
      "eligible_not_before_mt5": "2026-01-05 17:00",
      "received_at_measured": false,
      "frames": {
        "before": {
          "csv": "lab58-rsi-pivots-before.csv",
          "source_csv_sha256": "d87ef11f3640e820e88f114178ea7ce6fcd2f6999f868f1f92ca99b9481e5d97",
          "original_source_csv_sha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef",
          "last_visible_index": 1046,
          "last_visible_bar": "2026-01-05 14:00",
          "visible_close_available_not_before": "2026-01-05 15:00",
          "plot_start_index": 1013,
          "indicator_readings": {
            "rsi14": "31.18126918466442338514545078808489800011",
            "slowK14_3": "19.56368754398311048557353976073187895848",
            "signalD3": "23.16864135778708354072002655622378255163",
            "ATR14_SMA": "0.001182857142857142857142857142857142857143",
            "SMA50": "1.172381",
            "BB_SMA20": "1.169739",
            "BB_sigma_population20": "0.001730473634586785607059900067609855463401",
            "BB_upper20_2": "1.173199947269173571214119800135219710927",
            "BB_lower20_2": "1.166278052730826428785880199864780289073"
          },
          "scale_from_visible_only": true,
          "full_prefix_rows": 1047
        },
        "after": {
          "csv": "lab58-rsi-pivots-after.csv",
          "source_csv_sha256": "47ae1fe471a58e96458f758490c1693b9523b7083199d781308f05e4ac91be63",
          "original_source_csv_sha256": "0f58687cc1be679669de57ce3c128d708a51e415f8a2a7c614909fae97a49fef",
          "last_visible_index": 1060,
          "last_visible_bar": "2026-01-06 04:00",
          "visible_close_available_not_before": "2026-01-06 05:00",
          "plot_start_index": 1013,
          "indicator_readings": {
            "rsi14": "65.20418407341581531161596975200743083284",
            "slowK14_3": "92.85387081997251488776912505726065048099",
            "signalD3": "87.06479258481787480158221592455476170187",
            "ATR14_SMA": "0.00116",
            "SMA50": "1.1715566",
            "BB_SMA20": "1.1704965",
            "BB_sigma_population20": "0.002025367312365833556976593934628943295422",
            "BB_upper20_2": "1.174547234624731667113953187869257886591",
            "BB_lower20_2": "1.166445765375268332886046812130742113409"
          },
          "scale_from_visible_only": true,
          "full_prefix_rows": 1061
        }
      },
      "recognition": {
        "source_index": 1048,
        "bar_open_mt5": "2026-01-05 16:00",
        "OHLC": {
          "open": "1.16745",
          "high": "1.16875",
          "low": "1.16733",
          "close": "1.16857"
        },
        "rsi14": "42.17306683120122125958769233422709160996",
        "slowK14_3": "29.81843575418994413407821229050279329609",
        "signalD3": "22.35402246440382976024264085378914884610",
        "ATR14_SMA": "0.001253571428571428571428571428571428571429",
        "SMA50": "1.172096",
        "BB_SMA20": "1.16929",
        "BB_sigma_population20": "0.001527389930567829820534946598381478899228",
        "BB_upper20_2": "1.172344779861135659641069893196762957798",
        "BB_lower20_2": "1.166235220138864340358930106803237042202"
      },
      "fixed_after_horizon_records": 12,
      "after_gaps": []
    },
    "stochastic_persistence": {
      "case_id": "lab58-stochastic-context",
      "selected_identity": {
        "dataset": "GBPUSD-H1.csv",
        "event_index": 2590,
        "event_epoch": 1775257200,
        "direction": "downward"
      },
      "eligible_not_before_mt5": "2026-04-03 23:00",
      "received_at_measured": false,
      "frames": {
        "before": {
          "csv": "lab58-stochastic-context-before.csv",
          "source_csv_sha256": "e35b22ef6e086433d74c1835eb2adf57d94fb60d2997a8fd3157fc3fe57c0614",
          "original_source_csv_sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9",
          "last_visible_index": 2589,
          "last_visible_bar": "2026-04-03 21:00",
          "visible_close_available_not_before": "2026-04-03 22:00",
          "plot_start_index": 2549,
          "indicator_readings": {
            "rsi14": "30.88452094572641080318020716500555507852",
            "slowK14_3": "6.221045665122435473196558570483123759100",
            "signalD3": "6.85660499469077152415691444600628832399",
            "ATR14_SMA": "0.001112857142857142857142857142857142857143",
            "SMA50": "1.3236092",
            "BB_SMA20": "1.322229",
            "BB_sigma_population20": "0.001532066904544315257822357116886646387433",
            "BB_upper20_2": "1.325293133809088630515644714233773292775",
            "BB_lower20_2": "1.319164866190911369484355285766226707225"
          },
          "scale_from_visible_only": true,
          "full_prefix_rows": 2590
        },
        "after": {
          "csv": "lab58-stochastic-context-after.csv",
          "source_csv_sha256": "085a2ee05008288a6a340e40ef81068d66a82fffb8dc71a579f396205884b307",
          "original_source_csv_sha256": "5289cd58e0fb935e0c65f0f57ac5047b4f27db5f8e6ed29fe937c559baba9df9",
          "last_visible_index": 2602,
          "last_visible_bar": "2026-04-06 10:00",
          "visible_close_available_not_before": "2026-04-06 11:00",
          "plot_start_index": 2549,
          "indicator_readings": {
            "rsi14": "69.11710195137709014968022888122643081039",
            "slowK14_3": "89.74956319161327897495631916132789749563",
            "signalD3": "86.14582249754515023985384128085940204077",
            "ATR14_SMA": "0.001497142857142857142857142857142857142857",
            "SMA50": "1.3216742",
            "BB_SMA20": "1.320438",
            "BB_sigma_population20": "0.001489290435073024968764627617425383236557",
            "BB_upper20_2": "1.323416580870146049937529255234850766473",
            "BB_lower20_2": "1.317459419129853950062470744765149233527"
          },
          "scale_from_visible_only": true,
          "full_prefix_rows": 2603
        }
      },
      "recognition": {
        "source_index": 2590,
        "bar_open_mt5": "2026-04-03 22:00",
        "OHLC": {
          "open": "1.31919",
          "high": "1.31950",
          "low": "1.31910",
          "close": "1.31930"
        },
        "rsi14": "31.77792900319703762225061069869419944751",
        "slowK14_3": "6.470211402946828955797565663036515054452",
        "signalD3": "6.896158475633658379437540715762920865527",
        "ATR14_SMA": "0.001057857142857142857142857142857142857143",
        "SMA50": "1.32336",
        "BB_SMA20": "1.3220445",
        "BB_sigma_population20": "0.001647174778218753566888378762248632366689",
        "BB_upper20_2": "1.325338849556437507133776757524497264733",
        "BB_lower20_2": "1.318750150443562492866223242475502735267"
      },
      "fixed_after_horizon_records": 12,
      "after_gaps": [
        {
          "after_open": "2026-04-03 23:00",
          "next_open": "2026-04-06 00:00",
          "seconds": 176400
        }
      ]
    }
  },
  "reproduction_scope": "Source archives, exact first-match selection, indicator calculations and exact before/after prefixes; no live received_at, execution model or profitability test.",
  "graphics": [
    {
      "language": "pl",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-before",
      "frame": "before",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-rsi-pivots-before-pl.svg",
      "sha256": "03d1c4beab5a0436d0335f87eaab417b06e1b15f624b32fa2abba3d1679a0d7d",
      "width": 1000,
      "height": 1334,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 1.16585,
          "max": 1.17763,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 214.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 624.4,
            "height": 205
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-before",
      "frame": "before",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-rsi-pivots-before-pl-mobile.svg",
      "sha256": "c19e06ff0a4a7066e4c76d92a3b47e73c3159390683cee23aed98da8191c4205",
      "width": 400,
      "height": 1315,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 1.16585,
          "max": 1.17763,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 224.54999999999998,
            "height": 250
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 579.55,
            "height": 185
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-after",
      "frame": "after",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-rsi-pivots-after-pl.svg",
      "sha256": "e1fc8fd8aa109ebd1c42783bd5b8c773d22f1bae0c56654a131cadfe3d54852c",
      "width": 1000,
      "height": 1396,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 1.1646404,
          "max": 1.1777596000000001,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 241.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 651.4,
            "height": 205
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-after",
      "frame": "after",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-rsi-pivots-after-pl-mobile.svg",
      "sha256": "facf25ed3c93f27e507df51cb84fa75e2ada48208782ef60534f4d8d5624aba5",
      "width": 400,
      "height": 1372,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 1.1646404,
          "max": 1.1777596000000001,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 251.54999999999998,
            "height": 250
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 606.55,
            "height": 185
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-before",
      "frame": "before",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-stochastic-context-before-pl.svg",
      "sha256": "36f506331f47c1e1537bb4b52f5485703d765fa4ef04af7326d4ecbecd1df66e",
      "width": 1000,
      "height": 1744,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 212.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 622.4,
            "height": 205
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 938.4,
            "height": 145
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-before",
      "frame": "before",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-stochastic-context-before-pl-mobile.svg",
      "sha256": "dc1a43140558d127dff296de6d2992956d0e26668f69e81a48daed46ef472c29",
      "width": 400,
      "height": 1741,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 228.35,
            "height": 250
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 611.4,
            "height": 185
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 901.6,
            "height": 120
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-after",
      "frame": "after",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-stochastic-context-after-pl.svg",
      "sha256": "74f33e4e06575ac75d6bd8f65bfba45995e9a2b6e0c53823e2c7eac397002e8a",
      "width": 1000,
      "height": 1807,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 239.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 649.4,
            "height": 205
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 965.4,
            "height": 145
          }
        }
      ]
    },
    {
      "language": "pl",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-after",
      "frame": "after",
      "file": "pl/analiza-techniczna/oscylatory-wskazniki-momentum/media/lab58-stochastic-context-after-pl-mobile.svg",
      "sha256": "8200491461764e625955f3970beb5cf0fde41e0656f0eb41a71ef1d90322bc3b",
      "width": 400,
      "height": 1847,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 255.35,
            "height": 250
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 638.4,
            "height": 185
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 928.6,
            "height": 120
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-before",
      "frame": "before",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-rsi-pivots-before-en.svg",
      "sha256": "2bbf0296c532c744c5552b1e45dc9a98e8069c58b84fc5ddaa3b46854dc63871",
      "width": 1000,
      "height": 1334,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 1.16585,
          "max": 1.17763,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 214.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 624.4,
            "height": 205
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-before",
      "frame": "before",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-rsi-pivots-before-en-mobile.svg",
      "sha256": "1f352b3554448be7e5b700d5caa5b624ea58f6383d5776d280c9dcfe42542b46",
      "width": 400,
      "height": 1340,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 1.16585,
          "max": 1.17763,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 224.54999999999998,
            "height": 250
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1046,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 579.55,
            "height": 185
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-after",
      "frame": "after",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-rsi-pivots-after-en.svg",
      "sha256": "ac5af993a237d551bac7b7111de1b4b165b7c8e38a5846f94c8ca8a4ccf48e33",
      "width": 1000,
      "height": 1396,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 1.1646404,
          "max": 1.1777596000000001,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 241.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 651.4,
            "height": 205
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "rsi_divergence",
      "key": "lab58-rsi-pivots-after",
      "frame": "after",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-rsi-pivots-after-en-mobile.svg",
      "sha256": "22bfaa446c66bee62e43747ea2106b1d6fb138f8fe05fb39ad32b9c5b8ed6fbe",
      "width": 400,
      "height": 1336,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 1.1646404,
          "max": 1.1777596000000001,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 215.29999999999998,
            "height": 250
          }
        },
        {
          "panel": "RSI",
          "first_visible_source_index": 1013,
          "last_visible_source_index": 1060,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 570.3,
            "height": 185
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-before",
      "frame": "before",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-stochastic-context-before-en.svg",
      "sha256": "fb63034e1b22abc732cd34b38c062d7d9b9e9730da994923ba31753862225a6e",
      "width": 1000,
      "height": 1744,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 212.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 622.4,
            "height": 205
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 938.4,
            "height": 145
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-before",
      "frame": "before",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-stochastic-context-before-en-mobile.svg",
      "sha256": "d92ea19cb3c161da590a7da0a203240c722a6e5617f5e210ab6f696eff0fe525",
      "width": 400,
      "height": 1741,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 228.35,
            "height": 250
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 611.4,
            "height": 185
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2589,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 901.6,
            "height": 120
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-after",
      "frame": "after",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-stochastic-context-after-en.svg",
      "sha256": "921a74dbe5d0a17c8fd6747d8c5724bde9b83ab6f0e3755d3352380bc02ac50d",
      "width": 1000,
      "height": 1807,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 239.39999999999998,
            "height": 305
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 649.4,
            "height": 205
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 92,
            "x1": 976,
            "top": 965.4,
            "height": 145
          }
        }
      ]
    },
    {
      "language": "en",
      "case_kind": "stochastic_persistence",
      "key": "lab58-stochastic-context-after",
      "frame": "after",
      "file": "en/technical-analysis/oscillators-momentum/media/lab58-stochastic-context-after-en-mobile.svg",
      "sha256": "0b6aa053d262f0cae8f4163ed85000c194d47298dee1bf1c2be46b4e285c0585",
      "width": 400,
      "height": 1847,
      "scales": [
        {
          "panel": "price",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 1.3138202995563877,
          "max": 1.3392474963354608,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 255.35,
            "height": 250
          }
        },
        {
          "panel": "stochastic",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 0,
          "max": 100,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Fixed 0–100 indicator domain, independent of all future observations",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 638.4,
            "height": 185
          }
        },
        {
          "panel": "ATR",
          "first_visible_source_index": 2549,
          "last_visible_source_index": 2602,
          "min": 4.838928571428571,
          "max": 27.096785714285716,
          "x_rule": "Observed H1 records, explicit 2-slot breaks at non-hourly steps; not elapsed-time spacing",
          "scale_rule": "Only plotted values through last_visible_source_index, plus fixed padding",
          "plot": {
            "x0": 78,
            "x1": 376,
            "top": 928.6,
            "height": 120
          }
        }
      ]
    }
  ]
}
