Pattern Matching & Alerting Flow Diagrams
Agencio Predict - Technical Documentation
1. High-Level User Flow
User Journey Overview
flowchart LR
subgraph UserActions["User Actions"]
A["1. User Watches Symbols"] --> B["2. System Detects Patterns"]
B --> C["3. User Receives Alert"]
C --> D["4. Trade Executes"]
end
A --> A1["Add symbols to watchlist\nSet alert thresholds"]
B --> B1["Chart patterns\nCandlestick patterns"]
C --> C1["Push notification\nEmail / In-app\nSSE real-time"]
D --> D1["Manual trade\nOR Auto-trade"]
User Actions Available
| Step | UI Location | Action |
| Watch symbols | /patterns → Watchlist tab | Add symbols, set alert threshold (default 85%) |
| Configure auto-trade | /settings/auto-trade | Enable pattern auto-trading with filters |
| View warming radar | /patterns → Warming tab | See patterns close to triggering |
| View detections | /patterns → Hunter tab | See confirmed pattern triggers |
| Receive alerts | Push/Email/SSE | Real-time notifications |
2. Pattern Types Overview
2.1 Chart Patterns (Graph Patterns)
File: packages/be/src/insights/price-action-patterns.ts
| Pattern Type | Direction | Description |
support_bounce | Bullish | Price bounces off support level |
resistance_rejection | Bearish | Price rejected at resistance |
cluster_breakout_retest | Both | Price breaks cluster, retests, continues |
double_bottom | Bullish | Classic W reversal pattern |
double_top | Bearish | Classic M reversal pattern |
higher_low | Bullish | Uptrend continuation |
lower_high | Bearish | Downtrend continuation |
false_breakout | Both | Breakout that failed and reversed |
2.2 Candlestick Patterns
File: packages/be/src/insights/candle-pattern-scanner.ts
| Category | Patterns |
| Single Bar | hammer, inverted_hammer, hanging_man, shooting_star, doji, marubozu |
| Two Bar | bullish_engulfing, bearish_engulfing, bullish_harami, bearish_harami, piercing_line, dark_cloud_cover, tweezer_top, tweezer_bottom |
| Three Bar | morning_star, evening_star, three_white_soldiers, three_black_crows |
3. Complete Technical Flow
7-Layer Architecture: Data Ingestion to Outcome Tracking
flowchart TB
subgraph Layer1["LAYER 1: DATA INGESTION"]
PS["price-service.ts\ngetHistoricalPrices"]
SCH["Scheduler Jobs\n15-min cadence"]
PS --> DATA[("Price Data")]
SCH --> DATA
end
subgraph Layer2["LAYER 2: PATTERN DETECTION"]
DATA --> PAP["CHART PATTERNS\nprice-action-patterns.ts"]
DATA --> CPS["CANDLESTICK PATTERNS\ncandle-pattern-scanner.ts"]
DATA --> UDP["USER-DEFINED PATTERNS\nuser-candle-patterns/"]
PAP --> PAP1["detectClusterBreakoutRetest"]
PAP --> PAP2["detectSupportBounce"]
PAP --> PAP3["detectDoubleBottom/Top"]
CPS --> CPS1["isHammer / isDoji"]
CPS --> CPS2["isBullishEngulfing"]
UDP --> UDP1["evaluateBarRules"]
end
subgraph Layer2b["REGIME ADJUSTMENT"]
PAP1 & PAP2 & PAP3 --> ARC["applyRegimeContext"]
ARC --> RGM{"Market Regime"}
RGM --> MULT["Regime Multiplier"]
end
subgraph Layer3["LAYER 3: PERSISTENCE"]
ARC --> PERSIST["persistPatterns"]
PERSIST --> DB1[("trading.price_action_patterns")]
end
subgraph Layer4["LAYER 4: WARMING RADAR"]
DB1 --> WARM["pattern-warming.ts\ndetectWarmingForSymbol"]
WARM --> PROX["Calculate Proximity"]
PROX --> DB3[("trading.pattern_warming")]
end
subgraph Layer5["LAYER 5: ALERT PIPELINE"]
DB3 --> ALERT["pattern-alert-pipeline.ts\nprocessWarmingAlerts"]
ALERT --> A2{"proximity >= 85%?"}
A2 --> |Yes| A6["emitPatternIntelligenceEvent"]
end
subgraph Layer6["LAYER 6: AUTO-TRADE"]
DB1 --> AUTO["processPatternForAutoTrade"]
AUTO --> AT6{"Paper or Live?"}
AT6 --> |Paper| AT7["Mock Execution"]
AT6 --> |Live| AT8["Broker Adapter"]
end
subgraph Layer7["LAYER 7: OUTCOME TRACKING"]
AT7 & AT8 --> STATS["pattern-statistics.ts\nHistorical hit rates"]
end
4. Warming Proximity Calculation
How Proximity Scores Are Computed
flowchart TB
subgraph Inputs
PRICE["Current Price vs Trigger Level"]
VOL["Current Volume vs Average"]
TIME["Bars at Level vs Required"]
REGIME["Market Regime"]
end
subgraph Calculation
PRICE --> PP["priceProximity\n= max(0, 100 - distPct/threshold * 50)"]
VOL --> VP["volumeProximity\n= min(100, ratio/multiplier * 100)"]
TIME --> TP["timeProximity\n= min(100, bars/minBars * 100)"]
PP --> |"x 0.50"| TOTAL["proximityPct"]
VP --> |"x 0.25"| TOTAL
TP --> |"x 0.25"| TOTAL
REGIME --> RF["regimeFavorability\n0.3 - 1.3"]
TOTAL --> FINAL["adjustedProximity"]
RF --> FINAL
end
subgraph Output
FINAL --> |">= 85%"| ALERT["Generate Alert"]
FINAL --> |"< 85%"| WAIT["Wait / Monitor"]
end
5. Chart Pattern Detection Detail
Double Bottom & Cluster Breakout Detection Logic
flowchart TB
subgraph Input
BARS["OHLCV Bars\nnewest first"]
end
subgraph Detection["detectPatterns()"]
BARS --> CLUSTER["detectClusterBreakoutRetest"]
BARS --> SUPPORT["detectSupportBounce"]
BARS --> DBL_BOT["detectDoubleBottom"]
BARS --> DBL_TOP["detectDoubleTop"]
end
subgraph ClusterLogic["Cluster Breakout Logic"]
CLUSTER --> C1["findCluster\ntight range, low vol"]
C1 --> C2{"Breakout above?"}
C2 --> |Yes| C3{"Retesting?"}
C3 --> |Yes| C5["status: confirmed\ndirection: bullish"]
C2 --> |Below| C6{"Retesting?"}
C6 --> |Yes| C8["status: confirmed\ndirection: bearish"]
end
subgraph DoubleBottomLogic["Double Bottom Logic"]
DBL_BOT --> D1["findSwingLowsWithIndex"]
D1 --> D2{"Two lows within 2%?"}
D2 --> |Yes| D3["findPeakBetween = neckline"]
D3 --> D4{"Price above neckline?"}
D4 --> |Yes| D6["status: confirmed\ndirection: bullish"]
end
subgraph Output
C5 & C8 & D6 --> PAT["PriceActionPattern"]
PAT --> CONF["confidence: 0.0 - 1.0"]
PAT --> LEVELS["entry, stop, target"]
end
6. Candlestick Pattern Detection Detail
Single, Two-Bar, and Three-Bar Pattern Detection
flowchart TB
subgraph SingleBar["Single Bar Patterns"]
B0["Current Bar"] --> HAMMER{"isHammer?"}
HAMMER --> |"body < 30%\nlower wick >= 2x body\nupper wick < body"| H_YES["HAMMER"]
B0 --> DOJI{"isDoji?"}
DOJI --> |"body < 10%"| D_YES["DOJI"]
B0 --> MARU{"isMarubozu?"}
MARU --> |"body > 95%"| M_YES["MARUBOZU"]
end
subgraph TwoBar["Two Bar Patterns"]
B0 --> ENG{"isBullishEngulfing?"}
ENG --> |"prev bearish\ncurr bullish\ncurr engulfs prev"| E_YES["BULLISH ENGULFING"]
B0 --> HARAMI{"isBullishHarami?"}
HARAMI --> |"prev bearish\ncurr bullish\ncurr inside prev"| HA_YES["BULLISH HARAMI"]
end
subgraph ThreeBar["Three Bar Patterns"]
B0 --> MSTAR{"isMorningStar?"}
MSTAR --> |"bar2: strong bearish\nbar1: small body\nbar0: strong bullish"| MS_YES["MORNING STAR"]
B0 --> THREE{"isThreeWhiteSoldiers?"}
THREE --> |"all bullish\nall body > 50%\neach closes higher"| TW_YES["THREE WHITE SOLDIERS"]
end
subgraph Stats
H_YES & D_YES & E_YES & MS_YES --> MATCH["CandlePatternMatch"]
MATCH --> OUTCOME["outcomePercent\nisWin\nreliability"]
end
7. Auto-Trade Execution Flow
Safety Gates and Execution Logic
flowchart TB
subgraph Trigger
PAT["Pattern Detected\nstatus: triggered/confirmed"]
end
subgraph ConfigMatch["Find Matching Configs"]
PAT --> Q["Query pattern_auto_trade_config\nWHERE enabled = true"]
Q --> CONFIGS["User Configs"]
end
subgraph Gates["Safety Gates"]
CONFIGS --> G1{"User mode matches?"}
G1 --> |No| FAIL1["Skip: Mode mismatch"]
G1 --> |Yes| G2{"Daily limit ok?"}
G2 --> |No| FAIL2["Skip: Daily limit"]
G2 --> |Yes| G3{"Cooldown passed?"}
G3 --> |No| FAIL3["Skip: In cooldown"]
G3 --> |Yes| G4{"Positions ok?"}
G4 --> |No| FAIL4["Skip: Position limit"]
G4 --> |Yes| SIZE["Calculate Position Size"]
end
subgraph Sizing["Position Sizing"]
SIZE --> S1{"fixed_usd?"}
S1 --> |Yes| USD["Use fixed $ amount"]
S1 --> |No| S2{"percent_portfolio?"}
S2 --> |Yes| PCT["balance x %"]
S2 --> |No| RISK["riskAmt / stopDistance"]
end
subgraph Execute
USD & PCT & RISK --> MODE{"Execution Mode?"}
MODE --> |Paper| MOCK["Mock Trade"]
MODE --> |Live| PRE["4-Gate Preflight"]
PRE --> BROKER["Broker Adapter"]
end
subgraph Log
MOCK & BROKER --> LOG["pattern_auto_trade_log"]
LOG --> NOTIFY["Push Notification"]
end
8. Cross-Reference Engine
Dual-Pattern Confirmation System
flowchart TB
subgraph Sources
WARM["Warming Pattern\nproximity >= 85%"]
HUNT["Hunter Pattern\nstatus: triggered/confirmed"]
end
subgraph Matching
WARM --> MATCH{"Same symbol?\nSame price zone?\nWithin 24 hours?"}
HUNT --> MATCH
MATCH --> |Yes| CORR["Calculate Correlation Score"]
end
subgraph CorrelationMatrix["Correlation Matrix"]
CORR --> CM["Pre-built correlations:\ndouble_bottom - support_bounce\nbull_flag - breakout_imminent\nhead_shoulders - trend_reversal"]
end
subgraph Score["Score Calculation"]
CM --> S["correlationScore =\ncorrelationStrength x 0.5 +\npriceScore x 0.3 +\nhunterConfidence x 0.2"]
end
subgraph Output
S --> XREF["CrossReference Record"]
XREF --> DB[("pattern_cross_references")]
XREF --> ALERT["Higher confidence signal"]
end
9. File-by-File Reference
Core Detection Files
| File | Purpose | Key Functions |
packages/be/src/insights/price-action-patterns.ts | Chart pattern detection | detectPatterns(), detectClusterBreakoutRetest(), detectSupportBounce(), detectDoubleBottom() |
packages/be/src/insights/candle-pattern-scanner.ts | Candlestick scanning | scanForCandlePattern(), isHammer(), isDoji(), isBullishEngulfing() |
packages/be/src/insights/user-candle-patterns/detector.ts | User-defined patterns | detectPatternForSymbol(), evaluateBarRules() |
Alert Pipeline Files
| File | Purpose | Key Functions |
packages/be/src/insights/pattern-warming.ts | Pre-trigger detection | detectWarmingForSymbol(), checkSupportBounceWarming() |
packages/be/src/insights/pattern-alert-pipeline.ts | Alert processing | processWarmingAlerts(), processHunterDetection(), emitPatternIntelligenceEvent() |
packages/be/src/insights/pattern-cross-reference.ts | Dual-pattern confirmation | findCrossReference(), findCrossReferenceForHunterPattern() |
Trading Integration Files
| File | Purpose | Key Functions |
packages/be/src/trading/pattern-auto-trade.ts | Auto-trade execution | processPatternForAutoTrade(), executeAutoTrade(), calculatePositionSize() |
packages/be/src/trading/services/trade-execution.ts | Order execution | executeTrade() |
packages/be/src/brokers/service.ts | Broker management | getUserExecutionMode(), getAdapterForUser() |
10. Database Tables
Entity Relationship Diagram
erDiagram
price_action_patterns {
string id PK
string user_id FK
string symbol
string pattern_type
string status
string direction
float confidence
jsonb levels
timestamp detected_at
}
pattern_warming {
string id PK
string symbol
string pattern_type
float proximity_pct
float trigger_price
timestamp expires_at
}
pattern_auto_trade_config {
string id PK
string user_id FK
boolean enabled
float min_confidence
string execution_mode
int max_daily_trades
}
pattern_auto_trade_log {
string id PK
string user_id FK
string pattern_id FK
string symbol
float entry_price
float exit_price
float pnl_pct
}
pattern_intelligence_events {
string id PK
string user_id FK
string event_type
string symbol
jsonb data
string severity
}
price_action_patterns ||--o{ pattern_auto_trade_log : triggers
pattern_auto_trade_config ||--o{ pattern_auto_trade_log : executes
11. API Endpoints
Pattern Detection
| Endpoint | Method | Purpose |
/api/predict/v1/patterns | GET | List patterns |
/api/predict/v1/patterns/detect | POST | Detect patterns for symbol |
/api/predict/v1/patterns/warming | GET | Get warming patterns |
/api/predict/v1/patterns/warming/scan | POST | Scan for warming patterns |
/api/predict/v1/patterns/stats | GET | Historical statistics |
/api/predict/v1/patterns/candle-scan | POST | Scan for candlestick patterns |
Alerts & Auto-Trade
| Endpoint | Method | Purpose |
/api/predict/v1/patterns/subscriptions | GET/POST | Alert subscriptions |
/api/predict/v1/patterns/watchlist | GET/POST/DELETE | Watchlist management |
/api/predict/v1/trading/auto-trade-config | GET/POST | Auto-trade configuration |
12. Regime Favorability Multipliers
Pattern Confidence Adjustment by Market Regime
graph LR
subgraph BullishPatterns["Bullish Patterns"]
SB["support_bounce"]
DB["double_bottom"]
end
subgraph BearishPatterns["Bearish Patterns"]
RR["resistance_rejection"]
DT["double_top"]
end
subgraph Regimes
BULL(("BULL"))
BEAR(("BEAR"))
CRIS(("CRISIS"))
end
SB --> |"1.2"| BULL
SB --> |"0.6"| BEAR
SB --> |"0.3"| CRIS
DB --> |"1.3"| BEAR
DB --> |"0.5"| CRIS
RR --> |"1.2"| BEAR
RR --> |"0.6"| BULL
| Pattern | BULL | SIDEWAYS | BEAR | CRISIS | RECOVERY |
support_bounce | 1.2 | 1.0 | 0.6 | 0.3 | 1.1 |
double_bottom | 1.0 | 0.8 | 1.3 | 0.5 | 1.2 |
resistance_rejection | 0.6 | 1.0 | 1.2 | 0.4 | 0.8 |
double_top | 0.7 | 0.8 | 1.2 | 0.5 | 0.6 |
cluster_breakout_retest | 1.1 | 0.9 | 0.7 | 0.3 | 1.0 |
13. Function Call Chains
Pattern Detection Sequence
sequenceDiagram
participant SCH as Scheduler
participant AS as analyzeSymbol()
participant GHP as getHistoricalPrices()
participant DP as detectPatterns()
participant ARC as applyRegimeContext()
participant PP as persistPatterns()
participant PAT as processPatternForAutoTrade()
SCH->>AS: Trigger pattern scan
AS->>GHP: Fetch price data
GHP-->>AS: OHLCV bars
AS->>DP: Detect patterns
DP->>DP: detectClusterBreakoutRetest()
DP->>DP: detectSupportBounce()
DP->>DP: detectDoubleBottom()
DP->>ARC: Apply regime context
ARC-->>DP: Adjusted confidence
DP-->>AS: PriceActionPattern[]
AS->>PP: Persist to database
AS->>PAT: Process for auto-trade
Warming Alert Sequence
sequenceDiagram
participant SCH as Scheduler
participant SWP as scanForWarmingPatterns()
participant DWS as detectWarmingForSymbol()
participant PWA as processWarmingAlerts()
participant SSE as emitPatternIntelligenceEvent()
SCH->>SWP: Trigger warming scan
SWP->>DWS: For each symbol
DWS->>DWS: checkSupportBounceWarming()
DWS->>DWS: checkResistanceRejectionWarming()
DWS-->>SWP: WarmingPattern[]
Note over PWA: Alert processing
PWA->>PWA: Check proximity >= threshold
PWA->>PWA: recordWarmingDetectionIfNew()
PWA->>PWA: findCrossReference()
PWA->>SSE: Broadcast to user
14. UI Navigation Flows
Main UI Structure
flowchart TB
subgraph MainNav["Main Navigation"]
DASH["/dashboard"] --> PAT["/patterns"]
DASH --> SETT["/settings"]
end
subgraph PatternsPage["/patterns Page - 8 Tabs"]
PAT --> T1["Live Tab\nActive detected patterns"]
PAT --> T2["Warming Tab\nPatternWarmingRadar"]
PAT --> T3["Hunter Tab\nPatternHunter"]
PAT --> T4["Candles Tab\nCandlestick scanner"]
PAT --> T5["Templates Tab\nPatternTemplateList"]
PAT --> T6["Playback Tab\nPatternPlayback"]
PAT --> T7["Alerts Tab\nPatternAlertConfig"]
PAT --> T8["Schedule Tab\nPatternScheduler"]
end
subgraph SettingsPages["Settings Pages"]
SETT --> S1["/settings/patterns\nSubscriptions & templates"]
SETT --> S2["/settings/auto-trade\nPatternAutoTradeConfig"]
SETT --> S3["/settings/brokers\nBroker connections"]
end
User Journey: Create Custom Pattern
flowchart TB
subgraph Method1["Method 1: Natural Language"]
A1["/patterns - Templates tab"] --> B1["Click Create Template"]
B1 --> C1["PatternImportWizard"]
C1 --> D1["Select Natural Language"]
D1 --> E1["Type: Hammer at support\nwith increasing volume"]
E1 --> F1["Claude interprets - rules"]
F1 --> G1["Preview + Validate"]
G1 --> H1["Save template"]
end
subgraph Method2["Method 2: Chart Selection"]
A2["/patterns - Templates tab"] --> B2["Click Create Template"]
B2 --> C2["PatternImportWizard"]
C2 --> D2["Select Chart Selection"]
D2 --> E2["Click + drag to select bars"]
E2 --> F2["ChartPatternSelector extracts rules"]
F2 --> G2["Save template"]
end
subgraph Method3["Method 3: Image Upload"]
A3["/patterns - Templates tab"] --> B3["Click Create Template"]
B3 --> C3["PatternImportWizard"]
C3 --> D3["Select Image Upload"]
D3 --> E3["Upload chart screenshot"]
E3 --> F3["Claude Vision analyzes"]
F3 --> G3["Save template"]
end
User Journey: Enable Auto-Trading
flowchart TB
subgraph PreReq["Prerequisites"]
A["Broker connected at /settings/brokers"] --> B["Execution mode set"]
end
subgraph Navigate["1. Navigate"]
B --> C["/settings/auto-trade"]
C --> D["PatternAutoTradeConfig loads"]
end
subgraph Configure["2. Configure"]
D --> E1["Toggle Enable Auto-Trading"]
D --> E2["Select pattern types"]
D --> E3["Set direction filter"]
D --> E4["Set min confidence 0.7-1.0"]
D --> E5["Configure position sizing"]
D --> E6["Set safety limits"]
end
subgraph Save["3. Activate"]
E1 & E2 & E3 & E4 & E5 & E6 --> F["Click Save Settings"]
F --> G["Config saved"]
G --> H["System monitors for patterns"]
end
UI Components Reference
| Component | Location | Purpose |
PatternWarmingRadar | /patterns → Warming tab | Shows patterns close to triggering with proximity scores |
PatternHunter | /patterns → Hunter tab | Multi-market pattern scanning with filters |
PatternPlayback | /patterns → Playback tab | Historical pattern replay |
PatternScheduler | /patterns → Schedule tab | Configure automated scans |
PatternAlertConfig | /patterns → Alerts tab | Configure alert subscriptions |
PatternTemplateList | /patterns → Templates tab | View/manage pattern templates |
PatternImportWizard | Modal | Multi-method pattern creation |
PatternAutoTradeConfig | /settings/auto-trade | Configure auto-trading rules |
Alert Threshold Defaults
| Setting | Default | Range |
| Warming proximity threshold | 85% | 50-100% |
| Alert deduplication window | 4 hours | - |
| Warming pattern expiry | 1 hour | - |
| Auto-trade min confidence | 0.8 | 0.7-1.0 |
| Daily trade limit | 5 | 1-50 |
| Symbol cooldown | 60 min | 0-1440 min |
| Max open positions | 3 | 1-20 |
Document generated for Agencio Predict pattern matching system.
Last updated: 2026-05-19