
AXONS
THINK•EXECUTE•EVOLVE
CLOSED
Nifty —
Kite Offline
Ticker OFF
Scan #0
—
Refreshed —
PAPER TRADING MODE — no real orders placed. All trades are simulated.
Kite not connected — paste request_token in Kite Login box to enable trading
Market holiday — no scanning today
No Pending Approvals (Mode: manual)
System Configuration
| Parameter | Value |
| Pipeline |
| Scan Interval | 2 min |
| Max Candidates | 15 |
| Min Widget Score | 5.0 |
| Data Source | yfinance (fallback — Kite not connected) |
| Ticker Mode | full |
| Risk |
| Capital | 100,000 INR |
| Risk per Trade | 1.0% |
| Max Order Qty | 500 |
| Max Position Value | 200,000 INR |
| Max Drawdown | 3.0% |
| Entry Validation |
| Entry Zone (Upper) | 1.5% |
| Entry Zone (Lower) | 0.3% |
| Exit Agent |
| Poll Interval | 30s |
| T1 Partial Exit | 50.0% |
| Breakeven Buffer | 0.1% |
| SL Order Type | SL (limit at trigger - 1%) |
| Entry Fill Timeout | 120s (entry buffer: CMP + 0.3%) |
| Trailing SL |
| Enabled | Yes |
| ATR Multiplier | 1.5x (trail at high - N*ATR) |
| Circuit Detection |
| Status | Active (via WebSocket MODE_FULL) |
| Frozen Stocks | 0 |
| Auto-Calibration |
| Enabled | No |
| Min Trades | 10 (before calibrating) |
| Disable Phase Below | 20.0% win rate |
| Raise Threshold Below | 35.0% win rate (+5.0) |
| Lower Threshold Above | 60.0% win rate (-3.0) |
| Widget Score Raise | If 5-7 band < 30.0% → min=7 |
| Status | Not yet calibrated |
| P&L Enforcement |
| Protect Gains Above | 2,000 INR (+5.0 to min_score) |
| Losing Day Below | -2,000 INR (0.5x size) |
| Min Trades Before | 3 (no enforcement in first 2 trades) |
| Human-in-the-Loop |
| Mode | manual |
| Auto Threshold | ≥ 85.0 (semi_auto only) |
| Signal TTL | 5 min (auto-expires if no action) |
| Max Up Move | +1.5% (chasing limit) |
| Max Down Move | -0.3% (failure limit, stricter) |
| On Approve | Re-fetch LTP → recalculate Entry/SL/T1/T2 → re-validate → execute |
| Pending Approvals | 0 |
| Rollout | Manual (wk1-2) → Semi-auto (wk3-4) → Auto (month2+) |
| WebSocket Exits |
| Status | Fallback to REST polling |
| Latency | ~30s (REST poll) |
| Cooldown |
| Cooldown TTL | 60 min |
| HOD Bypass | Enabled |
| Relative Strength |
| RS Enabled | No |
| RS Threshold | > 0.0 |
| Nifty Symbol | ^NSEI |
| Sector Penalty |
| Enabled | No |
| Min Advance % | 10.0% |
| Penalty Range | -3.0 to -8.0 |
| Active Phases | MORNING,MID_MORNING |
| Anti-Martingale |
| Enabled | Yes |
| Halve After | 2 consecutive SL |
| Pause After | 3 consecutive SL |
| Pause Duration | 60 min |
| Size Multiplier | 0.5x |
| Market Phases |
| MORNING (09:20-10:30) | score≥65.0 | max 3 pos |
| MID_MORNING (10:30-12:00) | score≥65.0 | max 3 pos |
| LUNCH (12:00-13:30) | score≥65.0 | max 1 pos (queue for approval) |
| AFTERNOON (13:30-14:30) | score≥65.0 | max 3 pos |
| EXIT_ONLY (14:30-15:10) | No entries — manage exits + force square-off |
| Scoring & Exit Models |
| BQS (Breakout Quality Score) | Disabled (legacy scoring) — Momentum + Room + Volume + Widget |
| ATE (Adaptive Trail Exit) | Disabled (fixed T1/T2) — 4-phase: Protect → Breakeven → Trail → Time |
| A/B Logging | Both BQS and legacy scores logged in parallel for comparison |
AXONS — Business Rules & Agent Versions
AXONS — Think. Execute. Evolve.
Think
Scout → Analyze → Score → AI Insight
Execute
Signal → Risk → Order → Exit
Disciplined. No emotion.
Evolve
Feedback → Calibration → Better decisions tomorrow
Scout Agent v1.2
- Scrapes Chartink dashboard via Playwright (headless Chromium)
- Intercepts /widget/process API + reads Vue component state
- Extracts: symbol, CMP, volume, widget name, sector advances, industry counts
- Volume/CMP disambiguation: detects fake volume columns (decimal = price, not volume)
Filterer Agent v1.3
- Deduplicates stocks across widgets
- Multi-widget category scoring: Pattern=4, Momentum=3, Volume=3, Trend=2
- Partial credit: same-category widgets get +1 (not +0) — e.g., 12/26 + 9/21 = 3+1=4
- Pattern bypass: BO/VCP widgets pass at score 4+ (bypasses min 5)
- Sector bonus: +2.0 for stocks in sectors advancing > 10.0%
- Volume filter: skips illiquid stocks (volume < 10,000)
- Cooldown exclusion + HOD bypass
- Max candidates: 15
Analyst Agent v4.0
- EMA(12/26) crossover detection
- Crossover timing: Fresh crossover BUY at score 60+, already-above BUY at score 65+
- Gradual scoring: RSI ramp 40→75 = 0→20 pts, Volume ramp 0.5→3x = 0→20 pts
- Volume Momentum Override: +10 pts when Vol>2.5x + RSI>75 (momentum, not overbought)
- ATR(14) for SL/target computation
- VCP (Volatility Contraction Pattern) tightness ratio
- 5 candlestick patterns: bullish engulfing, marubozu, hammer, three white soldiers, breakout candle
- Support/resistance: swing high/low detection on recent candles
- Sector correlation penalty: -3.0 to -8.0 if sector advance < 10.0%
- Composite scoring (0-100) with widget score + pattern bonus + sector penalty + momentum override
BQS — Breakout Quality Score v1.0
- Status: Disabled (A/B logging only)
- Momentum Speed (30 pts): RSI acceleration + EMA slope + volume surge
- Room to Run (25 pts): distance to resistance + ATR-based headroom
- Volume Confirmation (25 pts): volume ratio vs 20-day avg + buying pressure
- Widget Confluence (20 pts): multi-widget agreement across categories
- A/B: both BQS and legacy scores logged for every stock analysis
Signal Generator v2.0
- Entry: CMP within zone (0.3% lower / 1.5% upper)
- SL: tighter of ATR-based (1.5x ATR) or support-based
- T1: 1:1 R:R — book 50% | Minimum T1: 0.7%
- T2: 1:2 R:R — exit remaining | No cap (human decides on approval)
- RS filter: DISABLED
- Rejects: SL too tight (<0.2%), T1 too small (<0.7%), score below phase threshold
Risk Agent v1.2
- Position sizing: 1.0% capital risk per trade
- Hard limits: max 500 qty, 200,000 INR value, 3.0% drawdown
- Minimum R:R 1.5 enforced
- Phase-aware position caps
- Anti-martingale: 0.5x size after 2 SL, pause 60min after 3 SL
Exit Agent v4.0
- Entry fill verification: waits for COMPLETE, handles partial fills, cancels unfilled after 120s
- SL orders: SL with limit price (trigger - 1%), tick-rounded to 0.05. 3x retry with 2s delay. If all 3 fail → emergency market exit.
- SL modify: Single API call (no cancel+replace gap). Falls back to cancel+replace with 3x retry if modify rejected.
- Entry orders: LIMIT at CMP + 0.3% buffer, tick-rounded to 0.05
- Entry cancelled/rejected: orphaned SL order auto-cancelled (prevents phantom sells)
- All prices: Entry, SL, T1, T2 tick-rounded to 0.05 grid at signal generation AND recalculation
- SL status handling: CANCELLED → re-place, REJECTED → re-place or market exit
- Position persistence: saved to DB BEFORE SL placement (crash recovery)
- T1 hit: sell 50%, cancel old SL, place new SL at breakeven + 0.1%
- T2 hit: sell remaining, cancel SL, record exit
- ATE (Adaptive Trail Exit): Disabled (fixed T1/T2)
- Phase 1 PROTECT: SL = Entry - 2×ATR
- Phase 2 BREAKEVEN: SL → Entry + 0.1% (after +1% gain)
- Phase 3 TRAIL: SL = High - 1.5×ATR (after +2% gain)
- Phase 4 TIME: SL = High - 1×ATR (after 14:30 IST)
- Trailing SL (legacy): after T1, trail at highest_price - 1.5×ATR. Only moves up.
- Position reconciliation: compares system positions with Kite every 30s. Detects manual exits + orphans.
- Approval dedup: same symbol replaces existing PENDING approval (upsert, not duplicate)
- WebSocket exits: T1/T2 thresholds registered with ticker for sub-second detection. Falls back to 30s REST polling.
- Circuit detection: skips exit actions for stocks at upper/lower circuit. Resumes when released.
- Batch LTP (single API call for all positions per poll)
- EOD: cancel all SL → market sell all → record exits → reconcile
- Uses actual fill prices from Kite (average_price) for P&L accuracy
Market Phase Engine v1.0
- 9 phases: PRE_OPEN, PRE_MARKET_SCAN, WARMUP, MORNING, MID_MORNING, LUNCH, AFTERNOON, EXIT_ONLY, CLOSED
- PRE_MARKET_SCAN (09:09): Chartink scanning begins (no trades)
- WARMUP: captures Nifty 50 open price (also captured on login + pipeline failsafe)
- Dynamic score thresholds and position caps per phase
- LUNCH: scan + queue for approval (max 1 position, human decides in manual mode)
- EXIT_ONLY: cancel SL + force square-off + reconciliation
Data Fetcher v2.1
- Priority cascade: WebSocket Ticker → Kite REST → yfinance
- yfinance fallback enables full pipeline without Kite auth
- Rate-limited Kite REST (3 req/sec via semaphore)
- Nifty 50 tracking for intraday RS calculation
Auto-Calibration Engine v1.0
- Computes win rates from actual trade outcomes (min 10 trades required)
- Phase thresholds: disable if win rate < 20.0%, raise +5.0 if < 35.0%, lower -3.0 if > 60.0%
- Widget score: raise min from 5 to 7 if score 5-7 band win rate < 30.0%
- Overrides are HARD (not soft suggestions) — applied directly to phase_config
- Logged to calibration_log table for audit trail
- Manual trigger: POST /calibrate
P&L Enforcement v1.0
- Protect gains: if P&L > 2,000 after 3+ trades → raise min_score by 5.0 (only take high-conviction trades)
- Limit losses: if P&L < -2,000 after 3+ trades → halve position size (0.5x)
- No enforcement in first 2 trades (too early to judge the day)
- HARD enforcement — not advisory, directly applied to execution
Trade Journaling v1.0
- Every approval card has a "Why?" input field
- Reason saved to DB on both APPROVE and REJECT
- Captures human reasoning for post-hoc analysis
- Enables learning: "WHY did I approve trades that lost?" / "WHY did I skip winners?"
Human-in-the-Loop v1.1
- Pipeline change: Signal → Queue (PENDING) → Dashboard card → User APPROVE/REJECT → Execute
- Manual mode (current): every signal requires human approval before execution
- Semi-auto: auto-execute if score ≥ 85.0, queue the rest
- Auto: full autonomous, no queue (only after proven track record)
- On APPROVE (Option D Hybrid):
- Re-fetch live price from Kite/yfinance
- Directional validation: reject if price moved +1.5% up (chasing) or -0.3% down (failed breakout)
- Recalculate Entry/SL/T1/T2 from live price using original ATR
- Re-validate: SL tightness (>0.2%), T1 (>0.7%)
- If all pass → place order with recalculated levels
- If stale → show "setup no longer valid"
- TTL: 5 min — no action = auto-expires
- Security: approve/reject requires API key auth + pipeline lock (prevents duplicate orders)
- Rollout plan: Manual (wk1-2) → Semi-auto (wk3-4) → Auto (month2+)
- All decisions (approved/rejected/expired) logged to DB for performance review
- Current mode: manual
Watchdog v1.0
- Heartbeat on every successful pipeline/warmup cycle
- Tracks consecutive failures, alerts after 3
- Stale detection: heartbeat > 5 min old = unhealthy
- POST /reconcile for manual post-market check
Vision / TODO
Loading...
No Signals Today
Active Positions (0)
| # | Symbol | Entry | LTP | P&L | Qty |
SL | T1 | T2 | Phase | Entered (IST) |
| No active positions |
Open Orders
| # | Symbol | Side | Qty | Price | Status | Order ID | Time (IST) |
| No open orders |
Daily P&L (Last 7 Days)
| # | Date | P&L | Trades | Wins | Losses | Win Rate | Max Win | Max Loss |
| No trading data yet |
Scouted Candidates
| # | Symbol | CMP | Volume | WS | WC | WD |
| Click Scan Chartink to load data |
Analysis Results (Latest Scan)
| # | Symbol | Signal | Score | Price |
EMA Cross | RSI | Vol Ratio | ATR | Patterns | Time |
| No analysis yet |
Sector Heatmap & Industry Breadth
| Sector | Adv% | Breadth |
| Scan to load |
| Industry (52-wk High) | Count |
| Scan to load |
System Controls & Settings
System Health
Safety OK
Risk NO
Positions 0 | Cooldowns 0
Data yfinance (fallback — Kite not connected) | Capital 100,000
System Info
v1.0.0
Activity Log (last 7 days, auto-refreshes)
| Time | Source | Event | Message |
| Loading... |