Documentation Index
Fetch the complete documentation index at: https://uncoded.ch/docs/llms.txt
Use this file to discover all available pages before exploring further.
This page covers what runs on your server, what data lives where, and what your operational footprint looks like. It is a user-facing architectural overview — not a developer reference. If you are evaluating unCoded for your operation or your investment, this page should answer “what am I actually deploying?”
The deployment model in one sentence
unCoded runs as a small set of Docker containers on your own VPS, with all your trading data stored locally on that VPS, and the only outbound network calls being to your exchange and to Telegram. That’s it. There is no shared cloud. There is no centralized data lake holding your positions. There is no proprietary backend that needs to stay reachable for your bot to keep trading.What your VPS actually runs
A handful of Docker containers
The four core services (TradingBot, TelegramBot, Dashboard, Database) are bundled as a CapRover-style One-Click app. You bring up the entire stack with one command.
Optional add-on services
SignalEditor and SignalsBot are optional containers you start when you want webhook-driven authoring. They sit alongside the core four.
A persistent data volume
Your local database (PostgreSQL) holds every active trade-pair configuration, every executed trade, every operator action. Backed up on a schedule of your choice.
Read-only mounts to logs
The Dashboard reads (read-only) the TradingBot’s container logs to stream them to your browser when you open the “Logs” panel.
Hardware footprint
| Resource | Minimum (single exchange, no heavy backtests) | Recommended (full stack, multi-exchange) | Heavy operations (multi-host operator) |
|---|---|---|---|
| vCPU | 2 | 4 | 8 |
| RAM | 4 GB | 8 GB | 16 GB |
| Disk | 40 GB SSD | 80 GB NVMe SSD | 200 GB NVMe SSD |
| Network | Stable outbound | Stable outbound, low jitter | Same, plus geographic proximity to exchanges |
| Monthly VPS cost | €5–€10 | €10–€15 | €30+ |
What gets deployed
When you spin up unCoded via the One-Click installer, you get four core services plus an optional database visualization layer:PostgreSQL — your local database
PostgreSQL — your local database
A single PostgreSQL container that stores:
- Active trade pair configuration (which symbols you’re trading, under which mode)
- Per-mode settings (the buy ladder, sell ladder, trailing-stop policy for each of the 9 modes)
- Closed trade history (every round-trip your bot has executed)
- System status (heartbeats, connection state, current configuration hash)
- UI preferences (your dashboard layout, theme, etc.)
TradingBot — the execution engine
TradingBot — the execution engine
The container that talks to your exchange. It:
- Polls the database for the current trade-pair configuration
- Subscribes to your exchange’s market data and account updates
- Places, monitors, and manages orders
- Writes closed trades back to the database
TelegramBot — the notification channel
TelegramBot — the notification channel
The container that posts trade-close notifications to your Telegram chat. It:
- Polls the database for newly-closed trades
- Formats them into clean text messages
- Sends them via Telegram’s bot API
- Handles rate limits gracefully
Dashboard — your operator's web cockpit
Dashboard — your operator's web cockpit
The container that serves your authenticated browser interface. It:
- Reads from the database for live panels (positions, performance, system stats)
- Streams TradingBot logs to your browser via the Logs panel
- Lets you flip the kill switch, switch modes, allocate capital
- Optionally serves a Google Account-linking onboarding step
What you can add as you grow
SignalEditor (optional)
SignalEditor (optional)
Spin up the SignalEditor container when you want to author strategies visually. It serves a web canvas for composing indicators, conditions, and triggers. Once your strategy is published and the SignalEditor’s scheduler is running it, you can leave the editor running or stop it (the strategy keeps running as long as the scheduler container is alive).Resource cost: an additional
300–500 MB RAM, sub-percent CPU at idle.SignalsBot (optional)
SignalsBot (optional)
Spin up the SignalsBot container when you want to receive webhook signals — either from the SignalEditor’s running strategies, or from external sources like TradingView. The SignalsBot validates incoming webhooks (shared secret) and writes the resulting configuration updates to PostgreSQL.Resource cost:
100–200 MB RAM, sub-percent CPU at idle, 64 KB body cap on incoming webhooks.A second TradingBot for a second exchange
A second TradingBot for a second exchange
Each TradingBot container is single-exchange by design. To run on multiple exchanges (e.g., Binance and Bybit simultaneously), you spin up a second TradingBot container with
EXCHANGE_ID=bybit (or whichever venue), pointing at the same shared database. Both bots independently manage their respective exchange.Each additional bot adds about 100–200 MB RAM.A self-hosted Backtester (optional)
A self-hosted Backtester (optional)
Most operators use the vendor-hosted Backtester (it’s heavier compute and benefits from being centralized). If you prefer self-hosted, you can run it as a separate container.Resource cost:
500 MB – 2 GB RAM per active backtest. With concurrency cap of 2, plan for 1–4 GB peak RAM if you self-host. Most operators don’t bother.Network footprint
Outbound calls
- To your exchange’s REST + WebSocket endpoints (continuous)
- To Telegram’s bot API (when notifications fire)
- To the unCoded license-verification service (occasional heartbeats)
- To your authentication provider (when you log into the dashboard)
Inbound exposure
- Dashboard’s HTTP port (behind your TLS reverse proxy) for browser access
- SignalsBot’s webhook port (only if you use external webhook sources like TradingView)
Where your data lives
| Data | Location | Backed up? | Survives full VPS loss? |
|---|---|---|---|
| Closed trade history | Local PostgreSQL on your VPS | If you set up backups, yes | Only if backups are off-site |
| Active configuration (mode, capital, kill switch) | Local PostgreSQL | Same | Same |
| Strategy definitions | Local disk in the SignalEditor container | If you back up the volume, yes | Only if backups are off-site |
| Exchange API keys | Encrypted environment file on your VPS | Should be backed up to a secure location separately | No — never sync your keys to a public backup |
| Open positions | On the exchange itself | The exchange holds them; not local | Yes — your positions on the exchange are unaffected by VPS loss |
| License entitlement | Vendor service (centralized) | Centralized backup | Yes — your license is rooted in your account, not your server |
What happens during a restart
Planned restart (you stop and restart the stack)
Planned restart (you stop and restart the stack)
- The TradingBot stops sending new orders.
- Open positions on the exchange continue to be honored — sell-ladder rungs already placed will fill as price moves.
- The TelegramBot stops sending notifications during downtime; queues anything from after the database came back.
- On restart, the TradingBot reconciles its view against the exchange — it observes any fills that happened during downtime and updates its records.
- Trading resumes within seconds.
Unplanned crash (your VPS reboots)
Unplanned crash (your VPS reboots)
- Same as above — Docker’s restart policy brings the containers back automatically.
- The reconciliation step ensures no fills are lost.
- Important caveat: while the bot is offline, the trailing stop is not actively re-priced as new highs are made. If your trailing-stop reference would have moved during downtime, on restart the stop is at its last placed level, not at the highest price during the gap.
Total VPS loss (provider failure, accidental delete)
Total VPS loss (provider failure, accidental delete)
- Your funds on the exchange are completely safe — they were never on your VPS.
- Open positions continue to honor their already-placed sell ladders and trailing stops on the exchange side.
- You spin up a new VPS, restore your database backup, re-deploy the stack, and resume trading.
- The only data you lose is the local audit trail since your last backup.
What unCoded never does
What’s next
Modules Overview
The six modules and their conceptual roles.
Glossary
Every term defined.
Quickstart
From this architectural understanding to your first running trade.
Security Philosophy
Why we made the architectural choices we did, and how they protect you.