EXP-013~018 common design contract
- Version: draft-2026-09-17 · not run
- This contract applies except for differences stated in each individual design.
Time axis and data
- Inputs confirmed up to the day-t daily close → order at the next KRX trading day's t+1 open. The same day's close is not used for the same day's open.
calibration: 2010~2018,history_A: 2019~2022,history_B: 2023~2026-08-26. The whole span is a past period that has already been viewed. A new ID or the name walk-forward does not make it independent OOS.- Indicator warm-up uses sufficient prior history. A shortfall of 200/252 days is
warmup_missingand is not filled with 0. - Per-period accounts are initialized separately. Signals confirmed the day before a period starts can be used for start-day orders. Signals and fills after the end date are not included in performance. Yearly breakdowns cut the same continuous account and do not reset capital every year.
- Periods with prices only are labelled
price_only_exploratory, and adjusted-price integer accountsadjusted_price_proxy. A verdict on real operability is possible only once raw prices, splits/mergers, cash dividends and trading halt history are verified. - Missing prices are not filled with future values, and positions are not force-liquidated as delisted at the last existing price. Halted symbols show NAV at the latest confirmed price with stale days disclosed, and only known corporate-action settlement rules are applied.
- Experiments using the current listing in place of a historical universe are
current-list exploratory. Where current sectors or security types are applied retroactively to the past, that fact is flagged.
Capital and orders
- Default total capital for shared-capital experiments is 3,000,000 KRW, 0 interest on cash, long-only, no leverage, integer quantities.
- The entry budget cap per slot K is prior-day closing NAV × 0.95/K. It is a cash outlay limit including buy commission. With the default K=5 it is 19%. The budget-base NAV for every order is the same prior-day value.
- Total buyable amount is within the positive part of prior-day closing cash minus 5% of prior-day NAV. Proceeds from same-day open sales are not used to fund open buys. Funds after a sale are used for this model's order budget from the next trading day. Reconciliation with the broker's actual buying power is separate.
- At the day-t close, exit and buy intents and priorities are fixed. At the t+1 open, exits are recorded first, then entries are made within the fixed budget. Same-day low/close/trading value do not change the symbols or order of open orders.
- Quantity is rounded down within the budget using the assumed fill price and costs. No live-trading claim is made that quantity was ordered knowing the open in advance. Fixing quantity at the prior day's price and cancelling orders short of balance is also diagnosed separately.
- A new entry intent is valid only on the next KRX trading day and is cancelled if it cannot fill. Exits wait until a fillable day. No same-day re-entry into the same symbol, averaging down or pyramiding. A shortage of candidates is left as cash.
- A liquidity cap of new order quantity ≤ 0.1% of the median volume over the previous 20 trading days applies. Same-day total volume is used only as an ex-post integrity check forbidding fills on 0 trades. It is not interpreted as verification of order-book depth.
- Existing positions that rose above their target weight are not automatically sold intraday. 95% is the budget for new allocation and differs from a cap on valuation at every moment. Periodic rebalancing is allowed only in individual documents.
- The default at the end of a period is mark-to-market NAV. The cost-adjusted liquidation value at the last tradable close is recorded as auxiliary, and positions that could not be sold because of halts or price limits are not treated as sold.
Costs — stated separately from earlier results
| Profile | One-way commission | One-way slippage | Tax |
|---|---|---|---|
frictionless | 0bp | 0bp | 0 |
proxy_slip2 — 1st | 1.5bp | 2bp | Model verified per product and period |
fee_slip_2x | 3bp | 4bp | Same as the 1st |
proxy_slip5 | 1.5bp | 5bp | Same as the 1st |
Unlike EXP-012's normalized_2x_stress, statutory taxes are not mechanically multiplied by 2. This is a new cost version. Unconfirmed actual account commissions remain a proxy. The ETF transaction-tax exemption alone does not mean all taxes are 0. Without distribution, tax-base and account-type information, results are labelled pre-tax exploration and after-tax verdicts are on hold. Official sources, effective dates and product mappings are checked at implementation.
Measurement, samples and uncertainty
- Record per-trade KRW net P&L,
net_pnl / actual_entry_outlayandnet_pnl / initial_cashas separate fields. The sign of mean net P&L and the mean P&L ratio to initial capital are not conflated with the mean per-trade return. - Number of dates = size of the union of fill dates across the whole symbol set. It differs from the sum of per-symbol date counts.
- Holding-day ratio = share of KRX trading days with 1 or more positions at the close. Average capital deployment = the mean of daily
gross_market_value / NAV. Days held only intraday are also recorded separately asintraday_exposed. - Account comparisons align initial capital, dates, distributions, commissions, taxes, integer quantities and order-failure rules. Continuous NAV, monthly/yearly returns, MDD, turnover, trade P&L/holding-period distributions, costs and concentration are reported together.
- The 1st statistic for account comparison is the mean of daily paired log-return differences (annualized as ×252). The CAGR difference is a separate economic metric. With no trades, expectancy is
NAand is not turned into a 0-profit trade. - 10,000 moving-block bootstrap draws, blocks of 21 consecutive KRX trading days, seed
20260917 + EXP number. Resample with replacement from possible block starts, chain up to the original length N and truncate. The same date block indices are applied to every strategy, symbol and comparison group. 63 trading days is the preregistered sensitivity; 95% percentile CIs are recorded. - For events, the per-symbol mean within each date is computed first and dates are equally weighted. Dates with no signals stay in the calendar array but are excluded from the mean's denominator. If a resample has no valid events, that draw is excluded and the count reported.
- The 1st cell is not replaced with a favourable result by variant, holding period or condition. Each experiment has a single 1st claim. If a statistically significant winner is chosen among several strategies, the tests of the four strategies (EXP-013/015/016/017) form one family and the Bonferroni significance level 0.05/4 is stated alongside. The denominator stays 4 even if some strategies are not run. All historical tests are exploratory evidence, and p-values do not erase repeated viewing.
Common verdicts
data_hold: required input or accounting validation failed. Not covered over by the sign of performance.research_advance: individual sample, cost, effect and concentration gates passed. Means follow-up robustness/forward research is allowed.hold: sample too small, CI includes 0 or diagnostics disagree. Not promoted with a favourable variant.rejected_for_contract: with a sufficient sample and valid data, own after-cost total return ≤0 and upper CI bound of the 1st excess effect ≤0. Being an inferior comparison and whether it lost money in absolute terms are explained separately.- MDD of 25% or less, CAGR of 15% or more and average capital deployment of 20% or more are business/operational suitability metrics. Falling short of them alone does not reject a statistical signal. Research promotion and operational suitability results are kept separate.
- Formal new validation happens on future data after code, settings and symbol-selection rules are frozen. It waits for the predefined 6-month and 100-trade conditions together, and ends as
holdif the sample is short after 12 months. Monthly strategies plan for 24 months of observation instead of trade counts. No monitor or collection job is created this time.
Pre-run preparation and future outputs
- Freeze each experiment's
config.json, universe/input manifest, code revision + dirty patch/hash, cost version, seed, library versions and time. For uncommitted code, do not record only HEAD. - Pass each synthetic case and the single-symbol v2 comparison. Intentionally changed execution rules get a separate version.
- Save ledgers and order/fill/cash/position/NAV/missing/failure logs under
data/derived/experiments/<EXP>/<run_id>/. Refuse to run if the folder already exists. Resuming after interruption is allowed only when all hashes match. - In
reports/experiments/<EXP>-..., write the summary, ledger references, required charts and individual gate verdicts. These outputs are not generated in this turn. Design changes are recorded under a new ID/version.
Source and migration evidence
Source: docs/test-plans/followup-experiment-contract.md
Original SHA-256: 46ffd65aa131e51ddbc9a6e1041f00f120105b990526ed778b8e445b7b1b305d
Raw data and account information are not part of the public package. The original results do not replace statistical or scientific revalidation. The English text is a translation; numbers, tables and charts are carried over unchanged.