Passer au contenu
Tous les documents de la bibliothèque

Interpréter les coûts d’un backtest lorsque les paramètres de configuration sont inactifs

Code Machine Learning for Trading

Résumé

Cette note de configuration distingue les paramètres qui figurent dans l’identité d’un backtest de ceux qui influent réellement sur les coûts de trading simulés. Dans l’étude de cas décrite, toutes les exécutions enregistrées utilisent un parcours vectorisé fondé sur les rendements jusqu’à l’échéance. Les paramètres configurés pour le prix d’exécution, le taux de commission et le taux de slippage ne sont pas transmis à ce parcours ; les exécutions au cours acheteur ou vendeur relèvent d’un courtier événementiel que les exécutions vectorisées ne construisent pas. Ces paramètres restent dans la configuration, car leur suppression modifierait l’identité hachée des exécutions existantes.

Les coûts simulés sont lus séparément dans un fichier de configuration : écarts acheteur-vendeur à l’entrée et à la sortie des options, écarts estimés sur les couvertures à chaque rééquilibrage et commissions par contrat ou par action. La note indique que le champ enregistré pour le glissement de prix total est nul dans toute la population concernée, malgré l’imputation de coûts dans la simulation, car ce parcours n’enregistre pas les totaux de coûts. Une leçon utile pour l’audit : la valeur d’un paramètre de configuration ou l’absence d’une mesure de coût ne suffit pas, à elle seule, à établir ce qu’un backtest a coûté. Ces constats concernent l’implémentation spécifiée et doivent être revérifiés si son exécuteur ou le traitement des coûts change.

Idées clés

  • Les paramètres de configuration peuvent modifier l’identité hachée d’une exécution même si le parcours d’exécution ne les utilise pas.
  • Le parcours vectorisé décrit ici, fondé sur les rendements jusqu’à l’échéance, n’utilise pas les champs configurés de commissions et de glissement de prix exprimés en taux.
  • Les coûts simulés effectivement appliqués proviennent de composantes distinctes pour les options, les couvertures et la liquidation.
  • Un champ agrégé nul pour le glissement de prix ne prouve pas qu’aucun coût n’a été imputé dans la simulation.
  • L’interprétation des coûts dépend de l’examen de l’exécuteur concerné et de son flux de données.

Étiquettes

Texte intégral
# base.yaml


```yaml
# Three fields below are inert on the path this case study runs: `execution.execution_price`,
# `commission.rate` and `slippage.rate`. Every registered backtest here is `ret_to_expiry`,
# which `case_studies/utils/backtest_runner.py` routes to `_run_htm_daily_mtm`, and that call
# is not passed `cost_spec` - the only thing that carries these rates into a run. The
# `quote_side` fill is read by the event-driven broker, which a `rebalance.mode: vectorized`
# case study never constructs. They still reach the registered `backtest_config` and so the
# hashed identity, which is why they stay: removing them would re-key 879 backtests to delete
# values nothing reads.
#
# The costs this case study actually pays come from `_htm_backtest.py`, which reads
# `config/setup.yaml::costs.components` directly - per-leg entry spread from the real option
# quotes, `hedge_spread.estimate_bps_of_notional` on every hedge rebalance,
# `commission.option_per_contract` and `commission.equity_per_share`, plus an exit spread on
# liquidation. Verified 2026-09-12; `total_slippage` is NULL on all 879 rows because the
# vectorized path records no cost totals, not because nothing was charged.
account:
  allow_short_selling: true
execution:
  execution_price: quote_side
  mark_price: price
  execution_mode: next_bar
commission:
  model: percentage
  rate: 0.0005
slippage:
  model: percentage
  rate: 0.0002
calendar:
  calendar: NYSE
  timezone: UTC
  data_frequency: daily
feed:
  timestamp_col: timestamp
  entity_col: symbol
  price_col: instr_mid
  close_col: close
  bid_col: instr_bid
  ask_col: instr_ask
  mid_col: instr_mid
metadata:
  case_study: sp500_options

```

Reproduit dans son intégralité avec attribution, conformément à la licence de la source. Licence: MIT

Ce résumé a été rédigé par l’agent de recherche de Stratmill à partir de la source originale ; il n’en est pas une copie.