Interactive calculation
Calculate the path only after the sequence is structurally usable
A smooth total can hide the decline a follower would have faced between an earlier high and a later low. This analyzer starts at a zero-R boundary, adds each resolved row's net R in the supplied order, records the running peak, and subtracts each cumulative value from that peak. The largest difference is the maximum net-R drawdown for this supplied sequence.
The tool deliberately refuses to sort a decreasing close-time sequence. Silent sorting can manufacture a different peak, trough, and recovery. Equal close timestamps are allowed only with a warning because the available data does not establish which event changed the path first. Open, cancelled, and no-fill rows remain visible as exclusions rather than disappearing from the record count.
UTF-8 comma-delimited CSV with signal_id, posted_at_utc, closed_at_utc, outcome, and net_r. Net R may use up to 12 decimal places. Limit: 256,000 bytes, 2,000 nonblank data rows, and 40 columns.
The analyzer contains no fetch, XMLHttpRequest, beacon, WebSocket, form submission, localStorage, sessionStorage, IndexedDB, or cookie write for CSV content. A local download is created only when you request it. Formula-like signal IDs are prefixed as text in that download so spreadsheet software does not execute them as formulas.
Current sequence result
The supplied structure and chronology pass. Treat the output as net-R path arithmetic only.
Issues and repair actions
| Severity | Code | Row | Column | Finding | Repair |
|---|---|---|---|---|---|
| No structural issues found by this analyzer. | |||||
Resolved sequence points
| # | Signal ID | Closed UTC | Outcome | Net R | Cumulative | Running peak | Drawdown | Marker |
|---|
Synthetic starter loaded and analyzed.
Worked example
The same headline total can conceal a 1.5 R decline
The synthetic starter rises to 1.2 R after SEQ-001. Two negative rows then move cumulative net R to 0.4 R and minus 0.3 R. The running peak remains 1.2 R, so the trough is 1.5 R below that peak. A 0.4 R row begins the recovery but leaves the path underwater. SEQ-005 adds 1.3 R and lifts cumulative net R to 1.4 R, finally clearing the earlier peak.
The final total is positive 1.4 R, yet the path includes three resolved rows below the earlier high and a two-row negative streak. A total alone would hide those conditions. The example is invented to demonstrate arithmetic. It is not a provider result, market sample, backtest, account history, trading recommendation, or expected future sequence.
The chart uses cumulative net R. Its vertical distances are not currency, account percentage, margin usage, or liquidation distance.
Exact model
Running peaks make the calculation path-dependent
Let each resolved row contribute a cost-adjusted value r_i. The analyzer begins at E_0 = 0 and forms E_i by adding every resolved net-R value through row i. The running peak P_i is the greatest value observed from the starting boundary through E_i. Current drawdown D_i is P_i minus E_i. Maximum drawdown is the largest D_i in the supplied path.
E_0 = 0
E_i = sum(r_j), for resolved rows j through i
P_i = max(0, E_1, ..., E_i)
D_i = P_i - E_i
MDD = max(D_i)
A later cumulative high changes the running peak for future rows but does not rewrite the peak that produced an earlier maximum-drawdown episode. Recovery belongs to that episode: it is the first later resolved row at or above the captured peak. An exact return to the peak closes that episode and becomes the latest peak boundary for any later decline. If no recovery row exists, the result stays unrecovered at the end of the supplied sequence.
Net-R values may use at most 12 decimal places. The analyzer rounds cumulative additions to that same precision so ordinary decimal inputs such as 0.1 and 0.2 remain stable. A value with finer precision is rejected instead of being silently rounded to zero or changing sign classification.
The longest negative streak counts contiguous resolved rows whose net R is below zero. A zero or positive net-R row ends the streak. The analyzer uses the numeric net-R sign, not a win or loss label, because fees, partial exits, inconsistent labels, or data errors can make the two disagree. A disagreement produces a warning so the source can be reviewed.
Chronology
Input order is evidence, not a formatting detail
Maximum drawdown is sensitive to serial order. A sequence containing plus 2 R, minus 1 R, and minus 1 R reaches a 2 R decline after the peak. Reordering the losses before the gain produces a different peak and a different recovery story. That is why this analyzer never sorts resolved rows silently.
Each resolved close timestamp must be equal to or later than the previous resolved close timestamp in the file. A decreasing timestamp stops all metrics. Equal timestamps are not automatically wrong, but the row order among simultaneous events may be unknown. The analyzer preserves the supplied order and displays a tied-time warning instead of pretending the ambiguity has no effect.
Publication time is checked separately. A close cannot precede the original posted time. This catches one form of impossible chronology, but it does not prove the timestamp is authentic, that the source was not edited, that a target touch produced a fill, or that followers received the same message at the same time.
Outcome treatment
Unresolved and non-executed rows remain visible without entering realized net R
Win, loss, and break-even rows are treated as resolved only when they include a valid close time and finite net R. Open, cancelled, and no-fill rows stay in the row count and are summarized by outcome, but they do not move the realized path. A nonblank net-R value on one of those excluded rows produces a warning because the status and numeric result conflict.
Unresolved rows remain visible in the supplied population even though they do not enter realized net R. This policy prevents two opposite errors. The tool does not force every published idea into a realized win or loss, and it does not erase unresolved rows from the visible population. A separate population audit still has to ask whether every source signal was exported at all. The analyzer cannot detect a deleted loss or a signal that never entered the file.
Optional source URLs are checked only for safe HTTPS syntax. The tool does not fetch them. A syntactically valid link can be stale, unrelated, edited, access-restricted, or fabricated. Human review must inspect the original message, edit history, timing, entry conditions, stop changes, target updates, and follower-side execution.
Interpretation boundary
Net-R drawdown is not account-equity drawdown
R is a normalized risk unit. One row at minus 1 R says the result lost one declared unit of risk under that row's accounting. It does not say the account lost one percent, one dollar, or one fixed fraction of capital. Translating R into an account curve requires the risk amount attached to each trade and how that amount changes over time.
Whole-account drawdown also needs starting equity, deposits and withdrawals, position sizing, leverage, margin mode, compounding, concurrent positions, correlation, open-equity marks, funding, fees, slippage, partial fills, liquidation events, and the rule used when several positions overlap. Summing sequential net R assumes a simple ordered diagnostic. It does not model capital tied up in concurrent trades or a portfolio that marks open exposure continuously.
The academic drawdown definition concerns a value path. This page applies the peak-to-trough arithmetic to cumulative net R because result sheets often record normalized outcomes rather than complete account equity. The unit stays R throughout. The result must never be relabeled as percentage drawdown, money lost, capital required, survival probability, or account safety.
Evidence limits
A precise path can still be built from selected or impossible records
The CFTC warns that hypothetical trading results have not been subjected to actual market conditions. Stops can execute at a different price or fail to execute, bid-ask spread and liquidity can change fills, and commissions, fees, subscriptions, and other costs can be omitted. Several consecutive losses can matter even when a final performance presentation looks attractive.
A result sheet can therefore pass every structural check and still describe fabricated, cherry-picked, hindsight-selected, stale, or non-executable trades. A low maximum drawdown in a short sample can reflect the sample boundary rather than durable risk. Track-record length and data frequency affect drawdown interpretation, while serial dependence means one observed order cannot be treated as an independent forecast.
Before relying on the output, reconcile the exported row count to the source population, verify one stable ID per signal, inspect edits and deletions, reconstruct entries and exits, include costs, preserve open risk, define the cutoff, and compare any provider claim with an actual account record when available. Passing arithmetic is a prerequisite for a question, not a verdict.
Fixture proof
Seven synthetic cases cover recovery, ambiguity, invalid chronology, and malformed CSV
Every fixture is invented and contains no provider or market performance. The generator calculates the expected state and metrics before writing public files. The independent checker will repeat the math separately and attack malformed quotes, row widths, duplicate IDs, timestamp edges, numeric ranges, URL syntax, formula-like text, and script injection.
| Fixture | State | Rows | Issues | Maximum drawdown |
|---|---|---|---|---|
SEQUENCE-RECOVEREDRecovered peak-to-trough sequence | reviewable | 5 resolved; 1 excluded | 0 errors; 0 warnings | 1.5 R |
SEQUENCE-UNRECOVEREDUnrecovered drawdown | reviewable | 4 resolved; 0 excluded | 0 errors; 0 warnings | 1 R |
SEQUENCE-STARTING-PEAKAll-negative sequence from the zero boundary | reviewable | 3 resolved; 0 excluded | 0 errors; 0 warnings | 0.6 R |
SEQUENCE-TIED-TIMESTied close times require an order warning | reviewable_with_warnings | 2 resolved; 0 excluded | 0 errors; 1 warnings | 0.5 R |
SEQUENCE-SIGN-MISMATCHOutcome labels do not override cost-adjusted net-R sign | reviewable_with_warnings | 2 resolved; 0 excluded | 0 errors; 2 warnings | 0.1 R |
SEQUENCE-OUT-OF-ORDERResolved chronology is not silently sorted | incomplete | 2 resolved; 0 excluded | 1 errors; 0 warnings | Suppressed |
SEQUENCE-MALFORMEDUnclosed quoted field | malformed | 0 resolved; 0 excluded | 1 errors; 0 warnings | Suppressed |
Issue reference
Each failure names the row, field, and repair action
Errors suppress all path metrics. Warnings remain visible beside the result because the arithmetic can run while interpretation is limited. The stable code is intended for reproducible tests and machine-readable summaries; the message and repair text are intended for a person correcting the export.
| Code | Severity | Scope | Repair |
|---|---|---|---|
empty_input | error | file | Paste a UTF-8 comma-delimited CSV or load the synthetic starter. |
file_too_large | error | file | Reduce the input to 256,000 UTF-8 bytes or less. |
too_many_rows | error | file | Use no more than 2,000 nonblank data rows. |
too_many_columns | error | header | Use no more than 40 columns. |
cell_too_long | error | cell | Shorten each cell to 12,000 characters or less. |
unclosed_quoted_field | error | file | Close the quoted field and double any quote inside it. |
unexpected_quote | error | cell | Place a quote only at the start of a quoted field or escape it as two quotes inside that field. |
characters_after_closing_quote | error | cell | End the field immediately after its closing quote or follow it with a comma or record ending. |
row_width_mismatch | error | row | Give the row the same number of fields as the header. |
missing_required_header | error | header | Add every required lowercase header. |
duplicate_header | error | header | Keep each normalized header once. |
noncanonical_header | warning | header | Use trimmed lowercase header names for a stable future export. |
duplicate_signal_id | error | row | Give each source signal one stable unique identifier. |
invalid_signal_id | error | cell | Use 1 to 80 letters, numbers, dots, underscores, colons, or hyphens. |
invalid_outcome | error | cell | Use win, loss, break_even, open, cancelled, or no_fill. |
invalid_posted_at_utc | error | cell | Use a real ISO 8601 UTC timestamp ending in Z. |
missing_closed_at_utc | error | cell | Give every resolved outcome a UTC close timestamp. |
invalid_closed_at_utc | error | cell | Use a real ISO 8601 UTC timestamp ending in Z or leave it blank for an unresolved row. |
close_before_post | error | row | Use a close timestamp that is not earlier than publication. |
resolved_sequence_out_of_order | error | row | Place resolved rows in nondecreasing close-time order; the analyzer does not silently sort them. |
tied_close_time | warning | row | Document the event order for equal close timestamps or accept that path metrics depend on input order. |
missing_net_r | error | cell | Give every resolved outcome a finite net-R value. |
invalid_net_r | error | cell | Use a finite base-10 number with no more than 12 decimal places and without a percent sign, currency symbol, or formula. |
net_r_out_of_range | error | cell | Keep net R between -1000 and 1000 and investigate the unit or export. |
unresolved_net_r_present | warning | row | Leave net R blank for open, cancelled, and no-fill rows or change the outcome when the record resolves. |
open_row_has_close | warning | row | Leave an open row's close time blank or change the outcome to its resolved state. |
outcome_net_sign_mismatch | warning | row | Review the outcome label and cost-adjusted net R; sequence movement follows net-R sign. |
invalid_source_url | warning | cell | Use an absolute credential-free HTTPS URL with a usable host, or leave the optional field blank. |
formula_like_text | warning | cell | Remove spreadsheet formula prefixes before sharing or opening the CSV in spreadsheet software. |
no_resolved_rows | error | file | Include at least one win, loss, or break-even row with close time and net R. |
Method and provenance
The page is an original tool, not a GEO keyword variation
The authenticated Search Console archive supports the broader result-sheet, accuracy, and risk cluster. It does not contain an exact-query demand row for this analyzer. The canonical was selected because it performs a missing decision job across three existing pages: move from structured rows to an observed path without confusing that path with account performance.
Current Google guidance says unique, compelling, non-commodity content and foundational SEO matter more than special GEO hacks. It warns against creating separate pages for every query variation and says llms.txt is not a Google ranking requirement. This release plan therefore uses one substantial canonical, one dedicated sitemap URL, useful static explanation, a working local tool, clear internal links, and no modifier family.
OpenAI's publisher guidance says OAI-SearchBot needs crawl access to read content and noindex directives. The analyzer uses explicit labels, roles, live status, and tables so screen readers and browser agents can interpret its controls and results. Crawl access creates eligibility only; it cannot be reported as retrieval, citation, ranking, or endorsement.
| Publisher | Accessed | Capture | Boundary used here |
|---|---|---|---|
| Google Search Central Google's Guide to Optimizing for Generative AI Features on Google Search | 2026-07-13 | 55ef8e67ea9cdc89...191,863 bytes |
|
| OpenAI Publishers and Developers - FAQ | 2026-07-13 | The official page was readable through web extraction. Its CDN rejected the separate command-line capture with HTTP 403, so no capture hash is claimed. |
|
| U.S. Commodity Futures Trading Commission Fraud Advisory: Commodity Trading Systems Sold on the Internet | 2026-07-13 | d03471117cf417ee...44,430 bytes |
|
| arXiv Drawdown: From Practice to Theory and Back Again | 2026-07-13 | adc138b196f7a6f3...41,092 bytes |
|
| RFC Editor Common Format and MIME Type for Comma-Separated Values Files | 2026-07-13 | a3d05fac4bf87ea5...134,011 bytes |
|
Dataset ID csr-crypto-signal-drawdown-sequence-analyzer-2026-07-13. Source commit 4c6f7305b79b4aa0ec512d1f455ca1b7bf0ee895. Immutable source ledger.
Questions
Common drawdown-sequence questions
Is maximum net-R drawdown the same as account drawdown?
No. Net R is a normalized trade-result unit. Account drawdown needs starting equity, sizing, compounding, concurrent exposure, deposits and withdrawals, leverage, open-equity treatment, and actual costs.
Why does row order matter?
Drawdown is path-dependent. The same net-R values can produce a different peak, trough, recovery, and time underwater when their order changes. The analyzer preserves input order and refuses a decreasing close-time sequence.
What happens to open, cancelled, and no-fill rows?
They remain counted and visible as excluded rows. They do not enter the realized net-R path, and a nonblank net-R value on an excluded row produces a warning.
Does a low drawdown prove a provider is safe or profitable?
No. A short, selected, fabricated, incorrectly ordered, or non-executable sequence can look smooth. The analyzer does not authenticate sources, detect omitted calls, verify fills, or model account risk.
Why can a win label have negative net R?
Costs, partial exits, or inconsistent source labels can make the net result disagree with the headline outcome. The analyzer warns and uses the numeric net-R sign for path movement.
Does the CSV leave the browser?
No. The planned analyzer performs parsing and arithmetic in the page and contains no CSV upload, fetch, beacon, WebSocket, form submission, or storage write.
Continue the review