Reference

Changelog

What is new, improved and fixed.

New

Saying how your conditions fit together

  • You could already name a hundred things to look at. What was thin was saying how they COMBINE — and one of those gaps was quietly changing results.
  • “RSI above 50 or MACD above zero, AND price above the 200 EMA.” This is how most filter sentences are actually shaped: two ways in, one gate over both. It used to be read as “take the first signal, OR take the second one when the trend agrees” — so half your trades ignored the trend filter entirely, and the backtest looked clean while describing a strategy you had not written. It now reads the way you wrote it. Put the comma after the alternatives (“A or B, and C”) and both are gated; put it before (“A, or B and C”) and you get the other reading, deliberately.
  • “At least 2 of these 3.” Already worked; it now also understands the way people usually say it out loud — “3 of the 4 EMAs are stacked”.
  • “The 4h double bottom has confirmed”, on a 1h chart. Naming a higher timeframe next to a pattern now keeps the pattern ON that timeframe. Before, the shorthand kept the pattern and dropped the 4h, so it hunted a much noisier 1h shape instead. As everywhere else here, a 4h bar is unreadable until it has closed — nothing sees a pattern before you could have.
  • “Wait for the retest, but abort if price closes back below the 200 EMA first.” A setup that has started but not finished can now be thrown away by an event, not just by running out of time. Those are different questions: the clock asks whether the retest was too slow, this asks whether the trade still makes sense at all.
  • Four new runnable cards on the Templates page.
New

Chart patterns: the ones you actually name

  • “Double top”, “head and shoulders”, “bull flag”, “break of the trendline” — among the most-typed phrases in trading, and until now you could not say any of them here. The engine had a deep smart-money layer (order blocks, fair value gaps, liquidity sweeps) and no classical patterns at all, which is roughly backwards from what most people write.
  • Twenty-two patterns: double and triple tops and bottoms, head and shoulders and its inverse, ascending / descending / symmetrical triangles, rising and falling wedges, bull and bear flags, rectangle breaks, cup and handle, rounding bottoms and tops, trendline breaks, and rising and falling channels.
  • The pattern tells us the DIRECTION. A head and shoulders is a short and its inverse is a long — getting that backwards is not a near miss, it is the opposite trade — so you can just write “trade the head and shoulders” and it takes the right side.
  • It fires on CONFIRMATION, not on completion: the bar whose close breaks the pattern’s own neckline, trendline or flag edge. A chart pattern is the easiest thing in a backtester to cheat at, because the shape is only visible once it is over — so a swing does not exist to the detector until the bar you could first have known it was a swing, and nothing is ever painted back onto the bars it formed over.
  • Every pattern brings its own levels. Your stop can sit on the neckline the break actually happened at, and your target on the classical measured move, instead of a percentage someone had to invent. The trendline break deliberately has no target — its textbook target is “the next structural level”, which is a different question, and a made-up number would be worse than none.
  • “Any bullish reversal pattern” is one condition rather than eleven joined with OR.
  • Nineteen new runnable cards on the Templates page, one per shape.
New

