Three of my four trading strategies died last month.
PEAD looked fine gross and inverted the moment I priced the spread. VWAP mean reversion died before costs. Symmetric trend came out flat.
The one that lived runs at 1.27 profit factor, 1.79 out of sample.
Full log with the numbers and the gates that killed them.
Two bars from a zero line: a green bar above labelled gross, positive, and a red bar below labelled net of costs, after spread, slippage and real fills.
4/ The literature is not wrong. PEAD survives on liquid US large caps with turnover control. It just does not survive on my universe, where the drift is smaller than the spread I would pay to harvest it. The anomaly is real. The extraction cost is calibrated to eat it.
3/ Then I priced the costs honestly. Spread, slippage, the realistic fill instead of the mid. The edge did not shrink. It inverted. Positive gross, negative net.
Survivorship bias in one sentence: your universe is the instruments that lasted long enough to be in your dataset.
Everything that died is the part you needed to model.
The counter file I actually use: number, hypothesis, why I expected it to work, metrics, verdict.
https://t.co/EwVCQvB8w4
How many attempts is your best result standing on?
SOMEONE ASKED ME TODAY HOW MANY TRADES SIT BEHIND MY BEST NUMBER. THAT IS THE RIGHT QUESTION, AND IT IS WHY I KEEP A COUNTER.
This is the least fun file I maintain and the only reason I do not believe my own best result.
THE PROBLEM NOBODY COUNTS
Every time you tweak a parameter and re-run, that is a test. Test fifty variants and at least one will look great on noise alone. Not because it works. Because you rolled the dice fifty times and kept the best roll. This has a name, multiple testing, and it quietly invalidates most retail backtests.
THE FIX IS EMBARRASSINGLY SIMPLE
Count. Every hypothesis, every variant, every idea I abandoned in ten minutes goes in a file with a number next to it. When something finally looks good, I ask: good against how many attempts? A 3-sigma result after two tries is interesting. The same result after eighty is expected by chance.
WHAT THE COUNTER CHANGED
Before it, every promising curve felt like a discovery. After it, most of them read as attempt 47 out of 60, which is exactly what they were. The counter did not make me a better researcher. It made me a less gullible one.
THE UNCOMFORTABLE PART
Once you count honestly, you realise how few real edges you have found. That number is smaller than your ego wants. It is also the only honest one.
The log template is in my reply. The dead ideas are half the value.
Your two-block idea is close to how I would tighten the next run. My only caveat is that A and B are both development data once I tune parameters to work on their average. C becomes the first blind test, and D a second control only if I freeze the rules before seeing either result. In the article I used one recent 20% holdout, touched once, so I am not calling that bulletproof.
And no, I was not training a position-aware ML trader. The GH work is mostly validation machinery. The article itself is deliberately simpler: daily rule-based tests across four hypotheses. Three died, one weak long-only trend survived. I kept the signal and the exposure/risk layer separate.
Your second theory is the one I worry about too. Making the model balance-aware may turn a weak forecast into a much larger policy-search problem. More degrees of freedom can just create more room to overfit. The test I would want is whether the intelligence layer adds information, rather than a more elaborate way to express the same signal.
When you used the two time series, were they separate calendar regimes, separate instruments, or rolling windows?
I was treating the split like the test. It is not.
With a holdout that small, 1.79 may not be distinguishable from 1.27 at all. The honest label is inconclusive, not validated.
Define what counts before you pull the data. The split is a diagnostic, not the verdict.
The prompt rule that survived three months: give the model permission to say SKIP.
Without it, "nothing useful here" comes out as three paragraphs of confident nothing.
Yes, thatβs the distinction I was missing. I was letting the split act like a test. With a holdout that small, 1.79 vs 1.27 is simply inconclusive if the uncertainty intervals overlap. The next pass should define the metric, meaningful difference, and decision rule before pulling the data. The split is a diagnostic, not the verdict.
Three of my four trading strategies died last month.
PEAD looked fine gross and inverted the moment I priced the spread. VWAP mean reversion died before costs. Symmetric trend came out flat.
The one that lived runs at 1.27 profit factor, 1.79 out of sample.
Full log with the numbers and the gates that killed them.
You are right, and that is the reading in the article too: a higher out of sample number usually means an easier window, not a stronger edge.
Honest answer on the count: the holdout is the last fifth of the period, so it is small. Under a hundred trades I would call it an anecdote with a chart attached. I will pull the exact number and post it.
Your decay from 0.370R to 0.297R is the shape I would expect from something real.
@2senseless@quantscience_ The list is the useful part, thanks. Monthly macro prints mean the sample grows slowly while the feature count does not, and that gap is where my own results kept dying. How do you keep validation honest at that shape?
@2senseless@quantscience_ Fair on OHLCV giving you probabilities and levels, not prediction. Which data points would you add first? Mine died at costs rather than at predictive power, so I want to know which ones survive net.
Both files from the article, ready to use.
Five file agent memory: https://t.co/XKPLRsaiDN
Hypothesis log with the attempt counter: https://t.co/EwVCQvB8w4
Almost everyone skips STATE. STATE is the one doing the work.