Skip to main content

AI limitations

Who it’s for
Anyone whose request was refused, narrowed, or answered with a question
Assumes
You have read Strategy generation process

The builder refuses rather than guesses. This page is the complete list of what it refuses, why, and what to say instead.

A refusal is a feature. The alternative, a model confidently producing something adjacent to what you asked for, is worse in exactly the situations where it matters most, because a plausible-looking wrong rule backtests and deploys as happily as a correct one.


The four refusal reasons

A compile failure is a typed value, not an absence. That matters because three different problems would otherwise be indistinguishable:

The phraseThe problem
"buy on strong momentum"A phrase we do not know
"buy when price is near the 20 EMA"A real comparison, but no threshold
"buy unless RSI above 70"An exception scope we cannot express

These are not the same failure and they do not want the same response.

UNKNOWN_PHRASE: no pattern matched

The ordinary deferral, and the cheapest thing that can happen after a miss. A language model may still read it, so it is retried, narrowly, only this span, with everything else frozen.

Triggers onWhat happens
"buy on strong momentum"Retried once. If the second pass reads it, it proceeds
Unusual phrasings of a supported ruleUsually resolves
A genuinely novel constructFalls through to a question

What to do: nothing, usually. If it comes back a second time, restate the rule in terms of an indicator and a comparison.

MISSING_THRESHOLD: a real comparison with no number

The structure is understood; only the value is absent. Cheap to resolve and safe to default, which is why it is separated from UNKNOWN_PHRASE.

Triggers onWhy
"near the 20 EMA"Near by how much?
"strong volume"Above what?
"high RSI"Above what level?
"close to the previous high"Within what distance?

Words that trigger it: near, around, about, approximately, close to, strong, weak, high, low, heavy, light, significant, decent, good.

One subtlety worth knowing. The check does not simply look for any digit. In "near the 20 EMA" the 20 is the indicator's period, not the level the price must reach. Indicator periods are subtracted before the threshold search, so that span is correctly identified as missing a threshold rather than treated as fully specified.

What to do: state the number. "Within 0.5% of the 20 EMA". "Volume above 1.5× the 20-period average".

AMBIGUOUS_SCOPE: never retried

Words that re-scope everything around them: unless, except, except when, other than, apart from, rather than.

The compiler bails on these deliberately, and does not retry, because the failure mode of guessing is an inverted rule that looks plausible.

Consider: "buy when RSI crosses 55 unless volume is falling." Does "unless" negate the whole entry, or only the RSI clause? Both readings produce a valid strategy. One of them is the opposite of what you meant, and there is no way to tell which from the backtest.

So you are asked.

What to do: state the rule positively. Instead of "buy unless RSI is above 70", say "buy when RSI is between 40 and 70". Instead of "enter except during the first 15 minutes", say "enter between 09:30 and 15:15".

NOT_REPRESENTABLE: refused, and retrying cannot help

No field on the strategy specification can hold what you asked for. The only truthful answers are "we cannot do that" or an explicit hand-off, never a silently substituted approximation.

Known cases:

You asked forWhy it cannot be expressedNearest thing available
A mark-to-market breaker in rupees, at build timeThe strategy object has no field for itConfigure mark_to_market_loss as an execution gate after deploying
"Keep 20% of capital in cash"No cash-reserve field existsAllocate 80% of the capital to the strategy instead

The list is short because most trading rules are representable. When you hit one of these, the message names it rather than approximating.


Scope limits: what the platform will not build

Distinct from the refusal reasons above. These are about coverage, not language.

Forex is out of scope

The builder will not create an FX strategy. FX OTC instruments and an adapter exist in the platform, but the user-facing picker is disabled by default and the AI's own scope statement excludes forex.

The reason is regulatory rather than technical: retail OTC forex on offshore venues raises questions under FEMA and RBI rules that are separate from equity or crypto. See Regulatory position.

Derivatives: buildable and backtestable, not live-tradeable

Futures and options are supported by the builder, NSE index and stock futures and options, and crypto perpetual futures. Named multi-leg structures are supported: straddle, strangle, vertical spreads, iron condor, butterfly, covered call.

Live derivative entry is refused by the execution engine, because the live exit path is not implemented and a capability that can open a position it cannot close must not be reachable. So you can build, backtest and paper-trade derivatives; you cannot trade them live. See Derivatives.

Instruments outside the universe

An instrument not in the platform's universe is refused with the supported set shown, grouped by category. This is a data-coverage limit, not a language one, see Instruments.

Backtest window floor

No backtest can start before 1 January 2024. Requesting an earlier start returns the earliest supported date rather than silently clamping. See Choosing a test period.

Timeframes

Any well-formed interval from 1 minute to 1 day is accepted. The engine fetches 1-minute data and resamples, so arbitrary intervals work, 2m, 7m, 45m, 4h are all valid, not just the curated presets. Anything outside 1m-1d is refused with both bounds stated.


Limits of the AI as a component

Being explicit about what the builder is not:

It does not know your account. No balance, no positions, no P&L. The state it receives is a bounded projection of the strategy conversation and nothing else. It cannot size a position against your real capital.

It does not evaluate whether your idea is good. It builds what you describe. A well-constructed strategy expressing a poor idea passes every check.

It does not remember across sessions in the way you might expect. It sees the last six non-system messages, truncated, plus the resolved strategy state. It is not reading your whole history.

It cannot invent an indicator. Every value it produces is parsed against the engine grammar before insertion, precisely so a fabricated indicator name cannot reach a formula. See Validation.

It will not tell you what to trade. A dedicated refusal path handles requests of that shape. See What the AI will not do.


Known guard limitation, stated plainly

The reply guard that catches buy/sell phrasing and overpromise language currently applies to conversational intents only: general_chat and clarification. Replies on other intents, including strategy explanation and backtest narration, take a path with no content check.

The control exists and is well built; its scope is narrower than its purpose. It is documented here rather than left for you to discover, and the remedy is on the compliance roadmap. In the meantime: a statement about expected outcomes in a backtest narration is not a platform guarantee, and the risk disclosure applies regardless of how a reply is worded.


Quick reference

SymptomReasonFix
"I could not read near the 20 EMA"MISSING_THRESHOLDState the distance
A question about what "unless" applies toAMBIGUOUS_SCOPERestate positively
"The platform cannot express a cash reserve"NOT_REPRESENTABLEReduce the allocation instead
"Forex is out of scope"Scope limitNot available
"Live F&O entry is refused"Safety gateBacktest and paper only
"Backtests are supported from 01 Jan 2024"Data floorChoose a later start
"That stock isn't in my universe yet"CoveragePick from the shown set
A safety boundary instead of an answerAdvice requestSee safety boundary