SymBot is a user friendly, self-hosted and automated DCA (Dollar Cost Averaging) cryptocurrency bot solution. Create and manage your bots entirely from your web browser or with simple built-in APIs. Best of all, your exchange credentials and keys always remain in your hands... not any other third-party.
- Requirements
- Installation
- Docker Installation
- Upgrading
- Configuration
- Telegram Setup
- Reverse Proxy Setup
- API Information
- API Sample Usage
- Resetting SymBot
- Frequently Asked Questions (FAQ)
- Disclaimer
- Linux, MacOS, or Windows based system
- Node.js must be installed on your system
- MongoDB installed or a cloud host provider
- Access to a cryptocurrency exchange such as Binance or Coinbase
- Reliable high-speed internet connection
- 1GB RAM minimum but recommended at least 4GB
NOTE: Trading requires your system and internet connection to be running 24/7. Any interruption could result in missed trades, signals, etc.
If you would rather run SymBot using Docker then skip this section and go to the Docker Installation below.
- Open a command line terminal
- Change directory to where SymBot files are located
- Type:
npm install
- Wait until all packages are downloaded and installed
- Modify the app and bot configuration files as necessary (see below)
- Type:
npm start
. You can also usenpm start consolelog
to display all logging to the console for testing purposes. The same information is also logged to files in thelogs
directory - Open a web browser and type: http://127.0.0.1:3000
To have SymBot run in the background it is recommended to use the Node.js process manager called pm2. Here's how to use it:
- Install pm2 by typing:
npm install pm2 -g
- Create a file called
ecosystem.config.js
in the same location where your SymBot files are located and place the below configuration into it:
module.exports = {
apps: [
{
name: 'symbot',
namespace: 'symbot',
script: '/home/symbot/symbot.js',
kill_timeout: 8000,
max_memory_restart: '4000M'
}
]
}
- Replace
/home/symbot/symbot.js
with the actual location where SymBot resides on your server and save the file - Tell pm2 to start SymBot with a one time only command by typing:
pm2 start ecosystem.config.js
- Type:
pm2 save
to save the configuration - If you don't already have pm2 starting at system boot time, type this with root privileges:
pm2 startup
. Then type:pm2 save
SymBot will now start automatically even when the system is rebooted. With the above configuration pm2 will monitor SymBot and if memory exceeds roughly four gigabytes, a kill signal will be sent to SymBot. pm2 will wait eight seconds before terminating the process to give SymBot some time to safely shut itself down. pm2 will then start SymBot again. You can change those settings to suit your own server requirements and needs.
Docker can be a great way to get SymBot up and running fast with all the necessary dependencies such as MongoDB.
The Docker build files can be modified as necessary, but should only be done if you're familiar with how they work. Running SymBot under Docker is considered experimental and performing any upgrades could cause unexpected issues.
- Open a command line terminal
- Change directory to where SymBot files are located
- Open the app.json configuration file and set
mongo_db_url
tomongodb://symbot:symbot123@database/symbot
- Make any additional changes to the app and bot configuration files as necessary (see below)
- Change directory to
docker
in the same location where SymBot files are located - Type:
docker-compose -p symbot up -d --build
- Wait for Docker to build everything and all containers to start
- Open a web browser and type: http://127.0.0.1:3000
Mongo Express is also installed which can be used to access MongoDB visually by opening a web browser to http://127.0.0.1:3010
When upgrading to a new version of SymBot it is recommended to follow the basic steps below.
- Stop all running SymBot instances
- If using pm2 suggested in the installation above, you can type:
pm2 stop ecosystem.config.js
in a command line terminal
- If using pm2 suggested in the installation above, you can type:
- Make a backup of the directory to where all current SymBot files are located
- Extract new SymBot files to existing directory. If prompted, be sure to allow new files to replace the original or you may be running portions of a previous version
- Copy existing configuration files from backup created previously
- Compare parameters in the new SymBot configuration files such as app.json to existing files if any have been added or removed. Any changes must be added to existing configurations or this may cause SymBot to not start or run properly
- Type:
npm install
to ensure all modules are installed properly - Start SymBot and verify the new version is running
- Monitor logs for a few minutes either on the console, log files, or the web interface to ensure everything is operating as before
NOTE: If you are running SymBot behind any other services such as Apache, Nginx, Cloudflare, etc. you may need to clear caches in order for the latest upgraded files to be served properly.
These files are located in the config
directory
-
app.json
-
password
is a hashed password used to login to the SymBot web interface. The default password is automatically set as "admin" the very first time SymBot is started. This is not a plain text password, but rather an encrypted form of it, so it should not be manually entered or you may not be able to login properly. It is strongly recommended to change the default password using the web interface configuration. -
api_key
is a UUID v4 value that is randomly generated the first time SymBot starts. It is used to make API calls to SymBot. This can be set to most any string value you choose. -
web_server
contains settings for the SymBot web server. The default port is 3000. -
bots
start_conditions
contains keys and descriptions such asasap
andapi
for various start conditions that can be used to start bots and deals. The keys should never be changed after the initial start of SymBot or they will not match previous bots and deals.pair_autofill_blacklist
is an array of trading pairs that you don't want automatically filled in the pair selection box when creating or updating bots and clicking one of the stablecoin buttons such as USD or USDT. You can use full pairs such as BTC/USD or wildcards such as BTC/*. This can be useful to prevent bots from starting deals using stablecoin pairs such as USDT/USD as those will generally have little volatility in typical market conditions.
-
telegram
contains an optional Telegram token id and user id to send SymBot notifications to. This includes system warnings such as detected connectivity issues, bot and deal start / stops, and more! You must first create a Telegram bot with@BotFather
to use (see below). -
mongo_db_url
is the URL to your MongoDB instance.- WARNING: If you run multiple instances of SymBot using the same database you will mess up your bots!
- For quick set up, create a free account at https://cloud.mongodb.com and copy the URL given into the app config. It begins with something like: mongodb+srv://
- If running a local MongoDB instance, specifying
mongodb://127.0.0.1:27017/SymBot
ormongodb://localhost:27017/SymBot
should work fine, but setting up a username and password is also recommended - For better security running your own local database is recommended
-
signals
contains a section to use signals with SymBot. There is a 3CQS signals section by default. If you have an API key just copy it there or create an account at https://www.3CQS.com to get one.
-
-
bot.json
- This contains all default settings for your bot and exchange information. For test purposes, always leave
sandBox: true
. - Valid exchanges include binance, binanceus, coinbase, and many others. SymBot uses the CCXT library so if the exchange is supported, you should be able to connect to it
- Most bot settings do not need to be set here since they can be set when creating a bot in the web interface
- If you experience any issues with your bots or deals using a specific exchange, there is a special parameter that can pass options directly to the CCXT library by modifying
"exchangeOptions": { "defaultType": "spot" }
- This contains all default settings for your bot and exchange information. For test purposes, always leave
-
server.json
- This file is created the very first time SymBot is started. It contains an automatically generated UUID v4
server_id
. The primary purpose is to ensure if there are ever multiple instances of SymBot running, they do not accidentally conflict with the database used. When SymBot starts it will compare theserver_id
value in this file to the database entry. If they do not match, SymBot will shut down. - This file should never be copied to another folder or server if you plan to run additional instances of SymBot, or manually edited unless you have a good reason to do so.
- This file is created the very first time SymBot is started. It contains an automatically generated UUID v4
Using Telegram with SymBot is a great way to know when bot deals start and finish, but also getting notifications when issues are detected, such as being unable to connect to your exchange.
You just need to create a Telegram bot with @BotFather
. Here are some simple steps on how to do that:
- Open a Telegram chat with
@BotFather
- Once there you may need to type or click on
/start
- Type:
/newbot
- Choose a name that will be displayed when you receive messages from Telegram. For simplicity, just use: SymBot. This does not need to be unique to Telegram.
- Now you need to choose a unique Telegram username. This can be just about any string value, but it must end in the word bot. For example: MySymBotServer123_bot
- If the username you chose was not already taken, then you should receive a token that looks something like: 12345:AbCdEfG_123Abc
- Open a chat with your new bot MySymBotServer123_bot (use the actual name of your bot)
- Type or click on
/start
- Copy your Telegram bot token into the SymBot app.json configuration file. You must also enter your own Telegram id or SymBot will not allow messages to be sent. If you don't know your Telegram id, open a chat with
@userinfobot
- Restart SymBot
A reverse proxy is a special type of web server that receives requests, forwards them to another web server somewhere else, receives a reply, and forwards the reply to the original requester. Although there are many reasons to use a reverse proxy, they are generally used to help increase performance, security, and reliability. Two popular open-source software packages that can act as a reverse proxy are Apache and NGINX.
This is how requests will work when using a reverse proxy in front of SymBot:
User <---> Reverse Proxy (Port 80) <---> SymBot (Port 3000)
There are many different ways to set up either Apache or NGINX as a reverse proxy that can be used in front of SymBot, so this is just a basic guide. You may need to change configuration parameters depending on your operating system, version of these software packages, or if you're already running one of them on your system (server). The commands described here will also vary depending on your operating system.
If setting up a reverse proxy seems too advanced, a great alternative is to use a Cloudflare Tunnel instead. This can also automatically encrypt all of your traffic without installing any additional SSL certificates on your web server and system.
- Update the apt-get package lists with the following command:
sudo apt-get update
- Install Apache:
sudo apt-get install apache2
- Open the Apache configuration file:
# Apache 2.4+
sudo nano /etc/httpd/conf.modules.d/00-proxy.conf
# Apache < 2.4
sudo nano /etc/httpd/conf/httpd.conf
- Enable the Proxy and Rewrite modules by adding or uncommenting the below lines:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule rewrite_module modules/mod_rewrite.so
- For Debian based systems, enable the modules using the following command:
sudo a2enmod proxy proxy_http proxy_wstunnel rewrite
- Create a virtual host configuration file for your domain:
# Debian based systems
sudo nano /etc/apache2/sites-available/your-domain-name.com.conf
# Redhat based systems
sudo nano /etc/httpd/conf.d/your-domain-name.com.conf
- Add the below configuration block and save:
<VirtualHost *:80>
ServerName your-domain-name.com
ServerAlias www.your-domain-name.com
ServerAdmin [email protected]
RewriteEngine on
RewriteCond ${HTTP:Upgrade} websocket [NC]
RewriteCond ${HTTP:Connection} upgrade [NC]
RewriteRule .* "ws:/127.0.0.1:3000/$1" [P,L]
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ProxyRequests off
</VirtualHost>
- Restart Apache:
# Debian based systems
sudo a2ensite your-domain-name.com
sudo systemctl restart apache2
# Redhat based systems
sudo systemctl restart httpd
You should now be able to access SymBot by opening your web browser to http://your-domain-name.com
- Update the apt-get package lists with the following command:
sudo apt-get update
- Install NGINX:
sudo apt-get install nginx
- Open the default server block configuration file for editing:
sudo nano /etc/nginx/sites-available/default
- Add the below configuration block and save:
server {
listen 80;
server_name your-domain-name.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
- Restart NGINX:
sudo systemctl nginx restart
You should now be able to access SymBot by opening your web browser to http://your-domain-name.com
Take more control of your bots and deals using SymBot APIs. You can easily enable or disable bots and start deals using triggers or signals from 3CQS, TradingView, your own custom scripts and strategies, or from any of your other favorite providers.
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
botName | string | NO | Bot name will be generated if omitted | |
pair | array | YES | List of pairs used for the bot | |
active | boolean | NO | false | Enabled: true / Disabled: false |
createStep | string | NO | Set to "getOrders" to preview all DCA orders without creating the bot | |
firstOrderAmount | number | YES | Initial or base order amount for each deal | |
dcaOrderAmount | number | YES | Amount for every additional DCA / safety order | |
dcaOrderStepPercent | number | YES | Price deviation percentage to open safety orders | |
dcaOrderSizeMultiplier | number | YES | Multiplies the amount of funds used by the last safety order | |
dcaOrderStepPercentMultiplier | number | YES | Multiplies the price deviation percentage used by the last safety order | |
dcaTakeProfitPercent | number | YES | Take profit percentage the bot will use to close successful deals | |
dcaMaxOrder | integer | YES | Maximum DCA / safety orders allowed per deal | |
dealMax | integer | NO | Maximum deals allowed before bot is disabled. Set to 0 for unlimited (Can reset for multi-pair bots or when re-enabled) | |
pairMax | integer | NO | Maximum pairs allowed to start per bot. Set to 0 for unlimited | |
pairDealsMax | integer | NO | Maximum number of same pair deals that can run concurrently. Default is maximum one deal per pair when empty or set to 0. | |
volumeMin | number | NO | Minimum 24h volume (specified in millions) symbol must have to start | |
dealCoolDown | integer | NO | Wait a number of seconds before starting a new deal after the last one completes. Multi-pair bots will have different timers for each pair. | |
startCondition | string | NO | asap | Start deals using "asap" or by "api" |
POST /api/bots/create
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
botId | string | YES | Bot ID to be updated | |
botName | string | NO | Bot name will be generated if omitted | |
pair | array | YES | List of pairs used for the bot | |
active | boolean | NO | false | Enabled: true / Disabled: false |
firstOrderAmount | number | YES | Initial or base order amount for each deal | |
dcaOrderAmount | number | YES | Amount for every additional DCA / safety order | |
dcaOrderStepPercent | number | YES | Price deviation percentage to open safety orders | |
dcaOrderSizeMultiplier | number | YES | Multiplies the amount of funds used by the last safety order | |
dcaOrderStepPercentMultiplier | number | YES | Multiplies the price deviation percentage used by the last safety order | |
dcaTakeProfitPercent | number | YES | Take profit percentage the bot will use to close successful deals | |
dcaMaxOrder | integer | YES | Maximum DCA / safety orders allowed per deal | |
dealMax | integer | NO | Maximum deals allowed before bot is disabled. Set to 0 for unlimited (Can reset for multi-pair bots or when re-enabled) | |
pairMax | integer | NO | Maximum pairs allowed to start per bot. Set to 0 for unlimited | |
pairDealsMax | integer | NO | Maximum number of same pair deals that can run concurrently. Default is maximum one deal per pair when empty or set to 0. | |
volumeMin | number | NO | Minimum 24h volume (specified in millions) symbol must have to start | |
dealCoolDown | integer | NO | Wait a number of seconds before starting a new deal after the last one completes. Multi-pair bots will have different timers for each pair. | |
startCondition | string | NO | asap | Start deals using "asap" or by "api" |
POST /api/bots/update
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
active | boolean | NO | Enabled = true / Disabled = false |
GET /api/bots
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
botId | string | YES |
POST /api/bots/{botId}/enable
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
botId | string | YES |
POST /api/bots/{botId}/disable
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
dcaTakeProfitPercent | number | NO | Take profit percentage the bot will use to close successful deals | |
dcaMaxOrder | integer | NO | Maximum DCA / safety orders allowed per deal | |
dealLast | boolean | NO | false | Prevents a new deal from starting after this deal completes. Setting only applies to this deal. If you have multiple deals running with the same pair, this will not affect the other deals. |
POST /api/deals/{dealId}/update_deal
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
volume | number | YES | Add funds to a deal by placing a manual safety order |
POST /api/deals/{dealId}/add_funds
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
- | Closes deal and sells at current market price |
POST /api/deals/{dealId}/panic_sell
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
- | Get information for a deal |
GET /api/deals/{dealId}/show
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
- | Returns all current active deals |
GET /api/deals
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
from | string | NO | Returns most recent completed deals if start from date is not specified | |
to | string | NO | Returns all completed deals up to end of date specified | |
botId | string | NO | Returns completed deals for specified bot id |
GET /api/deals/completed
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
botId | string | YES | ||
signalId | string | NO | Used to identify signal that started deal | |
pair | string | NO | Only required for multi-pair bots |
POST /api/bots/{botId}/start_deal
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
exchange | string | YES | Exchange to retrieve market data for | |
pair | string | NO | Symbol pair pricing and data to retrieve. Omitting will return all valid symbols for specified exchange |
GET /api/markets
Name | Type | Mandatory | Values (default) | Description |
---|---|---|---|---|
jquery | boolean | NO | true | Automatically add required jQuery script to display charts |
script | boolean | NO | true | Automatically add required TradingView script to display charts |
containerId | string | NO | Element id used for the TradingView chart container | |
theme | string | NO | dark | Theme to be used can be "light" or "dark" |
exchange | string | NO | binance | Exchange to be used for chart |
pair | string | NO | BTC_USDT | Symbol pair to be used for chart |
width | integer | NO | Width of chart in pixels | |
height | integer | NO | Height of chart in pixels |
GET /api/tradingview
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
-d '{
"pair": [ "BTC/USD" ],
"botName": "",
"active": false,
"createStep": "",
"firstOrderAmount": 20,
"dcaOrderAmount": 45,
"dcaOrderStepPercent": 1.3,
"dcaOrderSizeMultiplier": 1.08,
"dcaOrderStepPercentMultiplier": 1.0,
"dcaTakeProfitPercent": 1.5,
"dcaMaxOrder": 46,
"dealMax": 0,
"startCondition": "asap"
}' \
http://127.0.0.1:3000/api/bots/create
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
-d '{
"pair": [ "BTC/USD", "ETH/USD" ],
"botId": "{botId}",
"botName": "",
"active": false,
"firstOrderAmount": 20,
"dcaOrderAmount": 45,
"dcaOrderStepPercent": 1.3,
"dcaOrderSizeMultiplier": 1.08,
"dcaOrderStepPercentMultiplier": 1.0,
"dcaTakeProfitPercent": 1.5,
"dcaMaxOrder": 46,
"dealMax": 0,
"startCondition": "api"
}' \
http://127.0.0.1:3000/api/bots/update
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
-d '{
"pair": [ "BTC/USD" ],
"createStep": "getOrders",
"firstOrderAmount": 20,
"dcaOrderAmount": 45,
"dcaOrderStepPercent": 1.3,
"dcaOrderSizeMultiplier": 1.08,
"dcaOrderStepPercentMultiplier": 1.0,
"dcaTakeProfitPercent": 1.5,
"dcaMaxOrder": 46
}' \
http://127.0.0.1:3000/api/bots/create
curl -i -X GET \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
'http://127.0.0.1:3000/api/bots?active=true'
curl -i -X POST \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
http://127.0.0.1:3000/api/bots/{botId}/enable
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
-d '{
"dcaTakeProfitPercent": 1.5,
"dcaMaxOrder": 12
}' \
http://127.0.0.1:3000/api/deals/{dealId}/update_deal
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
-d '{
"volume": 25
}' \
http://127.0.0.1:3000/api/deals/{dealId}/add_funds
curl -i -X POST \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
http://127.0.0.1:3000/api/deals/{dealId}/panic_sell
curl -i -X GET \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
'http://127.0.0.1:3000/api/deals/{dealId}/show'
curl -i -X GET \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
'http://127.0.0.1:3000/api/deals'
curl -i -X GET \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
'http://127.0.0.1:3000/api/deals/completed?from=2023-03-01'
curl -i -X POST \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
-d '{ "pair": "BTC/USD" }' \
http://127.0.0.1:3000/api/bots/{botId}/start_deal
curl -i -X GET \
-H 'Accept: application/json' \
-H 'api-key: {API-KEY}' \
'http://127.0.0.1:3000/api/markets?exchange=binance&pair=BTC_USDT'
http://127.0.0.1:3000/api/tradingview?script=true&exchange=binance&pair=BTC_USDT&theme=dark&width=1000&height=600
If you want to reset the SymBot database for any reason, you can do so only from the command line. It will first ask to confirm, then display a reset code you must enter, and confirm again.
- Stop any running instances of SymBot
- Type:
npm start reset
(ornode ./symbot.js reset
)
- SymBot was developed with two primary goals in mind:
- Create a simple, easy to use, yet powerful crypto trading bot that would provide anyone who wanted to start trading cryptocurrencies with the ability to get up and running quickly with little technical knowledge.
- Reduce the risk of having any other parties with access to your most valuable information when it comes to trading, which are your exchange credentials or API keys. There are ever growing cyber-hacks, data breaches, and just overall bad actors that are constantly looking for ways to scam through sometimes fairly elaborate schemes. If your keys get into the hands of anyone with malicious intentions, you could lose all of your money and cryptocurrencies on your exchange. SymBot connects directly to your exchange so your API keys are never sent or shared with any other third-party.
- SymBot uses the CCXT (CryptoCurrency eXchange Trading) library which supports many popular exchanges such as Binance and Coinbase. If your exchange is listed then you should be able to connect to it.
- Yes, however using a trusted hosting provider is a more stable choice. Trading requires your system to be running 24/7 along with an uninterrupted high-speed internet connection. Most established hosting data centers have readily available support teams to assist with system related issues, fully equipped with generators in case of power failures, redundant fiber connections, and operate inside hurricane resistant buildings. If your home experiences a power outage or any other unexpected scenarios, that may result in unplaced orders or missed trading signals which could impact your deals significantly.
- Yes. If you set up SymBot on a home network and your mobile device is connected to the same wireless network, you should be able to open a web browser on your device and access SymBot at http://127.0.0.1:3000 just fine. However, being able to access it from other locations depends if your system is accessible to the public internet. This generally requires either opening ports on your router and system, or setting up a Reverse Proxy.
- You can technically run an unlimited number of bots, however any limitations mostly come from how often your exchange allows APIs to be accessed, and the amount of resources your system (server) has such as CPU, memory, etc. The more bots you run generally requires additional API calls to your exchange and more system processing capability to manage all of your deals efficiently.
- SymBot is designed with resiliency in mind. Providing there are no issues with your database or other technical problems that caused your system to reboot, your bot deals will automatically resume upon restart. It is recommended to monitor the logs for a period of time to ensure everything is operating as expected.
- No. Disabling a DCA bot will only prevent new deals from being started. Any existing deals that are running will continue until they complete or if you choose to panic sell.
- Your exchange credentials may be incorrect or you may be getting blocked, rate-limited, or experiencing some type of connectivity issues. Some exchanges also restrict access by region, so your server's IP address must reside in a location that is allowed. Check the logs for any error messages or unusual activity. You can do this from a command line terminal or in the SymBot web interface.
- SymBot is continuously monitoring and processing data from exchanges, potential signal providers you're using such as from 3CQS, accessing the database, or performing house-keeping tasks like purging old logs. During times of increased market volatility, more data could be coming in faster and may stay in memory for longer periods of time or as necessary. It is normal to see spikes in CPU or memory usage, but if either remain excessively high for extended periods of time you may want to look into it further. Many times upgrading your CPU, increasing system memory, or upgrading hard drive capacity tend to resolve most issues and provide much better performance and an improved trading experience.
All investment strategies and investments involve risk of loss. All information found here, including any ideas, opinions, views, predictions, forecasts, or suggestions, expressed or implied herein, are for informational, entertainment or educational purposes only and should not be construed as personal investment advice. Conduct your own due diligence, or consult a licensed financial advisor or broker before making any and all investment decisions. Any investments, trades, speculations, or discussions made on the basis of any information found here, expressed or implied herein, are committed at your own risk, financial or otherwise. Use at your own risk.