LIVE, NO CACHE, EVERY REQUEST

Verified calculations, checked live on every request

Every formula is traceable. Every output is regression-tested. This page runs live on every request.

43 passed · 43 total vectors · checked live at Tue, 06 Oct 2026 08:01:58 GMT
01WHAT IS THIS

Every calculator on TradingCalc runs against a set of canonical test vectors: exact input/output pairs derived step-by-step from the underlying formulas. This page executes all vectors in real time on each request (no cache) and reports the result.

The vectors cover all 12 calculators: PnL, Liquidation, Breakeven, Risk Sizer, Funding Cost, Average Entry, Target Exit, Scenario, Max Leverage, Hedge Ratio, Funding Arb, and Compound Funding. These are the core calculators behind the perpetual futures tools. Options, forex, risk and statistics, prediction-market, and on-chain tools are covered by their own test suites in CI, with reference values cross-checked against independent libraries where they exist.

The same vectors are also available to AI agents via the system.verify MCP tool at tradingcalc.io/api/mcp.

02FORMULA ASSUMPTIONS
pnlFees applied on notional at entry and exit. Gross = (exitPrice − entryPrice) × size for long.
breakevenBreak-even solved analytically: price where PnL = 0 after both fees.
target_exitExit price solved for target PnL or ROE, accounting for entry and exit fees.
position_sizerPosition size = (balance × riskPct) / (entryPrice × stopDistancePct).
average_entryWeighted average of entry prices by position size.
scenarioPnL computed per price target using same formula as pnl tool.
liquidationIsolated margin: liqPrice = entryPrice × (1 − 1/leverage + maintenanceMarginRate) for long. Cross margin uses total account equity.
max_leverageMax leverage = 1 / (stopDistancePct + maintenanceMarginRate + feePct).
hedge_ratioHedge size = spotSize × (spotPrice / perpPrice). Funding cost applied over holding period.
funding_costCost = positionSize × entryPrice × fundingRate × periods.
funding_arbAnnualized yield = (rateA − rateB) × periodsPerYear.
compound_fundingIterative: each period cost reduces position size.
pre_trade_checkComposite: orchestrates risk_sizer + breakeven + liquidation + funding_cost. Safety = liqDistance / stopDistance ratio (danger <1.5x, warn <3x).
03TEST VECTORS
#CALCULATORTEST CASESTATUS
1pnlBTC long +10%: gross=500, fees=3.75, pnl=496.25PASS
2pnlETH short −10%: gross=300, fees=1.95, pnl=298.05PASS
3pnlZero fees: pnl equals gross exactlyPASS
4pnlInverse (coin-margined) long, $1M contracts: gross=100 BTC, fees=0.3 BTC, pnl=99.7 BTCPASS
5pnlInverse short, price falls 20%, zero fees: gross=0.25 BTCPASS
6pnlInverse short max loss bound, zero fees: as exit price -> infinity, coin loss converges to size/entry = 500 BTC, never beyond itPASS
7pnlInverse short max loss bound, nonzero opening fee: the bound must include feeOpenPct - the closing fee vanishes as exit->infinity but the opening fee (fixed at open) does notPASS
8pnlmaxLossBound is null for a linear short - linear contracts have no such finite ceiling (USD loss is genuinely unbounded as price rises)PASS
9pnlmaxLossBound is null for an inverse long too - the bound only applies to inverse SHORTS (an inverse long has the opposite, unbounded-as-price-falls-to-0 asymmetry instead)PASS
10liquidationBTC long 10x: liqPrice=45250 (Binance isolated-margin formula)PASS
11liquidationBTC short 10x: liqPrice=54750PASS
12liquidationInverse long 10x: liqPrice≈45662.1005 (Bybit inverse isolated-margin formula)PASS
13liquidationInverse short 10x: liqPrice≈55248.6188PASS
14breakevenLong with standard exchange fees: breakeven≈100.0700PASS
15breakevenZero fees: breakeven=entry, totalFees=0, distance=0PASS
16breakevenInverse long, $1M contracts: BE≈100.3003 (mirrors linear short formula)PASS
17breakevenInverse short, $1M contracts: BE≈99.7003PASS
18risk_sizerLong, 5% stop, $10 risk: stopDistPct=5, sizeBase≈1.9734PASS
19risk_sizerInverse long, 5% stop, $1000 risk: sizeQuote=19000 USD contractsPASS
20risk_sizerInverse short, 5% stop, $1000 risk: sizeQuote=21000 USD contractsPASS
21funding_costLong, 0.01% per 8h, 7 days: totalCost=0.21, annualPct=10.95PASS
22funding_costShort receives when rate is positive: totalCost=−0.03PASS
23funding_costInverse long, $1M contracts, 0.01%/8h, 7 days: totalCost=21 coin, breakevenShift≈0.2104PASS
24average_entryWeighted average: (100×1+200×3)/4=175PASS
25average_entryInverse (coin-margined): two equal-USD fills at 2000 and 4000 average to the harmonic mean 2666.67, not the arithmetic mean 3000PASS
26target_exitTarget pnl=0 → net pnl is zero (round-trip breakeven)PASS
27target_exitLong target $10 PnL no fees: pnl≈10, exit above entryPASS
28target_exitInverse long, $1M contracts, target 50 coin PnL, zero fees: exitPrice≈100.5025PASS
29target_exitInverse short, $1M contracts, target 50% ROE, zero fees: exitPrice≈95.2381PASS
30scenarioLong +10% no fees: scenarios[0].pnl=10PASS
31scenarioInverse long +25%, $1M contracts, no fees: scenarios[0].gross=100 coinPASS
32max_leverage10k acct, 10% max drawdown, 3% vol: maxLev=2.8x, safeMargin=3500PASS
33max_leverageExtreme volatility: leverage is always ≥1 (floored)PASS
34max_leverage30% drawdown, 2.5% vol, 0.5% mmr: exactly 10.0x (the 0.1 boundary is decided by the inputs, not float noise)PASS
35hedge_ratioFull hedge 2x: perpNotional=10000, margin=5000, dailyCost=3PASS
36hedge_ratio50% hedge 1x: perpNotional=5000, margin=5000PASS
37funding_arb0.02% net rate 30d: gross=180, net=170, APY=21.9%PASS
38funding_arbHyperliquid 1h interval: 24 periods/dayPASS
39compound_funding1000 USDT, 0.01%/8h, 1 day, 100% reinvest: finalCapital≈1000.3003PASS
40compound_fundingreinvestPct=0: capital unchanged, totalEarned=0PASS
41compound_fundingFractional duration (1.5d): dailyEarnings uses the 2 whole days actually simulated, not the fractional 1.5 inputPASS
42compound_fundingExtreme -150%/period rate flips capital negative under a non-integer duration exponent: annualizedAPY clamps to -100 instead of NaNPASS
43pre_trade_checkBTC long 10x, 5% SL, 1% risk, 0.01%/8h funding: size=0.04, liqDist=9.5%, safety=warnPASS
04ERROR MODEL
INVALID_INPUT

