KenKem Journal

What Makes a Trading System Durable?

· #systematic-trading #robustness #research-process #backtesting #risk-management

Riveted steel bridge trusses photographed from below at night
Durability is a structural property, not a bigger number. Photo: A P / Pexels.

A trading system is durable when its result survives conditions it was never tuned for: a different cost regime, a shifted session window, a neighboring parameter setting, a year I did not choose. Durability is not a bigger number. It is a smaller dependency on luck, and unlike most things in trading it can actually be measured.

What follows is the set of checks I run on my own work, including the ones my own strategy fails.

Why does slowing a decision down improve it?

Because speed removes the step where I find out I was wrong for free.

Instant thinking makes every setup feel urgent, every result feel final, and every loss feel personal. The systematic version of the same decision is slower and duller: observe, measure, compare, then decide. That loop is the whole workflow of the Dquants engine I developed, and nothing in it gets decided from a single glance at one window.

Here is a small example of the loop paying for itself. Someone asked whether refusing new entries in the final fifteen minutes of a session would help. It sounds obviously sensible. I measured it instead of assuming it, and it added no value, so it was not adopted. In the same batch of tests, closing open positions at session end turned out to be roughly money-neutral, and going flat every Friday evening was the change that actually mattered. Three plausible ideas, one that earned its place. I would not have guessed which one.

What happens to a system with no invalidation?

It gets emotionally sticky and starts defending itself.

A rule that does not know where it is wrong will keep asking for more room. That is why in the Dquants engine a rule only ships with its invalidation defined up front, so the price where the hypothesis is dead is decided before there is money on it, not during.

The same logic applies to whole ideas, not just trades. Across the research program I have tested dozens of variants and rejected the large majority of them, including several that looked profitable right up until the deflated statistics or the out-of-sample window exposed them as luck. Two edges have survived everything so far. The graveyard is the part of the record I trust most.

Why do I keep the logic small?

Because every component I add is another thing that can be fitted to noise, and another thing I have to debug at the worst possible moment.

Master Volume Profile is a small set of volume-profile rules rather than a pile of indicators, and that is control rather than minimalism for its own sake. When something misbehaves I want to trace it to a named input.

Cutting things is part of that. I tested the Kaufman Efficiency Ratio as an entry filter and it produced no out-of-sample lift, so it is not in the product. No single tool is the edge anyway: DuckDB, C++ and Python do the research, MQL5 does the execution, and none of them would be worth anything on its own. The edge is in how they fit together and in what the process refuses to allow.

Does restricting when a system trades actually help, or is that superstition?

It is a fair question, and it has an honest test.

Session filters are easy to abuse. Restrict the hours enough and any strategy looks better, because you have quietly selected the hours that happened to work. So on one gold configuration I displaced the session window deliberately by two to three hours and re-ran it. The result held. That tells me the edge is not a fragile time-of-day artifact, which is the only reason I am comfortable shipping a session filter at all.

A related check from the same test day: that configuration was selected on one broker's feed and then evaluated on a different one, so the evaluation carries no direct selection bias from the search. Honest status on it, in the same words I use internally, is candidate rather than certified. It still owes a sensitivity plateau on the second feed, an anchored walk-forward, and a demo forward test.

What number do I check before I believe the story?

Expectancy, and the shape of the distribution underneath it.

Stories are easy to sell and expectancy is hard to fake. If the average outcome per trade is weak after costs, the strategy has a problem regardless of how good the explanation sounds. If the average is carried by a handful of rare lucky trades, the strategy is fragile even when the headline looks fine.

The gold configuration I have validated most heavily runs at a profit factor of 1.42 over 1,423 trades on real tick data, and its average win is about the same size as its average loss. That matters more than it sounds: the edge comes from a positive win rate rather than from payoff geometry, which is a narrower and more fragile thing to be right about, and a good reason not to quote a win-rate figure as if it were an achievement. Every number here is backtest and MetaTrader 5 confirmation, dated 2026-07. None of it is a live track record.

What is statistics actually protecting me from?

Mostly from myself.

Statistics does not make trading certain. It tells me when a result is too small, too noisy, too concentrated or too fragile to carry the weight I want to put on it. In practice that means the Deflated Sharpe ratio, the Probabilistic Sharpe ratio, and a minimum track record length, all fed the real number of configurations I searched rather than a flattering one. For the gold configuration the Deflated Sharpe reads 1.000 against a 0.95 bar, and the minimum sample needed was 192 trades against the 1,423 I have.

I used to stop that paragraph there. A hostile external review of my own process in August 2026 showed me why I should not. At the trial dispersion I actually recorded, that deflation gate would need something like ten to the fourteenth candidate configurations before it could return a failing number. So the 1.000 is not the system passing a hard test. It is arithmetic, and the auditor was right to say so. The test with real discriminating power is the probability of backtest overfitting, and mine came back above 0.5 in eight of nine cells, which says that picking the best backtest from my parameter surface generalises worse than a coin flip. My configurations survive that because they were chosen off a stable plateau rather than at the peak, not because the gate cleared them. I now report the failing test in the same paragraph as the passing one, because printing them apart is how a number that cannot fail ends up doing the work of proof.

The more useful thing that framework does is flag my own strategy's weak parts. The mean-reversion leg inside Master Volume Profile has only 51 trades behind it, far below that 192-trade floor, and contributes about one percent of the return. It stays switched on because it is net positive and uncorrelated. It does not get described as half the engine, because the sample does not support that sentence.

What does a system that ages well look like?

Boring, and slightly worse than its best version.

