← All ideas
#045Position sizingPosition

ATR size fixed at entry versus daily vol-targeting

Takahé Capital calculate position size by ATR once at entry, from notional equity based on closed trades, and do not recalculate it until the exit. The card defines the block and a fair comparison with daily volatility adjustment.

The Algorithmic Advantage · Moritz Seibert, Moritz Heiden · Watch video

Markets

Futures, Commodities, Indices, Bonds, Forex

Timeframe

D1

Data

OHLC

Rules

Partly formalised

Difficulty

Medium

Status

Untested

Some rules were added by us and are marked in the text.

TradingView has pitfalls
EasyLanguage has pitfalls
MetaTrader 5 has pitfalls

Idea in brief

There are two ways to manage position size. The first: calculate the size at entry and never touch it again. The second: regularly adjust the position to current volatility, reducing it when the market gets wild and increasing it when the market calms down. The second way is called vol-targeting or volatility control.

Moritz Seibert and Moritz Heiden of Takahé Capital trade the first way. ATR is measured once, at the moment the trade is opened, and the size is held until the exit. The equity used for the calculation (the trade level) is taken not from the current account but from a notional value. It is revised rarely and only on realized profit; open profit is not included in the calculation.

The card defines this block for any system and a control variant with daily adjustment, so the authors' claims can be tested on your own trades.

Why it might work

The authors' arguments:

  • Fewer trades. Every adjustment pays commission and spread, while a fixed size does not pay them at all.
  • Volatility is a poor measure of risk. It is symmetric and counts a move in your favor and a move against you the same way.
  • Adjustment breaks the system's logic. A short in a falling market usually coincides with rising volatility, and the rule cuts the winning position. The authors' example: oil in 2020.
  • Adjustment cuts off the right tail. The curve becomes smoother, but a trend system lives on rare huge trades, and it is exactly their size that shrinks.
  • Their data does not support the thesis that "volatility rises near reversals". Bonds fell smoothly for years. In that situation volatility control would have been increasing a position that had started to lose.

About their own approach the authors say honestly: a single measurement can fall at a moment of unusually low or high volatility, and this can be either a plus or a minus. The research they refer to is not disclosed in the interview. There are no figures from it.

The authors call a trade level based on closed trades conservative: leverage does not grow automatically with every wave of open profit.

Rules

Size block (authors, Finetiq numbers)

// calculated only at the moment of the entry signal
// trade level: notional equity for the size calculation (authors)
// held constant and revised on realized profit when P&L has changed noticeably
ClosedEquity = InitialCapital + sum of closed trades              // open profit not included (authors)
IF first trading day of the month                                 // Finetiq: check once a month
   AND |ClosedEquity / TradeLevel - 1| >= 10%                     // Finetiq: threshold for a "noticeable" change
    TradeLevel = ClosedEquity

ATRe      = ATR(20) at the close of the signal bar                // authors: recent average range; Finetiq: 20
RiskMoney = TradeLevel * 0.25%                                    // authors: "a certain percentage"; Finetiq: 0.25%
StopDist  = 3 * ATRe                                              // authors: there is an initial stop; Finetiq: 3 ATR
Contracts = floor(RiskMoney / (StopDist * PointValue))

BUY Contracts AT NEXT BAR OPEN     // or SELL SHORT
// after entry Contracts does not change until the exit (authors): neither when ATR rises nor when it falls
// the same risk for all markets and for both long and short (authors)

Control variant: daily vol-targeting (Finetiq)

// the same entry, the same exit, the same TradeLevel; only size management changes
Target(t) = floor(TradeLevel * 0.25% / (3 * ATR(20)[t] * PointValue))

IF |Target(t) - CurrentContracts| >= MAX(1, 20% * CurrentContracts)   // Finetiq: dead band
    bring the position to Target(t) AT NEXT BAR OPEN
    tag the trade with the label "vol-adj"

