[{"data":1,"prerenderedAt":2286},["ShallowReactive",2],{"wrun-open-editor-url":3,"indicators:strategies/overview":4},"https://openmarket.xyz/chart/#wrun-open=v1",{"slug":5,"filePath":6,"frontmatter":7,"rawMarkdown":12,"tree":13},"strategies/overview","strategies/overview.md",{"title":8,"description":9,"order":10,"section":11},"Strategies overview","A strategy is a wrun indicator that places orders. The file declares strategy({ ... }) beside its outputs and calls strategy.long, strategy.exit…",120,"strategies","---\ntitle: \"Strategies overview\"\ndescription: \"A strategy is a wrun indicator that places orders. The file declares strategy({ ... }) beside its outputs and calls strategy.long, strategy.exit…\"\norder: 120\nsection: \"strategies\"\n---\n\n\u003C!-- source: docs/indicators/strategies/overview.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit -->\n\n# Strategies overview\n\nA strategy is a wrun indicator that places orders. The file declares `strategy({ ... })` beside its outputs and calls `strategy.long`, `strategy.exit`, `strategy.closeAll` and the position getters inside `onBar()`; the chart's Strategy Tester runs it with the engine's own broker, and its trade list, equity curve and stats come out the same wherever it runs. This page is the map: what a strategy file is, what the Strategy Tester shows, the guarantees, and what each page in this section covers.\n\n## What a strategy file is\n\nThe smallest useful one: long when the fast EMA crosses above the slow one, flat when it crosses back under.\n\n```typescript sample=strat-ma-cross\n// Moving average cross as a strategy: long when the fast EMA crosses above the slow one, flat when it crosses back under.\nstrategy({ initialCapital: 10000, qtyType: \"percentOfEquity\", qtyValue: 50, commissionPercent: 0.05, slippageBps: 2 });\noutput(\"fast\", line, overlay, { description: \"9-period EMA of close\" });\noutput(\"slow\", line, overlay, { description: \"21-period EMA of close\" });\n\nconst fastEma = new Ema(9);\nconst slowEma = new Ema(21);\nconst cross = new Cross();\n\nfunction onBar(): void {\n  const fast = fastEma.update(bar.close());\n  const slow = slowEma.update(bar.close());\n  if (isNaN(fast) || isNaN(slow)) return;\n  const crossed = cross.update(fast, slow);\n  if (crossed == 1) strategy.long(\"L\").send();\n  if (crossed == -1) strategy.closeAll();\n  out_fast(fast);\n  out_slow(slow);\n}\n```\n\nTo try it, open the editor from the chart toolbar's **Editor** button, press **New indicator** in the Explorer, keep the `//@lang=wrun-ts` line at the top of the draft and replace the starter under it with this file, then press **Backtest**. A fuller version of this file is a starter in the editor's template picker: the Explorer's **Templates** icon (\"Browse starter templates\") lists it as **Moving-Average Cross** under **Strategies** (`strategy-ma-cross`), with `Sma` in place of `Ema`, a ribbon between the averages and a mark on each cross ([Moving-average cross](../cookbook/strategy-ma-cross.md)), commented throughout.\n\nThree things make it a strategy rather than an indicator:\n\n- `strategy({ ... })` at the top level is the broker: starting equity, sizing (`50%` of equity per entry), commission and slippage live in the file, so a published strategy carries its own assumptions. Every field is optional; a bare `strategy()` takes every default. Run derives a `strategy` section into the sheet, and that section is what makes the file a strategy: once it builds, the editor's toolbar shows a **Strategy** badge and the **Run** button reads **Backtest**.\n- `strategy.long(\"L\").send()` in `onBar()` queues a market order under the id `L`. An order placed on a bar fills no earlier than the next bar's open; nothing in a run can act on information it did not have.\n- `strategy.closeAll()` is the signal exit. Orders and the position getters (`strategy.positionSize()` and the rest) both go in `onBar()`; a getter reads the position after the bar's fills.\n\nThe outputs stay outputs: `fast` and `slow` draw on the chart like any indicator's, and once the strategy is published they can carry alerts. A strategy adds four alert choices of its own, \"Strategy order placed\", \"Strategy trade opened or closed\", \"Strategy position\" and \"Strategy equity\" ([Alerts](../functions/alerts.md)), which is why `strategy.position` and `strategy.equity` are reserved: an output with either name is refused by name.\n\n## What the Strategy Tester shows\n\nThe file compiles in your browser, and **Backtest** puts the draft on the chart's price pane, where its trade markers land; a drawn output on `lower` gets a pane of its own below. The Strategy Tester docks under the chart with the engine's own result: a **trades list** (entries, exits, per-trade PnL, fees, exit reason), an **equity curve** with its drawdown, **performance stats** (net profit, win rate, profit factor, Sharpe, Sortino, max drawdown, exposure and the rest), and the **open trades and pending orders** as of the last bar, with a marker on the price series for every fill. [Reading the Strategy Tester](reading-the-tester.md) walks the panel.\n\nThe broker fills every order against the chart's own candles, which is why a strategy's price input reads the chart's `ohlcv` and carries no symbol or exchange pin (any other primary input is refused by name). The run covers the candles the chart has loaded and recomputes as you pan, so panning back tests more history.\n\n## Core guarantees\n\n- **Deterministic.** The same file over the same bars produces the same trades wherever it runs: the broker is the engine's own code, pinned to one engine version, run under the engine's own phase order.\n- **Lookahead-free.** Orders placed while bar N computes fill no earlier than bar N+1's open. The position a guard reads in `onBar()` is the position after that bar's fills, so a flat guard is already flat on the bar its exit filled.\n- **Honest accounting.** A bar that could have filled two levels settles by the declared `fillModel` and counts in `ambiguousFillCount` (the Tester's **Model-settled fills**); rejected orders (the pyramiding cap, a size the equity cannot fund, an order placed on a live chart's forming bar) are counted, never dropped. The chart attaches no finer-interval data, no order book and no funding data to a strategy run, and the Tester's **Run details** say so: \"Fill precision: bar resolution\" once the fill model has settled a fill, and \"Funding data did not cover N bars\" on a perps run that held a position under `funding: \"data\"`.\n\n## What the broker is, and is not\n\nA research tool: fast iteration and honest reporting over bar closes. It settles orders at the next open, resting limits and stops when touched, protective exits under the fill model, isolated margin, liquidation and maker or taker fees on perps. It does not model queue position, partial fills at a level, replenishment, latency, or venue fees beyond the declared commission or maker and taker rates, and on the chart it does not walk finer bars, price fills off a recorded book (`slippageModel: \"bookEstimate\"` is refused by name) or settle recorded funding (`funding: \"data\"` counts the bars it could not settle). Each is disclosed by name rather than approximated.\n\n## Section contents\n\n- [Build your first strategy](first-strategy.md): an RSI reversion from a sentence to a read result, tuned honestly, then published.\n- [Writing strategies](writing-strategies.md): the declaration table, the order API, the position and sizing model.\n- [Fill simulation](fill-simulation.md), [Slippage and costs](slippage-and-costs.md): the phase order, fill prices and fill models; commission, flat slippage, maker and taker rates.\n- [Perps: margin, liquidation, funding](perps.md): the leveraged model, its formulas and its counters.\n- [Reading the Strategy Tester](reading-the-tester.md), [Stats reference](stats-reference.md): the panel and every stat.\n- [Examples](examples.md): the five perps scenarios and a Hyperliquid perp walkthrough, complete files to start from.\n",{"type":14,"children":15,"data":2279,"position":2281},"root",[16,26,29,30,147,148,166,167,182,183,788,789,1054,1055,1070,1071,1372,1373,1487,1488,1502,1503,1680,1681,1713,1714,1730,1731,1952,1953,1967,1968,2022,2023,2038,2039],{"type":17,"value":18,"position":19},"comment"," source: docs/indicators/strategies/overview.md; generated by packages/cli/scripts/gen-indicator-docs.ts, do not edit ",{"start":20,"end":23},{"line":21,"column":21,"offset":22},1,0,{"line":21,"column":24,"offset":25},126,125,{"type":27,"value":28},"text","\n",{"type":27,"value":28},{"type":31,"tagName":32,"properties":33,"children":34,"position":144},"element","p",{},[35,44,58,65,78,85,98,104,117,124,137],{"type":27,"value":36,"position":37},"A strategy is a wrun indicator that places orders. The file declares ",{"start":38,"end":41},{"line":39,"column":21,"offset":40},5,150,{"line":39,"column":42,"offset":43},70,219,{"type":31,"tagName":45,"properties":46,"children":47,"position":55},"code",{},[48],{"type":27,"value":49,"position":50},"strategy({ ... })",{"start":51,"end":52},{"line":39,"column":42,"offset":43},{"line":39,"column":53,"offset":54},89,238,{"start":56,"end":57},{"line":39,"column":42,"offset":43},{"line":39,"column":53,"offset":54},{"type":27,"value":59,"position":60}," beside its outputs and calls ",{"start":61,"end":62},{"line":39,"column":53,"offset":54},{"line":39,"column":63,"offset":64},119,268,{"type":31,"tagName":45,"properties":66,"children":67,"position":75},{},[68],{"type":27,"value":69,"position":70},"strategy.long",{"start":71,"end":72},{"line":39,"column":63,"offset":64},{"line":39,"column":73,"offset":74},134,283,{"start":76,"end":77},{"line":39,"column":63,"offset":64},{"line":39,"column":73,"offset":74},{"type":27,"value":79,"position":80},", ",{"start":81,"end":82},{"line":39,"column":73,"offset":74},{"line":39,"column":83,"offset":84},136,285,{"type":31,"tagName":45,"properties":86,"children":87,"position":95},{},[88],{"type":27,"value":89,"position":90},"strategy.exit",{"start":91,"end":92},{"line":39,"column":83,"offset":84},{"line":39,"column":93,"offset":94},151,300,{"start":96,"end":97},{"line":39,"column":83,"offset":84},{"line":39,"column":93,"offset":94},{"type":27,"value":79,"position":99},{"start":100,"end":101},{"line":39,"column":93,"offset":94},{"line":39,"column":102,"offset":103},153,302,{"type":31,"tagName":45,"properties":105,"children":106,"position":114},{},[107],{"type":27,"value":108,"position":109},"strategy.closeAll",{"start":110,"end":111},{"line":39,"column":102,"offset":103},{"line":39,"column":112,"offset":113},172,321,{"start":115,"end":116},{"line":39,"column":102,"offset":103},{"line":39,"column":112,"offset":113},{"type":27,"value":118,"position":119}," and the position getters inside ",{"start":120,"end":121},{"line":39,"column":112,"offset":113},{"line":39,"column":122,"offset":123},205,354,{"type":31,"tagName":45,"properties":125,"children":126,"position":134},{},[127],{"type":27,"value":128,"position":129},"onBar()",{"start":130,"end":131},{"line":39,"column":122,"offset":123},{"line":39,"column":132,"offset":133},214,363,{"start":135,"end":136},{"line":39,"column":122,"offset":123},{"line":39,"column":132,"offset":133},{"type":27,"value":138,"position":139},"; the chart's Strategy Tester runs it with the engine's own broker, and its trade list, equity curve and stats come out the same wherever it runs. This page is the map: what a strategy file is, what the Strategy Tester shows, the guarantees, and what each page in this section covers.",{"start":140,"end":141},{"line":39,"column":132,"offset":133},{"line":39,"column":142,"offset":143},498,647,{"start":145,"end":146},{"line":39,"column":21,"offset":40},{"line":39,"column":142,"offset":143},{"type":27,"value":28},{"type":31,"tagName":149,"properties":150,"children":151,"position":162},"h2",{},[152],{"type":27,"value":153,"position":154},"What a strategy file is",{"start":155,"end":159},{"line":156,"column":157,"offset":158},7,4,652,{"line":156,"column":160,"offset":161},27,675,{"start":163,"end":165},{"line":156,"column":21,"offset":164},649,{"line":156,"column":160,"offset":161},{"type":27,"value":28},{"type":31,"tagName":32,"properties":168,"children":169,"position":179},{},[170],{"type":27,"value":171,"position":172},"The smallest useful one: long when the fast EMA crosses above the slow one, flat when it crosses back under.",{"start":173,"end":176},{"line":174,"column":21,"offset":175},9,677,{"line":174,"column":177,"offset":178},109,785,{"start":180,"end":181},{"line":174,"column":21,"offset":175},{"line":174,"column":177,"offset":178},{"type":27,"value":28},{"type":14,"children":184},[185],{"type":31,"tagName":186,"properties":187,"children":192,"data":-1},"pre",{"class":188,"style":189,"tabindex":190,"data-sample":191},"shiki shiki-themes github-dark github-light","--shiki-dark:#e1e4e8;--shiki-light:#24292e;--shiki-dark-bg:#24292e;--shiki-light-bg:#fff","0","strat-ma-cross",[193],{"type":31,"tagName":45,"properties":194,"children":197},{"class":195},[196],"language-typescript",[198,209,210,277,278,310,311,340,341,344,345,388,389,426,427,457,458,461,462,495,496,538,539,576,577,625,626,656,657,712,713,751,752,765,766,779,780],{"type":31,"tagName":199,"properties":200,"children":202},"span",{"class":201},"line",[203],{"type":31,"tagName":199,"properties":204,"children":206},{"style":205},"--shiki-dark:#6A737D;--shiki-light:#6A737D",[207],{"type":27,"value":208},"// Moving average cross as a strategy: long when the fast EMA crosses above the slow one, flat when it crosses back under.",{"type":27,"value":28},{"type":31,"tagName":199,"properties":211,"children":212},{"class":201},[213,219,225,231,236,242,247,252,257,262,267,272],{"type":31,"tagName":199,"properties":214,"children":216},{"style":215},"--shiki-dark:#B392F0;--shiki-light:#6F42C1",[217],{"type":27,"value":218},"strategy",{"type":31,"tagName":199,"properties":220,"children":222},{"style":221},"--shiki-dark:#E1E4E8;--shiki-light:#24292E",[223],{"type":27,"value":224},"({ initialCapital: ",{"type":31,"tagName":199,"properties":226,"children":228},{"style":227},"--shiki-dark:#79B8FF;--shiki-light:#005CC5",[229],{"type":27,"value":230},"10000",{"type":31,"tagName":199,"properties":232,"children":233},{"style":221},[234],{"type":27,"value":235},", qtyType: ",{"type":31,"tagName":199,"properties":237,"children":239},{"style":238},"--shiki-dark:#9ECBFF;--shiki-light:#032F62",[240],{"type":27,"value":241},"\"percentOfEquity\"",{"type":31,"tagName":199,"properties":243,"children":244},{"style":221},[245],{"type":27,"value":246},", qtyValue: ",{"type":31,"tagName":199,"properties":248,"children":249},{"style":227},[250],{"type":27,"value":251},"50",{"type":31,"tagName":199,"properties":253,"children":254},{"style":221},[255],{"type":27,"value":256},", commissionPercent: ",{"type":31,"tagName":199,"properties":258,"children":259},{"style":227},[260],{"type":27,"value":261},"0.05",{"type":31,"tagName":199,"properties":263,"children":264},{"style":221},[265],{"type":27,"value":266},", slippageBps: ",{"type":31,"tagName":199,"properties":268,"children":269},{"style":227},[270],{"type":27,"value":271},"2",{"type":31,"tagName":199,"properties":273,"children":274},{"style":221},[275],{"type":27,"value":276}," });",{"type":27,"value":28},{"type":31,"tagName":199,"properties":279,"children":280},{"class":201},[281,286,291,296,301,306],{"type":31,"tagName":199,"properties":282,"children":283},{"style":215},[284],{"type":27,"value":285},"output",{"type":31,"tagName":199,"properties":287,"children":288},{"style":221},[289],{"type":27,"value":290},"(",{"type":31,"tagName":199,"properties":292,"children":293},{"style":238},[294],{"type":27,"value":295},"\"fast\"",{"type":31,"tagName":199,"properties":297,"children":298},{"style":221},[299],{"type":27,"value":300},", line, overlay, { description: ",{"type":31,"tagName":199,"properties":302,"children":303},{"style":238},[304],{"type":27,"value":305},"\"9-period EMA of close\"",{"type":31,"tagName":199,"properties":307,"children":308},{"style":221},[309],{"type":27,"value":276},{"type":27,"value":28},{"type":31,"tagName":199,"properties":312,"children":313},{"class":201},[314,318,322,327,331,336],{"type":31,"tagName":199,"properties":315,"children":316},{"style":215},[317],{"type":27,"value":285},{"type":31,"tagName":199,"properties":319,"children":320},{"style":221},[321],{"type":27,"value":290},{"type":31,"tagName":199,"properties":323,"children":324},{"style":238},[325],{"type":27,"value":326},"\"slow\"",{"type":31,"tagName":199,"properties":328,"children":329},{"style":221},[330],{"type":27,"value":300},{"type":31,"tagName":199,"properties":332,"children":333},{"style":238},[334],{"type":27,"value":335},"\"21-period EMA of close\"",{"type":31,"tagName":199,"properties":337,"children":338},{"style":221},[339],{"type":27,"value":276},{"type":27,"value":28},{"type":31,"tagName":199,"properties":342,"children":343},{"class":201},[],{"type":27,"value":28},{"type":31,"tagName":199,"properties":346,"children":347},{"class":201},[348,354,359,364,369,374,378,383],{"type":31,"tagName":199,"properties":349,"children":351},{"style":350},"--shiki-dark:#F97583;--shiki-light:#D73A49",[352],{"type":27,"value":353},"const",{"type":31,"tagName":199,"properties":355,"children":356},{"style":227},[357],{"type":27,"value":358}," fastEma",{"type":31,"tagName":199,"properties":360,"children":361},{"style":350},[362],{"type":27,"value":363}," =",{"type":31,"tagName":199,"properties":365,"children":366},{"style":350},[367],{"type":27,"value":368}," new",{"type":31,"tagName":199,"properties":370,"children":371},{"style":215},[372],{"type":27,"value":373}," Ema",{"type":31,"tagName":199,"properties":375,"children":376},{"style":221},[377],{"type":27,"value":290},{"type":31,"tagName":199,"properties":379,"children":380},{"style":227},[381],{"type":27,"value":382},"9",{"type":31,"tagName":199,"properties":384,"children":385},{"style":221},[386],{"type":27,"value":387},");",{"type":27,"value":28},{"type":31,"tagName":199,"properties":390,"children":391},{"class":201},[392,396,401,405,409,413,417,422],{"type":31,"tagName":199,"properties":393,"children":394},{"style":350},[395],{"type":27,"value":353},{"type":31,"tagName":199,"properties":397,"children":398},{"style":227},[399],{"type":27,"value":400}," slowEma",{"type":31,"tagName":199,"properties":402,"children":403},{"style":350},[404],{"type":27,"value":363},{"type":31,"tagName":199,"properties":406,"children":407},{"style":350},[408],{"type":27,"value":368},{"type":31,"tagName":199,"properties":410,"children":411},{"style":215},[412],{"type":27,"value":373},{"type":31,"tagName":199,"properties":414,"children":415},{"style":221},[416],{"type":27,"value":290},{"type":31,"tagName":199,"properties":418,"children":419},{"style":227},[420],{"type":27,"value":421},"21",{"type":31,"tagName":199,"properties":423,"children":424},{"style":221},[425],{"type":27,"value":387},{"type":27,"value":28},{"type":31,"tagName":199,"properties":428,"children":429},{"class":201},[430,434,439,443,447,452],{"type":31,"tagName":199,"properties":431,"children":432},{"style":350},[433],{"type":27,"value":353},{"type":31,"tagName":199,"properties":435,"children":436},{"style":227},[437],{"type":27,"value":438}," cross",{"type":31,"tagName":199,"properties":440,"children":441},{"style":350},[442],{"type":27,"value":363},{"type":31,"tagName":199,"properties":444,"children":445},{"style":350},[446],{"type":27,"value":368},{"type":31,"tagName":199,"properties":448,"children":449},{"style":215},[450],{"type":27,"value":451}," Cross",{"type":31,"tagName":199,"properties":453,"children":454},{"style":221},[455],{"type":27,"value":456},"();",{"type":27,"value":28},{"type":31,"tagName":199,"properties":459,"children":460},{"class":201},[],{"type":27,"value":28},{"type":31,"tagName":199,"properties":463,"children":464},{"class":201},[465,470,475,480,485,490],{"type":31,"tagName":199,"properties":466,"children":467},{"style":350},[468],{"type":27,"value":469},"function",{"type":31,"tagName":199,"properties":471,"children":472},{"style":215},[473],{"type":27,"value":474}," onBar",{"type":31,"tagName":199,"properties":476,"children":477},{"style":221},[478],{"type":27,"value":479},"()",{"type":31,"tagName":199,"properties":481,"children":482},{"style":350},[483],{"type":27,"value":484},":",{"type":31,"tagName":199,"properties":486,"children":487},{"style":227},[488],{"type":27,"value":489}," void",{"type":31,"tagName":199,"properties":491,"children":492},{"style":221},[493],{"type":27,"value":494}," {",{"type":27,"value":28},{"type":31,"tagName":199,"properties":497,"children":498},{"class":201},[499,504,509,513,518,523,528,533],{"type":31,"tagName":199,"properties":500,"children":501},{"style":350},[502],{"type":27,"value":503},"  const",{"type":31,"tagName":199,"properties":505,"children":506},{"style":227},[507],{"type":27,"value":508}," fast",{"type":31,"tagName":199,"properties":510,"children":511},{"style":350},[512],{"type":27,"value":363},{"type":31,"tagName":199,"properties":514,"children":515},{"style":221},[516],{"type":27,"value":517}," fastEma.",{"type":31,"tagName":199,"properties":519,"children":520},{"style":215},[521],{"type":27,"value":522},"update",{"type":31,"tagName":199,"properties":524,"children":525},{"style":221},[526],{"type":27,"value":527},"(bar.",{"type":31,"tagName":199,"properties":529,"children":530},{"style":215},[531],{"type":27,"value":532},"close",{"type":31,"tagName":199,"properties":534,"children":535},{"style":221},[536],{"type":27,"value":537},"());",{"type":27,"value":28},{"type":31,"tagName":199,"properties":540,"children":541},{"class":201},[542,546,551,555,560,564,568,572],{"type":31,"tagName":199,"properties":543,"children":544},{"style":350},[545],{"type":27,"value":503},{"type":31,"tagName":199,"properties":547,"children":548},{"style":227},[549],{"type":27,"value":550}," slow",{"type":31,"tagName":199,"properties":552,"children":553},{"style":350},[554],{"type":27,"value":363},{"type":31,"tagName":199,"properties":556,"children":557},{"style":221},[558],{"type":27,"value":559}," slowEma.",{"type":31,"tagName":199,"properties":561,"children":562},{"style":215},[563],{"type":27,"value":522},{"type":31,"tagName":199,"properties":565,"children":566},{"style":221},[567],{"type":27,"value":527},{"type":31,"tagName":199,"properties":569,"children":570},{"style":215},[571],{"type":27,"value":532},{"type":31,"tagName":199,"properties":573,"children":574},{"style":221},[575],{"type":27,"value":537},{"type":27,"value":28},{"type":31,"tagName":199,"properties":578,"children":579},{"class":201},[580,585,590,595,600,605,610,615,620],{"type":31,"tagName":199,"properties":581,"children":582},{"style":350},[583],{"type":27,"value":584},"  if",{"type":31,"tagName":199,"properties":586,"children":587},{"style":221},[588],{"type":27,"value":589}," (",{"type":31,"tagName":199,"properties":591,"children":592},{"style":215},[593],{"type":27,"value":594},"isNaN",{"type":31,"tagName":199,"properties":596,"children":597},{"style":221},[598],{"type":27,"value":599},"(fast) ",{"type":31,"tagName":199,"properties":601,"children":602},{"style":350},[603],{"type":27,"value":604},"||",{"type":31,"tagName":199,"properties":606,"children":607},{"style":215},[608],{"type":27,"value":609}," isNaN",{"type":31,"tagName":199,"properties":611,"children":612},{"style":221},[613],{"type":27,"value":614},"(slow)) ",{"type":31,"tagName":199,"properties":616,"children":617},{"style":350},[618],{"type":27,"value":619},"return",{"type":31,"tagName":199,"properties":621,"children":622},{"style":221},[623],{"type":27,"value":624},";",{"type":27,"value":28},{"type":31,"tagName":199,"properties":627,"children":628},{"class":201},[629,633,638,642,647,651],{"type":31,"tagName":199,"properties":630,"children":631},{"style":350},[632],{"type":27,"value":503},{"type":31,"tagName":199,"properties":634,"children":635},{"style":227},[636],{"type":27,"value":637}," crossed",{"type":31,"tagName":199,"properties":639,"children":640},{"style":350},[641],{"type":27,"value":363},{"type":31,"tagName":199,"properties":643,"children":644},{"style":221},[645],{"type":27,"value":646}," cross.",{"type":31,"tagName":199,"properties":648,"children":649},{"style":215},[650],{"type":27,"value":522},{"type":31,"tagName":199,"properties":652,"children":653},{"style":221},[654],{"type":27,"value":655},"(fast, slow);",{"type":27,"value":28},{"type":31,"tagName":199,"properties":658,"children":659},{"class":201},[660,664,669,674,679,684,689,693,698,703,708],{"type":31,"tagName":199,"properties":661,"children":662},{"style":350},[663],{"type":27,"value":584},{"type":31,"tagName":199,"properties":665,"children":666},{"style":221},[667],{"type":27,"value":668}," (crossed ",{"type":31,"tagName":199,"properties":670,"children":671},{"style":350},[672],{"type":27,"value":673},"==",{"type":31,"tagName":199,"properties":675,"children":676},{"style":227},[677],{"type":27,"value":678}," 1",{"type":31,"tagName":199,"properties":680,"children":681},{"style":221},[682],{"type":27,"value":683},") strategy.",{"type":31,"tagName":199,"properties":685,"children":686},{"style":215},[687],{"type":27,"value":688},"long",{"type":31,"tagName":199,"properties":690,"children":691},{"style":221},[692],{"type":27,"value":290},{"type":31,"tagName":199,"properties":694,"children":695},{"style":238},[696],{"type":27,"value":697},"\"L\"",{"type":31,"tagName":199,"properties":699,"children":700},{"style":221},[701],{"type":27,"value":702},").",{"type":31,"tagName":199,"properties":704,"children":705},{"style":215},[706],{"type":27,"value":707},"send",{"type":31,"tagName":199,"properties":709,"children":710},{"style":221},[711],{"type":27,"value":456},{"type":27,"value":28},{"type":31,"tagName":199,"properties":714,"children":715},{"class":201},[716,720,724,728,733,738,742,747],{"type":31,"tagName":199,"properties":717,"children":718},{"style":350},[719],{"type":27,"value":584},{"type":31,"tagName":199,"properties":721,"children":722},{"style":221},[723],{"type":27,"value":668},{"type":31,"tagName":199,"properties":725,"children":726},{"style":350},[727],{"type":27,"value":673},{"type":31,"tagName":199,"properties":729,"children":730},{"style":350},[731],{"type":27,"value":732}," -",{"type":31,"tagName":199,"properties":734,"children":735},{"style":227},[736],{"type":27,"value":737},"1",{"type":31,"tagName":199,"properties":739,"children":740},{"style":221},[741],{"type":27,"value":683},{"type":31,"tagName":199,"properties":743,"children":744},{"style":215},[745],{"type":27,"value":746},"closeAll",{"type":31,"tagName":199,"properties":748,"children":749},{"style":221},[750],{"type":27,"value":456},{"type":27,"value":28},{"type":31,"tagName":199,"properties":753,"children":754},{"class":201},[755,760],{"type":31,"tagName":199,"properties":756,"children":757},{"style":215},[758],{"type":27,"value":759},"  out_fast",{"type":31,"tagName":199,"properties":761,"children":762},{"style":221},[763],{"type":27,"value":764},"(fast);",{"type":27,"value":28},{"type":31,"tagName":199,"properties":767,"children":768},{"class":201},[769,774],{"type":31,"tagName":199,"properties":770,"children":771},{"style":215},[772],{"type":27,"value":773},"  out_slow",{"type":31,"tagName":199,"properties":775,"children":776},{"style":221},[777],{"type":27,"value":778},"(slow);",{"type":27,"value":28},{"type":31,"tagName":199,"properties":781,"children":782},{"class":201},[783],{"type":31,"tagName":199,"properties":784,"children":785},{"style":221},[786],{"type":27,"value":787},"}",{"type":27,"value":28},{"type":31,"tagName":32,"properties":790,"children":791,"position":1051},{},[792,801,819,826,843,850,863,870,887,894,911,918,935,942,959,965,978,985,998,1005,1018,1025,1044],{"type":27,"value":793,"position":794},"To try it, open the editor from the chart toolbar's ",{"start":795,"end":798},{"line":796,"column":21,"offset":797},33,1630,{"line":796,"column":799,"offset":800},53,1682,{"type":31,"tagName":802,"properties":803,"children":804,"position":814},"strong",{},[805],{"type":27,"value":806,"position":807},"Editor",{"start":808,"end":811},{"line":796,"column":809,"offset":810},55,1684,{"line":796,"column":812,"offset":813},61,1690,{"start":815,"end":816},{"line":796,"column":799,"offset":800},{"line":796,"column":817,"offset":818},63,1692,{"type":27,"value":820,"position":821}," button, press ",{"start":822,"end":823},{"line":796,"column":817,"offset":818},{"line":796,"column":824,"offset":825},78,1707,{"type":31,"tagName":802,"properties":827,"children":828,"position":838},{},[829],{"type":27,"value":830,"position":831},"New indicator",{"start":832,"end":835},{"line":796,"column":833,"offset":834},80,1709,{"line":796,"column":836,"offset":837},93,1722,{"start":839,"end":840},{"line":796,"column":824,"offset":825},{"line":796,"column":841,"offset":842},95,1724,{"type":27,"value":844,"position":845}," in the Explorer, keep the ",{"start":846,"end":847},{"line":796,"column":841,"offset":842},{"line":796,"column":848,"offset":849},122,1751,{"type":31,"tagName":45,"properties":851,"children":852,"position":860},{},[853],{"type":27,"value":854,"position":855},"//@lang=wrun-ts",{"start":856,"end":857},{"line":796,"column":848,"offset":849},{"line":796,"column":858,"offset":859},139,1768,{"start":861,"end":862},{"line":796,"column":848,"offset":849},{"line":796,"column":858,"offset":859},{"type":27,"value":864,"position":865}," line at the top of the draft and replace the starter under it with this file, then press ",{"start":866,"end":867},{"line":796,"column":858,"offset":859},{"line":796,"column":868,"offset":869},229,1858,{"type":31,"tagName":802,"properties":871,"children":872,"position":882},{},[873],{"type":27,"value":874,"position":875},"Backtest",{"start":876,"end":879},{"line":796,"column":877,"offset":878},231,1860,{"line":796,"column":880,"offset":881},239,1868,{"start":883,"end":884},{"line":796,"column":868,"offset":869},{"line":796,"column":885,"offset":886},241,1870,{"type":27,"value":888,"position":889},". A fuller version of this file is a starter in the editor's template picker: the Explorer's ",{"start":890,"end":891},{"line":796,"column":885,"offset":886},{"line":796,"column":892,"offset":893},334,1963,{"type":31,"tagName":802,"properties":895,"children":896,"position":906},{},[897],{"type":27,"value":898,"position":899},"Templates",{"start":900,"end":903},{"line":796,"column":901,"offset":902},336,1965,{"line":796,"column":904,"offset":905},345,1974,{"start":907,"end":908},{"line":796,"column":892,"offset":893},{"line":796,"column":909,"offset":910},347,1976,{"type":27,"value":912,"position":913}," icon (\"Browse starter templates\") lists it as ",{"start":914,"end":915},{"line":796,"column":909,"offset":910},{"line":796,"column":916,"offset":917},394,2023,{"type":31,"tagName":802,"properties":919,"children":920,"position":930},{},[921],{"type":27,"value":922,"position":923},"Moving-Average Cross",{"start":924,"end":927},{"line":796,"column":925,"offset":926},396,2025,{"line":796,"column":928,"offset":929},416,2045,{"start":931,"end":932},{"line":796,"column":916,"offset":917},{"line":796,"column":933,"offset":934},418,2047,{"type":27,"value":936,"position":937}," under ",{"start":938,"end":939},{"line":796,"column":933,"offset":934},{"line":796,"column":940,"offset":941},425,2054,{"type":31,"tagName":802,"properties":943,"children":944,"position":954},{},[945],{"type":27,"value":946,"position":947},"Strategies",{"start":948,"end":951},{"line":796,"column":949,"offset":950},427,2056,{"line":796,"column":952,"offset":953},437,2066,{"start":955,"end":956},{"line":796,"column":940,"offset":941},{"line":796,"column":957,"offset":958},439,2068,{"type":27,"value":589,"position":960},{"start":961,"end":962},{"line":796,"column":957,"offset":958},{"line":796,"column":963,"offset":964},441,2070,{"type":31,"tagName":45,"properties":966,"children":967,"position":975},{},[968],{"type":27,"value":969,"position":970},"strategy-ma-cross",{"start":971,"end":972},{"line":796,"column":963,"offset":964},{"line":796,"column":973,"offset":974},460,2089,{"start":976,"end":977},{"line":796,"column":963,"offset":964},{"line":796,"column":973,"offset":974},{"type":27,"value":979,"position":980},"), with ",{"start":981,"end":982},{"line":796,"column":973,"offset":974},{"line":796,"column":983,"offset":984},468,2097,{"type":31,"tagName":45,"properties":986,"children":987,"position":995},{},[988],{"type":27,"value":989,"position":990},"Sma",{"start":991,"end":992},{"line":796,"column":983,"offset":984},{"line":796,"column":993,"offset":994},473,2102,{"start":996,"end":997},{"line":796,"column":983,"offset":984},{"line":796,"column":993,"offset":994},{"type":27,"value":999,"position":1000}," in place of ",{"start":1001,"end":1002},{"line":796,"column":993,"offset":994},{"line":796,"column":1003,"offset":1004},486,2115,{"type":31,"tagName":45,"properties":1006,"children":1007,"position":1015},{},[1008],{"type":27,"value":1009,"position":1010},"Ema",{"start":1011,"end":1012},{"line":796,"column":1003,"offset":1004},{"line":796,"column":1013,"offset":1014},491,2120,{"start":1016,"end":1017},{"line":796,"column":1003,"offset":1004},{"line":796,"column":1013,"offset":1014},{"type":27,"value":1019,"position":1020},", a ribbon between the averages and a mark on each cross (",{"start":1021,"end":1022},{"line":796,"column":1013,"offset":1014},{"line":796,"column":1023,"offset":1024},549,2178,{"type":31,"tagName":1026,"properties":1027,"children":1029,"position":1039},"a",{"href":1028},"../cookbook/strategy-ma-cross.md",[1030],{"type":27,"value":1031,"position":1032},"Moving-average cross",{"start":1033,"end":1036},{"line":796,"column":1034,"offset":1035},550,2179,{"line":796,"column":1037,"offset":1038},570,2199,{"start":1040,"end":1041},{"line":796,"column":1023,"offset":1024},{"line":796,"column":1042,"offset":1043},605,2234,{"type":27,"value":1045,"position":1046},"), commented throughout.",{"start":1047,"end":1048},{"line":796,"column":1042,"offset":1043},{"line":796,"column":1049,"offset":1050},629,2258,{"start":1052,"end":1053},{"line":796,"column":21,"offset":797},{"line":796,"column":1049,"offset":1050},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1056,"children":1057,"position":1067},{},[1058],{"type":27,"value":1059,"position":1060},"Three things make it a strategy rather than an indicator:",{"start":1061,"end":1064},{"line":1062,"column":21,"offset":1063},35,2260,{"line":1062,"column":1065,"offset":1066},58,2317,{"start":1068,"end":1069},{"line":1062,"column":21,"offset":1063},{"line":1062,"column":1065,"offset":1066},{"type":27,"value":28},{"type":31,"tagName":1072,"properties":1073,"children":1074,"position":1369},"ul",{},[1075,1076,1231,1232,1300,1301,1368],{"type":27,"value":28},{"type":31,"tagName":1077,"properties":1078,"children":1079,"position":1227},"li",{},[1080,1095,1101,1114,1121,1134,1140,1152,1159,1174,1181,1198,1205,1220],{"type":31,"tagName":45,"properties":1081,"children":1082,"position":1092},{},[1083],{"type":27,"value":49,"position":1084},{"start":1085,"end":1089},{"line":1086,"column":1087,"offset":1088},37,3,2321,{"line":1086,"column":1090,"offset":1091},22,2340,{"start":1093,"end":1094},{"line":1086,"column":1087,"offset":1088},{"line":1086,"column":1090,"offset":1091},{"type":27,"value":1096,"position":1097}," at the top level is the broker: starting equity, sizing (",{"start":1098,"end":1099},{"line":1086,"column":1090,"offset":1091},{"line":1086,"column":833,"offset":1100},2398,{"type":31,"tagName":45,"properties":1102,"children":1103,"position":1111},{},[1104],{"type":27,"value":1105,"position":1106},"50%",{"start":1107,"end":1108},{"line":1086,"column":833,"offset":1100},{"line":1086,"column":1109,"offset":1110},85,2403,{"start":1112,"end":1113},{"line":1086,"column":833,"offset":1100},{"line":1086,"column":1109,"offset":1110},{"type":27,"value":1115,"position":1116}," of equity per entry), commission and slippage live in the file, so a published strategy carries its own assumptions. Every field is optional; a bare ",{"start":1117,"end":1118},{"line":1086,"column":1109,"offset":1110},{"line":1086,"column":1119,"offset":1120},235,2553,{"type":31,"tagName":45,"properties":1122,"children":1123,"position":1131},{},[1124],{"type":27,"value":1125,"position":1126},"strategy()",{"start":1127,"end":1128},{"line":1086,"column":1119,"offset":1120},{"line":1086,"column":1129,"offset":1130},247,2565,{"start":1132,"end":1133},{"line":1086,"column":1119,"offset":1120},{"line":1086,"column":1129,"offset":1130},{"type":27,"value":1135,"position":1136}," takes every default. Run derives a ",{"start":1137,"end":1138},{"line":1086,"column":1129,"offset":1130},{"line":1086,"column":74,"offset":1139},2601,{"type":31,"tagName":45,"properties":1141,"children":1142,"position":1149},{},[1143],{"type":27,"value":218,"position":1144},{"start":1145,"end":1146},{"line":1086,"column":74,"offset":1139},{"line":1086,"column":1147,"offset":1148},293,2611,{"start":1150,"end":1151},{"line":1086,"column":74,"offset":1139},{"line":1086,"column":1147,"offset":1148},{"type":27,"value":1153,"position":1154}," section into the sheet, and that section is what makes the file a strategy: once it builds, the editor's toolbar shows a ",{"start":1155,"end":1156},{"line":1086,"column":1147,"offset":1148},{"line":1086,"column":1157,"offset":1158},415,2733,{"type":31,"tagName":802,"properties":1160,"children":1161,"position":1170},{},[1162],{"type":27,"value":1163,"position":1164},"Strategy",{"start":1165,"end":1168},{"line":1086,"column":1166,"offset":1167},417,2735,{"line":1086,"column":940,"offset":1169},2743,{"start":1171,"end":1172},{"line":1086,"column":1157,"offset":1158},{"line":1086,"column":949,"offset":1173},2745,{"type":27,"value":1175,"position":1176}," badge and the ",{"start":1177,"end":1178},{"line":1086,"column":949,"offset":1173},{"line":1086,"column":1179,"offset":1180},442,2760,{"type":31,"tagName":802,"properties":1182,"children":1183,"position":1193},{},[1184],{"type":27,"value":1185,"position":1186},"Run",{"start":1187,"end":1190},{"line":1086,"column":1188,"offset":1189},444,2762,{"line":1086,"column":1191,"offset":1192},447,2765,{"start":1194,"end":1195},{"line":1086,"column":1179,"offset":1180},{"line":1086,"column":1196,"offset":1197},449,2767,{"type":27,"value":1199,"position":1200}," button reads ",{"start":1201,"end":1202},{"line":1086,"column":1196,"offset":1197},{"line":1086,"column":1203,"offset":1204},463,2781,{"type":31,"tagName":802,"properties":1206,"children":1207,"position":1215},{},[1208],{"type":27,"value":874,"position":1209},{"start":1210,"end":1213},{"line":1086,"column":1211,"offset":1212},465,2783,{"line":1086,"column":993,"offset":1214},2791,{"start":1216,"end":1217},{"line":1086,"column":1203,"offset":1204},{"line":1086,"column":1218,"offset":1219},475,2793,{"type":27,"value":1221,"position":1222},".",{"start":1223,"end":1224},{"line":1086,"column":1218,"offset":1219},{"line":1086,"column":1225,"offset":1226},476,2794,{"start":1228,"end":1230},{"line":1086,"column":21,"offset":1229},2319,{"line":1086,"column":1225,"offset":1226},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":1233,"children":1234,"position":1296},{},[1235,1250,1257,1269,1276,1289],{"type":31,"tagName":45,"properties":1236,"children":1237,"position":1247},{},[1238],{"type":27,"value":1239,"position":1240},"strategy.long(\"L\").send()",{"start":1241,"end":1244},{"line":1242,"column":1087,"offset":1243},38,2797,{"line":1242,"column":1245,"offset":1246},30,2824,{"start":1248,"end":1249},{"line":1242,"column":1087,"offset":1243},{"line":1242,"column":1245,"offset":1246},{"type":27,"value":1251,"position":1252}," in ",{"start":1253,"end":1254},{"line":1242,"column":1245,"offset":1246},{"line":1242,"column":1255,"offset":1256},34,2828,{"type":31,"tagName":45,"properties":1258,"children":1259,"position":1266},{},[1260],{"type":27,"value":128,"position":1261},{"start":1262,"end":1263},{"line":1242,"column":1255,"offset":1256},{"line":1242,"column":1264,"offset":1265},43,2837,{"start":1267,"end":1268},{"line":1242,"column":1255,"offset":1256},{"line":1242,"column":1264,"offset":1265},{"type":27,"value":1270,"position":1271}," queues a market order under the id ",{"start":1272,"end":1273},{"line":1242,"column":1264,"offset":1265},{"line":1242,"column":1274,"offset":1275},79,2873,{"type":31,"tagName":45,"properties":1277,"children":1278,"position":1286},{},[1279],{"type":27,"value":1280,"position":1281},"L",{"start":1282,"end":1283},{"line":1242,"column":1274,"offset":1275},{"line":1242,"column":1284,"offset":1285},82,2876,{"start":1287,"end":1288},{"line":1242,"column":1274,"offset":1275},{"line":1242,"column":1284,"offset":1285},{"type":27,"value":1290,"position":1291},". An order placed on a bar fills no earlier than the next bar's open; nothing in a run can act on information it did not have.",{"start":1292,"end":1293},{"line":1242,"column":1284,"offset":1285},{"line":1242,"column":1294,"offset":1295},208,3002,{"start":1297,"end":1299},{"line":1242,"column":21,"offset":1298},2795,{"line":1242,"column":1294,"offset":1295},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":1302,"children":1303,"position":1364},{},[1304,1319,1325,1338,1345,1357],{"type":31,"tagName":45,"properties":1305,"children":1306,"position":1316},{},[1307],{"type":27,"value":1308,"position":1309},"strategy.closeAll()",{"start":1310,"end":1313},{"line":1311,"column":1087,"offset":1312},39,3005,{"line":1311,"column":1314,"offset":1315},24,3026,{"start":1317,"end":1318},{"line":1311,"column":1087,"offset":1312},{"line":1311,"column":1314,"offset":1315},{"type":27,"value":1320,"position":1321}," is the signal exit. Orders and the position getters (",{"start":1322,"end":1323},{"line":1311,"column":1314,"offset":1315},{"line":1311,"column":824,"offset":1324},3080,{"type":31,"tagName":45,"properties":1326,"children":1327,"position":1335},{},[1328],{"type":27,"value":1329,"position":1330},"strategy.positionSize()",{"start":1331,"end":1332},{"line":1311,"column":824,"offset":1324},{"line":1311,"column":1333,"offset":1334},103,3105,{"start":1336,"end":1337},{"line":1311,"column":824,"offset":1324},{"line":1311,"column":1333,"offset":1334},{"type":27,"value":1339,"position":1340}," and the rest) both go in ",{"start":1341,"end":1342},{"line":1311,"column":1333,"offset":1334},{"line":1311,"column":1343,"offset":1344},129,3131,{"type":31,"tagName":45,"properties":1346,"children":1347,"position":1354},{},[1348],{"type":27,"value":128,"position":1349},{"start":1350,"end":1351},{"line":1311,"column":1343,"offset":1344},{"line":1311,"column":1352,"offset":1353},138,3140,{"start":1355,"end":1356},{"line":1311,"column":1343,"offset":1344},{"line":1311,"column":1352,"offset":1353},{"type":27,"value":1358,"position":1359},"; a getter reads the position after the bar's fills.",{"start":1360,"end":1361},{"line":1311,"column":1352,"offset":1353},{"line":1311,"column":1362,"offset":1363},190,3192,{"start":1365,"end":1367},{"line":1311,"column":21,"offset":1366},3003,{"line":1311,"column":1362,"offset":1363},{"type":27,"value":28},{"start":1370,"end":1371},{"line":1086,"column":21,"offset":1229},{"line":1311,"column":1362,"offset":1363},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1374,"children":1375,"position":1484},{},[1376,1384,1396,1402,1415,1421,1438,1445,1458,1464,1477],{"type":27,"value":1377,"position":1378},"The outputs stay outputs: ",{"start":1379,"end":1382},{"line":1380,"column":21,"offset":1381},41,3194,{"line":1380,"column":160,"offset":1383},3220,{"type":31,"tagName":45,"properties":1385,"children":1386,"position":1393},{},[1387],{"type":27,"value":1388,"position":1389},"fast",{"start":1390,"end":1391},{"line":1380,"column":160,"offset":1383},{"line":1380,"column":796,"offset":1392},3226,{"start":1394,"end":1395},{"line":1380,"column":160,"offset":1383},{"line":1380,"column":796,"offset":1392},{"type":27,"value":1397,"position":1398}," and ",{"start":1399,"end":1400},{"line":1380,"column":796,"offset":1392},{"line":1380,"column":1242,"offset":1401},3231,{"type":31,"tagName":45,"properties":1403,"children":1404,"position":1412},{},[1405],{"type":27,"value":1406,"position":1407},"slow",{"start":1408,"end":1409},{"line":1380,"column":1242,"offset":1401},{"line":1380,"column":1410,"offset":1411},44,3237,{"start":1413,"end":1414},{"line":1380,"column":1242,"offset":1401},{"line":1380,"column":1410,"offset":1411},{"type":27,"value":1416,"position":1417}," draw on the chart like any indicator's, and once the strategy is published they can carry alerts. A strategy adds four alert choices of its own, \"Strategy order placed\", \"Strategy trade opened or closed\", \"Strategy position\" and \"Strategy equity\" (",{"start":1418,"end":1419},{"line":1380,"column":1410,"offset":1411},{"line":1380,"column":1147,"offset":1420},3486,{"type":31,"tagName":1026,"properties":1422,"children":1424,"position":1433},{"href":1423},"../functions/alerts.md",[1425],{"type":27,"value":1426,"position":1427},"Alerts",{"start":1428,"end":1431},{"line":1380,"column":1429,"offset":1430},294,3487,{"line":1380,"column":94,"offset":1432},3493,{"start":1434,"end":1435},{"line":1380,"column":1147,"offset":1420},{"line":1380,"column":1436,"offset":1437},325,3518,{"type":27,"value":1439,"position":1440},"), which is why ",{"start":1441,"end":1442},{"line":1380,"column":1436,"offset":1437},{"line":1380,"column":1443,"offset":1444},341,3534,{"type":31,"tagName":45,"properties":1446,"children":1447,"position":1455},{},[1448],{"type":27,"value":1449,"position":1450},"strategy.position",{"start":1451,"end":1452},{"line":1380,"column":1443,"offset":1444},{"line":1380,"column":1453,"offset":1454},360,3553,{"start":1456,"end":1457},{"line":1380,"column":1443,"offset":1444},{"line":1380,"column":1453,"offset":1454},{"type":27,"value":1397,"position":1459},{"start":1460,"end":1461},{"line":1380,"column":1453,"offset":1454},{"line":1380,"column":1462,"offset":1463},365,3558,{"type":31,"tagName":45,"properties":1465,"children":1466,"position":1474},{},[1467],{"type":27,"value":1468,"position":1469},"strategy.equity",{"start":1470,"end":1471},{"line":1380,"column":1462,"offset":1463},{"line":1380,"column":1472,"offset":1473},382,3575,{"start":1475,"end":1476},{"line":1380,"column":1462,"offset":1463},{"line":1380,"column":1472,"offset":1473},{"type":27,"value":1478,"position":1479}," are reserved: an output with either name is refused by name.",{"start":1480,"end":1481},{"line":1380,"column":1472,"offset":1473},{"line":1380,"column":1482,"offset":1483},443,3636,{"start":1485,"end":1486},{"line":1380,"column":21,"offset":1381},{"line":1380,"column":1482,"offset":1483},{"type":27,"value":28},{"type":31,"tagName":149,"properties":1489,"children":1490,"position":1498},{},[1491],{"type":27,"value":1492,"position":1493},"What the Strategy Tester shows",{"start":1494,"end":1496},{"line":1264,"column":157,"offset":1495},3641,{"line":1264,"column":1255,"offset":1497},3671,{"start":1499,"end":1501},{"line":1264,"column":21,"offset":1500},3638,{"line":1264,"column":1255,"offset":1497},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1504,"children":1505,"position":1677},{},[1506,1515,1531,1538,1550,1557,1573,1580,1597,1604,1621,1628,1645,1652,1670],{"type":27,"value":1507,"position":1508},"The file compiles in your browser, and ",{"start":1509,"end":1512},{"line":1510,"column":21,"offset":1511},45,3673,{"line":1510,"column":1513,"offset":1514},40,3712,{"type":31,"tagName":802,"properties":1516,"children":1517,"position":1526},{},[1518],{"type":27,"value":874,"position":1519},{"start":1520,"end":1523},{"line":1510,"column":1521,"offset":1522},42,3714,{"line":1510,"column":1524,"offset":1525},50,3722,{"start":1527,"end":1528},{"line":1510,"column":1513,"offset":1514},{"line":1510,"column":1529,"offset":1530},52,3724,{"type":27,"value":1532,"position":1533}," puts the draft on the chart's price pane, where its trade markers land; a drawn output on ",{"start":1534,"end":1535},{"line":1510,"column":1529,"offset":1530},{"line":1510,"column":1536,"offset":1537},143,3815,{"type":31,"tagName":45,"properties":1539,"children":1540,"position":1547},{},[1541],{"type":27,"value":1542,"position":1543},"lower",{"start":1544,"end":1545},{"line":1510,"column":1536,"offset":1537},{"line":1510,"column":40,"offset":1546},3822,{"start":1548,"end":1549},{"line":1510,"column":1536,"offset":1537},{"line":1510,"column":40,"offset":1546},{"type":27,"value":1551,"position":1552}," gets a pane of its own below. The Strategy Tester docks under the chart with the engine's own result: a ",{"start":1553,"end":1554},{"line":1510,"column":40,"offset":1546},{"line":1510,"column":1555,"offset":1556},255,3927,{"type":31,"tagName":802,"properties":1558,"children":1559,"position":1568},{},[1560],{"type":27,"value":1561,"position":1562},"trades list",{"start":1563,"end":1566},{"line":1510,"column":1564,"offset":1565},257,3929,{"line":1510,"column":64,"offset":1567},3940,{"start":1569,"end":1570},{"line":1510,"column":1555,"offset":1556},{"line":1510,"column":1571,"offset":1572},270,3942,{"type":27,"value":1574,"position":1575}," (entries, exits, per-trade PnL, fees, exit reason), an ",{"start":1576,"end":1577},{"line":1510,"column":1571,"offset":1572},{"line":1510,"column":1578,"offset":1579},326,3998,{"type":31,"tagName":802,"properties":1581,"children":1582,"position":1592},{},[1583],{"type":27,"value":1584,"position":1585},"equity curve",{"start":1586,"end":1589},{"line":1510,"column":1587,"offset":1588},328,4000,{"line":1510,"column":1590,"offset":1591},340,4012,{"start":1593,"end":1594},{"line":1510,"column":1578,"offset":1579},{"line":1510,"column":1595,"offset":1596},342,4014,{"type":27,"value":1598,"position":1599}," with its drawdown, ",{"start":1600,"end":1601},{"line":1510,"column":1595,"offset":1596},{"line":1510,"column":1602,"offset":1603},362,4034,{"type":31,"tagName":802,"properties":1605,"children":1606,"position":1616},{},[1607],{"type":27,"value":1608,"position":1609},"performance stats",{"start":1610,"end":1613},{"line":1510,"column":1611,"offset":1612},364,4036,{"line":1510,"column":1614,"offset":1615},381,4053,{"start":1617,"end":1618},{"line":1510,"column":1602,"offset":1603},{"line":1510,"column":1619,"offset":1620},383,4055,{"type":27,"value":1622,"position":1623}," (net profit, win rate, profit factor, Sharpe, Sortino, max drawdown, exposure and the rest), and the ",{"start":1624,"end":1625},{"line":1510,"column":1619,"offset":1620},{"line":1510,"column":1626,"offset":1627},485,4157,{"type":31,"tagName":802,"properties":1629,"children":1630,"position":1640},{},[1631],{"type":27,"value":1632,"position":1633},"open trades and pending orders",{"start":1634,"end":1637},{"line":1510,"column":1635,"offset":1636},487,4159,{"line":1510,"column":1638,"offset":1639},517,4189,{"start":1641,"end":1642},{"line":1510,"column":1626,"offset":1627},{"line":1510,"column":1643,"offset":1644},519,4191,{"type":27,"value":1646,"position":1647}," as of the last bar, with a marker on the price series for every fill. ",{"start":1648,"end":1649},{"line":1510,"column":1643,"offset":1644},{"line":1510,"column":1650,"offset":1651},590,4262,{"type":31,"tagName":1026,"properties":1653,"children":1655,"position":1665},{"href":1654},"reading-the-tester.md",[1656],{"type":27,"value":1657,"position":1658},"Reading the Strategy Tester",{"start":1659,"end":1662},{"line":1510,"column":1660,"offset":1661},591,4263,{"line":1510,"column":1663,"offset":1664},618,4290,{"start":1666,"end":1667},{"line":1510,"column":1650,"offset":1651},{"line":1510,"column":1668,"offset":1669},642,4314,{"type":27,"value":1671,"position":1672}," walks the panel.",{"start":1673,"end":1674},{"line":1510,"column":1668,"offset":1669},{"line":1510,"column":1675,"offset":1676},659,4331,{"start":1678,"end":1679},{"line":1510,"column":21,"offset":1511},{"line":1510,"column":1675,"offset":1676},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1682,"children":1683,"position":1710},{},[1684,1692,1704],{"type":27,"value":1685,"position":1686},"The broker fills every order against the chart's own candles, which is why a strategy's price input reads the chart's ",{"start":1687,"end":1690},{"line":1688,"column":21,"offset":1689},47,4333,{"line":1688,"column":63,"offset":1691},4451,{"type":31,"tagName":45,"properties":1693,"children":1694,"position":1701},{},[1695],{"type":27,"value":1696,"position":1697},"ohlcv",{"start":1698,"end":1699},{"line":1688,"column":63,"offset":1691},{"line":1688,"column":24,"offset":1700},4458,{"start":1702,"end":1703},{"line":1688,"column":63,"offset":1691},{"line":1688,"column":24,"offset":1700},{"type":27,"value":1705,"position":1706}," and carries no symbol or exchange pin (any other primary input is refused by name). The run covers the candles the chart has loaded and recomputes as you pan, so panning back tests more history.",{"start":1707,"end":1708},{"line":1688,"column":24,"offset":1700},{"line":1688,"column":113,"offset":1709},4653,{"start":1711,"end":1712},{"line":1688,"column":21,"offset":1689},{"line":1688,"column":113,"offset":1709},{"type":27,"value":28},{"type":31,"tagName":149,"properties":1715,"children":1716,"position":1726},{},[1717],{"type":27,"value":1718,"position":1719},"Core guarantees",{"start":1720,"end":1723},{"line":1721,"column":157,"offset":1722},49,4658,{"line":1721,"column":1724,"offset":1725},19,4673,{"start":1727,"end":1729},{"line":1721,"column":21,"offset":1728},4655,{"line":1721,"column":1724,"offset":1725},{"type":27,"value":28},{"type":31,"tagName":1072,"properties":1732,"children":1733,"position":1949},{},[1734,1735,1766,1767,1814,1815,1948],{"type":27,"value":28},{"type":31,"tagName":1077,"properties":1736,"children":1737,"position":1762},{},[1738,1755],{"type":31,"tagName":802,"properties":1739,"children":1740,"position":1749},{},[1741],{"type":27,"value":1742,"position":1743},"Deterministic.",{"start":1744,"end":1747},{"line":1745,"column":39,"offset":1746},51,4679,{"line":1745,"column":1724,"offset":1748},4693,{"start":1750,"end":1752},{"line":1745,"column":1087,"offset":1751},4677,{"line":1745,"column":1753,"offset":1754},21,4695,{"type":27,"value":1756,"position":1757}," The same file over the same bars produces the same trades wherever it runs: the broker is the engine's own code, pinned to one engine version, run under the engine's own phase order.",{"start":1758,"end":1759},{"line":1745,"column":1753,"offset":1754},{"line":1745,"column":1760,"offset":1761},204,4878,{"start":1763,"end":1765},{"line":1745,"column":21,"offset":1764},4675,{"line":1745,"column":1760,"offset":1761},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":1768,"children":1769,"position":1810},{},[1770,1786,1792,1803],{"type":31,"tagName":802,"properties":1771,"children":1772,"position":1781},{},[1773],{"type":27,"value":1774,"position":1775},"Lookahead-free.",{"start":1776,"end":1778},{"line":1529,"column":39,"offset":1777},4883,{"line":1529,"column":1779,"offset":1780},20,4898,{"start":1782,"end":1784},{"line":1529,"column":1087,"offset":1783},4881,{"line":1529,"column":1090,"offset":1785},4900,{"type":27,"value":1787,"position":1788}," Orders placed while bar N computes fill no earlier than bar N+1's open. The position a guard reads in ",{"start":1789,"end":1790},{"line":1529,"column":1090,"offset":1785},{"line":1529,"column":25,"offset":1791},5003,{"type":31,"tagName":45,"properties":1793,"children":1794,"position":1800},{},[1795],{"type":27,"value":128,"position":1796},{"start":1797,"end":1798},{"line":1529,"column":25,"offset":1791},{"line":1529,"column":73,"offset":1799},5012,{"start":1801,"end":1802},{"line":1529,"column":25,"offset":1791},{"line":1529,"column":73,"offset":1799},{"type":27,"value":1804,"position":1805}," is the position after that bar's fills, so a flat guard is already flat on the bar its exit filled.",{"start":1806,"end":1807},{"line":1529,"column":73,"offset":1799},{"line":1529,"column":1808,"offset":1809},234,5112,{"start":1811,"end":1813},{"line":1529,"column":21,"offset":1812},4879,{"line":1529,"column":1808,"offset":1809},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":1816,"children":1817,"position":1944},{},[1818,1835,1842,1855,1862,1874,1880,1895,1902,1919,1926,1938],{"type":31,"tagName":802,"properties":1819,"children":1820,"position":1829},{},[1821],{"type":27,"value":1822,"position":1823},"Honest accounting.",{"start":1824,"end":1826},{"line":799,"column":39,"offset":1825},5117,{"line":799,"column":1827,"offset":1828},23,5135,{"start":1830,"end":1832},{"line":799,"column":1087,"offset":1831},5115,{"line":799,"column":1833,"offset":1834},25,5137,{"type":27,"value":1836,"position":1837}," A bar that could have filled two levels settles by the declared ",{"start":1838,"end":1839},{"line":799,"column":1833,"offset":1834},{"line":799,"column":1840,"offset":1841},90,5202,{"type":31,"tagName":45,"properties":1843,"children":1844,"position":1852},{},[1845],{"type":27,"value":1846,"position":1847},"fillModel",{"start":1848,"end":1849},{"line":799,"column":1840,"offset":1841},{"line":799,"column":1850,"offset":1851},101,5213,{"start":1853,"end":1854},{"line":799,"column":1840,"offset":1841},{"line":799,"column":1850,"offset":1851},{"type":27,"value":1856,"position":1857}," and counts in ",{"start":1858,"end":1859},{"line":799,"column":1850,"offset":1851},{"line":799,"column":1860,"offset":1861},116,5228,{"type":31,"tagName":45,"properties":1863,"children":1864,"position":1871},{},[1865],{"type":27,"value":1866,"position":1867},"ambiguousFillCount",{"start":1868,"end":1869},{"line":799,"column":1860,"offset":1861},{"line":799,"column":83,"offset":1870},5248,{"start":1872,"end":1873},{"line":799,"column":1860,"offset":1861},{"line":799,"column":83,"offset":1870},{"type":27,"value":1875,"position":1876}," (the Tester's ",{"start":1877,"end":1878},{"line":799,"column":83,"offset":1870},{"line":799,"column":93,"offset":1879},5263,{"type":31,"tagName":802,"properties":1881,"children":1882,"position":1890},{},[1883],{"type":27,"value":1884,"position":1885},"Model-settled fills",{"start":1886,"end":1888},{"line":799,"column":102,"offset":1887},5265,{"line":799,"column":112,"offset":1889},5284,{"start":1891,"end":1892},{"line":799,"column":93,"offset":1879},{"line":799,"column":1893,"offset":1894},174,5286,{"type":27,"value":1896,"position":1897},"); rejected orders (the pyramiding cap, a size the equity cannot fund, an order placed on a live chart's forming bar) are counted, never dropped. The chart attaches no finer-interval data, no order book and no funding data to a strategy run, and the Tester's ",{"start":1898,"end":1899},{"line":799,"column":1893,"offset":1894},{"line":799,"column":1900,"offset":1901},433,5545,{"type":31,"tagName":802,"properties":1903,"children":1904,"position":1914},{},[1905],{"type":27,"value":1906,"position":1907},"Run details",{"start":1908,"end":1911},{"line":799,"column":1909,"offset":1910},435,5547,{"line":799,"column":1912,"offset":1913},446,5558,{"start":1915,"end":1916},{"line":799,"column":1900,"offset":1901},{"line":799,"column":1917,"offset":1918},448,5560,{"type":27,"value":1920,"position":1921}," say so: \"Fill precision: bar resolution\" once the fill model has settled a fill, and \"Funding data did not cover N bars\" on a perps run that held a position under ",{"start":1922,"end":1923},{"line":799,"column":1917,"offset":1918},{"line":799,"column":1924,"offset":1925},612,5724,{"type":31,"tagName":45,"properties":1927,"children":1928,"position":1935},{},[1929],{"type":27,"value":1930,"position":1931},"funding: \"data\"",{"start":1932,"end":1933},{"line":799,"column":1924,"offset":1925},{"line":799,"column":1049,"offset":1934},5741,{"start":1936,"end":1937},{"line":799,"column":1924,"offset":1925},{"line":799,"column":1049,"offset":1934},{"type":27,"value":1221,"position":1939},{"start":1940,"end":1941},{"line":799,"column":1049,"offset":1934},{"line":799,"column":1942,"offset":1943},630,5742,{"start":1945,"end":1947},{"line":799,"column":21,"offset":1946},5113,{"line":799,"column":1942,"offset":1943},{"type":27,"value":28},{"start":1950,"end":1951},{"line":1745,"column":21,"offset":1764},{"line":799,"column":1942,"offset":1943},{"type":27,"value":28},{"type":31,"tagName":149,"properties":1954,"children":1955,"position":1963},{},[1956],{"type":27,"value":1957,"position":1958},"What the broker is, and is not",{"start":1959,"end":1961},{"line":809,"column":157,"offset":1960},5747,{"line":809,"column":1255,"offset":1962},5777,{"start":1964,"end":1966},{"line":809,"column":21,"offset":1965},5744,{"line":809,"column":1255,"offset":1962},{"type":27,"value":28},{"type":31,"tagName":32,"properties":1969,"children":1970,"position":2019},{},[1971,1980,1993,2000,2012],{"type":27,"value":1972,"position":1973},"A research tool: fast iteration and honest reporting over bar closes. It settles orders at the next open, resting limits and stops when touched, protective exits under the fill model, isolated margin, liquidation and maker or taker fees on perps. It does not model queue position, partial fills at a level, replenishment, latency, or venue fees beyond the declared commission or maker and taker rates, and on the chart it does not walk finer bars, price fills off a recorded book (",{"start":1974,"end":1977},{"line":1975,"column":21,"offset":1976},57,5779,{"line":1975,"column":1978,"offset":1979},482,6260,{"type":31,"tagName":45,"properties":1981,"children":1982,"position":1990},{},[1983],{"type":27,"value":1984,"position":1985},"slippageModel: \"bookEstimate\"",{"start":1986,"end":1987},{"line":1975,"column":1978,"offset":1979},{"line":1975,"column":1988,"offset":1989},513,6291,{"start":1991,"end":1992},{"line":1975,"column":1978,"offset":1979},{"line":1975,"column":1988,"offset":1989},{"type":27,"value":1994,"position":1995}," is refused by name) or settle recorded funding (",{"start":1996,"end":1997},{"line":1975,"column":1988,"offset":1989},{"line":1975,"column":1998,"offset":1999},562,6340,{"type":31,"tagName":45,"properties":2001,"children":2002,"position":2009},{},[2003],{"type":27,"value":1930,"position":2004},{"start":2005,"end":2006},{"line":1975,"column":1998,"offset":1999},{"line":1975,"column":2007,"offset":2008},579,6357,{"start":2010,"end":2011},{"line":1975,"column":1998,"offset":1999},{"line":1975,"column":2007,"offset":2008},{"type":27,"value":2013,"position":2014}," counts the bars it could not settle). Each is disclosed by name rather than approximated.",{"start":2015,"end":2016},{"line":1975,"column":2007,"offset":2008},{"line":1975,"column":2017,"offset":2018},669,6447,{"start":2020,"end":2021},{"line":1975,"column":21,"offset":1976},{"line":1975,"column":2017,"offset":2018},{"type":27,"value":28},{"type":31,"tagName":149,"properties":2024,"children":2025,"position":2034},{},[2026],{"type":27,"value":2027,"position":2028},"Section contents",{"start":2029,"end":2032},{"line":2030,"column":157,"offset":2031},59,6452,{"line":2030,"column":1779,"offset":2033},6468,{"start":2035,"end":2037},{"line":2030,"column":21,"offset":2036},6449,{"line":2030,"column":1779,"offset":2033},{"type":27,"value":28},{"type":31,"tagName":1072,"properties":2040,"children":2041,"position":2276},{},[2042,2043,2074,2075,2106,2107,2157,2158,2188,2189,2241,2242,2275],{"type":27,"value":28},{"type":31,"tagName":1077,"properties":2044,"children":2045,"position":2070},{},[2046,2063],{"type":31,"tagName":1026,"properties":2047,"children":2049,"position":2058},{"href":2048},"first-strategy.md",[2050],{"type":27,"value":2051,"position":2052},"Build your first strategy",{"start":2053,"end":2055},{"line":812,"column":157,"offset":2054},6473,{"line":812,"column":2056,"offset":2057},29,6498,{"start":2059,"end":2061},{"line":812,"column":1087,"offset":2060},6472,{"line":812,"column":1721,"offset":2062},6518,{"type":27,"value":2064,"position":2065},": an RSI reversion from a sentence to a read result, tuned honestly, then published.",{"start":2066,"end":2067},{"line":812,"column":1721,"offset":2062},{"line":812,"column":2068,"offset":2069},133,6602,{"start":2071,"end":2073},{"line":812,"column":21,"offset":2072},6470,{"line":812,"column":2068,"offset":2069},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":2076,"children":2077,"position":2102},{},[2078,2096],{"type":31,"tagName":1026,"properties":2079,"children":2081,"position":2090},{"href":2080},"writing-strategies.md",[2082],{"type":27,"value":2083,"position":2084},"Writing strategies",{"start":2085,"end":2088},{"line":2086,"column":157,"offset":2087},62,6606,{"line":2086,"column":1090,"offset":2089},6624,{"start":2091,"end":2093},{"line":2086,"column":1087,"offset":2092},6605,{"line":2086,"column":2094,"offset":2095},46,6648,{"type":27,"value":2097,"position":2098},": the declaration table, the order API, the position and sizing model.",{"start":2099,"end":2100},{"line":2086,"column":2094,"offset":2095},{"line":2086,"column":1860,"offset":2101},6718,{"start":2103,"end":2105},{"line":2086,"column":21,"offset":2104},6603,{"line":2086,"column":1860,"offset":2101},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":2108,"children":2109,"position":2153},{},[2110,2126,2131,2146],{"type":31,"tagName":1026,"properties":2111,"children":2113,"position":2121},{"href":2112},"fill-simulation.md",[2114],{"type":27,"value":2115,"position":2116},"Fill simulation",{"start":2117,"end":2119},{"line":817,"column":157,"offset":2118},6722,{"line":817,"column":1724,"offset":2120},6737,{"start":2122,"end":2124},{"line":817,"column":1087,"offset":2123},6721,{"line":817,"column":1513,"offset":2125},6758,{"type":27,"value":79,"position":2127},{"start":2128,"end":2129},{"line":817,"column":1513,"offset":2125},{"line":817,"column":1521,"offset":2130},6760,{"type":31,"tagName":1026,"properties":2132,"children":2134,"position":2142},{"href":2133},"slippage-and-costs.md",[2135],{"type":27,"value":2136,"position":2137},"Slippage and costs",{"start":2138,"end":2140},{"line":817,"column":1264,"offset":2139},6761,{"line":817,"column":812,"offset":2141},6779,{"start":2143,"end":2144},{"line":817,"column":1521,"offset":2130},{"line":817,"column":1109,"offset":2145},6803,{"type":27,"value":2147,"position":2148},": the phase order, fill prices and fill models; commission, flat slippage, maker and taker rates.",{"start":2149,"end":2150},{"line":817,"column":1109,"offset":2145},{"line":817,"column":2151,"offset":2152},182,6900,{"start":2154,"end":2156},{"line":817,"column":21,"offset":2155},6719,{"line":817,"column":2151,"offset":2152},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":2159,"children":2160,"position":2184},{},[2161,2178],{"type":31,"tagName":1026,"properties":2162,"children":2164,"position":2173},{"href":2163},"perps.md",[2165],{"type":27,"value":2166,"position":2167},"Perps: margin, liquidation, funding",{"start":2168,"end":2171},{"line":2169,"column":157,"offset":2170},64,6904,{"line":2169,"column":1311,"offset":2172},6939,{"start":2174,"end":2176},{"line":2169,"column":1087,"offset":2175},6903,{"line":2169,"column":1524,"offset":2177},6950,{"type":27,"value":2179,"position":2180},": the leveraged model, its formulas and its counters.",{"start":2181,"end":2182},{"line":2169,"column":1524,"offset":2177},{"line":2169,"column":1333,"offset":2183},7003,{"start":2185,"end":2187},{"line":2169,"column":21,"offset":2186},6901,{"line":2169,"column":1333,"offset":2183},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":2190,"children":2191,"position":2237},{},[2192,2208,2213,2230],{"type":31,"tagName":1026,"properties":2193,"children":2194,"position":2203},{"href":1654},[2195],{"type":27,"value":1657,"position":2196},{"start":2197,"end":2200},{"line":2198,"column":157,"offset":2199},65,7007,{"line":2198,"column":2201,"offset":2202},31,7034,{"start":2204,"end":2206},{"line":2198,"column":1087,"offset":2205},7006,{"line":2198,"column":809,"offset":2207},7058,{"type":27,"value":79,"position":2209},{"start":2210,"end":2211},{"line":2198,"column":809,"offset":2207},{"line":2198,"column":1975,"offset":2212},7060,{"type":31,"tagName":1026,"properties":2214,"children":2216,"position":2225},{"href":2215},"stats-reference.md",[2217],{"type":27,"value":2218,"position":2219},"Stats reference",{"start":2220,"end":2222},{"line":2198,"column":1065,"offset":2221},7061,{"line":2198,"column":2223,"offset":2224},73,7076,{"start":2226,"end":2227},{"line":2198,"column":1975,"offset":2212},{"line":2198,"column":2228,"offset":2229},94,7097,{"type":27,"value":2231,"position":2232},": the panel and every stat.",{"start":2233,"end":2234},{"line":2198,"column":2228,"offset":2229},{"line":2198,"column":2235,"offset":2236},121,7124,{"start":2238,"end":2240},{"line":2198,"column":21,"offset":2239},7004,{"line":2198,"column":2235,"offset":2236},{"type":27,"value":28},{"type":31,"tagName":1077,"properties":2243,"children":2244,"position":2271},{},[2245,2264],{"type":31,"tagName":1026,"properties":2246,"children":2248,"position":2258},{"href":2247},"examples.md",[2249],{"type":27,"value":2250,"position":2251},"Examples",{"start":2252,"end":2255},{"line":2253,"column":157,"offset":2254},66,7128,{"line":2253,"column":2256,"offset":2257},12,7136,{"start":2259,"end":2261},{"line":2253,"column":1087,"offset":2260},7127,{"line":2253,"column":2262,"offset":2263},26,7150,{"type":27,"value":2265,"position":2266},": the five perps scenarios and a Hyperliquid perp walkthrough, complete files to start from.",{"start":2267,"end":2268},{"line":2253,"column":2262,"offset":2263},{"line":2253,"column":2269,"offset":2270},118,7242,{"start":2272,"end":2274},{"line":2253,"column":21,"offset":2273},7125,{"line":2253,"column":2269,"offset":2270},{"type":27,"value":28},{"start":2277,"end":2278},{"line":812,"column":21,"offset":2072},{"line":2253,"column":2269,"offset":2270},{"quirksMode":2280},false,{"start":2282,"end":2283},{"line":21,"column":21,"offset":22},{"line":2284,"column":21,"offset":2285},67,7243,1791265103603]