{ "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"] }