Documentation Index
Fetch the complete documentation index at: https://uncoded.ch/docs/llms.txt
Use this file to discover all available pages before exploring further.
SAHARAUSDT * LowMoney
SAHARAUSDT | 5LowMoney.json | 2025-01-01 - 2025-12-31 | 0.00% | 0 closed trades
Headline Performance
GET /backtests/{id} + /equity + /trades * Fields used: return_pct, final_value, total_profit, win_rate, fulfilled_trades, active_orders, unrealized_pnl_exit_net, max_profit, min_profitReturn
Final Value
Portfolio PnL
Realized Profit
Unrealized PnL
Win Rate (closed)
- (excludes 0 open orders)
Closed Trades
Open Orders
Best Closed Trade
- USDT
Worst Closed Trade
- USDT
TL;DR
Performance KPI Metrics
GET /backtests/{id} + /equity + /trades * Fields used: server aggregates from /daily-stats and /extras (Total Fees, Gross Profit/Loss, fill-type counts) plus <AnalyticsCharts> KPI strip * Transform: bt.* + dailyStats.totals + extras.deep_dive.fill_type_breakdownMax Drawdown
Profit Factor
Sharpe Ratio
Total Fees
Avg Hold Time
TP / SL / TSL
Trade Economics
| Metric | Value | Interpretation |
|---|---|---|
| Profit Factor | 0.00 | Sum of winning trades / sum of losing trades. >1 = profitable edge, >2 = strong, inf = no losses. |
| Gross Profit | 0.00 USDT | Sum of all winning trades before fees. |
| Gross Loss | 0.00 USDT | Absolute sum of all losing trades. |
| Total Fees | 0.00 USDT | Buy + sell fees across all trades. |
| Fee Drag | - | What share of edge the exchange consumed. |
| Avg Hold Time | 0 min | Mean duration a position is open. |
Exit Mix (Fill Types)
| Exit Type | Count | Share | What It Means |
|---|---|---|---|
| TP (Take Profit) | 0 | - | Position closed by hitting the profit target - the desired outcome. |
| SL (Stop Loss) | 0 | - | Position closed by hitting the stop - capital preservation in action. |
| TSL (Trailing Stop) | 0 | - | Trailing stop locked in profit during a trend. |
Verdict
For SAHARAUSDT, the strategy’s profit factor of 0.00 means the strategy lost more than it won on a per-trade basis.Chunking & Headings Guide
Chunk markers
Every section is delimited by paired JSX comments - invisible to readers, trivial for splitters. (Earlier versions of this exporter used HTML comments; we switched to JSX comments in v2.4.0 because MDX 3 - the parser Mintlify uses - forbids HTML comments at the document level.) The example below uses uppercaseRAG-CHUNK so it doesn’t accidentally match a splitter that scans this very page; real markers use lowercase rag-chunk:
\{/\*\s*rag-chunk:(start|end)\b[^*]*\*/\} and treat everything between a matching start/end pair (same id) as one indivisible chunk. Never split inside a chunk. (For backwards compatibility with v2.3.x exports, splitters can OR-match the legacy regex <!--rag-chunk:(start|end)\b[^>]*-->.)
Heading convention
# Title- appears exactly once (the document title in the intro chunk).## Section- opens every top-level chunk. Heading text matches the chunk’stitleattribute.### Sub-section- purely visual; never introduces a new chunk.####and deeper - reserved for inline detail (e.g. per-chart sub-blocks inside the catalogue).
Chunk type taxonomy
| Type | Purpose | Best for retrieval of… |
|---|---|---|
meta | Frontmatter & document intro | document-identity questions |
summary | TL;DR-style condensed prose | ”give me the headline” |
kpis | Headline numbers, card grids | numeric lookups |
overview | Tabular meta (period, balance, …) | “what was tested” |
comparison | Strategy vs benchmark | ”did it beat buy & hold” |
claims | Assertion -> evidence -> source | citation-grade answers |
config | Reproduction parameters | ”how do I rerun this” |
chart | Single visualization w/ embedded data | chart-specific questions |
catalogue | Multi-chart bundle | exploratory chart questions |
risk / allocation / trade-stats / monthly / top-trades | Domain-specific analytics | targeted KPI questions |
validation | Data-quality report | trust / sanity questions |
facts | Machine-readable JSON + key-value | deterministic lookups |
qa | Pre-answered FAQ | direct Q&A retrieval |
glossary | Term definitions | disambiguation |
narrative | Human-oriented prose | ”explain like I’m…” |
structured | JSON-LD / schema.org | search-engine indexing |
provenance | Metric -> API field -> formula lookup | ”where does this number come from” |
integrity | SHA-256 fingerprints of raw API payloads | tamper-evidence checks |
attachments | Verbatim API responses + trade-sample CSV (full ledger via /trades pagination) | byte-level reproduction |
footer | Disclaimers, links | compliance lookups |
Recommended ingestion pipeline
- Split on
{/* rag-chunk:start ... */}/{/* rag-chunk:end ... */}boundaries. - Use the
idattribute as the vector-store primary key - stable across re-exports. - Store
type,title,tokens~, andbacktest_idas filterable metadata. - Do not further chunk the
facts,claims,qa, orstructuredsections - they’re designed to be retrieved whole. - The
cataloguechunk is large; if your context budget is tight, split it on its###sub-headings instead of dropping it.
Performance Analysis
GET /backtests/{id} + /equity + /trades * Fields used: same prose rendered on the live page by <BacktestInterpretation> - pure, deterministic, no LLM * Transform: buildBacktestInterpretation(bt)Methodology & data
This backtest was executed on historical Binance Spot 1-minute candles for SAHARAUSDT, with intrabar fill simulation in “OLHC” mode and a synthetic order latency of 2s applied to each fill to approximate real-world routing delay. The simulator processes every minute sequentially, evaluates the LowMoney rule set, and books fills against the next available bar - a standard event-driven backtesting approach that avoids look-ahead bias. Equity is marked-to-market on every closed trade and aggregated into the equity curve shown above. Configured backtest window: approximately 12.0 months (365 days fromconfig.from to config.to) of SAHARAUSDT 1-minute price action - a sample size that is large enough to span multiple short-term regimes. Note: the equity series may cover fewer days if the engine omits leading or trailing flat periods (e.g. dates before the asset began trading); see the Overview section for the exact equity-coverage span.
Live trading considerations
Translating this result to live trading: SAHARAUSDT is a deeply-liquid USDT-quoted pair on Binance, so the simulated fills here translate well to live execution at retail size. Lower trade frequency keeps slippage drag minimal, so live results should track the backtest more closely than a high-frequency configuration would. Without a hard stop-loss, the live system depends on the take-profit ladder firing during recovery legs; a prolonged downtrend without recovery will hold positions open longer than backtest aggregates suggest. Additionally, exchange downtime, API rate limits, and funding-rate changes (on perp variants) are not modelled here and should be accounted for in production deployment.Frequently asked questions
Is a 0.00% return on SAHARAUSDT a good backtest result?
Is a 0.00% return on SAHARAUSDT a good backtest result?
What is the annualised return for this SAHARAUSDT backtest?
What is the annualised return for this SAHARAUSDT backtest?
Can I run this exact LowMoney configuration live?
Can I run this exact LowMoney configuration live?
How is this backtest different from others on SAHARAUSDT?
How is this backtest different from others on SAHARAUSDT?
Overview
GET /backtests/{id} * Fields used: symbol, mode_name, config.from, config.to, start_balance, final_value, avg_profit, status, created_at, started_at, completed_at, elapsed_sec, is_duplicate, data_file, id, summary_text| Field | Value |
|---|---|
| Trading Pair | SAHARAUSDT |
| Strategy | LowMoney |
| Period | 2025-01-01 -> 2025-12-31 |
| Configured window (inclusive elapsed) | 365.0 days (1.00 years) - (config.to - config.from) / 86 400 000 ms |
| Configured window (calendar days) | 365 days - Math.round of the elapsed value above; this is what the narrative paragraph quotes |
| Equity-stat duration | 188.0 days (0.51 years) - first -> last equity sample timestamp; used for CAGR / Sharpe / Sortino |
| Coverage gap | configured window is 365.0 days but equity samples span only 188.0 days - the engine omitted leading/trailing flat periods (e.g. dates before the asset began trading on the venue) |
| Start Balance | 10,000.00 USDT |
| Final Value | 10,000.00 USDT |
| Avg Profit / Trade | - USDT |
| Status | completed |
| Created | 2026-04-19 12:41:46 UTC |
| Started | 2026-04-19 17:12:37 UTC |
| Completed | 2026-04-19 17:13:14 UTC |
| Compute Time | 5.6s |
| Backtest ID | 26c0d420-7adf-46ed-a26b-440353e9b42e |
| Engine summary: |
Verifiable Claims
| Claim | Evidence | Source |
|---|---|---|
| Strategy returned 0.00% over the tested window | return_pct = 0 | GET /backtests/{id} -> return_pct |
| Capital grew from 10,000.00 to 10,000.00 USDT | final_value - start_balance = 0.00 USDT | GET /backtests/{id} -> start_balance, final_value |
| Worst peak-to-trough loss was 0.00% | max_drawdown_pct = 0.0000 | derived client-side from /equity series |
Strategy Configuration
GET /backtests/{id} * Fields used: mode_name, config (full JSON payload)- Highlights
- Full JSON
| Parameter | Value |
|---|---|
canBuy | true |
canSell | true |
canBuyUp | true |
startBal | 10000 |
stepSize | 1 |
stopLoss | false |
tickSize | 0.00001 |
buySplits | 2 |
Full Mode Configuration
POST /backtests to reproduce the run.- Engine Parameters
- YAML
| Parameter | Value | Meaning |
|---|---|---|
assumed_spread_bps | 0 | Spread (basis points) added to taker fills on top of the candle price. |
buyPercentage | 0.1 | Buy-trigger threshold as a fraction (e.g. 0.1 = -0.1% from last reference price). |
buySplits | 2 | Number of price levels in the buy-ladder (DCA depth). |
buyVolumes | [50,50] | Per-split sizing weights (sum ~ 100). Distributes investmentPerBuy x buySplits across the ladder. |
canBuy | true | Master switch - disables all buy-side logic when false. |
canBuyDown | false | Allow re-entries below the last buy price. |
canBuyUp | true | Allow re-entries above the last buy price (true) or only below (false). |
canSell | true | Master switch - disables all sell-side logic when false. |
dontBuyBelowQuoteAssetBalance | 1 | Refuse to open new buys if free quote drops below this absolute USDT amount. |
fees_in_quote | true | If true, fees are deducted from the quote (USDT) leg of every fill. |
intrabar_mode | OLHC | Intra-bar fill model (OLHC, OHLC, …) - see ENGINE.md Section 4. |
investmentPerBuy | 3 | Notional invested per buy event, in quote (USDT). |
investmentPerFreeQuotePercent | 0.01 | When investmentPercentMode = true: fraction of free quote balance to commit per buy. |
investmentPercentMode | false | If true, sizing is taken as a fraction of free quote balance instead of fixed USDT. |
maker_fee_bps | 7.5 | Maker fee in basis points (e.g. 7.5 = 0.075%). |
minInvestmentPerQuote | 3 | Hard floor on per-buy notional, regardless of percent-mode math. |
minNotional | 5 | Exchange minimum notional per order (USDT). |
order_latency_seconds | 2 | Latency injected between signal time and order placement. |
sellActivateDistancePercentage | 0.1 | Distance from buy price (%) at which a TSL becomes armed. |
sellCancelDistancePercentage | 1 | Distance (%) at which an unfilled sell order is cancelled and re-priced. |
sellPercentages | [0.25,0.3] | Take-profit ladder, each value is the per-tier profit target as a fraction. |
startBal | 10000 | Initial portfolio value in the quote currency (USDT). |
stepSize | 1 | Exchange size step (base asset). |
stopLoss | false | Hard stop-loss enabled flag. |
stopLossPercentage | 5 | Hard stop-loss distance from entry as a percent (5.0 = -5%). |
taker_fee_bps | 7.5 | Taker fee in basis points. |
tickSize | 0.00001 | Exchange price tick (quote currency). |
trailingStopLossPercentages | [0,0] | Per-tier trailing-SL distances. Zero entries disable TSL on that tier. |
triggerCoolDown | 1 | Minimum bars/ticks between two consecutive buys on the same level. |
Strategy Logic
GET /modes and select the entry whose filename == "5LowMoney.json" to inspect the public rule fields, or consult the engine source for the executable logic.
Engine Specification
engine_version field in this document’s frontmatter (see also the Data Source Metadata section).Engine Specification
uncoded.ch/docs/engine; this report only pins which revision applied (engine_version in the frontmatter).
Data Source Metadata
buildVerifiableMdx({ dataSource: ... }) to fill it in. The engine spec describes deterministic execution semantics (segment order, fill rules, fee classification) that cannot be reverse-engineered from trades alone.| Field | Value | Source |
|---|---|---|
| Market-data provider | Binance Spot | caller DataSourceInput.provider |
| Exchange / venue | binance | caller DataSourceInput.exchange |
| Symbol | SAHARAUSDT | GET /backtests/{id} -> $.symbol |
| Candle interval | 1m | platform invariant - all backtests run on 1-minute OHLCV candles |
| First candle (UTC) | 2025-01-01 00:00:01 | GET /backtests/{id} -> $.config.from |
| Last candle (UTC) | 2025-12-31 23:59:59 | GET /backtests/{id} -> $.config.to |
| Timezone | UTC | default assumption (UTC) |
| Engine version | uncoded-engine (FastAPI backend) | caller DataSourceInput.engineVersion |
| Engine spec version | 1.1 | caller DataSourceInput.engineSpecVersion |
| Engine spec document | https://uncoded.ch/docs/engine | caller DataSourceInput.engineSpecPath |
Equity Curve
GET /backtests/{id}/equity * Fields used: timestamp, total_value_exit_net, total_value_mid, total_valueRisk & Quality Metrics
GET /backtests/{id}/equity * Fields used: timestamp, total_value_exit_net, total_value_mid, total_value, base_asset_bal (for time-in-market)Max Drawdown
CAGR
Volatility (ann.)
Sharpe Ratio
Sortino Ratio
Time in Market
Drawdown Detail
| Field | Value |
|---|---|
| Peak | - USDT @ - |
| Trough | - USDT @ - |
| Drawdown Duration | - |
| Recovery | not yet recovered within window |
| All-time Peak | 10,000.00 USDT |
Final Portfolio Allocation
GET /backtests/{id}/equity * Fields used: total_value_exit_net, quote_asset_bal, base_asset_bal, base_value_exit_net, base_value_mid, unrealized_pnl_exit_net| Asset | Quantity | Value (USDT) | Allocation |
|---|---|---|---|
| USDT (Cash) | 10,000.00 | 10,000.00 | 100.0% |
| SAHARA | 0.00000000 | 0.00 | 0.0% |
| Total | - | 10,000.00 | 100.0% |
Charts Catalogue
GET /backtests/{id} + /equity + /trades * Fields used: every chart from the live <AnalyticsCharts> UI, with the exact transform + API fields it consumes- Equity & Balance
- Trade Analysis
- Risk & Recovery
- Deep Dive
- Advanced
Drawdown
GET /backtests/{id}/equity * Fields used: timestamp, total_value_exit_net * Transform: computeDrawdown(equity)Unrealized PnL
GET /backtests/{id}/equity * Fields used: timestamp, unrealized_pnl_exit_net * Transform: equity.map(p => ({ pnl: p.unrealized_pnl_exit_net }))Balance Composition (Cash vs. Coin)
GET /backtests/{id}/equity * Fields used: quote_asset_bal, base_value_exit_net, total_value_exit_net * Transform: stack(quote, base, total)total).| Stat | Value |
|---|---|
| Peak Total Equity | 10,000.00 USDT @ 2025-06-26 23:59:00 UTC |
| Trough Total Equity | 10,000.00 USDT @ 2025-06-26 23:59:00 UTC |
| Mean | 10,000.00 USDT |
| Std Dev | 0.0000 USDT |
| Last | 10,000.00 USDT |
| Points | 189 |
| Sum | 1,890,000.00 USDT |
| Across 189 points the series ranged from 10,000.00 USDT (2025-06-26 23:59:00 UTC) to 10,000.00 USDT (2025-06-26 23:59:00 UTC), averaging 10,000.00 USDT. 100% of points were positive, 0% negative. The most recent value is 10,000.00 USDT. | |
| Showing 60 of 189 points (down-sampled for readability). |
Base Exposure (% of Portfolio)
GET /backtests/{id}/equity * Fields used: base_value_exit_net, quote_asset_bal, total_value_exit_net * Transform: baseExposure(equity)Daily Change
GET /backtests/{id}/equity * Fields used: timestamp, total_value_exit_net * Transform: dailyDelta(equity)total_value_exit_net between consecutive equity samples (typically daily).How to read it. Green bars are gain days, red bars are loss days. A long stretch of red bars indicates a sustained drawdown, not just a single bad day.Why it matters. Shows whether returns are consistent or driven by a few jackpot days - important for compounding and for sizing live capital.Monthly Returns
GET /backtests/{id}/equity * Fields used: timestamp, total_value_exit_net * Transform: monthlyReturns(equity)Machine-Readable Facts
facts_sha256 in the frontmatter - re-hash it to verify.- JSON
- Flat Table
Metric Provenance Index
| Metric | Source | JSON path | Transform | Value in this report |
|---|---|---|---|---|
| Symbol | GET /backtests/{id} | $.symbol | direct API value | SAHARAUSDT |
| Mode | GET /backtests/{id} | $.mode_name | direct API value | 5LowMoney.json |
| Status | GET /backtests/{id} | $.status | direct API value | completed |
| Period start | GET /backtests/{id} | $.config.from | direct API value | 2025-01-01 00:00:01 |
| Period end | GET /backtests/{id} | $.config.to | direct API value | 2025-12-31 23:59:59 |
| Start balance | GET /backtests/{id} | $.start_balance | direct API value | 10,000.00 USDT |
| Final value | GET /backtests/{id} | $.final_value | direct API value | 10,000.00 USDT |
| Return % | GET /backtests/{id} | $.return_pct | direct API value (cross-check: (final_value/start_balance - 1) * 100) | 0.00% |
| Total profit | GET /backtests/{id} | $.total_profit | direct API value (cross-check: Sum trades[].profit) | 0.00 USDT |
| Win rate % | GET /backtests/{id} | $.win_rate | direct API value (cross-check: 100 * count(trades[].profit > 0) / count(trades)) | - |
| Trades count | GET /backtests/{id} | $.fulfilled_trades | direct API value (cross-check: count(trades)) | 0 |
| Best trade | GET /backtests/{id} | $.max_profit | direct API value (cross-check: max(trades[].profit)) | - USDT |
| Worst trade | GET /backtests/{id} | $.min_profit | direct API value (cross-check: min(trades[].profit)) | - USDT |
| Avg profit / trade | GET /backtests/{id} | $.avg_profit | direct API value | - USDT |
| Trades / month | derived | n/a | fulfilled_trades / (durationDays / 30.4375) | - |
| Max drawdown % | GET /backtests/{id}/equity | $[*].total_value_* | maxDrawdown(equity) - running peak vs. trough | -0.00% |
| Max drawdown abs | GET /backtests/{id}/equity | $[*].total_value_* | maxDrawdown(equity).abs | -0.00 USDT |
| CAGR % | GET /backtests/{id}/equity | $[*].timestamp, $[*].total_value_* | (final/start)^(365.25/days) - 1 | 0.00% |
| Volatility (ann.) % | GET /backtests/{id}/equity | $[*].timestamp, $[*].total_value_* | std(daily_returns) * sqrt(365) | 0.00% |
| Sharpe ratio (ann.) | GET /backtests/{id}/equity | $[*].timestamp, $[*].total_value_* | mean(daily_returns) / std(daily_returns) * sqrt(365) (rf=0) | - |
| Sortino ratio (ann.) | GET /backtests/{id}/equity | $[*].timestamp, $[*].total_value_* | mean(daily_returns) / std(downside_returns) * sqrt(365) (rf=0) | - |
| Time in market % | GET /backtests/{id}/equity | $[*].base_asset_bal | count(samples where base_asset_bal>0) / count(samples) * 100 | 0.0% |
Raw API Attachments
GET /backtests/26c0d420-7adf-46ed-a26b-440353e9b42e - backtest summary (verbatim)
GET /backtests/26c0d420-7adf-46ed-a26b-440353e9b42e - backtest summary (verbatim)
GET /backtests/26c0d420-7adf-46ed-a26b-440353e9b42e/equity - equity series (verbatim, 189 points)
GET /backtests/26c0d420-7adf-46ed-a26b-440353e9b42e/equity - equity series (verbatim, 189 points)
trades.json payload is intentionally not embedded in this report (deprecated). The full trade ledger is attached below as RFC 4180 CSV (with a SHA-256 fingerprint) - and is also fetchable from GET /backtests/26c0d420-7adf-46ed-a26b-440353e9b42e/trades.Full trade list as RFC 4180 CSV (0 rows)
Full trade list as RFC 4180 CSV (0 rows)
Frequently Asked Questions
_null_; metrics that can’t be derived locally render as “not available”.What strategy was tested and on which trading pair?
What strategy was tested and on which trading pair?
bt.mode_name, bt.symbol, bt.config.from, bt.config.toWhat is the current status of this backtest?
What is the current status of this backtest?
bt.status, bt.error_messageWhat was the total return?
What was the total return?
bt.return_pct, bt.start_balance, bt.final_value, bt.total_profitWhat was the annualized growth rate (CAGR)?
What was the annualized growth rate (CAGR)?
derived from equity series (eqStats.cagrPct, eqStats.durationDays)Did it beat Buy & Hold of SAHARAUSDT?
Did it beat Buy & Hold of SAHARAUSDT?
bt.return_pct, opts.tokenReturnPct, outperformDeltaWhat was the worst drawdown?
What was the worst drawdown?
derived from equity series (eqStats.maxDrawdownPct, .maxDrawdownAbs, .underwaterDays, .recoveryDays)How many trades did it take and what was the win rate?
How many trades did it take and what was the win rate?
bt.fulfilled_trades, bt.win_rate, bt.active_orders, derived tradesPerMonthWhat was the average, best, and worst trade?
What was the average, best, and worst trade?
bt.avg_profit, bt.max_profit, bt.min_profitWhat was the profit factor and expectancy?
What was the profit factor and expectancy?
derived from trades (stats.profitFactor, .expectancy, .payoffRatio)What were the longest winning and losing streaks?
What were the longest winning and losing streaks?
derived from trades (stats.consecWinsMax, .consecLossesMax)How much was paid in fees?
How much was paid in fees?
derived from trades[].buy_fee_in_quote + trades[].sell_fee_in_quote (analyzeTrades -> stats.totalFees / .buyFees / .sellFees)Is the risk-adjusted return any good?
Is the risk-adjusted return any good?
derived from equity series (eqStats.sharpeAnnualized, .sortinoAnnualized)How volatile was the equity curve?
How volatile was the equity curve?
derived from equity series (eqStats.volatilityAnnualizedPct)How long does the strategy hold positions?
How long does the strategy hold positions?
derived from trades (stats.medianHoldingHours, .avgHoldingHours, .minHoldingHours, .maxHoldingHours)How much of the time was capital deployed?
How much of the time was capital deployed?
derived from equity series (eqStats.timeInMarketPct)What were the best and worst months?
What were the best and worst months?
derived from trades (stats.bestMonth, .worstMonth)When did the backtest run and how long did it take?
When did the backtest run and how long did it take?
bt.created_at, bt.started_at, bt.completed_at, bt.elapsed_secWhat configuration parameters were used?
What configuration parameters were used?
bt.start_balance, bt.data_file, bt.config.timeframe, bt.config.fee_pct, bt.is_duplicateWhere can I find a one-line summary written by the engine?
Where can I find a one-line summary written by the engine?
bt.summary_textAre these results guaranteed for live trading?
Are these results guaranteed for live trading?
static disclaimerGlossary
| Term | Definition |
|---|---|
| Return % | Total percentage change of portfolio value over the backtest window: (final_value - start_balance) / start_balance x 100. |
| CAGR | Compound Annual Growth Rate. Annualized return assuming compounding: (final/start)^(365.25/days) - 1. |
| Win Rate | Share of closed trades with positive net P&L (after fees): wins / (wins + losses) x 100. |
| Max Drawdown | Largest peak-to-trough decline of equity, measured in % of the previous peak. The single most important risk metric. |
| Drawdown Duration | Number of days spent below the previous equity peak before recovering (or end of window if not recovered). |
| Sharpe Ratio (annualized) | Mean daily return divided by standard deviation of daily returns, scaled by 365. Risk-adjusted return - higher is better, > 1 is decent. |
| Sortino Ratio (annualized) | Like Sharpe but only penalizes downside volatility. Often more representative for asymmetric strategies. |
| Volatility (ann.) | Standard deviation of daily returns x 365, expressed as a percentage. |
| Time in Market | Fraction of the period where the strategy held base-asset exposure (not 100% cash). |
| Buy & Hold | Reference benchmark: simply buying the underlying token at the start and holding to the end of the window. |
| Outperformance (pp) | Strategy return minus Buy & Hold return, in percentage points (not percent change). |
| Fulfilled Trades | Round-trip trades that have both an entry fill and an exit fill within the window. |
| Active Orders | Open positions still pending exit at the end of the backtest - their unrealized P&L is included in final_value. |
| Lookahead Bias | Using information that wouldn’t have been available at trade time. The validator flags trades whose buy_time precedes the configured from date. |
How to Read This Report
GET /backtests/{id} * Fields used: return_pct, fulfilled_trades, win_rateCheck the headline return
Reproduce This Run
GET /backtests/{id} * Fields used: symbol, mode_name, config (replayed verbatim)X-API-Key. Payload fields are validated against ENGINE.md Section 20; non-engine keys are stripped so the replay produces the exact same run.Structured Data (JSON-LD)
Dataset markup with 13 PropertyValue KPIs. Every numeric value is finite + range-validated; invalid / null fields are omitted so the JSON stays schema.org-compliant.[!] Disclaimer
Backtester: uncoded.ch/backtesting * Generated 2026-05-15 12:08:46 UTC