STEP 01

Create Your VPS Server

Your bot needs a server that runs 24/7. DigitalOcean offers a $6/month cloud server (called a Droplet) that's perfect for Xiznit Bot.

1.1 — Create a DigitalOcean Account

Go to digitalocean.com and sign up. You can use a credit card or PayPal.

1.2 — Create a Droplet

  • Click Create in the top right → select Droplets
  • Choose the region closest to you
  • Under image, select Ubuntu 24.04 LTS
  • Under size, choose Basic → $6/month (1GB RAM)
  • Under authentication, choose Password and set a strong password
  • Click Create Droplet and wait ~60 seconds
  • Copy your Droplet's IP address — you'll need it in the next step

1.3 — Connect to Your Server

Click the Console button in DigitalOcean to open a browser terminal. Log in with username root and the password you set.

💡

Tip: Save your IP address and root password somewhere safe. You'll need these every time you manage the bot.

STEP 02

Set Up Your Domain

Xiznit Bot requires a domain name — not just an IP address. This is necessary for secure HTTPS webhooks (required by TradingView) and for Tradovate OAuth to work. A domain costs about $10–15/year.

2.1 — Buy a Domain

Go to namecheap.com and register a domain. Something like mytradingbot.com works great. Once purchased, go to your domain's DNS settings.

2.2 — Point DNS to Your Server

In Namecheap, go to Domain List → Manage → Advanced DNS and add these records:

DNS Records
Type Host Value TTL ────────────────────────────────────────────────── A @ YOUR_SERVER_IP Automatic A www YOUR_SERVER_IP Automatic

Replace YOUR_SERVER_IP with the IP address from Step 1. DNS changes take 5–30 minutes to propagate.

2.3 — Install Nginx and SSL on Your Server

In your server console, run these commands one at a time. Replace yourdomain.com with your actual domain.

Install Nginx:

bash
apt update && apt install -y nginx

Install Certbot for free SSL:

bash
apt install -y certbot python3-certbot-nginx

Create Nginx config for your domain:

bash
nano /etc/nginx/sites-available/xiznit-bot

Paste this into the editor (replace yourdomain.com with your domain):

