Principles
The engine computes.
Every figure comes from one pricing engine. Screens and the agent ask for numbers; they never make them.
Every result replays.
Each calculation records its inputs, model and engine version, and reproduces to a stated tolerance on a clean machine.
Possible isn’t probable.
Scenario grids show what can happen. Only sets that carry a probability measure feed weighted metrics, and they name it.
Pricing
Specified · M2European FX vanillas, priced with Garman–Kohlhagen written on discount factors, so one formula holds on any curve.
- S, K
- spot and strike, domestic per foreign
- σ, τσ
- implied vol; vol time to expiry, ACT/365F
- DFd, DFf
- domestic and foreign discount factors
- ω, N
- +1 call, −1 put on foreign; notional in foreign
- Two clocks. Vol time runs to expiry, rate time to delivery. They’re separate inputs, never one T.
- Edges are exact. At expiry or zero vol, value falls to intrinsic on the forward and the result is flagged, never NaN.
- An outside check. 10,000 seeded cases against QuantLib, from 1 day to 5 years, vol 1–60%, rates −1% to 15%. QuantLib is a test oracle only.
| Greek | Engine unit | Shown as |
|---|---|---|
| Delta spot, forward; premium-adjusted or not | foreign per foreign notional | foreign amount, % of notional |
| Gamma | per 1.00 of spot | change in delta per 1% spot |
| Vega | domestic per 1.00 vol | domestic per vol point |
| Theta | domestic per year | domestic per day |
| Rho domestic, foreign | domestic per 1.00 rate | domestic per basis point |
Conventions
Specified · M2FX options trade in deltas and vols, not strikes. Turning a quote into a strike depends on conventions, so MANY keeps them as versioned data, not code.
| Delta | Definition | Used for |
|---|---|---|
| Spot | ω DFf Φ(ω d1) | domestic premium, up to 1Y |
| Forward | ω Φ(ω d1) | domestic premium, beyond 1Y |
| Spot, premium-adjusted | ω DFf (K/F) Φ(ω d2) | foreign premium, up to 1Y |
| Forward, premium-adjusted | ω (K/F) Φ(ω d2) | foreign premium, beyond 1Y |
K = F e±σ²τ/2
delta-neutral straddle; + unadjusted, − premium-adjustedRR25 = σ25C − σ25P
how much the market pays for calls over putsσ25C/P = σATM + BF25 ± ½RR25
smile strangle; the broker strangle follows| EUR/USD | GBP/USD | USD/JPY | |
|---|---|---|---|
| Pip | 0.0001 | 0.0001 | 0.01 |
| Spot lag · cut | T+2 · NY 10:00 | T+2 · NY 10:00 | T+2 · NY 10:00 |
| Premium | USD | USD | USD, premium-adjusted |
| Delta ≤1Y · >1Y | spot · forward | spot · forward | spot PA · forward PA |
| ATM | delta-neutral | delta-neutral | delta-neutral, PA |
Delivery is spot plus tenor, modified following; expiry is the date whose spot date is that delivery. A convention set is named by the hash of its contents, and every result records which one it used.
Strategies
Specified · M2A strategy is a set of legs on one pair, with optional exposures it hedges. Templates are plain constructors: edit the result freely and it says so.
| Template | Legs | Holds when |
|---|---|---|
| Vertical | long K1, short K2, same type | K1 ≠ K2 |
| Straddle | call and put at K | same strike, expiry, notional |
| Strangle | put Kp, call Kc | Kp < Kc |
| Risk reversal | long call Kc, short put Kp | Kp < Kc |
| Butterfly | +1 K1, −2 K2, +1 K3 | K1 < K2 < K3 |
| Collar | long put, short call against an exposure | notional ≤ exposure |
| Protective put | long put against an exposure | notional ≤ exposure |
| Forward hedge | outright forward against an exposure | delivery on the due date |
Validation runs before any price: positive strikes and notionals, currencies of the pair, expiry after today, invariants intact. Up to 12 legs interactively; larger runs become jobs.
Market data
In build · M1Every dataset becomes an immutable snapshot named by the hash of its contents. Nothing is filled in: a missing field is an error, not a guess.
ECB
Daily reference rates for about 30 currencies, back to 1999.
No key · attributionFRED
Daily FX (H.10) and rates: SOFR and Treasuries.
Free API keyDukascopy
Intraday spot, imported into your own workspace.
Not redistributedConnectors
CSV and Parquet, Postgres (read-only), S3-compatible storage.
Snowflake, BigQuery nextms_9f2c…e41a
- spot
- curves
- vol pillars
- quality
- licence
Quotes are checked before they’re sealed: crossed quotes are dropped, stale ones flagged, outliers held back.
There is no free source of historical FX implied volatility. Backtests on open data use a labelled proxy, such as realised volatility, and say so on every chart.
Risk and scenarios
Specified · M2A strategy is evaluated on a grid: spot across F e±4σ√τ in 401 steps, against time to expiry or a vol shift in 41. Strikes, break-evens and today’s spot are always exact points on it.
Break-evens are solved exactly. An unbounded loss is shown as unbounded, never as a large number. Any region can be explained by leg, by Greek and by what’s left over.
Provenance
Specified · M3Each calculation keeps a record of its request, snapshot, conventions, model, engine version, numerical environment and seed. Its id is the hash of those inputs.
| Checked | Tolerance |
|---|---|
| Price against QuantLib | 10−10 |
| Greeks against QuantLib | 10−10 |
| Analytic against finite-difference Greeks | 10−6 relative |
| Put–call parity | 10−13 |
| Delta to strike and back | 10−12 in delta |
| Legs sum to the total | 10−9 relative |
| Replay on another machine | 10−12 relative |
| Dates | exact |
Experiments are branches of immutable revisions; undo moves a pointer, never history. A bundle exports as JSON, CSV and a report, and replays with one command, without a database.
The agent
Planned · M4The agent runs the research; the engine produces the numbers. Every figure in an answer is bound to a calculation, or the answer becomes a table.
- Intentmodel
- Checkcode
- Routefast model
- Planmodel
- Validatecode
- Executeengine
- Verifycode
- Explainmodel
- Citecode
- Proposalyou decide
- Bounded. At most 12 tool calls and 60 seconds per request, with token and cost caps. Cancel at any time.
- Fenced. Text from files and data is quoted as untrusted and can’t give instructions. No tool can delete, change permissions or reach the network.
- Your keys or ours. Bring your own OpenRouter and Typesafe keys, encrypted and spend-limited, or use ours on the paid tier with every call metered.
Access
In build · M0- Join the listSeats open a few at a time.
- Link or codeSingle use, 15 minutes, stored only as a hash.
- Add a passkeyFrom then on, that’s how you sign in.
- Stay signed in30 days from your last visit, 180 at most. End any session from your devices.
API keys you add are encrypted with AES-GCM and never sent back to the browser. Workspaces are isolated in the database, row by row.
Roadmap
- M0 · now
Foundations
Accounts, passkeys, the workspace and its design system.
- M1
Data hub
Ten years of ECB and FRED data, your files and databases, side by side.
- M2
Strategy lab
The engine and its instruments, on real snapshots.
- M3
Experiments
Branch, compare, export and replay exactly.
- M4
Agent
From an objective to candidate strategies you can check.
- Then
Backtests
Strategies replayed through history.