The rulebook: circuit breakers, session rules and sizing

  • The rules a funded trader is actually held to. Portfolios have had most of these for a while; if you were running a single symbol you had a losing-streak breaker, a daily loss limit, a trade cap and a cooldown — and nothing else, which is a strange place to be given those are exactly the rules people are graded on.
  • “Stop after 4 winners in a row”. The mirror of the losing-streak breaker, and the one traders actually break: size creeps on a hot streak and one give-back erases the run. Now you can measure what standing down costs instead of arguing about it.
  • “Two losses and I’m done for the day”. Three different instructions hide behind nearly identical English, and they are now three different rules: “3 losses IN A ROW” never resets on a calendar; “2 losses today” is a count that clears at the day boundary; “down 5% on the day” is money. Two small scratches end a day under the second and barely move the third.
  • “Stop for the day once I’m up 3%”. Not a take-profit — that closes a position, this ends the session. It is the rule that stops a winning morning being handed back in the afternoon.
  • Loss limits and trade caps now take a week or a month, not just a day: a week of small losses trips a weekly limit that no single day would.
  • “Stop trading if drawdown exceeds 15% and resume once it’s back under 7%”. The resume level is the part that matters — without it a book sitting on the threshold flickers in and out of the guard bar by bar, taking a trade at 14.9% and going straight back into the hole.
  • “Skip the first 15 minutes after the open” and “nothing in the last half hour” — the two most-stated intraday rules in existence, anchored to the session you named rather than to midnight. Also “only the first five days of the month”, and “never hold over the weekend”, which is not the same instruction as an end-of-day exit.
  • “Size every trade to 1% daily volatility”. A fixed 10%-of-equity position is a completely different bet in a quiet market than in a violent one; this is the sizing that makes them the same bet. It needs no stop, which is the whole difference from risking a percent per trade.
  • “Half size after a loss” — the oldest discretionary rule there is, now testable. It reads the same streak counter the breakers use, so it can never disagree with them about what a losing streak is.
  • “When price reclaims the VWAP anchored to the swing low”. Fixed: asking for an anchored VWAP used to give you a ROLLING one — a different line, silently. They disagree most exactly when you are looking at them. Anchor to a swing, a session, a month, a year, or a date.
  • Nine new runnable cards on the Templates page.
New

Custom indicators: the JavaScript editor's half of the deal

  • Now that you can write an indicator in JavaScript rather than only paste in Pine, we went looking for what a custom indicator still could not DO — and found that the engine read your indicator in five different places, each with a slightly different idea of which comparisons it understood. They now all read it the same way, which is what makes everything below true everywhere: on the entry, inside a “then” step, as a cross-asset gate, and on the exit.
  • Fixed, and worth stating plainly: an exit written “when my score touches 60”, or “when it starts rising”, never fired. Not an error, not a warning — the position simply never closed, and the run looked like the idea did not work. Four operators were missing from the exit path entirely.
  • Fixed: an indicator whose plot holds a WORD rather than a number (a “state” or “regime” column) crashed the backtest as soon as it was used in an exit with anything other than “equals”.
  • “Exit when my @score drops 15 points” — a sized move, which is a different instruction from a level. A score that slides 90 → 75 has broken down even though 75 is still a good reading. Say it in points or in percent, and on the entry side over as many bars as you like.
  • “When @my_signal crosses the zero line” — a crossing with no direction named. Some lines matter whichever way they are crossed, and writing it twice with an OR is both longer and easy to get subtly wrong.
  • “Exit when @kit:line crosses below @kit:signal” — one plot of your indicator against another plot of the same indicator, on the exit as well as the entry. The exit reason names both plots, so the report tells you which pair fired.
  • A JavaScript indicator can now DECLARE things the engine was previously guessing from a sample of its own output. Mark one plot `primary: true` and a bare @reference lands on it every time — the old fallback was “the first plot with a value on this bar”, which on a bar where a marker prints is the marker. Give a plot a `min` and `max` and that is the scale you draw on, not the range one backtest happened to visit.
  • Name the values of a `state` plot — `states: { quiet: 0, squeeze: 1, expansion: 2 }` — and a strategy can say “when the regime equals squeeze” instead of “equals 1”. Name a state that does not exist and you are told which ones do, rather than being quietly matched to the nearest.
  • All of it optional. A Pine or CSV indicator has no author to ask, so it keeps the inferred behaviour unchanged.
  • Six runnable cards on the Templates page, one per shape, and the editor's starter file and autocomplete now show the new fields.
New

