Find Your Edge...
If you're still looking for an edge in
the markets, mechanical trading systems are the best way to get it.
- It's no longer necessary to
uninstall prior versions of
installing the new version, provided the new version differs in the second digit of
the version number, such as 1.5 vs. 1.4. In this case, the new version will be installed in a new folder,
such as "Adaptrade Builder 1.5." A minor update, such as 1.5.1 will be
installed in the same folder and will over-write the existing version (e.g.,
1.5.1 will install over 1.5.0). In this case, it's usually best to uninstall
the prior version first.
- Provided the installation is on the
same computer as the prior installation, no new activation code should
be required. The new version should install already activated.
- Uninstalling or installing
over an older version will not affect any
project files (.gpstrat files) you may have created or saved.
- New versions of Builder are designed
to read files (.gpstrat files) from prior versions. However, once a file is
saved in the new version of Builder, you will not be able to open it in an
- The window layout stored with a
currently installed version of Builder is not removed when that version is
uninstalled. This means that if a new version, such as 1.5.1, has a
different window layout than the prior installed version, the layout may
need to be adjusted when the program is first run. The recommended window
layout for the current version of Builder can be gleaned from the images in
the user's guide. The output
windows in Builder (Results tables, Output, Performance Report, Build Report, Equity Curve, Trades List, and
Strategy Code) are dockable pane windows that can be moved by clicking and
- The most recent version released is
listed first, followed by prior releases. The most recent release is always
the recommended download version.
Version 18.104.22.168 (4/23/13)
This release adds stress testing with Monte Carlo analysis, as previewed in a
recent newsletter article. The stress testing can be performed on existing
strategies and incorporated into the build process for new strategies. When
stress testing is applied, the results are reported based on the Monte Carlo
analysis of the stress test results at a user-specified confidence level. The
stress testing options and settings are available on the Build Options tab. The
user's guide section for the Build Options tab describes the available settings
and options. Also, please see the new section in the user's guide "Stress
Testing and Monte Carlo Analysis" in the chapter Usage Topics for a discussion
of this feature. The other features of this release are detailed below.
The following changes and fixes were
incorporated into this release:
- Memory management has been improved,
which should allow larger populations to be built before reaching the
computer's memory limits.
- Two new metrics have been added to
better account for open profit/losses: open profit/loss and the total net
profit. The latter is the sum of the closed trade net profit and the open
trade profit/loss. Optimizing for total net profit, rather than net (i.e.,
closed trade) profit should help avoid strategies that end the build period
with large open losses.
- "Signal Price" has been added to the
Trade List for both trade entry and trade exit. The signal price is the
price calculated by the strategy, whereas the entry and exit prices are the
(simulated) fill prices. The signal price is often different than the fill
price because of where the bar opens following the bar on which the order
price was calculated. Knowing the calculated price can help explain the
position size for "percent of equity" position sizing, among other things.
- The order fill rule for filling limit
orders only when the limit price has been exceeded has been added back in to
Builder. This is in addition to the bid/ask fill rule on the Evaluation
- The option on Evaluation Options to
"Use position sizing stored with the strategy when evaluating existing
strategies" has been replaced with a button "Reset to Build Settings". Now,
whatever position sizing settings are visible on this tab will be applied
when a strategy is evaluated. To restore the settings in place when the
strategy was originally built, click the button.
- The text in the Output window can now
be selected and copied to the clipboard.
Version 22.214.171.124 (2/15/13)
The most visible feature in this release is the new Welcome screen, which is
optionally displayed when the program starts up. The Welcome screen allows you
to directly access three new example projects for stocks, forex, and futures.
The screen also displays tips and contains a link for the Quick Start Steps
topic of the help files. The other features of this release are primarily
convenience (user-interface) features and bug fixes, which are detailed below.
The following changes and fixes were
incorporated into this release:
- The in-sample and out-of-sample
Results and Top Strategies tables can be sorted together using a new option,
which is selected by right-clicking on the tables ("Sort to Match").
- The up/down arrow keys can now be
used to change the selection of the strategy in the Results and Top
- "Move Up" and "Move Dn" buttons have
been added to the Change Performance Metrics dialog window to allow you to
move metrics up and down in the list of selected metrics. Also, these
buttons can be accessed by right-clicking.
- Builder can now accept price files in
reverse date order, where the most recent date is first and the earliest
date is last in the file.
- Builder now verifies that all rows of
price data are in consecutive order. If the dates appear out of order, it
can indicate that the wrong date format is being used, which can be
corrected by selecting a different locale.
- The maximum position size on the
Evaluation Options tab now automatically changes to be at least as large as
the fixed size when fixed size position sizing is selected. This helps
prevent the position size from being inadvertently limited by an incorrect
setting for the maximum position size.
- The Top Strategies tables are now
checked for duplicates before adding a new strategy to the tables.
- To make it easier to delete items
from the Top Strategies tables, multiple rows can be selected together using
shift-click and control-click combinations. The selected strategies can be
deleted using the delete key or by right-clicking and selecting "Delete
- [bug fix] In MetaTrader 4 code for
fixed fractional position sizing, a semi-colon was missing at the end of the
statement for the NSharesL or NSharesS variable. This has been corrected.
- [bug fix] The seconds part of the
time field in a price file was not read correctly when the hour part was
zero. This has been corrected.
- [bug fix] When no conditions were
selected for the Top Strategies tables, every strategy was copied to Top
Strategies by default. This has been changed so that if no conditions are
selected, no strategies are copied to Top Strategies.
- [bug fix] The code for members in Top
Strategies was not generated for strategies that were not saved in the
Results table, which meant that, in some cases, the code window was blank
and, in other cases, the code was from a prior generation. This problem,
which also affected the strategy member number, has been corrected.
- [bug fix] Using a small population
size or a small price file could cause a program crash in cases where the
build process progressed so fast than the results panes couldn't keep up.
This has been corrected.
Version 126.96.36.199 (1/25/13)
This release significantly enhances the build process in Builder. You can now
build strategies based on performance requirements and constraints, such as
profit factor >= 1.5, drawdown <= 20%, number of trades between 100 and 300,
etc. The Build Metrics table has been replaced with separate lists of build
objectives (metrics to minimize or maximize) and build conditions (metrics
specified in the new constraint conditions). In addition, similar conditions can
be specified to filter the results during building to set aside any strategies
that meet your requirements. For example, you could have the program set aside
any strategy from any step of any build that has a correlation coefficient
greater than 0.95 as measured across all segments of the data and which has a
net profit of more than $5000 on the out-of-sample segment. These strategies are
listed in the new Top Strategies tables, which work the same as the existing
In addition, the following changes and
fixes were made in this release:
- [bug fix] Indicator shifting was not
handled properly for the accumulation/distribution indicator, which could
cause a program crash. This has been corrected.
- [bug fix] The code variable "InitialStop"
was not being initialized properly when the option to apply protective stops
on the bar of entry was used but no stop was used, resulting in a code
compilation error. This has been corrected.
- [bug fix] The code variable for
average true range (ATR) was incorrectly labeled when exits were applied on
the bar of entry for ATR stops, resulting in a code compilation error. This
has been corrected.
- [bug fix] In some cases, the Build
Report incorrectly displayed the indicator list for a strategy as empty.
This has been corrected.
Version 188.8.131.52 (12/23/12)
This release adds MetaTrader 4 script
(MQL4 code) as an optional Code Output option. MetaTrader 4 (MT4) is a popular
forex trading platform. Builder now includes special functionality, including
versions of several indicators, specifically to ensure maximum compatibility
with MT4. MT4 strategies ("Expert Advisors" or EAs) can be saved directly to a
.mq4 file or copied and pasted into the MetaQuotes Language Editor (MetaEditor).
In addition, the following changes and
fixes were made in this release:
- Indicator shifting has been added.
For example, Average(C, N1)[NShift] indicates that the moving average has
been shifted by NShift bars, which means the statement returns the average
NShift bars ago. The probability that an indicator will be shifted can be
specified under Strategy Options.
- An option has been added to Strategy
Options for allowing nested indicators, such as Momentum(XAverage(H, N2),
N3). Previously, nesting was always "on". If unchecked, indicators will not
be nested, regardless of tree depth.
- Price files can now be read with the
date and time in the same field; e.g., 11/5/2012 13:15 or 20090531 13:15.
The field should be labeled "date" and no "time" field should be present.
- The percentage of computer memory
currently in use is now displayed in the status bar. This makes it easier to
see the relationship between program settings, such as population size, and
the amount of memory used by the program.
- The Exit command (File menu) and the
close button on the main window are now active at all times, including
during the build process, and can be used to terminate the program at any
time. A confirmation message is displayed before the program is closed if a
build is ongoing.
- A value can be entered on the Markets
tab for the bid/ask spread of each symbol. The value defaults to the tick
size but can be changed to any value. The Order Fill Rule on the Evaluation
Options tab has been changed so that, if checked, it uses the bid/ask spread
to determine fills. For example, buys occur at the ask and sells at the bid,
so a market buy order will be filled at the chart price (bid) plus the
bid/ask spread. Similarly, a buy stop order will not be filled unless ask
price (chart price plus bid/ask spread) rises to or through the stop price.
- The max bars back value ("Max
Look-back Length") can now be entered for custom indicators on the Price
File Format window.
- When strategies include both long and
short trades that enter using market orders, logic has been added to prevent
both long and short entries from occurring at the same time.
- On the Options window (Strategy
menu), a time-out interval can be set to control how long the program waits
for lengthy calculations. Previously, a "Calculations timed out..." error
message was produced if any given strategy took longer than two minutes to
evaluate. This cut-off time can now be set by the user.
- The cents part of the equity labels
has been removed from the y-axis of the Equity Curve plot.
- [bug fix] Custom indicators were not
listed in the Build Report in the indicators build set section. This has been
- [bug fix] The Suggest Range button on
the Strategy Options tab did not work correctly when the average true range
was less than 1.0. This has been corrected.
Version 184.108.40.206 (9/24/12)
This release changes the EasyLanguage code
formatting of entry and exit conditions to solve a problem previously
encountered in TradeStation. With nested indicators, such as
Average(Average(Average(Average(C, N1), N2), N3), N4), TradeStation has
difficulty evaluating the expression, which can cause the chart to freeze.
Eventually, TradeStation will finish evaluating the strategy, but it can take
many minutes in some cases. Aside from avoiding that kind of logic, the only
solution previously was to rewrite the condition as follows:
Var1 = Average(C, N1);
Var2 = Average(Var1, N2);
Var3 = Average(Var2, N3);
EntCondL =Average(Var3, N4);
in which Var1, Var2, Var3, and Var4 are
variables, and EntConL is the final, overall condition.
Builder now incorporates this style of
code formatting, in which the entry and exit conditions are decomposed into
multiple variables. This eliminates the difficulty TradeStation has with nested
indicators. As a result, it's no longer necessary to reduce the tree depth in
order to prevent complex, nested conditions or to rewrite the code by hand.
In addition, the following new features
were added to the Price File Format window:
- A "Clear All Formatting" button has
been added. This button removes all column headings from the table of price
data and clears the table of custom indicator settings. This can be used
prior to setting the column headings to remove the default headings in cases
where each column must be relabeled.
- A "Data Format" pull-down menu has
been added. This menu allows you to select the locale for use in
interpreting the data in the price file. The menu defaults to "English
(United States)", which means it will expect dates to be in MM/DD/YYYY
format and numbers to use a "." as the decimal symbol and "," as the digit
group symbol. Changing the format, for example, to "English (United
Kingdom)" will cause the program to expect dates in the format DD/MM/YYYY.
If the prices use a comma as the decimal symbol (e.g., 100,01), the correct
selection may be a European format, such as French or German.
Version 220.127.116.11 (8/25/12)
This release adds portfolio capabilities.
It's now possible to build over multiples markets simultaneously so that the
resulting strategy is designed to perform on all selected markets. Building over
multiple markets can produce strategies that are more robust that single-market
strategies and enables a diversified, portfolio approach to trading. In addition
to the new portfolio feature, the following changes and fixes were made in this release:
- The open trade equity has been added
to the Performance Report, making it easier to determine if there is any
significant performance impact from open trades.
- [bug fix] When the number of stored
strategies was set to be larger than the population size, the program would
attempt to evaluate the non-existent population members. This has been
- [bug fix] When the trade list was
saved to a file, the quantity was displayed as "1" in the output file
regardless of the true size. This has been corrected.
- [bug fix] The Equity Low performance
metric displayed random characters when there were no trades in the segment
(in-sample or out-of-sample). This has been corrected.
- [bug fix] In EasyLanguage code, range
bars should not use the HighD, LowD, CloseD and OpenD functions, which
return -1 when applied to range bars. Builder now excludes these functions
from the build set when range bars are being used.
- [bug fix] The minimum number of
shares setting from the Strategy Options tab has now been added to the
Version 18.104.22.168 (5/21/12)
This release corrects several errors in
the prior release, mostly related to the position sizing features added in that
The following changes and fixes were made in this release:
- [bug fix] The list of Build Metrics
sometimes displayed multiple instances of the Net Profit metric. Each
additional occurrence pushed a metric off the bottom of the list. This has
been corrected. However, the fix is not retroactive, so project files that
display this problem will continue to do so. The extra occurrences of the
Net Profit metric can be removed by right-clicking on the Build Metrics
table and using the Remove button.
- [bug fix] With fixed fractional
position sizing and no protective (money management) stop, the risk value
was supposed to be provided by the largest loss. However, because the
position size defaulted to zero, no trades were made in this case, so no
losses were recorded. This has been corrected by adding a setting for the
minimum number of shares strategies will trade, with a default value of 1.
The minimum number of shares is set on the Evaluation Options tab.
- [bug fix] Return, return/drawdown
ratio, percentage drawdown, and several other metrics dependent on account
equity gave zero or incorrect results in the out-of-sample (OOS) period
because the starting equity in the OOS period was incorrectly set to zero.
This has been corrected. As a result, any strategies with an OOS period
built in version 22.214.171.124 will need to be re-evaluated from the Build menu to
properly calculate the OOS results. The equity curve will show a
discontinuous jump until the strategy is re-evaluated.
- [bug fix] Parts of the build report
did not update during the build process each generation, such as the number
of generations and total build time. This has been corrected.
- [bug fix] Fixed dollar (protective)
stops didn't work well for forex because the stop sizes, which are
per-share, were too small in most cases to display properly in the
EasyLanguage code. The input value for the stop size displayed only two
decimal digits, which was insufficient to display the stop values. This has
- [bug fix] Fixed ratio position sizing
didn't work well for forex because it started at a position size of 1 and
incremented the size by 1. Forex typically trades in sizes of 10,000 or
100,000 per lot. This has been corrected by using the "round to.." and
minimum share options. If the option to round the position size to, say,
10,000 shares is selected, the delta value for the fixed ratio method will
be relative to 10,000 shares. Also, the fixed ratio method now starts with
the minimum number of shares specified on the Evaluation Options tab.
- [bug fix] The trading costs field in
the table on the Markets tab didn't display enough decimal digits to display
the trading costs for forex properly. For example, the costs for forex might
be 0.003 per share for a lot size of 10,000, which would give costs of $30
per lot. The table now displays the decimal digits properly.
- [bug fix] When clicking on the
results tables during building (e.g., to sort the results), the program
sometimes crashed. This happened when the tables were redrawing while being
updated with the results from the recently completed generation. This has
Upgrading Note: As noted above in
#3, any strategies built in version 126.96.36.199 with a non-empty out-of-sample (OOS)
period will need to be re-evaluated from the Build menu to properly calculate
the OOS results. The equity curve will show a discontinuous jump between the
in-sample and OOS periods until the strategy is re-evaluated.
Version 188.8.131.52 (4/9/12)
This release adds position sizing options
to the program. Whereas previously, the position size defaulted to "1" and all
trades had the same size, strategies may now use any of six different position
sizing methods, including fixed fractional, fixed ratio, constant value, and
percent of equity. You can elect to have the build process choose the position
sizing method and/or parameter value or set them yourself prior to building.
In addition to position sizing, the following changes and fixes were made in this release:
The EasyLanguage code output now includes labels for each order.
An open trade at the end of the trade history is now recorded in the
trade list, where it's marked as "open trade".
The equity curve can now be copied to the clipboard by right-clicking.
A "Recommend Range" button has been added to the Strategy Options tab to
calculate a recommended range of stop values for fixed size protective
stops. Because these stops are now applied per share or contract, rather
than "per trade", a meaningful range of stop sizes is sometimes not obvious.
The button multiples the average true range by 0.25 and by 4.0 to determine
the equivalent dollar stop values for the recommended range.
[bug fix] The "known issue" from the prior release, related to the use
of the SetStopLoss statement for protective stops applied on the bar of
entry, has been eliminated with the addition of position sizing.
[bug fix] When the stop type was changed from ATR to fixed sized stop
for an existing strategy, and the strategy was rebuilt, the stop size was
zero. This has been corrected.
[bug fix] Invalid code output was generated when the symmetry option was
used, then subsequently switched off, before rebuilding using the prior
population as a starting point. This has been corrected.
[bug fix] Percentage stops were incorrectly updated on each bar within
Builder, whereas the generated code specified that they were updated only on
the bar of entry. This has been corrected so that the stops are only
calculated on the bar of entry within Builder.
[bug fix] The risk values in Builder were not calculated correctly in
some cases. This has been corrected.
- More than 60 new performance metrics
were added to provide more control in specifying build goals, including
period returns (daily, weekly, monthly, annual), R-multiples, percentage
drawdown, leverage, Sharpe ratio, and many others.
- A detailed performance report for
each strategy, including results for long and short trades, is now part of
the output. The report can be printed, copied, or saved to a file in several
- A build report is generated for each
strategy describing the features of the strategy along with all the settings
used in the build process. The report can be printed, copied, or saved to a
file in several different formats.
- A time range option for trade entries
was added so that the entry time can be limited to the chosen times on
- An option for limit orders to be
filled only when the limit price is exceeded was added, which makes it
possible to build realistic strategies using limit orders on short intraday
bars (e.g., 1 min or tick data).
- A new input data tab -- Evaluation
Options -- was added for the new position sizing settings and options and
the new limit order fill rule option.
- The set of performance metrics used
in the performance tables and in the build metrics list
can now be customized for each strategy.
- The Trade List now includes
additional columns for the position size, entry and exit
signal types (i.e., labels), position trading costs, and gross profit/loss.
- A program options feature was added
to allow the following settings:
- The number of parallel processes
used during the build can be specified to give the user more control
over how the computer's cores are utilized.
- The default set of build metrics
used for new projects can be selected from a list of all available
Upgrading Notes: For those upgrading from a prior version of Builder,
please note the following regarding the use of project files from prior
|Previously, the point value was used for the number of shares of stock.
Because Builder now includes position sizing, the point value for stocks
should now be set to 1, and the number of shares should be set (if fixed
size trading is desired) using the position sizing inputs on the Evaluation
|Trading costs were previously interpreted as "per position", whereas now
they are "per share or contract". For stock trades, where the point value
previously was used to represent the number of shares, the costs will have
to reduced to be "per share" if the point value is set to 1.|
Version 184.108.40.206 (1/5/12)
This version is mainly a bug fix release.
The following changes and fixes were made in this release:
- [bug fix] When multiple orders were
filled on the same bar, such as an entry and an exit occurring on the same
bar, the fill prices were incorrect in some cases. This has been corrected.
- [bug fix] For fixed dollar stops, the
CurrentShares keyword was omitted from the stop price statement, resulting
in incorrect stop prices for stocks and forex. This has been
- [bug fix] For ATR and percentage
stops, when the stops were applied on the bar of entry, the CurrentShares
keyword was omitted from the SetStopLoss statement, resulting in incorrect
values when applied to stocks and forex. This has been corrected.
- [bug fix] When time was provided in
HHMM format in the price file, a value of zero (0000), representing
midnight, was not read correctly, which resulted in an error message
indicating that the time or date field format was incorrect. This has been
corrected, so that a time of 0 is properly recorded as midnight.
- [bug fix] The total elapsed time
displayed in the status bar was not initialized properly after the initial
build, so that it displayed an incorrect value upon subsequent builds until
the first time update. This has been corrected.
- [bug fix] A new routine to detect the
number of logical cores has been implemented in order to address cases for
which the prior function failed to detect the actual number of cores on the
user's computer. This function is used in the parallel processing algorithms
to allocate processing among the available cores.
- Price files can now be read with time
values in the format HHMMSS (e.g., 091500 for 9:15 a.m.). Previously, time
had to be either in Windows-standard format or in HHMM format.
- On the Build Options tab, the genetic
programming options of crossover percentage, mutation percentage, tree
depth, and tournament size have been labeled as "Advanced" to make it
clearer that the default values usually suffice for most applications.
- The default tree depth has been
reduced to 3 from the prior value of 4. In some cases, multiple levels of
nesting of indicators can cause strategies to take too long to evaluate in
TradeStation and MultiCharts. Reducing the tree depth should reduce the
likelihood of obtaining such strategies.
Known issue (posted 1/15/12; corrected in v 1.3): The SetStopLoss statement contains the
keyword CurrentShares, which will have the value zero when there is no open
position. This will result in a stop size of zero, which will trigger an
immediate exit at the entry price. A workaround is to replace "CurrentShares"
Version 220.127.116.11 (11/22/11)
The following features and fixes are part
of this release:
- Two new types of protective stop
orders were added: a fixed size stop and a percentage stop. The fixed size
stop is given in dollars (or your local currency); e.g., a $500 stop. The
percentage stop is placed a given percentage from the entry price; e.g., 2%
of the entry price below the entry for a long trade.
- All three types of protective stops
can be applied on the bar of entry. This option on the Strategy Options tab
is implemented using the SetStopLoss command in EasyLanguage.
- The following new indicators were
added: weighted moving average, triangular moving average, TRIX, CCI,
Bollinger band, Keltner channel, and standard deviation.
- Indicators that previously only
accepted price or price-based indicators as input, such as moving averages,
now also accept other types of indicators as input.
- The check-box option for exiting
end-of-day was removed from the Strategy Options tab because it was
redundant given the recently added ability to specify order types to include
in all strategies. This now allows the build process to consider this exit
type without requiring it to be included in each strategy whereas
previously, the user had to choose whether or not to include it in each
- Minimum length values were added to
the indicator and price pattern look-back ranges on the Strategy Options
tab. For example, the indicator look-back range can be specified as "20 to
- The Strategy Options tabbed window
has been separated into three windows: Indicators, Order Types, and Strategy
- Help buttons, which bring up the
relevant help topic, have been added to each tabbed input window.
- The coloring on the out-of-sample (OOS)
portion of the Trade List window has been changed. Instead of coloring the
entire OOS portion red or green, depending on whether the OOS net profit is
positive or negative, the background color for each row is colored red or
green depending on the trade profit/loss. This provides contrast to the
in-sample part of the list, where the text color is used to differentiate
profits and losses.
- The start bar for evaluating
strategies has been changed to be consistent with how strategies are
evaluated in TradeStation. Previously, if the start date was changed in
Builder, the strategies would use data prior to the new start date for the
required look-back period; e.g., if the MaxBarsBack setting was 90, the
strategy would look back 90 bars prior to the new start date. This has been
changed so that the strategies now start all calculations on the new
- An "Elapsed Time" display message has
been added to the status bar during builds.
- The time at which the build process
is completed has been added to the Output window, alongside the existing
total build time.
- The strategy member number has been
added in parentheses to the display windows (Equity Curve, Trade List,
Strategy Code) to make it easier to identify the strategy that has been
selected from the performance tables.
- The MaxBarsBack value has been added
to code heading comment block of each strategy to make it easier to set this
value in TradeStation without having to refer back to the Builder file.
- A beep sound has been added to
indicate when the build process is finished.
- The amount of installed memory
recognized by Builder has been added to the About Builder window.
- There are new colors and icons for
the user interface.
- [bug fix] The EasyLanguage keyword
BarType has been replaced with DataCompression because the latter works for
both TS 9 and TS 2000i, whereas BarType is not recognized in TS 2000i.
- [bug fix] The routine for detecting
memory capacity in the 64-bit version of Builder may not have worked
correctly in some cases. This has been corrected.
- [bug fix] Project files from versions
1.1.0 to 1.1.1 that contained an exit-on-close exit lost that exit when
opened in versions of Builder newer than 1.1.1. This has been corrected.
- [bug fix] When performing an
"Evaluate All", the population member numbers were reset, but the old
numbers were still displayed in the strategy code header comment. This has
been corrected so that the population numbers are not reset.
- [bug fix] When sorting the table of
order types, the "Include" column disappeared. This has been corrected.
Versions 18.104.22.168 - 22.214.171.124 (9/6/11, 9/7/11,
This release adds the ability to include
custom indicators in Builder. If a custom indicator is plotted on a chart and
the data is saved to a text file, the column of indicator values can be read
into Builder and associated with a text string that represents the code for the
corresponding indicator function used to generate the values in the file. When
Builder uses the indicator in strategies, it includes the text string for the
indicator function code in the entry or exit statement in which the indicator is
used. Provided that function is available in the trading platform when the
strategy is executed, the code will generate the same results as in Builder.
More information on this feature can be found in the section of the
entitled Input Data and Settings.
Part of this new feature is the Price File Format window, which allows the
user to specify the columns of data in the text file of price data. This
provides more flexibility for reading price files. For example, the minimum
allowable price file now consists of the date and closing price, whereas
previously it was necessary to include date, time, open, high, low, and close.
Any column that should be ignored or skipped over can be labeled as such. The
label for any column in the file can be selected from a list that includes date,
time, open, high, low, close, volume, up-tick volume, down-tick volume,
indicator (for custom indicator data), and don't read/ignore. Similarly, there
is now a checkbox for combining the up-tick and down-tick volumes into total
volume. The Price File Format window is opening automatically when reading in a
new price file and can be opened again at any time from the Markets tab in order
to change the settings.
[bug fix] Version 126.96.36.199 corrects a bug in version 188.8.131.52 that can cause
sporadic program crashes when using custom indicators with a return type of
"price". Otherwise, version 184.108.40.206 is identical to 220.127.116.11.
[bug fix] Version 18.104.22.168 corrects a bug that can cause occasional program
crashes when building on intraday data when the exit end-of-day option is
[bug fix] Version 22.214.171.124 improves the use of custom indicators when more
than one custom indicator uses the custom return type. In version 126.96.36.199 and
188.8.131.52, different custom indicator returning custom return values could not be
compared to each other. In version 184.108.40.206, it's possible for different custom
indicators returning custom values to be compared to each other. For example, if
you have several correlation indicators, each returning custom values in the
range -1 to +1, the different indicators may now be compared to each other, such
as correlation(C of data1, C of data2, 14) < correlation(C of data1, C of data3,
Version 220.127.116.11 (8/8/11)
This release corrects several errors
related to the new order processing engine developed for the prior release that
can occur when using the new option to allow trades to reverse existing
positions. Specifically, the changes in this version are as follows:
- [bug fix] When the option to "Wait
for exit before entering new trade" was unchecked, certain exit orders
previously were entered at incorrect prices when there was an open position
on the same bar and the buy (sell) stop price was below (above) the open.
This has been corrected.
- [bug fix] When the option to "Wait
for exit before entering new trade" was unchecked and the option to
exit-at-close was selected (checked), an extra variable (EndofSess) was
added to the entry condition statements, which prevented entry orders from
being placed. This has been corrected.
- A more refined assumption about the
order of prices on a given bar has been incorporated into Builder. In
general, it's not possible to know whether the high or low occurred first on
a given bar given only the open, high, low and close. Consequently, when
multiple orders are executed on the same bar, it's necessary to assume which
occurred first, the high or the low. Typically, when the bar closes up, it's
assumed that the low occurs first. However, when the close and the open are
at the same price, Builder now looks at whether these prices are closer to
the high or the low. If they're closer to the high, it's assumed that the
high occurs first.
- The way in which the population is
initialized when "Reset on Build" option is unchecked has been changed.
Previously, the program just copied the members from the current population
without re-evaluating them. It was assumed that in this case they would be
used to continue building on the same price data. Now, the members that are
copied from the prior population are re-evaluated before continuing. This
makes it easier to develop strategies that can work across multiple markets.
For example, you can build a few generations on one market, select a
different market under the Markets tab, and, with the Reset on Build option
unchecked, build a few generations on the second market. The second build step
will start the build using the population members generated on the first
market and evolve them from there using the second market's data. You could
then repeat the process for other markets.
- The name of the project (.gpstrat)
file is now included in the comment header block at the top of each
strategy. To include this in existing strategies, just select the given
strategy and select Evaluate from the Build menu.
Known issue in v 18.104.22.168:
When using the AccumDist function in
intraday strategies, the volume in the price file should be the sum of the up
tick and down tick volumes. Typically, the up and down tick volumes are present
in separate fields in the price file. When Builder asks whether the two volume
fields should be combined, it's necessary to say "yes" in order for the
AccumDist function to evaluate correctly. However, with some symbols, the
intraday volume in TradeStation is defined as the up tick volume only, so it's
necessary to say "no" when asked to combine the two volume fields. For these
symbols, the AccumDist function should be excluded from the build set or
incorrect results may be obtained.
Version 22.214.171.124 (7/27/11)
This release includes versions compiled
specifically for both 32-bit and 64-bit versions of Windows. Under 64-bit
Windows, programs can allocate more than 2GB of memory, which is the limit under
32-bit Windows. This means that the 64-bit version of Builder can handle larger
population sizes and longer price files. While the 32-bit version (and all prior
releases) will work under both 32 and 64-bit versions of Windows, it's
recommended that the 64-bit version be installed on computers running 64-bit
Please note that both the 32 and 64-bit
versions of this release are compiled from the same code and are functionally
identical, including the Builder (.gpstrat) files generated. Because they're the
same program, only one may be installed on any given computer. If you first
install the 32-bit version, it will be necessary to uninstall it if you later
decide to install the 64-bit version. If your computer runs 64-bit Windows, it's
strongly recommended that you install the 64-bit version; otherwise, it will be
necessary to install the 32-bit version.
Other changes in version 126.96.36.199 are as follows:
- An "Include" column has been added to
the Order Build Set table. Checking rows in this column specifies that the
checked order type is to be included in every generated strategy. For
example, to include a money management (protective) stop exit in each
strategy, check the Include column for the protective stop order type.
- An option has been added to the
Strategy Options tab: "Wait for exit before entering new trade". In prior
versions, this was always true for generated strategies. If this option,
which is checked by default, is unchecked, new entries can reverse existing
positions; e.g., a short entry can reverse a long trade before the long
trade exits on its own.
- A more versatile and accurate
strategy order processing engine has been developed to support both current
and future program requirements. This enables the simulation of more complex
combinations of trading orders and yields more accurate results, including
more accurate drawdown calculations. Somewhat slower processing times may be
- The About Builder window now includes
the label "Windows 32-bit Edition" or "Windows 64-bit Edition" depending on
which version is installed. The number of processor cores recognized by
Builder is also displayed in this window.
- The View window on the Markets tab
now allows full row selection to highlight the row of data clicked on.
- [bug fix] The highest and lowest
indicator functions are now initialized better to give accurate results on
bars prior to the MaxBarsBack setting.
- [bug fix] End-of-session logic used
to filter entry and exit statements didn't work correctly on tick data where
multiple ticks had the same time stamp. The end-of-session logic has been
removed for tick and range bars.
- [bug fix] Trade exits based on the
time limit condition (e.g., trade only between 10:30 and 12:30) were not
executing properly on some data where the session end time preceded the
session start time. This has been corrected.
- [bug fix] Time-based conditions for
entry and exit didn't take into account the time range limit set by the
user. Also, the number of bars for the "exit at N bars" exit was based on
the total number of bars in the day, rather than the number of bars in the
time range selected by the user for trading. Both issues have been
- [bug fix] Trades exiting on the last
bar of the chart were not recorded or listed in the performance tables. This
has been corrected.
- [but fix] In certain cases, a long
entry and a short entry can both be filled at the open on the same bar, such
that the second order reverses the position established by the first entry
order, leaving the position dependent on which order is filled first. The
cases of both entries being stop orders and both entries being limit orders
were not properly accounted for in prior versions. This has been corrected.
Known issue in v 188.8.131.52 (corrected in
With the "Wait for
exit before entering new trade" option turned off (unchecked) and the exit
end-of-day option selected, there will be an extra EndofSess variable added to
the entry conditions. The erroneous entry conditions look like the following
(depending on other options selected):
If EndofSess and (EntriesToday(Date) < 10 or EndofSess)
and EntCondL then begin
The first EndofSess should not be present and should be removed in
TradeStation before running the strategy. After removing the erroneous variable,
the above statement should read as follows:
If (EntriesToday(Date) < 10 or EndofSess) and EntCondL
The results shown in Builder are not affected by the code error. This issue
will be corrected in the next release.
Versions 184.108.40.206 (5/24/11)
The substantially faster build speed of
version 1.2 makes it feasible to process much larger files of price data
covering longer time periods. Unfortunately, this also means that the program
can require more memory to process these larger files than is available from the
computer. To avoid program crashes resulting from memory allocation errors,
version 220.127.116.11 now includes memory management features that monitor Builder's
memory usage. When more than 95% of the computer's memory is allocated and
additional memory is required during the build process, Builder sends an error
message to the Output window and exits the build. The message suggests reducing
either the population size or the size of the price file. In most cases, the
memory management routines shut down the build process while avoiding a program
crash. The build parameters can then be changed and the build rerun.
The new memory features in version 18.104.22.168
also increase the size of the population that can be built before running into
memory problems by roughly 50%.
Other changes in this version are as follows:
- The help files and PDF user's guide
have been updated with the latest changes and features through this version.
- Previously, if the evaluation date
range was changed so that it included periods both before and after the
range of dates used in the build, only the largest of the two periods was
included in the evaluation range. This was the out-of-sample period. This
was done because Builder only tracks one out-of-sample period at a time --
either preceding or following the in-sample period, but not both. However,
this meant that the user could select a date on the Markets tab, evaluate
the strategy, and the strategy would not necessarily be evaluated over the
entire chosen range of dates. This has been changed so that the evaluation
is performed over the entire date range selected by the user on the date
range bar on the Markets tab. If there are periods both preceding and
following the build period, then the largest of those will be identified as
the out-of-sample period.
- [bug fix] The option to limit trades
to specified times of day on the Strategy Options tab did not cause trades
to exit properly at the end of the time range in cases where the trading
session spanned two days, such as with some forex data. This has been corrected.
Versions 1.2.0 and 22.214.171.124 (4/29/11 and
These versions contain substantial
improvements in strategy building speed along with several enhanced strategy
logic features. The
new features and improvements in these versions are as follows:
- The build algorithm has been fully
parallelized to take full advantage of multi-core processors. Builder
detects the number of physical cores on the computer and processes
population members in parallel on the different cores.
- The strategy evaluation algorithm has
been rewritten to improve processing speed. In combination with the new
parallelized version of the build algorithm, initial testing indicates speed
improvements of up to 25 times on a dual core machine compared to prior
- An option to limit trades to
specified times of day has been added to the Strategy Options tab. For
example, an intraday strategy may be specified to trade only between 9:00 am
and 12:00 pm. In this example, no trades will be entered prior to 9:00 am
and any trade open at 12:00 pm will be closed at market.
- Logical conditions for exiting trades
have been added. These conditions, which are equivalent to the entry
conditions, are evolved along with the entry conditions during the build
process. The conditions (one for long trades; another for short trades) are
used to exit the trades at market. Accordingly, an "Exit at Market" order
type has been added to the Order Build Set.
- Price-based indicators can now apply
to other price-based indicators. For example, it's now possible to evolve
logical conditions such as Average(XAverage(H, N1), N2), MACD(Highest(C,
N1), N2, N3), and Momentum(Lowest(Average(C, N1), N2), N3). The following
indicators have this capability: Average, XAverage, Highest, Lowest,
RateofChange, RSI, Momentum, and MACD.
- The crosses above/crosses below
operator has been added and can be seen in the Indicator Build Set.
- A new build metric has been added to
measure the maximum value of the MAE (maximum adverse excursion) across all
trades. This metric (Max MAE) is listed in the Build Metric table (Build
Goals tab) and complements the Ave MAE metric that was added previously.
Minimizing the Max MAE may improve trade quality.
- Variables have been added in the
generated EasyLanguage code for the entry prices for stop orders and for
target exit prices.
- More flexibility has been added in
reading text files of price data. The file may now start with an optional
line of labels. The lines of price data are assumed to consist of date,
time, O, H, L, C, Volume1, Volume2. The last two fields are optional and
contain volume information, such as the total volume or down tick and up
tick volume, respectively. If two fields following the closing price are
found, the user is prompted as to whether the two fields should be added
together to get the total volume. For tick or intraday data, the two volume
fields would generally represent up and down tick volume and should be
combined to get the total volume.
- A "View" button has been added to the
Markets tab. Clicking the button opens a simple tabular display of the price
data for the market selected in the Market Data table.
- [bug fix] An error that caused
end-of-day exits to occur at the end of the calendar day, rather than at the
end of the trading session, primarily on forex data, has been corrected. The
error affected intraday strategies with the "Exit End-of-Day" option
selected for which the session starting time was later than the session
ending time (i.e., the session spanned two calendar days).
- [bug fix, v 126.96.36.199] The setting for
whether the two volume fields in a price file are combined to get the total
volume was not recorded properly, which caused the program to prompt again
for the same information. This has been corrected.
- [bug fix, v 188.8.131.52] A bug that
caused the program to crash when the Cancel button was clicked in certain
circumstances has been corrected.
- [bug fix, v 184.108.40.206] A bug that
caused memory leaks when the Cancel button was clicked in certain
circumstances has been corrected.
- [bug fix, v 220.127.116.11] An error that
resulted in the Crosses above/below indicator to continue to be included in
strategies after the user removed it from the build set has been corrected.
- [bug fix, v 18.104.22.168] When all but a
small number of indicators were removed from the build set, the mutation
operator caused a program crash. This has been corrected.
Version 1.1.1 (1/15/11)
This is mainly a "bug fix" release to
correct several small errors in version 1.1.0, described below. If you currently have version 1.1.0
installed, you should read the items below to determine if installing this
version would correct any discrepancies you may have noticed in your results
compared to the corresponding results in TradeStation. The changes in this
version are as follows:
- [bug fix] On intraday data, the
Chaikin oscillator incorrectly used "volume" as the first input, rather than
"ticks." This has been corrected. This only applies to intraday data, which
includes tick and range bars. Please note that re-evaluating strategies that
incorrectly use "volume" as the input will not change the input to "tick."
The strategies must be rebuilt in order to obtain the correct code.
- [bug fix] When setting a limit on the
number of entries per day on intraday data ("EntriesToday(date) < x"), the
EasyLanguage code mistakenly examined the last bar of the day when
evaluating the number of entries for the first bar of the day. In some
cases, this prevented entries on the first bar of the day. This has been
corrected. Re-evaluating a strategy that limits daily entries on intraday
data will re-write the code to the correct form.
- [bug fix] The number of entries per
day was not calculated correctly on intraday data when two entries occurred
on the same bar. This has been corrected. Re-evaluating a strategy that
includes such trades will correct the strategy results in Builder.
- [bug fix] When using Range bars in
Builder, the OpenD, CloseD, HighD, and LowD functions did not match
TradeStation. In TradeStation, these functions are set to return -1 on
Range/Momentum bars. Builder previously calculated the correct values for
the functions, which generated a mismatch between Builder and TradeStation.
This has been corrected. Re-evaluating a strategy that contains these
functions when the data is Range bars will correct the performance results
- [bug fix] When using Range bars in
TradeStation, the SetExitOnClose command is inactive. Previously in Builder,
this command worked as expected, which produced a mismatch between Builder
and TradeStation. This has been corrected. Selecting the "Exit end-of-day"
option in Builder will still insert the SetExitOnClose command in the
EasyLanguage code, but the command will not be recognized when evaluating
the strategies, either in Builder or in TradeStation, when range bars are
used. Re-evaluating a strategy that contains this command on range bar data
will correct the performance results in Builder.
- Improvements to reading price files.
Builder can now read trade times in a variety of formats, including the
format used when saving price data from MultiCharts (e.g., 2:36:02 PM). A
MultiCharts price file will generally be read correctly by Builder up
through the volume field (date, time, O, H, L, C, Volume). Also, volume is
now an optional field. If the volume field is not present, the volume values
will be set to zero. For files saved from the TradeStation Data View window
on intraday data, volume consists of two fields, up volume and down volume.
The two values are added together to obtain the "volume" value for each bar.
If the second field (down volume) is not present, the volume will be set to
the first volume field.
Version 1.1.0 (11/12/10)
This is the final release of version 1.1.0
and replaces version 1.1.0 Beta, described below. This release includes fully
updated documentation consisting of the PDF
user's guide and the html help files that are accessible from within the
running program. In addition to the documentation, several other changes and
fixes have been implemented since the beta version was released. These include:
- If the program can't read the price
data file or the format is incorrect, an error message is now displayed.
- [bug fix] An error in evaluating the
order of entries when both long and short entries occur at the open has been
- [bug fix] An error where the open
trade equity at the end of the in-sample period was not accounted for at the
start of the out-of-sample period (when out-of-sample follows in-sample) has
been corrected. The drawdown not includes the open loss at the end of the
- The absolute value operator is now
used by default when forming the price difference for entry and exit stop
and target orders unless the user has excluded absolute value from the build
set. This should reduce the likelihood of ill-formed entry orders, such as a
buy stop order below the market.
- [bug fix] A memory error that could
cause the program to crash when building on intraday data has been
- [bug fix] An error in which the views
were not updated after the population was re-initialized following a restart
based on out-of-sample performance has been corrected.
- [bug fix] The horizontal scroll bars
on the Markets and Build Options tabs now work properly.
- [bug fix] An error in which the
slider control on the Markets tab was initialized with the in-sample and
out-of-sample periods reversed when the out-of-sample preceded the in-sample
has been corrected.
- The functionality of the Cancel
button has been improved so that the program cancels more quickly.
Previously, the program had to wait for the current population member to
finish building before cancelling, which could make it seem like the program
was "hanging" when building on long data files.
- [bug fix] An out-of-memory error that
could crash the program when a large population size or large tree depth was
selected now generates an error message recommending that the population
size or tree depth be reduced.
- [bug fix] An error in which the
"Reset on out-of-sample performance" field didn't permit a "." character for
decimal numbers, such as the correlation coefficient, has been corrected.
- [bug fix] An error in which the
AccumDist function (accumulation distribution) used "volume" as the input,
rather than "ticks", when building on intraday data has been corrected.
Version 1.1.0 Beta (10/1/10)
This version is a major update of version
1.0.1. The following are some of the more notable features and changes in this
The settings table has been replaced by a series of tabbed windows that
provide additional options and more intuitive controls, such as slider bars,
spin buttons, tables, etc. The tabbed windows are: Markets, Strategy Options,
Build Goals, and Build Options. A brief description of each one follows. The
windows are shown on the Screen Shots page.
Markets Tab. This window provides a table of any price data files
that have been selected. The build process will be run on whichever file is
selected in the table. Following the build, any selected strategy may be
evaluated on a different market by selecting the market from the table and
selecting Evaluate from the Build menu.
This window also allows you to:
- Select the start and end dates for analysis, and
- Segment the data into in-sample and out-of-sample segments using a
slider control. The build process will take place on the in-sample
segment, and, following the build, the strategies will be evaluated on
the out-of-sample data.
Strategy Options Tab. This window presents the list of available
indicators and entry and exit orders in two table. The two tables represent
the "build set". By clicking on each entry in the table, the associated
indicator or order type can be added or removed from the build set. Removing
an item means it will not be considered during the build process. By
default, all items are initially included in the build set. This means all
items may be chosen during the build process, although whether or not any
given indicator or order type is used will depend on how it affects strategy
This tab also includes other strategy options, such as long/short
symmetry, market sides (long only, short only, or long/short), etc.
Build Goals Tab. This window contains a table of performance
weightings to guide the build process. In this version of Builder, a number
of new performance metrics have been added (see below). Additionally, you're
no longer limited to merely weighting each performance metric. You can now
select a target value for each metric. For example, if you want guide the
build process to strategies with 200 trades, you can click in the Type
column in the table in the row for the number of trades and select "Target"
from the pull-down menu. Then enter a value of 200 for the target value. You
would also enter a weight value to indicate how important this target value
is relative to any other metrics you've selected. You can leave only a
weight value for any metric that you want to minimize or maximize while
selecting both a target and a weight for any metrics that you want to
specify more precisely.
Build Options Tab. This window contains options that affect the
build process, such as the population size, number of generations, tree
depth, crossover percentage, etc. There is also a new option on this tab
that resets the build process if the out-of-sample results don't meet your
goals. You can have the program check the out-of-sample results every x
generations, and start over if a specified performance value is not met.
Other new features in version 1.1.0 include:
- Support for tick and range bar data.
- Support for TS 2000i. Select TS 2000i on the Build Options tab under
Code Output and re-evaluate a strategy using the Evaluate command (Build
menu) to convert the code to TS 2000i format.
- A new price data file format is available to make it easier to copy data
from TradeStation. While viewing a chart in TradeStation, just right-click
the mouse and select "View Data Window". This option can also be found in
the View menu in TradeStation. This will bring up a small window that shows
the price data in the chart window. Click the disk icon in the
upper-left-hand corner of the data window to save the price data to a text
file. You can then select this file in the Markets tab in Builder, which is
now capable of reading this format directly. This means the WriteOutPrices
function is no longer needed for current versions of TradeStation, although
it is still supported.
- When reading a price file, Builder now auto-detects the bar type, bar
size, session times, date range, and tick size.
- The tick size is used to round fill prices to the nearest tick.
- The number of entries per day for day trading strategies can be limited
to a maximum value via an option on the Strategy Options tab.
- Limit entry orders are now allowed.
- The out-of-sample (OOS) performance is listed in a table of results and
shown on the equity curve. If the OOS results are profitable, the OOS part
of the equity curve is shaded green; otherwise, it's shaded red.
- The trade-by-trade results are listed in a table. The trades in the OOS
segment are shaded with a green background if the OOS segment is profitable
or red if the OOS segment is unprofitable. In the in-sample segment, winning
trades are shown in green text while losing trades are shown in red text.
The trade data can be saved to a text file by right-clicking in the table
and selecting "Save to file". The file format is compatible with
Market System Analyzer (MSA).
- New indicators: volume, DI-/DI+, DMI, Accumulation/distribution, Chaiken,
momentum, MACD, FastK, FastD.
- New performance metrics: Ave win, ave loss, win/loss ratio, ret/DD
ratio, ave bars in trades, ave bars in wins, ave bars in losses, max win,
max loss, average maximum adverse excursion.
- Additional complexity has been added to the entry and exit orders by
generalizing the way stop and target prices are calculated.
- Specifying the number of generations as zero is now allowed. Doing this
produces a population of randomly-generated strategies. This can be a good
way to see the variety of strategy logic available from the program.
- The fidelity of the strategy evaluations relative to those in
TradeStation has been improved. Any differences between Builder's
performance reporting and the results of running the same strategy in
TradeStation should now be minor, with most differences erring on the
Several bug fixes have been made, including:
|The time-based exit order (exit when time exceeds a target value)
incorrectly used >, rather than >=. This has been corrected.|
|The drawdown calculation incorrectly omitted the trading costs on trade
exit. This has been corrected.|
Version 1.0.1 (5/27/10)
This version added an equity curve plot and a table of performance results to
Version 1.0.0 (3/28/10)
Initial release. This version is no longer
available for download.
$1495 Lifetime License v1.x
Terms & Conditions