|Builder: Frequently Asked
General Program Questions
Builder automatically generates strategy code based on the performance criteria that you specify. Technically, the program uses a technique called genetic programming, which "evolves" a population of trading strategies to maximize the so-called fitness, which is based on the performance criteria you select. More information on the build algorithm is provided here. The article library also includes information on genetic programming.
Builder is designed to be user-friendly and easy to use for those with a basic knowledge of trading systems. You don't need to know how to design or develop trading strategies, and no programming is required. However, you do need to know a good trading strategy when you see one. This is how you select the performance criteria that guide the build process. The program incorporates features such as out-of-sample testing, stress testing, and build monitoring rules that help insure good strategies are found, but it's ultimately up to you to decide when the strategies are good enough.
Genetic optimizers, such as the one in TradeStation, are designed to optimize parameter values, such as the inputs to a trading strategy. The algorithm in Builder is called genetic programming. By contrast, genetic programming optimizes the rules and logic of a trading strategy. It actually evolves the trading system starting from a set of possible technical indicators, logical operators, inequality operators, and entry and exit order types. In effect, it automates the manual process a strategy developer might go through in trying to develop a new trading strategy from scratch given only the market data and the developer's knowledge of trading and the trading strategy development process.
Yes, a trial is available. Builder is available as a fully functional trial for 14 days. The trial is functionally the same as the licensed version. After purchasing the license, the licensed version can be downloaded and installed through a link provided in your purchase receipt.
Yes, Builder will runs on both 64-bit and 32-bit versions of Windows. A version specifically for 64-bit Windows is available. This enables the processing of larger price files and larger populations of strategies.
Absolutely. The build algorithm was parallelized starting in version 1.2.0. This means Builder will take full advantage of all available cores on a multi-core machine. Because of this and the implementation of a more efficient strategy evaluation algorithm, version 1.2.0 is up to 25 times faster on multi-core computers than prior versions. The parallel processing algorithms were further improved for version 2.1.
Here are two examples for a quad-core 3 GHz processor (based on version 18.104.22.168):10 years of daily bars; population size of 1000; 5 generations. Processing time: 17 seconds.
14 years of 15 min bars of E-mini S&P; population size of 100; 5 generations. Processing time: 1 min, 1 sec.
Yes. Builder includes a "code output" option for selecting between current versions of TS and TS 2000i. Any strategy in Builder, including those built from prior versions, can be re-written for either version of TS at any time simply by selecting the strategy in the Build Results table and selecting Evaluate from the Evaluation menu.
Yes. Builder includes the ability to read text files of price data saved from MultiCharts. This means if you use MultiCharts to develop and run your EasyLanguage strategies, rather than TradeStation, you can now easily save your chart data for use in Builder. All strategies generated by Builder contain pure, standard EasyLanguage code (no dll's), so there is already maximum compatibility between Builder and MultiCharts in terms of strategy code evaluation.
Absolutely. Strategies created by Builder contain standard EasyLanguage code and can be automated just as easily as any other TradeStation strategy.
March 2010. Builder is undergoing continuous improvement with new versions coming out as soon as possible.
The following links discuss Builder and/or provide examples of its use:
Sviluppare strategie con Adaptrade Builder (TRADERS' Mag Italia, May
Are upgrades free?
Licenses and upgrades are two different things. The license for Adaptrade Builder is a lifetime license. This means you can use the version you purchased for as long as you want. If you purchase version 2.1, you can use that version indefinitely.
Starting with version 2.0, upgrades are free for one year from the date of purchase. After one year, an annual maintenance contract can be purchased, which will cover all new releases during the maintenance period. The maintenance contract is entirely optional and can be purchased at any time. For older versions (version 1.x), the policy is that all upgrades are free through the end of version 1. In addition, all licensees of version 1.x can upgrade free of charge to version 2.0.1.
Just to be clear, the maintenance fee has no bearing on the license you purchase, which is a lifetime license. If you purchase version 2.1.0, for example, you will be able to use that version for as long as you want without any additional payments. You could also upgrade for free to any version that was released within one year of the date of your purchase. To upgrade to any releases after that time would require purchasing a maintenance contract. The maintenance contract is approximately 20% of the purchase price. An upgrade button is provided in the license area of your online account to allow purchases of the maintenance contract.
Yes. Builder is licensed per-user, not per-computer. Provided it's for your own use only, you can install the program on multiple computers, such as on a home computer, a work computer, and a laptop. However, only one copy may be used at one time for a single-user license. The single-user license comes with three activations by default. More can be added upon request to accommodate computer replacement, operating system changes (which can require reactivation), and so on.
Builder already includes the most popular indicators, including ones from all major categories of indicators. Nonetheless, future releases of Builder will most likely include additional indicators, depending on interest. Also, the custom indicator feature (next answer) can be used to include other indicators in Builder in addition to the ones currently built-in to the program.
Yes. Builder now includes a feature that allows you to include your own custom indicators in the program. By plotting your custom indicator on a chart and saving the data 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. Builder will use the indicator in strategies and include 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 Input Data and Settings section of the user's guide.
The custom indicator feature can be used to include prices for other data series such as data2, data3, and so on, provided the secondary data streams have the same bar size as the primary series. For example, adding "Close of data2" and "High of data2" (in EasyLanguage notation) as additional columns of data in the price data file would allow for logical statements such as "Average(XAverage(Close of data2, N1), N2) crosses above TriAverage(High of data2, N3)". The ability to directly add multiple time frames will be added in a future release.
Yes. Starting with version 1.4, Builder allows you to select multiple markets and build over all selected markets. Each strategy is designed to work over the portfolio of selected markets.
Builder now supports EasyLanguage for TradeStation and MultiCharts, NinjaScript for NinjaTrader 7, MQL4 for MetaTrader 4, and AFL for AmiBroker. NinjaScript for NinjaTrader 8 will most likely be added in an upcoming release.
Compared to strategies built via the traditional, manual way, the strategies generated by Builder should be more likely to perform well in real time. This is because Builder incorporates several features that help guide the process to strategies that are likely to have good out-of-sample and real-time performance. In particular, Builder includes automatic out-of-sample testing, so you can immediately see how well the strategies perform on data not used in the build. Also, you can choose to optimize for statistical significance, maximize the number of trades, and minimize the system complexity, all of which will increase the quality of the generated strategies. Moreover, the strategy logic produced by Builder incorporates volatility-normalized parameters, which help adapt the strategies to different market conditions. The user's guide includes a section that covers factors affecting out-of-sample performance and ways to maximize the out-of-sample results.
Optimization is not the same as over-optimization. The key is to avoid over-fitting, which leads to results that look good in historical testing but don't hold up well out-of-sample or in real-time tracking or trading. Builder includes automatic out-of-sample testing so that all member of the population of strategies are evaluated out-of-sample. That means they're evaluated on data not used during the build process, which provides an objective measure of performance.
Builder also includes stress testing based on Monte Carlo analysis, which can be incorporated into the build process or run afterwards to evaluate the robustness of a strategy. In addition, there are build termination and build failure tracking rules that monitor the build process and help prevent over-fitting by monitoring convergence and stopping the build process before the over-optimization sets in.
Moreover, there are several metrics in Builder that can be incorporated into the fitness function just by selecting them from the Build Metrics table that will increase the likelihood of getting superior out-of-sample results. These include statistical significance, correlation coefficient of the equity curve, number of trades, strategy complexity, among others. In all Builder includes 84 different metrics that can be selected to define the fitness.
By themselves, most technical indicators are ineffective, especially when used as stand-alone trading systems and in the way originally recommended by the indicator's creator. That's probably because the markets tend to be efficient, so that any advantage afforded by a particular indicator is lost after it becomes commonly used. However, this is not how Builder works.
Builder combines indicators in unique ways, most of which have probably never been previously used in trading strategies. Most indicators can be thought of as ways to transform a price series so that the result is a smoothed or normalized version of the market. The transformation itself is not the most important part; it's how that transformed representation of the market is used to construct trading rules. This is where Builder differs from other trading strategy software. Builder looks at the indicator values as input to the construction of trading rules, rather than as the trading rules themselves. The algorithm that Builder uses to construct strategies means there is an almost infinite variety of unique trading logic available to build your strategies.
Builder also include adaptive and zero-lag indicators that are exclusive to Adaptrade Software. Because these indicators are not found in other platforms, it's unlikely the market has compensated for their advantage. Moreover, Builder includes non-indicator trading logic, such as price patterns, breakout entries, time-of-day, day-of-week, and other entry and exit constraints. If desired, strategies can be built without using any technical indicators.
I don't track strategies via live trading myself. However, some of my partners do; see, for example, the profiles of Petr Tmej and Tomas Nesnidal. Also, Builder will perform out-of-sample testing automatically to verify each strategy in the final population. It's always a good idea when developing trading strategies to test the strategies in real time by tracking them forward. Since it only takes a matter of minutes to start creating strategies with Builder, you can use part or even most of the trial period to test strategies forward in real time if you wish. Also, the strategies you create during the trial don't expire, so you can continue to test and track them even after your trial of Builder is over.
Generally speaking, if you've developed profitable trading strategies before, you can do so in Builder, just faster and with better tooling to develop, test, and validate your strategies. If you haven't, Builder will give you the tools to do so.
There are several possible explanations. One possibility is
that the date ranges of the price series are different between Builder and the
trading platform. It's also important to set the "Maximum number of bars study
will reference" in TradeStation (Format Strategies, Properties for All) to the
MaxBarsBack value listed in the Results table. In MultiCharts, the value is
entered under Format Signal, Properties ("Maximum number of bars study will
reference"). This will insure that the calculations start on the correct bar.
This is not necessary in AmiBroker since the code itself contains the
Also keep in mind that Builder does not look inside bars
(what TradeStation refers to as "look-inside back-bar testing"). If your
strategies enter and exit on the same bar or have multiple exit orders that
could be triggered on the same bar, such as a target and a protective stop, this
can results in discrepancies. As a general rule, it's probably better to use
more data for a given number of trades during a given trading period rather than
less. This suggests that going to a smaller bar size with more bars per trade is
preferable to having trades enter and exit on the same bar or having the bar
size be so large that both stops and targets could be triggered on the same bar.
Provided this is done, there will not be any ambiguity about which order is
triggered first, and the discrepancy associated with the lack of look-inside bar
testing can be avoided.
When I tried to run a strategy in TradeStation, I got an error message "Tried to reference more bars than allowed by current Max bars back setting." In MultiCharts, the error is "Tried to reference back more bars than allowed by current MaxBarsBack setting."
The max bars back (MaxBarsBack) setting in TradeStation and MultiCharts refers to the number of bars required to start the calculations. You need to set this to the value listed in Builder in the performance tables under MaxBarsBack. The same value is also listed in the comment block at the top of the strategy code. In TradeStation, you enter the value under "Maximum number of bars study will reference" in Format Strategies, Properties for All. In MultiCharts, the value is entered under Format Signal, Properties ("Maximum number of bars study will reference"). This will insure that the calculations start on the correct bar.
First, the exit end-of-day order type is not available in MetaTrader. For MetaTrader strategies, the "Exit after" option on the Strategy Logic drop-down menu should be used to exit intraday strategies at the end of the day or at a specified time. For TradeStation and MultiCharts, the "Exit end-of-day" order type on the Order Types menu in Builder causes the program to include the SetExitOnClose command in strategies. This command is mostly for back-testing purposes. In real time trading, it causes a market order to be generated on the close of the last bar of the current session. However, by the time the order is sent, the market has already closed, so the order is not filled. A work-around technique that some traders use is to define a custom session that ends a few minutes prior to the actual session close. Then the SetExitOnClose command will have time to exit your position prior to the end of the actual session. You just need to make sure to correctly set the session end time in Builder for the custom session, and, of course, the chart in TradeStation/MultiCharts has to use the same custom session as in Builder in order to avoid discrepancies between the results in Builder and those in TradeStation/MultiCharts.
A simpler approach is to use the "Exit after" option on the Strategy Logic drop-down. Set the time to at least one bar prior to the end of the session. That will trigger an exit prior to the end of the session.
If the stops are too large, the easiest solution is to reduce the maximum stop size on the Parameter Ranges window. There are separate parameter ranges for fixed size, percentage, and price-based stops. You can also set a target for the Max Loss metric. For example, if you want no more than 9 points loss on trades in the E-mini S&P, you can set a target for the Max Loss metric of $450 (i.e., 9 points x $50 per point). Alternatively, you can try including the Ave MAE (maximum adverse excursion) in the build goals. The Ave MAE is a measure of the intra-trade drawdown. There is also a Max MAE metric (maximum value of the MAE over all trades).
If the problem is that you're not getting protective stops in your strategies, you can include any selected exit type in all strategies. To include a protective stop, just select the protective stop in the "Include" column on the Order Types window.
The exit time option allows you to set an exit time for your trades. If, for example, you set the time to 3:00 pm, the strategy logic will be modified so that exits take place after this time. However, it's important to keep in mind that the time stamp on bars is typically the time the bar closes. For example, if you're using 30 minute bars, a bar time of 3:30 pm means the bar closes at 3:30. Since it's a 30 minute bar, that means it opens at 3:00 pm. The exit time option causes a trade to exit on the next bar's open if the time of the current bar is greater than or equal to the exit time. So if you've specified an exit time of 3:00 pm, the trade will exit on the open of the 3:30 pm bar (assuming 30 minute bars). The exit time will be listed as 3:30 pm because that's the time stamp on the bar, but the actual time will be a moment after 3:00 pm, which corresponds to the open of the 3:30 pm bar.
Also keep in mind that a trading strategy can only trade the bars of price data it has. If you're using 60 minute bars that end on even hours (e.g., 2:00 pm, 3:00 pm, 4:00 pm, etc.), and you specify an exit time of 3:15 pm, your trades will not end at 3:15 pm because there's no bar with that time. In this case, the trade would exit on the open of the 5:00 pm bar, which would be a moment after 4:00 pm.
If your data has been exported from MetaTrader 4, the bar time is the time the bar opens. However, the logic works the same way as described above, and the results should be the same for the same exit-time value.
The option to limit the number of entries per day uses the EntriesToday function in EasyLanguage or the equivalent function for other languages. The strategy code checks to make sure the current value is less than the specified limit before placing the orders. However, it can still place two orders Ė one long and one short Ė if both entry conditions apply, either of which or both may be filled, depending on the market. That means you could get up to two entries if both are filled, which could result in as many as four entries for the day.
The program never replaces the top strategy in the population. However, after new strategies are added, the top strategy may change, which means the top strategy from a prior generation may no longer be the stop strategy in the current generation. The strategy to replace at each step is chosen as the least fit member among a small number of randomly chosen members. The number of such members is given by the so-called tournament size, which can be changed on the GP Settings drop-down menu. To decrease the likelihood that one of the top strategies might be replaced, you can increase the tournament size. The default size is 2. Increasing it to a high number is not recommended and may hurt the performance of the program.
If many or all of your final strategies are the same or similar, you probably need to reduce the number of generations or use the Build Termination Options on the GP Settings menu. After a number of generations, the results will often tend to converge, resulting in duplicate strategies. This can also happen if insufficient variety is in the initial population. To get more variety in the initial population, either increase the population size or make sure that the build sets (indicator and order) have not been overly restricted by removing too many items. It may also be possible to increase diversity in the final set of strategies by increasing the mutation rate and decreasing the crossover rate.
Depending on the market, time frame, and other factors, it's always possible that a trading strategy will stop working at some point and need to be rebuilt or re-optimized. The user's guide includes a section on this topic. One approach involves tracking the trailing performance characteristics of the strategy and rebuilding or re-optimizing when the results start to differ significantly from the long-term averages. A simpler approach is to track the equity curve and look for deviations from straight-line performance. If the strategy needs to be rebuilt, it's just as easy with Builder to create a new strategy as it was to develop the original one.
One point to keep in mind: if you try to re-optimize a strategy's parameter values before the strategy starts to underperform, there's no reason to think you'll get different results (assuming it's already optimized) if you re-optimize over the same data. You can either re-optimize over more recent data while dropping the earlier data from the date range or wait until the strategy has been underperforming sufficiently that the optimization process is likely to find better parameter values over the same data than those you previously found.
No. Any changes made to the settings, such as build goals or strategy options, have no affect on an ongoing build. However, if you stop the build then restart it, any changes you've made will be picked up and used in the new build.
When I compile my MT4 strategy, I get
warning messages about functions that have been deleted from the file. Is there
Download a fully functional free trial version of Adaptrade Builder. Click here to download now without obligation.
If you'd like to be informed of new developments, news, and special offers from Adaptrade Software, please join our email list. Thank you.
For Email Marketing you can trust
Copyright (c) 2004-2017 Adaptrade Software. All rights reserved.