feat: Pattern Explorer — taxonomy tree + 23 historical patterns + instrument lens

- PatternExplorer.tsx: new page with two views:
    • Tree View — 6-root taxonomy (geopolitical, monetary_policy, economic,
      commodity, risk_off, market_structure) with collapsible sub-nodes;
      pattern cards appear on node selection
    • Instrument Lens — search any ticker (e.g. GLD, FXE) to see every
      pattern + scenario that references it, with matching trades highlighted
- geo_analyzer.py: PATTERN_TAXONOMY tree constant + taxonomy_path on all
  patterns; 15 new documented patterns P009-P023 (BoJ YCC, SVB crisis,
  Taiwan semis, OPEC cuts, Fed pivot, Debt ceiling, Iran nuclear, DPRK,
  VIX backwardation, ECB surprise, Extreme Fear contrarian, S. China Sea,
  European energy, CPI hot print, Flash crash)
- patterns.py: GET /api/patterns/taxonomy, GET /api/patterns/by-instrument
- database.py: taxonomy_path migration + seed_builtin_patterns updates path
- App.tsx: /patterns → PatternExplorer, /patterns/edit → PatternEditor

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
OpenSquared
2026-06-22 16:42:45 +02:00
parent acc8bef29d
commit 10ffc345d6
6 changed files with 1148 additions and 5 deletions

View File

@@ -251,6 +251,21 @@ export const useAllPatterns = () =>
queryFn: () => api.get('/patterns/all').then(r => r.data),
})
export const usePatternTaxonomy = () =>
useQuery({
queryKey: ['pattern-taxonomy'],
queryFn: () => api.get('/patterns/taxonomy').then(r => r.data),
staleTime: 5 * 60_000,
})
export const usePatternsByInstrument = (ticker: string) =>
useQuery({
queryKey: ['patterns-by-instrument', ticker],
queryFn: () => api.get('/patterns/by-instrument', { params: { ticker } }).then(r => r.data),
enabled: !!ticker,
staleTime: 2 * 60_000,
})
export const usePatternSimilarity = () =>
useQuery({
queryKey: ['pattern-similarity'],