Pattern Matching & Alerting Flow Diagrams

Agencio Predict - Technical Documentation

Table of Contents

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

StepUI LocationAction
Watch symbols/patterns → Watchlist tabAdd symbols, set alert threshold (default 85%)
Configure auto-trade/settings/auto-tradeEnable pattern auto-trading with filters
View warming radar/patterns → Warming tabSee patterns close to triggering
View detections/patterns → Hunter tabSee confirmed pattern triggers
Receive alertsPush/Email/SSEReal-time notifications

2. Pattern Types Overview

2.1 Chart Patterns (Graph Patterns)

File: packages/be/src/insights/price-action-patterns.ts

Pattern TypeDirectionDescription
support_bounceBullishPrice bounces off support level
resistance_rejectionBearishPrice rejected at resistance
cluster_breakout_retestBothPrice breaks cluster, retests, continues
double_bottomBullishClassic W reversal pattern
double_topBearishClassic M reversal pattern
higher_lowBullishUptrend continuation
lower_highBearishDowntrend continuation
false_breakoutBothBreakout that failed and reversed

2.2 Candlestick Patterns

File: packages/be/src/insights/candle-pattern-scanner.ts

CategoryPatterns
Single Barhammer, inverted_hammer, hanging_man, shooting_star, doji, marubozu
Two Barbullish_engulfing, bearish_engulfing, bullish_harami, bearish_harami, piercing_line, dark_cloud_cover, tweezer_top, tweezer_bottom
Three Barmorning_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

FilePurposeKey Functions
packages/be/src/insights/price-action-patterns.tsChart pattern detectiondetectPatterns(), detectClusterBreakoutRetest(), detectSupportBounce(), detectDoubleBottom()
packages/be/src/insights/candle-pattern-scanner.tsCandlestick scanningscanForCandlePattern(), isHammer(), isDoji(), isBullishEngulfing()
packages/be/src/insights/user-candle-patterns/detector.tsUser-defined patternsdetectPatternForSymbol(), evaluateBarRules()

Alert Pipeline Files

FilePurposeKey Functions
packages/be/src/insights/pattern-warming.tsPre-trigger detectiondetectWarmingForSymbol(), checkSupportBounceWarming()
packages/be/src/insights/pattern-alert-pipeline.tsAlert processingprocessWarmingAlerts(), processHunterDetection(), emitPatternIntelligenceEvent()
packages/be/src/insights/pattern-cross-reference.tsDual-pattern confirmationfindCrossReference(), findCrossReferenceForHunterPattern()

Trading Integration Files

FilePurposeKey Functions
packages/be/src/trading/pattern-auto-trade.tsAuto-trade executionprocessPatternForAutoTrade(), executeAutoTrade(), calculatePositionSize()
packages/be/src/trading/services/trade-execution.tsOrder executionexecuteTrade()
packages/be/src/brokers/service.tsBroker managementgetUserExecutionMode(), 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

EndpointMethodPurpose
/api/predict/v1/patternsGETList patterns
/api/predict/v1/patterns/detectPOSTDetect patterns for symbol
/api/predict/v1/patterns/warmingGETGet warming patterns
/api/predict/v1/patterns/warming/scanPOSTScan for warming patterns
/api/predict/v1/patterns/statsGETHistorical statistics
/api/predict/v1/patterns/candle-scanPOSTScan for candlestick patterns

Alerts & Auto-Trade

EndpointMethodPurpose
/api/predict/v1/patterns/subscriptionsGET/POSTAlert subscriptions
/api/predict/v1/patterns/watchlistGET/POST/DELETEWatchlist management
/api/predict/v1/trading/auto-trade-configGET/POSTAuto-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
PatternBULLSIDEWAYSBEARCRISISRECOVERY
support_bounce1.21.00.60.31.1
double_bottom1.00.81.30.51.2
resistance_rejection0.61.01.20.40.8
double_top0.70.81.20.50.6
cluster_breakout_retest1.10.90.70.31.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

ComponentLocationPurpose
PatternWarmingRadar/patterns → Warming tabShows patterns close to triggering with proximity scores
PatternHunter/patterns → Hunter tabMulti-market pattern scanning with filters
PatternPlayback/patterns → Playback tabHistorical pattern replay
PatternScheduler/patterns → Schedule tabConfigure automated scans
PatternAlertConfig/patterns → Alerts tabConfigure alert subscriptions
PatternTemplateList/patterns → Templates tabView/manage pattern templates
PatternImportWizardModalMulti-method pattern creation
PatternAutoTradeConfig/settings/auto-tradeConfigure auto-trading rules

Alert Threshold Defaults

SettingDefaultRange
Warming proximity threshold85%50-100%
Alert deduplication window4 hours-
Warming pattern expiry1 hour-
Auto-trade min confidence0.80.7-1.0
Daily trade limit51-50
Symbol cooldown60 min0-1440 min
Max open positions31-20

Document generated for Agencio Predict pattern matching system.
Last updated: 2026-05-19