How the Bot Works
Everything you need to know about how signals are generated, scored by our ML pipeline, and turned into real or paper trades — clearly explained.
End-to-End Bot Flow
Here's the complete path from a raw on-chain event to an open trade position:
Signal Sources
Two independent engines watch Solana in real time. TokenPricePoller watches price & volume for thousands of tokens via Jupiter + DexScreener. WalletAlertPoller monitors whale and shark wallets directly on-chain via Helius RPC.
ML Scoring Pipeline 4 layers
Every raw candidate passes through four scoring layers before it can be emitted as an alert. Each layer adjusts the signal's confidence_score.
Emit Gate
Three minimum score thresholds must all pass. Signals that don't clear all three are silently dropped — they never reach your bot.
Your Bot Worker
Each Pro user gets an isolated bot worker process. It polls emitted alerts every ~8 seconds and applies your personal config — strategy, direction mode, allowed signal types, timeframe, confidence gates. Signals that don't match your config are skipped.
Trade Entry
Signals that pass all gates open a new position. In paper mode, this is a simulated position in your personal state file with no real money. In live mode, a real Jupiter swap is executed from your bot wallet via Azure Key Vault.
Exit & P&L Feedback
Positions are monitored on each tick for stoploss, take-profit, max hold time, or manual close. When a position closes, the realised P&L is fed back into the ML scoring pipeline — future signals of the same type get adjusted accordingly.
Paper vs Live Mode
📄 Paper Mode (default)
- → Simulated positions, no real money at risk
- → Stoploss, take-profit, and max hold enforced in simulation
- → Full P&L tracking with identical logic to live mode
- → Best for testing strategies before going live
⚡ Live Mode
- → Real swaps executed via Jupiter on your bot wallet
- → Wallet keys stored securely in Azure Key Vault (RBAC-gated)
- → Higher confidence gate required (configurable)
- → Accountability gate must pass before live trades open
Risk Controls
| Control | What it does |
|---|---|
| Stoploss % | Position is closed if price drops this % below entry |
| Take Profit % | Position is closed if price rises this % above entry |
| Max Open Trades | Bot won't open new positions if this count is reached |
| Daily Loss Cap | No new live trades if daily realised losses exceed this USD amount |
| Daily Trade Cap | Limits how many live trades can open in a 24h window |
| Max Hold Hours (paper) | Paper positions auto-close after this many hours if no SL/TP hit |
| Hold Toggle | Lock an individual position — bot won't auto-close it until you remove the hold |
Alert Flow & Strategies
Where Signals Come From
Two completely independent engines run in parallel. They use different external data sources and produce different signal types.
TokenPricePoller
Jupiter APIs + DexScreener
Builds a dynamic watchlist of tokens from three sources, then polls DexScreener for price and volume data:
- 🔵 Jupiter Verified — registry of verified tokens with holder count + organic score filter
- 🔵 Jupiter Trending — real-time trending tokens by volume momentum
- 🔵 Pool Liquidity — tokens from our tracked liquidity pools with TVL ≥ $200k
WalletAlertPoller
Helius RPC (on-chain only)
Monitors a curated list of whale and shark wallets directly on-chain. No third-party price APIs — pure transaction parsing via Helius RPC:
- 🟢 getSignaturesForAddress — fetches new tx signatures for each tracked wallet
- 🟢 getTransaction — parses swap program IDs (Raydium, Orca, Meteora, Jupiter…)
- 🟢 Reputation tiers — whale, shark, smart money (affects base confidence)
All 5 Signal Types at a Glance
| Signal | Direction | Source | Best for |
|---|---|---|---|
| price_surge | Long ↑ | TokenPricePoller | Breakout momentum plays |
| price_drop | Short ↓ | TokenPricePoller | Shorting overextended tokens |
| volume_spike | Long ↑ | TokenPricePoller | Early trend detection before price moves |
| smart_buy | Long ↑ | WalletAlertPoller | Following high-conviction whale accumulation |
| smart_sell | Short ↓ | WalletAlertPoller | Exit or short when smart money distributes |
ML Scoring Pipeline
Before any signal is emitted, it passes through 4 scoring layers. Each layer reads the current confidence_score, adjusts it, and writes it back. The pipeline is fully transparent — every adjustment is logged on the alert payload.
Initial Confidence Score — Formula-Based
A deterministic score is set based on signal strength, liquidity, and volume ratios. This gives every signal a starting score before any historical data is applied.
Wallet signals: seeded from wallet tier + trade size in USD
Historical Reinforcement — Learn from Past Outcomes
If there are at least 15 historical outcomes for this signal type, the score is nudged up or down based on how well past signals of the same type have actually performed.
clamped to ±max_delta; resolved by signal type → direction → global
👆 If a signal type like smart_buy has 80% precision on recent fills, it gets a meaningful upward nudge. If it has been underperforming, it gets penalised.
Contextual Thompson Sampling Bandit Core ML
The main ML layer. Uses a multi-armed bandit with a Beta distribution posterior per context bucket. Context is built from 8 dimensions: signal type, source, tier, direction, risk level, liquidity size, trade size.
For each unique context combination, the bandit maintains a record of historical outcomes. It performs Thompson Sampling — drawing a random sample from the Beta distribution — and blends it with the posterior mean to balance exploration with exploitation.
delta = (sampled_prob − 0.5) × 26 + avg_reward × 8 + pnl × 0.12 + move × 0.08
This means the bot naturally favours signal contexts that have historically produced good outcomes, and explores less-proven contexts cautiously.
Execution Policy Scoring — Fill Quality Score
A second, independent bandit pass produces execution_confidence_score — calibrated specifically to whether signals have led to good executed fills, not just directional accuracy. This score is evaluated separately from the main confidence score.
The weighting between posterior accuracy, fill reward, P&L history, and risk penalty is tuned by your Execution Policy Preset (Conservative / Balanced / Aggressive).
Emit Gate — The Final Filter
After all four scoring layers, the signal must clear three thresholds or it's dropped entirely. This is your first line of defence against low-quality signals.
≥ 50
Confidence Score
Overall ML pipeline output
≥ 58
Execution Confidence
Fill quality score (Layer 4)
≥ 62
Token Quality
Minimum token health score
These defaults can be adjusted — but raising them means fewer, higher-conviction signals. Lowering them means more signals with higher noise.
Strategy Presets
Strategies are named bundles of default settings. Picking a strategy doesn't lock you in — you can override any individual field on top. Strategies change which signals are active, risk parameters, confidence gates, and the execution policy preset.
Balanced
Default All 5 signalsWell-rounded all-rounder. Uses every signal type, moderate SL/TP, medium confidence threshold. Good starting point for most traders.
Momentum
price_surge + volume_spikeFocuses on trend breakouts — large price moves and volume spikes. Uses wider take-profit to capture extended runs. Not suitable in choppy, low-volatility markets.
Smart Money Mirror
smart_buy + smart_sellOnly acts on whale and shark wallet signals. Lower frequency, higher conviction. Requires a 65% confidence gate, so only the strongest on-chain wallet movements generate trades.
Scalp
All signals — tight rangesHigh-frequency scalping with tight stoploss and take-profit. Uses all signal types and a lower confidence gate for more frequent entries. Suited for active, volatile markets — higher trade volume means the ML feedback loop adapts faster.
Execution Policy Presets
The execution policy controls how the Layer 4 ML scoring bandit is tuned. Conservative requires more evidence before trusting a signal. Aggressive reacts faster to recent winners.
| Preset | Min samples needed | Posterior weight | Reward weight | High-risk penalty |
|---|---|---|---|---|
| Conservative | 28 fills | High (0.65) | Low (0.35) | Heavy (4.5) |
| Balanced | 15 fills | Medium (0.50) | Medium (0.50) | Moderate (3.0) |
| Aggressive | 8 fills | Low (0.30) | High (0.70) | Light (1.5) |
Until the minimum sample count is reached, the bandit layer is bypassed — raw formula scores are used. This means a fresh bot starts conservatively and adapts over time.
Self-Calibration — How the Bot Gets Better Over Time
When a position closes, the realised outcome (P&L, return %, exit reason) is fed back into the ML pipeline. This is the core feedback loop that makes the bot adaptive:
Trade closes → P&L recorded against the original alert_id
Outcome added to accountability record — precision %, median move %, reward score
Layer 2 reinforcement uses updated precision to adjust future signals of the same type
Layer 3 bandit updates the Beta(α, β) posteriors for the signal's context bucket
Future signals of the same context automatically score higher or lower — no manual retraining needed
💡 Practical implication: The more trades your bot runs, the better it calibrates to your specific market conditions and strategy. Paper mode is the ideal place to build up history before switching to live.
Ready to start? Head back to the Bot Portal to configure your instance.
← Back to Bot Portal