Telechart for Forward-Testing Trading Strategies

Last week I wrote an article about a situation that often stymies traders who are serious about learning a discretionary strategy.   During forward-testing, many tools inadvertantly give clues as to what the next bar will do, rendering the effort useless.

One tool, however, presents a clean view of the chart at all times.   That tool is Telechart by Worden Brothers.   

See more about Telechart – click here

Here’s an example.  Can you tell from the charting (not the price action) what the next bar will do?


I don’t think so.   Click here to see the chart with one more bar.

Forward-testing – done correctly – gives a trader the chance to see a trading strategy in action does bar by bar.  Even though it lacks the emotional component of live trading, its a necessary step to learning discretionary trading.  It does take real effort though.

If you’re serious enough to do forward-testing, then you owe it to yourself to set up an environment without “cheats” that cheat yourself out of the real experience.  Telechart  is the one tool in my kit that helps me do that.

Forward-Testing Spoilers

forward-testing spoiler

Many of the tools I’ve tried subtly spoil the surprise when used for forward-testing.

What I mean by forward-testing is taking a chart, scrolling back in time – without peeking! – and then stepping forward one bar at a time.  The purpose of the exercise is to try out a discretionary trading strategy in a safe environment.   Granted it is not the same as live trading but it does give one a way to see how  the decision-making  might work, if not feel.

The trouble is that many tools give away the secret of the next bar with subtle and not-so-subtle hints about what the next bar is going to do.   These type of signs you wouldn’t really find at the right edge of a real chart, they are artifacts of display in the middle of the price history.  

Take this example at the top of this article.   Can you guess what happens with the next bar without applying any trading strategy, just looking at how the chart is rendered?

Next post will explain this example and show you a tool that’s not a spoiler.

Backtesting Introduction


Click here for my Backtesting video interview at Moneyshow.   It gives an introduction to backtesting and covers two main topics:

What is Backtesting?

In short, backtesting is the process of testing a strategy by describing that strategy as a set of rules and applying those rules to historical price data.   It is often automated by using a software backtesting engine such as StockFinder or TradeStation.

Read this blog’s Backtesting Definition

How to Do Backtesting

Do it Yourself Manually

Tedious, tedious, tedious!   Error-prone too.    The plus side of backtesting manually is that you gain intimate knowledge of each historical trade by looking at it yourself.   The downside of manually backtesting is that it is so time-consuming that its not feasible to back test a large sample size

Automate with Computer Software

Using specialized computer software to do the backtesting speeds up the process considerably.   Automated backtesting is still hard work requiring advanced skills to get it right.   

Hire a Quant

This is the ideal way to get a strategy developed, analysed and backtested. It is the path taken by the large trading firms.    You will compete with them for talent, so you need to be able to pay the big bucks to go this route.

Read BackTesting Report

Backtesting Report  is the easiest, most cost-effective way to get backtesting results.   This is a report of the backtesting that I use to develop my own trading strategies so you know we strive very hard to get it right.   Offering electronic reports and video classes over the web helps keep the costs down to keep it in reach of the average trader or active investor.    To find out about specific Backtesting Reports to help you learn how to buy, sell and ultimately develop a strategy of your own, visit the Orders page.

My BackTesting Engine Evaluation in 2007

Before starting the current round of major backtesting, I evaluated several tools to decide which to use.    This article shares the highlights of that endeavor and the main reasons for the outcome.

TradeStation was my incumbent.  By 2007 when I made my last evaluation, I’d had a couple years of experience with it as a charting tool and a backtesting engine.    I’d also used TradeStation Radarscreen to scan the market for opportunities, but found it awkward and slow.   The backtesting had proved reliable but limited to running one stock at a time.     Then TradeStation came out with two critical enhancements:  a means to read in outside data for historical prices, and hooks to automatically process more than one stock per run.

