234 lines
7 KiB
Text
234 lines
7 KiB
Text
# =======================================================================
|
|
# Stock Bot Platform Production Environment Configuration
|
|
# =======================================================================
|
|
|
|
# Core Application Settings
|
|
NODE_ENV=production
|
|
PORT=3001
|
|
APP_NAME=stock-bot
|
|
APP_VERSION=1.0.0
|
|
|
|
# =======================================================================
|
|
# DATABASE CONFIGURATIONS
|
|
# =======================================================================
|
|
|
|
# PostgreSQL - Operational Data (orders, positions, strategies)
|
|
DB_HOST=${DB_HOST}
|
|
DB_PORT=${DB_PORT:-5432}
|
|
DB_NAME=${DB_NAME}
|
|
DB_USER=${DB_USER}
|
|
DB_PASSWORD=${DB_PASSWORD}
|
|
DB_POOL_MIN=5
|
|
DB_POOL_MAX=20
|
|
DB_POOL_IDLE_TIMEOUT=60000
|
|
DB_SSL=true
|
|
DB_SSL_REJECT_UNAUTHORIZED=true
|
|
DB_QUERY_TIMEOUT=30000
|
|
DB_CONNECTION_TIMEOUT=10000
|
|
|
|
# QuestDB - Time-series Data (OHLCV, indicators, performance)
|
|
QUESTDB_HOST=${QUESTDB_HOST}
|
|
QUESTDB_HTTP_PORT=${QUESTDB_HTTP_PORT:-9000}
|
|
QUESTDB_PG_PORT=${QUESTDB_PG_PORT:-8812}
|
|
QUESTDB_INFLUX_PORT=${QUESTDB_INFLUX_PORT:-9009}
|
|
QUESTDB_USER=${QUESTDB_USER}
|
|
QUESTDB_PASSWORD=${QUESTDB_PASSWORD}
|
|
QUESTDB_CONNECTION_TIMEOUT=10000
|
|
QUESTDB_REQUEST_TIMEOUT=60000
|
|
QUESTDB_RETRY_ATTEMPTS=5
|
|
QUESTDB_TLS_ENABLED=true
|
|
QUESTDB_DEFAULT_DATABASE=qdb
|
|
QUESTDB_TELEMETRY_ENABLED=false
|
|
|
|
# MongoDB - Document Storage (sentiment, raw docs, unstructured data)
|
|
MONGODB_HOST=${MONGODB_HOST}
|
|
MONGODB_PORT=${MONGODB_PORT:-27017}
|
|
MONGODB_DATABASE=${MONGODB_DATABASE}
|
|
MONGODB_USERNAME=${MONGODB_USERNAME}
|
|
MONGODB_PASSWORD=${MONGODB_PASSWORD}
|
|
MONGODB_AUTH_SOURCE=admin
|
|
MONGODB_URI=${MONGODB_URI}
|
|
MONGODB_MAX_POOL_SIZE=50
|
|
MONGODB_MIN_POOL_SIZE=5
|
|
MONGODB_MAX_IDLE_TIME=60000
|
|
MONGODB_CONNECT_TIMEOUT=30000
|
|
MONGODB_SOCKET_TIMEOUT=60000
|
|
MONGODB_SERVER_SELECTION_TIMEOUT=10000
|
|
MONGODB_TLS=true
|
|
MONGODB_RETRY_WRITES=true
|
|
MONGODB_JOURNAL=true
|
|
MONGODB_READ_PREFERENCE=primaryPreferred
|
|
MONGODB_WRITE_CONCERN=majority
|
|
|
|
# Dragonfly - Redis Replacement (caching and events)
|
|
DRAGONFLY_HOST=${DRAGONFLY_HOST}
|
|
DRAGONFLY_PORT=${DRAGONFLY_PORT:-6379}
|
|
DRAGONFLY_PASSWORD=${DRAGONFLY_PASSWORD}
|
|
DRAGONFLY_USERNAME=${DRAGONFLY_USERNAME}
|
|
DRAGONFLY_DATABASE=0
|
|
DRAGONFLY_MAX_RETRIES=5
|
|
DRAGONFLY_RETRY_DELAY=100
|
|
DRAGONFLY_CONNECT_TIMEOUT=30000
|
|
DRAGONFLY_COMMAND_TIMEOUT=10000
|
|
DRAGONFLY_POOL_SIZE=50
|
|
DRAGONFLY_POOL_MIN=5
|
|
DRAGONFLY_POOL_MAX=100
|
|
DRAGONFLY_TLS=true
|
|
DRAGONFLY_ENABLE_KEEPALIVE=true
|
|
DRAGONFLY_KEEPALIVE_INTERVAL=30
|
|
DRAGONFLY_CLUSTER_MODE=false
|
|
DRAGONFLY_CLUSTER_NODES=
|
|
DRAGONFLY_MAX_MEMORY=8gb
|
|
DRAGONFLY_CACHE_MODE=true
|
|
|
|
# =======================================================================
|
|
# MONITORING & LOGGING CONFIGURATIONS
|
|
# =======================================================================
|
|
|
|
# Logging Configuration (Production - Less verbose)
|
|
LOG_LEVEL=info
|
|
LOG_FORMAT=json
|
|
LOG_CONSOLE=false
|
|
LOG_FILE=true
|
|
LOG_FILE_PATH=/var/log/stock-bot
|
|
LOG_FILE_MAX_SIZE=100m
|
|
LOG_FILE_MAX_FILES=30
|
|
LOG_FILE_DATE_PATTERN=YYYY-MM-DD
|
|
LOG_ERROR_FILE=true
|
|
LOG_ERROR_STACK=false
|
|
LOG_PERFORMANCE=true
|
|
LOG_SQL_QUERIES=false
|
|
LOG_HTTP_REQUESTS=false
|
|
LOG_STRUCTURED=true
|
|
LOG_TIMESTAMP=true
|
|
LOG_CALLER_INFO=false
|
|
LOG_SILENT_MODULES=
|
|
LOG_VERBOSE_MODULES=
|
|
LOG_SERVICE_NAME=stock-bot
|
|
LOG_SERVICE_VERSION=1.0.0
|
|
LOG_ENVIRONMENT=production
|
|
|
|
# Loki - Log Aggregation
|
|
LOKI_HOST=${LOKI_HOST}
|
|
LOKI_PORT=${LOKI_PORT:-3100}
|
|
LOKI_URL=${LOKI_URL}
|
|
LOKI_USERNAME=${LOKI_USERNAME}
|
|
LOKI_PASSWORD=${LOKI_PASSWORD}
|
|
LOKI_TENANT_ID=${LOKI_TENANT_ID}
|
|
LOKI_PUSH_TIMEOUT=30000
|
|
LOKI_FLUSH_INTERVAL_MS=5000
|
|
LOKI_BATCH_SIZE=2048
|
|
LOKI_BATCH_WAIT=5000
|
|
LOKI_RETENTION_PERIOD=90d
|
|
LOKI_MAX_CHUNK_AGE=2h
|
|
LOKI_TLS_ENABLED=true
|
|
LOKI_TLS_INSECURE=false
|
|
LOKI_DEFAULT_LABELS=
|
|
LOKI_SERVICE_LABEL=stock-bot
|
|
LOKI_ENVIRONMENT_LABEL=production
|
|
|
|
# Prometheus - Metrics Collection
|
|
PROMETHEUS_HOST=${PROMETHEUS_HOST}
|
|
PROMETHEUS_PORT=${PROMETHEUS_PORT:-9090}
|
|
PROMETHEUS_URL=${PROMETHEUS_URL}
|
|
PROMETHEUS_USERNAME=${PROMETHEUS_USERNAME}
|
|
PROMETHEUS_PASSWORD=${PROMETHEUS_PASSWORD}
|
|
PROMETHEUS_SCRAPE_INTERVAL=30s
|
|
PROMETHEUS_EVALUATION_INTERVAL=30s
|
|
PROMETHEUS_RETENTION_TIME=90d
|
|
PROMETHEUS_TLS_ENABLED=true
|
|
PROMETHEUS_TLS_INSECURE=false
|
|
|
|
# Grafana - Visualization
|
|
GRAFANA_HOST=${GRAFANA_HOST}
|
|
GRAFANA_PORT=${GRAFANA_PORT:-3000}
|
|
GRAFANA_URL=${GRAFANA_URL}
|
|
GRAFANA_ADMIN_USER=${GRAFANA_ADMIN_USER}
|
|
GRAFANA_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD}
|
|
GRAFANA_ALLOW_SIGN_UP=false
|
|
GRAFANA_SECRET_KEY=${GRAFANA_SECRET_KEY}
|
|
GRAFANA_DATABASE_TYPE=postgres
|
|
GRAFANA_DATABASE_URL=${GRAFANA_DATABASE_URL}
|
|
GRAFANA_DISABLE_GRAVATAR=true
|
|
GRAFANA_ENABLE_GZIP=true
|
|
|
|
# =======================================================================
|
|
# DATA PROVIDER CONFIGURATIONS
|
|
# =======================================================================
|
|
|
|
# Default Data Provider
|
|
DEFAULT_DATA_PROVIDER=alpaca
|
|
|
|
# Alpaca Markets (Production)
|
|
ALPACA_ENABLED=true
|
|
ALPACA_API_KEY=${ALPACA_API_KEY}
|
|
ALPACA_SECRET_KEY=${ALPACA_SECRET_KEY}
|
|
ALPACA_BASE_URL=https://api.alpaca.markets
|
|
ALPACA_DATA_URL=https://data.alpaca.markets
|
|
ALPACA_PAPER_TRADING=false
|
|
|
|
# Polygon.io
|
|
POLYGON_ENABLED=${POLYGON_ENABLED:-false}
|
|
POLYGON_API_KEY=${POLYGON_API_KEY}
|
|
POLYGON_BASE_URL=https://api.polygon.io
|
|
|
|
# Yahoo Finance
|
|
YAHOO_ENABLED=${YAHOO_ENABLED:-false}
|
|
YAHOO_BASE_URL=https://query1.finance.yahoo.com
|
|
|
|
# IEX Cloud
|
|
IEX_ENABLED=${IEX_ENABLED:-false}
|
|
IEX_API_KEY=${IEX_API_KEY}
|
|
IEX_BASE_URL=https://cloud.iexapis.com
|
|
|
|
# Data Provider Settings (Production)
|
|
DATA_PROVIDER_TIMEOUT=60000
|
|
DATA_PROVIDER_RETRIES=5
|
|
DATA_PROVIDER_RETRY_DELAY=2000
|
|
DATA_CACHE_ENABLED=true
|
|
DATA_CACHE_TTL=60
|
|
DATA_CACHE_MAX_SIZE=10000
|
|
|
|
# =======================================================================
|
|
# TRADING & RISK MANAGEMENT (Production)
|
|
# =======================================================================
|
|
|
|
# Trading Configuration
|
|
PAPER_TRADING=false
|
|
MAX_POSITION_SIZE=${MAX_POSITION_SIZE:-0.05}
|
|
MAX_DAILY_LOSS=${MAX_DAILY_LOSS:-10000}
|
|
|
|
# Risk Management (Stricter for production)
|
|
RISK_MAX_POSITION_SIZE=${RISK_MAX_POSITION_SIZE:-0.10}
|
|
RISK_MAX_LEVERAGE=${RISK_MAX_LEVERAGE:-1.5}
|
|
RISK_DEFAULT_STOP_LOSS=${RISK_DEFAULT_STOP_LOSS:-0.015}
|
|
RISK_DEFAULT_TAKE_PROFIT=${RISK_DEFAULT_TAKE_PROFIT:-0.045}
|
|
RISK_MAX_DRAWDOWN=${RISK_MAX_DRAWDOWN:-0.05}
|
|
RISK_MAX_CONSECUTIVE_LOSSES=${RISK_MAX_CONSECUTIVE_LOSSES:-3}
|
|
RISK_POSITION_SIZING_METHOD=volatility_adjusted
|
|
RISK_CIRCUIT_BREAKER_ENABLED=true
|
|
RISK_CIRCUIT_BREAKER_THRESHOLD=0.02
|
|
RISK_CIRCUIT_BREAKER_COOLDOWN=7200000
|
|
RISK_ALLOW_WEEKEND_TRADING=false
|
|
RISK_MARKET_HOURS_ONLY=true
|
|
|
|
# =======================================================================
|
|
# FEATURE FLAGS (Production)
|
|
# =======================================================================
|
|
ENABLE_ML_SIGNALS=${ENABLE_ML_SIGNALS:-false}
|
|
ENABLE_SENTIMENT_ANALYSIS=${ENABLE_SENTIMENT_ANALYSIS:-false}
|
|
ENABLE_SOCIAL_SIGNALS=${ENABLE_SOCIAL_SIGNALS:-false}
|
|
ENABLE_OPTIONS_TRADING=${ENABLE_OPTIONS_TRADING:-false}
|
|
ENABLE_CRYPTO_TRADING=${ENABLE_CRYPTO_TRADING:-false}
|
|
ENABLE_BACKTESTING=true
|
|
ENABLE_PAPER_TRADING=false
|
|
ENABLE_LIVE_TRADING=true
|
|
|
|
# =======================================================================
|
|
# PRODUCTION SETTINGS
|
|
# =======================================================================
|
|
DEBUG_MODE=false
|
|
VERBOSE_LOGGING=false
|
|
MOCK_DATA_PROVIDERS=false
|
|
ENABLE_API_RATE_LIMITING=true
|
|
ENABLE_REQUEST_LOGGING=false
|