You are about to test an investing idea against real history. This guide assumes you have not invested before and explains every word as it comes up.
You are writing down a rule for picking shares, then asking the computer what would have happened if you had followed that rule in the past.
A rule might be "each month, buy the 20 companies whose share price has risen the most over the past six months". The app takes that rule, walks forward through history one day at a time, and works out what your money would have been worth at the end.
Read these once. You will meet all of them in the app.
Everything the app knows about the market comes from one zip file. Understanding what is in it, and what is not, is half of understanding your results.
README.html, written
by the same tool that built the pack. It says which dates you can backtest, how far
back the prices go, how many companies are in it, which companies from the class list
are not in it and why, and a fingerprint that the app shows in its header so
you can tell packs apart. Five minutes with it saves an hour of wondering why a ticker
is missing.
A pack carries more history than it lets you test. Suppose your rule ranks companies by their return over the past six months. On the first day of your window the app needs six months of prices that are already behind it, or the rule has nothing to work with. So the pack reaches back about two years before the window. Those earlier days are warm-up: the app uses them to get your rule ready, and it will not let you backtest over them.
Your course grades your strategy over three stretches of history. You get the first one at the start of term: the design window. You build your rule against it, argue with it, and hand your design in. Only after that are the other two released: the test windows. Until then nobody in the class knows which dates they are, so nobody could have tuned a rule to them. That is the whole point of holding them back.
Look at where the test windows fall. They are not after the design window; they are years before it. That surprises people the first time, because "test" sounds like "what comes next". It is allowed, and it is deliberate. A test is a stretch of history your rule was not tuned on, and a stretch from 2023 is exactly as unseen by your rule as a stretch from 2027 would be. It also has a practical advantage: the instructor can build every pack before the term starts and release each one on the day it is due, rather than waiting for the future to happen.
The app asks you one question at a time. Answer it, press Next, and the next question opens; the menu on the left shows where you are. Your answers build up as plain English under the Strategy tab below the question.
.zip) onto the big box at the top left.
This takes a few seconds because it is reading years of daily prices. The data stays
on your computer. Nothing is uploaded. Before you drag it, open the
README.html posted beside it and read what the pack covers; the header of
the app will then show the same dates and the same fingerprint, so you know you
loaded the right one.
Your name, your team, and a name for your strategy. Then the important part: the thesis.
"I buy the 20 best performers each month" describes the rule. A thesis sounds like this: "When good news comes out, the price moves part of the way immediately and the rest over the following months, because large investors buy in stages. So recent winners keep winning for a while."
Three ways to do it. Pick one.
| Method | What it means | Good when |
|---|---|---|
| Rank on company accounts | Sort every company by things like profit or size, and keep the top slice. | Your idea is about what kind of company to own. |
| Name them yourself | You type the tickers. | Your idea is about specific companies you have researched. |
| Everything | Consider all companies, filtered only on price and how heavily they trade. | Your idea is purely about price behaviour. |
There are also two optional boxes for names you want to hold no matter what the ranking says: one for companies you always buy, and one for companies you always bet against. Type tickers separated by commas.
Finally, two filters worth understanding. Minimum price skips very cheap shares, which are expensive to trade. Minimum daily trading skips companies that barely trade, because in real life you could not buy or sell them without moving the price yourself.
This is the heart of your strategy. You pick one or more measures, and the app sorts companies by them.
For each measure you also choose a direction. "Prefer high" on momentum buys recent winners. "Prefer low" on volatility buys the calmest companies. If you use more than one measure, you set how much each counts.
Holding 5 companies means each one matters enormously. Holding 50 means no single company can hurt you much, but your best idea is diluted. Somewhere between 15 and 30 is a common compromise.
You also choose how much of your money to invest. 100 percent means fully invested. Above 100 percent means borrowing, which the app will let you do and which will cost you interest.
The simplest choice is the same amount in each company. You can instead give more to the companies that scored best, or more to the calmest ones.
The maximum size per company stops one holding taking over your portfolio.
A stop loss sells automatically if a holding falls a set percentage below what you paid. A trailing stop does the same but measures from the highest point since you bought, so it follows the price up. A take profit sells once you are up by a set amount.
These feel safe and are not free: they sell during temporary dips and you pay to trade every time. Try your strategy with and without them and compare.
Weekly, monthly, or every three months. Trading more often follows your ranking more closely and costs more.
There is also a delay setting with a minimum of one day. This exists because in real life you cannot see today's closing price and also trade at it. The ranking is worked out using data up to and including the rebalance day, and the trades happen at the closing price of a later day. You cannot turn this off, and it is the single most important fairness rule in the tool.
Above the form there are two date boxes: the day your test starts and the day it ends. They begin filled in with everything your data pack covers, and that is a perfectly good answer. Press Run and the results open on their own screen, with the record of your choices one tab away.
You can also test a shorter stretch by moving either date inwards. You cannot go outside what the pack covers, and if you type a date that is outside it the app moves it back and tells you it did. The pack holds some extra history before the start date so that rules needing six months of past prices have six months to look at on day one; those extra days are not part of what you are testing.
| Number | What it tells you | What to watch for |
|---|---|---|
| Sharpe ratio | Return earned per unit of bumpiness. Your grade uses this. | Above 2 usually means something is wrong, or the period was unusual. |
| Total return | How much you made or lost over the whole period. | Compare it with the market line on the chart, not with zero. |
| Volatility | How bumpy the ride was. | Above about 25 percent is a rough ride for a share portfolio. |
| Maximum drawdown | The worst fall from a high point. | Ask yourself whether you would truly have held on through it. |
The first chart shows what one dollar would have become, with the market alongside for comparison. The second shows how far below your best point you were at each moment. The second chart is the one that tells you what holding this strategy would have felt like.
Everything the strategy did and why: every rebalance, every automatic sale, every forced sale. If something surprising happened, this is where you find out when.
Press Download spreadsheet on the Print/Export tab and you get a normal Excel file with three tabs.
| Tab | What is in it |
|---|---|
| Daily summary | One row per trading day: portfolio value, cash, and how much was invested. |
| Daily positions | One row per company per day: how many shares, the price they are valued at, what that comes to, and its share of the portfolio. |
| Trades and events | Every buy and sell, in plain English, with the reason. |
Row by row. On any row of the positions tab, shares times price
should equal the value. Put =D2*E2 in a spare cell and compare it with
column F.
Day by day. Filter the positions tab to a single date and add up the value column. Add the cash figure for that same date from the summary tab. The total should equal the portfolio value on that row.
If either check fails, tell your instructor: you have found a real bug.
A negative number in the value column means a position you have bet against. That is why the tab labels each row as either "Owned" or "Borrowed and sold".
If you test fifty combinations and keep the best, you have found the one that happened to suit this stretch of history. Decide your rule from your thesis, then test it.
Turn the spread setting up from 8 to 30 and run again. If your result falls apart, your advantage was in getting a good price, not in the idea. This is the cheapest sanity check you have and it takes ten seconds.
With five holdings, one lucky company can carry your entire result. Look at the holdings table and ask what happens if you delete the best one.
The companies available to you are ones that still exist today, ranked by how heavily they trade today. Firms that collapsed years ago are not in the data at all, and firms that listed after a window are not in that window's pack. That makes every strategy look somewhat better than it would have been in real life, and more so on an older window: the 2023 test pack is missing about forty companies that did not exist yet, and the ones it has were chosen for being large now, not then.
A strategy that ends up 40 percent after falling 60 percent along the way is not one most people could actually hold. The path matters as much as the destination.
..._strategy.json, which holds your rules...._results.json, which holds your numbers.| What you see | What it means |
|---|---|
| The app will not let me continue past a step | Something in that step does not add up. The message says which two settings conflict and how to fix it. |
| "does not match the checksum" | Your data file is damaged or was edited. Download it again. |
| "This browser cannot save your work here" | Nothing is being saved. Export your strategy file before you close the tab. |
| My portfolio is underfilled every time | Your filters are leaving fewer companies than you asked to hold. Loosen a filter or hold fewer companies. |
| I lost my work | Re-import the strategy file you exported. This is why you export early. |
The full reference, with every formula written out, is in METRICS.md. Where the data comes from and what its limits are is in DATA_NOTES.md, which is assigned reading.