Another favorite tool is Telechartwhich has been my top-down market analysis tool since 2005.    It doesn’t have a backtesting engine.   However, in early 2007 the Worden Bros who make Telechart had just come out with the Blocks Backscanner.    I tried it out extensively and really liked the super support as well as the flexibility.   Its strength is scanning through a huge list of stocks in incredibly fast run time.    But as a very young tool, it didn’t yet have all the features I wanted like independent data sources.  Plus, it was so new  in 2007 that I often felt like a beta tester which is exciting but not what I was looking for to prove out trading strategies.    

I didn’t get past reading the specs on other backtesting tools.    Trading Blox seemed to locked into their own strategies, plus a very high price tag.  I’d previously been exposed MetaStock, struggled with it back in 2004, and was not keen on revisiting it.   I had heard good things about Wealth-Lab but didn’t want to get locked into Fidelity, and didn’t see all the features I wanted there either.

So basically my choice came down to the new Blocks or my old standby TradeStation.   I came to the conclusion that the optimal way to proceed was to rely on each tool’s strengths.    So I use TradeStation for backtesting because I can set up the large-scale, controlled software environment for it.   This gives me a way to prove out a strategy which I do only once per strategy.

Once a strategy is proven and I’m ready to trade it, I usually want to scan the market for opportunities to apply it.   I do this daily, after the market closes, using Blocks 2.0 because it is so very fast at scanning the market.

I recently attended a class on Worden Stockfinder 4.0.  It looks promising —  the Blocks program grown up and renamed.  I’ll review my impressions in another post.

(Backtestingblog is a Worden affiliate, meaning I may be compensated if you buy their product.  Blocks, Stockfinder, Telechart are trademarks of Worden Brothers Inc.   TradeStation is a trademark of TradeStation. TradingBlox is a trademark of Trading Blox. Wealth-Lab is a trademark of Fidelity. MetaStock is a trademark of Equis.)

BackTesting Tool Selection Criteria

In response to questions about choosing backtesting tools, I’ll share my experiences in the next few posts.     If you’re doing your own backtesting, its worth taking some time and effort to pick the right tool for you because you will need to use it extensively to get meaningful results.   And you risk your account equity when you trade on the results so it better not be buggy!

The first most important step when you are looking for a backtesting engine — or anything else for that matter — is to think about what you want.    Are you testing with just one commodity or across the whole stock market?   What is your budget?  How much programming flexibility do you want vs having it work very intuitively?

My criteria for this current project were:

  1. Backtests correctly.    Don’t take this for granted.   Being able to verify results and spot-check each indicator test by hand is essential.
  2. Open to writing custom technical analysis strategies.
  3. Open to reading in outside data.    CSI data tested out as the cleanest data and that is an external data source to everything but CSI’s own tools.
  4. Open to writing out calculated data beyond the scope of the canned reports.   For example, adjusting the position size based on the distance to the stop can have a huge effect on performance.   Its very helpful to be able to write out the stop placement and the size but you won’t find them in the typical vendor’s report.
  5. Computer-readable output reports.   Necessary for compiling stats and drawing conclusions from a huge number of runs.  You can get around this requirement if you can write out all the data you need ala bullet #4.
  6. Reproducible results.   Different runs of the same backtest should have the same results.   This means being able to lock down the version in use.
  7. Can run automatically through a large list of stocks.   Sadly, most backtesting engines only run on one stock at a time.  Others allow you to add on software to run multiple tickers automatically.
  8. Cost.    Personally, I’m willing to pay to get what I need so this was a lower priority.   Even so, it makes sense to choose the most affordable option that gets the job done.
  9. Familiarity.    Since I already had experience with several tools, those had the inside track in my evaluation of backtesting tools.

Those were my key selection criteria.      Before reading further, take a minute to write down what you want from a backtesting tool.

Testing the Tester

Here’s another mind-numbing task when you are doing your own backtesting:  testing the tester.

This week I was forced to do something I don’t like at all.    I had to upgrade my backtesting software, TradeStation, to a new version in the middle of a set of runs.    But when my computer went whacko, upgrading TradeStation proved to be my only option to restore sanity.

