#1 RealTest Backtests
Supercharge Your Trading Now
Reduce drawdown, build diversification, or speed up your development time.
RealTest imports Yahoo Finance data in one Import line at no cost, and for ETF rotation, single-instrument systems and learning the software it is the correct tool rather than a compromise. It cannot test stock universes, because delisted companies are absent and there is no index membership history. The rule is simple, which is that free data works until your strategy selects from a universe instead of trading named instruments.
RealTest imports Yahoo Finance data natively. It is one line in an Import section, it costs nothing, and it is a legitimate way to start. It is also the wrong data for about half of what people then try to do with it, and the failures are not obvious, so it is worth knowing where the line sits before you build a month of work on the wrong side of it.
Import:
DataSource: Yahoo
IncludeList: SPY, EFA, EEM, AGG, TLT, GLD, IWM
StartDate: 2007-01-01
EndDate: Latest
SaveAs: rotation.rtd
Run that once with the -import flag and RealTest writes a data file your strategies then read. Nothing else in a script changes because of where the data came from, which is the useful part. A strategy developed on Yahoo data runs unmodified on Norgate data later, so starting free costs you nothing in rework.
Yahoo data is fine when the instruments you trade still exist and you already know which ones they are. That covers more than beginners expect.
If your strategy is a rules-based system on a handful of ETFs, free data is not a compromise. It is the correct tool and the paid subscription would tell you nothing new.
When a company is acquired or goes bankrupt, its ticker stops returning history. Backtest a stock strategy on Yahoo and every name in your universe is a company that made it to today, which inflates the result by a margin that grows with the length of the test and shrinks with the size of the companies. This is the single reason stock universe testing on free data does not work, and no setting fixes it. We went through the mechanics in the five backtesting mistakes that fake an edge.
Yahoo will not tell you which companies were in the S&P 500 in 2011. That means a filter like RealTest's InSPX has nothing to read, so any strategy defined as trading members of an index cannot be expressed properly. You are left approximating a universe with a list you assembled today, which is the same bias arriving through a different door.
Yahoo supplies prices adjusted for splits and dividends, and those adjusted series get revised as new dividends are paid. A backtest run today and the same backtest run next quarter can return different numbers on identical rules, because the price history itself changed. That is manageable once you know it happens, and confusing for a long time if you do not.
The related trap is mixing adjusted and unadjusted prices in one decision. A stock that split two for one shows a $50 price in an adjusted series where it actually traded at $100, so a rule containing an absolute price threshold means something different in every era of the test.
Yahoo does not publish a supported public API. The endpoints that serve the website still work and every downloader relies on them, but they change without notice, rate-limit large requests, and sometimes return a missing-data error for a symbol that is trading normally. For an import of a dozen ETFs this is a non-issue. For a nightly refresh of several hundred symbols it becomes a maintenance job.
| What you want to test | Yahoo | Why |
|---|---|---|
| ETF rotation, fixed basket | Fine | Instruments are long-lived and known in advance |
| Single-symbol system on SPY or QQQ | Fine | One instrument, no universe to bias |
| Learning RealTest | Fine | Syntax and workflow do not depend on the vendor |
| Any S&P 500 or Russell stock strategy | No | No delisted names, no membership history |
| Small cap or microcap work | No | Survivorship distortion is largest exactly here |
| Anything you intend to trade with real money | Re-test it | Prototype free, then confirm on data that includes the failures |
The trigger is not a date, it is a change in what you are asking. The moment your strategy selects from a universe rather than trading a named instrument, free data stops being able to answer the question. That is the point where Norgate or a comparable provider becomes the cost of getting a real answer, and the relevant tier is the one that includes delisted securities.
Between those two states there is a useful habit. Prototype on Yahoo because the loop is fast and free, then re-run the same script on paid data before any capital is involved. If the result survives the change, you learned that your edge was not made of survivors. If it collapses, you learned that for the price of a subscription rather than a drawdown.
Import six or seven ETFs first and check the data before writing any strategy. Look at the earliest and latest bar for each symbol, since Yahoo histories start at different dates and a universe where one instrument begins in 2013 will silently change what a monthly rotation does over its first years. Then write one simple system and read the trade list rather than the summary.
If you want a working script to start from rather than a blank file, our free RealTest strategy costs nothing and runs on free data, which makes the whole first pass a zero-cost exercise. What that leaves you with is the RealTest workflow in your hands and a clear view of which question you are asking next.
Yes, natively. An Import section with DataSource set to Yahoo, a list of symbols and a SaveAs filename is all that is required. Run it once with the -import flag and RealTest writes a data file that every later backtest reads.
It depends entirely on what you are testing. For a fixed basket of ETFs, a single-instrument system or learning the software, it is the right tool and paid data would tell you nothing extra. For any strategy that selects stocks from a universe, it cannot give a trustworthy answer.
Two reasons that compound. Delisted companies stop returning history, so the universe contains only survivors, and there is no record of which companies were in an index on a past date. Together those mean the test runs on a universe assembled with hindsight.
No. When a company is acquired or fails, its ticker stops returning history. That is the specific gap that makes free data unsuitable for universe testing, and it cannot be worked around inside the backtester because the names were never in the file.
Because the adjusted price series is revised as new dividends are paid. The rules did not change and the software did not change, the history did. It is manageable once you expect it, which is why a dated copy of the data is worth keeping alongside any result you intend to act on.
Adjusted prices are restated for splits and dividends so that returns are continuous, while unadjusted prices are what actually traded. A stock that split two for one may show $50 in an adjusted series where it really traded at $100, so any rule with an absolute price threshold behaves differently across eras.
No. The endpoints that serve the website still work and every downloader depends on them, but they are unsupported, subject to change and rate-limited. For a dozen ETFs that is irrelevant. For a nightly refresh of hundreds of symbols it becomes ongoing maintenance.
At the point your strategy starts selecting from a universe rather than trading instruments you named yourself. That is the moment survivorship and index membership begin to decide the answer, and the relevant paid tier is one that includes delisted securities.
No. The data source only appears in the Import section, so the same strategy logic runs unchanged on Yahoo or on a paid provider. Starting free costs nothing in rework, which is the main argument for prototyping on it.
Norgate for US, Australian and Canadian stocks plus futures, CSI for back-adjusted continuous futures, Tiingo, EOD Historical Data, MetaStock format, and plain CSV files for anything else including crypto exports.