Part (2/3) — Refiner Trade: From Gross Sharpe to Net
The first part described the idea and put a gross Sharpe of about one and a half on it. Gross is the easy figure to produce and the least interesting one to quote, because it assumes you can trade for free. Here I put the strategy in front of a broker’s fee schedule and an integer number of shares, and the single number becomes a curve — one that depends almost entirely on the size of the account it runs in.
Modelling the desk
The model has to trade the way a broker actually fills you. Execution is on the close: the signal is built from closing prices, so we trade the close with a market-on-close order, which carries no look-ahead and fills at the price the signal saw. That choice fixes the share count, because a market-on-close order fills whole shares only. Fractional shares are available for ordinary orders, but the closing auction takes integers, so every target position is rounded — negligible for a large book, distinctly not for a small one. The remaining input is the fee: Interactive Brokers charges the greater of thirty-five cents an order or a third of a cent a share, across a book nine instruments wide, the eight refiners and the sector hedge. Nothing else enters.
The cost cliff
Take the simplest policy first: rebalance every name to its target, every day.

At a million dollars the drag is barely there; the gross 1.48 becomes a net 1.25. At ten thousand dollars the identical strategy returns a Sharpe of minus 1.3. The edge did not change, only the account did. The whole effect sits in the fee. A two-percent-volatility book on ten thousand dollars carries positions of a few hundred dollars — one or two shares of a hundred-dollar refiner — and rebalancing nine of them daily means paying the thirty-five-cent floor some eighteen times a day, every day. That floor is a fixed cost; it is the same thirty-five cents whether the order moves one share or a thousand. As the account shrinks the fee stays put and takes a larger share of a fixed-percentage return, until there is nothing left for it to take.
Trade less
The remedy is not better execution but less of it. A position is left alone until its weight has drifted far enough from target to be worth a fill, and only then rebalanced. That threshold — the no-trade band — is the one parameter that matters.

Widening the band raises every account and rescues the small ones: the ten-thousand-dollar book moves from minus 1.3 to plus 0.4, the twenty-five-thousand from plus 0.2 to plus 0.9. The useful band scales with size. A small account should trade rarely and in size, around one to one-and-a-half percent of equity; a large one can track closely, at a few tenths. The peaks are broad plateaus rather than points, which turns out to matter, and I return to it below.
Why not just smooth it?
There is a familiar alternative to a hard threshold: smooth the target. An exponentially-weighted average over the position damps the day-to-day changes, and the turnover falls with them. Anyone who has done signal processing reaches for it first. It does not help here, and why it does not is the useful part.

With the band on one axis and the degree of smoothing on the other, the reading is the same in every panel: moving along the band, trading less often, climbs out of the red, while moving into heavier smoothing does nothing and eventually costs. Smoothing off, or nearly off, is best throughout. The reason is that the problem is not turnover but trade count. An exponential average shrinks the size of each order, the shares that cross, but it still places an order almost every day, and the fee is charged by the order, not by the share. Smoothing therefore pays the floor as often as before while adding a cost of its own: it lags the signal, and the edge is short-horizon, so the lag discards the very reaction the strategy exists to capture. The band cuts the number of orders directly and adds no lag; it holds still until moving is worth the fee. A deadband is the instrument for a fixed cost per trade; a low-pass filter is the instrument for a turnover problem, and this is not one.
Engineering, not fitting
This deserves a careful word, because sweeping a parameter and keeping its best value is precisely how overfit backtests are made. The distinction is in what is being optimised. Strategy research optimises an unknown — an edge estimated from noisy returns, where every turned knob risks fitting the noise. The no-trade band optimises a known. The thirty-five-cent floor and the third-of-a-cent rate are published and fixed; given the strategy’s turnover and the account size, the band that minimises cost drag is close to something you can work out on paper, turnover times fee against capital, and the backtest only confirms the arithmetic. That is why the optimum is a plateau and its exact value lies within the noise: it is set by the cost structure, which is fixed, not by the return path, which is not. This is not a search for a lucky parameter but the design of an execution policy against costs already known.
What each account keeps
With the band taken from the cost structure, whole shares, execution on the close and the real fee, the strategy resolves into a fan of net equity curves, one for each account, below the costless gross ceiling.

The result is plain. Above roughly fifty thousand dollars the sleeve is genuine and executable, at net Sharpes between one and one-and-a-quarter with a few points of drag off the gross. At twenty-five thousand it still works, near nine-tenths. At ten thousand it survives at 0.4, but only because the band is carrying most of the weight, and it is no longer quite the same clean object. Below that the fee dominates.
The edge itself is the same 1.48 in every panel; what the account size sets is how much of it the fee lets you keep. There are two levers against the fee. One is the band, used here. The other is the volatility target, left untouched: running the book hotter makes each position larger relative to a fixed fee, which is the only real way a small account recovers some of the lost ground, in exchange for a rougher ride.
What’s next
That is the strategy carried from an idealised backtest to a fee schedule and a whole number of shares. For anyone past a small account it stands on its own. The final part adds a second, independent signal drawn from the same futures data, with a property I did not anticipate: including it lowers the turnover of the combined book rather than raising it, so it improves the net picture at every account size, the small ones included.


Hi,
Thank you for the excellent write-up on the refiner lead-lag trade. It's a really fascinating approach to the 3-2-1 Crack Spread, and I particularly enjoyed the transparent breakdown of execution costs and the no-trade band in Part 2. It’s rare to see that level of practical detail in most blogs.
While reading through the mechanics, I found myself wondering about a few technical nuances and would love to hear your thoughts if you have a minute:
1. Regarding the sizing algorithm: when you mention to "simply long/short the basket based on the aggregate Z-score", does the strategy jump to a full binary exposure (+1 or -1) as soon as the Z-Score crosses zero? Or do you scale the allocation proportionally to the magnitude of the Z-Score? I'm asking because a proportional sizing approach would naturally cut exposure during low-conviction periods, which might explain how you managed to keep the Gross Max Drawdown so remarkably low (under 3%) over a 20-year period that includes 2008 and 2020.
2. How do you normalize the Z-Scores for the different lookbacks (1, 5, 10, and 21 days)? Do you scale the 63-day standard deviation in the denominator by the square root of time for the longer periods? It seems that if the daily volatility isn't scaled, the 21-day trend would naturally produce much larger numerical values and almost permanently hit the +/- 2 caps.
3. When looking at the total performance figures and the equity curves, do those include the yield on uninvested cash? Given the strict 2% volatility target, I imagine the strategy leaves a huge chunk of the account in idle cash, making the risk-free rate a pretty massive driver of the total return.
4. Lastly, just a quick data question: for the Norgate futures, did you use back-adjusted continuous contracts or just unadjusted ones (relying on the statistical filter to handle the roll gaps)? For the Yahoo equities, does the series assume full dividend reinvestment? And finally, when shorting the "energy-sector ETF", did you use XLE or another specific proxy?
Thanks again for sharing such a robust and intellectually honest framework. Really looking forward to Part 3!