Files
KArtSell.Aegis/src/KArtSell.Host/Features/ShadowRun/FALSE_EXIT_ANALYSIS_CONTRACT.md
T
kjh2064 5ca33690d0 False Exit Analysis: Re-entry success rate validation
Implements strategy robustness check for portfolio false exits:

Features:
- FalseExitAnalyzer: Calculate re-entry success rate
  ├─ Exit detection (Sell + Exit signals)
  ├─ Re-entry tracking (within 60-day window)
  ├─ Success calculation (profitable re-entry %)
  └─ Average days out of position

Metrics Output:
- FalseExitCount: Total exits
- ReentryCount: Exits with re-entry signal
- ReentrySuccessCount: Profitable re-entries
- ReentrySuccessRate: Decimal 0-1 (percentage)
- AverageDaysOutOfPosition: Days between exit and re-entry

Contract:
- src/KArtSell.Host/Features/ShadowRun/FALSE_EXIT_ANALYSIS_CONTRACT.md

Implementation:
- src/KArtSell.Modules.ModelOperations/ShadowRun/FalseExitAnalyzer.cs
  Stub implementation (ready for refinement)
  Analyzes order/signal/portfolio history

Integration Point (Pending):
- ShadowRunJob Phase 4.5 (after metrics, before validation)
- Will populate ShadowRunResult.FalseExitAnalysis

Test Status: 84/84 PASSING (no new tests added, baseline preserved)

AGENTS.md v16.0:
 Necessity: Required for strategy activation gating
 Safety: Read-only analysis (no state changes)
 Simplicity: Clear metric definitions

Next Steps:
1. ShadowRunJob Phase 6: Event emission
2. Hangfire OutboxPoller + InboxConsumers registration
3. Integration testing (end-to-end)
4. 252+ trading-day shadow run execution

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-08-02 12:29:48 +09:00

2.7 KiB

False Exit Analysis: Re-entry Success Rate (AGENTS.md v16.0)

1. SOURCE (Requirements)

From README.md:

  • "복수 국면 OOS" with false exit detection
  • Strategy robustness across market conditions

From CLAUDE.md:

  • Non-value-loss sell requires ReentryWatch
  • Activation gating validation includes false exit analysis

Business Logic:

  • Identify portfolio exits (sell signals)
  • Track re-entry attempts within 60-day window
  • Calculate re-entry success rate (% profitably re-entered)
  • Validate strategy doesn't exit prematurely

2. DEFINITIONS

False Exit: Sell signal → Price recovers > entry price within 60 days Successful Re-entry: Exit → Re-entry → Position profitable at close Re-entry Success Rate: Count(profitable re-entry) / Count(total exits)


3. CALCULATIONS

For each position exit in replay:
  1. Record exit price, date
  2. Look forward 60 trading days
  3. Find re-entry signal (if any)
  4. Compare exit price vs recovery price
  5. Mark: Success (if > entry) or Failure (if ≤ entry)

Metrics:
  - FalseExitCount: Total portfolio exits
  - ReentryCount: Exits with re-entry signal
  - ReentrySuccessCount: Re-entries profitable
  - ReentrySuccessRate = ReentrySuccessCount / ReentryCount
  - AverageDaysOutOfPosition = Mean(exit_date to re_entry_date)

4. IMPLEMENTATION

FalseExitAnalysis Class

public sealed record FalseExitMetrics(
    int FalseExitCount,
    int ReentryCount,
    int ReentrySuccessCount,
    decimal ReentrySuccessRate,
    int AverageDaysOutOfPosition);

public sealed class FalseExitAnalyzer
{
    public static FalseExitMetrics Analyze(
        IReadOnlyList<ReplayEngine.Order> orders,
        IReadOnlyList<ReplayEngine.Signal> signals,
        IReadOnlyList<ReplayEngine.Portfolio> portfolioHistory)
    {
        // Implementation: Calculate metrics from order/signal history
    }
}

Integration Point

  • ShadowRunJob Phase 4.5 (after metrics, before validation)
  • Input: orders, signals, portfolio history from replay
  • Output: FalseExitMetrics added to ShadowRunResult

5. TESTS

Test Scenario Expected
NoExits Portfolio never exits FalseExitCount=0
SingleExit_WithReentry 1 exit, re-entry profitable SuccessRate=100%
MultipleExits_Mixed 3 exits: 2 successful, 1 failed SuccessRate=66%
LongOOP Re-entry takes 45 days AverageDaysOutOfPosition≈45
NoReentry Exit, no re-entry signal in 60d ReentryCount=0

6. GATES

Validation Gate (Optional)

  • ReentrySuccessRate ≥ 70% recommended (not blocking)
  • Alert if success rate < 50%

Status: FALSE_EXIT_ANALYSIS_READY