@battlegrid/mcp-server 32.0.31 → 32.0.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +116 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/skills/EXPORT.json +4 -4
- package/skills/battlegrid-radar-deployment/SKILL.md +4 -0
- package/skills/battlegrid-strategy-examples/SKILL.md +22 -9
- package/skills/battlegrid-strategy-examples/references/tradingview-ports.md +13 -4
package/README.md
CHANGED
|
@@ -38,6 +38,122 @@ Seeing package `31.x` alongside handshake `battlegrid@33.x` — the package **be
|
|
|
38
38
|
|
|
39
39
|
**What this changes for you:** nothing about how you call anything. Upgrading the package no longer waits on a server deploy, and a server deploy no longer strands you on a package that names the wrong contract — reconnect and the announcement follows. **Contract breaking-change notes are no longer keyed to package versions**, since a contract move is no longer a release here; the v11-and-earlier notes below are kept as history, and the live vocabulary is always discovery.
|
|
40
40
|
|
|
41
|
+
## Contract history — v135.1 (the bar clock, trading-session levels and a period level that stops at its roll)
|
|
42
|
+
|
|
43
|
+
**Additive at v135.1: thirty-five metrics and five studies, and one value moves.** v135.1 is the contract on top of
|
|
44
|
+
v135. Nothing a client sends is refused that v135 accepted. Reconnect the proxy, or restart it, so discovery reads the
|
|
45
|
+
widened vocabulary.
|
|
46
|
+
|
|
47
|
+
### Widened input — new metrics and studies
|
|
48
|
+
|
|
49
|
+
- **The bar clock:** `UTC_HOUR`, `DAY_OF_WEEK` (0–6 UTC, 0 = Sunday) and `TRADING_SESSION` (`asia` 00–08, `london`
|
|
50
|
+
08–13, `newYork` 13–21, `late` 21–24 UTC; fixed windows, no daylight-saving rule). Each is a fact of the read bar's
|
|
51
|
+
open time, so a session window is an ordinary condition. A weekend or the London–New York overlap is a composition.
|
|
52
|
+
- **Trading-session levels:** `ASIA_*`, `LONDON_*` and `NEW_YORK_*` (`HIGH` / `LOW` / `OPEN`) for the current
|
|
53
|
+
session, `null` outside it, and `PRIOR_*` for the previous instance of each.
|
|
54
|
+
- **Swept flags:** `PRIOR_<S>_HIGH_SWEPT` / `_LOW_SWEPT`, read `swept` or `intact`.
|
|
55
|
+
- **Opening ranges:** `OR15_HIGH`, `OR15_LOW`, `OR30_HIGH`, `OR30_LOW`, absent until each range closes.
|
|
56
|
+
- **Initial-balance extensions:** `IB_EXT_UP_150`, `IB_EXT_DOWN_150`, `IB_EXT_UP_200`, `IB_EXT_DOWN_200`, `null` for
|
|
57
|
+
a zero-range initial balance.
|
|
58
|
+
- **Studies:** `barClock`, `tradingSessions`, `priorTradingSessions`, `openingRange` and `ibExtensions`. The
|
|
59
|
+
metric-key enum widens with them on every input and output that carries it.
|
|
60
|
+
|
|
61
|
+
### Changed values — the same schema serves a different number
|
|
62
|
+
|
|
63
|
+
- **A period level read across its roll is `null`.** A `spread` with one candle side, or a `levelInteraction`, over
|
|
64
|
+
a bundle-homed period level (a UTC day's or a trading session's) reads `null` on a bar outside the instance the
|
|
65
|
+
level was taken from. Before, it was measured against the next day's or session's level. A required condition over
|
|
66
|
+
one fails closed on the roll bar. `distance` and a spread between two bundle-homed levels are unchanged.
|
|
67
|
+
- **Prose says "UTC day" where it said "session"** for the day-fold metrics, `VWAP` and `CVD`. "Session" is now only a
|
|
68
|
+
game session, and the condition strip labels a trading session with its window ("New York 13–21 UTC"). The served
|
|
69
|
+
`nullBehavior` of `spread` and `levelInteraction` states the roll rule.
|
|
70
|
+
|
|
71
|
+
### Digest move
|
|
72
|
+
|
|
73
|
+
- **`vocabularyDigest` moves.** A client caching vocabulary against it re-reads `list_strategy_vocabulary`.
|
|
74
|
+
|
|
75
|
+
## Contract history — v135 (an efficiency window counts changes, and six series statistics)
|
|
76
|
+
|
|
77
|
+
**Breaking at v135: an `efficiency` window means one less than it did, and one output key is replaced.** v135 is the
|
|
78
|
+
contract on top of v134. Reconnect the proxy, or restart it, so discovery reads the new schemas.
|
|
79
|
+
|
|
80
|
+
### Re-specified input — the same field means something else
|
|
81
|
+
|
|
82
|
+
- **An `efficiency` column's `window` counts bar-to-bar changes** and reads `window + 1` bars, as TradingView's
|
|
83
|
+
`er(src, n)` does; it counted the bars read. The default, 20 changes, reads the same 21 bars as before. An explicit
|
|
84
|
+
window `w` reads one bar more than it did, so send `w − 1` to read the bars you meant. The largest legal window is
|
|
85
|
+
one below the cap, and a window at the cap is refused. Stored windows on the server are already moved to `w − 1`.
|
|
86
|
+
|
|
87
|
+
### Reshaped output — something you read moved
|
|
88
|
+
|
|
89
|
+
- **`rankableSpreadOperands` is gone** from `get_metric_construction_hints` and every catalog transform entry. Read
|
|
90
|
+
**`chainedOuters`** instead, present exactly when `chainSuccessors` is and keyed by its members. Each entry has the
|
|
91
|
+
`operands` construction accepts under that outer (`null` where the inner names none) and the chained column's
|
|
92
|
+
`windowMaximum`. Rank's operands are `chainedOuters.rank.operands`.
|
|
93
|
+
- **`chainOuterParameters`** (required) declares each chain outer once, on `get_metric_construction_hints` and the
|
|
94
|
+
report catalog.
|
|
95
|
+
- **A served `window` carries required `unit`:** `seriesElements`, `seriesChanges` (`efficiency`) or `priorElements`
|
|
96
|
+
(`pctl`).
|
|
97
|
+
|
|
98
|
+
### Widened input and enums
|
|
99
|
+
|
|
100
|
+
- **Six transforms:** `zscore`, `stddev`, `linregSlope`, `pctl`, `rollingMin` and `rollingMax`, on every metric with a
|
|
101
|
+
series home and over every relation. A `zscore` header's column contract serves five `zoneBands` (`extreme low`
|
|
102
|
+
below −2 through `extreme high` above 2).
|
|
103
|
+
- **`efficiency` is accepted** on the 27 oscillators and over `distance` and `spread`.
|
|
104
|
+
- **`budgets.columnLookback` is 64**, where it was 32, for windows and offsets.
|
|
105
|
+
- A transform measurement's `nullPolicy` gains `endpoints`.
|
|
106
|
+
|
|
107
|
+
### Narrowed offer
|
|
108
|
+
|
|
109
|
+
- **A series chain over a spread operand with no per-bar value** (`EMA5 × spread(MARK) × trajectory`) is no longer
|
|
110
|
+
offered. Construction already refused it, and the refusal now names the side and the operands that work.
|
|
111
|
+
|
|
112
|
+
### Changed values
|
|
113
|
+
|
|
114
|
+
- **An `efficiency` value whose newest or oldest bar is missing, or whose series is shorter than `window + 1`, is
|
|
115
|
+
`null`.** A clause over it reads UNRESOLVED instead of reducing the bars present. Expect this on coins with session
|
|
116
|
+
gaps, young listings and short history homes.
|
|
117
|
+
- **`vocabularyDigest` moves.**
|
|
118
|
+
|
|
119
|
+
## Contract history — v134 (Multi-Timeframe Confluence becomes columns, and the perp/spot rate gap)
|
|
120
|
+
|
|
121
|
+
**Breaking at v134: the Multi-Timeframe Confluence platform section is retired.** v134 is the contract on top of
|
|
122
|
+
v133. Reconnect the proxy, or restart it, so discovery reads the new schemas.
|
|
123
|
+
|
|
124
|
+
### Rejected input — something you send is no longer accepted
|
|
125
|
+
|
|
126
|
+
- **`includeMtfConfluence` is refused** wherever an input names a platform section: every authoring, staging and
|
|
127
|
+
preview input, `get_strategy_section_template`'s section key and `get_context_source_full_preview`'s `sourceKey`.
|
|
128
|
+
**`mtfConfluence` is refused** in `get_market_context`'s `modules`.
|
|
129
|
+
- **Its lower-timeframe reads stay authorable as custom columns:** `MA_ALIGN × value`, `RSI14 × classifyZone` and
|
|
130
|
+
`ADX × classifyZone` at `{rel:'lower'}` (headers `MAalign_ltf`, `RSI14_ltf_zone`, `ADX14_ltf_zone`). The primary and
|
|
131
|
+
higher-timeframe reads belong to Moving Averages, RSI, Trend Strength and Higher Timeframe Context.
|
|
132
|
+
- Stored strategies and agents are already migrated on the server. Each placement became a custom section titled
|
|
133
|
+
`Multi-Timeframe Confluence (lower rung)`, and a Market Read marker `ADX14_…_state` became `ADX14_…_zone`.
|
|
134
|
+
|
|
135
|
+
### Removed output — a key you read is gone
|
|
136
|
+
|
|
137
|
+
- **`includeMtfConfluence`** leaves every agent context-source read (`get_intelligence_agent`,
|
|
138
|
+
`list_intelligence_agents`, `get_agent_explorer`, `activate_intelligence_agent`, `archive_intelligence_agent`,
|
|
139
|
+
`commit_agent_draft`, `get_agent_prompt_context_preview`) and `list_strategy_categories`. The prompt-section kind
|
|
140
|
+
`mtf-confluence` leaves `get_context_sources_preview` and `get_context_source_full_preview`.
|
|
141
|
+
|
|
142
|
+
### Widened input — a new metric
|
|
143
|
+
|
|
144
|
+
- **`PERP_SPOT_GAP`** (`perpSpotGap`): the perp/spot rate gap `|spot rate − perp rate|`, 0 to 2, offered `value` and
|
|
145
|
+
the report-scoped `rank`. It is `null` on the bar after the UTC-day reset and where the spot tape is unavailable,
|
|
146
|
+
never `0`. A required or direction-setting condition over its rank is refused at radar-policy save with
|
|
147
|
+
`CONDITION_UNREADABLE_BY_RADAR_SCAN`, as a ranked crowd column already is.
|
|
148
|
+
|
|
149
|
+
### Changed values
|
|
150
|
+
|
|
151
|
+
- **Six verdict glosses state their gates:** `FLOW_ALIGN`, `SMART_RETAIL`, `CAPTAIN_CONF`, `CONFIDENCE`,
|
|
152
|
+
`PERP_SPOT_FLOW` and `PERP_SPOT_STRENGTH` serve the catalog gloss followed by the gate sentence over their operands'
|
|
153
|
+
headers. Read the sentence instead of restating thresholds.
|
|
154
|
+
- **A regime-timeframe column's `timeframe` is the regime timeframe**, whichever sections the report places. Before,
|
|
155
|
+
it read the anchor, or `null` without Module 16 or 17.
|
|
156
|
+
|
|
41
157
|
## Contract history — v131 (an agent's arena decisions and a trade's thesis are read where each is made)
|
|
42
158
|
|
|
43
159
|
**Breaking at v131: one tool is replaced and some keys you read are gone.** v131 is the contract on top of v130.1. No
|
package/dist/index.d.ts
CHANGED
|
@@ -47,7 +47,7 @@ import { Client, StreamableHTTPClientTransport } from '@modelcontextprotocol/cli
|
|
|
47
47
|
* being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
|
|
48
48
|
* correction. Never move it to track the server.
|
|
49
49
|
*/
|
|
50
|
-
export declare const PACKAGE_VERSION = "32.0.
|
|
50
|
+
export declare const PACKAGE_VERSION = "32.0.33";
|
|
51
51
|
export declare const DEFAULT_URL = "https://mcp.battlegrid.trade/mcp";
|
|
52
52
|
export interface EnvConfig {
|
|
53
53
|
apiKeys: string[];
|
package/dist/index.js
CHANGED
|
@@ -49,7 +49,7 @@ import { Client, SdkHttpError, StreamableHTTPClientTransport } from '@modelconte
|
|
|
49
49
|
* being asked. Move it for a change to THIS package — a proxy fix, a dependency bump, a docs
|
|
50
50
|
* correction. Never move it to track the server.
|
|
51
51
|
*/
|
|
52
|
-
export const PACKAGE_VERSION = '32.0.
|
|
52
|
+
export const PACKAGE_VERSION = '32.0.33';
|
|
53
53
|
export const DEFAULT_URL = 'https://mcp.battlegrid.trade/mcp';
|
|
54
54
|
const MAX_RETRIES = 3;
|
|
55
55
|
const RETRY_DELAYS_MS = [2000, 4000, 8000];
|
package/package.json
CHANGED
package/skills/EXPORT.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generator": "battlegrid-app/server/scripts/export-mcp-skills.mjs",
|
|
3
|
-
"contractVersion": "135.
|
|
3
|
+
"contractVersion": "135.1.0",
|
|
4
4
|
"files": {
|
|
5
5
|
"battlegrid-agent-management/SKILL.md": "91d1be4de1e33d54e1852c970af66ad176068fd16c30b4326e49053b7a35eb32",
|
|
6
6
|
"battlegrid-agent-management/references/agent-stage-examples.md": "dffcc353d61dfc7b5bb6a2b3077fc6bf8c760a34c287cafb3b59b99306f24195",
|
|
@@ -9,16 +9,16 @@
|
|
|
9
9
|
"battlegrid-market-analysis/SKILL.md": "fcbe98e30e1edce39bb170c224cdf20181934f62b5f3a26b293787c70eeb6229",
|
|
10
10
|
"battlegrid-officers/SKILL.md": "0e5b4fd7a11fc1b6643eecd0008dfe1528b915ee00d0a99be9aca1e3934d57f7",
|
|
11
11
|
"battlegrid-officers/references/officer-stage-examples.md": "ef46ba26f4b36c9964b5bde95fdf98e5952c3786b77be5f136056cac792f0aec",
|
|
12
|
-
"battlegrid-radar-deployment/SKILL.md": "
|
|
12
|
+
"battlegrid-radar-deployment/SKILL.md": "cd058d887e1342f42ce855708178d5f746400835a204e92238b63ec1fe57bf30",
|
|
13
13
|
"battlegrid-radar-deployment/references/arena-stage-examples.md": "d27cfed1f4663f267c4a7ecebe4a6e65a450fc74bd14ce8987fb61af5bbf2ca5",
|
|
14
14
|
"battlegrid-radar-deployment/references/radar-stage-examples.md": "13fc3f55d91d3da9754e1ed7fb27493b7b7ba4d40a6a7e8d1ee0365f90ea10de",
|
|
15
15
|
"battlegrid-strategy-authoring/SKILL.md": "e2422b0e02de6d240bbab261ed1181b32d175bf877f499d7df556eca31ce5133",
|
|
16
16
|
"battlegrid-strategy-authoring/references/strategy-stage-examples.md": "f10ecdc91f3660a708eee7a7bacefce2acbb46c9cf7e0ac1454bd54f839f39fd",
|
|
17
17
|
"battlegrid-strategy-doctor/SKILL.md": "24c2208cf6832f1fc34e1b1c52acd8dae10f56b9860aaf27b450a62a9fb74634",
|
|
18
|
-
"battlegrid-strategy-examples/SKILL.md": "
|
|
18
|
+
"battlegrid-strategy-examples/SKILL.md": "cbbc7a7271aaa9f530a11d91511f4bf35a9632aa3ab67ecd996975c65ae72625",
|
|
19
19
|
"battlegrid-strategy-examples/references/playbooks.md": "59996c37eea08e7ce398e49304171939e55c968400a1603597d6737faf9e1771",
|
|
20
20
|
"battlegrid-strategy-examples/references/recipes.md": "95966649a68ec488a232b150328d94e9f80c45eff30be4da92caf305fba20fb0",
|
|
21
|
-
"battlegrid-strategy-examples/references/tradingview-ports.md": "
|
|
21
|
+
"battlegrid-strategy-examples/references/tradingview-ports.md": "00f2ba287ff8fadf356273f61ad19630cceb3a706018c2088be40570ff1a899d",
|
|
22
22
|
"battlegrid-trade-analysis/SKILL.md": "140d847f24e98845736d4f0c2e72b318a4d235413f72f072d2fe6d0daa5f64db",
|
|
23
23
|
"battlegrid-trade-proposal/SKILL.md": "bf8f3794478cdecc989020bd775c3c91744f72b440b1a90f88f6700c9a61ca24"
|
|
24
24
|
}
|
|
@@ -127,6 +127,10 @@ from what the player asked for:
|
|
|
127
127
|
| only in named hours and days | a rule with an hours condition |
|
|
128
128
|
| in named regimes during named hours | a rule with one hours condition and one regime condition |
|
|
129
129
|
|
|
130
|
+
Radar's market hours answer *when may this agent trade*, and shift with daylight saving; a strategy's
|
|
131
|
+
`TRADING_SESSION` condition answers *which session is this bar in*, over fixed UTC windows — the two are
|
|
132
|
+
different questions, and a player asking for one is not asking for the other.
|
|
133
|
+
|
|
130
134
|
When the player names an exchange session — New York, the New York open, London, the London open,
|
|
131
135
|
the London–New York overlap, Tokyo, the Tokyo open — call `get_radar_market_hours` and stage that session's `hours`
|
|
132
136
|
exactly as served, merged with any other session they name; never work session hours out yourself,
|
|
@@ -82,20 +82,30 @@ add. Either way you never invent one. To section-qualify a duplicated header, re
|
|
|
82
82
|
`detail: "detailed"` preview's `authoring.conditionColumns` or from the qualified candidates a
|
|
83
83
|
`CONDITION_COLUMN_AMBIGUOUS` refusal offers.
|
|
84
84
|
|
|
85
|
+
**A session window is an ordinary condition.** `TRADING_SESSION` (`asia` 00–08, `london` 08–13,
|
|
86
|
+
`newYork` 13–21, `late` 21–24 UTC) and `DAY_OF_WEEK` (0 = Sunday … 6 = Saturday, UTC) are bar facts of the
|
|
87
|
+
bar's open, fixed in UTC with no daylight-saving rule — their glosses state the windows. A weekday London
|
|
88
|
+
or New York window is `ALL(TRADING_SESSION in ["london","newYork"], DAY_OF_WEEK between 1 and 5)`, and a
|
|
89
|
+
weekend is `NOT(DAY_OF_WEEK between 1 and 5)`; no strategy setting expresses one.
|
|
90
|
+
|
|
85
91
|
**Event columns print only on their event.** `MACDhist_cross` and `EMA5_13` (Bullish/Bearish) carry a
|
|
86
92
|
value on the crossing bar and are null on every other one, and a null reads FALSE. Use an event
|
|
87
93
|
column as a TRIGGER inside a carrier, and pair it with a persistent state — a spread sign,
|
|
88
94
|
`MAalign` — for regime. A condition that treats an event column as a standing state reads FALSE on
|
|
89
95
|
nearly every bar, so it is TRUE only on the crossing bar itself.
|
|
90
96
|
|
|
91
|
-
**The previous-
|
|
92
|
-
(`pivotP`, `pivotR1`–`R3`, `pivotS1`–`S3`) read the
|
|
97
|
+
**The previous-UTC-day levels are TIMELESS.** `PDH`, `PDL`, `PDO` and the seven floor pivots
|
|
98
|
+
(`pivotP`, `pivotR1`–`R3`, `pivotS1`–`S3`) read the UTC-day profile, not a candle rung, so they take
|
|
93
99
|
no timeframe reference at all: bind them `{rel: 'anchor'}` — the default — and they serve the same
|
|
94
|
-
previous UTC
|
|
100
|
+
previous UTC day from any anchor. The trading-session levels (`asiaHi`, `pLondonHi`, `nyOpen`, …) read
|
|
101
|
+
the trading-session profile the same way, each session fixed in UTC with the window its label names. An
|
|
102
|
+
absolute reference is REFUSED at save, including `1d`,
|
|
95
103
|
because there is no rung for one to select. They are catalogued price levels, so `dist_PDH gte 0`
|
|
96
104
|
composes directly. (`distance` still rejects an `offset`, and a clause still compares a column
|
|
97
105
|
with a literal or with its own previous completed bar, never with another column; neither of those
|
|
98
|
-
shapes is what a previous-
|
|
106
|
+
shapes is what a previous-UTC-day level needed.) A `spread` of a bar's own value against one of these
|
|
107
|
+
levels reads `null` on a bar outside the UTC day (or trading session) the level belongs to, so the first
|
|
108
|
+
bars after 00:00 UTC are never measured against the next day's level. The same holds
|
|
99
109
|
for every timeless metric — these levels, funding, the regime and the other bundle
|
|
100
110
|
reads: a `value` column over one accepts only `offset: 0`, and a larger offset is REFUSED at save,
|
|
101
111
|
because there is no earlier bar to cut back to.
|
|
@@ -397,7 +407,7 @@ below when it closed at or under it. For a level computed from its own bar (a ba
|
|
|
397
407
|
average, `ST_LINE`, `PSAR`, the Ichimoku conversion and base lines) that is the prior bar's level, so a
|
|
398
408
|
level that moved between the two bars is judged on the bar it stood at; for a level whose price was fixed
|
|
399
409
|
before the bar (a prior-bar Donchian rail, the break memory, a swing level, the displaced Ichimoku lines, a
|
|
400
|
-
prior-session level or pivot) it is the bar's own level. From below: a bar that closes through the level is a break and reads `none`; a bar whose high
|
|
410
|
+
prior-UTC-day or previous trading-session level or pivot) it is the bar's own level. From below: a bar that closes through the level is a break and reads `none`; a bar whose high
|
|
401
411
|
reached the level and whose close came back under it is `reject_from_below`; a bar whose high came
|
|
402
412
|
within the buffer of the level is `touch_from_below`. From above is the mirror on the low.
|
|
403
413
|
|
|
@@ -414,12 +424,15 @@ within the buffer of the level is `touch_from_below`. From above is the mirror o
|
|
|
414
424
|
`VWAP`, a moving average (`SMA20`, `EMA20`, …), `ST_LINE`, `PSAR`, the prior-bar Donchian rails
|
|
415
425
|
(`DONCHIAN_UPPER_PRIOR`, `DONCHIAN_LOWER_PRIOR`), the Donchian break memory (`DONCHIAN_BROKEN_HI`,
|
|
416
426
|
`DONCHIAN_BROKEN_LO`), the Ichimoku lines, the swing levels (`SWING_FRACTAL_HIGH`,
|
|
417
|
-
`SWING_FRACTAL_LOW`) — reads its own value at each bar. A prior-
|
|
418
|
-
`PDO`, `PIVOT_P`, `PRIOR_TPO_POC`, …)
|
|
419
|
-
|
|
427
|
+
`SWING_FRACTAL_LOW`) — reads its own value at each bar. A prior-UTC-day level or pivot (`PDH`, `PDL`,
|
|
428
|
+
`PDO`, `PIVOT_P`, `PRIOR_TPO_POC`, …) or a previous trading-session level (`PRIOR_LONDON_HIGH`, …) has
|
|
429
|
+
one reading for its UTC day or session; a clause over it is a single read with no hold, because the
|
|
430
|
+
profile keeps no earlier reading, and on a bar outside that day or session it reads `null`, so the
|
|
431
|
+
day's last bar is never classified against the next day's level. On `PSAR` a wick that
|
|
420
432
|
trades through the SAR flips it on that bar, so a rejection needs the low (high) to meet the SAR
|
|
421
433
|
exactly and a touch needs a buffer; its flip is `dist_PSAR crossesAbove 0` / `crossesBelow 0`.
|
|
422
|
-
- **Not offered:** a developing-
|
|
434
|
+
- **Not offered:** a developing-UTC-day level (`TPO_POC`, `TPO_VAH`, …), the current trading
|
|
435
|
+
session's levels, the opening ranges and the IB extensions, the naked points of
|
|
423
436
|
control and the single prints (`TPO_SINGLE_PRINT_ABOVE`/`_BELOW`, `NAKED_SINGLE_PRINT_ABOVE`/`_BELOW`),
|
|
424
437
|
which move between bars with no earlier reading kept; and the same-bar Donchian rails
|
|
425
438
|
(`DONCHIAN_UPPER`, `DONCHIAN_LOWER`), each the extreme of the window ending at the very bar it would
|
|
@@ -26,7 +26,7 @@ the thing itself. Most TV strategies run on the daily chart: carry that with the
|
|
|
26
26
|
daily-strategy pattern above (pinned-1d thesis with `"bars": "closed"` at offset 0 on an intraday anchor), which
|
|
27
27
|
binds decisions to daily closes while the studio keeps managing risk intraday.
|
|
28
28
|
|
|
29
|
-
Event-column behaviour, state-vs-event, previous-
|
|
29
|
+
Event-column behaviour, state-vs-event, previous-UTC-day-level binding and the squeeze's anchor calibration are
|
|
30
30
|
rules about the columns themselves, not about porting — they live in the skill body's
|
|
31
31
|
`## Header grammar` and `## Conditions`. Read those first; this document is the per-script recipes.
|
|
32
32
|
|
|
@@ -72,10 +72,19 @@ rules about the columns themselves, not about porting — they live in the skill
|
|
|
72
72
|
**Daily-breakout variant on any anchor:** pin the rail at 1d — `dist_donchianHiPrior20_1d crossesAbove 0`
|
|
73
73
|
(`gt 0` for the held state).
|
|
74
74
|
**Literal previous-day levels are native**: `dist_PDH gte 0` composes directly. They are TIMELESS
|
|
75
|
-
and take `{rel: 'anchor'}` — see `## Header grammar` in the skill body.
|
|
75
|
+
and take `{rel: 'anchor'}` — see `## Header grammar` in the skill body. The previous UTC day is the
|
|
76
|
+
00:00–24:00 UTC day, and a level read against a bar of the next day is `null`.
|
|
77
|
+
- **Session highs / lows, opening range, IB extensions** → the trading-session levels are native:
|
|
78
|
+
`ASIA_HIGH`, `LONDON_LOW`, `NEW_YORK_OPEN` and their previous instances (`PRIOR_LONDON_HIGH`, …), each
|
|
79
|
+
session fixed in UTC (asia 00–08, london 08–13, newYork 13–21) with no daylight-saving rule, the UTC
|
|
80
|
+
day's opening ranges (`OR15_HIGH`/`OR15_LOW`, `OR30_HIGH`/`OR30_LOW`) and the IB extensions
|
|
81
|
+
(`IB_EXT_UP_150` … `IB_EXT_DOWN_200`). A session window (`TRADING_SESSION in ["london","newYork"]`,
|
|
82
|
+
`DAY_OF_WEEK between 1 and 5`) is an ordinary condition; the glosses state the windows.
|
|
76
83
|
- **ICT / SMC (FVG + order blocks)** → `STRUCT_ZONES` is the native zone engine:
|
|
77
84
|
`zones_htf_support_type` (`bullish FVG`/`bullish order block`), `zones_htf_support_dist
|
|
78
|
-
between 0 1.5`, `_age_h gte 12`, HTF bias required via `MAalign_htf`.
|
|
85
|
+
between 0 1.5`, `_age_h gte 12`, HTF bias required via `MAalign_htf`. A killzone is a session window
|
|
86
|
+
(`TRADING_SESSION`, `UTC_HOUR`) and a sweep of a previous session's extreme is `PRIOR_<S>_HIGH_SWEPT` /
|
|
87
|
+
`_LOW_SWEPT`; displacement and event *sequencing* are shapes the
|
|
79
88
|
grammar does not have — a clause compares one column with a literal or with its own previous
|
|
80
89
|
completed bar, never with another column or an earlier event, so an ordered sequence of events
|
|
81
90
|
cannot be stated at all. That is a grammar limit, not a missing metric; name it as
|
|
@@ -111,7 +120,7 @@ rules about the columns themselves, not about porting — they live in the skill
|
|
|
111
120
|
(`PIVOT_P`/`PIVOT_R1`–`R3`/`PIVOT_S1`–`S3`), Williams %R (`WILLR14`), Stochastic RSI
|
|
112
121
|
(`STOCH_RSI14`), the TTM squeeze (`KC_SQUEEZE`), Connors RSI-2 (`RSI2`), the 8/9/21/50 EMAs
|
|
113
122
|
(`EMA8`/`EMA9`/`EMA21`/`EMA50` — `ta.ema(close, 8)` is `EMA8`, its distance `dist_EMA8`), literal
|
|
114
|
-
previous-
|
|
123
|
+
previous-UTC-day levels (`PDH`/`PDL`/`PDO`), fractal swing structure
|
|
115
124
|
(`SWING_FRACTAL_HIGH`/`SWING_FRACTAL_LOW`/`SWING_FRACTAL_LABEL`, the prior pivots
|
|
116
125
|
`PRIOR_SWING_FRACTAL_HIGH`/`PRIOR_SWING_FRACTAL_LOW` and their ages
|
|
117
126
|
`SWING_FRACTAL_HIGH_BARS_AGO`/`SWING_FRACTAL_LOW_BARS_AGO`), and Chaikin Money Flow (`CMF20`). Port
|