EXP-012 design — separating the Connors RSI(2) signal effect from standalone operability
- Designed: 2026-09-17
- Work week:
2026-W38 - Status: run completed ·
rejected - Execution model:
v2 - Strategy version: the existing
connors_rsi2base form - Single question: does daily RSI(2) create a positive after-cost entry effect beyond the simple effect of holding cash?
This document is the EXP-012 contract fixed before running. The comparison groups, periods and verdict criteria were not changed after seeing results . If a change is needed, EXP-012 is not modified; a new experiment ID and the reason for the change are recorded.
1. Rationale for the design
In EXP-010, 6 of 7 symbols were positive, but there were only 4~10 trades per symbol. Later, in the 1,042-symbol sweep, the base form's median market exposure was 6.56% and its median after-cost CAGR 0.00%. Over the same period it lost less than buy-and-hold, but the cash effect of barely participating in the market is mixed with the entry timing effect.
So EXP-012 does not search RSI parameters. It fixes the existing base form on 30 symbols and separates the following two verdicts.
- Signal verdict: do RSI(2) oversold entry days earn better subsequent returns than ordinary trading days in the same uptrend?
- Operating verdict: does a single-symbol account applying the existing RSI exit have positive after-cost expectancy and sufficient capital deployment?
2. Data and universe
- Source:
data/raw/creon/bulk/all_research/<symbol>/D/*.csv - Snapshot:
creon-20260826T104553Z - Universe: the top 30 by trading value in
data/manifests/EXP-011-universe.json, reused in the same order - Control: the 7 symbols included in EXP-010
- Generalization group: the other 23 symbols
- Warm-up: indicators computed from 2005-01-01; trades allowed only inside each evaluation period
The 30 symbols were selected by train-period trading value but start from the listing as of 2026-08-26, so survivorship bias remains. These 30 symbols' results were also already seen in the full-universe sweep. No period is called new OOS, and EXP-012's results are used only as a historical robustness recheck.
3. Fixed periods
| Period | Dates | Role |
|---|---|---|
train | 2010-01-01 ~ 2018-12-31 | Past calibration and structure check |
validation | 2019-01-01 ~ 2022-12-31 | Period consistency check |
historical_recheck | 2023-01-01 ~ 2026-08-26 | Recheck of the repeatedly viewed recent period |
Each period runs independently with an initial 3,000,000 KRW. Signal calculation uses earlier warm-up bars, but cash, P&L and risk state are not carried between periods. Positions at the end of a period are closed at the last close as window_end.
4. Fixed strategy contract
- Entry signal: same-day close
> SMA(200)and Wilder RSI(2)< 5 - Entry fill: next valid trading day's open
- Exit signal: same-day close RSI(2)
> 70 - Exit fill: next valid trading day's open
- Repeat buys: no additional entry while a position is held
- Stops and time exits: none
- Capital: an independent 3,000,000 KRW account per symbol
- Quantity: 95% of cash just before entry, integer quantity including costs, no leverage
- Risk policy: only
research_unhaltedis used for the verdict - Execution:
execution_model="v2", no fills on bars with 0 volume
The results of the 30 independent accounts are not combined and shown as if they were the return of one 3,000,000 KRW portfolio. account_halt, the -7% stop, the 5-bar exit and RSI threshold changes are excluded from the EXP-012 matrix.
5. Cost matrix
| Profile | Definition | Use |
|---|---|---|
frictionless | Commissions, taxes and slippage 0 | Check the signal's direction before costs |
normalized_actual_proxy | Commission 1.5bp/one-way + per-product taxes | 1st verdict |
normalized_2x_stress | Commissions and taxes 2x | Cost robustness |
normalized_plus_5bp_slippage | Baseline costs + 5bp/one-way slippage | Execution stress |
Nothing is labelled actual until actual CREON execution commissions are confirmed. Tax-exempt symbols are checked against the product master, and unconfirmed symbols are not exempted by guesswork.
The base strategy matrix is 30 symbols × 3 periods × 4 costs = 360 cells.
6. Test A — signal event comparison experiment
6.1 Purpose
Measure whether a short-term rebound effect exists at RSI entry times, independent of the existing strategy's exit rule. This result is not a backtest of a separate 5-day holding strategy but an entry signal diagnostic.
6.2 Signal events
The signal day is t, and the next valid trading day's open is the entry price. The 1st return runs from the entry open to the open of the fifth valid trading day. If the opens after the entry day are O1..O6 in order:
gross_return_5d = O6 / O1 - 1
net_return_5d = (net proceeds from selling 1 share at O6 / total outlay to buy 1 share at O1) - 1
Net proceeds and total outlay are computed with the profile's CostModel, and the sell tax uses the rate in force at the time of the comparison day. To remove the influence of integer quantities and account size, event returns are per 1 share.
If O6 does not exist before the end of the period, both the signal and control groups are excluded by the same rule. 1-, 3- and 10-trading-day returns are auxiliary diagnostics and are not used for the verdict in place of the 5-trading-day result.
Every raw buy signal on the same symbol counts as an event, regardless of whether a position is held. To distinguish it from the actual strategy's unfilled repeat signals, raw_signal_event=true is recorded.
6.3 Generating control events
For each signal event, dates on the same symbol and in the same period that meet all the conditions below become candidates.
- The same-day close is above SMA(200).
- RSI(2) is 5 or higher.
- There is no day with RSI(2) < 5 within the 10 trading days before the candidate day. Signals after the candidate day are not used.
- It is in the same month as the signal day. If there is no candidate in the same month, widen to the same quarter; if there is still none, that signal event is excluded from the control analysis and the exclusion count is recorded.
- The required O6 after entry exists within the same evaluation period.
Among the candidates, the one date with the smallest sum of standardized distances in the 20-trading-day return and 20-trading-day volatility just before the signal day is selected. On ties, the earlier candidate is chosen. A candidate date can be reused as the control for other signals, but each signal maps to only one. This rule removes result variation due to random numbers.
The standardization denominator is each variable's MAD (median absolute deviation) computed on that signal's candidate set. If the MAD is 0, that variable's candidate-set standard deviation is used, and if that is also 0, that variable's distance is set to 0.
All matching variables use only values confirmed up to the candidate day. Returns after the control day are not used for matching.
6.4 1st statistic
event_effect = mean(signal net_return_5d - matched_control net_return_5d)
- 1st cell: generalization group of 23 symbols ×
historical_recheck×normalized_actual_proxy - Auxiliary cells: all 30 symbols, each of the three periods, the four cost profiles
- Uncertainty: 10,000 bootstrap draws resampling calendar-month blocks common to all symbols in the same order
- Sensitivity: 10,000 draws with 3-month consecutive blocks
- Recorded: mean and median effect, 95% percentile interval, signal count, matching success rate, number of distinct signal dates
A simple t-test assuming per-symbol trades are independent samples is not used as 1st evidence. Simultaneous signals on the same market crash day can inflate the sample count.
7. Test B — standalone operability of the existing strategy
The 360 cells are run with the existing RSI exit contract. For each cell, the following are computed.
- Trade count, number of distinct entry dates, net expectancy, win rate, payoff ratio, profit factor
- Total return, CAGR, MDD, total costs
- Share of trading days with a position held
- Capital deployment rate, the mean of daily
position value / NAV - Net P&L contribution by symbol and year, and net P&L excluding the single top contributor
- Order outcomes such as
quantity_zero,no_tradingandwindow_end
Exposure-matched comparison group
Alongside 100% cash and per-symbol buy-and-hold, a buy-and-hold at pre-calibrated exposure is computed.
- Initial investment weight for validation: the same symbol's average capital deployment in train
- Initial investment weight for historical_recheck: the same symbol's average capital deployment in validation
- Buy only that weight in integer quantity at the period's first valid open, keeping the rest in cash at 0% interest
- Sell at the period's last valid close, applying the same costs as the strategy
- Train has no preceding calibration period, so this comparison group is not built for it
The comparison weight is not matched after seeing the evaluation period's actual exposure. This comparison is auxiliary evidence of whether, from the same initial participation budget, entry timing added value.
8. Sample gate
Before the 1st verdict, the following is checked in historical_recheck for the generalization group of 23 symbols.
- At least 100 completed actual strategy trades in total
- At least 50 distinct actual entry dates
- Signal event matching success rate of 80% or higher
- Cells with
quantity_zeroare flagged as contaminated by capital constraints and excluded from performance medians
If any one is unmet, no definitive verdict is made regardless of the sign of the effect, and it is recorded as inconclusive_sample . 100 trades and 50 days are not statistical laws guaranteeing independence but a preregistered research budget criterion for deciding whether to spend resources on follow-up research.
9. Dual verdict rules
9.1 Signal verdict
| Verdict | Condition |
|---|---|
signal_positive | Sample gate passed, 1st event_effect > 0, 95% bootstrap lower bound > 0 |
signal_negative | Sample gate passed, 95% bootstrap upper bound <= 0 |
signal_inconclusive | Confidence interval includes 0 or sample gate not met |
This verdict is not replaced with results from a favourable 1/3/10-day horizon, the 7 control symbols or a particular cost profile.
9.2 Standalone operation verdict
First, all of the following gates are checked in the 1st cell of the generalization group of 23 symbols.
- Median after-cost per-symbol trade expectancy
> 0 - Combined net P&L excluding the single top-earning symbol
> 0 - Combined net P&L excluding the single top-earning year
> 0 - Direction of the median trade expectancy held at 2x costs and 5bp slippage
- Median expectancy
> 0in at least 2 of train, validation and historical_recheck - Median per-symbol share of position-holding days
>= 10%
10% is not a law of profitability but an interim operating gate checking whether a standalone strategy actually uses its capital . It is not lowered after seeing results.
| Verdict | Condition |
|---|---|
standalone_advance | Sample gate and all 6 gates above passed |
standalone_reject | Gate 1 fails after the sample gate passes, or signal_negative |
standalone_hold | Otherwise |
standalone_advance is not live-trading approval but a move to the next robustness stage. CAGR 15% is shown separately as whether the existing business target is met, but it is not used as a statistical pass line for the existence of a signal.
10. Conditions for passing to the EXP-013 shared-capital test
- If
signal_positive, EXP-013 proceeds regardless of the standalone verdict. - If
signal_inconclusivebut the event effect point estimate is positive and only the sample gate falls short, first compute whether a shared-capital implementation solves the sample shortfall, then decide whether to start EXP-013. - If
signal_negative, shared capital cannot dress up a negative signal, so it does not proceed.
EXP-013 is a separate experiment whose base contract is total capital of 3,000,000 KRW, at most 5 symbols, and 19% of pre-entry NAV per symbol . Multi-symbol shared capital is not a simple aggregation of the current single-symbol engine, so in EXP-012 it is neither implemented nor are its results mixed in.
11. Execution record
The command was python -X utf8 scripts/backtest/run_connors_rsi2_exp012.py. After passing 37 synthetic and regression checks, the 30 symbols were run, generating the summary, benchmark and event ledgers and EXP-012-run.json. Results and verdicts are recorded in the