Skip to main content

Architecture options

NOVOSKY offers three deployment options. The Go binary option is the simplest for end-users β€” no Python, no model management, just a single executable.
The compiled binary has all ML models embedded. Customers receive three files.What the customer gets:Hardware requirements (trading only β€” no retraining):The Go binary is orders of magnitude lighter than the Python bot. No scikit-learn, no LightGBM, no GPU needed.Setup:
See Go binary for the full reference.

GPU note

Training uses a GPU when one is available via LightGBM’s CUDA backend and XGBoost’s device=cuda. Without a GPU, training falls back to CPU automatically β€” no configuration change needed.
If running on Azure or another hypervisor VM, GPU passthrough requires a specific VM type (e.g. Azure NC-series, not the default B/D/E series which have only virtual VGA). CPU-only is perfectly viable for weekly retraining.

MT5 REST API setup

The bot does not use the MetaTrader5 Python package. All broker communication goes through a self-hosted HTTP API running on port 6542.
1

Install MetaTrader 5 on your Windows VM

Download and install MT5 from your broker’s website. Log in with your trading account credentials.
2

Install Docker

Or install Docker Desktop from docker.com. Make sure it starts on boot.
3

Pull and run the MT5 REST API container

Replace <your_account_number>, <your_password>, <broker_server_name> with your MT5 credentials. Set <choose_a_secret_token> to a long random string β€” this is the API_TOKEN in your .env on the Linux VM.
4

Verify connectivity

From your Linux VM:
If you are using a broker-provided hosted VPS with MT5 pre-installed, skip Docker and configure the API container to connect to the already-running MT5 terminal.

Linux VM setup


Process management (PM2)

PM2 keeps the trading bot running continuously and restarts it if it crashes (but not after a hard halt β€” sys.exit(99) is intentional).
ecosystem.config.js is pre-configured for trading.py. It reads .env automatically at startup.
After a hard halt (sys.exit(99)), do not restart automatically. First check the reason in the logs, update starting_balance_usd in config.json to your current balance, then restart manually.
PM2 snapshots the environment at first start. If you change any value in .env β€” for example rotating a Telegram bot token or updating API_URL β€” a plain pm2 restart will keep using the old cached values. Always restart with --update-env after any .env change:
To verify what PM2 is actually using before debugging a token or connection error:

Cron setup (weekly optimize)

The first optimize run installs the cron job automatically. To verify or install manually:

Firewall

The MT5 REST API on your Windows VM should only be accessible from your Linux trading VM. Restrict port 6542 accordingly:
Do not expose port 6542 publicly.