Direct answer
Concurrent exposure is a same-basis interval question
For this analyzer, concurrent planned exposure means the sum of supplied planned_risk_pct values whose time intervals are active at the same instant and whose risk_basis_id values match exactly. The page does not add a percentage based on one account, model, allocation, or notional basis to a percentage based on another. A global selected peak chooses one basis summary; it is not a cross-basis portfolio total.
Each included row must represent a resolved executed interval. The interval rule is [open, close), with close before open at an equal timestamp. User-supplied planned risk values are never summed across different risk bases.
The reported fields are maximum simultaneous signal count, peak summed planned risk, earliest peak window, overlap pair count, rows that overlapped, and share of the observed basis span with at least two rows open. Processing is browser-local and makes zero analyzer network requests.
These diagnostics are not position sizing, not correlation, not actual loss, and not advice. The synthetic example exists only to make the arithmetic reproducible.
Each row uses a half-open interval written as [opened_at_utc, closed_at_utc). The open instant belongs to the row and the close instant does not. When one row closes at exactly 13:00:00Z and another opens at exactly 13:00:00Z, those two rows have no positive-duration overlap. The event sweep applies every close before every open at that timestamp so the rule is reproducible.
Within each basis, the analyzer selects the highest active planned-risk sum. If that same sum appears in more than one event window, it retains the earliest one. The global selection compares those basis peaks by planned-risk percentage, then by earliest timestamp, then by ASCII basis ID. These tie-breaks make repeated runs produce the same result without choosing a more dramatic window.
Browser-local calculation
Analyze a concurrent exposure CSV
The five required columns are visible before the input. Additional columns are accepted as a bounded superset and reported as ignored; they do not enter interval or percentage arithmetic. File bytes are decoded with a fatal UTF-8 decoder. Pasted text and selected files remain in this browser session. The analyzer has no upload endpoint, browser storage, or network request path.
signal_idUnique without case distinctions; bounded ASCII token.opened_at_utcReal RFC 3339 UTC timestamp ending in uppercase Z.closed_at_utcSame format and strictly later than the open.planned_risk_pctGreater than 0 and at most 100, with at most six decimals.risk_basis_idBounded ASCII token. Different exact IDs stay separate.active in window = opened_at_utc <= window start < closed_at_utcsame-basis planned-risk sum = sum(active planned_risk_pct)concurrent-span share = duration(active count >= 2) / basis span * 100Concurrent interval inputs
Analysis runs locally. Changing the CSV hides the prior result until you analyze again.
Copy summary writes the selected basis ID, peak percentage, and timestamps to the system clipboard. Download JSON writes risk basis IDs plus peak and overlapping signal IDs to a local file. Neither action happens automatically. A derived JSON report above 512,000 bytes is blocked before any file or object URL is created.
Metrics remain suppressed until a valid interval set is analyzed.
Selected same-basis peak
Selected basis overlap footprint
Basis summaries
| Basis | Rows | Peak risk | Peak window | Maximum count | Pairs | Rows overlapping | Concurrent share | Peak IDs |
|---|
Validation notes
| Severity | Code | Row | Meaning | Repair |
|---|
Exact method
Formulas and deterministic event order
The parser first validates the CSV shape. Header names are used exactly as supplied: they are not trimmed, repaired, or case-folded. All five required lowercase names must appear once. Unknown nonblank names can remain in the file while the published column and cell limits keep the input bounded. Every data row must match the header width. A signal ID must be unique after ASCII lowercase folding across the whole file, including rows assigned to different bases.
Timestamps accept only a real calendar date and time in the form YYYY-MM-DDTHH:MM:SSZ, with an optional one-to-nine-digit fractional second. Numeric UTC offsets, local times, leap-second values, impossible dates, and a close that is equal to or earlier than its open are rejected. Parsed instants become exact epoch-nanosecond integers. No duration ratio uses binary floating-point arithmetic.
Planned-risk percentages accept a plain base-10 decimal greater than zero and no greater than 100. A sign, exponent, thousands separator, or more than six decimal places is rejected. The accepted text becomes an integer at a scale of 1,000,000. For example, 0.125 becomes 125000 and 2.25 becomes 2250000. Active-risk sums and comparisons use those integers.
basis peak = max over event windows(sum of active same-basis risk integers))overlap pair = max(open A, open B) < min(close A, close B)rows that overlap = distinct rows belonging to at least one overlap pairThe event list sorts by integer timestamp. At each timestamp, every close is removed before any open is added. Open events are ordered by case-folded signal ID only to make pair accounting deterministic; rows opening together still overlap each other during the following positive-duration window. For each open, the current active-set size is the number of new unordered overlap pairs created by that row.
The basis span begins at its earliest open and ends at its latest close. Concurrent duration is the sum of event-window durations where at least two rows are active. The percentage multiplies the duration numerator by 100 and a fixed ratio scale of 1,000,000, divides by the span duration, and rounds half up using integers. The published decimal string is authoritative.
The reported peak window is the earliest individual event window carrying the maximum planned-risk sum. If an equal-risk close and open change the active IDs without changing the sum, the earlier window remains selected. Peak signal IDs are sorted without case distinctions and then by their original ASCII spelling. The separate peak simultaneous count is the largest active-row count observed anywhere in that basis.
Worked synthetic example
ACC-A reaches 2.25% across three signals
The synthetic starter contains four ACC-A rows and one isolated ACC-B row. ACC-A-01 runs from 08:00 to 14:00 UTC at 0.75%, ACC-A-02 runs from 10:00 to 13:00 at 0.50%, ACC-A-03 runs from 12:00 to 16:00 at 1.00%, and ACC-A-04 runs from 14:00 to 15:00 at 0.25%. The first three rows are active together from 2026-01-15T12:00:00Z to 2026-01-15T13:00:00Z, producing the selected 2.25% sum.
ACC-A has 4 unordered overlap pairs: ACC-A-01 with ACC-A-02, ACC-A-01 with ACC-A-03, ACC-A-02 with ACC-A-03, and ACC-A-03 with ACC-A-04. All 4 ACC-A rows belong to at least one pair. ACC-A-01 closes exactly when ACC-A-04 opens, so that pair is excluded by the half-open rule.
The ACC-A span is eight hours, from 08:00 to 16:00. At least two rows are active for five hours. Five divided by eight is the reported 62.5% concurrent-span share. ACC-B contains 1 isolated row, 0 overlap pairs, and a 0% concurrent-span share. Its percentage is not added to ACC-A.
Download the synthetic starter CSV or inspect the machine-readable calculation fixtures. Every row is invented for method testing and represents no provider, account, exchange, or recommendation.
Basis discipline
Why risk basis IDs must remain separate
A percentage is meaningful only against its stated denominator. Two rows can both say 1% while referring to different accounts, allocations, model sleeves, capital snapshots, or internal definitions. Adding those values would create a number that neither row supplied. The analyzer therefore treats ACC-A and ACC-B as separate groups and exposes a summary for each.
Risk basis matching uses the exact supplied token. Surrounding whitespace is not removed, and whitespace makes the token invalid under the published grammar. Case is not silently folded for basis IDs because the file owner may use case as part of an identifier. Reviewers should correct accidental spelling or case variation in their source record before analysis, document the chosen basis, and rerun the calculation. The tool will not guess that two basis strings mean the same thing.
The global selected peak is a navigation aid across summaries, not an instruction to combine them. A higher percentage in one basis appears before a lower percentage in another. Equal percentages use the earlier peak. If risk and time also match, the ASCII basis ID breaks the tie. The full basis table remains visible so the selected row cannot hide other supplied groups.
Different questions
Pairs, rows, counts, and duration are not interchangeable
Overlap-pair count describes relationships. With three mutually overlapping rows, there are three unordered pairs. Adding a fourth row that overlaps only one of those rows increases the pair count by one. The number can grow faster than row count, so it should not be read as the number of signals or time windows.
Unique rows that overlap answers a different question: how many supplied rows participate in at least one positive-duration same-basis pair? An isolated row adds one to basis row count but adds nothing to this measure. Peak simultaneous count is different again. It is the largest active-set size in one event window, regardless of whether that window carries the highest planned-risk sum.
Concurrent-span share adds time. It measures how much of the full basis span has at least two active rows. The denominator runs from the earliest open to the latest close, so inactive gaps remain in the observed basis span while adding zero concurrent duration. It does not weight that duration by planned-risk percentage. A long overlap with two small percentages can produce a larger time share than a short overlap with three larger percentages. The peak and duration fields should be read together, not substituted for each other.
A zero-overlap result is explicit. It means no same-basis pair in the supplied valid rows intersects for positive duration under the half-open rule. It does not establish that the file covers every signal, that timestamps are original, or that no exposure existed elsewhere.
Distinct job
This analyzer does one job that adjacent tools do not
The result-sheet validator owns structural repair for a wider result record: required fields, chronology, outcomes, and compatible row conventions. This page accepts bounded extra columns but uses only five fields needed for interval overlap. A file can pass this narrow analyzer while still needing the wider validator for other claims.
A point risk-reward calculator evaluates explicit payoff and probability assumptions for one setup. It does not inspect a schedule of open and close times. A sequence tool evaluates ordered resolved values. It does not find simultaneous active intervals. A coverage test compares supplied rows with a declared population. It does not add same-basis planned percentages over time.
The distinct decision here is: given these supplied interval rows and exact basis labels, when is each basis most heavily populated by planned-risk percentages, which rows create that earliest peak, and how broad is the overlap footprint? Passing that calculation does not imply that any adjacent evidence question has passed.
Reproducibility
Deterministic fixtures cover boundaries and failures
The generator executes every source-ledger fixture before writing output. The fixture family covers the exact starter result, equal-time close/open behavior, cross-day, cross-month, cross-year, leap-year and leap-century arithmetic, nanosecond rounding in both directions, one versus two UTF-8 byte-order marks, multiple bases, global peak tie-breaks, quoted superset cells, malformed quoting, missing columns, duplicate identifiers without case distinctions, invalid UTC text, non-positive intervals, risk precision and range, input limits, and a valid no-overlap set. Invalid fixtures produce no metrics.
Open the 41-fixture result table
| Fixture | Expected | Calculated state | Rows | Bases | Key notes |
|---|---|---|---|---|---|
starter-five-rowsThe required ACC-A peak, four overlap pairs, four overlapping rows, 62.5 percent concurrent span, and isolated ACC-B baseline. | Calculable | analyzed | 5 | 2 | CONCURRENT_ROWS_PRESENTHALF_OPEN_BOUNDARY_APPLIED |
same-timestamp-half-open-handoffA close at exactly the next row's open is not overlap. | Calculable | analyzed | 2 | 1 | HALF_OPEN_BOUNDARY_APPLIEDNO_OVERLAP_PAIRS |
multiple-bases-never-summedTwo simultaneous intervals under different exact bases remain two independent results and never become 130 percent. | Calculable | analyzed | 2 | 2 | NO_OVERLAP_PAIRS |
equal-risk-peaks-choose-earliestEqual two-percent peak segments choose the earliest half-open window; the boundary-only A-C pair is excluded. | Calculable | analyzed | 3 | 1 | CONCURRENT_ROWS_PRESENTHALF_OPEN_BOUNDARY_APPLIED |
maximum-count-differs-from-risk-peakThree low-risk rows produce the maximum count, while a later two-row segment produces the maximum planned-risk sum. | Calculable | analyzed | 4 | 1 | CONCURRENT_ROWS_PRESENTMAX_COUNT_AND_RISK_PEAK_DIVERGE |
nanosecond-precisionOne nanosecond of overlap inside a three-nanosecond observed span is preserved without millisecond rounding. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
cross-day-durationA fixed three-second span crossing midnight preserves one exact second of overlap. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
cross-month-durationA fixed three-minute span crossing a month boundary preserves one exact minute of overlap. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
cross-year-durationA fixed three-minute span crossing a year boundary preserves one exact minute of overlap. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
leap-year-february-29The ordinary leap year 2024 admits February 29 and preserves exact cross-day duration. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
leap-century-2000The Gregorian leap century 2000 admits February 29 and preserves exact cross-month duration. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
non-leap-century-2100The Gregorian non-leap century 2100 rejects February 29. | Rejected | invalid | 1 | 0 | OPENED_AT_INVALID |
round-half-up-two-thirdsTwo concurrent nanoseconds inside a three-nanosecond span round half up to 66.666667 percent. | Calculable | analyzed | 2 | 1 | CONCURRENT_ROWS_PRESENT |
single-utf8-bomExactly one UTF-8 byte-order mark at byte zero is accepted and removed before header validation. | Calculable | analyzed | 1 | 1 | NO_OVERLAP_PAIRS |
double-utf8-bomA second UTF-8 byte-order mark is preserved as data and rejected rather than silently stripped. | Rejected | invalid | 1 | 0 | HEADER_INVALIDREQUIRED_COLUMN_MISSINGSIGNAL_ID_EMPTY |
malformed-utf8A lone 0xFF byte is rejected before CSV parsing and never replaced. | Rejected | malformed | 0 | 0 | UTF8_INVALID |
quoted-unknown-columnA bounded ignored field accepts a comma, escaped quotes, and an embedded line break under the CSV grammar. | Calculable | analyzed | 1 | 1 | NO_OVERLAP_PAIRSUNKNOWN_COLUMN_IGNORED |
malformed-unclosed-quoteAn unclosed quoted field produces no partial metrics. | Rejected | malformed | 0 | 0 | CSV_MALFORMED |
duplicate-signal-id-case-insensitiveSignal IDs are unique globally after ASCII lowercase folding, even across bases. | Rejected | invalid | 2 | 1 | SIGNAL_ID_DUPLICATE |
ascii-signal-id-orderAccepted punctuation is ordered by ASCII after case folding rather than locale collation. | Calculable | analyzed | 4 | 1 | CONCURRENT_ROWS_PRESENT |
timestamp-offset-rejectedA numeric +00:00 offset is rejected by the strict UTC Z profile. | Rejected | invalid | 1 | 0 | OPENED_AT_INVALID |
timestamp-calendar-and-fraction-errorsAn impossible date and a ten-digit fractional second are both rejected without ordering arithmetic. | Rejected | invalid | 1 | 0 | OPENED_AT_INVALIDCLOSED_AT_INVALID |
zero-duration-intervalEqual open and close timestamps are invalid rather than zero-duration overlap. | Rejected | invalid | 1 | 0 | INTERVAL_NOT_POSITIVE |
close-before-openA reverse interval is invalid. | Rejected | invalid | 1 | 0 | INTERVAL_NOT_POSITIVE |
fixed-scale-extremesThe minimum representable positive value and exact 100 percent value sum to 100.000001 without float drift. | Calculable | analyzed_with_warnings | 2 | 1 | PEAK_PLANNED_RISK_OVER_100CONCURRENT_ROWS_PRESENT |
planned-risk-overprecisionA seventh fractional digit is rejected instead of rounded. | Rejected | invalid | 1 | 0 | PLANNED_RISK_PRECISION |
planned-risk-zero-rangeA zero planned-risk percentage is rejected independently. | Rejected | invalid | 1 | 0 | PLANNED_RISK_RANGE |
planned-risk-upper-rangeA planned-risk percentage above 100 is rejected independently. | Rejected | invalid | 1 | 0 | PLANNED_RISK_RANGE |
empty-inputEmpty input remains an explicit non-exportable state. | Rejected | empty | 0 | 0 | EMPTY_INPUT |
header-onlyA valid header without data rows cannot produce metrics. | Rejected | invalid | 0 | 0 | NO_DATA_ROWS |
no-overlap-with-gapTwo separated same-basis rows produce zero concurrent duration across a span that includes the gap. | Calculable | analyzed | 2 | 1 | NO_OVERLAP_PAIRS |
risk-basis-case-collisionCase-colliding basis labels remain separate and create a warning rather than a merged sum. | Calculable | analyzed_with_warnings | 2 | 2 | RISK_BASIS_CASE_COLLISIONNO_OVERLAP_PAIRS |
non-ascii-identifiersNon-ASCII signal and basis identifiers are rejected under the bounded identifier grammar. | Rejected | invalid | 1 | 0 | SIGNAL_ID_INVALIDRISK_BASIS_ID_INVALID |
duplicate-headerAn exact duplicate required header is rejected before row mapping. | Rejected | invalid | 1 | 1 | HEADER_DUPLICATE |
file-byte-limitThe byte limit is checked before decoding or CSV parsing. | Rejected | invalid | 0 | 0 | FILE_TOO_LARGE |
column-limitA deterministic 41-column CSV exceeds the 40-column cap. | Rejected | invalid | 1 | 1 | TOO_MANY_COLUMNSUNKNOWN_COLUMN_IGNORED |
row-limitTwo thousand and one otherwise valid rows exceed the data-row cap. | Rejected | invalid | 2001 | 1 | TOO_MANY_ROWS |
blank-logical-record-overflowTwo thousand and one blank logical records followed by a valid header and row remain invalid rather than being misclassified as empty. | Rejected | invalid | 0 | 0 | TOO_MANY_ROWSBLANK_ROWS_IGNORED |
logical-record-overflow-followed-by-malformedA logical-record overflow followed by an unclosed quoted field resolves to the malformed state and exposes only the grammar failure. | Rejected | malformed | 0 | 0 | CSV_MALFORMED |
cell-code-point-limitA 12,001-code-point ignored cell exceeds the per-cell cap even though the column is not calculated. | Rejected | invalid | 1 | 1 | CELL_TOO_LONGUNKNOWN_COLUMN_IGNORED |
issue-capValidation stops deterministically at the 200-issue cap and emits the cap error without metrics. | Rejected | invalid | 201 | 0 | ISSUE_LIMIT_REACHEDSIGNAL_ID_EMPTYOPENED_AT_EMPTYCLOSED_AT_EMPTYPLANNED_RISK_INVALIDRISK_BASIS_ID_EMPTY |
Limitations
What this output cannot establish
The analyzer cannot authenticate a source message, recover a deleted post, detect an edited timestamp, confirm that an entry was reachable, determine whether an order was submitted, or show whether a stated stop defined the supplied percentage. It does not contact a provider, messaging platform, exchange, wallet, archive, or blockchain. It makes no provider status or quality decision.
The planned-risk sum is not account risk, account return, drawdown, actual loss, position size, leverage, margin use, liquidation distance, or capital at risk. Those concepts require additional fields and assumptions that are not present in this five-column contract. The analyzer also does not estimate dependence or common market drivers between simultaneous rows.
Planned percentages can be internally inconsistent even when parsing succeeds. A provider might change its denominator over time, reuse a basis label, publish percentages after the fact, or define risk differently across instruments. The exact basis partition prevents one kind of invalid addition; it cannot prove that the label itself is stable or truthful.
Overlap does not establish financial performance, provider verification, suitability, endorsement, or misconduct. No-overlap does not establish safety. Neither state predicts a future outcome. The page does not issue a rating, rank providers, assess legal compliance, prove search indexing, or promise retrieval or citation by an automated system.
Use the output as a review map. Preserve the original file separately, record its hash and capture time, document the meaning of each basis ID, and reconcile important rows with primary evidence. Corrections should change the source ledger and regenerate all bound artifacts instead of editing a displayed number by hand.
Privacy and local processing
The analyzer keeps supplied rows in current browser memory
Pasted text and selected file bytes are parsed by the analyzer in the current page. Its runtime contract permits no fetch, XMLHttpRequest, beacon, WebSocket, EventSource, cookie, localStorage, sessionStorage, or IndexedDB path. The page Content Security Policy also sets connect-src none. These controls govern the analyzer; the browser still requests the public page and its same-site presentation assets when the page first loads.
Issue messages expose only a stable code, severity, row number, and required-column label. They do not repeat cell values, filenames, signal IDs, risk basis IDs, unknown-column values, or raw CSV. Changing the input suppresses the previous result until the new input is analyzed.
Nothing persists automatically. Copy summary and Download JSON are explicit user actions. Copy summary writes the selected risk basis ID, peak percentage, and timestamps to the system clipboard, which the operating system or a configured sync service may retain. The JSON export writes risk basis IDs plus peak and overlapping signal IDs with the method identity, boundaries, issues, input counts, and calculated basis summaries; it excludes raw CSV and ignored-column values. Clear removes the current input and result references from the page.
Source boundary
Method and risk sources
The canonical shows only official sources that directly support CSV interpretation, timestamp grammar, or bounded trading-risk context. Operational SEO, crawler, sitemap, notification, and platform-reporting sources remain in the frozen research ledger and release handoff; they are not calculation sources. None of the links below validates a user CSV.
| Publisher | Official source | Recorded | Source state | Bounded use | Does not establish |
|---|---|---|---|---|---|
| U.S. Commodity Futures Trading Commission | Customer Advisory: Understand the Risks of Virtual Currency Trading | 2026-07-14 | official advisory reviewed live on 2026-07-14 for bounded risk context; no local archive or domain-formula authority is claimed | Supports keeping leverage-amplified loss risk visible when explaining why planned-risk percentages are not actual account outcomes. | Does not define the interval formulas, a universally acceptable exposure threshold, or advice. |
| National Futures Association | Investor Best Practices | 2026-07-14 | official investor guidance reviewed live on 2026-07-14 for bounded due-diligence context; no local archive, verification, or advice claim is made | Supports plain risk disclosure, independent due diligence, and avoiding claims that a calculator replaces qualified account-specific review. | Does not verify a provider, prescribe a risk percent, rate an opportunity, or validate the formulas. |
| RFC Editor | Common Format and MIME Type for Comma-Separated Values Files | 2026-07-14 | stable official standards document reviewed live on 2026-07-14; no local archive or claim beyond the cited syntax boundary is made | Supports quoted-field, escaped-quote, record-width, and optional-final-line-ending behavior. | Does not define domain calculations. |
| RFC Editor | Date and Time on the Internet: Timestamps | 2026-07-14 | stable official standards document reviewed live on 2026-07-14; no local archive or claim beyond the cited timestamp boundary is made | Supports explicit Internet timestamp syntax and ordering context. | Does not define overlap, risk, or advice. |
Dataset ID csr-crypto-signal-concurrent-exposure-analyzer-2026-07-14. Source commit b00a5584e4eadd5b308b10b5db182375eda1f0b0. The immutable source location is recorded in the machine-readable manifest without adding an unreviewed public content link.
Repair reference
Stable issue codes keep invalid inputs explicit
Errors suppress every metric because continuing would require a guess about CSV structure, identity, time, risk, or basis. Warnings and notices preserve valid arithmetic while keeping ignored columns, multiple bases, and overlap state visible. Issue order follows the frozen ledger rather than incidental browser traversal.
Open the 37-code reference
| Code | Severity | Meaning |
|---|---|---|
EMPTY_INPUT | notice | No nonblank input is available for analysis. |
FILE_READ_FAILED | error | The selected local file could not be read completely. |
UTF8_INVALID | error | Input bytes are not strict UTF-8 and cannot be decoded without replacement. |
FILE_TOO_LARGE | error | Input exceeds maximumBytes before decoding or parsing. |
CSV_MALFORMED | error | CSV quoting, delimiter placement, or logical-record structure cannot be parsed without guessing. |
TOO_MANY_ROWS | error | Input exceeds maximumLogicalRecords or maximumNonblankDataRows. |
TOO_MANY_COLUMNS | error | The header exceeds maximumColumns. |
CELL_TOO_LONG | error | A decoded field exceeds maximumCellCodePoints. |
ISSUE_LIMIT_REACHED | error | The deterministic issue cap was reached; validation stopped and metrics remain suppressed. |
HEADER_EMPTY | error | A header field is empty. |
HEADER_INVALID | error | A header does not match the exact lowercase ASCII snake-case grammar. |
HEADER_DUPLICATE | error | An exact header name appears more than once. |
REQUIRED_COLUMN_MISSING | error | One or more of the five required columns is absent. |
UNKNOWN_COLUMN_IGNORED | notice | A bounded extra column was parsed for structural limits but excluded from calculations and export. |
ROW_WIDTH_MISMATCH | error | A data record does not contain exactly the header field count. |
NO_DATA_ROWS | error | The parsed CSV contains a header but no nonblank data row. |
BLANK_ROWS_IGNORED | notice | One or more fully empty logical data records were ignored. |
SIGNAL_ID_EMPTY | error | signal_id is empty. |
SIGNAL_ID_INVALID | error | signal_id violates the ASCII grammar or 80-code-point limit. |
SIGNAL_ID_DUPLICATE | error | signal_id duplicates another row after ASCII lowercase folding. |
OPENED_AT_EMPTY | error | opened_at_utc is empty. |
OPENED_AT_INVALID | error | opened_at_utc violates the strict validated RFC3339 UTC Z profile. |
CLOSED_AT_EMPTY | error | closed_at_utc is empty. |
CLOSED_AT_INVALID | error | closed_at_utc violates the strict validated RFC3339 UTC Z profile. |
INTERVAL_NOT_POSITIVE | error | closed_at_utc is equal to or earlier than opened_at_utc. |
PLANNED_RISK_EMPTY | error | planned_risk_pct is empty. |
PLANNED_RISK_INVALID | error | planned_risk_pct is not an unsigned plain base-10 decimal in the accepted grammar. |
PLANNED_RISK_PRECISION | error | planned_risk_pct has more than six fractional digits. |
PLANNED_RISK_RANGE | error | planned_risk_pct is not in the interval (0, 100]. |
RISK_BASIS_ID_EMPTY | error | risk_basis_id is empty. |
RISK_BASIS_ID_INVALID | error | risk_basis_id violates the ASCII grammar or 80-code-point limit. |
RISK_BASIS_CASE_COLLISION | warning | Two exact risk basis IDs differ only by ASCII letter case. They remain separate and are never summed. |
HALF_OPEN_BOUNDARY_APPLIED | notice | At least one same-basis close and open share a timestamp; close-before-open half-open handling prevented boundary-only overlap. |
NO_OVERLAP_PAIRS | notice | No same-basis unordered row pair overlaps under the half-open rule. |
CONCURRENT_ROWS_PRESENT | notice | At least one basis has a positive-duration segment with two or more rows open. |
MAX_COUNT_AND_RISK_PEAK_DIVERGE | notice | The maximum row-count segment and maximum planned-risk segment differ; both metrics remain separately labelled. |
PEAK_PLANNED_RISK_OVER_100 | warning | A same-basis active sum exceeds 100 percent. The value remains descriptive user-supplied arithmetic, not actual loss, leverage, or advice. |
FAQ
Questions about concurrent exposure arithmetic
Does concurrent planned risk equal my account risk?
No. The analyzer adds user-supplied planned-risk percentages only when rows share the exact same risk_basis_id and overlap in time. It does not verify the denominator, fills, stop execution, leverage, fees, slippage, liquidity, correlation, or loss.
Why does a close at the next signal's open not count as overlap?
Intervals are half-open: [open, close). The closing row is inactive at its close timestamp, and same-time closes are processed before opens. Boundary contact therefore has zero overlapping duration.
Why can maximum signal count and peak planned risk differ?
Three small planned-risk rows can overlap while a later pair has a larger sum. The analyzer reports the maximum count independently and attaches the peak window and IDs to the greatest planned-risk sum.
Does an overlap pair prove correlation?
No. It proves only that two supplied intervals under one exact basis label were open during a positive-duration common window. It does not examine assets, direction, strategy, market regime, returns, or statistical dependence.
Why are different risk basis IDs never added together?
A percentage is meaningful only relative to its stated denominator. The tool cannot know whether two basis IDs describe the same account, equity snapshot, subaccount, or method, so exact different labels remain separate.
Does 62.5 percent concurrent-span share mean 62.5 percent of account time was risky?
No. It means that, within one supplied basis, segments with at least two rows open total five hours inside the eight-hour span from earliest open to latest close. It is historical row-timing arithmetic, not a risk judgment.
Can the analyzer calculate position size or tell me what to do?
No. Position size needs account, stop, instrument, contract, fee, slippage, leverage, liquidity, and personal constraints that this tool neither requests nor calculates. The output is not advice.
Does the analyzer upload my CSV?
No. The analyzer contract permits zero analyzer network requests, uploads, cookies, or browser-storage writes. Parsing and integer arithmetic run in current browser memory. Only explicit Copy summary and Download JSON actions can persist the disclosed derived values or shown identifiers outside that memory.
Corrections
Corrections cannot buy a conclusion
Method or route corrections can be submitted through Submit a Group. Paid production, sponsorship, profile work, or visibility services cannot buy a favorable conclusion, a verified label, a ranking position, or removal of a missing-proof note.