The clearest signal I have found is that re-optimizing hurts. On my walk-forward tests, the fixed locked configuration was positive in five folds out of five, while re-optimizing the parameters for each fold managed four out of five. The version that adapted less did better. Alongside that, the out-of-sample profit factor came in at 1.327 against 1.203 in training, and out-of-sample above in-sample is the opposite of a curve-fitting signature.

I also only accept parameters that sit on a plateau, where the neighboring settings behave similarly. A result that works at exactly one setting is a landmine with a good screenshot attached.

None of that makes the system immune. Eleven of twelve calendar months were profitable in walk-forward, and the twelfth was not: August 2025 came in at a profit factor of 0.69 and minus 21.6 percent. Push the same fixed configuration into 2024, a year of roughly double-normal spread relative to volatility, and it returns minus 67.1 percent on real MetaTrader 5 fills with a 74.2 percent drawdown. My own research note says it plainly: no shipped sizing survives a 2024-type year. Aging well is relative, and the honest full-cycle Sharpe is around 1.8, not the 3.8 the good window shows.

Why do capable traders stay stuck?

Because they optimize outcomes when the fixable thing is behavior.

Wanting better results and needing better decisions are different problems, and only one of them is upstream. Predictions are the output. The process is the asset, and it is the only part that can be inspected, versioned, and improved. When the market changes, a good process tells me where to look; a good prediction tells me nothing at all.

That is the argument for putting the constraint in code rather than in willpower. Rule checks and coded risk caps do not have a bad week.

What did building it teach me that research could not?

That the assumptions were in the adapter.

Writing the execution layer in MQL5 was the education. Ideas that looked clean in research showed their flaws only where they met an actual terminal: fill behavior, edge cases, the difference between what the engine thinks happened and what the broker did. That is why the research engine and the shipped Expert Advisor are held to a byte-for-byte parity gate on the identical tick stream. If they disagree, one of them is lying, and I would rather find out on my machine.

Building it is also how I learned what the model still does not cover. Spread is charged on every trade, but slippage, latency and swap are not modeled yet, so I treat live results as thinner than backtest rather than richer. And the expensive-day standby that keeps the strategy out when measured cost relative to volatility runs too high is currently validated on one broker's feed only. On wider feeds it stays switched on almost permanently, which is useful to know and not flattering to publish.

I keep coming back to the same conclusion. Durability is not something you add at the end. It is the accumulated result of every idea you were willing to let fail early.

Frequently asked questions

What makes a trading strategy robust rather than just profitable? Robustness is insensitivity to choices you made arbitrarily. The practical tests are whether the result holds when you shift the session window, move to a neighboring parameter setting, change the broker feed, or run a different year. My own gold configuration survived a deliberate two to three hour session displacement and a feed change, and failed a 2024 cost regime. Both facts are part of the same picture.

Is re-optimizing a strategy regularly a good idea? Not in my testing. On walk-forward folds, the fixed configuration was positive in five of five while per-fold re-optimization managed four of five. Re-optimizing gives the parameters fresh noise to fit. There are strategies where periodic refitting is right, but it should be a measured decision rather than a default habit.

How many trades do you need before a backtest means anything? It depends on the strategy's own return distribution, which is what the minimum track record length calculation estimates. For my gold configuration the floor was 192 trades and the validated sample was 1,423. That ratio flatters me, though, and the same review made me measure it properly: with a return skew of 3.49 and excess kurtosis near 19.5, the Gaussian-equivalent effective sample on my wider research stream is about 326, not the nominal count. The honest margin is 326 against 192, which is comfortable rather than overwhelming. A noisier strategy needs a larger sample to make the same claim, so there is no universal number.

Why not remove the weak part of your own strategy? The mean-reversion leg is net positive and uncorrelated with the breakout leg, so it stays on. What it does not get is a claim it cannot support. With 51 trades it is below the significance floor, and it contributes roughly one percent of the return. Keeping it and describing it accurately are two separate decisions.

Do session-time filters actually improve a trading system? Sometimes, and it is worth proving rather than assuming. The failure mode is selecting the hours that happened to work, which improves any backtest and nothing else. The test I use is displacing the window on purpose and checking whether the result survives. In the same round of testing, one plausible time-based rule improved things, one was neutral, and one added nothing and was dropped.

Is a high profit factor enough to trust a strategy? No. A profit factor describes one sample and inherits every limitation of the window it was measured on. The same fixed configuration in my research reads well in its favorable regime and returns minus 67.1 percent on real fills in 2024. That is not two strategies, it is one strategy measured over a longer and less kind stretch of history.

Does Master Volume Profile have a live track record? No, and I will not imply otherwise. Everything published so far is research: backtests on roughly 160 million real broker ticks plus MetaTrader 5 confirmation runs. Slippage, latency and swap are not modeled yet, so live should be expected to be thinner than backtest. Treat every figure as historical evidence about a hypothesis rather than a prediction.

Does any of this make trading safe? No. It removes some specific ways of being wrong, which is a much smaller claim. Drawdowns of 20 to 30 percent are realistic for the configuration described here and I plan around a 30 to 40 percent peak. Trading involves risk including the risk of loss, and no amount of validation turns a hypothesis into a certainty.


Written by KenKem, a software engineer and founder of twenty years, learning quantitative trading in the open and publishing the process, rejections included.

This article was composed from posts 85 to 96 of the KenKem build-log series. Educational purpose only. Not financial advice. All figures cited are backtest or confirmation-run results, not a live track record. Past performance does not guarantee future results.

← All journal articles

Chat