The truth of the matter is that TradeStation hangs intermittently on 2 of my machines.   The other two are fine…so far.   I’ve posted the problem in the forums, taken lots of suggestions, but nothing seems to help for long.   Eventually, TradeStation gives a client access layer error, becomes unresponsive and needs to be shut down.    This leaves 2-3 TradeStation processes running which I manually kill.    Microsoft puts up a little warning box that says terminating a process unexpectedly may cause system instability, or some such.   Mostly its just fine, but do it enough times and Whacko!    I needed to re-install TradeStation and the only version available was one level up.  

In my previous career I had the priviledge of working with one of the best software engineering teams on the planet who’s customers are the best hardware engineering teams on the planet.     Many of those teams would avoid changing versions period.   But in the middle of the project, they really shied away.   When they did upgrade, as a mteer of course, many would run their own regression tests and compare the results between the old and new versions.

For this week’s upgrade, I did regression testing and am happy to report that the results of extensive backtests matched between new and old versions.   Too bad the intermittent failure still matches as well!

Even though it tested out okay this time, there’s always the potential for bugs to be introduced in a version change.   This goes not only for TradeStation but other backtesting engines and other software as well.    This is another important thing for you to think about if you are doing your own backtesting: you need to have a controlled process for introducing new software to make sure that unexpected errors aren’t introduced.

BackTesting Moving Averages

Why Moving Averages

As a trader or investor, the only reason to investigate moving averages is to gain knowledge to increase profits. Like many other technical indicators, moving averages are meant to help us objectively tell the market status at any given time. This helps us see through the emotions of the day and make rational decisions, which we’re told will lead to greater profits and/or fewer losses over the long run. Moving averages (MAs) smooth the series of prices for a stock. MAs are most often used to identify the trend of market direction, and are classed as a trend-following indicator. This doesn’t mean that MAs are only for long-term investors – short term traders use them also. Moving averages can be used to screen stocks for good candidates, signal buying opportunities, and offer sell signals.

Why Backtest – A Story

The goal of backtesting is to find out if moving averages really do lead to better results and what are the most promising ways to apply MAs. Let me tell you a short story. While I was putting together the results for one of the moving average BackTesting Report issues, I happened to visit a friend. At her house, I came across some reading material from a well-advertised discount stock broker. In it was an article that advising its customers to use a particular moving average length applied in a certain way to get the best results. I had my comprehensive tests right in front of me and I can tell you that broker’s method did not get the best results although they did mention a MA length that is useful in other ways. I had in my hand test results that showed that the way that broker applied the moving average had a win rate worse than the baseline when tested on 7147 stocks over 14 years of stock market data. Clearly the broker wasn’t running that kind of testing. It’s up to the customers – us! – to fend for ourselves and find out what works versus what doesn’t.

How to Calculate MAs

When backtesting moving averages, the first decision is how to calculate the moving average. Do you want a simple moving average (SMA)? Or something designed to track price better such as an exponential moving average (EMA)? You might consider an experiment to compare the win rates of the two different averages. I did just that a couple years ago, and while I don’t have the results to publish, I came away with the notion that it didn’t make a big difference whether I chose SMA or EMA — just pick one and use it consistently. So for this project, I choose to use simple moving averages because I see them mentioned in commentary most often. To actually do the calculation, I relied on the built-in function which came with TradeStation. (The choice of backtesting engine is another decision which is general enough to write about in another post.)

How to Use MAs

Next you need to pin down how exactly you want to apply moving averages. How will you interpret the relationship between price and moving average? What rules will you use to decide when to buy and sell? You don’t have to read long about stocks before coming across a bullish reference to a stock trading above its 200-day moving average or its 50-day moving average, or even the 10- or 20-day MA. Or advice about buying stocks as they cross their 50-day or 200-day moving average. These are important rules to test in the backtesting engine. And then there’s the moving average crossover – a classic method of technical analysis. That makes three distinct ways of using moving averages to test.

Going more in-depth, some trading texts talk about the slope of a moving average. If you hark back to algebra and consider the MA as a line, to find its slope you would pick two points on the line and apply the usual formula ((x2-x1)/(y2-y1)). This brings up the question of how far apart to pick the two points which can make a difference to results. Really, since the MA is being used to identify the trend, we just want to know if it is sloping up or down. Then we can simplify the whole calculation by noticing that if the price is above the moving average, it must be pulling the average up, and a price below the MA pulls it down. Thus another reason to test the efficacy of price above the moving average.

