Core principle: costs attach to transactions, not to calendar time. Their effect is driven by turnover, liquidity, order size, urgency, and the execution rule.
The components of trading friction
Explicit charges
Commissions, exchange or regulatory fees, taxes, and broker charges are directly visible. They may be fixed per order, proportional to notional value, tiered by volume, or asymmetric between purchases and sales. A proportional model is convenient, but it can understate small-order fixed charges and misrepresent tiered pricing.
Bid–ask spread
A quoted market has a bid at which liquidity can be sold and a higher ask at which it can be bought. A strategy marked at the midpoint or closing print may pay part or all of that spread when crossing immediately. The SEC notes that execution venue and the bid–ask spread affect the overall price paid or received, even when a brokerage advertises zero commission.
Spread is not constant. It often widens in volatile sessions, around news, near the open or close, and in less liquid instruments. Applying one fixed number is a scenario assumption, not a measurement.
Slippage
Slippage is the difference between the reference price assumed when the order decision is made and the achieved average fill. It can arise from latency, price movement while the order waits, gaps between sessions, limited displayed size, and the behavior of the execution algorithm.
Slippage is directional relative to the order: paying above the reference on a buy or receiving below it on a sell is adverse. It should not be modeled by randomly adding symmetric noise and assuming it cancels. A strategy tends to demand liquidity in similar circumstances repeatedly, so its execution errors can be systematically adverse.
Market impact
An order can move the market as it consumes liquidity or signals demand. Impact depends on size relative to available liquidity and volume, volatility, urgency, and trading horizon. It is generally not linear across all order sizes. A ten-times-larger order should not automatically be assumed to have exactly ten times the percentage cost.
Research using large samples of live institutional orders finds that costs vary by trade type, security characteristics, size, time, and venue. That evidence is a warning against copying one “standard slippage” value across every ticker and strategy.
Exactly how TickRun charges costs
TickRun represents position as either 0 (flat) or 1 (fully long). For each session it calculates turnover as the absolute change in position:
turnover[t] = |position[t] − position[t−1]|
The cost rate is the entered basis points divided by 10,000:
cost[t] = turnover[t] × cost_bps / 10,000
Net daily strategy return is:
strategy_return[t] = position[t−1] × asset_return[t] − cost[t]
This ordering matters. An entry marker at close t changes the position and charges the entry cost at t, but the new position first earns asset return over t to t+1. On an exit at close t, the prior long position still earns the return into close t, and the exit cost is then subtracted.
The browser control accepts 0–100 basis points per position change. A value of 10 means 0.10% on entry and 0.10% on exit. Twenty completed round trips create 40 charged position changes, roughly four percentage points of additive friction before considering the changing equity base and compounding.
What that model captures
- Costs increase with the number of entries and exits.
- Both sides of a completed trade are charged.
- Costs reduce the actual compounded equity curve and therefore affect total return, drawdown, and Sharpe ratio.
- The assumption is explicit and easy to stress across several values.
What it does not capture
- Different entry and exit costs.
- Time-varying spreads and volatility.
- Order size, partial fills, volume participation, or capacity.
- Overnight gaps between a closing signal and a next-session fill.
- Limit-order fill probability and adverse selection.
- Fixed commissions, taxes, borrow fees, or financing costs.
- Cash yield while the strategy is flat.
There are two additional interpretation details. First, the completed-trade table reports raw entry-to-exit price return, not return net of the cost model. Net costs appear in portfolio equity and summary metrics. Second, TickRun’s Buy & Hold benchmark currently receives no initial-entry or final-exit charge, while active strategy position changes are charged. At low turnover this difference is small, but it is still an asymmetry that should be disclosed.
Why turnover dominates small edges
Consider a rule whose average gross advantage is five basis points per completed trade. If realistic round-trip friction is 12 basis points, increasing the number of trades makes the historical gross curve look busier while making expected net performance worse. Optimization that ignores costs may specifically select thresholds that respond to insignificant fluctuations.
Cost sensitivity should therefore be tested during parameter selection, not added after the winning configuration is chosen. Otherwise the optimizer searches for a gross-return winner and the researcher evaluates a different, net-return strategy.
Build cost scenarios instead of one guess
For a daily large-cap equity test, a practical research workflow is to define at least three documented scenarios:
- Optimistic: low friction representing patient execution in a liquid market.
- Base: the best supportable estimate for expected order size and execution method.
- Stressed: wider spreads, delay, and adverse conditions.
The actual values must come from the intended broker, instrument, order type, and trade size; this article cannot supply a universal number. Run the identical parameters under every scenario. A candidate that disappears under a modest stress assumption is fragile.
Match the fill model to available data
Daily OHLCV can support daily decision rules, but it cannot reconstruct the order book. If a signal is calculated from the close, credible simplified choices include exposure beginning after that close or a next-open simulation when unadjusted open data and consistent corporate-action handling are available.
Do not assume a limit order filled merely because the daily low touched its price. The sequence within the bar is unknown, displayed size is unknown, and touching does not guarantee queue priority. High–low bars describe a range, not an executable path.
Add a capacity question
Ask what fraction of daily volume the simulated order represents. A $1,000 trade in a highly liquid stock and a $1 million trade in a thin security cannot share the same impact assumption. A more advanced simulator can cap participation, spread execution across time, or estimate impact from volatility and volume.
TickRun does none of those things today. Its cost field is best used for transparent sensitivity analysis, not as proof that a strategy can absorb a particular amount of capital.
Cost-model review checklist
- Does every entry and exit generate the intended charge?
- Is cost applied to current equity or original capital consistently?
- Does the assumed fill occur after signal information exists?
- Are spread and commission being double-counted—or neither counted?
- Is the cost plausible for the ticker, date, order size, and order type?
- Does the benchmark use a comparable convention?
- Do gross and net results remain clearly labeled?
- Does the strategy survive optimistic, base, and stressed scenarios?