Skip to content
⚠️ Not financial advice. For educational use only.
WikiConfig Files

Backtest Config Files

Algo Trading Stack uses YAML config files to control simulation parameters and assets.
These configs describe portfolio setup, fees, and detailed contract specs for each instrument.


File structure

A config YAML has two layers:

  1. Global settings — apply to the whole backtest.
  2. Assets list — each symbol has its own entry with overrides.

Example (10-yr multi-market):

data_source: Yahoo_Finance
initial_cash: 1000000
commission_per_contract: 2.5    # USD per contract (both sides, can be per side if desired)
fee_per_trade: 1.0              # USD per trade (flat, optional)
assets:
  - symbol: 6B=F  # British Pound Futures
    type: futures
    file: yahoo_finance/data/Futures/British_Pound/1Day_timeframe/british_pound_10yr.csv
    contract_size: 62500
    tick_size: 0.0001
    tick_value: 6.25
    initial_margin: 2420
    maintenance_margin: 2200
    slippage_pct: 0.0007
    commission_per_contract: 2.0
    fee_per_trade: 1.5
    currency: USD
    exchange: CME
 
  - symbol: CL=F  # Crude Oil Futures
    type: futures
    file: yahoo_finance/data/Futures/Crude_Oil/1Day_timeframe/crude_oil_10yr.csv
    contract_size: 1000
    tick_size: 0.01
    tick_value: 10.0
    initial_margin: 5060
    maintenance_margin: 4600
    slippage_pct: 0.0005
    commission_per_contract: 2.0
    fee_per_trade: 1.5
    currency: USD
    exchange: NYMEX

Global keys

KeyTypeMeaning
data_sourcestringRecords where the asset price data came from.
initial_cashfloatStarting portfolio equity in USD (or chosen base currency).
commission_per_contractfloatDefault commission charged per contract (can be overridden per asset).
fee_per_tradefloatFlat per-trade fee (order-level).
include_slippageboolWhether to apply slippage logic globally.
slippage_ticksintSlippage in ticks (preferred over percent).
slippage_pctfloatSlippage as fraction of price (fallback if no ticks specified).
live_price_modestringHow live bars are exposed: "open_only" (default) or "random_in_hilo".
random_seedintRNG seed for deterministic backtests (used in "random_in_hilo" mode).
skip_synthetic_open_barsboolIf true (default), skip bars with missing OPEN when emitting live data.

Global values serve as defaults; assets can override commissions, fees, and slippage.
(These are applied in _apply_global_defaults.)


Asset entries

Each element in assets: specifies one tradable instrument.

KeyTypeMeaning
symbolstringIdentifier (e.g. "CL=F" for Crude Oil futures).
typestringCurrently "futures" (others can be added).
filestringPath to historical data CSV (Yahoo or TradeStation supported).
contract_sizeintUnits per contract (e.g. 1,000 barrels for CL).
tick_sizefloatMinimum price increment.
tick_valuefloatP&L value per tick per contract.
initial_marginfloatExchange initial margin requirement per contract.
maintenance_marginfloatMaintenance margin (falls back to initial_margin if not given).
commission_per_contractfloatOverride per-contract commission.
fee_per_tradefloatOverride per-trade fee.
slippage_ticksintOverride ticks of slippage.
slippage_pctfloatOverride percent slippage.
currencystringTrading currency (default "USD").
exchangestringExchange code (e.g. CME, NYMEX, COMEX).

Data loading

  • Yahoo Finance CSVs and TradeStation CSVs are auto-detected and normalized.
  • Missing dates across assets produce synthetic bars:
    • O/H/L left as NaN (to mark gaps).
    • Close forward-filled to keep equity continuous.
    • Volume zero-filled.

Intrabar policies

The config can also include an exit resolution policy:

intrabar_tp_sl_policy: worst_case
 

Options

  • worst_case (default) → Stop-loss assumed hit first if both touched.
  • best_case → Take-profit assumed hit.
  • sl_first / tp_first → Explicit priority.

Putting it together

  1. Start with a base config (e.g. backtest_config.yaml).
  2. Add multiple assets with their margins, contract sizes, and CSV data paths.
  3. Override global fees/slippage if some markets have different specs.
  4. Run:
python run_backtest.py --config backtest_configs/backtest_config_10_yrs.yaml

The engine will load the config, normalize data, and enforce margins, commissions, slippage, and fees exactly as described.


Summary

Config files are the backbone of reproducible backtests:

  • Globals define portfolio cash, fees, and defaults.
  • Assets define contract specs, margin requirements, and data.
  • Policies control intrabar exit handling and slippage.

By editing YAML, you can swap asset universes, adjust fees, or change assumptions without touching code.