{
  "name": "stock-bot",
  "version": "1.0.0",
  "environment": "development",
  "service": {
    "name": "stock-bot",
    "port": 3000,
    "host": "0.0.0.0",
    "healthCheckPath": "/health",
    "metricsPath": "/metrics",
    "shutdownTimeout": 30000,
    "cors": {
      "enabled": true,
      "origin": "*",
      "credentials": true
    }
  },
  "database": {
    "postgres": {
      "enabled": true,
      "host": "localhost",
      "port": 5432,
      "database": "trading_bot",
      "user": "trading_user",
      "password": "trading_pass_dev",
      "ssl": false,
      "poolSize": 20,
      "connectionTimeout": 30000,
      "idleTimeout": 10000
    },
    "questdb": {
      "host": "localhost",
      "ilpPort": 9009,
      "httpPort": 9000,
      "pgPort": 8812,
      "database": "questdb",
      "user": "admin",
      "password": "quest",
      "bufferSize": 65536,
      "flushInterval": 1000
    },
    "mongodb": {
      "uri": "mongodb://trading_admin:trading_mongo_dev@localhost:27017/stock?authSource=admin",
      "database": "stock",
      "poolSize": 20
    },
    "dragonfly": {
      "host": "localhost",
      "port": 6379,
      "db": 0,
      "keyPrefix": "stock-bot:",
      "maxRetries": 3,
      "retryDelay": 100
    }
  },
  "log": {
    "level": "info",
    "format": "json",
    "hideObject": false,
    "loki": {
      "enabled": false,
      "host": "localhost",
      "port": 3100,
      "labels": {}
    }
  },
  "redis": {
    "enabled": true,
    "host": "localhost",
    "port": 6379,
    "db": 0
  },
  "queue": {
    "enabled": true,
    "redis": {
      "host": "localhost",
      "port": 6379,
      "db": 1
    },
    "workers": 5,
    "concurrency": 5,
    "enableScheduledJobs": true,
    "defaultJobOptions": {
      "attempts": 3,
      "backoff": {
        "type": "exponential",
        "delay": 1000
      },
      "removeOnComplete": 100,
      "removeOnFail": 100,
      "timeout": 300000
    }
  },
  "http": {
    "timeout": 30000,
    "retries": 3,
    "retryDelay": 1000,
    "userAgent": "StockBot/1.0",
    "proxy": {
      "enabled": false
    }
  },
  "webshare": {
    "apiKey": "",
    "apiUrl": "https://proxy.webshare.io/api/v2/",
    "enabled": true
  },
  "browser": {
    "headless": true,
    "timeout": 30000
  },
  "proxy": {
    "enabled": true,
    "cachePrefix": "proxy:",
    "ttl": 3600,
    "webshare": {
      "apiKey": "y8ay534rcbybdkk3evnzmt640xxfhy7252ce2t98",
      "apiUrl": "https://proxy.webshare.io/api/v2/"
    }
  },
  "providers": {
    "yahoo": {
      "name": "yahoo",
      "enabled": true,
      "priority": 1,
      "rateLimit": {
        "maxRequests": 5,
        "windowMs": 60000
      },
      "timeout": 30000,
      "baseUrl": "https://query1.finance.yahoo.com"
    },
    "qm": {
      "name": "qm",
      "enabled": false,
      "priority": 2,
      "username": "",
      "password": "",
      "baseUrl": "https://app.quotemedia.com/quotetools",
      "webmasterId": ""
    },
    "ib": {
      "name": "ib",
      "enabled": false,
      "priority": 3,
      "gateway": {
        "host": "localhost",
        "port": 5000,
        "clientId": 1
      },
      "marketDataType": "delayed"
    },
    "eod": {
      "name": "eod",
      "enabled": false,
      "priority": 4,
      "apiKey": "",
      "baseUrl": "https://eodhistoricaldata.com/api",
      "tier": "free"
    }
  },
  "features": {
    "realtime": true,
    "backtesting": true,
    "paperTrading": true,
    "autoTrading": false,
    "historicalData": true,
    "realtimeData": true,
    "fundamentalData": true,
    "newsAnalysis": false,
    "notifications": false,
    "emailAlerts": false,
    "smsAlerts": false,
    "webhookAlerts": false,
    "technicalAnalysis": true,
    "sentimentAnalysis": false,
    "patternRecognition": false,
    "riskManagement": true,
    "positionSizing": true,
    "stopLoss": true,
    "takeProfit": true
  },
  "services": {
    "dataIngestion": {
      "port": 2001,
      "workers": 5,
      "queues": {
        "ceo": { "concurrency": 2 },
        "webshare": { "concurrency": 1 },
        "qm": { "concurrency": 5 },
        "ib": { "concurrency": 1 },
        "proxy": { "concurrency": 1 }
      },
      "rateLimit": {
        "enabled": true,
        "requestsPerSecond": 10
      }
    },
    "dataPipeline": {
      "port": 2002,
      "workers": 2,
      "batchSize": 1000,
      "processingInterval": 60000,
      "queues": {
        "exchanges": { "concurrency": 1 },
        "symbols": { "concurrency": 2 }
      },
      "syncOptions": {
        "maxRetries": 3,
        "retryDelay": 5000,
        "timeout": 300000
      }
    },
    "webApi": {
      "port": 2003,
      "rateLimitPerMinute": 60,
      "cache": {
        "ttl": 300,
        "checkPeriod": 60
      },
      "cors": {
        "origins": ["http://localhost:3000", "http://localhost:4200"],
        "credentials": true
      }
    },
    "orchestrator": {
      "port": 2004,
      "defaultMode": "paper",
      "paperTradingCapital": 100000,
      "enableWebSocket": true,
      "backtesting": {
        "maxConcurrent": 5,
        "defaultSpeed": "max",
        "dataResolutions": ["1m", "5m", "15m", "1h", "1d"]
      },
      "strategies": {
        "maxActive": 10,
        "watchdogInterval": 5000
      }
    }
  }
}
