third edition of the
Black Book contains new Zorro strategies for trend and
counter-trend forex trading, and two new chapters about
stock and options trading. The new scripts can be downloaded
here also with the password from earlier editions. Zorro
2.08 or above is required for the new systems.
April 2019 | Zorro 2.08 released
new Zorro version 2.08 is
now available on the Download
page. Zorro 2.08 contains the new Python bridge, an email
function, more functions for options, and has a smaller
memory footprint for low resolution backtests. The full list of new features can be
Feb 2019 | 30,000 Zorro downloads
The sum of all Zorro download
requests so far, with spam filtered out, has reached 30,000
this month. We don't know how many of them are active Zorro
users - maybe some found quickly that coding and algo
trading was not for them - but we still think that this is
an impressive number for a specialized development tool.
Dec 2018 | Price Probability Distribution
A new article on
Financial Hacker illustrates the algorithm behind the
contractCPD market sentiment function and its use in a simple trading system.
Updating Zorro 2.03 to Zorro 2.08 / 2.10
You can update a live trading Zorro instance without interrupting the
trading process. Please see under Trading
how to update a live system.
A syntax error with
a script that worked in the previous version is usually caused by a variable,
function, or definition that had accidentally the same name as one of the
newly added variables, functions, or definitions. If you get a different
backtest result, compare the logs; differences are usually
caused by updated price histories, asset parameters, or different
backtest periods. Testing a Z system requires recent
price data, so make sure to get current historical price data from the Zorro
download page or with the Download script.
If you've directly modified Zorro.ini or Z.ini,
your modifications will be overwritten by the installation; for
Z.ini you can use individual .ini files (Z1.ini,
Z2.ini, etc.) that won't be overwritten, and for
Zorro.ini use ZorroFix.ini for keeping
CONTRACT pointers of the COMBO
struct have been renamed to Leg in version 2.08.
A negative series length can be used for generating
static, non-shifting series.
The ZigZag indicator was added to the indicators list.
Machine learning models and script parameters can now be trained at the
same time (see Training). In the previous version
this was only possible for the integrated machine learning methods, but not
for the general NEURAL method.
The bar function allows user-defined special bars
such a Range Bars or Renko Bars.
Training parameters now really produces a HTML file with parameter histograms
(in the previous version this was not yet fully included).
The R lectures by Harry Georgakopoulos have
been included in the Zorro documentation.
Zorro will now detect margin calls when Capital is
The seed function can initiate a deterministic
random number sequence.
The HH and LL functions now also
accept a bar offset.
The Ichimoku indicator was added to the collection.
The strx function replaces sub-strings in a string.
The TO_FILE and TO_ANY
print target prints messages to the log file and window in all modes.
The TICKS mode was changed. Ticks are now executed
in the order of their time stamp, not sorted by asset or trade as before. This
makes testing slower, but removes the special restrictions for tick functions,
TMFs, and virtual hedging. The old testing method can still be used by setting
the FAST flag.
The rev function reverses a series so that it now
starts with the oldest data.
The SHUFFLE flag randomizes a price curve and
thus helps determining if profit is caused by a real edge or by artifacts or
The BINARY flag enables the simulation of binary
Training now plots all parameter charts in a
HTML page, also for portfolios and WFO.
Zorro 1.30 (released April 2015)
The OptimalFRatio variable modifies OptimalF
factors for preventing large component margin differences in portfolio systems.
For scalping strategies, bar periods down to
100 ms are now possible with Zorro S. The BarPeriod variable
is now of type var instead of int (check possible
compatibility issues, f.i. in print/printf statements).
Asset specific parameters can be stored in the AssetVar
All Z systems can now be retrained with Zorro
S by clicking the [Train] button (even while trading).
Price history of all assets from 2008 and above must be available in the
History folder. The recent prices are updated and the parameters
of the last WFO cycle are trained. Retraining the Z systems is normally not
necessary, but was requested by many users.
Several small improvements have been implemented in the
Z systems, among them different OptimalF
factors for the backtest and for live trading, and a different profit lock method.
A chart with the current equity curve and other information is now included
in the trade status page.
If the trade volume is controlled by setting both Margin
and Lots, the Lots variable now determines
the minimum number of lots per trade. Trades can be automatically skipped when
Margin is below the minimum.
The backtest can now use T1 (tick based) historical
The assetHistory function can now be used
to produce T1 price history files.
The seconds function is now of type var
instead of int (check possible compatibility issues, f.i. in
print/printf statements). Its fractional part contains fractions of a second
in milliseconds precision.
The user-supplied tick
function can be used to evaluate incoming price quotes.
The AutoCompile flag determines whether scripts are
always compiled, or only when they were modified.
Plot names beginning with '#' won't appear in the
The test performance can now be further evaluated with the user-supplied
The UO (Universal Oscillator) by John
Ehlers was added to the indicator library.
The Risk column of the status page
now displays the current risk of a trade instead of the initial risk.
Zorro 1.28 (released February 2015)
The WebFolder variable can now be
set up globally for displaying live trade status on a web site.
The strtext function can be used to read strings
from an .ini file.
The AGC and EMA functions
now also accept an alpha parameter instead of a time period.
Some Zorro properties - for instance, the automatic deleting of old log
files - can now be set up in the Zorro.ini file.
The commission per asset can now be set up in the AssetsFix.csv file and by script in the
Commission variable. The simulation now simulates a
spread/commission account, instead of a pure spread account.
In the SNB floor removal aftermath, many brokers reduced their maximum leverage
from 400:1 or 200:1 to 100:1. The simulated default account (AssetsFix.csv)
was also changed to 100:1 leverage, which affects the profit of most systems.
The Z4 and Z5 systems are expired and
have been removed from the strategy pool.
The Z3 system now also got an equity curve trading
The currently profitable and suspended components of the Z12
system are now displayed in a asset/algo matrix with
green and red rectangles.
Zorro 1.26 (released October 2014)
The number of open lots per asset can be evaluated with the
LotsPool and LotsPhantom
The Market Meanness Index (MMI) was added to the indicator
Haiken Ashi prices (HA) were added to the indicator
The Z systems have been improved and retrained. New algorithms have been
added to the Z4 and Z5 systems for working with very low price volatility.
Zorro 1.24 (released June 2014)
The AssetFrame variable can be used to skip
quoteless bars of assets in a portfolio system.
The TradeCosts script lists the relative trade
costs of all main assets.
The Script scrollbox now 'remembers' the last selected
Hedge mode 5 now minimizes the number of open trades
by closing trades partially if required.
The PlotDate variable can be used to zoom the
chart to a certain date.
The print function can print to various targets,
f.i. to a message box or to the performance report.
Zorro now only logs in to the broker when in trade mode. In test or train
mode, missing assets or price data will produce an error message. The
Download script now needs trade mode for updating
prices or asset data.
The exec function can be used to open an external
program, document, URL, or batch file.
A Monte Carlo plugin is now available for a
Monte Carlo analysis of strategy scripts and external trade lists.
The annual return is now calculated from the maximum margin instead of the
average margin. This produces slightly more pessimistic returns.
The R2 coefficient that measures equity curve linearity
is now included in the performance report.
A small example script for converting .csv price history
files to Zorro's .bar format was added (needs the file_write
The History string can be used for selecting between
different sets of historical data files.
The file_write function can be used to store the
content of a string, series, or array in a file.
The NumInRange function can be used to generate
price distribution statistics while trading.
The ShannonGain indicator calculates the expected
gain of the next bar period, based on Shannon probability.
A description of using NeuroShell™ and other DLL-based indicators
for Zorro was added to the conversion chapter.
Trade management functions (TMF) can now be triggered
by entry or exit limits, thus allowing for additional entry/exit conditions
or trade chains.
TickSmooth can remove outliers from incoming
The TickTime variable can be used to save CPU
resources by defining a minimum time between script executions.
The plotProfit functions plot the daily, weekly,
monthly, or quarterly profit or loss in the price chart.
The Z5 system got a new algorithm for the "Stop"
slider that re-enters trades closed due to the risk limit. This greatly improves
the profit in situations when the risk limit is exceeded.
Zorro 1.20 (released November 2013)
The PRELOAD flag allows loading lookback price data
from the price history on trade start.
The DominantPhase function can detect turning points
of the dominant cycle in a price curve even before they happen.
A new FXCM plugin is available where the wrong trade profit issue is fixed,
so the SET_PATCH command is not required anymore.
Bar charts by plotBar are now automatically aligned
so that the chart always starts with the first bar.
The MTR4 bridge now supports multiple MTR4 instances
on the same PC (Zorro S only). To connect to a particular MTR4 account, either
the account number can be manually entered in Zorro's [User]
field, or the account selection system can be used.
The -d command line option allows to pass a
#define statement to the script (Zorro S only). This way many
different tasks can be automatized with the same script.
The ALLCYCLES flag produces a portfolio analysis
of all sample cycles.
The plot command now supports plotting different
symbols in the chart.
A price data gap check can be activated with the GapDays
New indicators by John Ehlers (HighPass2,
StochEhlers) have been converted to C by DdlV, together
with an example script of a trade system.
The Z12, Z12fx, and Z12nfa
combined strategies have been removed because they were found less profitable
than trading Z1 and Z2 separately. Reason is an internal mechanism that evaluated
open trade profits for trade decisions, which does not work well across opposite
strategies such as the Z1 trend trading and the Z2 counter trend trading systems.
Zorro 1.05 (released January 2013)
The Total down time - the time spent below a preceding
equity peak - is now displayed in the performance
The timer function can be used for precisely determining
Asymmetric slippage can be simulated by setting the
Slippage variable to a negative value.
dayPivot calculates the pivot point of the previous
The stock exchange working hours for the day functions
can be changed through the variables StartMarket and
The week start and end time can be changed through the variables
StartWeek and EndWeek.
The DIAG flag prints the execution time for opening
and closing positions into the log file.
The TICKS flag now also handles entry limits with
Price history files are not anymore automatically downloaded at the begin
of a new year - this confused beginners and was a bad idea anyway. Instead the
assetHistory function was implemented.
A new broker plugin with the ForexConnect™ API interface has been
implemented. It provides a more stable connection than the previously used Order2Go™
Logging in to the broker with several Zorro instances on the same PC will
now generate an error message.
The Z1 / Z2 system components are now
optionally filtered with the results of an out-of-sample test with the real
trading parameters. This reduces the backtest performance, but should improve
the real trading performance.