Zorro is arguably one of the most stable and robust development platforms. We're
going to great lengths for keeping it that way. New implemented functions must pass
several test levels for making sure that they work as described. Any new Zorro release
is beta tested by hundreds of strategy developers and users, thus ensuring that it has no obvious
or severe bugs. Still, software is never bug-safe (click for proof).
Below's a list of all bugs ever found in any Zorro release.
Since Zorro serves as a frontend to your script, it's no problem to let it behave
strange or even crash. This is not a Zorro bug - even if you're sure that it is so. Read
under Troubleshooting how to fix errors and crashes of your script.
If you need help, subscribe a
and contact Zorro Support. If you've encountered one of the real Zorro bugs
listed below, use
the described workaround or get the latest fixed version on the
Download page. If you found
a previously unknown bug in the current Zorro release, please contact
firstname.lastname@example.org with a description of
the bug and the script, log files, and data needed for reproducing it. Any
confirmed Zorro bug is normally fixed within 2-3 days.
Zorro 2.35.9 (current release) list of bugs
- Partially closing was not supported in fill mode 3 (implemented in
- The tdm and tom functions assumed
4-day weeks when StartWeek/EndWeek covered
only 4 full days (fixed in 2.36.7).
- The Binance plugin
sometimes rounded the fill or order limit amount sometimes wrongly (download the
- Under some circumstances the log file did not record balance
and equity changes (fixed in 2.36.6).
Zorro 2.30 list of bugs
- The strmid function returned the last character when
the length of the given string was exceeded (changed to an emptry string in
- When daylight saving mode changed inside a bar, the end
time of the bar had still the same daylight saving mode as the start time
(fixed in 2.34.2)..
Zorro 2.25 list of bugs
- Trades with entry limit but entered by a TMF were treated in the
backtest as if the entry limit was hit (fixed in 2.30.4; workaround: set
TradeEntryLimit = 0 in the TMF before entering the trade.
- A MT5 server was reported to return order tickets that
exceeded the int range of the MQL5 library. Zorro version 2.30 comes
with a new MQL5 library that supports 64-bit order tickets.
- The tock function did not run until the
end of the first bar (fixed in 2.27.3).
Zorro 2.20 list of bugs
- The roundto function rounded inaccurate with certain
step values (fixed in 2.21.6). Workaround: round x with step*floor(x/step+0.5).
- If a Zorro process was externally closed with zClose, a
new process with the same Id could not be opened (fixed in
Zorro 2.15 list of bugs
- In the performance report the first January return was sometimes printed under
"December" (fixed in 2.16.3).
- The timeOffset function could be 1 bar off when the given time and the bar end time were identical (fixed in
- When trading simultaneously with several MT4/MT5 brokers, only
timestamps of the first broker were converted to UTC (fixed in 2.19.2).
Zorro 2.12 list of bugs
- FXCM recently ceased support of previous FxConnect API
versions. A new API and DLL package (included in 2.14.7) are required for
further trading with FXCM. Details on the
Zorro 2.08 list of bugs
- Stooq.com recently ceased delivering price data (changed to
Zorro 2.03 list of bugs
- When a trade was partially closed, its rollover amount displayed in the
CSV list was from the whole trade, not only from the closed part (fixed in 2.06.2).
Zorro 1.96 list of bugs
- The ndow function was 1 day off for some dates
(fixed in 1.98.4).
- FOP strike prices were not automatically rounded, which
could cause small differences such as 81.00001 instead of 81.00000 (fixed
- In broker arbitrage scripts, the new brokerAccount function
returned only the balance of the first broker when brokers were connected through
MT4 (fixed in 2.01.2).
- In some rare situations, externally closing a trade on MT4 was not detected
by Zorro (fixed in 2.02.2).
Zorro 1.88 list of bugs
- In combination with broker arbitrage or multiple price sources, slashes
'/' in the symbol prevented downloading prices (fixed in 1.93.7).
- The http_result function stored the string terminator byte
at a wrong position (fixed in 1.95.5).
- BarPeriod snapped back to the next slider position when
a script with nonstandard bar periods was started (fixed in 1.96.1).
- The TradeDate variable was wrong defined (fixed in 1.96.4).
Zorro 1.84 list of bugs
- The minute function didn't work in combination with
NOW (fixed in 1.84.2).
- The IB plugin returned sometimes no balance (fixed in 1.88.1).
- The MT4/MT5 bridge did not resume trades with some particular
brokers after a Zorro restart (fixed in 1.88.0).
Zorro 1.74 list of bugs
- Rollover calculation was sometimes missing 1 day (fixed in 1.78.1).
- wdate discarded fractional seconds in a tick function (fixed
- A last_trades loop enumerated only the open trades (fixed
- Filling empty bars with ticks from the previous bar could cause delayed
ticks (fixed in 1.82.4).
- The MT5 plugin sometimes returned a wrong margin requirement
(fixed in 1.83.1).
Zorro 1.66 list of bugs
- The Security setting in Zorro.ini was
too secure (fixed in 1.71.1).
- Clicking [Result] after plotting a histogram plotted
the chart in a wrong size (fixed in 1.71.8).
- The image in the live chart was sometimes not updated at every bar (fixed
- The variables rMomentum, vDominantPeriod,
and vDominantPhase were not updated (fixed in 1.72.6).
- M1 data downloaded with the IB bridge were off by 1 minute (fixed in 1.73.6).
- Profit of option positions that were opened and immediately
closed was recorded without ask/bid spread (fixed in 1.74.1).
- The max down time was too long on some charts (fixed in
- A wrong Z3 system was included in an early 1.74 release
(fixed in 1.74 release of Feb 2, 2018).
Zorro 1.60 list of bugs
- The asset list from Accounts.csv was not always loaded
at the begin of a strategy (fixed in 1.61.3; workaround: use the
assetList() command or define the asset list in Z.ini).
- The Z8 strategy loaded asset prices twice and thus was
more likely to hit the Stooq daily download limit (fixed in the current 1.60.1
- Partially closing and closing less than 1 contract via MT4 bridge
did not work with some brokers (fixed in the current 1.60.1 version).
- Entry was ignored in the backtest when EntryDelay
was set at the same time (fixed in 1.61.4).
- Exit Slippage was ignored in the backtest when trades hit
a Stop or TakeProfit limit (fixed in 1.62.1).
- TrailStep was ignored when many trades were opened in parallel
(fixed in 1.62.4).
- The Median function was off by one index step for data
arrays with even length (fixed in 1.62.8).
Zorro 1.56 list of bugs
- Plot lines of multiple assets were sometimes assigned to the wrong asset
(fixed in 1.59.2).
- Balance curves in training mode were exported in a wrong format, which prevented
2015 Trend Experiments (fixed in 1.59.3).
- Trading options and underlying at the same time could automatically close
positions when hedging was disabled and/or trades were
partially closed (fixed in 1.59.6).
- If a trade could not be closed for 2 working days, it was automatically
removed from the trade list, which could cause an orphaned trade in some situations
(fixed in 1.59.9).
- The Time in Market parameter was wrong in WFO Tests (fixed
Zorro 1.54 list of bugs
- Some bar offset / bar zone combinations with daily bars caused the Friday
bar to be skipped (fixed in 1.55.1).
- The Risk variable for limiting the trade risk did
not consider commission (fixed in 1.55.9).
- Backtests starting in January sometimes had several additional days in the
lookback period (fixed in 1.56.5).
Zorro 1.50 list of bugs
- Symbols not beginning with a letter were ignored (fixed in V 1.51.1).
- The ZigZag indicator sometimes plotted wrong lines (fixed
in V 1.51.7).
- The total rollover cost was not calculated in live trading mode when the
broker API did not provide accumulated rollover for trades (fixed in V 1.51.8).
- Since about October 15, from time to time trades are rejected by Oanda due
to a too high precision of the stop loss (fixed in V 1.51.9).
- Slippage simulation was not 100% neutral in some cases,
but affected by the price slope inside the current bar (fixed in V 1.52.0).
- MT4 bridge V1.11 did not properly filter away price outliers by some MT4
servers, which could cause price and profit spikes on the chart (fixed in V1.52.2).
- Setting a new stop loss of an open trade with exitLong/exitShort
required that the trade already had a stop loss; it did not work for trades
with no stop (fixed in V1.52.4). Workaround: enter the trade with a distant
stop when you want to modify the stop loss afterwards with exitLong/exitShort.
- Under some circumstances, a trade with prices belonging to a different asset
was painted in the chart (fixed in 1.52.7).
- Partially closing trades could close the whole trade under some circumstances
(fixed in 1.52.7).
- The day functions returned a wrong value on time zones
containing a UTC midnight transition (fixed in 1.54.4).
Zorro 1.46 list of bugs
- It was a bit difficult to set up the Capital slider in
Z8 (improved in Z8.2).
- If a file "History\XXX_2016.bar" was present
for one of the Z8 assets, Z8 attempted to download historical data from IB,
which consequently failed (fixed in Z8.2). Workaround: if you somehow generated
a "XXX_2016.bar" file for a Z8 asset, delete it.
- Sometimes Z8 prints an error message "Can't
open Z8.par" at startup (fixed in Z8.2). The message can be safely
- The Oanda plugin sometimes displayed erroneous error messages "XXX
not available" (fixed in V 1.47.2). The messages can be safely
- Oanda could not close many trades at the same time under some circumstances
(fixed in V 1.47.6).
- The annual return was wrong calculated when the trade volume was less than
1$ (fixed in V 1.47.7).
- Depending on the scale of the chart, some DOT elements
were not visible (fixed in V 1.49.0).
- PlotBars was not compatible with plotGraph
(fixed in V 1.49.0).
- When multiple time frames and time zones are used, the local time difference
to previous bars was sometimes off by 24 hours (fixed in V 1.50.4).
- When WFOPeriod was set, the asset price was 0 in the last
bar of the lookup period in live trading under some circumstances (fixed in
Zorro 1.40 list of bugs
- Clicking [New Script] produced an erroneous error
message in the editor (fixed in 1.40.2). Workaround: Ignore the error message
and click [New] in the editor.
- When terminating a session and answering "Yes" on "Close
all open trades?", the trades are closed, but are wrongly indicated as
still open with an error message in the message window (fixed in 1.40.2). Workaround:
Ignore the error message and delete the .trd file when closing
- RiskVal was wrong when trades are partially closed (fixed
- MT4 bridge version 1.8 caused price outliers with some
brokers and asset combinations (fixed in bridge 1.9).
- Running R functions did not work under some circumstances
(fixed in V 1.44.1).
- The FAST flag did not work in combination
with a TMF (fixed in V 1.45.0).
- Trading a portfolio (f.i. a Z system) with the Oanda plugin caused a
"Rate limit violation" error message on some computers
(fixed in V 1.45.1).
- Assets that are traded only 8 hours per day (such as GER30) sometimes got
an insufficient price history in the backtest, causing the lookback period to
end after StartDate (fixed in V 1.45.1).
- The Assets.csv file was generated with Linux line-end characters,
which could cause problems in some cases when subsequently using it for a new
asset list (fixed in V 1.45.1).
- The ldow function returned a wrong value when offset
was 0 (fixed in V 1.45.3).
- On 24-hour bars the bar period did under some circumstances not remain constant
when the price server time deviated from the PC time (fixed in V 1.45.3).
- NEW|DOT in a plot command didn't open a new chart (fixed
in V 1.46.1).
- The exported balance curve was clipped at the equity peaks (fixed in V 1.46.1).
Zorro 1.34 list of bugs
- The last parameter value was not displayed in the parameter histograms (fixed
- Testing multiple assets could cause a crash at the end of the simulation
when price data was missing (fixed in 1.35.1).
- Opening or closing a trade in a TMF that was triggered by the entry/exit
event of another trade used the current tick price instead of the entry/exit
price of the triggering trade. This caused a inaccuracy that could sum up to
a large amount at the end of the simulation (fixed in 1.35.1).
- The Win Payout for binary options was wrong (fixed in 1.36.5).
Zorro 1.28 list of bugs
- Average and maximum trade duration in the performance report was wrong calculated
and slightly too high (fixed in 1.31.4).
- Virtual hedging gave inaccurate simulation results when trades are entered
inside bars (fixed in 1.31.4).
- The SHUFFLE flag did not work for THLOC ticks (fixed in
- Graphic symbols on a histogram, as with plotMAEGraph,
appeared on wrong positions or not at all when the lookback period was too long
(fixed in 1.33.5).
Zorro 1.26 list of bugs
- The tom function returned a wrong number of days (fixed
in Zorro 1.28.3).
- The AGC alpha value was wrong calculated from the time
period (fixed in Zorro 1.28.3).
- NET trade statistics and WFO cycle results were sometimes wrongly displayed
in the performance report (fixed in Zorro 1.28).
- Under certain circumstances, closing a trade virtual hedging mode closed
the corresponding pool trade instead (fixed in Zorro 1.28).
- Pending trades were sometimes not entered when a stop or takeprofit distance
was set (fixed in Zorro 1.28). Workaround: use absolute price limits for stop
or profit targets with pending trades.
- Hedge = 5 did not work under some circumstances when multiple
assets were used (fixed in Zorro 1.27). Workaround: use Hedge = 4 for virtual
hedging with multi-asset systems.
- The -a command line option did not work under some circumstances
for changing the asset (fixed in Zorro 1.27). Workaround: set the asset in the
script with the asset() function.
- The displayed slippage in the live trading statistics was wrong when phantom
trades were used (fixed in Zorro 1.27).
- The http_transfer function did not always return NULL when
the transfer failed.
Zorro 1.24 list of bugs
- The broker API returned zeros for all asset parameters in the first bar
(fixed in Zorro 1.26). This also affects the Download script.
- The ZMA indicator always used a time period of 1 (Zorro
1.18 and above; fixed in Zorro 1.26).
- The ATRS indicator only returned the range of one period
(fixed in Zorro 1.26).
- The default value of $1 for Margin was too high for trading
single lots of assets with a lot value below 1$. This did not affect trading,
as single lots can not be opened with such assets anyway.
- Anchored WFO opened no trades in the training cycle under some circumstances.
- If a trade algorithm skipped all short trades, or if all trades are won
and no one was lost, the OptimalF factors were wrong in the
performance report and in training.
- Virtual hedging could cause an endless loop or wrong trade handling in the
backtest under some circumstances. This bug did not affect trading.
- PlotDate did not set the date for plotGraph()
- Hedge = 5 displayed wrong portfolio statistics when no
algo identifiers were used.
- The frechet function was not independent of the
- The FisherInv function had a superfluous 'Period'
- The plotMAEGraph function produced an empty graph.
- After testing an executable script in .x format with Zorro
S, the script had to be selected again with the Strategy scrollbox.
Zorro 1.16 list of bugs
- Virtual hedging and equity curve trading
didn't work at the same time under some circumstances (fixed in Zorro 1.20)
- The Simulate.c script contained a wrong variable name.
Fix: Edit the script and replace "Hedging" with "Hedge".
- The .csv files with the trade records got a wrong file
names in [Test] mode when oversampling
was used (Zorro 1.12 and above; fixed in Zorro 1.17). Simply ignore the superflous
- Virtual Hedging started in [Test]
mode with a wrong net trade size when oversampling was used
(fixed in Zorro 1.17).
Zorro 1.12 list of bugs
- Phantom trading performance was not listed in the trade statistics parameters.
- Weekend = 1 was not properly supported in Trade mode.
- When more than 10 signals are used for the decision
tree, the generated .c file contained wrong names in the decision functions.
- When a perceptron signal did not contain useful
information, the signal was missing in the generated .c file, causing a syntax
- When trading with FXCM, the displayed equity and some trade profits are
wrong due to bugs of the FXCM ForexConnect API. This does not affect trading,
but affects the display window. Zorro version 1.16 can now correct the wrong
values with the SET_PATCH command.
- The MT4 bridge 'hung' when the script attempted to download prices of a
nonexisting asset (all Zorro versions; fixed in version 1.14).
- On nanolot accounts (1 lot = 100 contracts) the rollover fee was 10 times
too high in the simulation (all Zorro versions; fixed in version 1.14).
- Downloading a previously unsubscribed asset causes an Error 054 message
(versions 1.10 and 1.12; fixed in version 1.13).
- The included workshop 8 scripts were for version 1.10 and don't work anymore
with 1.12 due to an internal change (fixed in version 1.13).
- The FXCM API could crash after one or more weeks depending on the PC configuration.
This caused a "No Data" message in the Zorro window
and possibly a subsequent crash of the script. Zorro 1.14 contains a new FXCM
plugin where this bug is supposedly fixed.
Proof of unprovability
of bug-free programs
You can never be sure that an arbitrary program is bug-free and won't crash -
for instance, freeze by an endless loop - with all possible parameters that it processes.
In the case of Zorro, 'all possible parameters' means all possible scripts and data.
Alan Turing found the proof 80 years ago. Consider a function BugFree
that can test whether a program with certain entry parameters crashes or not.
BugFree looks like this (in pseudo code):
if(Program does not crash with given Parameters)
Of course BugFree must not crash itself, but terminate properly
even when the tested Program crashes. Now we define a recursive
function TestMe that calls BugFree:
This evil function only terminates when Program does not crash
when it gets itself as a parameter (this means here a Zorro running its own source
code). Otherwise TestMe calls itself endlessly and freezes. If
you now call TestMe with itself as a parameter, you'll get a contradiction:
This call does not crash only when it crashes. Therefore a function like
BugFree cannot exist. Therefore we can never know if Zorro won't
crash with your script and data before actually running it.
latest version online