Trading bot కోసం VPSలో నిజంగా ముఖ్యమైనవి ఏమిటి?
Trading bot కోసం VPS ఎంచుకునేటప్పుడు systemd restart discipline, సరైన clock, API keys భద్రత, heartbeats మరియు వాస్తవ latency పరిమితులను తెలుసుకోండి.
VPS నుంచి trading bot కు అవసరమైనవి
Trading bot కోసం ఉపయోగించే VPS ను నాలుగు అంశాల ఆధారంగా అంచనా వేయాలి: process ఆగిపోయిన తర్వాత మళ్లీ ప్రారంభమవుతుందా, system clock సరైన సమయాన్ని చూపుతుందా, API (application programming interface) keys ను దొంగిలించడం కష్టమా, అది ఆగిపోయినప్పుడు మీకు సమాచారం అందుతుందా. Retail bot కు raw speed ఈ జాబితాలో చాలా దిగువన ఉంటుంది. మీ order path లో నెమ్మదిగా పనిచేసే భాగం Python ను నడుపుతున్న host కాదు; మీ broker మరియు దానికి ఉన్న network distance.
ఇది engineering guide. ఇందులోని సమాచారం financial advice కాదు. ఏ strategy గురించి చర్చించలేదు.
Uptime అనేది sales pageలోని సంఖ్య కాదు; restart discipline
భూమిపై ఉన్న ప్రతి host 99.9 percent uptimeను ప్రకటిస్తుంది. ఆ సంఖ్య hypervisorను వివరిస్తుంది, మీ botను కాదు. unhandled exception, ఎప్పటికీ reconnect కాని websocket లేదా OOM (out of memory) killer కారణంగా bot ఆగిపోవచ్చు. అయినా server మొత్తం సమయం నడుస్తూనే ఉంటుంది. కాబట్టి ఉపయోగకరమైన ప్రశ్న మీ process exit అయిన తర్వాతి పది secondsలో ఏమి జరుగుతుంది అన్నదే.
Botను systemd serviceగా నడిపించి, restart బాధ్యతను init systemకు అప్పగించండి. ఒక unit file దీన్ని ఆరు linesలో చేస్తుంది.
[Unit]
Description=Trading bot
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=0
[Service]
Type=simple
User=bot
WorkingDirectory=/opt/tradingbot
EnvironmentFile=/etc/tradingbot/api.env
ExecStart=/opt/tradingbot/venv/bin/python -m tradingbot
Restart=always
RestartSec=10
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/tradingbot
[Install]
WantedBy=multi-user.targetStartLimitIntervalSec=0 అనేది చాలామంది మర్చిపోయే line. డిఫాల్ట్గా systemd 10 secondsలో 5 restarts తర్వాత ప్రయత్నం ఆపి, unitను failed stateలో శాశ్వతంగా ఉంచుతుంది. 03:00 సమయంలో మీకు కావలసింది దీనికి విరుద్ధమైన ప్రవర్తనే. దీన్ని 0గా సెట్ చేస్తే rate limit నిలిపివేయబడుతుంది. అందువల్ల crash-loopలో ఉన్న bot నిశ్శబ్దంగా ఆగిపోకుండా మళ్లీ ప్రయత్నిస్తూనే ఉంటుంది. RestartSec=10 ఆ loop exchangeపై నిరంతరం reconnect ప్రయత్నాలతో అధిక భారాన్ని మోపకుండా ఆపుతుంది.
దానిపై నమ్మకం ఉంచే ముందు fileను తనిఖీ చేసి, తరువాత దాన్ని start చేయండి:
sudo systemd-analyze verify /etc/systemd/system/tradingbot.service
sudo systemctl daemon-reload
sudo systemctl enable --now tradingbot
systemctl status tradingbotenable reboot తర్వాత కూడా కొనసాగే భాగం. Kernel updates వల్ల reboots అవసరమవుతాయి. Bot నిశ్శబ్దంగా ఆగిపోతుందా అని తెలుసుకోవడానికి systemdను restart counter అడగండి:
systemctl show tradingbot -p NRestarts
journalctl -u tradingbot --since "24 hours ago" | tail -50ఒక వారం తర్వాత NRestarts=0 ఉంటే bot ఆరోగ్యంగా ఉంది. NRestarts=812 అంటే రాత్రంతా reconnect అవుతున్న processపై మీరు trading చేస్తున్నారు. రోజువారీ report వంటి scheduled jobs కోసం timers సహా పూర్తి unit file నిర్మాణం systemd serviceగా programను నడపడంలో వివరించబడింది.
గడియారాన్ని UTCకు సెట్ చేసి, అది సమకాలీకరించబడిందని నిర్ధారించండి
Exchange APIలు timestampతో requests కు సంతకం చేసి, నిర్దిష్ట windowకు వెలుపల ఉన్న వాటిని తిరస్కరిస్తాయి. ఈ window తరచుగా 5 seconds లేదా అంతకంటే తక్కువగా ఉంటుంది. గడియారం drift అయితే authentication failureలా కనిపించే errors వస్తాయి. అందువల్ల timeను పరిశీలించకముందే చాలామంది గంటల తరబడి keysను rotate చేస్తారు. Binance-style APIలలో message స్పష్టంగా ఉంటుంది: Timestamp for this request was 1000ms ahead of the server's time.
Serverను UTCకు సెట్ చేయండి. Local time zones వల్ల daylight saving jump ఏర్పడుతుంది. అది trading session మధ్యలో సంభవించవచ్చు.
sudo timedatectl set-timezone UTC
timedatectlUbuntuలో systemd-timesyncd ముందుగానే అందుబాటులో ఉంటుంది. ఇది SNTP (simple network time protocol) client. Logsకు ఇది సరిపోతుంది. అయితే కొన్ని milliseconds పరిధిలో సమయాన్ని నిలుపుకోవాల్సిన పనులకు ఇది బలహీనంగా ఉంటుంది. కారణం, ఇది ఒక serverను poll చేస్తుంది. గడియారాన్ని నిరంతరం నియంత్రించదు. దాని బదులుగా chrony ఉపయోగించండి:
sudo apt update && sudo apt install -y chrony
sudo systemctl enable --now chrony
chronyc tracking
chronyc sources -vchronyc tracking నుంచి చదవాల్సిన line System time. ఉదాహరణకు System time : 0.000031415 seconds fast of NTP time. కొన్ని milliseconds కంటే తక్కువ విలువ ఆరోగ్యకరమైన స్థితిని సూచిస్తుంది. అది Leap status : Not synchronised అని చూపిస్తే, chrony ఇంకా serverను చేరుకోలేదు. సాధారణంగా outbound UDP 123 నిరోధించబడటం దీనికి కారణం. ఒక నిమిషం వేచి ఉండి, firewall rulesను మార్చే ముందు మళ్లీ తనిఖీ చేయండి.
మీరు copy చేసే ప్రదేశాల్లో API keys ఉంచవద్దు
లీకైన exchange key, లీకైన SSH key కంటే ప్రమాదకరం. Withdrawal permission వల్ల అది వెంటనే డబ్బుగా మారుతుంది. రెండు అలవాట్లు ఈ ప్రమాదంలో ఎక్కువ భాగాన్ని తగ్గిస్తాయి.
మొదట, bot key కు ఎప్పుడూ withdrawal permission ఇవ్వవద్దు. Exchange దీనికి మద్దతు ఇస్తే, ఆ key ను మీ server యొక్క IP address కు పరిమితం చేయండి. దొంగిలించబడిన key ను దాదాపు పనికిరాకుండా చేసే అత్యంత ప్రభావవంతమైన నియంత్రణ ఇదే.
రెండవది, secret ను code directory వెలుపల ఉంచండి. /opt/tradingbot లో ఉన్న ఏదైనా విషయం చివరికి git repository లేదా backup archive లోకి చేరుతుంది. దాన్ని systemd మాత్రమే చదవగల root-owned file లో ఉంచండి:
sudo install -d -m 750 -o root -g bot /etc/tradingbot
sudo install -m 640 -o root -g bot /dev/null /etc/tradingbot/api.env
sudo nano /etc/tradingbot/api.envఈ file లో plain KEY=value lines ఉంటాయి. Quotes లేదా export ఉండకూడదు. group bot తో mode 640 ఉంటే service user దాన్ని చదవగలడు; ఇతరులు ఎవరూ చదవలేరు. sudo -u bot cat /etc/tradingbot/api.env తో దీనిని నిర్ధారించండి. తరువాత మరొక user తో కూడా పరీక్షించండి; అక్కడ అది Permission denied తో విఫలమవ్వాలి.
Bot స్వయంగా root గా లేదా మీ login user గా నడవకూడదు. Shell మరియు login చేయడానికి home directory లేని system account ను సృష్టించండి:
sudo useradd --system --shell /usr/sbin/nologin --home-dir /var/lib/tradingbot --create-home botఆ flags లో ప్రతి దాని ఉద్దేశం, అలాగే ProtectSystem=strict వాస్తవంగా ఎంతవరకు పనిచేస్తుందో unprivileged user గా సేవలను నడపడం లో వివరించబడింది. మిగిలిన server baseline, అంటే SSH keys మరియు firewall, కొత్త VPS పై మొదటి పది నిమిషాలు లో ఉంది.
మీ broker గుర్తించేలోపు అది ఆగిపోయిందని తెలుసుకోండి
systemctl status ప్రక్రియ నడుస్తోందని చెబుతుంది. Bot ఏదైనా పని చేస్తోందని అది చెప్పదు. పనిచేయని websocket కు వ్యతిరేకంగా retry loop లో చిక్కుకున్న ప్రక్రియ, systemd చేయగల ప్రతి తనిఖీలోనూ విజయవంతంగా కనిపిస్తుంది.
దానికి బదులుగా heartbeat ఉపయోగించండి. Uptime Kuma లో push monitors ఉన్నాయి. ఇవి మీ bot ఒక నిర్దిష్ట వ్యవధిలో URL కు call చేస్తుందని ఆశిస్తాయి. ఆ call రావడం ఆగితే alert పంపిస్తాయి. Bot సజీవంగా ఉందని నిర్ధారించే భాగం పూర్తయ్యాక, main loop చివరలో ఈ call ఉంచండి. ఉదాహరణకు, market data విజయవంతంగా చదివిన తర్వాత ఉంచవచ్చు.
curl -fsS "http://monitor.example.com:3001/api/push/YOUR_TOKEN?status=up&msg=loop_ok"సాధారణ jitter వల్ల మీకు page రాకుండా monitor interval ను loop సమయానికి సుమారు రెండింతలుగా సెట్ చేయండి. Monitor ను bot ఉన్న server కు భిన్నమైన server పై నడపండి. ఎందుకంటే అది పర్యవేక్షిస్తున్న వస్తువుతోపాటు monitor కూడా ఆగిపోతే, ఎలాంటి నివేదికా రాదు. Setup గురించి Uptime Kuma తో self-hosted status monitoring లో వివరించారు.
Disk alert ను కూడా జోడించండి. Verbose logs రాసే bot కొన్ని వారాల్లో root filesystem ను నింపవచ్చు. Disk నిండిపోతే network call కాదు, database write ఆగిపోతుంది. అందువల్ల కనిపించే లక్షణాలు అసాధారణంగా ఉంటాయి. journalctl --vacuum-time=14d మరియు /etc/systemd/journald.conf లోని SystemMaxUse= line journal పరిమాణాన్ని నియంత్రణలో ఉంచుతాయి.
నిజాయితీగా చెప్పాలంటే: latencyలో ఎక్కువ భాగం మీ host వల్ల కాదు
ఇక్కడ trading VPS ఉత్పత్తుల మార్కెట్ సాంకేతిక అంశాల నుంచి దూరమవుతుంది. Marketing పేజీలు sub-millisecond గణాంకాలను చూపించి, మీకు order fill అవడాన్ని అడ్డుకునేది host మాత్రమే అన్న భావన కలిగిస్తాయి. దాదాపు ప్రతి retail bot విషయంలో ఇది నిజం కాదు.
మీ order, bot నుంచి exchange లేదా broker endpoint కు public internet మీదుగా ప్రయాణిస్తుంది. ఆ మార్గాన్ని physical distance మరియు మీ provider, వారి provider మధ్య peering ప్రధానంగా నిర్ణయిస్తాయి. Frankfurt లోని server, Tokyo లోని endpoint తో సంభాషిస్తే CPU ఎంత వేగంగా ఉన్నా round trip కు సుమారు 250 milliseconds పడుతుంది. దీనికి broker యొక్క సొంత queue, risk checks, rate limits కూడా జతవుతాయి. retail account విషయంలో ఇవి సాధారణంగా పదులు లేదా వందల milliseconds లో కొలవబడతాయి.
ఊహించకుండా కొలవండి. నిజమైన endpoint కోసం connection మరియు first-byte times ను curl చూపిస్తుంది:
curl -s -o /dev/null -w 'dns=%{time_namelookup}s connect=%{time_connect}s ttfb=%{time_starttransfer}s\n' \
https://api.kraken.com/0/public/Time
mtr -rwzc 100 api.kraken.comమీరు నిర్ణయం తీసుకునే ముందు దీనిని candidate server నుంచి run చేయండి. connect 0.180 seconds అయితే, మీరు తప్పు continent లో ఉన్నారు. దాన్ని సరిచేయడం ప్రయోజనకరం. connect 0.004 seconds మరియు ttfb 0.140 seconds అయితే, మిగిలిన ఆలస్యం broker processing వల్ల వస్తోంది. ఏ host మార్చినా దానిపై ప్రభావం ఉండదు.
అయితే host ఎప్పుడు ముఖ్యమవుతుంది? మీరు venue కు colocated లేదా cross-connected అయి queue position కోసం పోటీ పడుతున్నప్పుడు. అది వేరే budget ఉన్న వేరే వ్యాపారం. అలాగే మీ స్వంత code bottleneck అయినప్పుడు కూడా host ముఖ్యమే. ఉదాహరణకు ప్రతి tick సమయంలో full historyపై indicators ను మళ్లీ లెక్కించే bot ప్రతి loopకు 200 milliseconds CPU సమయం ఖర్చు చేయవచ్చు. ఇది మీరు ఉచితంగా నియంత్రించగల వాస్తవ latency. వేగవంతమైన server కోసం వెతకకముందు loop ను profile చేయండి.
మీరు ఎంచుకునే hostలో ముఖ్యమైనవి geography, స్థిరమైన networking, మరియు OOM killer జోక్యం చేసుకోనంత memory. July 2026 నాటికి, memoryలో కొన్ని వందల symbols ఉంచే single-strategy Python bot 2 GB RAM మరియు 2 vCPUలో సౌకర్యంగా నడుస్తుంది. tick historyని local databaseలో ఉంచితే memory పెంచండి.
లైవ్కు వెళ్లే ముందు చిన్న చెక్లిస్ట్
systemctl is-enabled tradingbot,enabledను చూపిస్తుంది. అలాగే సేవsudo rebootతర్వాత కూడా కొనసాగుతుంది.chronyc trackingసిస్టమ్ సమయ వ్యత్యాసం కొన్ని milliseconds కంటే తక్కువగా ఉందని నివేదిస్తుంది.- API key కు trading అనుమతి ఉంటుంది. withdrawal అనుమతి ఉండదు. Exchange ఆ సదుపాయాన్ని అందిస్తే IP allowlist కూడా అమలు చేయాలి.
sudo systemctl kill -s SIGKILL tradingbotతో process ను నిలిపివేసినప్పుడు, అదిRestartSecలోపు మళ్లీ ప్రారంభమవుతుంది.- మీరు bot ను ఉద్దేశపూర్వకంగా ఆపినప్పుడు, heartbeat monitor ఒక interval లోపు మీకు page చేస్తుంది.
- Logs పరిమిత పరిమాణంలో ఉంటాయి.
df -hలో root filesystem కు తగినంత ఖాళీ ఉంటుంది.
నిజమైన నిధులను ఉపయోగించే ముందు, మొత్తం వ్యవస్థను exchange యొక్క sandbox లో లేదా paper mode లో ఒక వారం నడపండి. ఆ వారంలో పై అంశాల్లో ప్రతి ఒక్కటి కనీసం ఒక్కసారి విఫలమవుతుంది. ఆ వారం ఉద్దేశం అదే.
FAQ
ట్రేడింగ్ bot కు తక్కువ latency ఉన్న లేదా bare metal server అవసరమా?
అదే venueలోని ఇతర automated participants తో execution speed విషయంలో పోటీ పడుతున్నప్పుడు మాత్రమే అవసరం. అలాంటి సందర్భంలో సాధారణంగా general purpose VPS కంటే colocation సరైనది. Retail bot కు round trip పై geography మరియు broker స్వంత processing ఎక్కువ ప్రభావం చూపుతాయి. కాబట్టి API endpoint కు సమీపంలోని server ను ఎంచుకోండి. వేగవంతమైన server కోసం చెల్లించే ముందు curl మరియు mtr తో కొలవండి.
ట్రేడింగ్ bot కు ఎంత RAM మరియు CPU అవసరం?
చాలా single-strategy botలు network-bound గా ఉంటాయి. Events మధ్య అవి సాధారణంగా idle గా ఉంటాయి. July 2026 నాటికి, కొన్ని వందల instruments ను track చేసే Python bot కు 2 vCPU మరియు 2 GB RAM సరిపోతాయి. Tick history ను processలో ఉంచినప్పుడు లేదా local database నడిపినప్పుడు memory పరిమితిగా మారుతుంది. ఊహించకుండా free -h మరియు OOM kill సందేశాల కోసం journal ను monitor చేయండి.
Timestamp error తో నా exchange API requests ను ఎందుకు reject చేస్తోంది?
Server clock exchange signing window కు వెలుపలికి drift అయింది. సాధారణంగా తేడా కొన్ని seconds ఉంటుంది. chrony ను install చేయండి. chronyc tracking లో చిన్న System time offset మరియు synchronised leap status కనిపిస్తున్నాయో నిర్ధారించండి. Daylight saving మార్పు వల్ల clock మారకుండా machine ను UTC కు set చేయండి. API key ను rotate చేయడం clock సమస్యను పరిష్కరించదు.
నాకు తెలియకుండా నా bot రాత్రంతా ఆగిపోకుండా ఎలా నిరోధించాలి?
Restart=always మరియు StartLimitIntervalSec=0 తో bot ను systemd కింద నడపండి. Crash loop వచ్చినప్పుడు అది శాశ్వతంగా ఆగిపోకుండా మళ్లీ retry అవుతుంది. తరువాత ప్రతి successful loop ముగింపులో bot పంపే heartbeat ను జోడించండి. Restart process ను నిర్వహిస్తుంది. Process సజీవంగా ఉన్నా stuck అయిన పరిస్థితిని heartbeat గుర్తిస్తుంది.
Bot మరియు monitoring ను ఒకే VPSలో నడపవచ్చా?
నడపవచ్చు. అయితే అవసరమైన రోజున monitoring మీకు తప్పుదారి పట్టిస్తుంది. Bot ను నిలిపివేసే outage monitoring ను కూడా నిలిపివేస్తుంది. Alerting ను వేరే machine పై ఉంచండి. సాధ్యమైతే వేరే provider లేదా region ఉపయోగించండి. Bot server ను bot మరియు దాని logs కోసం మాత్రమే ఉపయోగించండి.