NO_SETUP
PH
Session 2026-10-01 · Knowledge cutoff 2026-10-02T06:27:18.822659Z
Options intelligence for PH (descriptive options context; scan run 361 is not re-ranked by it) · Monitor PH (what changed since the previous comparable session)
Structural research evidence. Historical bars observed by this cutoff are reconstructed data, not a claim of historical as-traded availability.
- close
- 965.88
- sma50
- 988.4716
- sma150
- 945.876
- sma200
- 944.46005
- rsi14
- 49.541943
- ema20
- 964.227147
- atr14
- 21.036567
- resistance
- 977.88745
- distance pct
- 1.227897
- extension atr
- 0.07857
- SPY · RS20 fraction
- 0.018909
- QQQ · RS20 fraction
- -0.028853
- distinct touches
- 2
The resistance line is selected at this snapshot. It does not assert that the level was known at every earlier chart date.
Hard requirements
confirmed resistanceMet
- resistance
- 977.88745
Comparison: exists · eligible: true · Unit: comparison
Data status: complete
Exact versioned evidence
{
"name": "confirmed_resistance",
"category": "hard",
"observed": [
[
"resistance",
977.88745
]
],
"operator": "exists",
"threshold": [
[
"eligible",
true
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"structure",
"1"
]
],
"source_evidence": [],
"pivots": [
{
"session": "2026-07-16",
"price": 977.3999,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-07-20",
"confirmation_time": "2026-07-20T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-04",
"price": 978.375,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-09",
"confirmation_time": "2026-09-09T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"sessions": [],
"available_at": "2026-09-24T11:59:33.803398Z"
}distance to resistanceMet
- distance_pct
- 1.2278969323105589
- resistance
- 977.88745
- close
- 965.88
Comparison: inclusive_between · min: 0, max: 3 · Unit: percent
Data status: complete
Exact versioned evidence
{
"name": "distance_to_resistance",
"category": "hard",
"observed": [
[
"distance_pct",
1.2278969323105589
],
[
"resistance",
977.88745
],
[
"close",
965.88
]
],
"operator": "inclusive_between",
"threshold": [
[
"min",
0
],
[
"max",
3
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "percent",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"close",
"1"
]
],
"source_evidence": [
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}intermediate trendNot met
- close
- 965.88
- sma50
- 988.4716000000001
Comparison: > · right_operand: sma50 · Unit: comparison
Data status: complete
Exact versioned evidence
{
"name": "intermediate_trend",
"category": "hard",
"observed": [
[
"close",
965.88
],
[
"sma50",
988.4716000000001
]
],
"operator": ">",
"threshold": [
[
"right_operand",
"sma50"
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"close",
"1"
],
[
"sma50",
"1"
]
],
"source_evidence": [
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma50",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 988.4716000000001,
"parameters": [
[
"required_observations",
50
]
],
"data_status": "complete",
"reason": null,
"observations_used": 50,
"observations_required": 50,
"warmup": false,
"input_start": "2026-07-23",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}long term trendMet
- sma150
- 945.876
- sma200
- 944.46005
Comparison: >= · right_operand: sma200 · Unit: comparison
Data status: complete
Exact versioned evidence
{
"name": "long_term_trend",
"category": "hard",
"observed": [
[
"sma150",
945.876
],
[
"sma200",
944.46005
]
],
"operator": ">=",
"threshold": [
[
"right_operand",
"sma200"
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"sma150",
"1"
],
[
"sma200",
"1"
]
],
"source_evidence": [
{
"name": "sma150",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 945.876,
"parameters": [
[
"required_observations",
150
]
],
"data_status": "complete",
"reason": null,
"observations_used": 150,
"observations_required": 150,
"warmup": false,
"input_start": "2026-02-27",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma200",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 944.46005,
"parameters": [
[
"required_observations",
200
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 200,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}rsi bandNot met
- rsi14
- 49.54194318224541
Comparison: inclusive_between · min: 50, max: 70 · Unit: index
Data status: complete
Exact versioned evidence
{
"name": "rsi_band",
"category": "hard",
"observed": [
[
"rsi14",
49.54194318224541
]
],
"operator": "inclusive_between",
"threshold": [
[
"min",
50
],
[
"max",
70
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "index",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"rsi14",
"1"
]
],
"source_evidence": [
{
"name": "rsi14",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 49.54194318224541,
"parameters": [
[
"required_observations",
15
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 15,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-06",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "index"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}extension atrMet
- extension_atr
- 0.07857047114114762
- close
- 965.88
- ema20
- 964.2271470299959
- atr14
- 21.036566867912217
Comparison: <= · max: 1.5 · Unit: ATR
Data status: complete
Exact versioned evidence
{
"name": "extension_atr",
"category": "hard",
"observed": [
[
"extension_atr",
0.07857047114114762
],
[
"close",
965.88
],
[
"ema20",
964.2271470299959
],
[
"atr14",
21.036566867912217
]
],
"operator": "<=",
"threshold": [
[
"max",
1.5
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "ATR",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"close",
"1"
],
[
"ema20",
"1"
],
[
"atr14",
"1"
]
],
"source_evidence": [
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "ema20",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 964.2271470299959,
"parameters": [
[
"required_observations",
20
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 20,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-13",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "atr14",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 21.036566867912217,
"parameters": [
[
"required_observations",
14
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 14,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-05",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}relative strength 20Met
- SPY
- 0.018908855589838458
- QQQ
- -0.028852823359314606
Comparison: OR > · SPY: 0, QQQ: 0 · Unit: fraction
Data status: complete
Exact versioned evidence
{
"name": "relative_strength_20",
"category": "hard",
"observed": [
[
"SPY",
0.018908855589838458
],
[
"QQQ",
-0.028852823359314606
]
],
"operator": "OR >",
"threshold": [
[
"SPY",
0
],
[
"QQQ",
0
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"SPY",
"1"
],
[
"QQQ",
"1"
]
],
"source_evidence": [
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.018908855589838458,
"parameters": [
[
"window",
20
],
[
"benchmark",
"SPY"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
},
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": -0.028852823359314606,
"parameters": [
[
"window",
20
],
[
"benchmark",
"QQQ"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}resistance qualityMet
- distinct_touches
- 2
Comparison: policy_and_minimum_touches · min: 2 · Unit: comparison
Data status: complete
Exact versioned evidence
{
"name": "resistance_quality",
"category": "hard",
"observed": [
[
"distinct_touches",
2
]
],
"operator": "policy_and_minimum_touches",
"threshold": [
[
"min",
2
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"structure",
"1"
]
],
"source_evidence": [],
"pivots": [
{
"session": "2026-07-16",
"price": 977.3999,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-07-20",
"confirmation_time": "2026-07-20T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-04",
"price": 978.375,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-09",
"confirmation_time": "2026-09-09T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"sessions": [],
"available_at": "2026-09-24T11:59:33.803398Z"
}Supporting evidence
These observations do not change the trigger.
atr compressionMet
- current_atr_pct
- 0.021779689886851594
- median_previous_60_atr_pct
- 0.024796176357512544
- ratio
- 0.8783487249336716
Comparison: < · right_operand: median_previous_60_atr_pct · Unit: fraction
Data status: complete
Exact versioned evidence
{
"name": "atr_compression",
"category": "supporting",
"observed": [
[
"current_atr_pct",
0.021779689886851594
],
[
"median_previous_60_atr_pct",
0.024796176357512544
],
[
"ratio",
0.8783487249336716
]
],
"operator": "<",
"threshold": [
[
"right_operand",
"median_previous_60_atr_pct"
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"atr14",
"1"
],
[
"supporting",
"1"
]
],
"source_evidence": [
{
"name": "atr14",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 21.036566867912217,
"parameters": [
[
"required_observations",
14
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 14,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-05",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "atr_compression_baseline",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.024796176357512544,
"parameters": [
[
"baseline_sessions",
60
],
[
"current_excluded",
"true"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 74,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-05",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [
[
"baseline",
[
"2026-07-08",
"2026-07-09",
"2026-07-10",
"2026-07-13",
"2026-07-14",
"2026-07-15",
"2026-07-16",
"2026-07-17",
"2026-07-20",
"2026-07-21",
"2026-07-22",
"2026-07-23",
"2026-07-24",
"2026-07-27",
"2026-07-28",
"2026-07-29",
"2026-07-30",
"2026-07-31",
"2026-08-03",
"2026-08-04",
"2026-08-05",
"2026-08-06",
"2026-08-07",
"2026-08-10",
"2026-08-11",
"2026-08-12",
"2026-08-13",
"2026-08-14",
"2026-08-17",
"2026-08-18",
"2026-08-19",
"2026-08-20",
"2026-08-21",
"2026-08-24",
"2026-08-25",
"2026-08-26",
"2026-08-27",
"2026-08-28",
"2026-08-31",
"2026-09-01",
"2026-09-02",
"2026-09-03",
"2026-09-04",
"2026-09-08",
"2026-09-09",
"2026-09-10",
"2026-09-11",
"2026-09-14",
"2026-09-15",
"2026-09-16",
"2026-09-17",
"2026-09-18",
"2026-09-21",
"2026-09-22",
"2026-09-23",
"2026-09-24",
"2026-09-25",
"2026-09-28",
"2026-09-29",
"2026-09-30"
]
]
],
"available_at": "2026-10-02T06:26:41.439951Z"
}volume contractionNot met
- recent_volume
- 567332.4964976
- baseline_volume
- 614660.0125873999
- ratio
- 0.9230021229287787
Comparison: < · max: 0.85 · Unit: ratio
Data status: complete
Exact versioned evidence
{
"name": "volume_contraction",
"category": "supporting",
"observed": [
[
"recent_volume",
567332.4964976
],
[
"baseline_volume",
614660.0125873999
],
[
"ratio",
0.9230021229287787
]
],
"operator": "<",
"threshold": [
[
"max",
0.85
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "ratio",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"supporting",
"1"
]
],
"source_evidence": [
{
"name": "volume_contraction",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.9230021229287787,
"parameters": [
[
"recent_sessions",
5
],
[
"baseline_sessions",
20
]
],
"data_status": "complete",
"reason": null,
"observations_used": 25,
"observations_required": 25,
"warmup": false,
"input_start": "2026-08-27",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "ratio"
}
],
"pivots": [],
"sessions": [
[
"recent",
[
"2026-09-25",
"2026-09-28",
"2026-09-29",
"2026-09-30",
"2026-10-01"
]
],
[
"baseline",
[
"2026-08-27",
"2026-08-28",
"2026-08-31",
"2026-09-01",
"2026-09-02",
"2026-09-03",
"2026-09-04",
"2026-09-08",
"2026-09-09",
"2026-09-10",
"2026-09-11",
"2026-09-14",
"2026-09-15",
"2026-09-16",
"2026-09-17",
"2026-09-18",
"2026-09-21",
"2026-09-22",
"2026-09-23",
"2026-09-24"
]
]
],
"available_at": "2026-10-02T06:26:41.439951Z"
}higher lowsNot met
- low_1
- 993.52
- low_2
- 933.74
- low_3
- 911.41
Comparison: low_3 > low_2 > low_1 · required_pivots: 3 · Unit: comparison
Data status: complete
Exact versioned evidence
{
"name": "higher_lows",
"category": "supporting",
"observed": [
[
"low_1",
993.52
],
[
"low_2",
933.74
],
[
"low_3",
911.41
]
],
"operator": "low_3 > low_2 > low_1",
"threshold": [
[
"required_pivots",
3
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"structure",
"1"
]
],
"source_evidence": [],
"pivots": [
{
"session": "2026-08-21",
"price": 993.52,
"kind": "low",
"left": 2,
"right": 2,
"confirmation_session": "2026-08-25",
"confirmation_time": "2026-08-25T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-03",
"price": 933.74,
"kind": "low",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-08",
"confirmation_time": "2026-09-08T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-16",
"price": 911.41,
"kind": "low",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-18",
"confirmation_time": "2026-09-18T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"sessions": [],
"available_at": "2026-09-24T11:59:33.803398Z"
}full ma alignmentMet
- sma50
- 988.4716000000001
- sma150
- 945.876
- sma200
- 944.46005
Comparison: sma50 > sma150 > sma200 · · Unit: comparison
Data status: complete
Exact versioned evidence
{
"name": "full_ma_alignment",
"category": "supporting",
"observed": [
[
"sma50",
988.4716000000001
],
[
"sma150",
945.876
],
[
"sma200",
944.46005
]
],
"operator": "sma50 > sma150 > sma200",
"threshold": [],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"sma50",
"1"
],
[
"sma150",
"1"
],
[
"sma200",
"1"
]
],
"source_evidence": [
{
"name": "sma50",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 988.4716000000001,
"parameters": [
[
"required_observations",
50
]
],
"data_status": "complete",
"reason": null,
"observations_used": 50,
"observations_required": 50,
"warmup": false,
"input_start": "2026-07-23",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma150",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 945.876,
"parameters": [
[
"required_observations",
150
]
],
"data_status": "complete",
"reason": null,
"observations_used": 150,
"observations_required": 150,
"warmup": false,
"input_start": "2026-02-27",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma200",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 944.46005,
"parameters": [
[
"required_observations",
200
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 200,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": null
}rs20 spy positiveMet
- SPY
- 0.018908855589838458
Comparison: > · min: 0 · Unit: fraction
Data status: complete
Exact versioned evidence
{
"name": "rs20_spy_positive",
"category": "supporting",
"observed": [
[
"SPY",
0.018908855589838458
]
],
"operator": ">",
"threshold": [
[
"min",
0
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"relative_return",
"1"
]
],
"source_evidence": [
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.018908855589838458,
"parameters": [
[
"window",
20
],
[
"benchmark",
"SPY"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}rs20 qqq positiveNot met
- QQQ
- -0.028852823359314606
Comparison: > · min: 0 · Unit: fraction
Data status: complete
Exact versioned evidence
{
"name": "rs20_qqq_positive",
"category": "supporting",
"observed": [
[
"QQQ",
-0.028852823359314606
]
],
"operator": ">",
"threshold": [
[
"min",
0
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"relative_return",
"1"
]
],
"source_evidence": [
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": -0.028852823359314606,
"parameters": [
[
"window",
20
],
[
"benchmark",
"QQQ"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}Structure policy and full stored result
{
"rule_name": "PRE_BREAKOUT",
"rule_version": "PRE_BREAKOUT_V1",
"state": "NO_SETUP",
"triggered": false,
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"structure_policy": {
"version": "1",
"pivot_left": 2,
"pivot_right": 2,
"level_lookback": 126,
"clustering_tolerance": 0.005,
"minimum_touches": 2,
"weighting": "equal"
},
"rule_policy": {
"version": "PRE_BREAKOUT_V1",
"distance_min": 0,
"distance_max": 3,
"rsi_min": 50,
"rsi_max": 70,
"extension_max": 1.5,
"minimum_touches": 2,
"atr_baseline_sessions": 60,
"volume_recent_sessions": 5,
"volume_baseline_sessions": 20,
"volume_ratio_max": 0.85,
"selection": "nearest_at_or_above_else_nearest_below",
"both_benchmarks_valid": true
},
"analysis_version": "1",
"selected_resistance": {
"value": 977.88745,
"kind": "resistance",
"first_session": "2026-07-16",
"first_eligible_session": "2026-09-09",
"available_at": "2026-09-24T11:59:33.803398Z",
"pivots": [
{
"session": "2026-07-16",
"price": 977.3999,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-07-20",
"confirmation_time": "2026-07-20T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-04",
"price": 978.375,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-09",
"confirmation_time": "2026-09-09T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"touches": 2,
"tolerance": 0.005,
"min_touches": 2,
"lookback": 126,
"weighting": "equal",
"version": "1"
},
"hard_conditions": [
{
"name": "confirmed_resistance",
"category": "hard",
"observed": [
[
"resistance",
977.88745
]
],
"operator": "exists",
"threshold": [
[
"eligible",
true
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"structure",
"1"
]
],
"source_evidence": [],
"pivots": [
{
"session": "2026-07-16",
"price": 977.3999,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-07-20",
"confirmation_time": "2026-07-20T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-04",
"price": 978.375,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-09",
"confirmation_time": "2026-09-09T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"sessions": [],
"available_at": "2026-09-24T11:59:33.803398Z"
},
{
"name": "distance_to_resistance",
"category": "hard",
"observed": [
[
"distance_pct",
1.2278969323105589
],
[
"resistance",
977.88745
],
[
"close",
965.88
]
],
"operator": "inclusive_between",
"threshold": [
[
"min",
0
],
[
"max",
3
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "percent",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"close",
"1"
]
],
"source_evidence": [
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "intermediate_trend",
"category": "hard",
"observed": [
[
"close",
965.88
],
[
"sma50",
988.4716000000001
]
],
"operator": ">",
"threshold": [
[
"right_operand",
"sma50"
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"close",
"1"
],
[
"sma50",
"1"
]
],
"source_evidence": [
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma50",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 988.4716000000001,
"parameters": [
[
"required_observations",
50
]
],
"data_status": "complete",
"reason": null,
"observations_used": 50,
"observations_required": 50,
"warmup": false,
"input_start": "2026-07-23",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "long_term_trend",
"category": "hard",
"observed": [
[
"sma150",
945.876
],
[
"sma200",
944.46005
]
],
"operator": ">=",
"threshold": [
[
"right_operand",
"sma200"
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"sma150",
"1"
],
[
"sma200",
"1"
]
],
"source_evidence": [
{
"name": "sma150",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 945.876,
"parameters": [
[
"required_observations",
150
]
],
"data_status": "complete",
"reason": null,
"observations_used": 150,
"observations_required": 150,
"warmup": false,
"input_start": "2026-02-27",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma200",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 944.46005,
"parameters": [
[
"required_observations",
200
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 200,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "rsi_band",
"category": "hard",
"observed": [
[
"rsi14",
49.54194318224541
]
],
"operator": "inclusive_between",
"threshold": [
[
"min",
50
],
[
"max",
70
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "index",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"rsi14",
"1"
]
],
"source_evidence": [
{
"name": "rsi14",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 49.54194318224541,
"parameters": [
[
"required_observations",
15
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 15,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-06",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "index"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "extension_atr",
"category": "hard",
"observed": [
[
"extension_atr",
0.07857047114114762
],
[
"close",
965.88
],
[
"ema20",
964.2271470299959
],
[
"atr14",
21.036566867912217
]
],
"operator": "<=",
"threshold": [
[
"max",
1.5
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "ATR",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"close",
"1"
],
[
"ema20",
"1"
],
[
"atr14",
"1"
]
],
"source_evidence": [
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "ema20",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 964.2271470299959,
"parameters": [
[
"required_observations",
20
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 20,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-13",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "atr14",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 21.036566867912217,
"parameters": [
[
"required_observations",
14
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 14,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-05",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "relative_strength_20",
"category": "hard",
"observed": [
[
"SPY",
0.018908855589838458
],
[
"QQQ",
-0.028852823359314606
]
],
"operator": "OR >",
"threshold": [
[
"SPY",
0
],
[
"QQQ",
0
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"SPY",
"1"
],
[
"QQQ",
"1"
]
],
"source_evidence": [
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.018908855589838458,
"parameters": [
[
"window",
20
],
[
"benchmark",
"SPY"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
},
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": -0.028852823359314606,
"parameters": [
[
"window",
20
],
[
"benchmark",
"QQQ"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "resistance_quality",
"category": "hard",
"observed": [
[
"distinct_touches",
2
]
],
"operator": "policy_and_minimum_touches",
"threshold": [
[
"min",
2
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"structure",
"1"
]
],
"source_evidence": [],
"pivots": [
{
"session": "2026-07-16",
"price": 977.3999,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-07-20",
"confirmation_time": "2026-07-20T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-04",
"price": 978.375,
"kind": "high",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-09",
"confirmation_time": "2026-09-09T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"sessions": [],
"available_at": "2026-09-24T11:59:33.803398Z"
}
],
"supporting_conditions": [
{
"name": "atr_compression",
"category": "supporting",
"observed": [
[
"current_atr_pct",
0.021779689886851594
],
[
"median_previous_60_atr_pct",
0.024796176357512544
],
[
"ratio",
0.8783487249336716
]
],
"operator": "<",
"threshold": [
[
"right_operand",
"median_previous_60_atr_pct"
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"atr14",
"1"
],
[
"supporting",
"1"
]
],
"source_evidence": [
{
"name": "atr14",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 21.036566867912217,
"parameters": [
[
"required_observations",
14
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 14,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-05",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "close",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 965.88,
"parameters": [],
"data_status": "complete",
"reason": null,
"observations_used": 1,
"observations_required": 1,
"warmup": false,
"input_start": "2026-10-01",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "atr_compression_baseline",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.024796176357512544,
"parameters": [
[
"baseline_sessions",
60
],
[
"current_excluded",
"true"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 74,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": "2026-01-05",
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [
[
"baseline",
[
"2026-07-08",
"2026-07-09",
"2026-07-10",
"2026-07-13",
"2026-07-14",
"2026-07-15",
"2026-07-16",
"2026-07-17",
"2026-07-20",
"2026-07-21",
"2026-07-22",
"2026-07-23",
"2026-07-24",
"2026-07-27",
"2026-07-28",
"2026-07-29",
"2026-07-30",
"2026-07-31",
"2026-08-03",
"2026-08-04",
"2026-08-05",
"2026-08-06",
"2026-08-07",
"2026-08-10",
"2026-08-11",
"2026-08-12",
"2026-08-13",
"2026-08-14",
"2026-08-17",
"2026-08-18",
"2026-08-19",
"2026-08-20",
"2026-08-21",
"2026-08-24",
"2026-08-25",
"2026-08-26",
"2026-08-27",
"2026-08-28",
"2026-08-31",
"2026-09-01",
"2026-09-02",
"2026-09-03",
"2026-09-04",
"2026-09-08",
"2026-09-09",
"2026-09-10",
"2026-09-11",
"2026-09-14",
"2026-09-15",
"2026-09-16",
"2026-09-17",
"2026-09-18",
"2026-09-21",
"2026-09-22",
"2026-09-23",
"2026-09-24",
"2026-09-25",
"2026-09-28",
"2026-09-29",
"2026-09-30"
]
]
],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "volume_contraction",
"category": "supporting",
"observed": [
[
"recent_volume",
567332.4964976
],
[
"baseline_volume",
614660.0125873999
],
[
"ratio",
0.9230021229287787
]
],
"operator": "<",
"threshold": [
[
"max",
0.85
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "ratio",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"supporting",
"1"
]
],
"source_evidence": [
{
"name": "volume_contraction",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.9230021229287787,
"parameters": [
[
"recent_sessions",
5
],
[
"baseline_sessions",
20
]
],
"data_status": "complete",
"reason": null,
"observations_used": 25,
"observations_required": 25,
"warmup": false,
"input_start": "2026-08-27",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "ratio"
}
],
"pivots": [],
"sessions": [
[
"recent",
[
"2026-09-25",
"2026-09-28",
"2026-09-29",
"2026-09-30",
"2026-10-01"
]
],
[
"baseline",
[
"2026-08-27",
"2026-08-28",
"2026-08-31",
"2026-09-01",
"2026-09-02",
"2026-09-03",
"2026-09-04",
"2026-09-08",
"2026-09-09",
"2026-09-10",
"2026-09-11",
"2026-09-14",
"2026-09-15",
"2026-09-16",
"2026-09-17",
"2026-09-18",
"2026-09-21",
"2026-09-22",
"2026-09-23",
"2026-09-24"
]
]
],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "higher_lows",
"category": "supporting",
"observed": [
[
"low_1",
993.52
],
[
"low_2",
933.74
],
[
"low_3",
911.41
]
],
"operator": "low_3 > low_2 > low_1",
"threshold": [
[
"required_pivots",
3
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"structure",
"1"
]
],
"source_evidence": [],
"pivots": [
{
"session": "2026-08-21",
"price": 993.52,
"kind": "low",
"left": 2,
"right": 2,
"confirmation_session": "2026-08-25",
"confirmation_time": "2026-08-25T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-03",
"price": 933.74,
"kind": "low",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-08",
"confirmation_time": "2026-09-08T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
},
{
"session": "2026-09-16",
"price": 911.41,
"kind": "low",
"left": 2,
"right": 2,
"confirmation_session": "2026-09-18",
"confirmation_time": "2026-09-18T20:00:00Z",
"available_at": "2026-09-24T11:59:33.803398Z",
"version": "1"
}
],
"sessions": [],
"available_at": "2026-09-24T11:59:33.803398Z"
},
{
"name": "full_ma_alignment",
"category": "supporting",
"observed": [
[
"sma50",
988.4716000000001
],
[
"sma150",
945.876
],
[
"sma200",
944.46005
]
],
"operator": "sma50 > sma150 > sma200",
"threshold": [],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "comparison",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"sma50",
"1"
],
[
"sma150",
"1"
],
[
"sma200",
"1"
]
],
"source_evidence": [
{
"name": "sma50",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 988.4716000000001,
"parameters": [
[
"required_observations",
50
]
],
"data_status": "complete",
"reason": null,
"observations_used": 50,
"observations_required": 50,
"warmup": false,
"input_start": "2026-07-23",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma150",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 945.876,
"parameters": [
[
"required_observations",
150
]
],
"data_status": "complete",
"reason": null,
"observations_used": 150,
"observations_required": 150,
"warmup": false,
"input_start": "2026-02-27",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
},
{
"name": "sma200",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 944.46005,
"parameters": [
[
"required_observations",
200
]
],
"data_status": "complete",
"reason": null,
"observations_used": 200,
"observations_required": 200,
"warmup": false,
"input_start": "2025-12-15",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "price"
}
],
"pivots": [],
"sessions": [],
"available_at": null
},
{
"name": "rs20_spy_positive",
"category": "supporting",
"observed": [
[
"SPY",
0.018908855589838458
]
],
"operator": ">",
"threshold": [
[
"min",
0
]
],
"passed": true,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"relative_return",
"1"
]
],
"source_evidence": [
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": 0.018908855589838458,
"parameters": [
[
"window",
20
],
[
"benchmark",
"SPY"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
},
{
"name": "rs20_qqq_positive",
"category": "supporting",
"observed": [
[
"QQQ",
-0.028852823359314606
]
],
"operator": ">",
"threshold": [
[
"min",
0
]
],
"passed": false,
"data_status": "complete",
"reason": null,
"unit": "fraction",
"rule_version": "PRE_BREAKOUT_V1",
"feature_versions": [
[
"relative_return",
"1"
]
],
"source_evidence": [
{
"name": "relative_return",
"version": "1",
"symbol": "PH",
"session": "2026-10-01",
"as_of": "2026-10-02T06:27:18.822659Z",
"value": -0.028852823359314606,
"parameters": [
[
"window",
20
],
[
"benchmark",
"QQQ"
]
],
"data_status": "complete",
"reason": null,
"observations_used": 21,
"observations_required": 21,
"warmup": false,
"input_start": "2026-09-02",
"seed_session": null,
"available_at": "2026-10-02T06:26:41.439951Z",
"missing_sessions": [],
"reset_after_gap": false,
"provider": "massive",
"adjustment": "split_adjusted",
"session_scope": "provider_aggregate",
"calendar": "XNYS",
"calendar_version": "4.13.2",
"unit": "fraction"
}
],
"pivots": [],
"sessions": [],
"available_at": "2026-10-02T06:26:41.439951Z"
}
]
}