A required parameter is missing, out of range, or the wrong type.

OUT_OF_DOMAIN

Inputs are valid but the combination produces a mathematically undefined result (e.g. liquidation price below zero).

UNSUPPORTED_COMBINATION

The requested exchange / margin type / side combination is not supported by the formula.

RATE_LIMITED

The caller has exceeded the call quota for their tier. Retry after the window resets.

AUTH_REQUIRED

The endpoint requires a valid API key. Anonymous quota exhausted.

INTERNAL_ERROR

Unexpected server-side error. The formula did not execute. Safe to retry.

05VERSION HISTORY
v1.7.0 · 2026-10-01
  • Fixed: max_leverage returned 9.9x instead of 10.0x for inputs that give exactly 10 on paper (for example 30% drawdown, 2.5% volatility, 0.5% maintenance margin); the 0.1 rounding is now exact
  • Verification: 43 canonical test vectors (was 42)
v1.6.0 · 2026-09-30
  • Added: public daily anchor. Once a day the verification state is signed and its hash is written to Solana; records are readable at GET /api/anchors (see the section below)
v1.5.0 · 2026-09-25
  • Added: maxLossBound on pnl for inverse short positions (the coin-denominated loss ceiling as exit price rises without limit)
  • Verification: 42 canonical test vectors (was 35)
v1.4.0 · 2026-09-19
  • Added: every MCP tools/call response is signed (ECDSA P-256); system.pubkey returns the public key for offline verification
v1.3.0 · 2026-09-08
  • Added: contractType ('linear' | 'inverse') on pnl, liquidation, average_entry, breakeven, target_exit, scenario, risk_sizer, funding_cost
  • Inverse (coin-margined) contracts settle in the base coin and use reciprocal price math: average_entry's inverse average is the harmonic mean of fill prices, not arithmetic
  • Verification: 35 canonical test vectors (was 23)
v1.2.1 · 2026-03-31
  • Changed: pre_trade_check output now includes summary_a/b/c: human-readable Russian decision strings
  • summary_a: position size, breakeven price, funding cost per 24h
  • summary_b: liquidation distance ratio with safety verdict (ok/warn/danger)
  • summary_c: overnight breakeven shift over hold_hours
v1.2.0 · 2026-03-31
  • Added: pre_trade_check, a composite intent tool (orchestrates risk_sizer + breakeven + liquidation + funding_cost)
  • Returns decision card: position size, breakeven, funding cost, liquidation safety, overnight breakeven shift
  • Verification: 23 canonical test vectors (was 22)
v1.1.0 · 2026-03-30
  • Added: max_leverage, hedge_ratio, funding_arb, compound_funding
  • Changed: tool grouping into 3 canonical suites (Trade Planning / Risk & Margin / Funding & Carry)
  • Verification: 22 canonical test vectors (was 12)
v1.0.0 · 2025-12-01
  • Initial release: pnl, breakeven, target_exit, position_sizer, average_entry, scenario, liquidation, funding_cost
  • Verification: 12 canonical test vectors
MCP ENDPOINT: POST /api/mcp · TOOL: system.verify · API DOCS
06PUBLIC ANCHOR

Verification state, written to Solana every day

Once a day the state of this page (pass/fail, vector counts, the hashes of the vector set and of the results) is signed and its hash is written to the Solana blockchain. A past day cannot be edited afterwards, by us or anyone else.

LATEST DAY (UTC)2026-10-06
DAYS IN A ROW7
RECORDS ANCHORED7
HASH OF THE LATEST RECORD8cd6b67b577a0fef0083e36f8ca4d5f25b2fa59fff3bd767f14cdf9dc0c4a702WALLET8Hi6TUCbcp7UShRcDD5FGP6K6y5DzhrCEa8YH7NWXmHL