Trading bot VPS that stays up while your laptop sleeps.
First month $1, then the normal monthly price. One per customer.
A small Linux KVM VPS with full root, NVMe RAID10 storage and unlimited traffic for Freqtrade, Hummingbot, your own Python and ccxt bot, or a market data collector that must not miss a candle. New York for US exchanges, Amsterdam for European ones. Linux only: we do not offer Windows, so MetaTrader is not a fit here.
Transparent pricing
Plans and prices
| Plan | vCPU | Memory | NVMe | Traffic | Monthly | 1 year | |
|---|---|---|---|---|---|---|---|
| Standard | |||||||
| S-2Standard | 1vCPU | 2 GBMemory | 30 GBNVMe RAID10 | UnlimitedTraffic | $7.99/moFirst month $1 | $7.19/mo on 1 year | Start for $1 |
| S-4Standard | 2vCPU | 4 GBMemory | 60 GBNVMe RAID10 | UnlimitedTraffic | $13.99/moFirst month $1 | $12.59/mo on 1 year | Start for $1 |
| S-8Standard | 3vCPU | 8 GBMemory | 120 GBNVMe RAID10 | UnlimitedTraffic | $24.99/moFirst month $1 | $22.49/mo on 1 year | Start for $1 |
| S-16Standard | 4vCPU | 16 GBMemory | 240 GBNVMe RAID10 | UnlimitedTraffic | $44.99/moFirst month $1 | $40.49/mo on 1 year | Start for $1 |
| S-32Standard | 8vCPU | 32 GBMemory | 480 GBNVMe RAID10 | UnlimitedTraffic | $84.99/moFirst month $1 | $76.49/mo on 1 year | Start for $1 |
| S-64Standard | 16vCPU | 64 GBMemory | 720 GBNVMe RAID10 | UnlimitedTraffic | $159.99/moFirst month $1 | $143.99/mo on 1 year | Start for $1 |
| Dedicated CPU | |||||||
| D-4Dedicated | 1vCPU | 4 GBMemory | 45 GBNVMe RAID10 | UnlimitedTraffic | $37.00/moFirst month $1 | $31.45/mo on 1 year | Start for $1 |
| D-8Dedicated | 4vCPU | 8 GBMemory | 90 GBNVMe RAID10 | UnlimitedTraffic | $69.00/moFirst month $1 | $58.65/mo on 1 year | Start for $1 |
| D-16Dedicated | 4vCPU | 16 GBMemory | 160 GBNVMe RAID10 | UnlimitedTraffic | $118.00/moFirst month $1 | $100.30/mo on 1 year | Start for $1 |
| D-32Dedicated | 6vCPU | 32 GBMemory | 220 GBNVMe RAID10 | UnlimitedTraffic | $215.00/mo | $182.75/mo on 1 year | Deploy D-32 |
| D-64Dedicated | 10vCPU | 64 GBMemory | 400 GBNVMe RAID10 | UnlimitedTraffic | $377.00/mo | $320.45/mo on 1 year | Deploy D-64 |
| High Memory | |||||||
| H-64High Memory | 8vCPU | 64 GBMemory | 480 GBNVMe RAID10 | UnlimitedTraffic | $249.00/mo | $211.65/mo on 1 year | Deploy H-64 |
| H-128High Memory | 16vCPU | 128 GBMemory | 960 GBNVMe RAID10 | UnlimitedTraffic | $459.00/mo | $390.15/mo on 1 year | Deploy H-128 |
| H-192High Memory | 24vCPU | 192 GBMemory | 1.4 TBNVMe RAID10 | UnlimitedTraffic | $669.00/mo | $568.65/mo on 1 year | Deploy H-192 |
What a bot needs from a server, and what it does not.
Most bots are tiny programs. They wait for the next candle, nothing more. So the server has exactly one job, and it's a boring one: be up every single time that candle closes, with the clock right and a stable route to the exchange.
Always on, without your laptop
Run the bot on a home machine and it dies the moment the thing goes to sleep. Or at the next update, or when the Wi-Fi drops. On a VPS the process sits under systemd or Docker with a restart policy and comes back on its own. And on the day SSH is unreachable for whatever reason, the VNC console still gets you in. The kernel is yours too, so tune it however you like.
A correct clock
Every request to an exchange API carries a timestamp in its signature. Drift past the exchange's window and the request gets rejected, full stop. Chrony holds the VPS within milliseconds of public NTP. We see this one in support constantly, the ticket usually reads "why is my bot rejected", and the fix is a single line.
Close to the exchange, not just fast
New York sits in a carrier hotel on Hudson Street with measured 4 to 7 ms to Philadelphia and 7 to 12 ms to Washington DC. Amsterdam is next to AMS-IX with 9.0 ms to London and 8.5 ms to Frankfurt. Where the exchange's matching engine is hosted is something only the exchange knows, so check their docs before you pick.
Small, but not shared with strangers
Even S-2 gets a KVM instance of its own, with ECC memory and NVMe RAID10 under it. Not a container. Not a slice of a box shared with workloads nobody told you about. And every node keeps unsold headroom, on purpose. For a bot, that kind of stability is worth more than raw speed.
Which plan for which bot.
Live trading barely touches the CPU. What pushes a bot server up a plan is backtesting, hyperopt and a growing pile of tick data.
| Setup | Plan | Why |
|---|---|---|
| One Freqtrade or custom ccxt bot, live or dry-run | S-2 | 1 vCPU and 2 GB is enough for a bot that polls a few pairs |
| Two or three bots, or Hummingbot with its gateway | S-4 | Room for several containers and a small Postgres or SQLite history |
| Backtesting and hyperopt on the same box | S-8 | 3 vCPU and 8 GB for the parallel workers, 120 GB for candle data |
| Market data collector storing years of trades | S-8 or S-16 | Disk grows with every pair and timeframe you record |
A single Freqtrade instance in dry-run or live mode fits S-2 (1 vCPU, 2 GB, 30 GB NVMe) at €6.99 a month ($7.99). The bot spends most of its time waiting for the next candle, and 2 GB holds Freqtrade, its SQLite database and the web UI without swap. The 30 GB disk is the honest limit: it is plenty for the bot and its logs, but not for downloading years of one-minute candles for many pairs.
With a few bots, or Hummingbot plus its gateway container, S-4 (2 vCPU, 4 GB, 60 GB) at €11.99 a month ($13.99) is the comfortable choice. The second vCPU matters when a strategy computes many indicators per pair on every tick; on one shared vCPU that can delay the next cycle.
Backtesting is a different workload. Freqtrade's hyperopt runs parallel workers and holds every pair's dataframe in memory, so S-8 (3 vCPU, 8 GB, 120 GB) at €21.99 a month ($24.99) is where it stops swapping. If backtests are your main use, a Dedicated plan such as D-8 (4 vCPU, 8 GB, 90 GB) at €64.00 a month ($69.00) gives pinned cores and repeatable run times, but for the live bot itself that is more than needed. Resize in place when the need changes; RAM and vCPU change with one short reboot and the IP stays.
Setting up Freqtrade on BuyVPS.
Step 1: order, harden the login
Order S-2 or S-4 with Ubuntu 24.04, or start with the $1 trial month. A bot server holds API keys, so the first minutes go to locking the door: a non-root user, SSH keys only, a firewall that allows SSH and nothing else.
apt update && apt -y upgrade adduser --gecos "" bot && usermod -aG sudo bot mkdir -p /home/bot/.ssh && cp ~/.ssh/authorized_keys /home/bot/.ssh/ && chown -R bot:bot /home/bot/.ssh sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config systemctl restart ssh apt -y install ufw fail2ban && ufw allow OpenSSH && ufw enable
Step 2: time sync with chrony
Install chrony, then actually check that it is tracking. Exchanges hold your request timestamp against their own clock, and a drifted VPS gets bounced, so this is not optional.
apt -y install chrony systemctl enable --now chrony chronyc tracking timedatectl set-timezone UTC
Step 3: Docker and Freqtrade with docker compose
These are the commands from the Freqtrade documentation at freqtrade.io. Run them as the bot user after adding it to the docker group.
curl -fsSL https://get.docker.com | sh usermod -aG docker bot su - bot mkdir ft_userdata && cd ft_userdata curl https://raw.githubusercontent.com/freqtrade/freqtrade/stable/docker-compose.yml -o docker-compose.yml docker compose pull docker compose run --rm freqtrade create-userdir --user-data-dir user_data docker compose run --rm freqtrade new-config --config user_data/config.json
The config wizard asks for the exchange, the stake currency and whether to start in dry-run. Keep dry-run on until you have watched the bot for a while. Then start it:
docker compose up -d docker compose logs -f
Step 4: a custom Python bot under systemd
For your own ccxt script, skip Docker if you prefer. A venv and a systemd unit with Restart=always do the job. Keep the keys in an environment file readable only by the bot user.
apt -y install python3-venv su - bot python3 -m venv ~/venv && ~/venv/bin/pip install ccxt install -m 600 /dev/null ~/.bot.env # EXCHANGE_KEY=... EXCHANGE_SECRET=...
[Unit] Description=ccxt bot After=network-online.target chrony.service [Service] User=bot EnvironmentFile=/home/bot/.bot.env ExecStart=/home/bot/venv/bin/python /home/bot/bot.py Restart=always RestartSec=15 [Install] WantedBy=multi-user.target
Step 5: keys with withdraw disabled, web UI behind a tunnel
Make the exchange API key with trading on and withdrawals off. If the exchange lets you pin a key to an IP, pin it to the VPS's IPv4 address too. Now the web UI. Freqtrade serves it on port 8080 inside the compose network, and that is exactly where it belongs. Don't punch a hole for it in ufw, however tempting a browser tab looks. Reach it through an SSH tunnel instead:
ssh -L 8080:127.0.0.1:8080 bot@YOUR_IP # then open http://127.0.0.1:8080 on your own machine
Turn on two-factor authentication on the exchange account and on every account that can log in to the server or its hosting panel. A bot is only as safe as the weakest login that can reach it.
Pitfalls we see, and how to avoid them.
Clock drift and rejected requests
Without an NTP client the clock on any VM drifts. The bot then gets timestamp errors from the exchange and the strategy sits idle without anyone noticing. Install chrony on day one and check chronyc tracking after every reboot. It is in step 2 above for a reason.
API keys committed to git
A config.json with keys in it, pushed to a public repository, is found by scanners within minutes. Keep keys in an environment file or a .env that is in .gitignore, and rotate them if they were ever in a commit. Withdrawals disabled on the key limits the damage when this goes wrong anyway.
Running the bot as root
Picture a bot running as root with one bad dependency in it. Whoever exploits that dependency now owns the whole server, every other key on it included. So run the bot as an unprivileged user, inside Docker or a venv, and keep the environment file at mode 600. Root does apt. Root does nothing else.
Expecting Windows or MetaTrader
MetaTrader 4 and 5 are Windows programs, plain and simple. They want a Windows server. We don't offer Windows, so everything on this page is about Linux bots and nothing else. If your broker talks MT5 and only MT5, this is the wrong product for you, and we would rather tell you that now than halfway through setup. But when the broker also exposes a REST or FIX API, a Python bot on Linux talks to that just fine.
Pick the region closest to your exchange.
Prices are identical in both regions, so choose by the API endpoint. New York for exchanges that answer from the US East Coast, Amsterdam for European venues. Between the two regions we measure 75 to 90 ms. See VPS New York and VPS Amsterdam, and the published benchmarks for the network and disk numbers.
Questions about running a trading bot on a VPS.
Which plan does Freqtrade need?
One instance, live or dry-run, is happy on S-2 with 1 vCPU and 2 GB. A few bots, or Hummingbot with its gateway, fit S-4. Backtesting and hyperopt are different: they hold every pair in memory and run parallel workers, so put that on S-8.
Can I run MetaTrader 4 or 5 on this VPS?
No. MetaTrader needs Windows and we only offer Linux. Freqtrade, Hummingbot and Python bots with ccxt run fine; MT4 and MT5 do not.
Is New York or Amsterdam faster for my exchange?
Look at where the exchange hosts its API first. Their documentation usually says, though sometimes it takes some digging. US-based endpoints sit closer to New York, European ones closer to Amsterdam. The two regions are 75 to 90 ms apart and the price is identical, so nothing stops you from taking the trial month, spinning one up in each and settling it with a quick ping.
Do you give trading advice or strategies?
No. We run the server. Which exchange, which strategy and how much to risk are your decisions, and nothing on this page is a claim about results.
How do I keep my API keys safe on the server?
Withdrawals off, always, on every key you create. Where the exchange supports it, lock the key to the VPS IP as well. The keys live in an environment file, mode 600, owned by the bot user, and that file never goes into git. The bot itself runs as that user and not as root. And turn on 2FA on the exchange account while you are there.
What happens if the server reboots?
Docker containers with restart: unless-stopped and systemd units with Restart=always come back on their own. Chrony resyncs the clock first. Check the logs after a reboot the first time to be sure the order is right.
Deploy a measured VPS
From $6.79/mo on a 2-year term. KVM on AMD EPYC, NVMe RAID10, ECC memory. No setup fee, cancel monthly.
30-day performance guarantee. Not satisfied? Full refund, no admin fee. How it works