Portfolios: the professional stack

  • Twenty more things a shared-capital book understands, taken from what the best tools in the industry actually expose — fees, optimiser weightings, signal handling, tax, beta — and almost none of which a backtest normally models.
  • “Charge a 2% annual management fee” and “take a 20% performance fee” — every real vehicle charges both and almost no backtest shows either, which is exactly why fund gross and fund net are different products. The performance fee uses a high water mark, so after a drawdown the book must climb back past its previous best before another fee is taken: you are never charged twice for re-earning the same gain.
  • “Commission is $1 per trade” and “assume 5 bps of market impact” — the two costs a percentage fee cannot express. A percentage is invisible on a small position and a flat charge is brutal on it. Impact is charged in proportion to how much of the bar's volume your fill took, so unlike slippage it grows with the book: it is the term that makes a strategy stop working purely by getting bigger.
  • “Assume 30% tax on realised gains” — realised, not marked to market, so an open winner is untaxed. That single detail is the mechanism behind every hold-for-the-long-term argument, and running the same strategy with and without it is the clearest way to see what turnover really costs. A losing period withholds nothing and carries its loss forward.
  • “Weight the book by minimum variance” and “use the maximum Sharpe portfolio” — the two classical optimisers, alongside the constraints that make their output tradeable: cap any single weight, drop anything under a floor, move at most 20% of the book each month, and leave positions younger than 30 days alone.
  • “Carry signals forward for 3 bars” — this closes a real hole. A signal the book could not fund used to be gone forever, even if room appeared on the very next bar, which quietly turned a capacity constraint into a signal-selection rule nobody chose. It is a common reason a small book's backtest and its live results disagree.
  • “Require the signal to hold for two bars” and “only act on signals in the top quartile” — two ways to be fussier about what you act on, without touching the strategy itself.
  • “Keep beta to BTC under 0.5” — the market-neutral mandate written the way an allocator writes it. An exposure cap bounds notional, which is not the same thing: a book can be half invested and still move one for one with the market.
  • “Stand down when realised volatility is above 100%”, “exclude anything under $1”, “do not trade the first 30 minutes of the session”, “weight the book equally”, “never risk more than 2% on a trade”, “go to cash in December”, “do not compound the profits”.
  • Six more instructions are now refused out loud rather than quietly approximated: market-cap weighting and universe screening (both would put survivorship bias into every historical bar), VWAP fills, margin interest, a standing hedge leg, and dividend reinvestment. Each names the nearest control that does work.
  • Thirteen new runnable cards on the Templates page, and every fee, tax and commission the book pays is itemised on the result rather than buried in a single net number.
New

Portfolios: ten more things you can just say

  • A shared-capital book now understands the rules traders keep in their head rather than in their backtester — a hot streak, how many times an idea has been tried, what the book is already carrying, how far it is off its high, and the one bad trade that should end the session.
  • “Stop trading after 5 consecutive wins” — the mirror of the losing-streak breaker. A hot streak is when size creeps and one give-back erases the run; now you can measure what standing down actually costs instead of arguing about it.
  • “Only two attempts per coin” — a re-entry cooldown delays the next attempt, this ends them. Counted per symbol, and an attempt is only spent when a position really opens, so a signal the shared cash could not fund has not used one of your tries.
  • “No new positions while something is down more than 10%” — reads the worst OPEN position rather than the book, so it catches the one trade going badly inside a portfolio that looks fine overall. Nothing is force-closed.
  • “Pause new entries while the book is more than 10% below its high, resuming once it has recovered half the drawdown” — the softest of the three drawdown controls. It never sells anything; it only stops buying, and it comes back on the recovery rather than on a clock.
  • “Sit out the rest of the day after any trade loses more than 5%” — judged on that trade's own return, which is what a bad trade means at the desk. The daily loss limit measures a bad day as a share of the book; these catch different things.
  • “Always keep $10,000 in cash” and “close the book once it makes $25,000” — the cash floor and the profit target now take dollars, not only percentages. State both a percent and a dollar figure and the tighter one binds.
  • “Only one new position per bar” — bounds the burst when several correlated sleeves fire on the same candle. The strongest signal keeps the slot, and a refused name can still enter later.
  • “Only trade in the first five days of the month” — name the days you DO trade instead of hand-writing a 26-day blackout list. Both forms compose.
  • “Add 25% each time it drops another 5%, up to 3 times” — the arithmetic form of the average-down ladder. Always state the limit: a ladder with no end has no end, and the run will tell you what averaging down did to the drawdown.
  • Three instructions are now refused out loud instead of quietly approximated: a permanent hedge leg, a bid/ask spread filter (backtests run on candles, which carry no spread), and a minimum-invested floor (a signal-driven book can decline exposure but never manufacture it). Each names the nearest control that does work.
  • Fixed: “always keep at least 50% invested” was being read as a 50% exposure CEILING — the opposite instruction, applied silently. It is now refused with an explanation. Every real exposure-cap phrasing is unchanged.
  • Every one of these has a runnable card on the Templates page under Portfolio › Risk controls, and a blocked signal still shows up in the ledger with a reason in plain words.
