[{"data":1,"prerenderedAt":1267},["ShallowReactive",2],{"indicators:strategies/reading-the-tester":3},{"slug":4,"filePath":5,"frontmatter":6,"rawMarkdown":11,"tree":12},"strategies/reading-the-tester","strategies/reading-the-tester.md",{"title":7,"description":8,"order":9,"section":10},"Reading the Strategy Tester","A strategy package produces the same result on every host that runs it: the Strategy Tester panel under a chart, the backtest card in the terminal, and the…",79,"strategies","---\ntitle: \"Reading the Strategy Tester\"\ndescription: \"A strategy package produces the same result on every host that runs it: the Strategy Tester panel under a chart, the backtest card in the terminal, and the…\"\norder: 79\nsection: \"strategies\"\n---\n\n\u003C!-- source: docs/indicators/strategies/reading-the-tester.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->\n\n# Reading the Strategy Tester\n\nA strategy package produces the same result on every host that runs it: the Strategy Tester panel under a chart, the backtest card in the terminal, and the JSON report on disk. This page is the map of the three, and where the honesty disclosures live. The panel is the kScript (legacy) one, unchanged: an Indicator strategy enters it through the same run-result key a kScript strategy does.\n\n## On a chart\n\nAdd the package to a chart and the Strategy Tester panel opens under it, with the strategy's own tab, its net PnL as a chip, and the eye toggle for its plots and markers.\n\n- **Overview**: an equity curve with a drawdown lane under it, and the headline tiles: net profit, win rate, profit factor, max drawdown, Sharpe, total trades. A buy-and-hold benchmark can be overlaid.\n- **Performance**: the full stat table, grouped into returns, risk and trade quality. Every number has an exact formula in the [stats reference](stats-reference.md).\n- **Trades**: the numbered list of closed trades with side, quantity, entry and exit bars, PnL in cash and percent, cumulative PnL and the exit reason (`signal`, `stop`, `limit`, `trail`, `closeAll`, `liquidation`). Open positions and pending orders sit in their own sections below. A \"± fill\" badge marks a trade the fill model settled where one bar touched two levels.\n- **The chart**: entries and exits as chevrons on the bars that filled them, colored by direction with the strategy's identity color. Past 150 closed trades the markers collapse into count pills.\n- **Run details**: the info icon opens the run's own disclosure: interval, bars computed, the declared fill model, compute time, and the fill precision line, which reads `bar resolution` on every Indicator strategy in this release (no finer-interval data is attached).\n- **Compare mode**: with two or more visible strategies, a side-by-side table with a combined equal-notional column and a pairwise correlation line.\n\nLive, the panel updates on every tick: the forming bar re-evaluates on a clone of the committed state, and when the bar closes it is folded in once, so what the panel shows at any moment equals a full run from bar 0.\n\n## In the terminal\n\n```bash\nom backtest @you/rsi-reversion --asset BINANCE_FUTURES:BTCUSDT --window 90d\n```\n\n```text\nbacktest @you/rsi-reversion@0.1.0 | BINANCE_FUTURES:BTCUSDT | bar cadence\nJun 8 - Sep 6 | 90d | HOUR bars\n\n  capital        10000.00 → 10123.40 (net +123.40)\n  return         +1.23%  (buy & hold +4.10%)\n  max drawdown   3.98%\n  trades         12 (58% win)\n  time in market 22%\n  costs          fees -32.10 | slippage 0.00 | 5 bps + 2 bps declared\n\n  notes\n  - costs and fills are the package's own: commission 0.05% per fill, slippage 2 bps inside every market-crossing fill price ...\n  - warnings: wrun_strategy_rejected_orders=1\n\nestimates for a quick read, not execution-grade | om backtest @you/rsi-reversion ... (rerun; the exact spec is echoed in --format json under choices.candidate)\nfull report saved: ~/.openmarket/backtests/you-rsi-reversion-0-1-0-20260906-101533-4c1a2b.json\n```\n\nReading it top to bottom: the subject is the installed package and version the run replayed and the lane is bar cadence (the package decides every bar); the window is whole closed bars; `capital` is the declared `initialCapital` and the final equity the broker marked; `return` sits beside buy-and-hold over the same bars, the engine's own `buyHoldReturnPct`; `trades` counts closed trades plus any still open at the edge (marked, not settled, excluded from the win rate); `costs` is `stats.feesPaid`, with slippage `0` because the engine prices it into the fills and the header's declared rates saying what was applied. The notes carry the engine's own counts: rejected orders, fills settled by the fill model, unsettled funding bars, liquidations.\n\n## The report\n\n`--format json` prints the full report, and every run is saved whole under `~/.openmarket/backtests/`. It has the shape every backtest report has (`metrics`, `portfolio` with its equity curve and fills, `trades` with `exit_reason`, `benchmark`, `warnings`), mapped from the engine's records: one trade row per closed or open trade, one fill per entry and exit leg with the trade's fees split by notional, the equity curve from the engine's per-bar marks. Beside it, `strategy.output` is the engine's own result verbatim (`declared`, `trades`, `openTrades`, `pendingOrders`, `equity`, `drawdown`, `stats`, and the perps series on a perps package), the same object the panel reads on a chart, so a number on the card can always be traced to the record it came from. `choices.candidate` echoes `{\"strategy\": {\"wrun\": \"@you/rsi-reversion@0.1.0\", \"params\": {}}}`, the reproduce artifact for the exact package and params.\n\nTwo facts the report states and a person can miss: every bar of the window is confirmed, the newest included (an order placed on the last bar rests pending, the engine's full-run rule), and the window's bars are whole bars closed at the wall clock, with a `coverage_gap` note whenever the series started after the window opened or ended before it closed.\n",{"type":13,"children":14,"data":1260,"position":1262},"root",[15,25,28,29,46,47,66,67,82,83,442,443,457,458,474,475,530,531,680,681,853,854,870,871,1224,1225],{"type":16,"value":17,"position":18},"comment"," source: docs/indicators/strategies/reading-the-tester.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit ",{"start":19,"end":22},{"line":20,"column":20,"offset":21},1,0,{"line":20,"column":23,"offset":24},136,135,{"type":26,"value":27},"text","\n",{"type":26,"value":27},{"type":30,"tagName":31,"properties":32,"children":33,"position":43},"element","p",{},[34],{"type":26,"value":35,"position":36},"A strategy package produces the same result on every host that runs it: the Strategy Tester panel under a chart, the backtest card in the terminal, and the JSON report on disk. This page is the map of the three, and where the honesty disclosures live. The panel is the kScript (legacy) one, unchanged: an Indicator strategy enters it through the same run-result key a kScript strategy does.",{"start":37,"end":40},{"line":38,"column":20,"offset":39},5,168,{"line":38,"column":41,"offset":42},391,558,{"start":44,"end":45},{"line":38,"column":20,"offset":39},{"line":38,"column":41,"offset":42},{"type":26,"value":27},{"type":30,"tagName":48,"properties":49,"children":51,"position":62},"h2",{"id":50},"on-a-chart",[52],{"type":26,"value":53,"position":54},"On a chart",{"start":55,"end":59},{"line":56,"column":57,"offset":58},7,4,563,{"line":56,"column":60,"offset":61},14,573,{"start":63,"end":65},{"line":56,"column":20,"offset":64},560,{"line":56,"column":60,"offset":61},{"type":26,"value":27},{"type":30,"tagName":31,"properties":68,"children":69,"position":79},{},[70],{"type":26,"value":71,"position":72},"Add the package to a chart and the Strategy Tester panel opens under it, with the strategy's own tab, its net PnL as a chip, and the eye toggle for its plots and markers.",{"start":73,"end":76},{"line":74,"column":20,"offset":75},9,575,{"line":74,"column":77,"offset":78},171,745,{"start":80,"end":81},{"line":74,"column":20,"offset":75},{"line":74,"column":77,"offset":78},{"type":26,"value":27},{"type":30,"tagName":84,"properties":85,"children":86,"position":439},"ul",{},[87,88,123,124,182,183,328,329,358,359,406,407,438],{"type":26,"value":27},{"type":30,"tagName":89,"properties":90,"children":91,"position":119},"li",{},[92,112],{"type":30,"tagName":93,"properties":94,"children":95,"position":105},"strong",{},[96],{"type":26,"value":97,"position":98},"Overview",{"start":99,"end":102},{"line":100,"column":38,"offset":101},11,751,{"line":100,"column":103,"offset":104},13,759,{"start":106,"end":109},{"line":100,"column":107,"offset":108},3,749,{"line":100,"column":110,"offset":111},15,761,{"type":26,"value":113,"position":114},": an equity curve with a drawdown lane under it, and the headline tiles: net profit, win rate, profit factor, max drawdown, Sharpe, total trades. A buy-and-hold benchmark can be overlaid.",{"start":115,"end":116},{"line":100,"column":110,"offset":111},{"line":100,"column":117,"offset":118},202,948,{"start":120,"end":122},{"line":100,"column":20,"offset":121},747,{"line":100,"column":117,"offset":118},{"type":26,"value":27},{"type":30,"tagName":89,"properties":125,"children":126,"position":178},{},[127,145,152,171],{"type":30,"tagName":93,"properties":128,"children":129,"position":139},{},[130],{"type":26,"value":131,"position":132},"Performance",{"start":133,"end":136},{"line":134,"column":38,"offset":135},12,953,{"line":134,"column":137,"offset":138},16,964,{"start":140,"end":142},{"line":134,"column":107,"offset":141},951,{"line":134,"column":143,"offset":144},18,966,{"type":26,"value":146,"position":147},": the full stat table, grouped into returns, risk and trade quality. Every number has an exact formula in the ",{"start":148,"end":149},{"line":134,"column":143,"offset":144},{"line":134,"column":150,"offset":151},128,1076,{"type":30,"tagName":153,"properties":154,"children":156,"position":166},"a",{"href":155},"stats-reference.md",[157],{"type":26,"value":158,"position":159},"stats reference",{"start":160,"end":163},{"line":134,"column":161,"offset":162},129,1077,{"line":134,"column":164,"offset":165},144,1092,{"start":167,"end":168},{"line":134,"column":150,"offset":151},{"line":134,"column":169,"offset":170},165,1113,{"type":26,"value":172,"position":173},".",{"start":174,"end":175},{"line":134,"column":169,"offset":170},{"line":134,"column":176,"offset":177},166,1114,{"start":179,"end":181},{"line":134,"column":20,"offset":180},949,{"line":134,"column":176,"offset":177},{"type":26,"value":27},{"type":30,"tagName":89,"properties":184,"children":185,"position":324},{},[186,201,208,222,229,242,247,260,266,279,285,298,304,317],{"type":30,"tagName":93,"properties":187,"children":188,"position":196},{},[189],{"type":26,"value":190,"position":191},"Trades",{"start":192,"end":194},{"line":103,"column":38,"offset":193},1119,{"line":103,"column":100,"offset":195},1125,{"start":197,"end":199},{"line":103,"column":107,"offset":198},1117,{"line":103,"column":103,"offset":200},1127,{"type":26,"value":202,"position":203},": the numbered list of closed trades with side, quantity, entry and exit bars, PnL in cash and percent, cumulative PnL and the exit reason (",{"start":204,"end":205},{"line":103,"column":103,"offset":200},{"line":103,"column":206,"offset":207},153,1267,{"type":30,"tagName":209,"properties":210,"children":211,"position":219},"code",{},[212],{"type":26,"value":213,"position":214},"signal",{"start":215,"end":216},{"line":103,"column":206,"offset":207},{"line":103,"column":217,"offset":218},161,1275,{"start":220,"end":221},{"line":103,"column":206,"offset":207},{"line":103,"column":217,"offset":218},{"type":26,"value":223,"position":224},", ",{"start":225,"end":226},{"line":103,"column":217,"offset":218},{"line":103,"column":227,"offset":228},163,1277,{"type":30,"tagName":209,"properties":230,"children":231,"position":239},{},[232],{"type":26,"value":233,"position":234},"stop",{"start":235,"end":236},{"line":103,"column":227,"offset":228},{"line":103,"column":237,"offset":238},169,1283,{"start":240,"end":241},{"line":103,"column":227,"offset":228},{"line":103,"column":237,"offset":238},{"type":26,"value":223,"position":243},{"start":244,"end":245},{"line":103,"column":237,"offset":238},{"line":103,"column":77,"offset":246},1285,{"type":30,"tagName":209,"properties":248,"children":249,"position":257},{},[250],{"type":26,"value":251,"position":252},"limit",{"start":253,"end":254},{"line":103,"column":77,"offset":246},{"line":103,"column":255,"offset":256},178,1292,{"start":258,"end":259},{"line":103,"column":77,"offset":246},{"line":103,"column":255,"offset":256},{"type":26,"value":223,"position":261},{"start":262,"end":263},{"line":103,"column":255,"offset":256},{"line":103,"column":264,"offset":265},180,1294,{"type":30,"tagName":209,"properties":267,"children":268,"position":276},{},[269],{"type":26,"value":270,"position":271},"trail",{"start":272,"end":273},{"line":103,"column":264,"offset":265},{"line":103,"column":274,"offset":275},187,1301,{"start":277,"end":278},{"line":103,"column":264,"offset":265},{"line":103,"column":274,"offset":275},{"type":26,"value":223,"position":280},{"start":281,"end":282},{"line":103,"column":274,"offset":275},{"line":103,"column":283,"offset":284},189,1303,{"type":30,"tagName":209,"properties":286,"children":287,"position":295},{},[288],{"type":26,"value":289,"position":290},"closeAll",{"start":291,"end":292},{"line":103,"column":283,"offset":284},{"line":103,"column":293,"offset":294},199,1313,{"start":296,"end":297},{"line":103,"column":283,"offset":284},{"line":103,"column":293,"offset":294},{"type":26,"value":223,"position":299},{"start":300,"end":301},{"line":103,"column":293,"offset":294},{"line":103,"column":302,"offset":303},201,1315,{"type":30,"tagName":209,"properties":305,"children":306,"position":314},{},[307],{"type":26,"value":308,"position":309},"liquidation",{"start":310,"end":311},{"line":103,"column":302,"offset":303},{"line":103,"column":312,"offset":313},214,1328,{"start":315,"end":316},{"line":103,"column":302,"offset":303},{"line":103,"column":312,"offset":313},{"type":26,"value":318,"position":319},"). Open positions and pending orders sit in their own sections below. A \"± fill\" badge marks a trade the fill model settled where one bar touched two levels.",{"start":320,"end":321},{"line":103,"column":312,"offset":313},{"line":103,"column":322,"offset":323},371,1485,{"start":325,"end":327},{"line":103,"column":20,"offset":326},1115,{"line":103,"column":322,"offset":323},{"type":26,"value":27},{"type":30,"tagName":89,"properties":330,"children":331,"position":354},{},[332,347],{"type":30,"tagName":93,"properties":333,"children":334,"position":342},{},[335],{"type":26,"value":336,"position":337},"The chart",{"start":338,"end":340},{"line":60,"column":38,"offset":339},1490,{"line":60,"column":60,"offset":341},1499,{"start":343,"end":345},{"line":60,"column":107,"offset":344},1488,{"line":60,"column":137,"offset":346},1501,{"type":26,"value":348,"position":349},": entries and exits as chevrons on the bars that filled them, colored by direction with the strategy's identity color. Past 150 closed trades the markers collapse into count pills.",{"start":350,"end":351},{"line":60,"column":137,"offset":346},{"line":60,"column":352,"offset":353},196,1681,{"start":355,"end":357},{"line":60,"column":20,"offset":356},1486,{"line":60,"column":352,"offset":353},{"type":26,"value":27},{"type":30,"tagName":89,"properties":360,"children":361,"position":402},{},[362,377,383,395],{"type":30,"tagName":93,"properties":363,"children":364,"position":372},{},[365],{"type":26,"value":366,"position":367},"Run details",{"start":368,"end":370},{"line":110,"column":38,"offset":369},1686,{"line":110,"column":137,"offset":371},1697,{"start":373,"end":375},{"line":110,"column":107,"offset":374},1684,{"line":110,"column":143,"offset":376},1699,{"type":26,"value":378,"position":379},": the info icon opens the run's own disclosure: interval, bars computed, the declared fill model, compute time, and the fill precision line, which reads ",{"start":380,"end":381},{"line":110,"column":143,"offset":376},{"line":110,"column":77,"offset":382},1852,{"type":30,"tagName":209,"properties":384,"children":385,"position":392},{},[386],{"type":26,"value":387,"position":388},"bar resolution",{"start":389,"end":390},{"line":110,"column":77,"offset":382},{"line":110,"column":274,"offset":391},1868,{"start":393,"end":394},{"line":110,"column":77,"offset":382},{"line":110,"column":274,"offset":391},{"type":26,"value":396,"position":397}," on every Indicator strategy in this release (no finer-interval data is attached).",{"start":398,"end":399},{"line":110,"column":274,"offset":391},{"line":110,"column":400,"offset":401},269,1950,{"start":403,"end":405},{"line":110,"column":20,"offset":404},1682,{"line":110,"column":400,"offset":401},{"type":26,"value":27},{"type":30,"tagName":89,"properties":408,"children":409,"position":434},{},[410,427],{"type":30,"tagName":93,"properties":411,"children":412,"position":421},{},[413],{"type":26,"value":414,"position":415},"Compare mode",{"start":416,"end":418},{"line":137,"column":38,"offset":417},1955,{"line":137,"column":419,"offset":420},17,1967,{"start":422,"end":424},{"line":137,"column":107,"offset":423},1953,{"line":137,"column":425,"offset":426},19,1969,{"type":26,"value":428,"position":429},": with two or more visible strategies, a side-by-side table with a combined equal-notional column and a pairwise correlation line.",{"start":430,"end":431},{"line":137,"column":425,"offset":426},{"line":137,"column":432,"offset":433},149,2099,{"start":435,"end":437},{"line":137,"column":20,"offset":436},1951,{"line":137,"column":432,"offset":433},{"type":26,"value":27},{"start":440,"end":441},{"line":100,"column":20,"offset":121},{"line":137,"column":432,"offset":433},{"type":26,"value":27},{"type":30,"tagName":31,"properties":444,"children":445,"position":454},{},[446],{"type":26,"value":447,"position":448},"Live, the panel updates on every tick: the forming bar re-evaluates on a clone of the committed state, and when the bar closes it is folded in once, so what the panel shows at any moment equals a full run from bar 0.",{"start":449,"end":451},{"line":143,"column":20,"offset":450},2101,{"line":143,"column":452,"offset":453},217,2317,{"start":455,"end":456},{"line":143,"column":20,"offset":450},{"line":143,"column":452,"offset":453},{"type":26,"value":27},{"type":30,"tagName":48,"properties":459,"children":461,"position":470},{"id":460},"in-the-terminal",[462],{"type":26,"value":463,"position":464},"In the terminal",{"start":465,"end":468},{"line":466,"column":57,"offset":467},20,2322,{"line":466,"column":425,"offset":469},2337,{"start":471,"end":473},{"line":466,"column":20,"offset":472},2319,{"line":466,"column":425,"offset":469},{"type":26,"value":27},{"type":13,"children":476},[477],{"type":30,"tagName":478,"properties":479,"children":483,"data":-1},"pre",{"class":480,"style":481,"tabindex":482},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff","0",[484],{"type":30,"tagName":209,"properties":485,"children":486},{},[487],{"type":30,"tagName":488,"properties":489,"children":491},"span",{"class":490},"line",[492,498,504,509,515,520,525],{"type":30,"tagName":488,"properties":493,"children":495},{"style":494},"--shiki-dark:#B392F0;--shiki-light:#6F42C1",[496],{"type":26,"value":497},"om",{"type":30,"tagName":488,"properties":499,"children":501},{"style":500},"--shiki-dark:#9ECBFF;--shiki-light:#032F62",[502],{"type":26,"value":503}," backtest",{"type":30,"tagName":488,"properties":505,"children":506},{"style":500},[507],{"type":26,"value":508}," @you/rsi-reversion",{"type":30,"tagName":488,"properties":510,"children":512},{"style":511},"--shiki-dark:#79B8FF;--shiki-light:#005CC5",[513],{"type":26,"value":514}," --asset",{"type":30,"tagName":488,"properties":516,"children":517},{"style":500},[518],{"type":26,"value":519}," BINANCE_FUTURES:BTCUSDT",{"type":30,"tagName":488,"properties":521,"children":522},{"style":511},[523],{"type":26,"value":524}," --window",{"type":30,"tagName":488,"properties":526,"children":527},{"style":500},[528],{"type":26,"value":529}," 90d",{"type":26,"value":27},{"type":13,"children":532},[533],{"type":30,"tagName":478,"properties":534,"children":535,"data":-1},{"class":480,"style":481,"tabindex":482},[536],{"type":30,"tagName":209,"properties":537,"children":538},{},[539,547,548,556,557,565,566,574,575,583,584,592,593,601,602,610,611,619,620,627,628,636,637,645,646,654,655,662,663,671,672],{"type":30,"tagName":488,"properties":540,"children":541},{"class":490},[542],{"type":30,"tagName":488,"properties":543,"children":544},{},[545],{"type":26,"value":546},"backtest @you/rsi-reversion@0.1.0 | BINANCE_FUTURES:BTCUSDT | bar cadence",{"type":26,"value":27},{"type":30,"tagName":488,"properties":549,"children":550},{"class":490},[551],{"type":30,"tagName":488,"properties":552,"children":553},{},[554],{"type":26,"value":555},"Jun 8 - Sep 6 | 90d | HOUR bars",{"type":26,"value":27},{"type":30,"tagName":488,"properties":558,"children":559},{"class":490},[560],{"type":30,"tagName":488,"properties":561,"children":562},{},[563],{"type":26,"value":564},"",{"type":26,"value":27},{"type":30,"tagName":488,"properties":567,"children":568},{"class":490},[569],{"type":30,"tagName":488,"properties":570,"children":571},{},[572],{"type":26,"value":573},"  capital        10000.00 → 10123.40 (net +123.40)",{"type":26,"value":27},{"type":30,"tagName":488,"properties":576,"children":577},{"class":490},[578],{"type":30,"tagName":488,"properties":579,"children":580},{},[581],{"type":26,"value":582},"  return         +1.23%  (buy & hold +4.10%)",{"type":26,"value":27},{"type":30,"tagName":488,"properties":585,"children":586},{"class":490},[587],{"type":30,"tagName":488,"properties":588,"children":589},{},[590],{"type":26,"value":591},"  max drawdown   3.98%",{"type":26,"value":27},{"type":30,"tagName":488,"properties":594,"children":595},{"class":490},[596],{"type":30,"tagName":488,"properties":597,"children":598},{},[599],{"type":26,"value":600},"  trades         12 (58% win)",{"type":26,"value":27},{"type":30,"tagName":488,"properties":603,"children":604},{"class":490},[605],{"type":30,"tagName":488,"properties":606,"children":607},{},[608],{"type":26,"value":609},"  time in market 22%",{"type":26,"value":27},{"type":30,"tagName":488,"properties":612,"children":613},{"class":490},[614],{"type":30,"tagName":488,"properties":615,"children":616},{},[617],{"type":26,"value":618},"  costs          fees -32.10 | slippage 0.00 | 5 bps + 2 bps declared",{"type":26,"value":27},{"type":30,"tagName":488,"properties":621,"children":622},{"class":490},[623],{"type":30,"tagName":488,"properties":624,"children":625},{},[626],{"type":26,"value":564},{"type":26,"value":27},{"type":30,"tagName":488,"properties":629,"children":630},{"class":490},[631],{"type":30,"tagName":488,"properties":632,"children":633},{},[634],{"type":26,"value":635},"  notes",{"type":26,"value":27},{"type":30,"tagName":488,"properties":638,"children":639},{"class":490},[640],{"type":30,"tagName":488,"properties":641,"children":642},{},[643],{"type":26,"value":644},"  - costs and fills are the package's own: commission 0.05% per fill, slippage 2 bps inside every market-crossing fill price ...",{"type":26,"value":27},{"type":30,"tagName":488,"properties":647,"children":648},{"class":490},[649],{"type":30,"tagName":488,"properties":650,"children":651},{},[652],{"type":26,"value":653},"  - warnings: wrun_strategy_rejected_orders=1",{"type":26,"value":27},{"type":30,"tagName":488,"properties":656,"children":657},{"class":490},[658],{"type":30,"tagName":488,"properties":659,"children":660},{},[661],{"type":26,"value":564},{"type":26,"value":27},{"type":30,"tagName":488,"properties":664,"children":665},{"class":490},[666],{"type":30,"tagName":488,"properties":667,"children":668},{},[669],{"type":26,"value":670},"estimates for a quick read, not execution-grade | om backtest @you/rsi-reversion ... (rerun; the exact spec is echoed in --format json under choices.candidate)",{"type":26,"value":27},{"type":30,"tagName":488,"properties":673,"children":674},{"class":490},[675],{"type":30,"tagName":488,"properties":676,"children":677},{},[678],{"type":26,"value":679},"full report saved: ~/.openmarket/backtests/you-rsi-reversion-0-1-0-20260906-101533-4c1a2b.json",{"type":26,"value":27},{"type":30,"tagName":31,"properties":682,"children":683,"position":850},{},[684,692,704,711,724,731,744,751,764,771,784,791,804,811,824,831,843],{"type":26,"value":685,"position":686},"Reading it top to bottom: the subject is the installed package and version the run replayed and the lane is bar cadence (the package decides every bar); the window is whole closed bars; ",{"start":687,"end":690},{"line":688,"column":20,"offset":689},45,3228,{"line":688,"column":274,"offset":691},3414,{"type":30,"tagName":209,"properties":693,"children":694,"position":701},{},[695],{"type":26,"value":696,"position":697},"capital",{"start":698,"end":699},{"line":688,"column":274,"offset":691},{"line":688,"column":352,"offset":700},3423,{"start":702,"end":703},{"line":688,"column":274,"offset":691},{"line":688,"column":352,"offset":700},{"type":26,"value":705,"position":706}," is the declared ",{"start":707,"end":708},{"line":688,"column":352,"offset":700},{"line":688,"column":709,"offset":710},213,3440,{"type":30,"tagName":209,"properties":712,"children":713,"position":721},{},[714],{"type":26,"value":715,"position":716},"initialCapital",{"start":717,"end":718},{"line":688,"column":709,"offset":710},{"line":688,"column":719,"offset":720},229,3456,{"start":722,"end":723},{"line":688,"column":709,"offset":710},{"line":688,"column":719,"offset":720},{"type":26,"value":725,"position":726}," and the final equity the broker marked; ",{"start":727,"end":728},{"line":688,"column":719,"offset":720},{"line":688,"column":729,"offset":730},270,3497,{"type":30,"tagName":209,"properties":732,"children":733,"position":741},{},[734],{"type":26,"value":735,"position":736},"return",{"start":737,"end":738},{"line":688,"column":729,"offset":730},{"line":688,"column":739,"offset":740},278,3505,{"start":742,"end":743},{"line":688,"column":729,"offset":730},{"line":688,"column":739,"offset":740},{"type":26,"value":745,"position":746}," sits beside buy-and-hold over the same bars, the engine's own ",{"start":747,"end":748},{"line":688,"column":739,"offset":740},{"line":688,"column":749,"offset":750},341,3568,{"type":30,"tagName":209,"properties":752,"children":753,"position":761},{},[754],{"type":26,"value":755,"position":756},"buyHoldReturnPct",{"start":757,"end":758},{"line":688,"column":749,"offset":750},{"line":688,"column":759,"offset":760},359,3586,{"start":762,"end":763},{"line":688,"column":749,"offset":750},{"line":688,"column":759,"offset":760},{"type":26,"value":765,"position":766},"; ",{"start":767,"end":768},{"line":688,"column":759,"offset":760},{"line":688,"column":769,"offset":770},361,3588,{"type":30,"tagName":209,"properties":772,"children":773,"position":781},{},[774],{"type":26,"value":775,"position":776},"trades",{"start":777,"end":778},{"line":688,"column":769,"offset":770},{"line":688,"column":779,"offset":780},369,3596,{"start":782,"end":783},{"line":688,"column":769,"offset":770},{"line":688,"column":779,"offset":780},{"type":26,"value":785,"position":786}," counts closed trades plus any still open at the edge (marked, not settled, excluded from the win rate); ",{"start":787,"end":788},{"line":688,"column":779,"offset":780},{"line":688,"column":789,"offset":790},474,3701,{"type":30,"tagName":209,"properties":792,"children":793,"position":801},{},[794],{"type":26,"value":795,"position":796},"costs",{"start":797,"end":798},{"line":688,"column":789,"offset":790},{"line":688,"column":799,"offset":800},481,3708,{"start":802,"end":803},{"line":688,"column":789,"offset":790},{"line":688,"column":799,"offset":800},{"type":26,"value":805,"position":806}," is ",{"start":807,"end":808},{"line":688,"column":799,"offset":800},{"line":688,"column":809,"offset":810},485,3712,{"type":30,"tagName":209,"properties":812,"children":813,"position":821},{},[814],{"type":26,"value":815,"position":816},"stats.feesPaid",{"start":817,"end":818},{"line":688,"column":809,"offset":810},{"line":688,"column":819,"offset":820},501,3728,{"start":822,"end":823},{"line":688,"column":809,"offset":810},{"line":688,"column":819,"offset":820},{"type":26,"value":825,"position":826},", with slippage ",{"start":827,"end":828},{"line":688,"column":819,"offset":820},{"line":688,"column":829,"offset":830},517,3744,{"type":30,"tagName":209,"properties":832,"children":833,"position":840},{},[834],{"type":26,"value":482,"position":835},{"start":836,"end":837},{"line":688,"column":829,"offset":830},{"line":688,"column":838,"offset":839},520,3747,{"start":841,"end":842},{"line":688,"column":829,"offset":830},{"line":688,"column":838,"offset":839},{"type":26,"value":844,"position":845}," because the engine prices it into the fills and the header's declared rates saying what was applied. The notes carry the engine's own counts: rejected orders, fills settled by the fill model, unsettled funding bars, liquidations.",{"start":846,"end":847},{"line":688,"column":838,"offset":839},{"line":688,"column":848,"offset":849},750,3977,{"start":851,"end":852},{"line":688,"column":20,"offset":689},{"line":688,"column":848,"offset":849},{"type":26,"value":27},{"type":30,"tagName":48,"properties":855,"children":857,"position":866},{"id":856},"the-report",[858],{"type":26,"value":859,"position":860},"The report",{"start":861,"end":864},{"line":862,"column":57,"offset":863},47,3982,{"line":862,"column":60,"offset":865},3992,{"start":867,"end":869},{"line":862,"column":20,"offset":868},3979,{"line":862,"column":60,"offset":865},{"type":26,"value":27},{"type":30,"tagName":31,"properties":872,"children":873,"position":1221},{},[874,888,895,908,915,928,934,947,954,966,973,986,992,1005,1011,1024,1031,1044,1051,1064,1070,1082,1088,1101,1106,1118,1123,1136,1142,1155,1161,1174,1181,1194,1201,1214],{"type":30,"tagName":209,"properties":875,"children":876,"position":885},{},[877],{"type":26,"value":878,"position":879},"--format json",{"start":880,"end":883},{"line":881,"column":20,"offset":882},49,3994,{"line":881,"column":137,"offset":884},4009,{"start":886,"end":887},{"line":881,"column":20,"offset":882},{"line":881,"column":137,"offset":884},{"type":26,"value":889,"position":890}," prints the full report, and every run is saved whole under ",{"start":891,"end":892},{"line":881,"column":137,"offset":884},{"line":881,"column":893,"offset":894},76,4069,{"type":30,"tagName":209,"properties":896,"children":897,"position":905},{},[898],{"type":26,"value":899,"position":900},"~/.openmarket/backtests/",{"start":901,"end":902},{"line":881,"column":893,"offset":894},{"line":881,"column":903,"offset":904},102,4095,{"start":906,"end":907},{"line":881,"column":893,"offset":894},{"line":881,"column":903,"offset":904},{"type":26,"value":909,"position":910},". It has the shape every backtest report has (",{"start":911,"end":912},{"line":881,"column":903,"offset":904},{"line":881,"column":913,"offset":914},148,4141,{"type":30,"tagName":209,"properties":916,"children":917,"position":925},{},[918],{"type":26,"value":919,"position":920},"metrics",{"start":921,"end":922},{"line":881,"column":913,"offset":914},{"line":881,"column":923,"offset":924},157,4150,{"start":926,"end":927},{"line":881,"column":913,"offset":914},{"line":881,"column":923,"offset":924},{"type":26,"value":223,"position":929},{"start":930,"end":931},{"line":881,"column":923,"offset":924},{"line":881,"column":932,"offset":933},159,4152,{"type":30,"tagName":209,"properties":935,"children":936,"position":944},{},[937],{"type":26,"value":938,"position":939},"portfolio",{"start":940,"end":941},{"line":881,"column":932,"offset":933},{"line":881,"column":942,"offset":943},170,4163,{"start":945,"end":946},{"line":881,"column":932,"offset":933},{"line":881,"column":942,"offset":943},{"type":26,"value":948,"position":949}," with its equity curve and fills, ",{"start":950,"end":951},{"line":881,"column":942,"offset":943},{"line":881,"column":952,"offset":953},204,4197,{"type":30,"tagName":209,"properties":955,"children":956,"position":963},{},[957],{"type":26,"value":775,"position":958},{"start":959,"end":960},{"line":881,"column":952,"offset":953},{"line":881,"column":961,"offset":962},212,4205,{"start":964,"end":965},{"line":881,"column":952,"offset":953},{"line":881,"column":961,"offset":962},{"type":26,"value":967,"position":968}," with ",{"start":969,"end":970},{"line":881,"column":961,"offset":962},{"line":881,"column":971,"offset":972},218,4211,{"type":30,"tagName":209,"properties":974,"children":975,"position":983},{},[976],{"type":26,"value":977,"position":978},"exit_reason",{"start":979,"end":980},{"line":881,"column":971,"offset":972},{"line":881,"column":981,"offset":982},231,4224,{"start":984,"end":985},{"line":881,"column":971,"offset":972},{"line":881,"column":981,"offset":982},{"type":26,"value":223,"position":987},{"start":988,"end":989},{"line":881,"column":981,"offset":982},{"line":881,"column":990,"offset":991},233,4226,{"type":30,"tagName":209,"properties":993,"children":994,"position":1002},{},[995],{"type":26,"value":996,"position":997},"benchmark",{"start":998,"end":999},{"line":881,"column":990,"offset":991},{"line":881,"column":1000,"offset":1001},244,4237,{"start":1003,"end":1004},{"line":881,"column":990,"offset":991},{"line":881,"column":1000,"offset":1001},{"type":26,"value":223,"position":1006},{"start":1007,"end":1008},{"line":881,"column":1000,"offset":1001},{"line":881,"column":1009,"offset":1010},246,4239,{"type":30,"tagName":209,"properties":1012,"children":1013,"position":1021},{},[1014],{"type":26,"value":1015,"position":1016},"warnings",{"start":1017,"end":1018},{"line":881,"column":1009,"offset":1010},{"line":881,"column":1019,"offset":1020},256,4249,{"start":1022,"end":1023},{"line":881,"column":1009,"offset":1010},{"line":881,"column":1019,"offset":1020},{"type":26,"value":1025,"position":1026},"), mapped from the engine's records: one trade row per closed or open trade, one fill per entry and exit leg with the trade's fees split by notional, the equity curve from the engine's per-bar marks. Beside it, ",{"start":1027,"end":1028},{"line":881,"column":1019,"offset":1020},{"line":881,"column":1029,"offset":1030},467,4460,{"type":30,"tagName":209,"properties":1032,"children":1033,"position":1041},{},[1034],{"type":26,"value":1035,"position":1036},"strategy.output",{"start":1037,"end":1038},{"line":881,"column":1029,"offset":1030},{"line":881,"column":1039,"offset":1040},484,4477,{"start":1042,"end":1043},{"line":881,"column":1029,"offset":1030},{"line":881,"column":1039,"offset":1040},{"type":26,"value":1045,"position":1046}," is the engine's own result verbatim (",{"start":1047,"end":1048},{"line":881,"column":1039,"offset":1040},{"line":881,"column":1049,"offset":1050},522,4515,{"type":30,"tagName":209,"properties":1052,"children":1053,"position":1061},{},[1054],{"type":26,"value":1055,"position":1056},"declared",{"start":1057,"end":1058},{"line":881,"column":1049,"offset":1050},{"line":881,"column":1059,"offset":1060},532,4525,{"start":1062,"end":1063},{"line":881,"column":1049,"offset":1050},{"line":881,"column":1059,"offset":1060},{"type":26,"value":223,"position":1065},{"start":1066,"end":1067},{"line":881,"column":1059,"offset":1060},{"line":881,"column":1068,"offset":1069},534,4527,{"type":30,"tagName":209,"properties":1071,"children":1072,"position":1079},{},[1073],{"type":26,"value":775,"position":1074},{"start":1075,"end":1076},{"line":881,"column":1068,"offset":1069},{"line":881,"column":1077,"offset":1078},542,4535,{"start":1080,"end":1081},{"line":881,"column":1068,"offset":1069},{"line":881,"column":1077,"offset":1078},{"type":26,"value":223,"position":1083},{"start":1084,"end":1085},{"line":881,"column":1077,"offset":1078},{"line":881,"column":1086,"offset":1087},544,4537,{"type":30,"tagName":209,"properties":1089,"children":1090,"position":1098},{},[1091],{"type":26,"value":1092,"position":1093},"openTrades",{"start":1094,"end":1095},{"line":881,"column":1086,"offset":1087},{"line":881,"column":1096,"offset":1097},556,4549,{"start":1099,"end":1100},{"line":881,"column":1086,"offset":1087},{"line":881,"column":1096,"offset":1097},{"type":26,"value":223,"position":1102},{"start":1103,"end":1104},{"line":881,"column":1096,"offset":1097},{"line":881,"column":42,"offset":1105},4551,{"type":30,"tagName":209,"properties":1107,"children":1108,"position":1115},{},[1109],{"type":26,"value":1110,"position":1111},"pendingOrders",{"start":1112,"end":1113},{"line":881,"column":42,"offset":1105},{"line":881,"column":61,"offset":1114},4566,{"start":1116,"end":1117},{"line":881,"column":42,"offset":1105},{"line":881,"column":61,"offset":1114},{"type":26,"value":223,"position":1119},{"start":1120,"end":1121},{"line":881,"column":61,"offset":1114},{"line":881,"column":75,"offset":1122},4568,{"type":30,"tagName":209,"properties":1124,"children":1125,"position":1133},{},[1126],{"type":26,"value":1127,"position":1128},"equity",{"start":1129,"end":1130},{"line":881,"column":75,"offset":1122},{"line":881,"column":1131,"offset":1132},583,4576,{"start":1134,"end":1135},{"line":881,"column":75,"offset":1122},{"line":881,"column":1131,"offset":1132},{"type":26,"value":223,"position":1137},{"start":1138,"end":1139},{"line":881,"column":1131,"offset":1132},{"line":881,"column":1140,"offset":1141},585,4578,{"type":30,"tagName":209,"properties":1143,"children":1144,"position":1152},{},[1145],{"type":26,"value":1146,"position":1147},"drawdown",{"start":1148,"end":1149},{"line":881,"column":1140,"offset":1141},{"line":881,"column":1150,"offset":1151},595,4588,{"start":1153,"end":1154},{"line":881,"column":1140,"offset":1141},{"line":881,"column":1150,"offset":1151},{"type":26,"value":223,"position":1156},{"start":1157,"end":1158},{"line":881,"column":1150,"offset":1151},{"line":881,"column":1159,"offset":1160},597,4590,{"type":30,"tagName":209,"properties":1162,"children":1163,"position":1171},{},[1164],{"type":26,"value":1165,"position":1166},"stats",{"start":1167,"end":1168},{"line":881,"column":1159,"offset":1160},{"line":881,"column":1169,"offset":1170},604,4597,{"start":1172,"end":1173},{"line":881,"column":1159,"offset":1160},{"line":881,"column":1169,"offset":1170},{"type":26,"value":1175,"position":1176},", and the perps series on a perps package), the same object the panel reads on a chart, so a number on the card can always be traced to the record it came from. ",{"start":1177,"end":1178},{"line":881,"column":1169,"offset":1170},{"line":881,"column":1179,"offset":1180},765,4758,{"type":30,"tagName":209,"properties":1182,"children":1183,"position":1191},{},[1184],{"type":26,"value":1185,"position":1186},"choices.candidate",{"start":1187,"end":1188},{"line":881,"column":1179,"offset":1180},{"line":881,"column":1189,"offset":1190},784,4777,{"start":1192,"end":1193},{"line":881,"column":1179,"offset":1180},{"line":881,"column":1189,"offset":1190},{"type":26,"value":1195,"position":1196}," echoes ",{"start":1197,"end":1198},{"line":881,"column":1189,"offset":1190},{"line":881,"column":1199,"offset":1200},792,4785,{"type":30,"tagName":209,"properties":1202,"children":1203,"position":1211},{},[1204],{"type":26,"value":1205,"position":1206},"{\"strategy\": {\"wrun\": \"@you/rsi-reversion@0.1.0\", \"params\": {}}}",{"start":1207,"end":1208},{"line":881,"column":1199,"offset":1200},{"line":881,"column":1209,"offset":1210},858,4851,{"start":1212,"end":1213},{"line":881,"column":1199,"offset":1200},{"line":881,"column":1209,"offset":1210},{"type":26,"value":1215,"position":1216},", the reproduce artifact for the exact package and params.",{"start":1217,"end":1218},{"line":881,"column":1209,"offset":1210},{"line":881,"column":1219,"offset":1220},916,4909,{"start":1222,"end":1223},{"line":881,"column":20,"offset":882},{"line":881,"column":1219,"offset":1220},{"type":26,"value":27},{"type":30,"tagName":31,"properties":1226,"children":1227,"position":1257},{},[1228,1237,1250],{"type":26,"value":1229,"position":1230},"Two facts the report states and a person can miss: every bar of the window is confirmed, the newest included (an order placed on the last bar rests pending, the engine's full-run rule), and the window's bars are whole bars closed at the wall clock, with a ",{"start":1231,"end":1234},{"line":1232,"column":20,"offset":1233},51,4911,{"line":1232,"column":1235,"offset":1236},257,5167,{"type":30,"tagName":209,"properties":1238,"children":1239,"position":1247},{},[1240],{"type":26,"value":1241,"position":1242},"coverage_gap",{"start":1243,"end":1244},{"line":1232,"column":1235,"offset":1236},{"line":1232,"column":1245,"offset":1246},271,5181,{"start":1248,"end":1249},{"line":1232,"column":1235,"offset":1236},{"line":1232,"column":1245,"offset":1246},{"type":26,"value":1251,"position":1252}," note whenever the series started after the window opened or ended before it closed.",{"start":1253,"end":1254},{"line":1232,"column":1245,"offset":1246},{"line":1232,"column":1255,"offset":1256},355,5265,{"start":1258,"end":1259},{"line":1232,"column":20,"offset":1233},{"line":1232,"column":1255,"offset":1256},{"quirksMode":1261},false,{"start":1263,"end":1264},{"line":20,"column":20,"offset":21},{"line":1265,"column":20,"offset":1266},52,5266,1790157174289]