feat: implement Part D and E from FIXPLAN

- D1/D2/D2c: Added TraderTraits entity, TraderTraitCalculator, Market Return Metrics (MedianWin, AvgWin, etc.), and trait filters
- D3: Implemented HF-Trader Tiering via IngestMode (Full, Aggregated, SnapshotOnly) and updated TradeHistoryWorker to respect tiers
- E1-E5: Added MasterStatus to Trader, TraderWindowMetrics for rolling analytics, Fingerprint metrics (PriceBandProfile, P50/P90), Copyability aggregates (Volume, Drift, Edge)
- E6: Implemented GET /api/traders/{id}/profile and GET /api/traders/correlation
- Replaced FIXPLAN-2026-07-09.md with FIXPLAN-TODO.md and FIXPLAN-DONE.md
- Cleaned up API docs and plan to use generic terms (removed hardcoded PolyTrader references)
- Added respective EF Core Migrations
This commit is contained in:
Richard
2026-07-14 09:04:31 +02:00
parent a1fcb4ace5
commit 16431f38a5
39 changed files with 9028 additions and 167 deletions
+13 -1
View File
@@ -79,6 +79,12 @@ public class Trade
/// <summary>Indicates if high-res price context was fetched.</summary>
public bool IsContextEnriched { get; set; }
/// <summary>
/// For aggregated trades (compacted history or HF trader hourly bucket), this stores
/// the number of original trades that were grouped into this single row. Null means 1.
/// </summary>
public int? AggregatedCount { get; set; }
// ── Transient (not persisted) ──────────────────────────────────────────
/// <summary>
@@ -87,7 +93,13 @@ public class Trade
/// </summary>
[NotMapped]
public string? TransientWallet { get; set; }
[NotMapped] public string? TransientDisplayName { get; set; }
/// <summary>
/// Transient reference to the trader's display name from the platform, used to opportunistically
/// update the local name if it's currently a placeholder or empty.
/// </summary>
[NotMapped]
public string? TransientDisplayName { get; set; }
// ── Navigation ────────────────────────────────────────────────────────
public Trader Trader { get; set; } = null!;