New

MCP: the full workflow, agent-native

  • Any MCP agent (Claude, ChatGPT, Cursor and more) can now drive nearly the whole platform in plain language — discover, author, run, read, refine, validate, and export.
  • Discover & author: describe_capabilities teaches the agent the platform's vocabulary so strategies parse first time; rephrase_strategy cleans up a vague idea; list_examples browses the gallery.
  • Refine by regime: refine_context re-buckets a run's trades along new market regimes with no re-run, filter_by_context proves an edge by re-running gated on one regime, and get_context_trades shows the evidence.
  • Validate: get_overfit_verdict returns the Deflated Sharpe + PBO overfitting verdict for a run, and analyze_conditions gives forward-outcome base rates for a single entry condition.
  • Custom indicators: validate, lint and preview a Pine indicator against real data before saving.
  • Export: export_pine turns a strategy — or an existing run — into a TradingView Pine v6 script, listing anything Pine can't express.
  • Robustness: get_overfit_verdict returns a run's Deflated Sharpe + PBO overfitting call, honest 'insufficient_evidence' included.
  • Portfolios: get_portfolio_analysis surfaces a book's attribution, benchmark, Monte Carlo, walk-forward and out-of-sample; run_portfolio_sweep stress-tests a book across a parameter.
  • Market screener over MCP: scan the crypto universe, read the market-regime verdict and sector leaders, profile past winners, benchmark tokens, save filters, and create Telegram/email scan alerts.
  • History and automation: read a strategy session's edit history, tag and rename runs, and register signed webhooks — all from the agent.
  • Safety: billed re-runs and portfolio sweeps accept idempotency keys, a running sweep can be cancelled with unrun books refunded, and heavy screener reads are workload-capped.
  • The downloadable MCP server is now built from the hosted server's code, so it carries the full tool surface; new one-click prompts cover the market brief, portfolio check-up, overfit audit and TradingView export.
  • A smarter agent: workspace_summary gives a one-call briefing of your recent work, explain_parse reads a strategy back in plain English before it bills, explain_grade shows the scored pillars behind a grade, run history is searchable server-side, condition logs explain why a signal never fired, and the platform's interpretation doctrine ships as readable resources.
  • See the updated MCP reference for the complete, grouped tool list.
Fixed

Reliability & correctness sweep

  • Full platform bug audit with fixes across the backtest engine, billing, history, and the strategy editor.
  • Backtest engine: equity curves are now exact on liquidation and session close bars, profit target fills account for price gaps, and long runs split into chunks produce identical results at chunk boundaries.
  • Billing fairness: plan limits are checked before any credit is charged, and failed or blocked runs are refunded automatically.
  • History page: restoring a past run now brings back every strategy setting exactly as it ran, and pagination stays stable while you browse.
  • Editor correctness: editing a condition fully replaces its old settings instead of leaving stale values behind, and stop settings on both sides of a trade are preserved.
  • Dependency security updates: 0 known vulnerabilities.
Improved

Pine indicator graphics fidelity

  • Custom Pine indicator graphics (lines, boxes, labels, and bar colors) now render faithfully on terminal and editor charts.
Fixed

Parser accuracy

  • Plain moving average cross strategies are no longer rewritten into nested MA of MA forms.
  • Pyramiding re arm behavior fixed, with full partial fill display in results.
Improved

Performance pass

  • Backtest engine hot path optimizations: loop invariant hoisting, conditional candle assembly, and parallel auxiliary data loads.
  • Smaller dependency footprint for faster installs and deploys.