رفتن به محتوا
همه اسناد کتابخانه

تفسیر هزینه‌های بک‌تست وقتی فیلدهای پیکربندی بی‌اثرند

کد یادگیری ماشین برای معامله‌گری

خلاصه

این یادداشت پیکربندی، تنظیماتی را که در هویت یک بک‌تست ظاهر می‌شوند از تنظیماتی که واقعاً بر هزینه‌های معاملاتی شبیه‌سازی‌شده اثر می‌گذارند متمایز می‌کند. در مطالعه موردی توصیف‌شده، همه اجراهای ثبت‌شده از مسیری برداری‌شده استفاده می‌کنند که بازده را تا سررسید دنبال می‌کند. فیلدهای پیکربندی‌شده قیمت اجرا، نرخ کمیسیون و نرخ لغزش قیمت به آن مسیر منتقل نمی‌شوند و اجرای سمت مظنه به کارگزار رویدادمحوری تعلق دارد که اجراهای برداری‌شده آن را ایجاد نمی‌کنند. این تنظیمات در پیکربندی باقی می‌مانند، زیرا حذفشان هویت هش‌شده اجراهای موجود را تغییر می‌دهد.

هزینه‌های واقعی جداگانه از یک فایل راه‌اندازی خوانده می‌شوند: اسپردهای ورود و خروج اختیار معامله، اسپردهای برآوردی پوشش ریسک در هر بازمتعادل‌سازی، و کمیسیون به‌ازای هر قرارداد یا هر سهم. یادداشت گزارش می‌کند که فیلد ثبت‌شده لغزش قیمت کل در کل جامعه اعلام‌شده تهی است، با وجود آنکه هزینه‌هایی دریافت شده‌اند؛ زیرا این مسیر مجموع هزینه‌ها را ثبت نمی‌کند. این نکته درس مفیدی برای حسابرسی است: یک مقدار پیکربندی یا نبود یک معیار هزینه به‌تنهایی نشان نمی‌دهد بک‌تست چه مبلغی پرداخته است. یافته‌ها به پیاده‌سازی مشخص‌شده مربوط‌اند و اگر اجراکننده یا مسیر انتقال هزینه‌های آن تغییر کند، باید دوباره بررسی شوند.

ایده‌های کلیدی

  • فیلدهای پیکربندی می‌توانند بر هویت هش‌شده یک اجرا اثر بگذارند، حتی وقتی مسیر اجرا از آن‌ها استفاده نمی‌کند.
  • مسیر برداری‌شده بازده تا سررسید که اینجا توصیف شده، از فیلدهای پیکربندی‌شده کمیسیون و لغزش قیمت مبتنی بر نرخ استفاده نمی‌کند.
  • هزینه‌های واقعی شبیه‌سازی‌شده از اجزای جداگانه هزینه اختیار معامله، پوشش ریسک و تسویه می‌آیند.
  • تهی‌بودن فیلد تجمیعی لغزش قیمت ثابت نمی‌کند که هیچ هزینه‌ای دریافت نشده است.
  • تفسیر هزینه‌ها به ردیابی اجراکننده مشخص و جریان داده آن بستگی دارد.

برچسب‌ها

متن کامل
# 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

```

با ذکر منبع و مطابق مجوز اثر، به‌طور کامل نمایش داده می‌شود. مجوز: MIT

این خلاصه را عامل پژوهشی Stratmill بر پایه متن اصلی نوشته است؛ نسخه‌ای از اثر منبع نیست.