Parameter settings

Once you decide on how to use the MAs, you need to pick a selection of various lengths to test. Beware of over-optimizing. Somewhere out there is a guy with backtesting results showing 3895% gain or whatever using just the right moving average. Too bad he doesn’t know what MA will produce those results in the future. That said, you need to try more than one length to make sure that your results aren’t a fluke. Stick with defaults settings or the ones you hear about most in the media. Finding the one perfect parameter setting is not going to make you rich. Finding a cluster of good, robust settings just might do you a great deal of good though.

As a practical matter when backtesting allow enough data lag before measuring. All tests must begin measuring at the same place for apples-to-apples comparison among different MA lengths. For example, if you’re testing a 200-day moving average, it will take the first 200-days of data to calculate the first point of that moving average. That means that the first day you could possibly have a signal is 200-days into the data set. To make a fair comparison with, say, the 10-day moving average, you need to make sure not to count any signals from the 10-day moving average before the 200-day is ready to go. Fortunately TradeStation has a way to set the “Maximum number of bars study will reference” in “Properties for All” strategies which forces the backtesting engine to wait that long before tabulating data.

More Profit from Buying or Selling?

Moving average rules, and in particular moving average crossover rules, are often discussed as a reversal system. This means that one signal, say the MAs crossing upwards is a buy signal and then its opposite, say MA lines crossing down, is not only a sell signal but also the trigger to go short. Theoretically, that’s just fine but many people are not interested in shorting the market. They are looking for techniques to help them buy and maybe sell. Even a person who regularly sells and sells short might use different techniques for buying and selling. For these reasons, it’s wise to test the buy signals separately from the sell signals.

This poses a dilemma because it’s hard to evaluate a buy signal in isolation. One way to do this is to use timed exits – that is, exit the trade or sell the stock after a certain amount of time elapses. I chose to run each backtest three times with three different times exits because different people have different styles and different needs. To produce backtesting results useful to swing traders, I exit after 2 days. To model position traders, 20 days. To meet the needs of active investors, backtesting holds each position for 200 days. This gives a way to isolate the buy signals and find out just how useful the moving average is to stock buyers of various temperaments.

Need to Define Goodness

One more very important thing to consider if you are backtesting moving averages to find out how well they do in the stock market: How will you know what is good? You need objective criteria for success. That means identifying the key statistics such as win rate, expectancy, hypothetical equity gains, etc. It also means setting standards for acceptable performance in each of these areas.

An example illustrates why this is important and why it’s not as easy as it first appears. Say your tests show a win rate of 55% for a particular indicator. That may might not be so good if, say, 62% of all stocks went up during the same period of time. Or if only 25% of stocks rose during that time period, your 55% win rate would be spectacular. What is good depends on how it compares to baseline market performance under the same conditions.

You can download a free copy of the BackTesting Report Baseline issue by clicking here.

Test Set

For a meaningful backtest, you need to have enough data to make a statistically valid comparison. At the minimum, that means 30 trades. Even if you are trading just one instrument – just one stock or just one currency pair – I think it’s important to test your trading strategy on many different instruments to prove its robustness. I went over the top with an extremely large test set — 7147 stocks over 14 years — to make sure my results would apply in a wide variety of market conditions.

You can get your copy of my backtesting reports on moving average buy signals by clicking here.

Selecting Time Periods for Backtesting

When people say they want recent data for backtesting, I wonder two things:

1. How do they test longer term strategies using only recent data?   Anything involving a 200 day moving average, for example, needs nearly a year of data just to calculate the average.   Then it needs multiple years of data to get various signals and see how they play out.

2. How did they do in 2008 relying on anything resembling the recent past of 2003-2007.   It seems to me that you need to go back to 2001, at the very least, to find data that represents a crash.

When I selected time periods for backtesting, I looked for a nice long segment that included sideways, up, and down markets.   I ultimately decided on May 1994- April 2004 as the core time period for my testing.    This includes the tech bubble and the bubble bursting in a double-dip recession.  1994 showed less volatility, and the 1998 crisis broke up the monotony of the rising market.

