Before launching MagicTradeBot, you'll need to configure the management backend and core bot instance. Below are the configuration examples and important tips for each component.
🖥️ ASP.NET Core Management App (appsettings.json
)
Location: /management/appsettings.json
// appsettings.json (v1.2)
{
"ConnectionStrings": {
"SQLLight": "Data Source=Data/MTManagementDB.db",
"SQLSERVER": "",
"Postge": "",
"MySQL": ""
},
"ApplicationSettings": {
"Author": "MagicTradeBot",
"PageCaption": "MagicTradeBot Management Application",
"Environment": "Development",
"IsDemo": true,
"Domain": {
"Backend": "https://localhost:44353",
"Frontend": "http://localhost:4200"
},
"Localization": {
"DefaultCulture": "en",
"Timezone": "America/Los_Angeles",
"Currency": "USD"
},
"Pagination": {
"DefaultPageSize": 18,
"MaxPageSize": 100,
"VisiblePageCount": 5
},
"Caching": {
"Enabled": true,
"Duration": 3600,
"MaxCacheSize": "500MB"
},
"MaximumUrlCharacters": 60
},
"JwtSettings": {
"SecretKey": "{JWT_SECRET}",
"Issuer": "$ApplicationSettings:Domain.Backend",
"Audience": "$ApplicationSettings:Domain.Frontend",
"Expiration": {
"AccessToken": "15m",
"RefreshToken": "7d"
}
},
"SecurityHeaders": {
"StrictTransportSecurity": "max-age=31536000; includeSubDomains",
"ContentSecurityPolicy": "",
"XContentTypeOptions": "nosniff",
"ReferrerPolicy": "strict-origin-when-cross-origin"
},
"Secrets": {
"Database": {
"Host": "",
"Name": "",
"User": "",
"Password": ""
}
},
"AllowedHosts": [
"http://localhost:4200",
"https://magictradebot.com",
"*.magictradebot.com"
]
}
💡 Quick Tips
- Move sensitive keys like
JwtSettings:SecretKey
andSecrets
to environment variables in production. - Ensure
Domain.Backend
matches the deployed API base URL. - Use
"Environment": "Production"
in live environments for better performance and security.
🤖 Golang Bot Configuration (config.yaml
)
server:
# API CONFIGURATION
api: "https://localhost:44353/" # Base URL for trading API
general:
# Name
botName: "Bybit_Mainnet_Trading_Bot" # Name of the trading bot (Set Unique Names for each bot instance it multiple bots are running)
# LICENSE KEY
licenseKey: "xxxxx" # Valid license key required to operate the bot.
# DEMO MODE SETTING
isDemo: true # true = risk-free simulation, false = real-money trading
# EXECUTION CONTROL
refreshRate: 7 # Seconds between market scans (lower = faster updates). Adjust to avoid API rate limits
totalConcurrentTrades: 0 # Max simultaneous trades (0 = unlimited)
# ACCOUNT SETTINGS
exchangeId: 1 # [Account ID: Get from MagicTradeBot Management App]
# TRADING STRATEGY
strategy: 0 # Selected strategy ID:
strategyMaxCount: 0 # Max strategy progression steps (0 = unlimited)
# STRATEGY REFERENCE:
# 0: No strategy
# 1: Martingale 2: Reverse Martingale
# 3: Fibonacci 4: Fibonacci Reverse
# 5: 3-2-6-3 6: 3-2-6-3 Reverse
# 7: D'Alembert 8: D'Alembert Reverse
# """
timeZone: "UTC" # Timezone for trading operations, time, schedule calculation (e.g., "UTC", "America/New_York")
# SYSTEM SETTINGS
debug: true # Enable detailed logs (true/false)
kline:
# KLINE CONFIGURATION
maxKlineLength: 14 # Max number of candles to keep in memory per symbol / interval
chunkSize: 20 # total number of symbols fetch per cycle
refreshRate: 20 # Seconds between Kline updates (lower = faster updates). Adjust to avoid API rate limits
strategyIntervals:
scalp: ["3m", "5m", "15m"]
day: ["15m", "30m", "1h", "2h", "4h"]
swing: ["1h", "2h", "4h", "6h", "12h"]
long: ["1d", "2d", "3d", "7d"]
default: ["5m", "15m", "1h"]
rateLimits:
maxRequestsPerSecond: 10 # Max requests per second the exchange allows; exceeding this may cause bans or errors
safeBuffer: 0.2 # Reduce risk of rate limit violation by using only 80% of the max (1 - safeBuffer)
self_training:
enabled: false
maxGeneratedInputs: 1000
maxVirtualOrders: 500
maxTrainingSymbols: 10 # by increasing numbers make sure your system have enough memory capability to handle as per symbol learning handles thousands of possibilities
batchIntervalDuration: 6 # 6 hours (in hours) to reset training learning and process (min 2 hours)
inputs:
stopLoss: [ 0, 1, 3, 5 ]
takeProfit: [ 0, 3, 5, 10, 20, 50, 100 ]
timeTriggerEnabled: [true]
timeTriggerMinutes: [30]
timeTriggerModes: [0] # 0: both, 1: only win, 2: loss
tradeExpiryTrigger: [true] # time exist instead of stop loss / take profit
tradeExpiryMinutes: [5, 10, 20, 60] # exist after specific minutes
change: [5, 10, 20, 30] # % change detected
tradeDirection: [0, 1] # 0: long, 1: short
changeDirection: [0, 1] # change direction up / down
changeInterval: [3, 5, 15] # 3m, 5m, 15m
changeMatchCreteria: [0, 1, 2] # 0: from start of cancle, 1: from min candle position, 2: from max candle position
changelayers: [1] # how many layers e.g 2 means two conditions e.g price 2% match in 5m and 1% match in 3m
symbolcategory: 'general' # e.g bluechip, defi, meme, layer1, layer2, layer3, legacy etc
logging:
datadog:
enabled: false
api_key: "7ce049f9876d08a92a519ab5f6de1d79"
log_level: "info"
service_name: "magictradebot"
environment: "production"
tags:
- bot-instance:Bybit_Mainnet_Trading_Bot
- exchange:Bybit
logdna:
enabled: false
ingest_key: "YOUR_LOGDNA_API_KEY"
app_name: "magictradebot"
environment: "production"
hostname: "bot-eu-1"
tags:
- exchange:binance
- region:eu
loki:
enabled: false # Enable Loki for alerts, monitoring, logs
endpoint: "http://your-loki-server:3100/loki/api/v1/push"
labels:
bot_instance: "bot-eu-1"
exchange: "binance"
environment: "production"
log_level: "info"
incident_reporting:
pagerduty:
enabled: false # Enable alerts via pagerduty
integration_key: "YOUR_PAGERDUTY_ROUTING_KEY"
service_name: "magictradebot"
severity_threshold: "error"
environment: "production"
monitoring:
sentry:
enabled: false # Enable alerts via sentry
dsn: "YOUR_SENTRY_DSN"
environment: "production"
release: "magictradebot@2.0.0"
tags:
instance_id: "bot-apac-01"
exchange: "binance"
alerting:
pushover:
enabled: false # Enable pushover alerts
user_key: "YOUR_PUSHOVER_USER_KEY"
api_token: "YOUR_PUSHOVER_API_TOKEN"
device: "mobile"
priority: "normal"
sound: "magic"
app_name: "magictradebot"
metrics:
prometheus:
enabled: false # Enable prometheus
port: 9100
💡 Quick Tips
- Set
isDemo: true
when testing to avoid live trades. - Use a unique
botName
for each bot instance for easy log filtering. - Ensure
licenseKey
andapi
values match those from the Management App. strategyMaxCount
limits over-trading in loop-based strategies like Martingale.