/tools copy inventory (appendix B to the attorney review packet for #4835)
Status: research-only. This document does NOT constitute legal advice. It is an inventory of customer-facing strings on the public calculator pages, prepared for review by a securities/investment-adviser regulatory attorney and an advertising/consumer-protection attorney. Last updated: 2026-10-31 UTC. Snapshot:
origin/developat78b417d24. Verify freshness with the staleness check in the main packet.
Main packet: docs/legal/research/funnel-and-tools-copy-attorney-packet-2026-10-31.md. Funnel appendix: docs/legal/research/funnel-copy-inventory-2026-10-31.md.
How this inventory was produced
- Static text: every string literal, template text and JSX text node under
frontend/raxx-next/{app,components,lib}/toolswas read from the TypeScript syntax tree (the same extractornpm run lint:tools-copyuses), then non-copy tokens (CSS classes, element ids, event names, key names, template fragments such as" x 100 x ") were removed. The Location column isfile:lineplus the enclosing declaration, so a reviewer can open the source line. - Run-time text: result sentences, arithmetic steps, notes and error messages are assembled from fragments, so the Rendered samples tables were produced by calling the real library functions (
evaluatePositionSize,computePayoff,describeResult,simulateRuin,resultSentenceand friends) on the pages' own golden examples and on the edge cases that trigger a note or an error. - Run-time text is sampled, not exhaustive. The Rendered samples tables cover each page's golden examples and the edge cases that trigger a note, an error or a limit; other inputs reuse the same templates with other numbers. The notes and limit wording in the library source were compared with the tables line by line after the first run, and the missing cases were added (PSZS-048 to PSZS-056, OPTS-113 to OPTS-123, RORS-069 to RORS-072). Where a note can appear only for a case the page cannot produce, the row says so (OPTS-121 to OPTS-123).
- HTML entities. The extractor returns JSX text raw, so
','and→arrive undecoded. They are decoded before the text is listed. The first run decoded only'; HUB-021 and SHL-044 were added when the other two forms were found, and a search of every extracted string for any remaining entity found none. - Completeness check against the source. After the first run, every extracted string of two or more words under
app/tools,components/toolsandlib/toolswas matched against this appendix. Two kinds of string are not covered by that match. (1) Strings no visitor reads, left out on purpose: the text sent only to error monitoring (Calculator error in <slug>), errors thrown for programmer misuse (toScaled needs a finite number,analyzePayoff needs at least one leg,contracts must be a whole number, 1 or more, the registry slug check) and the server-render stub (Web Workers exist in the browser only.). (2) Sentences a component assembles at run time from a template and a value, which the static match cannot see and which this appendix samples, as the bullet above says. A second pass over what a visitor sees or hears found two such sentences the first pass had missed, and they are now listed: the options payoff chart cursor readout in its three forms (profit, loss and breakeven; OPTS-124 to OPTS-126), which is drawn under the chart and is also the chart slider's spoken value, and the spoken-only status lineSimulating.on the risk of ruin page (RORS-073). Other run-time templates may still be represented by a sample rather than by every form they can take. - The calculators accept only numbers the visitor types. The hub and every page state that the numbers stay in the browser; the Touches column marks where.
- Touches is a mechanical, pattern-based triage column, not a legal conclusion. Codes are defined in the main packet, section "Guardrail map". For /tools the ones that matter most are G2 (simulation and "not a prediction" wording), G4 (placeholder XYZ, no tickers), G5 ("recommendation" wording and the mandated "should" heading), G6 (risk percent, stop and account-size wording: the guardrail is that no value is suggested), G7 ("free", "no card needed", sign-up wording), G8 (what stays in the browser), G9 (the verbatim disclaimer) and G10 (EU/EEA and Quebec). A dash means no pattern matched.
Counts
| Prefix | Group | Rows |
|---|---|---|
HUB |
Hub | 21 |
SHL |
Shared shell | 46 |
REG |
Registry (titles, descriptions, blurbs) | 18 |
PSZ |
Position size | 80 |
PSZS |
Position size: rendered samples | 56 |
OPT |
Options payoff | 78 |
OPTS |
Options payoff: rendered samples | 126 |
ROR |
Risk of ruin | 94 |
RORS |
Risk of ruin: rendered samples | 73 |
Total rows: 592. Pre-staged proposals for the three pages not on develop are in B7 and are not counted.
Inventory by surface
B1. Hub (/tools)
- Route:
/tools - Card and PR: #4838 (#4895)
- Owner: Product owner: Kristerpher (epic #4819 decisions, 2026-10-29). Copy was drafted in the design stage (
docs/design/seo-tools/) and built by the feature card. No named copy owner and nomarketing-strategistsign-off is recorded in the epic or the code; PM to assign (gap listed in the main packet). Legal clearance: counsel via #3141. - Status of every row below: PUBLISHED-PENDING-REVIEW: on develop with no feature flag (the tool registry is the only visibility control), so it is live on raxx.app when develop is next promoted to main; not on main at the snapshot. Published without waiting for counsel by operator decision 2026-10-29; attorney review runs in parallel (
needs:attorney-reviewis not a blocker). Not counsel-cleared.
| ID | Location (file:line, context) | String as written in source | Touches |
|---|---|---|---|
| HUB-001 | components/tools/ToolsHub.tsx:25 (ToolsHub.label @skip) |
Skip to calculators |
- |
| HUB-002 | components/tools/ToolsHub.tsx:27 (ToolsHub.label @items) |
Raxx |
- |
| HUB-003 | components/tools/ToolsHub.tsx:27 (ToolsHub.label @items) |
Tools |
- |
| HUB-004 | components/tools/ToolsHub.tsx:36 (ToolsHub) |
Calculators |
- |
| HUB-005 | components/tools/ToolsHub.tsx:48 (ToolsHub) |
Enter |
- |
| HUB-006 | components/tools/ToolsHub.tsx:52 (ToolsHub) |
Get |
- |
| HUB-007 | components/tools/ToolsHub.tsx:64 (ToolsHub) |
No calculators are published yet |
- |
| HUB-008 | components/tools/ToolsHub.tsx:65 (ToolsHub) |
Each calculator is listed here when it is published. |
- |
| HUB-009 | components/tools/ToolsHub.tsx:71 (ToolsHub) |
How these calculators work |
- |
| HUB-010 | components/tools/ToolsHub.tsx:75 (ToolsHub) |
Arithmetic only. |
- |
| HUB-011 | components/tools/ToolsHub.tsx:75 (ToolsHub) |
Every figure is a formula applied to the numbers you type. Examples use a placeholder, XYZ. |
G4 |
| HUB-012 | components/tools/ToolsHub.tsx:79 (ToolsHub) |
Your numbers stay in your browser. |
G8 |
| HUB-013 | components/tools/ToolsHub.tsx:79 (ToolsHub) |
Nothing you enter is sent to a server, saved or logged. |
G8 |
| HUB-014 | components/tools/ToolsHub.tsx:83 (ToolsHub) |
Method shown. |
- |
| HUB-015 | components/tools/ToolsHub.tsx:83 (ToolsHub) |
Each page lists its formulas and a worked example. |
- |
| HUB-016 | lib/tools/constants.ts:24 (OG_IMAGE_ALT) |
Trading calculators: arithmetic on the numbers you enter, in your browser. |
G8 |
| HUB-017 | lib/tools/constants.ts:58 (HUB_TITLE) |
Free Trading Calculators - Position Size, Options Payoff |
G6, G7 |
| HUB-018 | lib/tools/constants.ts:60 (HUB_DESCRIPTION) |
Free trading calculators for position size, options payoff, risk of ruin and more. Arithmetic on the numbers you enter, in your browser. No sign-up. |
G6, G7, G8 |
| HUB-019 | lib/tools/constants.ts:61 (HUB_H1) |
Trading calculators |
- |
| HUB-020 | lib/tools/constants.ts:63 (HUB_LEDE) |
Free calculators for position size, risk and options payoff. Each one is arithmetic on the numbers you type, and your numbers stay in your browser. |
G6, G7, G8 |
| HUB-021 | components/tools/ToolsHub.tsx:57 (ToolsHub; written → in the source, aria-hidden) |
Open calculator → |
- |
B2. Shared shell: header, footer, disclaimer, CTA, copy link, errors, 404
- Route: every
/tools/*page - Card and PR: #4838 (#4895)
- Owner: Product owner: Kristerpher (epic #4819 decisions, 2026-10-29). Copy was drafted in the design stage (
docs/design/seo-tools/) and built by the feature card. No named copy owner and nomarketing-strategistsign-off is recorded in the epic or the code; PM to assign (gap listed in the main packet). Legal clearance: counsel via #3141. - Status of every row below: PUBLISHED-PENDING-REVIEW: on develop with no feature flag (the tool registry is the only visibility control), so it is live on raxx.app when develop is next promoted to main; not on main at the snapshot. Published without waiting for counsel by operator decision 2026-10-29; attorney review runs in parallel (
needs:attorney-reviewis not a blocker). Not counsel-cleared.
| ID | Location (file:line, context) | String as written in source | Touches |
|---|---|---|---|
| SHL-001 | components/tools/ToolsFrame.tsx:49 (ToolsFrame @aria-label) |
Raxx home |
- |
| SHL-002 | components/tools/ToolsFrame.tsx:52 (ToolsFrame @aria-label) |
Site |
- |
| SHL-003 | components/tools/ToolsFrame.tsx:54 (ToolsFrame) |
All calculators |
- |
| SHL-004 | components/tools/ToolsFrame.tsx:64 (ToolsFrame) |
Privacy Policy |
- |
| SHL-005 | components/tools/ToolsFrame.tsx:65 (ToolsFrame) |
Terms of Service |
- |
| SHL-006 | components/tools/Breadcrumbs.tsx:17 (Breadcrumbs @aria-label) |
Breadcrumb |
- |
| SHL-007 | components/tools/Disclaimer.tsx:17 (Disclaimer) |
Disclaimer |
G9 |
| SHL-008 | components/tools/Disclaimer.tsx:20 (Disclaimer) |
Terms of Service |
- |
| SHL-009 | components/tools/ToolCta.tsx:45 (ToolCta) |
Free account |
G7 |
| SHL-010 | components/tools/ToolPageShell.tsx:77 (ToolPageShell.label @skip) |
Skip to calculator |
- |
| SHL-011 | components/tools/ToolPageShell.tsx:81 (ToolPageShell.label @items) |
Raxx |
- |
| SHL-012 | components/tools/ToolPageShell.tsx:82 (ToolPageShell.label @items) |
Tools |
- |
| SHL-013 | components/tools/ToolPageShell.tsx:101 (ToolPageShell) |
Calculator |
- |
| SHL-014 | components/tools/ToolPageShell.tsx:108 (ToolPageShell) |
This calculator needs JavaScript to run. The explanation, formulas and examples below work without it. Nothing you type is sent anywhere. |
G8 |
| SHL-015 | components/tools/ToolSections.tsx:60 (ToolFaq) |
Frequently asked questions |
- |
| SHL-016 | components/tools/ToolSections.tsx:80 (RelatedTools) |
More calculators |
- |
| SHL-017 | components/tools/CopyLinkButton.tsx:64 (CopyLinkButton) |
Copy link to these numbers |
- |
| SHL-018 | components/tools/CopyLinkButton.tsx:71 (CopyLinkButton) |
Link copied. The numbers are stored after the # in the link; they are not sent to a server. |
G8 |
| SHL-019 | components/tools/CopyLinkButton.tsx:73 (CopyLinkButton) |
Your browser blocked copying. Select the link below and copy it yourself. |
G8 |
| SHL-020 | components/tools/CopyLinkButton.tsx:79 (CopyLinkButton) |
Link to these numbers |
- |
| SHL-021 | components/tools/CopyLinkButton.tsx:94 (CopyLinkButton) |
Everything after the # stays in your browser. It is not sent to a server. |
G8 |
| SHL-022 | components/tools/ToolErrorBoundary.tsx:80 (ToolErrorBoundary) |
Calculator |
- |
| SHL-023 | components/tools/ToolErrorBoundary.tsx:86 (ToolErrorBoundary) |
This calculator hit an error. Your numbers were not sent anywhere. |
G8 |
| SHL-024 | components/tools/ToolErrorBoundary.tsx:90 (ToolErrorBoundary) |
Reload calculator |
- |
| SHL-025 | components/tools/LoadExampleButton.tsx:19 (LoadExampleButton) |
Load these numbers |
- |
| SHL-026 | app/tools/not-found.tsx:11 (ToolsNotFound.label @skip) |
Skip to content |
- |
| SHL-027 | app/tools/not-found.tsx:12 (ToolsNotFound) |
This calculator isn't published - Raxx |
- |
| SHL-028 | app/tools/not-found.tsx:16 (ToolsNotFound) |
This calculator isn't published |
- |
| SHL-029 | app/tools/not-found.tsx:17 (ToolsNotFound) |
There is no calculator at this address. |
- |
| SHL-030 | app/tools/not-found.tsx:19 (ToolsNotFound) |
All calculators |
- |
| SHL-031 | lib/tools/numbers.ts:115 (MESSAGES.format) |
Enter a number, like 100 or 100.25. |
- |
| SHL-032 | lib/tools/numbers.ts:117 (MESSAGES.tooLarge) |
That number is too large. The limit is |
- |
| SHL-033 | lib/tools/numbers.ts:118 (MESSAGES.positive) |
Enter a value greater than zero. |
- |
| SHL-034 | lib/tools/numbers.ts:119 (MESSAGES.nonnegative) |
Enter zero or a positive number. |
- |
| SHL-035 | lib/tools/numbers.ts:120 (MESSAGES.percent) |
Enter a percent above 0 and up to 100. |
- |
| SHL-036 | lib/tools/numbers.ts:121 (MESSAGES.percentFromZero) |
Enter a percent from 0 to 100. |
- |
| SHL-037 | lib/tools/numbers.ts:122 (MESSAGES.count) |
Enter a whole number, 1 or more. |
- |
| SHL-038 | lib/tools/numbers.ts:136 (parseNumberInput.required) |
Enter a number. |
- |
| SHL-039 | lib/tools/numbers.ts:190 (NOT_DEFINED) |
Not defined |
- |
| SHL-040 | lib/tools/constants.ts:32 (DISCLAIMER_TEXT) |
Educational tool. Results are arithmetic on the numbers you enter. Not investment advice, not a recommendation to buy or sell any security. Options involve risk and are not suitable for all investors. |
G5, G9 |
| SHL-041 | lib/tools/constants.ts:50 (PRIVATE_NOTE) |
Your numbers stay in your browser. |
G8 |
| SHL-042 | lib/tools/constants.ts:53 (CTA_LABEL) |
Track this in Raxx - free |
G7 |
| SHL-043 | lib/tools/constants.ts:55 (CTA_BODY) |
Keep your sizing rules and your own trade history in one place. Free account, no card needed. |
G6, G7 |
| SHL-044 | components/tools/ToolSections.tsx:34 (ToolMethod; written ' in the source) |
How it's calculated |
- |
| SHL-045 | lib/tools/numbers.ts:116 (MESSAGES.decimals) |
Use at most 6 decimal places. |
- |
| SHL-046 | lib/tools/jsonLd.ts:40 (webApplicationJsonLd.browserRequirements; structured data for search engines, not drawn on the page) |
Requires JavaScript |
- |
B3. Page titles, descriptions, headings and hub blurbs (registry)
- Route: each tool page
<title>, meta description, Open Graph, H1, hub card, "More calculators" list, sitemap - Card and PR: #4838 (#4895); entries added by #4839, #4840, #4841
- Owner: Product owner: Kristerpher (epic #4819 decisions, 2026-10-29). Copy was drafted in the design stage (
docs/design/seo-tools/) and built by the feature card. No named copy owner and nomarketing-strategistsign-off is recorded in the epic or the code; PM to assign (gap listed in the main packet). Legal clearance: counsel via #3141. - Status of every row below: PUBLISHED-PENDING-REVIEW: on develop with no feature flag (the tool registry is the only visibility control), so it is live on raxx.app when develop is next promoted to main; not on main at the snapshot. Published without waiting for counsel by operator decision 2026-10-29; attorney review runs in parallel (
needs:attorney-reviewis not a blocker). Not counsel-cleared.
| ID | Location (file:line, context) | String as written in source | Touches |
|---|---|---|---|
| REG-001 | lib/tools/registry.ts:54 (TOOLS.title) |
Position Size Calculator - Shares to Buy From Your Risk |
G6 |
| REG-002 | lib/tools/registry.ts:56 (TOOLS.description) |
Free position size calculator. Enter account size, risk %, entry and stop to see shares, dollar risk and R multiple at target. No sign-up. |
G6, G7 |
| REG-003 | lib/tools/registry.ts:57 (TOOLS.h1) |
Position Size Calculator |
G6 |
| REG-004 | lib/tools/registry.ts:58 (TOOLS.blurb) |
Shares from account size, risk percent, entry and stop. |
G6 |
| REG-005 | lib/tools/registry.ts:59 (TOOLS.enter) |
account size, risk %, entry, stop |
G6 |
| REG-006 | lib/tools/registry.ts:60 (TOOLS.get) |
shares, dollar risk, R multiple |
- |
| REG-007 | lib/tools/registry.ts:67 (TOOLS.title) |
Options Payoff Calculator - Calls, Puts and Call Spreads |
- |
| REG-008 | lib/tools/registry.ts:69 (TOOLS.description) |
Free options payoff calculator and call spread calculator. Chart profit and loss at expiration, max gain, max loss and breakevens. No sign-up. |
G7 |
| REG-009 | lib/tools/registry.ts:70 (TOOLS.h1) |
Options Payoff Calculator |
- |
| REG-010 | lib/tools/registry.ts:71 (TOOLS.blurb) |
Profit and loss at expiration for calls, puts and call spreads. |
- |
| REG-011 | lib/tools/registry.ts:72 (TOOLS.enter) |
strikes, premiums, contracts |
- |
| REG-012 | lib/tools/registry.ts:73 (TOOLS.get) |
max gain, max loss, breakevens, chart |
- |
| REG-013 | lib/tools/registry.ts:82 (TOOLS.title) |
Risk of Ruin Calculator for Trading - Drawdown Simulator |
G2, G6 |
| REG-014 | lib/tools/registry.ts:84 (TOOLS.description) |
Free risk of ruin calculator for trading. Enter win rate, average win and loss, and risk per trade to simulate drawdown distribution. No sign-up. |
G2, G6, G7 |
| REG-015 | lib/tools/registry.ts:85 (TOOLS.h1) |
Risk of Ruin Calculator for Trading |
G6 |
| REG-016 | lib/tools/registry.ts:86 (TOOLS.blurb) |
Simulate drawdowns from your own win rate and payoff. |
G2 |
| REG-017 | lib/tools/registry.ts:87 (TOOLS.enter) |
win rate, average win and loss, risk per trade |
G6 |
| REG-018 | lib/tools/registry.ts:88 (TOOLS.get) |
drawdown histogram, share of paths at a threshold |
- |
B4. Position size calculator
- Route:
/tools/position-size-calculator - Card and PR: #4839 (#4899)
- Owner: Product owner: Kristerpher (epic #4819 decisions, 2026-10-29). Copy was drafted in the design stage (
docs/design/seo-tools/) and built by the feature card. No named copy owner and nomarketing-strategistsign-off is recorded in the epic or the code; PM to assign (gap listed in the main packet). Legal clearance: counsel via #3141. - Status of every row below: PUBLISHED-PENDING-REVIEW: on develop with no feature flag (the tool registry is the only visibility control), so it is live on raxx.app when develop is next promoted to main; not on main at the snapshot. Published without waiting for counsel by operator decision 2026-10-29; attorney review runs in parallel (
needs:attorney-reviewis not a blocker). Not counsel-cleared.
| ID | Location (file:line, context) | String as written in source | Touches |
|---|---|---|---|
| PSZ-001 | components/tools/position-size/content.tsx:23 (POSITION_SIZE_LEDE) |
Enter account size, risk percent, entry and stop. The calculator returns the share count, dollar risk and R multiple those numbers give. |
G6 |
| PSZ-002 | components/tools/position-size/content.tsx:28 (POSITION_SIZE_FAQ.question) |
How do I calculate position size from a stop? |
G6 |
| PSZ-003 | components/tools/position-size/content.tsx:30 (POSITION_SIZE_FAQ.answer) |
Multiply account size by the risk percent to get the dollar risk. Divide that by the distance between entry and stop. Round down to whole shares. With a 10,000 account, 0.75% risk, entry 100 and stop 97.50, that is 75.00 / 2.50 = 30 shares. |
G6 |
| PSZ-004 | components/tools/position-size/content.tsx:33 (POSITION_SIZE_FAQ.question) |
Why does the calculator round the share count down? |
- |
| PSZ-005 | components/tools/position-size/content.tsx:35 (POSITION_SIZE_FAQ.answer) |
Rounding down keeps the loss at the stop at or below the dollar risk figure. Rounding up would put it above that figure. |
G6 |
| PSZ-006 | components/tools/position-size/content.tsx:38 (POSITION_SIZE_FAQ.question) |
What does the R multiple mean? |
- |
| PSZ-007 | components/tools/position-size/content.tsx:40 (POSITION_SIZE_FAQ.answer) |
R is the distance from entry to stop, one unit of risk. The R multiple at target is the distance from entry to target measured in those units. A target twice as far from entry as the stop gives 2.00. |
G6 |
| PSZ-008 | components/tools/position-size/content.tsx:43 (POSITION_SIZE_FAQ.question) |
Does the calculator use real prices or my account? |
G4 |
| PSZ-009 | components/tools/position-size/content.tsx:45 (POSITION_SIZE_FAQ.answer) |
No. It uses only the numbers typed into the fields. It looks up no prices, connects to no account and sends nothing to a server. |
G8 |
| PSZ-010 | components/tools/position-size/content.tsx:53 (HowManySharesSection) |
How many shares should I buy? |
G5, G6 |
| PSZ-011 | components/tools/position-size/content.tsx:56 (HowManySharesSection) |
The share count follows from four numbers you choose: account size, risk percent, entry and stop. The calculator multiplies account size by the risk percent to get a dollar amount, divides that amount by the distance between entry and stop, and rounds down to whole shares. |
G6 |
| PSZ-012 | components/tools/position-size/content.tsx:61 (HowManySharesSection) |
Change any of the four numbers and the count changes with it. The calculator does not choose any of them. |
- |
| PSZ-013 | components/tools/position-size/content.tsx:77 (PositionSizeMethod) |
Dollar risk = account size x risk %. Shares = dollar risk / \|entry - stop\|, rounded down. R multiple = (target - entry) / \|entry - stop\|. This is arithmetic on the numbers you enter; it isn't a recommendation. The |
G5, G6 |
| PSZ-014 | components/tools/position-size/content.tsx:79 (PositionSizeMethod) |
shows the same idea on sample data. |
- |
| PSZ-015 | components/tools/position-size/content.tsx:83 (PositionSizeMethod) |
For a short position the R multiple uses (entry - target) / \|entry - stop\|. In contracts mode the per-contract distance and the position value are multiplied by 100. Fees and slippage are not included. |
G6 |
| PSZ-016 | components/tools/position-size/content.tsx:92 (POSITION_SIZE_TERMS.term) |
Dollar risk |
- |
| PSZ-017 | components/tools/position-size/content.tsx:92 (POSITION_SIZE_TERMS.definition) |
Account size multiplied by the risk percent entered. |
G6 |
| PSZ-018 | components/tools/position-size/content.tsx:93 (POSITION_SIZE_TERMS.term) |
Risk per share |
- |
| PSZ-019 | components/tools/position-size/content.tsx:93 (POSITION_SIZE_TERMS.definition) |
The distance between entry and stop. |
G6 |
| PSZ-020 | components/tools/position-size/content.tsx:95 (POSITION_SIZE_TERMS.term) |
R multiple |
- |
| PSZ-021 | components/tools/position-size/content.tsx:96 (POSITION_SIZE_TERMS.definition) |
The distance from entry to target, measured in units of risk per share. |
- |
| PSZ-022 | components/tools/position-size/content.tsx:119 (POSITION_SIZE_EXAMPLES.title) |
Long, shares |
- |
| PSZ-023 | components/tools/position-size/content.tsx:121 (POSITION_SIZE_EXAMPLES.entered.label) |
Account size |
G6 |
| PSZ-024 | components/tools/position-size/content.tsx:122 (POSITION_SIZE_EXAMPLES.entered.label) |
Risk percent |
G6 |
| PSZ-025 | components/tools/position-size/content.tsx:123 (POSITION_SIZE_EXAMPLES.entered.label) |
Entry / stop / target |
G6 |
| PSZ-026 | components/tools/position-size/content.tsx:126 (POSITION_SIZE_EXAMPLES.result.label) |
Shares |
- |
| PSZ-027 | components/tools/position-size/content.tsx:128 (POSITION_SIZE_EXAMPLES.result.label) |
Position value |
- |
| PSZ-028 | components/tools/position-size/content.tsx:129 (POSITION_SIZE_EXAMPLES.result.value) |
4.00R |
- |
| PSZ-029 | components/tools/position-size/content.tsx:134 (POSITION_SIZE_EXAMPLES.title) |
Short, contracts |
- |
| PSZ-030 | components/tools/position-size/content.tsx:141 (POSITION_SIZE_EXAMPLES.result.label) |
Contracts |
- |
| PSZ-031 | components/tools/position-size/content.tsx:144 (POSITION_SIZE_EXAMPLES.result.value) |
2.00R |
- |
| PSZ-032 | components/tools/position-size/content.tsx:166 (PositionSizeExamples) |
Examples |
- |
| PSZ-033 | components/tools/position-size/content.tsx:171 (PositionSizeExamples) |
Numbers entered |
- |
| PSZ-034 | components/tools/position-size/content.tsx:173 (PositionSizeExamples) |
Result |
- |
| PSZ-035 | components/tools/position-size/PositionSizeCalculator.tsx:82 (DIRECTION_OPTIONS.label) |
Long |
- |
| PSZ-036 | components/tools/position-size/PositionSizeCalculator.tsx:83 (DIRECTION_OPTIONS.label) |
Short |
- |
| PSZ-037 | components/tools/position-size/PositionSizeCalculator.tsx:87 (UNIT_OPTIONS.label) |
Shares |
- |
| PSZ-038 | components/tools/position-size/PositionSizeCalculator.tsx:88 (UNIT_OPTIONS.label) |
Contracts (x100) |
- |
| PSZ-039 | components/tools/position-size/PositionSizeCalculator.tsx:91 (INITIAL_MESSAGE) |
Enter your numbers to see the result. |
- |
| PSZ-040 | components/tools/position-size/PositionSizeCalculator.tsx:387 (PositionSizeCalculator) |
Your numbers |
- |
| PSZ-041 | components/tools/position-size/PositionSizeCalculator.tsx:394 (PositionSizeCalculator) |
The numbers in this link could not be read, so the fields are empty. |
- |
| PSZ-042 | components/tools/position-size/PositionSizeCalculator.tsx:399 (PositionSizeCalculator) |
Example numbers are loaded. Change any field to use your own. |
- |
| PSZ-043 | components/tools/position-size/PositionSizeCalculator.tsx:407 (PositionSizeCalculator @label) |
Account size (USD) |
G6 |
| PSZ-044 | components/tools/position-size/PositionSizeCalculator.tsx:409 (PositionSizeCalculator @hint) |
Total account value in dollars. |
- |
| PSZ-045 | components/tools/position-size/PositionSizeCalculator.tsx:419 (PositionSizeCalculator @label) |
Risk percent (%) |
G6 |
| PSZ-046 | components/tools/position-size/PositionSizeCalculator.tsx:421 (PositionSizeCalculator @hint) |
Percent of the account set as the loss at the stop. Your own number; the calculator suggests none. |
G5, G6 |
| PSZ-047 | components/tools/position-size/PositionSizeCalculator.tsx:430 (PositionSizeCalculator @legend) |
Direction |
- |
| PSZ-048 | components/tools/position-size/PositionSizeCalculator.tsx:441 (PositionSizeCalculator @label) |
Entry price (USD) |
- |
| PSZ-049 | components/tools/position-size/PositionSizeCalculator.tsx:451 (PositionSizeCalculator @label) |
Stop price (USD) |
G6 |
| PSZ-050 | components/tools/position-size/PositionSizeCalculator.tsx:453 (PositionSizeCalculator @hint) |
Long: below entry. Short: above entry. |
- |
| PSZ-051 | components/tools/position-size/PositionSizeCalculator.tsx:464 (PositionSizeCalculator @label) |
Target price (USD) |
- |
| PSZ-052 | components/tools/position-size/PositionSizeCalculator.tsx:467 (PositionSizeCalculator @hint) |
Adds the R multiple to the result. |
- |
| PSZ-053 | components/tools/position-size/PositionSizeCalculator.tsx:475 (PositionSizeCalculator @legend) |
Units |
- |
| PSZ-054 | components/tools/position-size/PositionSizeCalculator.tsx:479 (PositionSizeCalculator @hint) |
Contracts mode multiplies the per-unit distance and the position value by 100. |
- |
| PSZ-055 | components/tools/position-size/PositionSizeCalculator.tsx:486 (PositionSizeCalculator) |
Reset |
- |
| PSZ-056 | components/tools/position-size/PositionSizeCalculator.tsx:495 (PositionSizeCalculator) |
Result |
- |
| PSZ-057 | components/tools/position-size/PositionSizeCalculator.tsx:498 (PositionSizeCalculator) |
Example numbers |
- |
| PSZ-058 | components/tools/position-size/PositionSizeCalculator.tsx:511 (PositionSizeCalculator) |
Loading calculator. |
- |
| PSZ-059 | components/tools/position-size/PositionSizeCalculator.tsx:525 (PositionSizeCalculator) |
Loading calculator |
- |
| PSZ-060 | components/tools/position-size/PositionSizeCalculator.tsx:552 (ResultBody) |
Use example numbers |
- |
| PSZ-061 | components/tools/position-size/PositionSizeCalculator.tsx:562 (ResultBody) |
Waiting for: |
- |
| PSZ-062 | components/tools/position-size/PositionSizeCalculator.tsx:573 (ResultBody) |
The result appears when |
- |
| PSZ-063 | components/tools/position-size/PositionSizeCalculator.tsx:601 (ResultBody) |
Dollar risk |
- |
| PSZ-064 | components/tools/position-size/PositionSizeCalculator.tsx:605 (ResultBody) |
Position value |
- |
| PSZ-065 | components/tools/position-size/PositionSizeCalculator.tsx:609 (ResultBody) |
Percent of account |
- |
| PSZ-066 | components/tools/position-size/PositionSizeCalculator.tsx:614 (ResultBody) |
R multiple at target |
- |
| PSZ-067 | components/tools/position-size/PositionSizeCalculator.tsx:631 (ResultBody) |
Show the arithmetic |
- |
| PSZ-068 | lib/tools/positionSize.ts:65 (FIELD_LABELS.account) |
Account size |
G6 |
| PSZ-069 | lib/tools/positionSize.ts:66 (FIELD_LABELS.risk) |
Risk percent |
G6 |
| PSZ-070 | lib/tools/positionSize.ts:67 (FIELD_LABELS.entry) |
Entry price |
- |
| PSZ-071 | lib/tools/positionSize.ts:68 (FIELD_LABELS.stop) |
Stop price |
G6 |
| PSZ-072 | lib/tools/positionSize.ts:69 (FIELD_LABELS.target) |
Target price |
- |
| PSZ-073 | lib/tools/positionSize.ts:74 (FIELD_NOUNS.account) |
account size |
G6 |
| PSZ-074 | lib/tools/positionSize.ts:75 (FIELD_NOUNS.risk) |
risk percent |
G6 |
| PSZ-075 | lib/tools/positionSize.ts:76 (FIELD_NOUNS.entry) |
entry price |
- |
| PSZ-076 | lib/tools/positionSize.ts:77 (FIELD_NOUNS.stop) |
stop price |
G6 |
| PSZ-077 | lib/tools/positionSize.ts:78 (FIELD_NOUNS.target) |
target price |
- |
| PSZ-078 | lib/tools/positionSize.ts:363 (unitTitle) |
Contracts |
- |
| PSZ-079 | lib/tools/positionSize.ts:363 (unitTitle) |
Shares |
- |
| PSZ-080 | lib/tools/positionSize.ts:605 (evaluatePositionSize.problem.message) |
Enter a number, like 100 or 100.25. |
- |
Rendered samples for Position size calculator (produced by calling the real library functions on the page's own golden examples and edge cases; these are the sentences assembled at run time from the fragments above).
| ID | Case | Rendered text | Touches |
|---|---|---|---|
| PSZS-001 | example long: arithmetic step 1 | Dollar risk = 10,000.00 x 0.75% = 75.00 |
- |
| PSZS-002 | example long: arithmetic step 2 | Risk per share = \|100.00 - 97.50\| = 2.50 |
- |
| PSZS-003 | example long: arithmetic step 3 | Shares = 75.00 / 2.50 = 30.00, rounded down to 30 |
- |
| PSZS-004 | example long: arithmetic step 4 | Position value = 30 x 100.00 = 3,000.00 |
- |
| PSZS-005 | example long: arithmetic step 5 | Percent of account = 3,000.00 / 10,000.00 = 30.00% |
- |
| PSZS-006 | example long: arithmetic step 6 | R multiple = (110.00 - 100.00) / 2.50 = 4.00 |
- |
| PSZS-007 | example long: spoken result | Result: 30 shares. Dollar risk 75.00 dollars. Position value 3,000.00 dollars, 30.00 percent of account. R multiple 4.00. |
- |
| PSZS-008 | example short: arithmetic step 1 | Dollar risk = 25,000.00 x 0.50% = 125.00 |
- |
| PSZS-009 | example short: arithmetic step 2 | Risk per contract = \|3.20 - 4.00\| x 100 = 80.00 |
- |
| PSZS-010 | example short: arithmetic step 3 | Contracts = 125.00 / 80.00 = 1.56, rounded down to 1 |
- |
| PSZS-011 | example short: arithmetic step 4 | Position value = 1 x 3.20 x 100 = 320.00 |
- |
| PSZS-012 | example short: arithmetic step 5 | Percent of account = 320.00 / 25,000.00 = 1.28% |
- |
| PSZS-013 | example short: arithmetic step 6 | R multiple = (3.20 - 1.60) / 0.80 = 2.00 |
- |
| PSZS-014 | example short: spoken result | Result: 1 contract. Dollar risk 125.00 dollars. Position value 320.00 dollars, 1.28 percent of account. R multiple 2.00. |
- |
| PSZS-015 | zero shares: arithmetic step 1 | Dollar risk = 1,000.00 x 0.50% = 5.00 |
- |
| PSZS-016 | zero shares: arithmetic step 2 | Risk per share = \|250.00 - 200.00\| = 50.00 |
- |
| PSZS-017 | zero shares: arithmetic step 3 | Shares = 5.00 / 50.00 = 0.10, rounded down to 0 |
- |
| PSZS-018 | zero shares: arithmetic step 4 | Position value = 0 x 250.00 = 0.00 |
- |
| PSZS-019 | zero shares: arithmetic step 5 | Percent of account = 0.00 / 1,000.00 = 0.00% |
- |
| PSZS-020 | zero shares: note 1 | Dollar risk 5.00 is smaller than the risk on one share (50.00), so the rounded-down count is 0. |
- |
| PSZS-021 | zero shares: spoken result | Result: 0 shares. Dollar risk 5.00 dollars. Position value 0.00 dollars, 0.00 percent of account. |
- |
| PSZS-022 | position above account: arithmetic step 1 | Dollar risk = 1,000.00 x 5.00% = 50.00 |
- |
| PSZS-023 | position above account: arithmetic step 2 | Risk per share = \|100.00 - 99.00\| = 1.00 |
- |
| PSZS-024 | position above account: arithmetic step 3 | Shares = 50.00 / 1.00 = 50.00, rounded down to 50 |
- |
| PSZS-025 | position above account: arithmetic step 4 | Position value = 50 x 100.00 = 5,000.00 |
- |
| PSZS-026 | position above account: arithmetic step 5 | Percent of account = 5,000.00 / 1,000.00 = 500.00% |
- |
| PSZS-027 | position above account: note 1 | Position value is larger than the account size entered. |
G6 |
| PSZS-028 | position above account: spoken result | Result: 50 shares. Dollar risk 50.00 dollars. Position value 5,000.00 dollars, 500.00 percent of account. |
- |
| PSZS-029 | target on loss side: arithmetic step 1 | Dollar risk = 10,000.00 x 1.00% = 100.00 |
- |
| PSZS-030 | target on loss side: arithmetic step 2 | Risk per share = \|100.00 - 95.00\| = 5.00 |
- |
| PSZS-031 | target on loss side: arithmetic step 3 | Shares = 100.00 / 5.00 = 20.00, rounded down to 20 |
- |
| PSZS-032 | target on loss side: arithmetic step 4 | Position value = 20 x 100.00 = 2,000.00 |
- |
| PSZS-033 | target on loss side: arithmetic step 5 | Percent of account = 2,000.00 / 10,000.00 = 20.00% |
- |
| PSZS-034 | target on loss side: arithmetic step 6 | R multiple = (90.00 - 100.00) / 5.00 = -2.00 |
- |
| PSZS-035 | target on loss side: note 1 | For a long position the target sits above entry. This target is below entry, so the R multiple is negative. |
- |
| PSZS-036 | target on loss side: spoken result | Result: 20 shares. Dollar risk 100.00 dollars. Position value 2,000.00 dollars, 20.00 percent of account. R multiple -2.00. |
- |
| PSZS-037 | stop equals entry: state=invalid | [{"field":"stop","reason":"invalid","message":"Stop and entry are the same price, so the risk per share is zero. Enter a different stop."}] |
G6 |
| PSZS-038 | stop wrong side (long): state=invalid | [{"field":"stop","reason":"invalid","message":"For a long position the stop sits below entry. Stop 105.00 is above entry 100.00."}] |
G6 |
| PSZS-039 | stop wrong side (short): state=invalid | [{"field":"stop","reason":"invalid","message":"For a short position the stop sits above entry. Stop 95.00 is below entry 100.00."}] |
G6 |
| PSZS-040 | empty fields: state=initial | [{"field":"account","reason":"empty","message":"Enter an account size."},{"field":"risk","reason":"empty","message":"Enter a risk percent."},{"field":"entry","reason":"empty","message":"Enter an entry price."},{"field":"stop","reason":"empty","message":"Enter a stop price."}] |
G6 |
| PSZS-041 | bad number: state=invalid | [{"field":"account","reason":"invalid","message":"Enter a number, like 100 or 100.25."}] |
- |
| PSZS-042 | risk over 100: state=invalid | [{"field":"risk","reason":"invalid","message":"Enter a percent above 0 and up to 100."}] |
- |
| PSZS-043 | attentionText(1) | 1 field needs attention. |
- |
| PSZS-044 | attentionText(3) | 3 fields need attention. |
- |
| PSZS-045 | primaryLabel(shares) | Shares (rounded down) |
- |
| PSZS-046 | primaryLabel(contracts) | Contracts (rounded down) |
- |
| PSZS-047 | status line while fields need fixing | Waiting for: <field names>. The result appears when it is fixed. / when they are fixed. |
- |
| PSZS-048 | target equals entry (account 10,000, risk 1%, entry 100, stop 95, target 100): arithmetic step 6 | R multiple = (100.00 - 100.00) / 5.00 = 0.00 |
- |
| PSZS-049 | target equals entry: note 1 | The target equals entry, so the R multiple is zero. |
- |
| PSZS-050 | target equals entry: spoken result | Result: 20 shares. Dollar risk 100.00 dollars. Position value 2,000.00 dollars, 20.00 percent of account. R multiple 0.00. |
- |
| PSZS-051 | display limit (account 1,000,000,000,000, risk 100%, entry 1,000, stop 999): arithmetic step 4 | Position value = 1,000,000,000,000 x 1,000.00 = Over 1,000,000,000,000 |
- |
| PSZS-052 | display limit: arithmetic step 5 | Percent of account = Over 1,000,000,000,000 / 1,000,000,000,000.00 = 100,000.00% |
- |
| PSZS-053 | display limit: note 1 | Position value is larger than the account size entered. |
G6 |
| PSZS-054 | display limit: note 2 | A result is larger than the display limit of 1,000,000,000,000. Check the numbers entered. |
- |
| PSZS-055 | display limit: spoken result | Result: 1,000,000,000,000 shares. Dollar risk 1,000,000,000,000.00 dollars. Position value Over 1,000,000,000,000 dollars, 100,000.00 percent of account. |
- |
| PSZS-056 | target on loss side, short position (account 10,000, risk 1%, entry 100, stop 105, target 110): note 1 | For a short position the target sits below entry. This target is above entry, so the R multiple is negative. |
- |
B5. Options payoff calculator (includes the call spread section)
- Route:
/tools/options-payoff-calculator(no separate call-spread URL) - Card and PR: #4840 (#4901)
- Owner: Product owner: Kristerpher (epic #4819 decisions, 2026-10-29). Copy was drafted in the design stage (
docs/design/seo-tools/) and built by the feature card. No named copy owner and nomarketing-strategistsign-off is recorded in the epic or the code; PM to assign (gap listed in the main packet). Legal clearance: counsel via #3141. - Status of every row below: PUBLISHED-PENDING-REVIEW: on develop with no feature flag (the tool registry is the only visibility control), so it is live on raxx.app when develop is next promoted to main; not on main at the snapshot. Published without waiting for counsel by operator decision 2026-10-29; attorney review runs in parallel (
needs:attorney-reviewis not a blocker). Not counsel-cleared.
| ID | Location (file:line, context) | String as written in source | Touches |
|---|---|---|---|
| OPT-001 | components/tools/OptionsPayoffSections.tsx:33 (OPTIONS_PAYOFF_LEDE) |
Chart profit and loss at expiration for a long call, long put, bull call spread or bear put spread. Enter strikes, premiums and contracts to see max gain, max loss and breakevens. |
- |
| OPT-002 | components/tools/OptionsPayoffSections.tsx:37 (OPTIONS_PAYOFF_FAQ.question) |
What does a payoff chart show? |
- |
| OPT-003 | components/tools/OptionsPayoffSections.tsx:39 (OPTIONS_PAYOFF_FAQ.answer) |
Profit or loss at each underlying price on the expiration date, worked out from the strikes, premiums and contracts entered. The chart covers expiration only; it does not model the period before expiration. |
- |
| OPT-004 | components/tools/OptionsPayoffSections.tsx:42 (OPTIONS_PAYOFF_FAQ.question) |
How is the breakeven of a call spread found? |
- |
| OPT-005 | components/tools/OptionsPayoffSections.tsx:44 (OPTIONS_PAYOFF_FAQ.answer) |
Long strike plus the net debit per share. With a long strike of 100 and a net debit of 2.50, the breakeven is 102.50, the price at which the spread's value at expiration equals what was paid for it. |
- |
| OPT-006 | components/tools/OptionsPayoffSections.tsx:47 (OPTIONS_PAYOFF_FAQ.question) |
Why does a long call show no upper limit on max gain? |
- |
| OPT-007 | components/tools/OptionsPayoffSections.tsx:49 (OPTIONS_PAYOFF_FAQ.answer) |
A call's value at expiration rises with the underlying price and the formula has no ceiling, so the arithmetic has no maximum. The chart draws only the price range shown on its axis. |
- |
| OPT-008 | components/tools/OptionsPayoffSections.tsx:59 (OptionsPayoffMethod.term @terms) |
Max gain / max loss |
- |
| OPT-009 | components/tools/OptionsPayoffSections.tsx:60 (OptionsPayoffMethod.definition @terms) |
The highest and lowest profit or loss across every underlying price at expiration. |
- |
| OPT-010 | components/tools/OptionsPayoffSections.tsx:63 (OptionsPayoffMethod.term @terms) |
Breakeven |
- |
| OPT-011 | components/tools/OptionsPayoffSections.tsx:64 (OptionsPayoffMethod.definition @terms) |
The underlying price at expiration where profit or loss is zero. |
- |
| OPT-012 | components/tools/OptionsPayoffSections.tsx:67 (OptionsPayoffMethod.term @terms) |
Net debit |
- |
| OPT-013 | components/tools/OptionsPayoffSections.tsx:68 (OptionsPayoffMethod.definition @terms) |
Premium paid minus premium received, x 100 x contracts. |
- |
| OPT-014 | components/tools/OptionsPayoffSections.tsx:73 (OptionsPayoffMethod) |
At expiration a call is worth max(price - strike, 0) per share and a put is worth max(strike - price, 0). Profit or loss = value at expiration - premium paid, x 100 x contracts. A spread adds a long and a short option; net debit = long premium - short premium. This is arithmetic on the numbers you enter; it isn't a recommendation. Fees are not included. |
G5 |
| OPT-015 | components/tools/OptionsPayoffSections.tsx:90 (CallSpreadSection) |
Call spread calculator |
- |
| OPT-016 | components/tools/OptionsPayoffSections.tsx:93 (CallSpreadSection) |
A bull call spread combines a long call at a lower strike with a short call at a higher strike, same expiration. The net debit is the long premium minus the short premium. Max loss is that net debit. Max gain is the strike width minus the net debit. The breakeven is the long strike plus the net debit per share. |
- |
| OPT-017 | components/tools/OptionsPayoffSections.tsx:100 (CallSpreadSection @label) |
Open the bull call spread in the calculator |
- |
| OPT-018 | components/tools/OptionsPayoffSections.tsx:127 (exampleCards.title) |
Bull call spread |
- |
| OPT-019 | components/tools/OptionsPayoffSections.tsx:129 (exampleCards.entered.label) |
Long call |
- |
| OPT-020 | components/tools/OptionsPayoffSections.tsx:130 (exampleCards.entered.label) |
Short call |
- |
| OPT-021 | components/tools/OptionsPayoffSections.tsx:131 (exampleCards.entered.label) |
Contracts |
- |
| OPT-022 | components/tools/OptionsPayoffSections.tsx:138 (exampleCards.entered.label) |
Strike / premium |
- |
| OPT-023 | components/tools/OptionsPayoffSections.tsx:149 (OptionsPayoffExamples) |
Examples |
- |
| OPT-024 | components/tools/OptionsPayoffSections.tsx:160 (OptionsPayoffExamples) |
Numbers entered |
- |
| OPT-025 | components/tools/OptionsPayoffSections.tsx:169 (OptionsPayoffExamples) |
Result |
- |
| OPT-026 | components/tools/OptionsPayoffSections.tsx:172 (OptionsPayoffExamples) |
Max gain |
- |
| OPT-027 | components/tools/OptionsPayoffSections.tsx:176 (OptionsPayoffExamples) |
Max loss |
- |
| OPT-028 | components/tools/OptionsPayoffSections.tsx:188 (OptionsPayoffExamples @label) |
Load these numbers |
- |
| OPT-029 | components/tools/OptionsPayoffCalculator.tsx:70 (UNREADABLE_LINK_NOTE) |
The numbers in this link could not be read, so the fields are empty. |
- |
| OPT-030 | components/tools/OptionsPayoffCalculator.tsx:429 (OptionsPayoffCalculator) |
Your numbers |
- |
| OPT-031 | components/tools/OptionsPayoffCalculator.tsx:437 (OptionsPayoffCalculator) |
Example numbers are loaded. Change any field to use your own. |
- |
| OPT-032 | components/tools/OptionsPayoffCalculator.tsx:448 (OptionsPayoffCalculator) |
Strategy |
- |
| OPT-033 | components/tools/OptionsPayoffCalculator.tsx:484 (OptionsPayoffCalculator) |
(optional) |
- |
| OPT-034 | components/tools/OptionsPayoffCalculator.tsx:529 (OptionsPayoffCalculator) |
Reset |
- |
| OPT-035 | components/tools/OptionsPayoffCalculator.tsx:543 (OptionsPayoffCalculator) |
Result |
- |
| OPT-036 | components/tools/OptionsPayoffCalculator.tsx:545 (OptionsPayoffCalculator) |
Example numbers |
- |
| OPT-037 | components/tools/OptionsPayoffCalculator.tsx:557 (OptionsPayoffCalculator) |
Loading calculator. |
- |
| OPT-038 | components/tools/OptionsPayoffCalculator.tsx:563 (OptionsPayoffCalculator) |
Enter your numbers to see the result. |
- |
| OPT-039 | components/tools/OptionsPayoffCalculator.tsx:565 (OptionsPayoffCalculator) |
Use example numbers |
- |
| OPT-040 | components/tools/OptionsPayoffCalculator.tsx:573 (OptionsPayoffCalculator) |
Waiting for: |
- |
| OPT-041 | components/tools/OptionsPayoffCalculator.tsx:591 (OptionsPayoffCalculator) |
The result appears when |
- |
| OPT-042 | components/tools/OptionsPayoffCalculator.tsx:616 (OptionsPayoffCalculator) |
Max gain |
- |
| OPT-043 | components/tools/OptionsPayoffCalculator.tsx:626 (OptionsPayoffCalculator) |
Max loss |
- |
| OPT-044 | components/tools/OptionsPayoffCalculator.tsx:635 (OptionsPayoffCalculator) |
Breakeven (XYZ price at expiration) |
G4 |
| OPT-045 | components/tools/OptionsPayoffCalculator.tsx:639 (OptionsPayoffCalculator) |
Net debit |
- |
| OPT-046 | components/tools/OptionsPayoffCalculator.tsx:670 (OptionsPayoffCalculator) |
Show the arithmetic |
- |
| OPT-047 | components/tools/OptionsPayoffCalculator.tsx:683 (OptionsPayoffCalculator) |
Loading calculator |
- |
| OPT-048 | components/tools/PayoffChart.tsx:47 (KEYS_HELP) |
With the chart focused, Left and Right arrow keys move the cursor one step; Page Up and Page Down move ten steps; Home and End jump to the ends. |
- |
| OPT-049 | components/tools/PayoffChart.tsx:141 (PayoffChart @aria-label) |
XYZ price at expiration |
G4 |
| OPT-050 | components/tools/PayoffChart.tsx:234 (PayoffChart) |
Profit |
- |
| OPT-051 | components/tools/PayoffChart.tsx:241 (PayoffChart) |
Loss |
- |
| OPT-052 | components/tools/PayoffChart.tsx:247 (PayoffChart) |
Breakeven |
- |
| OPT-053 | components/tools/PayoffChart.tsx:251 (PayoffChart) |
Show the chart as a table |
- |
| OPT-054 | components/tools/PayoffChart.tsx:253 (PayoffChart) |
Profit or loss at expiration |
- |
| OPT-055 | components/tools/PayoffChart.tsx:256 (PayoffChart) |
Price at expiration |
- |
| OPT-056 | components/tools/PayoffChart.tsx:257 (PayoffChart) |
Profit or loss |
- |
| OPT-057 | lib/tools/optionsPayoff.ts:62 (STRATEGIES.label) |
Long call |
- |
| OPT-058 | lib/tools/optionsPayoff.ts:62 (STRATEGIES.noun) |
long call |
- |
| OPT-059 | lib/tools/optionsPayoff.ts:63 (STRATEGIES.label) |
Long put |
- |
| OPT-060 | lib/tools/optionsPayoff.ts:63 (STRATEGIES.noun) |
long put |
- |
| OPT-061 | lib/tools/optionsPayoff.ts:64 (STRATEGIES.label) |
Bull call spread |
- |
| OPT-062 | lib/tools/optionsPayoff.ts:64 (STRATEGIES.noun) |
bull call spread |
- |
| OPT-063 | lib/tools/optionsPayoff.ts:65 (STRATEGIES.label) |
Bear put spread |
- |
| OPT-064 | lib/tools/optionsPayoff.ts:65 (STRATEGIES.noun) |
bear put spread |
- |
| OPT-065 | lib/tools/optionsPayoff.ts:116 (PER_SHARE) |
Per share. |
- |
| OPT-066 | lib/tools/optionsPayoff.ts:117 (CONTRACTS_HINT) |
Whole number. One contract is 100 shares. |
- |
| OPT-067 | lib/tools/optionsPayoff.ts:118 (MARKER_HINT) |
Adds a marker and the profit or loss at that price. |
- |
| OPT-068 | lib/tools/optionsPayoff.ts:273 (MSG_PREMIUM) |
Enter zero or a positive premium. |
- |
| OPT-069 | lib/tools/optionsPayoff.ts:274 (MSG_CONTRACTS) |
Enter a whole number of contracts, 1 or more. |
- |
| OPT-070 | lib/tools/optionsPayoff.ts:275 (MSG_EQUAL) |
Strikes can't be equal. A spread needs two different strikes. |
- |
| OPT-071 | lib/tools/optionsPayoff.ts:277 (MSG_CREDIT) |
The short premium is higher than the long premium, which makes this a net credit. This calculator covers net debit spreads only. |
- |
| OPT-072 | lib/tools/optionsPayoff.ts:278 (MSG_CREDIT_SUMMARY) |
The short premium is higher than the long premium, so this is a net credit. |
- |
| OPT-073 | lib/tools/optionsPayoff.ts:282 (inverted) |
For a bull call spread the long call strike must be below the short call strike. |
- |
| OPT-074 | lib/tools/optionsPayoff.ts:283 (inverted) |
For a bear put spread the long put strike must be above the short put strike. |
- |
| OPT-075 | lib/tools/payoffChart.ts:299 (buildChartModel.raw.text) |
Long |
- |
| OPT-076 | lib/tools/payoffChart.ts:299 (buildChartModel.raw.text) |
Short |
- |
| OPT-077 | lib/tools/payoffChart.ts:299 (buildChartModel.raw.text) |
Strike |
- |
| OPT-078 | lib/tools/payoffChart.ts:361 (tableRows) |
XYZ marker |
G4 |
Rendered samples for Options payoff calculator (includes the call spread section) (produced by calling the real library functions on the page's own golden examples and edge cases; these are the sentences assembled at run time from the fragments above).
| ID | Case | Rendered text | Touches |
|---|---|---|---|
| OPTS-001 | example bull_call: arithmetic step 1 | Net debit per share = 4.00 - 1.50 = 2.50 |
- |
| OPTS-002 | example bull_call: arithmetic step 2 | Net debit = 2.50 x 100 x 1 = 250.00 |
- |
| OPTS-003 | example bull_call: arithmetic step 3 | Strike width = \|110.00 - 100.00\| = 10.00 |
- |
| OPTS-004 | example bull_call: arithmetic step 4 | Max gain = (10.00 - 2.50) x 100 x 1 = 750.00 |
- |
| OPTS-005 | example bull_call: arithmetic step 5 | Max loss = net debit = 250.00 |
- |
| OPTS-006 | example bull_call: arithmetic step 6 | Breakeven = long strike + net debit per share = 100.00 + 2.50 = 102.50 |
- |
| OPTS-007 | example bull_call: maxGain | $750.00 |
- |
| OPTS-008 | example bull_call: maxLoss | -$250.00 |
- |
| OPTS-009 | example bull_call: breakeven | 102.50 |
- |
| OPTS-010 | example bull_call: netDebit detail | 2.50 per share x 100 x 1 contract |
- |
| OPTS-011 | example bull_call: marker label | Profit or loss at XYZ 106.00 |
G4 |
| OPTS-012 | example bull_call: spoken result | Result: max loss 250.00 dollars; max gain 750.00 dollars; breakeven 102.50; net debit 250.00 dollars. |
- |
| OPTS-013 | example bull_call: chart summary | Payoff at expiration for a bull call spread, 1 contract. Maximum loss 250.00 dollars. Maximum gain 750.00 dollars. Breakeven at 102.50. |
- |
| OPTS-014 | example long_call: arithmetic step 1 | Net debit = 3.50 x 100 x 2 = 700.00 |
- |
| OPTS-015 | example long_call: arithmetic step 2 | Max loss = net debit = 700.00 |
- |
| OPTS-016 | example long_call: arithmetic step 3 | Breakeven = strike + premium = 100.00 + 3.50 = 103.50 |
- |
| OPTS-017 | example long_call: arithmetic step 4 | Max gain: a call has no ceiling at expiration, so there is no maximum |
- |
| OPTS-018 | example long_call: maxGain | No upper limit |
- |
| OPTS-019 | example long_call: maxLoss | -$700.00 |
- |
| OPTS-020 | example long_call: breakeven | 103.50 |
- |
| OPTS-021 | example long_call: netDebit detail | 3.50 per share x 100 x 2 contracts |
- |
| OPTS-022 | example long_call: spoken result | Result: max loss 700.00 dollars; no upper limit on max gain; breakeven 103.50; net debit 700.00 dollars. |
- |
| OPTS-023 | example long_call: chart summary | Payoff at expiration for a long call, 2 contracts. Maximum loss 700.00 dollars. Maximum gain has no upper limit. Breakeven at 103.50. |
- |
| OPTS-024 | example long_put: arithmetic step 1 | Net debit = 2.80 x 100 x 1 = 280.00 |
- |
| OPTS-025 | example long_put: arithmetic step 2 | Max loss = net debit = 280.00 |
- |
| OPTS-026 | example long_put: arithmetic step 3 | Breakeven = strike - premium = 100.00 - 2.80 = 97.20 |
- |
| OPTS-027 | example long_put: arithmetic step 4 | Max gain = (strike - premium) x 100 x contracts = (100.00 - 2.80) x 100 x 1 = 9,720.00 |
- |
| OPTS-028 | example long_put: note 1 | Long put max gain assumes XYZ finishes at 0. |
G4 |
| OPTS-029 | example long_put: maxGain | $9,720.00 |
- |
| OPTS-030 | example long_put: maxLoss | -$280.00 |
- |
| OPTS-031 | example long_put: breakeven | 97.20 |
- |
| OPTS-032 | example long_put: netDebit detail | 2.80 per share x 100 x 1 contract |
- |
| OPTS-033 | example long_put: marker label | Profit or loss at XYZ 95.00 |
G4 |
| OPTS-034 | example long_put: spoken result | Result: max loss 280.00 dollars; max gain 9,720.00 dollars; breakeven 97.20; net debit 280.00 dollars. |
- |
| OPTS-035 | example long_put: chart summary | Payoff at expiration for a long put, 1 contract. Maximum loss 280.00 dollars. Maximum gain 9,720.00 dollars. Breakeven at 97.20. |
- |
| OPTS-036 | example bear_put: arithmetic step 1 | Net debit per share = 4.20 - 1.70 = 2.50 |
- |
| OPTS-037 | example bear_put: arithmetic step 2 | Net debit = 2.50 x 100 x 1 = 250.00 |
- |
| OPTS-038 | example bear_put: arithmetic step 3 | Strike width = \|100.00 - 110.00\| = 10.00 |
- |
| OPTS-039 | example bear_put: arithmetic step 4 | Max gain = (10.00 - 2.50) x 100 x 1 = 750.00 |
- |
| OPTS-040 | example bear_put: arithmetic step 5 | Max loss = net debit = 250.00 |
- |
| OPTS-041 | example bear_put: arithmetic step 6 | Breakeven = long strike - net debit per share = 110.00 - 2.50 = 107.50 |
- |
| OPTS-042 | example bear_put: maxGain | $750.00 |
- |
| OPTS-043 | example bear_put: maxLoss | -$250.00 |
- |
| OPTS-044 | example bear_put: breakeven | 107.50 |
- |
| OPTS-045 | example bear_put: netDebit detail | 2.50 per share x 100 x 1 contract |
- |
| OPTS-046 | example bear_put: spoken result | Result: max loss 250.00 dollars; max gain 750.00 dollars; breakeven 107.50; net debit 250.00 dollars. |
- |
| OPTS-047 | example bear_put: chart summary | Payoff at expiration for a bear put spread, 1 contract. Maximum loss 250.00 dollars. Maximum gain 750.00 dollars. Breakeven at 107.50. |
- |
| OPTS-048 | net credit: validation | {"issues":{"short_prem":{"message":"The short premium is higher than the long premium, which makes this a net credit. This calculator covers net debit spreads only.","summary":"The short premium is higher than the long premium, so this is a net credit.","empty":false}},"inputs":null} |
- |
| OPTS-049 | equal strikes: validation | {"issues":{"short_strike":{"message":"Strikes can't be equal. A spread needs two different strikes.","summary":"Strikes can't be equal. A spread needs two different strikes.","empty":false}},"inputs":null} |
- |
| OPTS-050 | inverted strikes (bull call): validation | {"issues":{"long_strike":{"message":"For a bull call spread the long call strike must be below the short call strike.","summary":"For a bull call spread the long call strike must be below the short call strike.","empty":false}},"inputs":null} |
- |
| OPTS-051 | inverted strikes (bear put): validation | {"issues":{"long_strike":{"message":"For a bear put spread the long put strike must be above the short put strike.","summary":"For a bear put spread the long put strike must be above the short put strike.","empty":false}},"inputs":null} |
- |
| OPTS-052 | net debit above width: arithmetic step 1 | Net debit per share = 12.00 - 1.50 = 10.50 |
- |
| OPTS-053 | net debit above width: arithmetic step 2 | Net debit = 10.50 x 100 x 1 = 1,050.00 |
- |
| OPTS-054 | net debit above width: arithmetic step 3 | Strike width = \|110.00 - 100.00\| = 10.00 |
- |
| OPTS-055 | net debit above width: arithmetic step 4 | Max gain = (10.00 - 10.50) x 100 x 1 = -50.00 |
- |
| OPTS-056 | net debit above width: arithmetic step 5 | Max loss = net debit = 1,050.00 |
- |
| OPTS-057 | net debit above width: arithmetic step 6 | Breakeven = long strike + net debit per share = 100.00 + 10.50 = 110.50, which is past the short strike, so the payoff never reaches zero |
- |
| OPTS-058 | net debit above width: note 1 | Net debit is above the strike width, so the maximum result at expiration is a loss and the payoff never reaches zero. There is no breakeven point. |
- |
| OPTS-059 | net debit above width: maxGain | -$50.00 |
- |
| OPTS-060 | net debit above width: maxLoss | -$1,050.00 |
- |
| OPTS-061 | net debit above width: breakeven | Not defined: the payoff never reaches zero |
- |
| OPTS-062 | net debit above width: netDebit detail | 10.50 per share x 100 x 1 contract |
- |
| OPTS-063 | net debit above width: marker label | Profit or loss at XYZ 106.00 |
G4 |
| OPTS-064 | net debit above width: spoken result | Result: max loss 1,050.00 dollars; max gain -50.00 dollars; no breakeven point; net debit 1,050.00 dollars. |
- |
| OPTS-065 | net debit above width: chart summary | Payoff at expiration for a bull call spread, 1 contract. Maximum loss 1,050.00 dollars. Maximum gain -50.00 dollars. No breakeven point. |
- |
| OPTS-066 | zero premium: arithmetic step 1 | Net debit = 0.00 x 100 x 2 = 0.00 |
- |
| OPTS-067 | zero premium: arithmetic step 2 | Max loss = net debit = 0.00 |
- |
| OPTS-068 | zero premium: arithmetic step 3 | Breakeven = strike + premium = 100.00 + 0.00 = 100.00 |
- |
| OPTS-069 | zero premium: arithmetic step 4 | Max gain: a call has no ceiling at expiration, so there is no maximum |
- |
| OPTS-070 | zero premium: note 1 | Premium is 0, so the net debit and max loss are 0. |
- |
| OPTS-071 | zero premium: maxGain | No upper limit |
- |
| OPTS-072 | zero premium: maxLoss | $0.00 |
- |
| OPTS-073 | zero premium: breakeven | 100.00 |
- |
| OPTS-074 | zero premium: netDebit detail | 0.00 per share x 100 x 2 contracts |
- |
| OPTS-075 | zero premium: spoken result | Result: max loss 0.00 dollars; no upper limit on max gain; breakeven 100.00; net debit 0.00 dollars. |
- |
| OPTS-076 | zero premium: chart summary | Payoff at expiration for a long call, 2 contracts. Maximum loss 0.00 dollars. Maximum gain has no upper limit. Breakeven at 100.00. |
- |
| OPTS-077 | bad contracts: validation | {"issues":{"contracts":{"message":"Enter a whole number of contracts, 1 or more.","summary":"Enter a whole number of contracts, 1 or more.","empty":false}},"inputs":null} |
- |
| OPTS-078 | field (long_call) long_strike: label | Strike price (USD) |
- |
| OPTS-079 | field (long_call) long_prem: label | Premium paid per share (USD) |
- |
| OPTS-080 | field (long_call) long_prem: hint | Price of the call per share. One contract is 100 shares. |
- |
| OPTS-081 | field (long_call) contracts: label | Contracts |
- |
| OPTS-082 | field (long_call) contracts: hint | Whole number. One contract is 100 shares. |
- |
| OPTS-083 | field (long_call) marker: label | XYZ price marker (USD) |
G4 |
| OPTS-084 | field (long_call) marker: hint | Adds a marker and the profit or loss at that price. |
- |
| OPTS-085 | field (long_put) long_strike: label | Strike price (USD) |
- |
| OPTS-086 | field (long_put) long_prem: label | Premium paid per share (USD) |
- |
| OPTS-087 | field (long_put) long_prem: hint | Price of the put per share. One contract is 100 shares. |
- |
| OPTS-088 | field (long_put) contracts: label | Contracts |
- |
| OPTS-089 | field (long_put) contracts: hint | Whole number. One contract is 100 shares. |
- |
| OPTS-090 | field (long_put) marker: label | XYZ price marker (USD) |
G4 |
| OPTS-091 | field (long_put) marker: hint | Adds a marker and the profit or loss at that price. |
- |
| OPTS-092 | field (bull_call) long_strike: label | Long call strike (lower strike) (USD) |
- |
| OPTS-093 | field (bull_call) long_prem: label | Long call premium paid (USD) |
- |
| OPTS-094 | field (bull_call) long_prem: hint | Per share. |
- |
| OPTS-095 | field (bull_call) short_strike: label | Short call strike (higher strike) (USD) |
- |
| OPTS-096 | field (bull_call) short_prem: label | Short call premium received (USD) |
- |
| OPTS-097 | field (bull_call) short_prem: hint | Per share. |
- |
| OPTS-098 | field (bull_call) contracts: label | Contracts |
- |
| OPTS-099 | field (bull_call) contracts: hint | Whole number. One contract is 100 shares. |
- |
| OPTS-100 | field (bull_call) marker: label | XYZ price marker (USD) |
G4 |
| OPTS-101 | field (bull_call) marker: hint | Adds a marker and the profit or loss at that price. |
- |
| OPTS-102 | field (bear_put) long_strike: label | Long put strike (higher strike) (USD) |
- |
| OPTS-103 | field (bear_put) long_prem: label | Long put premium paid (USD) |
- |
| OPTS-104 | field (bear_put) long_prem: hint | Per share. |
- |
| OPTS-105 | field (bear_put) short_strike: label | Short put strike (lower strike) (USD) |
- |
| OPTS-106 | field (bear_put) short_prem: label | Short put premium received (USD) |
- |
| OPTS-107 | field (bear_put) short_prem: hint | Per share. |
- |
| OPTS-108 | field (bear_put) contracts: label | Contracts |
- |
| OPTS-109 | field (bear_put) contracts: hint | Whole number. One contract is 100 shares. |
- |
| OPTS-110 | field (bear_put) marker: label | XYZ price marker (USD) |
G4 |
| OPTS-111 | field (bear_put) marker: hint | Adds a marker and the profit or loss at that price. |
- |
| OPTS-112 | status line while fields need fixing | Waiting for: <field names>. The result appears when it is fixed. / when they are fixed. |
- |
| OPTS-113 | bull call spread, equal premiums (strikes 100 and 110, premiums 2.00 and 2.00): note 1 | The long and short premiums are equal, so the net debit and max loss are 0. |
- |
| OPTS-114 | bull call spread, net debit equals the strike width (strikes 100 and 110, premiums 11.50 and 1.50): note 1 | Net debit equals the strike width, so the maximum result at expiration is 0. |
- |
| OPTS-115 | display limit (long call, strike 100, premium 1,000,000,000,000, 1,000,000,000,000 contracts): arithmetic step 1 | Net debit = 1,000,000,000,000.00 x 100 x 1,000,000,000,000 = Over 1,000,000,000,000 |
- |
| OPTS-116 | display limit: note 1 | A result is larger than the display limit of 1,000,000,000,000. Check the numbers entered. |
- |
| OPTS-117 | display limit: maxLoss | Below -1,000,000,000,000 |
- |
| OPTS-118 | display limit: breakeven | Over 1,000,000,000,000 |
- |
| OPTS-119 | display limit: spoken result | Result: max loss Over 1,000,000,000,000 dollars; no upper limit on max gain; breakeven Over 1,000,000,000,000; net debit Over 1,000,000,000,000 dollars. |
- |
| OPTS-120 | long put, premium above the strike (strike 5.00, premium 6.00): arithmetic step 3 | Breakeven: not defined, the payoff never reaches zero |
- |
| OPTS-121 | unbounded loss (optionsPayoff.ts:608; a branch in the code that none of the four strategies on the page reaches, because each has a finite maximum loss; read from source, not produced by a call): chart summary |
Maximum loss has no lower limit. |
- |
| OPTS-122 | unbounded loss (optionsPayoff.ts:600, same branch): spoken result fragment |
no lower limit on max loss |
- |
| OPTS-123 | unbounded loss (optionsPayoff.ts:620, same branch): maxLoss |
No lower limit |
- |
| OPTS-124 | chart cursor readout, profit form (example bull_call, cursor at the 106 marker, which is where the cursor starts). cursorSentence, optionsPayoff.ts:581-585. Drawn as the visible bold text in .tl-readout (PayoffChart.tsx:132, the paragraph is aria-hidden) and read aloud as the slider's aria-valuetext (PayoffChart.tsx:145). The visitor can move the cursor to any price on the axis, so this sentence and the next two are templates filled with whatever price and result the cursor is on |
XYZ 106.00 at expiration: profit 350.00 dollars |
G2, G4 |
| OPTS-125 | chart cursor readout, loss form (same example, cursor moved to 90) | XYZ 90.00 at expiration: loss 250.00 dollars |
G2, G4 |
| OPTS-126 | chart cursor readout, breakeven form (same example, cursor moved to 102.50; used when the result rounds to zero) | XYZ 102.50 at expiration: breakeven, 0 dollars |
G2, G4 |
B6. Risk of ruin calculator
- Route:
/tools/risk-of-ruin-calculator - Card and PR: #4841 (#4902)
- Owner: Product owner: Kristerpher (epic #4819 decisions, 2026-10-29). Copy was drafted in the design stage (
docs/design/seo-tools/) and built by the feature card. No named copy owner and nomarketing-strategistsign-off is recorded in the epic or the code; PM to assign (gap listed in the main packet). Legal clearance: counsel via #3141. - Status of every row below: PUBLISHED-PENDING-REVIEW: on develop with no feature flag (the tool registry is the only visibility control), so it is live on raxx.app when develop is next promoted to main; not on main at the snapshot. Published without waiting for counsel by operator decision 2026-10-29; attorney review runs in parallel (
needs:attorney-reviewis not a blocker). Not counsel-cleared.
| ID | Location (file:line, context) | String as written in source | Touches |
|---|---|---|---|
| ROR-001 | app/tools/risk-of-ruin-calculator/page.tsx:44 (RiskOfRuinCalculatorPage) |
Each path starts at 1.00 of equity. A loss multiplies equity by 1 - risk per trade. A win multiplies it by 1 + risk per trade x (average win / average loss). The maximum drawdown on a path is the largest fall from a prior equity peak. The share shown is the number of paths whose maximum drawdown reaches your threshold, divided by the number of paths. The simulation resamples the numbers you entered; it is not a prediction of results. See how Raxx records trades in the |
G2, G6 |
| ROR-002 | app/tools/risk-of-ruin-calculator/page.tsx:53 (RiskOfRuinCalculatorPage) |
Assumptions and limits |
- |
| ROR-003 | app/tools/risk-of-ruin-calculator/page.tsx:64 (RiskOfRuinCalculatorPage) |
Examples |
- |
| ROR-004 | app/tools/risk-of-ruin-calculator/page.tsx:69 (RiskOfRuinCalculatorPage) |
Numbers entered |
- |
| ROR-005 | app/tools/risk-of-ruin-calculator/page.tsx:72 (RiskOfRuinCalculatorPage) |
Win rate |
- |
| ROR-006 | app/tools/risk-of-ruin-calculator/page.tsx:76 (RiskOfRuinCalculatorPage) |
Average win / loss |
- |
| ROR-007 | app/tools/risk-of-ruin-calculator/page.tsx:82 (RiskOfRuinCalculatorPage) |
Risk per trade |
G6 |
| ROR-008 | app/tools/risk-of-ruin-calculator/page.tsx:86 (RiskOfRuinCalculatorPage) |
Trades / threshold |
- |
| ROR-009 | app/tools/risk-of-ruin-calculator/page.tsx:92 (RiskOfRuinCalculatorPage) |
Result |
- |
| ROR-010 | app/tools/risk-of-ruin-calculator/page.tsx:95 (RiskOfRuinCalculatorPage) |
Paths at threshold |
- |
| ROR-011 | app/tools/risk-of-ruin-calculator/page.tsx:99 (RiskOfRuinCalculatorPage) |
Median max drawdown |
- |
| ROR-012 | lib/tools/riskOfRuin/content.ts:16 (RUIN_LEDE) |
Enter a win rate, average win and loss, and risk per trade. The simulation resamples those numbers and shows how maximum drawdown is distributed. |
G2, G6 |
| ROR-013 | lib/tools/riskOfRuin/content.ts:19 (RUIN_TERMS.term) |
Win rate |
- |
| ROR-014 | lib/tools/riskOfRuin/content.ts:19 (RUIN_TERMS.definition) |
Share of trades that are wins, from the numbers you enter. |
- |
| ROR-015 | lib/tools/riskOfRuin/content.ts:20 (RUIN_TERMS.term) |
Payoff ratio |
- |
| ROR-016 | lib/tools/riskOfRuin/content.ts:20 (RUIN_TERMS.definition) |
Average win divided by average loss. |
- |
| ROR-017 | lib/tools/riskOfRuin/content.ts:21 (RUIN_TERMS.term) |
Maximum drawdown |
- |
| ROR-018 | lib/tools/riskOfRuin/content.ts:21 (RUIN_TERMS.definition) |
The largest fall from a prior equity peak on one path. |
- |
| ROR-019 | lib/tools/riskOfRuin/content.ts:22 (RUIN_TERMS.term) |
Seed |
- |
| ROR-020 | lib/tools/riskOfRuin/content.ts:22 (RUIN_TERMS.definition) |
A number that fixes the random draws, so the same inputs reproduce the same output. |
- |
| ROR-021 | lib/tools/riskOfRuin/content.ts:27 (RUIN_LIMITS) |
The win rate and payoff stay constant on every trade. |
- |
| ROR-022 | lib/tools/riskOfRuin/content.ts:28 (RUIN_LIMITS) |
Trades are independent of each other. |
- |
| ROR-023 | lib/tools/riskOfRuin/content.ts:29 (RUIN_LIMITS) |
Costs, slippage and changes in your own approach are not modelled. |
- |
| ROR-024 | lib/tools/riskOfRuin/content.ts:30 (RUIN_LIMITS) |
Real results differ. |
G2 |
| ROR-025 | lib/tools/riskOfRuin/content.ts:37 (RUIN_FAQ.question) |
What does ruin mean in this calculator? |
- |
| ROR-026 | lib/tools/riskOfRuin/content.ts:39 (RUIN_FAQ.answer) |
Ruin is a drawdown threshold you set; 50% is the example value. A simulated path hits it when its equity falls from an earlier peak on that path by at least that percent. |
G2 |
| ROR-027 | lib/tools/riskOfRuin/content.ts:42 (RUIN_FAQ.question) |
How does the simulation work? |
G2 |
| ROR-028 | lib/tools/riskOfRuin/content.ts:43 (RUIN_FAQ.answer) |
paths. On each path every trade is a win or a loss drawn with the win rate you entered, and the risk per trade you entered sets how much equity moves. A fixed seed means the same inputs give the same output. |
G6 |
| ROR-029 | lib/tools/riskOfRuin/content.ts:46 (RUIN_FAQ.question) |
Why can results here differ from real trading? |
- |
| ROR-030 | lib/tools/riskOfRuin/content.ts:47 (RUIN_FAQ.answer) |
The simulation assumes a constant win rate and payoff and independent trades. Real results differ. |
G2 |
| ROR-031 | lib/tools/riskOfRuin/summary.ts:29 (RUIN_CAPTION) |
Simulation of the numbers you entered; not a prediction of results. |
G2 |
| ROR-032 | lib/tools/riskOfRuin/summary.ts:32 (RUIN_REAL_RESULTS_DIFFER) |
Real results differ. |
G2 |
| ROR-033 | lib/tools/riskOfRuin/summary.ts:36 (RUIN_ASSUMPTIONS) |
The win rate and the payoff (average win / average loss) are constant on every trade. |
- |
| ROR-034 | lib/tools/riskOfRuin/summary.ts:37 (RUIN_ASSUMPTIONS) |
Trades are independent of each other. |
- |
| ROR-035 | lib/tools/riskOfRuin/summary.ts:38 (RUIN_ASSUMPTIONS) |
Each loss costs the risk-per-trade percent of current equity; each win gains that percent times the payoff ratio. |
- |
| ROR-036 | lib/tools/riskOfRuin/summary.ts:39 (RUIN_ASSUMPTIONS) |
Drawdown is the fall from the highest equity reached so far on that path. |
- |
| ROR-037 | lib/tools/riskOfRuin/summary.ts:43 (WORKER_FAILURE_MESSAGE) |
The simulation could not run in this browser. Your numbers were not sent anywhere. Reload the page, or try a current version of your browser. |
G2, G8 |
| ROR-038 | lib/tools/riskOfRuin/inputs.ts:46 (RUIN_FIELDS.name) |
Win rate |
- |
| ROR-039 | lib/tools/riskOfRuin/inputs.ts:47 (RUIN_FIELDS.label) |
Win rate (%) |
- |
| ROR-040 | lib/tools/riskOfRuin/inputs.ts:50 (RUIN_FIELDS.hint) |
Share of trades that are wins. |
- |
| ROR-041 | lib/tools/riskOfRuin/inputs.ts:56 (RUIN_FIELDS.name) |
Average win |
- |
| ROR-042 | lib/tools/riskOfRuin/inputs.ts:60 (RUIN_FIELDS.hint) |
Any currency or R units. |
- |
| ROR-043 | lib/tools/riskOfRuin/inputs.ts:65 (RUIN_FIELDS.name) |
Average loss |
- |
| ROR-044 | lib/tools/riskOfRuin/inputs.ts:69 (RUIN_FIELDS.hint) |
Same units as average win. Only the ratio of the two is used. |
- |
| ROR-045 | lib/tools/riskOfRuin/inputs.ts:74 (RUIN_FIELDS.name) |
Risk per trade |
G6 |
| ROR-046 | lib/tools/riskOfRuin/inputs.ts:75 (RUIN_FIELDS.label) |
Risk per trade (% of equity) |
G6 |
| ROR-047 | lib/tools/riskOfRuin/inputs.ts:78 (RUIN_FIELDS.hint) |
Each loss costs this percent of current equity. The calculator suggests no value. |
G5 |
| ROR-048 | lib/tools/riskOfRuin/inputs.ts:84 (RUIN_FIELDS.name) |
Number of trades |
- |
| ROR-049 | lib/tools/riskOfRuin/inputs.ts:88 (RUIN_FIELDS.hint) |
Trades on each simulated path. Up to 2,000. |
G2 |
| ROR-050 | lib/tools/riskOfRuin/inputs.ts:90 (RUIN_FIELDS.countMessage) |
Enter a whole number of trades, 1 or more. |
- |
| ROR-051 | lib/tools/riskOfRuin/inputs.ts:94 (RUIN_FIELDS.name) |
Ruin threshold |
- |
| ROR-052 | lib/tools/riskOfRuin/inputs.ts:95 (RUIN_FIELDS.label) |
Drawdown that counts as ruin (%) |
- |
| ROR-053 | lib/tools/riskOfRuin/inputs.ts:98 (RUIN_FIELDS.hint) |
A fall of this percent from the highest equity on a path. 50 is an example value; change it. |
- |
| ROR-054 | lib/tools/riskOfRuin/inputs.ts:122 (AVG_LOSS_NOTE) |
The payoff ratio divides by the average loss. |
- |
| ROR-055 | lib/tools/riskOfRuin/constants.ts:73 (EXAMPLE_EQUAL.title) |
Equal win and loss |
- |
| ROR-056 | lib/tools/riskOfRuin/constants.ts:81 (EXAMPLE_LARGER_WIN.title) |
Larger win than loss |
- |
| ROR-057 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:107 (IDLE_STATUS) |
Enter your numbers to see the result. |
- |
| ROR-058 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:434 (RiskOfRuinCalculator) |
Your numbers |
- |
| ROR-059 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:441 (RiskOfRuinCalculator) |
The numbers in this link could not be read, so the fields are empty. |
- |
| ROR-060 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:447 (RiskOfRuinCalculator) |
Example numbers are loaded. Change any field to use your own. |
- |
| ROR-061 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:459 (RiskOfRuinCalculator) |
Reset |
- |
| ROR-062 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:468 (RiskOfRuinCalculator) |
Result |
- |
| ROR-063 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:470 (RiskOfRuinCalculator) |
Example numbers |
- |
| ROR-064 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:476 (RiskOfRuinCalculator) |
The result appears when |
- |
| ROR-065 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:489 (RiskOfRuinCalculator) |
Still waiting for: |
- |
| ROR-066 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:494 (RiskOfRuinCalculator) |
Use example numbers |
- |
| ROR-067 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:510 (RiskOfRuinCalculator) |
Waiting for: |
- |
| ROR-068 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:528 (RiskOfRuinCalculator) |
Try again |
- |
| ROR-069 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:546 (RiskOfRuinCalculator @aria-label) |
Simulation progress |
G2 |
| ROR-070 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:562 (RiskOfRuinCalculator) |
The page stays usable while this runs. Changing a number restarts the simulation. |
G2 |
| ROR-071 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:569 (RiskOfRuinCalculator) |
Given these inputs, in this simulation |
G2 |
| ROR-072 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:578 (RiskOfRuinCalculator) |
Median maximum drawdown |
- |
| ROR-073 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:582 (RiskOfRuinCalculator) |
Paths simulated |
G2 |
| ROR-074 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:586 (RiskOfRuinCalculator) |
Trades per path |
- |
| ROR-075 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:590 (RiskOfRuinCalculator) |
Seed |
- |
| ROR-076 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:599 (RiskOfRuinCalculator) |
Assumptions |
- |
| ROR-077 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:629 (RiskOfRuinCalculator @before) |
Re-run with a new seed |
- |
| ROR-078 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:636 (RiskOfRuinCalculator) |
Show how each path is built |
- |
| ROR-079 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:668 (ClosedFormNote) |
Closed-form cross-check: |
- |
| ROR-080 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:668 (ClosedFormNote) |
The classic formula applies when average win equals average loss. It is an equal-step approximation: |
- |
| ROR-081 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:671 (ClosedFormNote) |
it assumes unlimited trades, so it is a different measure from the simulated drawdown. |
G2 |
| ROR-082 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:672 (ClosedFormNote) |
it treats every trade as one step of the same size, counts whole steps to a fall of |
- |
| ROR-083 | components/tools/riskOfRuin/RiskOfRuinCalculator.tsx:672 (ClosedFormNote) |
, and assumes unlimited trades. That is a different measure from the drawdown above, so the two figures differ. |
- |
| ROR-084 | components/tools/riskOfRuin/RuinHistogram.tsx:59 (HistogramSvg) |
Maximum drawdown on the path |
- |
| ROR-085 | components/tools/riskOfRuin/RuinHistogram.tsx:84 (RuinHistogram) |
Histogram of maximum drawdown across simulated paths |
G2 |
| ROR-086 | components/tools/riskOfRuin/RuinHistogram.tsx:92 (RuinHistogram) |
Paths below the threshold |
- |
| ROR-087 | components/tools/riskOfRuin/RuinHistogram.tsx:96 (RuinHistogram) |
Paths at or beyond the threshold |
- |
| ROR-088 | components/tools/riskOfRuin/RuinHistogram.tsx:100 (RuinHistogram) |
Show the histogram as a table |
- |
| ROR-089 | components/tools/riskOfRuin/RuinHistogram.tsx:102 (RuinHistogram) |
Simulated paths by maximum drawdown |
G2 |
| ROR-090 | components/tools/riskOfRuin/RuinHistogram.tsx:105 (RuinHistogram) |
Max drawdown |
- |
| ROR-091 | components/tools/riskOfRuin/RuinHistogram.tsx:106 (RuinHistogram) |
Paths |
- |
| ROR-092 | components/tools/riskOfRuin/RuinHistogram.tsx:107 (RuinHistogram) |
At or beyond threshold |
- |
| ROR-093 | components/tools/riskOfRuin/LoadExampleButton.tsx:30 (LoadExampleButton) |
Load these numbers |
- |
| ROR-094 | components/tools/riskOfRuin/LoadExampleButton.tsx:25 (LoadExampleButton @aria-label) |
Load these numbers: <example title> |
- |
Rendered samples for Risk of ruin calculator (produced by calling the real library functions on the page's own golden examples and edge cases; these are the sentences assembled at run time from the fragments above).
| ID | Case | Rendered text | Touches |
|---|---|---|---|
| RORS-001 | example equal: result sentence | Given these inputs, in this simulation 12.0% of paths hit a 50% drawdown. |
G2 |
| RORS-002 | example equal: spoken sentence | Given these inputs, in this simulation 12.0% of paths hit a 50 percent drawdown. |
G2 |
| RORS-003 | example equal: histogram description | Histogram of the maximum drawdown on each of 5,000 simulated paths of 200 trades. 598 paths reach the 50 percent threshold. Median maximum drawdown 34.7 percent. |
G2 |
| RORS-004 | example equal: path step 1 | Payoff ratio = 100.00 / 100.00 = 1.00 |
- |
| RORS-005 | example equal: path step 2 | A win multiplies equity by 1 + 4% x 1.00 = 1.0400 |
- |
| RORS-006 | example equal: path step 3 | A loss multiplies equity by 1 - 4% = 0.9600 |
- |
| RORS-007 | example equal: path step 4 | Each of 5,000 paths draws 200 trades; a trade is a win at the 55% win rate you entered (seeded generator, seed 4821) |
- |
| RORS-008 | example equal: path step 5 | Maximum drawdown on a path = the largest fall from a prior equity peak |
- |
| RORS-009 | example equal: path step 6 | Share of paths = paths with maximum drawdown of 50% or more / 5,000 = 598 / 5,000 = 12.0% |
- |
| RORS-010 | example larger win: result sentence | Given these inputs, in this simulation 0.5% of paths hit a 50% drawdown. |
G2 |
| RORS-011 | example larger win: spoken sentence | Given these inputs, in this simulation 0.5% of paths hit a 50 percent drawdown. |
G2 |
| RORS-012 | example larger win: histogram description | Histogram of the maximum drawdown on each of 5,000 simulated paths of 200 trades. 26 paths reach the 50 percent threshold. Median maximum drawdown 24.7 percent. |
G2 |
| RORS-013 | example larger win: path step 1 | Payoff ratio = 150.00 / 100.00 = 1.50 |
- |
| RORS-014 | example larger win: path step 2 | A win multiplies equity by 1 + 3% x 1.50 = 1.0450 |
- |
| RORS-015 | example larger win: path step 3 | A loss multiplies equity by 1 - 3% = 0.9700 |
- |
| RORS-016 | example larger win: path step 4 | Each of 5,000 paths draws 200 trades; a trade is a win at the 50% win rate you entered (seeded generator, seed 4821) |
- |
| RORS-017 | example larger win: path step 5 | Maximum drawdown on a path = the largest fall from a prior equity peak |
- |
| RORS-018 | example larger win: path step 6 | Share of paths = paths with maximum drawdown of 50% or more / 5,000 = 26 / 5,000 = 0.5% |
- |
| RORS-019 | win rate 0: result sentence | Given these inputs, in this simulation 100% of paths hit a 50% drawdown. |
G2 |
| RORS-020 | win rate 0: spoken sentence | Given these inputs, in this simulation 100% of paths hit a 50 percent drawdown. |
G2 |
| RORS-021 | win rate 0: histogram description | Histogram of the maximum drawdown on each of 5,000 simulated paths of 200 trades. 5,000 paths reach the 50 percent threshold. Median maximum drawdown 100.0 percent. |
G2 |
| RORS-022 | win rate 0: edge case note | Win rate is 0, so every simulated trade is a loss. |
G2 |
| RORS-023 | win rate 0: path step 1 | Payoff ratio = 100.00 / 100.00 = 1.00 |
- |
| RORS-024 | win rate 0: path step 2 | A win multiplies equity by 1 + 4% x 1.00 = 1.0400 |
- |
| RORS-025 | win rate 0: path step 3 | A loss multiplies equity by 1 - 4% = 0.9600 |
- |
| RORS-026 | win rate 0: path step 4 | Each of 5,000 paths draws 200 trades; a trade is a win at the 0% win rate you entered (seeded generator, seed 4821) |
- |
| RORS-027 | win rate 0: path step 5 | Maximum drawdown on a path = the largest fall from a prior equity peak |
- |
| RORS-028 | win rate 0: path step 6 | Share of paths = paths with maximum drawdown of 50% or more / 5,000 = 5,000 / 5,000 = 100% |
- |
| RORS-029 | win rate 100: result sentence | Given these inputs, in this simulation 0% of paths hit a 50% drawdown. |
G2 |
| RORS-030 | win rate 100: spoken sentence | Given these inputs, in this simulation 0% of paths hit a 50 percent drawdown. |
G2 |
| RORS-031 | win rate 100: histogram description | Histogram of the maximum drawdown on each of 5,000 simulated paths of 200 trades. 0 paths reach the 50 percent threshold. Median maximum drawdown 0.0 percent. |
G2 |
| RORS-032 | win rate 100: edge case note | Win rate is 100%, so every simulated trade is a win and no path has a drawdown. |
G2 |
| RORS-033 | win rate 100: path step 1 | Payoff ratio = 100.00 / 100.00 = 1.00 |
- |
| RORS-034 | win rate 100: path step 2 | A win multiplies equity by 1 + 4% x 1.00 = 1.0400 |
- |
| RORS-035 | win rate 100: path step 3 | A loss multiplies equity by 1 - 4% = 0.9600 |
- |
| RORS-036 | win rate 100: path step 4 | Each of 5,000 paths draws 200 trades; a trade is a win at the 100% win rate you entered (seeded generator, seed 4821) |
- |
| RORS-037 | win rate 100: path step 5 | Maximum drawdown on a path = the largest fall from a prior equity peak |
- |
| RORS-038 | win rate 100: path step 6 | Share of paths = paths with maximum drawdown of 50% or more / 5,000 = 0 / 5,000 = 0% |
- |
| RORS-039 | risk 100: result sentence | Given these inputs, in this simulation 100% of paths hit a 50% drawdown. |
G2 |
| RORS-040 | risk 100: spoken sentence | Given these inputs, in this simulation 100% of paths hit a 50 percent drawdown. |
G2 |
| RORS-041 | risk 100: histogram description | Histogram of the maximum drawdown on each of 5,000 simulated paths of 200 trades. 5,000 paths reach the 50 percent threshold. Median maximum drawdown 100.0 percent. |
G2 |
| RORS-042 | risk 100: edge case note | Risk per trade is 100%, so one loss takes equity to zero. |
G6 |
| RORS-043 | risk 100: path step 1 | Payoff ratio = 100.00 / 100.00 = 1.00 |
- |
| RORS-044 | risk 100: path step 2 | A win multiplies equity by 1 + 100% x 1.00 = 2.0000 |
- |
| RORS-045 | risk 100: path step 3 | A loss multiplies equity by 1 - 100% = 0.0000 |
- |
| RORS-046 | risk 100: path step 4 | Each of 5,000 paths draws 200 trades; a trade is a win at the 55% win rate you entered (seeded generator, seed 4821) |
- |
| RORS-047 | risk 100: path step 5 | Maximum drawdown on a path = the largest fall from a prior equity peak |
- |
| RORS-048 | risk 100: path step 6 | Share of paths = paths with maximum drawdown of 50% or more / 5,000 = 5,000 / 5,000 = 100% |
- |
| RORS-049 | empty: validation | {"errors":{},"empty":["win","avgwin","avgloss","risk","trades"]} |
- |
| RORS-050 | too many trades: validation | {"errors":{"trades":"Use 2,000 trades or fewer."},"empty":[]} |
- |
| RORS-051 | zero avg loss: validation | {"errors":{"avgloss":"Enter a value greater than zero. The payoff ratio divides by the average loss."},"empty":[]} |
- |
| RORS-052 | RUIN_CAPTION | Simulation of the numbers you entered; not a prediction of results. |
G2 |
| RORS-053 | RUIN_REAL_RESULTS_DIFFER | Real results differ. |
G2 |
| RORS-054 | RUIN_ASSUMPTIONS[0] | The win rate and the payoff (average win / average loss) are constant on every trade. |
- |
| RORS-055 | RUIN_ASSUMPTIONS[1] | Trades are independent of each other. |
- |
| RORS-056 | RUIN_ASSUMPTIONS[2] | Each loss costs the risk-per-trade percent of current equity; each win gains that percent times the payoff ratio. |
- |
| RORS-057 | RUIN_ASSUMPTIONS[3] | Drawdown is the fall from the highest equity reached so far on that path. |
- |
| RORS-058 | WORKER_FAILURE_MESSAGE | The simulation could not run in this browser. Your numbers were not sent anywhere. Reload the page, or try a current version of your browser. |
G2, G8 |
| RORS-059 | FAQ 1 question | What does ruin mean in this calculator? |
- |
| RORS-060 | FAQ 1 answer | Ruin is a drawdown threshold you set; 50% is the example value. A simulated path hits it when its equity falls from an earlier peak on that path by at least that percent. |
G2 |
| RORS-061 | FAQ 2 question | How does the simulation work? |
G2 |
| RORS-062 | FAQ 2 answer | It builds 5,000 paths. On each path every trade is a win or a loss drawn with the win rate you entered, and the risk per trade you entered sets how much equity moves. A fixed seed means the same inputs give the same output. |
G6 |
| RORS-063 | FAQ 3 question | Why can results here differ from real trading? |
- |
| RORS-064 | FAQ 3 answer | The simulation assumes a constant win rate and payoff and independent trades. Real results differ. |
G2 |
| RORS-065 | status line while fields need fixing | Waiting for: <field names>. The result appears when it is fixed. / when they are fixed. |
- |
| RORS-066 | status line while the simulation runs | Simulating <n> paths of <m>. The page stays usable while this runs. Changing a number restarts the simulation. |
G2 |
| RORS-067 | status line after a worker failure | The simulation could not run in this browser. (then WORKER_FAILURE_MESSAGE; button: Try again) |
G2 |
| RORS-068 | closed-form cross-check (shown only when average win equals average loss, 50 < win rate < 100) | Closed-form cross-check: <percent>. The classic formula applies when average win equals average loss. It is an equal-step approximation: it treats every trade as one step of the same size, counts whole steps to a fall of <threshold>, and assumes unlimited trades. That is a different measure from the drawdown above, so the two figures differ. (Short variant in the narrow layout: "... equal-step approximation: it assumes unlimited trades, so it is a different measure from the simulated drawdown.") |
G2 |
| RORS-069 | histogram table: row labels (20 bins, 5 points wide; histogramRows, summary.ts:126-143) |
0% to under 5%; 5% to under 10%; 10% to under 15%; 15% to under 20%; 20% to under 25%; 25% to under 30%; 30% to under 35%; 35% to under 40%; 40% to under 45%; 45% to under 50%; 50% to under 55%; 55% to under 60%; 60% to under 65%; 65% to under 70%; 70% to under 75%; 75% to under 80%; 80% to under 85%; 85% to under 90%; 90% to under 95%; 95% to 100% |
- |
| RORS-070 | histogram table: "At or beyond threshold" column, threshold 50% | No for the rows 0% to under 5% through 45% to under 50%; Yes for 50% to under 55% through 95% to 100% |
- |
| RORS-071 | histogram table: same column, threshold 52% (the threshold falls inside a bin) | Partly for 50% to under 55%; No for the rows below it; Yes for the rows above it |
- |
| RORS-072 | after Try again: visible caption (RiskOfRuinCalculator.tsx:532, aria-hidden) and screen-reader status line (:386) |
Trying again. |
- |
| RORS-073 | spoken-only status line while the simulation runs and no result is shown (RiskOfRuinCalculator.tsx:389; announced through the visually hidden role="status" paragraph at :646, after a short delay; the text drawn on screen for the same state is RORS-066) |
Simulating. |
G2 |
B7. Pages that have not landed on develop (PRE-STAGED from the design stage)
#4842 (expectancy and profit factor), #4843 (covered call) and #4844 (risk/reward and breakeven win rate) are not on develop. The text below comes from the frozen design README and mockups (docs/design/seo-tools/), which the README itself calls proposals for these three pages. It is not a snapshot of shipped copy: re-inventory from develop when each card lands. It is listed now because the design stage records counsel-relevant wording on these pages: the covered call "income wording" is queued for attorney review (design open question 4), and the expectancy page adds a "not future results" line.
| Item | Proposed text |
|---|---|
| Registry title (#4842) | Expectancy Calculator for Trading - Profit Factor and R |
| Registry description (#4842) | Free expectancy calculator for trading. Enter win rate, average win and loss to see expectancy per trade, profit factor and breakeven win rate. No sign-up. |
| Registry title (#4843) | Covered Call Calculator - Max Profit, Breakeven, Return |
| Registry description (#4843) | Free covered call calculator. Enter cost basis, shares, strike and premium to see max profit, breakeven and return if called. No sign-up. |
| Registry title (#4844) | Risk Reward Ratio Calculator - Breakeven Win Rate |
| Registry description (#4844) | Free risk reward ratio calculator. Enter entry, stop and target, or risk and reward amounts, to see the ratio and breakeven win rate. No sign-up. |
| Expectancy page note (mockup 11) | Expectancy describes the inputs you enter, not future results. |
| Expectancy FAQ (mockup 11) | Expectancy is the average result per trade computed from the win rate, average win and average loss you enter. It describes the inputs, not future results. |
| Covered call lede (mockup 13) | Enter cost basis, shares, strike and premium. The calculator returns max profit, breakeven and the return if called or unchanged at expiry, with a payoff chart. |
| Covered call result rows (mockup 13) | Max profit; Breakeven; Return if called ("Shares called away at the strike"); Return if unchanged at expiry ("Stock finishes at the cost basis"); Average per day over 30 days, if called ("Not annualized"); Premium received |
| Covered call explainer (mockup 13) | A covered call pairs shares held with one call option sold per 100 shares. The premium received is part of the result whatever the price does. If the stock finishes above the strike at expiration, the shares are called away at the strike, which caps the result. |
| Covered call scope note (mockup 13) | Dividends, fees and taxes are not included. |
| Risk/reward note (mockup 15) | Breakeven win rate ignores fees and slippage. |
| Risk/reward FAQ (mockup 15) | A larger reward relative to risk lowers the breakeven win rate: 1 : 1 gives 50.00%, 1 : 2 gives 33.33% and 1 : 3 gives 25.00%. |
Wording the design records for counsel on these pages: the covered call "income wording" (design open question 4) and the days-held per-day figures, which are never annualized because annualizing reads as a projection (design decision 9). Listed for completeness and not from the design: "expectancy" as a term, and the breakeven-win-rate FAQ, which relates a reward ratio to a win rate.