What I was measuring
The tool marks a setup when several conditions line up: price has pierced a volatility band and come back, the smoothed trend line points the same way, and there is a structural level nearby. It then draws an entry, a stop two ATR away, and a target at a fixed multiple of that risk.
It had been published for months. I had never measured it.
What finally made me measure it was finding, while reading the code, that the level proximity filter did nothing at all. It was built from two conditions joined by "or", and the two conditions were each other's opposite — so one of them was always true. The panel printed ENABLED. Every candidate passed through.
That is a separate story. But once I fixed it, I had no idea what the tool actually did, so I added a counter: how many setups were marked on the loaded history, and how many reached the target or the stop first.
The numbers
MNQ, three timeframes, on whatever history the chart had loaded.
| Timeframe | Setups | Target | Stop |
|---|---|---|---|
| 30 minutes | 27 | 8 | 19 |
| 15 minutes | 55 | 16 | 38 |
| 5 minutes | 40 | 11 | 29 |
| Total | 122 | 35 | 86 |
Twenty-nine percent, and the same twenty-nine on all three. That consistency is the interesting part. A number that holds across three different timeframes is a property of the method, not noise.
A note on how the counter works: when a bar touches both the target and the stop, it counts the stop. There is no way to know from bar data which came first, and assuming the target would flatter the result.
Why twenty-nine percent is not the problem
A hit rate on its own says nothing. At 29 percent you break even when the winners average about 2.4R. Above that you make money, below it you lose.
The tool's fallback target was 1.5R.
At 29 percent with 1.5R: the winners bring 0.29 × 1.5 = 0.435R, the losers cost 0.71 × 1 = 0.71R. That is minus 0.275R per trade, before commission and slippage. Not a bad run. Not a difficult market. Just arithmetic.
So I raised the minimum reward to risk to 2.5 and turned off the invented fallback target: if no structural level sat far enough away, no setup was marked at all.
The result was 5 setups, 4 setups and 4 setups across the three charts. On the entire loaded history.
Where I stopped
At that point I had changed the rules twice on the same data. The honest name for what comes next is parameter fitting: keep adjusting until the chart looks acceptable, then publish the version that looks best. Whatever comes out of that process is a description of this particular history, not of the market.
So I stopped. The two attempts between them say something fairly clear: a 1.5R target at this hit rate loses money, and a 2.5R target almost never fills. There is no comfortable setting in between, because the entry does not produce enough directional follow-through to reach a target far enough away to pay for the losers.
That is a result. It is not the result I wanted.
The harder problem underneath
Here is the part I did not expect to be writing.
The tool was an attempt to mechanise what I actually do. I thought the gap between the two was a matter of implementation. Reading my own rules back, the gap is not implementation. Most of what I do cannot be written as a condition.
"I take more size on a stronger setup." How much stronger? There is no number behind that word. It is an assessment made from the whole screen at once — where the move came from, how the last attempt failed, what the session has been doing. A script needs a threshold. I do not have one.
"Order flow is optional confirmation." When I have it, I use it. When I do not, the candle is enough. A rule cannot have an optional input. Either it is in the condition or it is not, and both versions are wrong: with it, I skip trades I would have taken; without it, I take trades I would have skipped.
"If the open shows a large one-sided push, I go with it." Large compared to what? Compared to the last few minutes, the last few days, or to what that instrument usually does at that hour? I know it when I see it. That sentence is not a specification.
"I stopped trading one of the sessions." This is the most honest example. I did not measure it. I stopped because that session kept costing me, and after a while I noticed the pattern. It is a good decision. It came from experience, not from a study. A script would need a rule — an hour range, a volume threshold — and whichever one I picked would be a guess dressed up as a parameter.
None of this makes the discretionary version better. It might be worse; I have not measured that either. But it does explain why the mechanical version underperformed it: they are not the same method. The script implements the part of my process that can be written down, which turns out to be the smaller part.
What happens to the tool
It stays unpublished as a signal generator.
What it becomes instead is a marker: the trend line, the bands and the structural levels, with a mark when conditions align. No entry, no stop, no target, no tick-and-cross outcome marks. Nothing that implies it knows where price is going, because it does not.
The version with entries is still on my machine. If I come back to it, the next step is not another parameter. It is a proper test: freeze the rules, run them on an instrument and a period I have not looked at, with commission and slippage included. Until that exists, there is nothing to publish.
Why write this up
Because the number is the thing I would most like to leave out, and because every indicator page on this site has a section about where the tool falls short. It would be strange to write those and then quietly not mention the one where the answer was no.
Also, if you are building something similar, the second half of this is probably more useful than the first. The measurement took an evening. Working out why the mechanical version does not match the discretionary one took longer, and I am not finished.