Added to the core period is the next segment for out-of-sample testing.   I read somewhere (sorry, forgot where) that the out-of-sample period should be one-third the length of the initial period.   May 2004- April 2007 fit that bill timewise. The market action during this period was flat and upward biased.

Yes, I could detrend the data but I’ve found that approach very unintuitive.   If I am testing trend-following strategies, it doesn’t make sense to me to remove the trend.  Instead, I do a baseline test using a simple strategy and use it for comparison to supposedly smarter strategies.    This approach, and the fact that I apply it during varying market conditions, provides a way to see if a strategy really adds value.    A strategy demonstrates “alpha” by doing better than the baseline.

Another note about my time periods.   I began my efforts with this data set in May 2007.   Hence the time periods run May – April of each year.

My third time period, May 2007 – April 2008 came about because a) it was there, and b) this period is now one-third the previous period, making it the out-of-sample for the out-of-sample data.   As it turns out, the market action was again very different, allowing further stress-testing of the strategies.   Here again, I think it would be a mistake to focus solely on the carnage of the recent past.   Dawn has so far always followed the dark of night.

How To Clean Price Data for Backtesting

Cleaning data for backtesting is not easy but its very necessary to get meaningful results.    Mis-adjusted price splits can skew the price data and mislead the unwary backtester into thinking they’re found the holy grail when the strategy merely happens to catch the good side of a bad gap.

Here’s the steps to screen out dirty data and produce a clean dataset:

1. Pick at least 3 candidate data vendors.

2. Format the data for comparison.

3. Write a program to do a smart comparison and run it on the 3 candidate data sets.

4. Analyze the mis-compares to see which set is in error.   if 2 of 3 sets agree, assume that’s the correct value and the outlier is wrong.

5. Send feedback to the data vendors so they can fix the errors.

6. Select the set of historical price data to use for backtesting and lock it down to prevent changes during the backtesting.

7. Feed the golden price data to the backtesting engine.

This process took me several weeks of work but was worth it to get accurate results.  There’s little point of going to the work of backtesting if the underlying data is riddled with errors.

Read on for details if you are going to attempt this on your own or if you just want to see what preparations go into serious backtesting. Continue reading “How To Clean Price Data for Backtesting”

Stock Ticker Lists for Backtesting

As a private trader, I like to scan the whole US stock market for opportunities each day.  I want a backtesting stock list that is representative of my trading style.  However, most other backtesting publications are limited to the stocks in the S&P500 or even the SP-500 index itself.   For my backtesting, I choose a much wider selection of stocks.   

The foundation of my stock list is the top 7500 stocks on NYSE, AMEX, NASDAQ in 1994.   This list is somewhat representative of the world markets too by including ADRs (international stocks cross-listed on the US exchanges.)   

Unlike most readily available backtesting data, I included stocks that have since been delisted – either failed, merged, taken private.  I bought the premium-priced delisted historical data, as well as the regular stock data, from CSI Data.   For example, Lehman Bros (LEH) is in my test set even though they have been delisted from the major exchanges and relegated to the pink sheets with TWA airlines.  In the process, both these tickers disappeared from most historical data sets which leaves the remaining data with a strong survivorship bias.  Using delisted data more accurately models the markets.

I spent several weeks validating which reduced the test set of stock tickers by screening out dirty data.   Of course, this also increased the accuracy.

The list further shrinks as time moves forward and the delisted stocks drop off.    I did not purchase new listings because the test set is still more than big enough to make a statistically valid sample.   Sometimes new listings appear on their own when tickers get “recycled”  — new companies adopt the ticker of delisted companies.    At times, especially in the longer test periods, there are actually two different companies using the same ticker (they start with different tickers, one dies, the other changes to the dead company’s ticker and that ticker is applied to all historical data for that stock).  These cases are denoted by appending “DUP” to the ticker for one of the companies. 

My stock lists are available here, by test period:

May 1994 – April 2004

May 2004 – April 2007

May 2007 – April 2008