تفسیر هزینههای بکتست وقتی فیلدهای پیکربندی بیاثرند
خلاصه
این یادداشت پیکربندی، تنظیماتی را که در هویت یک بکتست ظاهر میشوند از تنظیماتی که واقعاً بر هزینههای معاملاتی شبیهسازیشده اثر میگذارند متمایز میکند. در مطالعه موردی توصیفشده، همه اجراهای ثبتشده از مسیری برداریشده استفاده میکنند که بازده را تا سررسید دنبال میکند. فیلدهای پیکربندیشده قیمت اجرا، نرخ کمیسیون و نرخ لغزش قیمت به آن مسیر منتقل نمیشوند و اجرای سمت مظنه به کارگزار رویدادمحوری تعلق دارد که اجراهای برداریشده آن را ایجاد نمیکنند. این تنظیمات در پیکربندی باقی میمانند، زیرا حذفشان هویت هششده اجراهای موجود را تغییر میدهد.
هزینههای واقعی جداگانه از یک فایل راهاندازی خوانده میشوند: اسپردهای ورود و خروج اختیار معامله، اسپردهای برآوردی پوشش ریسک در هر بازمتعادلسازی، و کمیسیون بهازای هر قرارداد یا هر سهم. یادداشت گزارش میکند که فیلد ثبتشده لغزش قیمت کل در کل جامعه اعلامشده تهی است، با وجود آنکه هزینههایی دریافت شدهاند؛ زیرا این مسیر مجموع هزینهها را ثبت نمیکند. این نکته درس مفیدی برای حسابرسی است: یک مقدار پیکربندی یا نبود یک معیار هزینه بهتنهایی نشان نمیدهد بکتست چه مبلغی پرداخته است. یافتهها به پیادهسازی مشخصشده مربوطاند و اگر اجراکننده یا مسیر انتقال هزینههای آن تغییر کند، باید دوباره بررسی شوند.
ایدههای کلیدی
- فیلدهای پیکربندی میتوانند بر هویت هششده یک اجرا اثر بگذارند، حتی وقتی مسیر اجرا از آنها استفاده نمیکند.
- مسیر برداریشده بازده تا سررسید که اینجا توصیف شده، از فیلدهای پیکربندیشده کمیسیون و لغزش قیمت مبتنی بر نرخ استفاده نمیکند.
- هزینههای واقعی شبیهسازیشده از اجزای جداگانه هزینه اختیار معامله، پوشش ریسک و تسویه میآیند.
- تهیبودن فیلد تجمیعی لغزش قیمت ثابت نمیکند که هیچ هزینهای دریافت نشده است.
- تفسیر هزینهها به ردیابی اجراکننده مشخص و جریان داده آن بستگی دارد.
برچسبها
متن کامل
# 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 بر پایه متن اصلی نوشته است؛ نسخهای از اثر منبع نیست.