Troubleshooting
This page is organized by what you see, not by what subsystem caused it. Start from the symptom. The causes and fixes follow.
Written By Axiom Admin
Last updated About 1 month ago
Troubleshooting
This page is organized by what you see, not by what subsystem caused it. Start from the symptom. The causes and fixes follow.
When something goes wrong with a strategy, the problem usually falls into one of four categories:
Configuration error β something in your YAML, expressions, or settings is wrong
Platform behavior β the strategy tester is doing what it is supposed to do, but the result is not what you expected
Realism mismatch β the backtest shows something that real trading would not reproduce
Genuine strategy limitation β your rules are working correctly, and the results are honest
Knowing which category you are in saves hours of debugging in the wrong direction.
"Strategy Inactive" and the strategy will not run
This is the most common first-run problem. The error table shows red text and the tester produces no trades.
Debugging sequence:
Is the consent checkbox checked?
Read the error table messages β they tell you what is wrong and where.
If the error message references a YAML section, re-check that section's structure.
If the error references an expression, check that every token name in the expression exists in either the built-in token list or your custom tokens.
Zero trades when you expected trades
The strategy shows "Strategy Active" in green, but the trade list is empty and the equity curve is flat.
Debugging sequence:
Is the direction mode correct for the YAML sections you defined?
Do the schema summary counts match your intent?
Does the expression diagnostics show your entry trigger evaluating as EVAL with reasonable values?
Are the setup state tokens transitioning correctly?
Have any risk limits been hit?
Unexpected trade count (too many or too few)
The strategy is producing trades, but not the number you expected.
Too many trades
Too few trades
Results changed without any changes to YAML or settings
You are looking at the same strategy, the same settings, and the same chart β but the results are different from yesterday.
This category is usually platform behavior, not a configuration error. The results changed because the inputs changed.
What to do about it: If the change is small and concentrated in the most recent bars, it is almost certainly a recalculation effect from new data arriving. This is normal and expected. If the change is large or affects trades deep in the history, check whether you are using TIMENOW or bar-state tokens in conditions β those tokens are the most common cause of historical recalculation divergence. If you need stable historical results for comparison, avoid tokens that depend on when the script runs rather than what the bar contains.
Expression shows SKIP or NOT_USED in diagnostics
Custom token shows unexpected value
A risk limit halted trading and you did not notice
This is the most subtle problem in the tool, and it wastes more debugging time than any other. The strategy was running, producing trades, and then it stopped β not because the entry conditions changed, but because a circuit breaker triggered. There is no popup. There is no special alert. The error table may still say "Strategy Active." Trading just stops.
The reason this is so easy to miss: the symptom looks identical to "the entry conditions stopped being true." You look at the YAML, check the expressions, verify the setup states, and everything seems correct. The strategy should be trading, but it is not. The problem is upstream of all of that β a risk limit shut the door before any of your entry logic was evaluated.
How to detect it:
Look at the trade list for a point where trades stop appearing mid-window. Note the date and the equity level at that point.
Check the strategy's equity curve: was there a drawdown reaching the Max Strategy Drawdown threshold just before trades stopped? Was there a cluster of losing days matching the Max Consecutive Loss Days setting?
Look at the fill count for the session where trading stopped. If it matches the Max Intraday Filled Orders setting, the order cap was the cause.
Definitive test: Temporarily raise all four risk limits to their maximum values and retest. If new trades appear in the period where trading previously stopped, a risk limit was the cause. Then lower each limit back one at a time to identify which specific circuit breaker triggered.
What to do about it:
If the risk limit triggered appropriately (the strategy was actually losing dangerously), the circuit breaker did its job. The problem is not the limit β it is the strategy. A strategy that hits a 20% drawdown threshold is telling you something about its risk profile that the equity curve before the halt might have hidden.
If the risk limit triggered because of the strategy tester's simulation assumptions β for example, simulated slippage caused a deeper drawdown than real trading would, or the intraday order cap was reached because the tester processed more fills on a single bar than real execution would produce β adjust the limit to account for the simulation model, or adjust the simulation settings to be more realistic. But be honest about whether you are adjusting for a genuine modeling mismatch or just loosening the limit because you want more trades.
If you are building a multi-setup strategy with independent setups that have different risk profiles, remember that the circuit breakers are strategy-level, not setup-level. One bad setup can halt all of them. There is no way to scope a circuit breaker to a single setup.
See Rules & Risk and Settings for details on how risk controls interact with the engine.