Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.novosky.app/llms.txt

Use this file to discover all available pages before exploring further.

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:
FileDescription
novosky_goCompiled binary β€” models, license, and configs embedded
config.jsonUser-editable runtime configuration
.envSecrets (MT5 token, Telegram, Supabase)
libonnxruntime.soONNX runtime library (provided alongside binary)
Hardware requirements (trading only β€” no retraining):
ComponentMinimum
CPU1 core
RAM512 MB
Disk100 MB
OSLinux (Ubuntu 20.04+) or Windows (WSL2)
The Go binary is orders of magnitude lighter than the Python bot. No scikit-learn, no LightGBM, no GPU needed.Setup:
# Place all four files in the same directory
chmod +x novosky_go
cp .env.example .env   # fill in MT5 token, Telegram token
./novosky_go --dry     # verify connectivity
./novosky_go           # live
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.
SetupRetrain time (all 4 models)
CPU-only, 4 cores~2–2.5 hours
CPU-only, 8 cores~1–1.5 hours
NVIDIA GPU (T4 / RTX 3060+)~30–45 minutes
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

# Windows PowerShell (run as Administrator)
winget install Docker.DockerDesktop
Or install Docker Desktop from docker.com. Make sure it starts on boot.
3

Pull and run the MT5 REST API container

docker pull novosky/mt5-api:latest
docker run -d \
  --name mt5-api \
  --restart always \
  -p 6542:6542 \
  -e MT5_LOGIN=<your_account_number> \
  -e MT5_PASSWORD=<your_password> \
  -e MT5_SERVER=<broker_server_name> \
  -e API_TOKEN=<choose_a_secret_token> \
  novosky/mt5-api:latest
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:
curl http://<windows_vm_ip>:6542/ping
# Expected: {"status": "ok", "time": 1714000000}
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

# Run the automated VM setup script
./setup-vm.sh

# Or manually:
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3.11 python3.11-venv git htop tmux libgomp1

# Clone repo
git clone <repo> && cd novosky
python3.11 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# Set up .env
cp .env.example .env
# Edit .env with your credentials

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).
# Install PM2
npm install -g pm2

# Start the bot
pm2 start ecosystem.config.js
pm2 save
pm2 startup   # install as system service

# Check status
pm2 status
pm2 logs novosky --lines 50

# Restart after config or code changes
pm2 restart ecosystem.config.js --update-env

# Restart after a hard halt (check the reason first)
pm2 restart novosky
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:
pm2 restart ecosystem.config.js --update-env
To verify what PM2 is actually using before debugging a token or connection error:
pm2 env 0 | grep TELEGRAM
pm2 env 0 | grep API_URL

Cron setup (weekly optimize)

The first optimize run installs the cron job automatically. To verify or install manually:
# Check existing cron jobs
crontab -l

# Manual install
crontab -e
# Add:
# 0 2 * * 0 cd /path/to/novosky && .venv/bin/python scripts/weekly_optimize.py --profile balanced >> logs/weekly_optimize.log 2>&1

Firewall

The MT5 REST API on your Windows VM should only be accessible from your Linux trading VM. Restrict port 6542 accordingly:
# Windows Firewall β€” inbound rule
Allowed source IP: <linux_vm_ip>
Port: 6542 (TCP)
Do not expose port 6542 publicly.