|
| 1 | +# Strategy Lifecycle Policy |
| 2 | + |
| 3 | +[简体中文](./strategy_lifecycle_policy.zh-CN.md) |
| 4 | + |
| 5 | +This document defines the lifecycle gates for strategy profiles across the |
| 6 | +quant repositories. |
| 7 | + |
| 8 | +## Design Goal |
| 9 | + |
| 10 | +The lifecycle should be permissive for research and monitoring, but strict for |
| 11 | +capital impact. |
| 12 | + |
| 13 | +- AI monitoring may accelerate review and highlight drift. |
| 14 | +- AI monitoring must not bypass the live-enable gate. |
| 15 | +- A strategy can be observed earlier than it can trade. |
| 16 | +- Live enablement remains a platform decision, not just a backtest decision. |
| 17 | + |
| 18 | +## Recommended Lifecycle Stages |
| 19 | + |
| 20 | +| Stage | Meaning | Capital impact | Typical owner | |
| 21 | +| --- | --- | --- | --- | |
| 22 | +| `research_backtest_only` | Backtests, feature work, or evidence collection only | none | strategy repo | |
| 23 | +| `ai_monitored_candidate` | Eligible for AI review, drift scoring, and shadow tracking | none | strategy lifecycle | |
| 24 | +| `shadow_candidate` | Shadow runs are stable enough for repeatable comparisons | none | strategy lifecycle | |
| 25 | +| `live_candidate` | Passed validation and is awaiting platform enablement | gated | platform + strategy | |
| 26 | +| `runtime_enabled` | Exposed by `get_runtime_enabled_profiles()` and allowed in runtime settings | yes | platform repo | |
| 27 | + |
| 28 | +### Practical interpretation |
| 29 | + |
| 30 | +- `research_backtest_only` is the default for anything new. |
| 31 | +- `ai_monitored_candidate` is the lowest-friction review stage when the |
| 32 | + organization already has automated monitoring. |
| 33 | +- `shadow_candidate` should require repeatable shadow consistency, not just one |
| 34 | + good backtest. |
| 35 | +- `live_candidate` should only be used when the strategy has enough evidence to |
| 36 | + justify platform enablement. |
| 37 | +- `runtime_enabled` is the only stage that should influence live deployment |
| 38 | + defaults. |
| 39 | + |
| 40 | +## Three-Gate Rule |
| 41 | + |
| 42 | +A strategy should clear all three gates before live use: |
| 43 | + |
| 44 | +1. **Strategy gate** |
| 45 | + - Does the strategy have enough history, risk characterization, and drift |
| 46 | + tolerance to move beyond research? |
| 47 | +2. **Plugin gate** |
| 48 | + - If the strategy depends on plugins, are those plugins at least |
| 49 | + `automation_approved` or explicitly `notification_only`? |
| 50 | +3. **Platform gate** |
| 51 | + - Does the target platform expose the profile via |
| 52 | + `get_runtime_enabled_profiles()` and accept the required runtime inputs? |
| 53 | + |
| 54 | +Any one of these gates failing should keep the profile out of live settings. |
| 55 | + |
| 56 | +## Recommended Promotion Policy |
| 57 | + |
| 58 | +- Keep the monitoring threshold relatively low so candidates are visible early. |
| 59 | +- If AI monitoring already exists, use it to move promising profiles into |
| 60 | + `ai_monitored_candidate` quickly; this stage is for visibility, not capital. |
| 61 | +- Keep the live-enable threshold high so runtime exposure remains deliberate. |
| 62 | +- Prefer promotion by evidence package, not by ad hoc overrides. A promotion |
| 63 | + package should include backtest summary, drift notes, risk review, and |
| 64 | + platform compatibility evidence. |
| 65 | +- See [`evidence_package_template.md`](./evidence_package_template.md) for the |
| 66 | + recommended package shape. |
| 67 | +- When a strategy is a wrapper or orchestrator, promote it only after the |
| 68 | + wrapped components are stable and the wrapper itself has been validated. |
| 69 | + |
| 70 | +## Repo-Level Guidance |
| 71 | + |
| 72 | +- **US equity**: long-history trend / rotation profiles can move through the |
| 73 | + lifecycle earlier; wrapper combos should stay candidate-first. |
| 74 | +- **HK equity**: keep live exposure narrow and promote only stable runtime |
| 75 | + profiles. |
| 76 | +- **CN equity**: treat QMT-specific optional runtime profiles separately from |
| 77 | + the main live catalog. |
| 78 | +- **Crypto**: keep the monitoring stage permissive, but use a stricter live |
| 79 | + gate because regime shifts are faster. |
| 80 | + |
| 81 | +## Operational Rule |
| 82 | + |
| 83 | +If a profile is not returned by `get_runtime_enabled_profiles()`, it should |
| 84 | +stay out of live runtime settings regardless of monitoring status. |
0 commit comments