Adjustment basket (the authors' method, Finetiq accounting)

// authors: add up all the adjustment trades separately, with commission and a spread of 0.5-1 tick
// Finetiq: each addition is closed at the nearest reduction or at the overall exit (LIFO)
AdjPnL = Σ over "vol-adj" trades: (close price of the part - open price of the part) * contracts * PointValue
         - commission - (0.5 or 1 tick) * contracts * 2
// AdjPnL < 0: adjustment costs money (the authors' claim)

Applying it to the always-in-breakout card

// there size is already calculated at the moment of reversal: Units = Equity * 0.2% / (ATR20 * PointValue)
// the block changes two things:
Equity  -> TradeLevel from closed trades, revised once a month on a change of 10% or more
ATR20   -> fixed on the reversal bar and not recalculated until the next reversal
// control variant: the same reversals, Units recalculated every day from ATR20[t]

Parameters

Parameter Value Source
Volatility measurement once at entry author
Volatility measure recent ATR author
Equity for the calculation trade level from closed trades author
Trade level revision when P&L has changed noticeably author
Revision threshold 10%, checked once a month Finetiq
ATR period 20 Finetiq
Risk per trade 0.25% of the trade level Finetiq
Stop for the size calculation 3 ATR Finetiq
Long and short the same risk budget author
Control: recalculation frequency every day Finetiq
Control: dead band 1 contract or 20% Finetiq
Costs in the basket 0.5-1 tick of spread plus commission author

What to test

  1. The main comparison. The same signals (for example, always-in-breakout or turtle-4w-2w on 20-30 futures), size at entry versus daily vol-targeting. Look at return, maximum drawdown, average loss, average profit and the skew of the trade distribution.
  2. Adjustment basket. Calculate AdjPnL at 0.5 and at 1 tick. This is a direct test of the authors' claim that adjustment by itself loses money.
  3. Right tail. The share of total profit that comes from the best 5% of trades, in both variants. If vol-targeting noticeably reduces it, it changes the very nature of the trend system, which is what the authors say.
  4. Frequency between the extremes. Recalculation every day, once a week, once a month, only when size changes by 50% or more. This shows where the difference disappears.
  5. Sensitivity of the single measurement. ATR period 10, 20, 50. Separately, trades opened right after a volatility spike: with a short ATR their size will be tiny for the whole trade.
  6. Equity for the calculation. Trade level with revision, closed equity on every trade, full equity including open profit. Compare drawdown behavior at the end of a long trend, when open profit gets given back.
  7. Account size. With 1-3 contracts per market, daily adjustment almost always rounds to zero changes. Run the comparison on the equity you will actually trade, not on millions.

Platform notes

TradingView (Pine Script)

  • Closed equity: strategy.initial_capital + strategy.netprofit. strategy.equity already includes open profit and does not fit the trade level.
  • Calculate the size at entry on the signal bar and pass it to strategy.entry(..., qty = n). Point value: syminfo.pointvalue.
  • The control variant requires adding and partial reduction: pyramiding in strategy() and strategy.close(..., qty = x). Without pyramiding additions will silently not fill, and the comparison will show two identical results.
  • There is no portfolio testing: a trade level for the whole portfolio cannot be calculated in Pine, only for one symbol (section 5 of the reference guide). ta.atr uses Wilder smoothing.

MultiCharts and TradeStation (EasyLanguage)

  • The strategy's closed profit: NetProfit, open profit: OpenPositionProfit. It is more convenient to set the initial capital as an input, so the trade level is calculated the same way in the backtest and in trading.
  • Point value is BigPointValue. AvgTrueRange is a simple average of TrueRange, not Wilder.
  • The size is fixed in a variable on the signal bar: Buy Contracts_ contracts next bar at market. The control variant requires allowing multiple entries in the same direction in the strategy properties and reducing the position with named exits that specify the number of contracts.
  • A shared trade level across many markets is calculated in Portfolio Maestro or Portfolio Trader. On a single chart the strategy sees only its own profit.

MetaTrader 5 (MQL5)

  • AccountInfoDouble(ACCOUNT_BALANCE) is the balance without floating profit, ACCOUNT_EQUITY includes it. The trade level needs the balance, but it is shared by all EAs on the account.
  • Lot size from risk: SYMBOL_TRADE_TICK_VALUE, SYMBOL_TRADE_TICK_SIZE, rounding to SYMBOL_VOLUME_STEP. Store the fixed lot in a variable, and when the EA restarts take the volume of the open position.
  • On a netting account adjustment changes the volume of a single position, on a hedging account it creates separate positions. The adjustment basket is easier to track on a hedging account.
  • iATR is a simple average of TR. For CFDs every adjustment pays the spread, and a position held for 200 days also pays swap. For CFDs the costs in the basket will be higher than for the authors on exchange-traded futures.

Where the idea can break

  • The authors' research is not published in the interview. All claims about the average loss and the adjustment basket are verbal so far.
  • The authors trade long-term trend with an average trade of about 200 days. Over that time volatility changes a lot, and the difference between the two ways is noticeable. For a system with 3-10 day trades ATR barely has time to change, and the comparison may show nothing.
  • The single ATR measurement can fall on a spike or a lull. If volatility rose several times over after a lull, the position's risk in money also rose several times over, and the block deliberately does not correct this.
  • The trade level is conservative only on the way up. After a deep drawdown it stays high until the revision, and risk as a percentage of real equity becomes larger than planned.
  • The authors did not name the risk percentage, ATR period, stop multiplier or trade level revision threshold. The values in the table are starting values and need testing.
  • On a small account rounding to whole contracts matters more than the choice between the two ways. A fixed risk percentage can only be held approximately there.

Sources

Author's claims

These figures and statements are the author's. We have not verified them.

  • The average trade in Takahé Capital's trend program lasts about 200 days, and some winners are held for 600-700 days. Size is set by recent ATR, and vol-targeting is not used.
  • According to the authors' research, volatility control statistically increases the average loss. If all the adjustment trades are added up in a separate basket with commission and a spread of half a tick to a full tick, the total is negative. The interview gives no exact figures.
  • The authors' example: in 2020, when oil went to negative prices, volatility control would have cut a winning short almost to zero.

Related ideas

Updated: 2026-09-10