nginx
server { listen 80; server_name yourdomain.com www.yourdomain.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

Save with Ctrl+X → Y → Enter

Enable the config and restart Nginx:

bash
ln -s /etc/nginx/sites-available/xiznit-bot /etc/nginx/sites-enabled/ nginx -t && systemctl restart nginx

Issue a free SSL certificate:

bash
certbot --nginx -d yourdomain.com -d www.yourdomain.com

Certbot will ask for your email and agree to terms. It automatically configures HTTPS and sets up auto-renewal. When done, your domain will be live at https://yourdomain.com.

⚠ DNS must propagate first. If Certbot fails with "could not resolve domain," wait 15–30 minutes for DNS to fully propagate, then try again.

STEP 03

Run the Installer

One command installs everything automatically — Docker, the bot, and all dependencies. Replace YOUR_LICENSE_KEY with the key from your purchase email.

Paste this into your server terminal

bash
bash <(curl -s https://xiznit-bot.com/install-bot.sh) YOUR_LICENSE_KEY

The installer validates your license, installs Docker, downloads the bot image, and starts it — all in about 2 minutes.

When complete, your bot is running 24/7 and will auto-update whenever new versions are released — no action needed on your end.

Verify it's running

bash
docker ps

You should see xiznit-bot listed with status Up.

STEP 04

Connect Your Broker

Choose your broker below. You only need to set up one. The config file is at /opt/xiznit-bot/config.env on your server.

📌

Tradovate supports futures trading including MNQ, MES, MGC, and all major futures contracts. Perfect for prop firm accounts. Connection is handled via OAuth — no API keys required.

⚠ Tradovate Requires a Funded Account + API Subscription: Before OAuth will connect, Tradovate requires (1) a minimum $1,000 deposit into your Tradovate account, and (2) a $25/month API access fee. Both apply even if you only intend to trade demo/sim accounts through a prop firm — almost all prop firms (Topstep, Apex, MFF, Bulenox, and others) route through a Tradovate demo connection, so this funding and fee are required regardless of whether real money ever touches the Tradovate account itself. This is a Tradovate requirement, not Xiznit's, and it applies to any automated trading software using Tradovate's API — not just Xiznit Bot or Xiznit Copier. Budget for this before starting OAuth setup below, or your bot/copier will not be able to connect.

4.1 — Register Your Tradovate OAuth App

Xiznit Bot connects to Tradovate using OAuth. Before you can connect any accounts, you need to register your own Tradovate OAuth application using your domain from Step 2.

Complete Tradovate's API Access Agreement

  • Log into your Tradovate account at trader.tradovate.com
  • Go to Application Settings and find the API Access tab
  • Complete the self-attestation form and sign the API Terms & Conditions — a one-time step required before any API or OAuth access
  • Confirm your account has the $1,000 minimum deposit and active $25/month API subscription

Register Your OAuth Application

  • In Application Settings → API Access, choose OAuth Registration
  • Fill in the application form — App Name can be anything descriptive, e.g. "My Xiznit Bot"
  • Set the Redirect URI to: https://yourdomain.com/oauth/callback (using your own domain from Step 2)
  • Submit the form — Tradovate will issue you a Client ID (CID) and Client Secret
  • Copy both immediately — the secret may only be shown once
💡

This is a standard Tradovate developer process, available to any individual with a funded account. You do not need Xiznit's vendor/partner status to complete this — it's your own personal OAuth app.

4.2 — Set Broker in Config

bash
nano /opt/xiznit-bot/config.env

Set these values:

config.env
BROKER=tradovate # demo = prop firm sim accounts, live = real money TRADING_MODE=demo TRADOVATE_CLIENT_ID=your_cid_here TRADOVATE_CLIENT_SECRET=your_secret_here TRADOVATE_REDIRECT_URI=https://yourdomain.com/oauth/callback

Save with Ctrl+X → Y → Enter, then restart:

bash
docker compose -f /opt/xiznit-bot/docker-compose.yml restart

4.3 — Connect via OAuth

Open your bot dashboard in a browser:

url
https://yourdomain.com
  • Go to the Accounts page in the dashboard
  • Click Connect Tradovate Account
  • Select your trading mode (Demo for prop firm sim, Live for real money)
  • You'll be redirected to Tradovate to log in and authorize
  • After authorizing, you'll be redirected back and your accounts will appear automatically

All your Tradovate accounts (including prop firm accounts) will be discovered automatically. Tokens refresh every 90 minutes in the background — no manual reconnection needed.

📌

Alpaca supports stocks and crypto. Paper trading is completely free with no deposit required — perfect for testing your strategy before going live.

  • Go to alpaca.markets and create a free account
  • Click Paper Trading in the left sidebar
  • Click Your API Keys on the right side
  • Click Generate New Key
  • Copy your API Key ID and Secret Key — the secret is only shown once
  • For live trading, switch to Live Trading and repeat

Add Keys to Config

bash
nano /opt/xiznit-bot/config.env
config.env
BROKER=alpaca # paper = free testing, live = real money TRADING_MODE=paper ALPACA_API_KEY=YOUR_ALPACA_API_KEY ALPACA_SECRET_KEY=YOUR_ALPACA_SECRET_KEY

Save with Ctrl+X → Y → Enter, then restart:

bash
docker compose -f /opt/xiznit-bot/docker-compose.yml restart
📌

Tradier supports stocks, options, and futures. Free API access — no monthly fee for the API itself.

  • Go to tradier.com and create a free account
  • Complete identity verification (takes 1 business day)
  • Once approved, go to Settings → API Access
  • Copy your Access Token — this is your TRADIER_TOKEN
  • Copy your Account ID from the top of your account page
  • For paper trading, use the Sandbox Token instead

⚠ Futures: Futures trading on Tradier requires a separate Tradier Futures account in addition to the standard brokerage account.

Add Keys to Config

bash
nano /opt/xiznit-bot/config.env
config.env
BROKER=tradier # paper = sandbox testing, live = real money TRADING_MODE=paper TRADIER_TOKEN=YOUR_TRADIER_TOKEN TRADIER_ACCOUNT_ID=YOUR_ACCOUNT_ID

Save with Ctrl+X → Y → Enter, then restart:

bash
docker compose -f /opt/xiznit-bot/docker-compose.yml restart
STEP 05

Set Up TradingView Alerts

Configure TradingView to send your strategy signals directly to your bot. Each strategy you create in the bot dashboard gets its own unique webhook URL.

5.1 — Your Webhook URL Format

Every strategy has a unique webhook URL in this format:

url
https://yourdomain.com/webhook/your-strategy-name

Find your exact webhook URL on the Strategies page of your bot dashboard at https://yourdomain.com.

5.2 — Create a TradingView Alert

  • Open TradingView and load your strategy on a chart
  • Click the Alert button (clock icon) in the top toolbar
  • Set the Condition to your strategy signal
  • Under Actions, check Webhook URL
  • Paste your webhook URL from the dashboard
  • Under Message, paste the JSON payload (see examples below)
  • Click Create
💡

TradingView requires HTTPS for webhook URLs. This is why the domain + SSL setup in Step 2 is required — a raw IP address will not work.

5.3 — Entry Alert Payload

Use {{strategy.order.alert_message}} as the message body and select Order fills only:

json
{ "ticker": "{{ticker}}", "action": "buy", "price": {{close}}, "qty": {{strategy.order.contracts}}, "sl": {{plot("Stop Loss")}}, "tp1": {{plot("TP1")}}, "tp1_qty": 1, "tp2": {{plot("TP2")}}, "tp2_qty": 1, "strategy": "MyStrategyName" }

5.4 — Exit Alert Payload

For TP or SL exits, use a separate alert with alert() function calls only:

json — TP exit
{ "ticker": "{{ticker}}", "action": "exit", "tp": "TP1", "qty": 1 }
json — EOD flatten
{ "ticker": "{{ticker}}", "action": "exit", "reason": "eod_flatten", "qty": {{strategy.position_size}} }
json — Stop loss update
{ "ticker": "{{ticker}}", "action": "update_sl", "sl": {{plot("Stop Loss")}} }
STEP 06

Verify & Test

6.1 — Check Bot Health

Open a browser and go to:

url
https://yourdomain.com/health

You should see: {"status":"online","bot":"Xiznit-Trading-Bot"} — this confirms your bot is live.

6.2 — Access Your Dashboard

Open your full bot dashboard at:

url
https://yourdomain.com

From the dashboard you can manage accounts, create strategies, view trade logs, journal, and analytics.

6.3 — Send a Test Webhook

Replace yourdomain.com and your-strategy-name with your actual values:

bash
curl -X POST https://yourdomain.com/webhook/your-strategy-name \ -H 'Content-Type: application/json' \ -d '{"ticker":"MNQ1!","action":"buy","price":21000,"qty":1}'

6.4 — View Live Logs

bash
docker logs xiznit-bot -f
REF

JSON Field Reference

Only "ticker" and "action" are required. All other fields are optional depending on your strategy.

Field Type Required Description
"ticker"stringYESTrading symbol (e.g. MNQ1!, AAPL, BTCUSDT)
"action"stringYESTrade action: buy, sell, exit, update_sl
"price"numberoptionalCurrent price. Use {{close}} in TradingView.
"qty"numberoptionalNumber of shares/contracts.
"sl"numberoptionalStop loss price. Also used with update_sl action.
"tp1"numberoptionalTake profit 1 price level.
"tp1_qty"numberoptionalContracts to close at TP1.
"tp2"numberoptionalTake profit 2 price level.
"tp2_qty"numberoptionalContracts to close at TP2.
"tp3"numberoptionalTake profit 3 price level.
"tp3_qty"numberoptionalContracts to close at TP3.
"tp"stringoptionalExit TP level: "TP1", "TP2", or "TP3". Used with exit action.
"reason"stringoptionalClose reason: eod_flatten, sl, max_duration, weekend_gap, blackout
"strategy"stringoptionalStrategy name for logging.
"comment"stringoptionalLabel logged but not acted on.
"interval"stringoptionalTimeframe label (e.g. "15m", "1h"). Logged only.
REF

Commands Reference

docker ps
Check if bot is running
docker logs xiznit-bot
View bot activity log
docker logs xiznit-bot -f
Watch live bot activity
docker compose restart
Restart the bot
docker compose down
Stop the bot
docker compose up -d
Start the bot
docker compose pull
Check for updates
docker compose up -d --force-recreate
Force restart with latest image
REF

Troubleshooting

Bot won't start

Check your license key is correct in config.env. Run docker logs xiznit-bot to see the error message.

SSL certificate failed

Your DNS likely hasn't propagated yet. Wait 15–30 minutes after updating your Namecheap DNS records, then run the Certbot command again.

Tradovate OAuth not connecting

Make sure your domain is live and HTTPS is working before attempting OAuth. Tradovate requires a valid HTTPS callback URL. Check that https://yourdomain.com/health loads successfully first. Also confirm your Tradovate account has the $1,000 minimum deposit and an active $25/month API subscription — without both, Tradovate will not authorize API/OAuth access even for demo accounts.

Orders not executing

Check your broker settings in config.env. Make sure TRADING_MODE matches your account type (demo for prop firm sim, live for real money). For Tradovate, verify your OAuth connection is active on the Accounts page.

TradingView alerts not firing

Confirm your webhook URL uses https:// — TradingView requires HTTPS. Check that the strategy name in the URL exactly matches the strategy name in your dashboard. Verify your JSON payload is valid using jsonlint.com.

Invalid license key error

Email support@xiznit-bot.com with your license key and order confirmation. We'll verify it within 24 hours.

Bot stopped unexpectedly

Run docker compose up -d to restart. The restart: always setting means this should happen automatically after server reboots.

Download the PDF Guide

Prefer a printable version? Download the complete setup guide as a PDF.

↓ Download PDF Guide
💬
Support