Ticker modifiers & research tickers

Ticker modifiers let you apply mathematical transforms to a ticker's daily returns before backtesting. They use testfol.io-compatible expression syntax, so you can import expressions directly from testfol.io or share them with other tools.

On this page

Overview

Modifiers change a ticker's returns before a backtest runs. For example, you can add a 0.9% annual expense ratio to SPY or model 2x daily leverage on VTI. Downstream calculations, including tax calculations, use the modified returns.

Type or paste a testfol.io name or expression into any ticker input, then press Enter. ArthaPilot resolves the name to its own ticker, moves the parameters into the modifier fields, and shows the result in the input and its chip. The import bar in the modifier modal accepts the same expressions.

You pasteArthaPilot shows
TQQQSIMTQQQ.SIM
SPYTRSPY.SIM
QQQSIM?L=3&E=0.91QQQ.SIM with 3x leverage and a 0.91% expense ratio
TLT?FB=VUSTX&FBE=0.05TLT filled backward with VUSTX at a 0.05% expense ratio

A name ArthaPilot does not carry stays in the input with an error, so you can replace it. Each input takes one ticker. A testfol.io share link or a list such as SPYSIM 60, TLTSIM 40 does not import. Add one position for each ticker.

Signed-out visitors can use a core set of .SIM tickers. Plans and limits lists them. Every other .SIM ticker needs a free account.

Use the modification icon next to a ticker to configure its modifiers.

Button to open the modifier modal, located next to ticker input
Open ticker modifiers beside the ticker input.

Expression syntax

A modifier expression follows the pattern TICKER?KEY=VALUE&KEY=VALUE. For example, SPY?L=2&E=0.9 applies 2x daily leverage and a 0.9% expense ratio to SPY.

Leverage modifiers use a collateral-netting model. Long leverage pays the financing rate on borrowed capital. Inverse and sub-1x exposure earn it on cash collateral. SW controls swap notional, not the financing rate.

  • Base ticker: any supported ticker symbol, such as SPY, VTI.SIM, or UPRO
  • Parameters: key=value pairs joined by &, appended after ?
  • Nested expressions: some parameters accept a ticker expression as their value, wrapped in parentheses. For example, SPY?FB=(VTI.SIM) fills backward using VTI.SIM data

Select the modifier chip beside a ticker to copy its expression.

Click on the modification chip to copy the ticker expression
Select the modifier chip to copy its expression.

Modifier reference

Available modifier keys:

KeyNameDescription
LLeverageDaily-rebalanced leverage factor. For example, 2 means 2x.
SWSwap ExposureSwap notional used for the spread term of leverage financing
SPSwap SpreadSpread over risk-free rate for leverage financing
EExpense RatioAnnual expense ratio subtracted daily. For example, 0.9 means 0.9%.
UEUndo ExpenseAdd back an embedded expense ratio before other transforms
FBFill-BackwardExtend history by splicing another ticker's data before inception (accepts nested expression)
FBEFill-Backward ExpenseExpense adjustment applied only to the fill-backward portion
URReturn TargetScale returns to achieve a target annualized CAGR
UVVolatility TargetScale returns to achieve a target annualized volatility
UCCorrelation TargetAdjust returns to target correlation with the base series (requires seed)
DBDe-BetaTarget beta relative to a reference ticker
DBREFDe-Beta ReferenceReference ticker for de-beta (accepts nested expression)
CUCap UpMaximum daily return. For example, 0.05 sets a +5% cap.
CLCap LowMinimum daily return. For example, -0.05 sets a -5% floor.
SDSeedRandom seed for reproducible stochastic transforms
BKBlock SizeNumber of trading days per shuffle block
BLBlock LowMinimum random block size
BHBlock HighMaximum random block size
BRBlock ReplacementSample blocks with replacement (1) or without (0)
BOBlock OverlapAllow overlapping blocks (1) or not (0)
BREFBlock ReferenceShuffle using another ticker's return blocks (accepts nested expression)

Application order

The engine applies modifiers in this order, regardless of their order in the expression:

  1. FB / FBE: fill-backward history extension (applied first so all subsequent transforms operate on the full extended series)
  2. UE: undo embedded expense (restores gross-of-fee returns before applying custom costs)
  3. BK / BL / BH / BR / BO: shuffle blocks (randomizes return order while preserving terminal value)
  4. UC: correlation targeting (adjusts returns to hit a target correlation)
  5. UR / UV: return and volatility targets
  6. DB / DBREF: de-beta adjustment
  7. CU / CL: daily return caps
  8. L / SW / SP: leverage with financing costs (applied late so it leverages the already-transformed series)
  9. E: expense ratio subtraction (applied last so costs reflect the series after leverage)

Bond tickers

Synthetic bond tickers use the B! prefix with yield-curve and maturity parameters. For example, B!Y=0.04&M=10 creates a 10-year bond at a flat 4% yield.

  • Y: flat yield (cannot combine with YL/YH)
  • YL / YH: yield curve low/high for curve-aware mode
  • M: target maturity in years (required)
  • C: coupon type: "C" for coupon-bearing, "Z" for zero-coupon
  • E: expense ratio on the synthetic bond

Research tickers

To reuse a modifier expression, select “Save Ticker” in the modifier modal and name it. The research ticker then appears in ticker suggestions and works anywhere a regular ticker does.

You can also create research tickers backed by a saved portfolio or strategy from Workspace. These resolve to the portfolio or strategy return series over the requested date range.

Save a modified ticker as a research ticker for reuse
Save a modified ticker as a research ticker from the modification modal.

Examples

  • SPY?L=2&E=0.9: 2x daily-reset SPY with 0.9% annual expense ratio
  • VTI?FB=(VTI.SIM): VTI with history extended backward using VTI.SIM data
  • QQQ?UR=0.10&UV=0.15: QQQ scaled to 10% CAGR and 15% annualized volatility
  • SPY?CU=0.05&CL=-0.05: SPY with daily returns capped at +/-5%
  • SPY?SD=42&BK=21: SPY with 21-day return blocks shuffled (seed 42 for reproducibility)
  • SPY?DB=0&DBREF=(AGG): SPY de-betaed to zero against AGG (market-neutral)