Idea in brief
Eric Crittenden (Standpoint Asset Management) runs a fund that holds the author's own money: trend following on futures, global equities and Treasury bills. At the end of the episode, the author described how the trend part is built. According to the author, there is only one innovation: all the complexity the market does not pay for has been removed from it.
Entry is a simple channel breakout. Long at a 6, 9 or 12-month high, short at the same kind of low. Stops are far away: the author considers a stop of 2-3 ATR too close. A chandelier, a standard deviation exit or a pullback of a third of the annual range all fit, as long as the method is the same for all markets and follows price at a distance.
A risk budget sits on top. If all positions hit their stops at the same time, the fund loses about 10% of capital. The author stresses that this is not a volatility target but the total portfolio risk (heat). If all the stops are hit at once and the budget is lost, the "kill switch" is triggered: the fund does not try to win the loss back, and new trades open only on new trends.
The system differs from turtle-4w-2w in window length and in the stop. The Turtles enter on a 20-day breakout and exit on a 10-day one; here the windows are 6-12 times longer, and the exit is set by a separate wide stop. In always-in-breakout the position reverses on the opposite breakout, while here the system waits out of the market after a stop. The kill switch differs from kill-switch-max-dd in that it does not turn the system off for good, it only keeps it from going back into old trends.
Why it might work
The author explains trend followers' returns by who pays for them. After commissions, futures are a negative-sum game in the author's view, and a speculator's profit is ultimately paid by a hedger. Hedgers have deep pockets and are willing to lose on the hedge because it removes a risk they do not want to carry. The author calls this a hypothesis: the market is anonymous, and it cannot be verified.
Wide stops follow from how profit is distributed. According to the author, on any 3-5 year window 80% of profit comes from 20% of markets, and from the ones where the move seemed exhausted. A close stop knocks you out of such moves before they happen. For the same reason the author does not trim a position that has grown: doing so underweights the markets that make the result.
The author mixes speeds for the sake of the equity path. In the author's tests the long trend is better in the end but can lag for years. Over the fund's five years the short system performed best, and the long one was weak. Without mixing speeds, according to the author, the long-term expectancy is the same, while the risk of an unlucky sequence is much higher, and the market does not pay extra for it. The author did not explain how this fits with the earlier statement that the long trend works better in tests.
The risk budget answers the question of how much can be lost if everything goes wrong at once. The kill switch keeps a small painful episode from turning into a fatal one.
The episode gives no return or drawdown figures for the trend part. The logic above is the author's position and has not been verified by us.
Rules
Entry: three breakout windows (author, details Finetiq)
// daily bars, each market and each window calculated separately
Windows = {126, 189, 252} // author: 6, 9 and 12 months; Finetiq: 21 trading days per month
// Finetiq: the author mentions both three windows and three systems (short, medium, long),
// but does not link them directly. Here each window is treated as its own system
FOR EACH N IN Windows
IF no position in system N AND Close > Highest(High, N)[1] AND NOT BlockedLong(N)
BUY AT NEXT BAR OPEN // Finetiq: breakout on the close
IF no position in system N AND Close < Lowest(Low, N)[1] AND NOT BlockedShort(N)
SELL SHORT AT NEXT BAR OPEN // author: "the same with the lows"
Stop: one method for all markets (author, parameters Finetiq)
// author: 2-3 ATR is too close. Three types work, as long as they are the same everywhere
// Variant 1. Chandelier
LongStop = HighestHigh(since entry) - 5 * ATR(20) // Finetiq: 5 ATR, Wilder
// Variant 2. Standard deviation
LongStop = HighestClose(since entry) - 6 * StdDev(Close - Close[1], 100) // Finetiq: 6 daily deviations
// Variant 3. A third of the annual range
LongStop = HighestHigh(since entry) - (Highest(High, 252) - Lowest(Low, 252)) / 3 // author
LongStop = MAX(LongStop, LongStop[1]) // Finetiq: the stop only moves up, mirrored for shorts
SELL STOP at LongStop
// no target, exit only on the stop
Size and risk budget (author, allocation Finetiq)
// position risk = distance to the stop × size × point value
Risk(i) = |Close - Stop(i)| * Units(i) * PointValue(i)
Heat = Σ Risk(i) / Equity // author: about 10%
// author: each market's share of risk by open interest, the denominator is always 10%
// Finetiq for retail: equal shares for each "market × window" pair
Slots = number of markets * 3
SlotRisk = 10% * Equity / Slots
Units(new) = SlotRisk / (|EntryPrice - Stop| * PointValue)
// Finetiq: size is calculated only at entry, a position that has grown is not trimmed
// (author: do not adjust positions for volatility, do not take from winners).
// If Heat plus the risk of the new position is above 10%, the new position is reduced to the remainder
Kill switch (author, formalization Finetiq)
// author: the kill switch fires when all positions hit their stops at once
// and the fund loses about 10% (the whole risk budget). No winning it back after that:
// new trades only on new trends, risk is calculated from current capital
StopLoss20 = loss of trades closed on the stop over the last 20 bars / Equity[20]
IF StopLoss20 >= 8% // Finetiq: "at once" = 20 bars, "about 10%" = 8% or more
FOR EACH system N that exited a long on the stop within these 20 bars
BlockedLong(N) = TRUE
IF BlockedLong(N) AND High > the highest High of the closed trade
BlockedLong(N) = FALSE // Finetiq: new trend = a new high above the previous trade
// mirrored for shorts
// Finetiq, a stricter variant to test: block system N after any single stop
Variant B. A budget for a changing number of positions (author, equity program)
// author: the 20% target risk is divided by the current number of positions
TargetRisk(i) = 20% * Equity / number of positions including new signals
// three options when new signals appear: skip them, take extra risk, cut the old positions.
// The author picks the third and calls the first two a bad idea
// Finetiq: for futures substitute 10%. Cutting conflicts with the rule
// of not touching winners, so compare both approaches
Market set (author, composition Finetiq)
// author: 6-7 sectors, the most liquid markets within each,
// diversification both across sectors and within them
// Finetiq: the 3-4 most liquid futures per sector, 20-25 markets in total
// author: the fund underweights equity indices because it holds an equity portfolio alongside,
// and the S&P 500 share is capped. A standalone trend system does not need this
Parameters
| Parameter | Value | Source |
|---|---|---|
| Breakout windows | 6, 9 and 12 months | author |
| Windows in days | 126, 189, 252 | Finetiq |
| Side | long and short | author |
| Breakout condition | close beyond the level | Finetiq |
| Stop width | wider than 2-3 ATR | author |
| Stop types | chandelier, standard deviation, a third of the annual range | author |
| Chandelier | 5 × ATR(20) | Finetiq |
| Deviation stop | 6 × StdDev of daily changes over 100 days | Finetiq |
| Risk budget (heat) | about 10% of capital | author |
| Budget allocation | by open interest | author |
| Retail allocation | equal shares per market and window | Finetiq |
| Size recalculation | only at entry | Finetiq (author: do not adjust for volatility) |
| Kill switch trigger | stop losses of 8% of capital or more within 20 bars | Finetiq (author: all stops at once, about 10%) |
| Re-entry after the kill switch | a new extreme beyond the previous trade | Finetiq (author: only new trends) |
| Sectors | 6-7, the most liquid markets within each | author |
| Number of markets | 20-25 | Finetiq |
| B: target risk | 20% across all positions, cut the old ones | author (equity program) |
What to test
- Stop width. Chandelier at 2, 3, 4, 5, 6 and 8 ATR on the same entries. The author considers 2-3 ATR too close. See where the "width versus result" curve reaches a plateau.
- Stop type. Chandelier, deviation and a third of the annual range at a comparable average width. The author says they all work. If that holds, the result comes from the entry and the width, not from the stop formula.
- Three windows versus one. Each window separately and all three together. Compare return to maximum drawdown and the longest period without a new equity high. Look at 2020-2024 separately: in the author's fund the short system clearly outperformed the long one there.
- Budget size. Heat of 5, 10, 15 and 20%. Compare the worst month of the test with the stated budget: gaps and trading halts cause losses larger than the combined risk to stops. Test the kill switch separately: blocking after stops hit at once versus blocking after any single stop and versus no kill switch.
- Trim or not. Sizing only at entry versus bringing positions back to the budget on each new signal (variant B). Calculate the share of profit from the best 20% of markets in each 3-5 year window and how trimming changes it.
- Window neighborhood. 5, 6, 7 months; 8, 9, 10; 11, 12, 13. Entry on the close versus a stop order at the level.
- Carrying costs. Positions live for months. Account for futures rolls, and for CFDs, the swap.
Platform notes
TradingView (Pine Script)
- A strategy trades only the chart symbol. A shared risk budget across dozens of markets and the rule "the combined risk to stops is no more than 10%" cannot be built in Pine. The signal and stops can be tested one market at a time, but that is the system without its main portfolio rule.
- A Pine strategy has one net position. If the 6-month window gives a short while the 12-month system is still long, the short entry closes the long. Three windows on one symbol require three separate strategies.
- Levels without the current bar:
ta.highest(high, 252)[1]. The 252 window and indicator warm-up need a long history, which is limited by the subscription plan. On continuous futures, check how the rolls are adjusted. - Keep the stop in a
varvariable that only moves up and pass it tostrategy.exitviastop.trail_pointsis set in ticks and does not reproduce a percentage or ATR stop.
MultiCharts and TradeStation (EasyLanguage)
- A portfolio budget can only be calculated in the portfolio module: Portfolio Trader in MultiCharts, Portfolio Maestro in TradeStation. At sizing time you need the combined risk of open positions across all markets. Check whether your version of the module can manage size at the portfolio level before writing the rules.
- A strategy on a symbol holds a net position. A long in the 12-month system and a short in the 6-month one cancel each other out, just as in Pine.
- Kevin Davey (The Algorithmic Advantage #036): for futures in TradeStation, the close of a daily bar is the settlement, while for a 1440-minute bar it is the last trade. A breakout on the close gives different signals on the two bar types.
AvgTrueRangeis a simple average of TrueRange. For a Wilder-based chandelier, calculate ATR yourself. Stop as a price:Sell next bar at LongStop stop, the order lives for one bar.
MetaTrader 5 (MQL5)
- A multi-symbol EA can calculate heat itself: for each position, the distance to SL divided by
SYMBOL_TRADE_TICK_SIZE, ×SYMBOL_TRADE_TICK_VALUE× volume. Testing requires the tester's multi-symbol mode. - On a hedging account, the three windows hold separate positions on one symbol with their own SLs; tell them apart by magic number. On a netting account the positions merge into one.
- Futures with a long history are rare at MT5 brokers. Commodity CFDs usually track the front contract or spot, and their 12-month high differs from that of a back-adjusted futures series.
- A position lives for months, and the CFD swap is charged every night. Check that the tester accounts for it.
Where the idea can break
- The episode gives no results for the trend part. In the fund it runs alongside an equity portfolio and bills and is calibrated to them; on its own the figures will be different.
- The stop parameters, budget allocation, number of markets, the kill switch trigger and the re-entry rule after it were added by us. The author named the stop types, the windows and the 10% budget.
- The 10% budget assumes stops are filled at their price. The author describes how the LME halted nickel trading and the position could not be traded, after which nickel was removed from the universe. Gaps and trading halts cause losses larger than heat.
- Windows of 6-12 months produce few trades per market. On a single market and a short test the conclusion means almost nothing, and the long trend, according to the author, can lag for years.
- On a small account, the minimum contract makes the risk of one position larger than the budget share per slot. With 20-25 markets and a 10% budget, the rule cannot be met without micro contracts or CFDs.
- Open interest for weighting is usually not available on trading platforms. Replacing it with volume or equal shares gives a different portfolio.