OK, let me add a few reasons to the pot :
- backtesting code is tricky to write. so you need very qualified people to R&D a system. not everyone can do this properly. even for a simple system, you need to code properly slippage, execution and system failure.
- nothing works forever.
that is misunderstood sometimes. it means a system usually work well in some market conditions and should be break even in other conditions (bad systems just break down).
so a system must be monitored to check that it is 'within parameters'.
- backtesting must be done with good data for long periods of time. a reason to fail is using too little data. forward testing only (without backtesting) is a very, very, very bad idea.
- backtesting done with known outcome (so cheating) will fail in real life.
it seems silly, but that's the one of the most common mistake. one code a system with a few indicators calculated on close value, but enters within the bar.
during backtesting, both the close and total bar is known. in real life you don't have all this data. if your system counts on it and enter in the same bar, you will lose your shirt.
that goes back to my first point : it's hard to code.
(.. need to go back trading. There are other reasons, but maybe later. anyway, don't be fooled, backtesting works as well as system trading. but it's not for everyone imho )