"""Phase 3 strategy adoption: time-based exit + confidence floor removed. The July 2026 backtest (gate ablation graded under both exit models, plus the capital-constrained portfolio simulation) concluded: - The best exit is hold-to-horizon: keep the initial ATR stop and exit at the 30th trading day's close (+0.50R net/trade vs +0.13R for the S/R target exit; simulated book +31.9% vs +23.7% CAGR at the same drawdown). The paper trade exit-policy default is now ``time`` (30 trading days). - The confidence floor adds nothing (identical net/trade with it removed, under both exit models) while cutting ~25% of qualified trades. Its default is now 0 (off). Stored rows for these two settings were written under the old semantics, so they are cleared here and the new code defaults take effect. Re-tune in Admin -> Activation / Paper-Trade Exit if desired. Note: this changes which setups qualify and how paper trades close, so Track Record comparability resets from this deploy. Revision ID: 015 Revises: 014 Create Date: 2026-07-02 00:00:00.000000 """ from typing import Sequence, Union from alembic import op import sqlalchemy as sa # revision identifiers, used by Alembic. revision: str = "015" down_revision: Union[str, None] = "014" branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None def upgrade() -> None: op.execute( sa.text( "DELETE FROM system_settings " "WHERE key IN ('activation_min_confidence', 'paper_exit_mode')" ) ) def downgrade() -> None: # One-way data reset: the old per-key values aren't recoverable. Code # defaults apply until re-tuned, so there is nothing to restore. pass