Configuration Guide =================== OpenClaw Trading can be configured through environment variables, configuration files, or programmatically. Configuration Sources ------------------- Priority Order (highest to lowest): 1. Environment variables 2. Configuration files 3. Default values Environment Variables --------------------- Core Settings ~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 * - Variable - Description - Default * - ``ENV`` - Environment name (development, staging, production) - ``development`` * - ``DEBUG`` - Enable debug mode - ``false`` * - ``LOG_LEVEL`` - Logging level (DEBUG, INFO, WARNING, ERROR) - ``INFO`` Economic Settings ~~~~~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 * - Variable - Description - Default * - ``INITIAL_CAPITAL`` - Starting capital for new agents - ``10000.0`` * - ``TOKEN_COST_PER_1M_INPUT`` - Cost per 1M input tokens - ``2.5`` * - ``TOKEN_COST_PER_1M_OUTPUT`` - Cost per 1M output tokens - ``10.0`` * - ``TRADE_FEE_RATE`` - Trading fee as decimal (0.001 = 0.1%) - ``0.001`` * - ``DATA_COST_PER_CALL`` - Cost per market data API call - ``0.01`` Trading Settings ~~~~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 * - Variable - Description - Default * - ``ENABLE_LIVE_TRADING`` - Enable live trading (vs paper trading) - ``false`` * - ``DEFAULT_POSITION_SIZE`` - Default position size as portfolio % - ``0.1`` * - ``MAX_POSITION_SIZE`` - Maximum position size as portfolio % - ``0.2`` * - ``MAX_DRAWDOWN`` - Maximum allowed drawdown before stopping - ``0.15`` * - ``STOP_LOSS_PCT`` - Default stop loss percentage - ``0.05`` * - ``TAKE_PROFIT_PCT`` - Default take profit percentage - ``0.10`` Exchange Settings ~~~~~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 * - Variable - Description - Default * - ``EXCHANGE_NAME`` - Exchange to use (alpaca, ibkr, binance) - ``alpaca`` * - ``EXCHANGE_API_KEY`` - Exchange API key - Required * - ``EXCHANGE_SECRET_KEY`` - Exchange API secret - Required * - ``PAPER_TRADING`` - Use paper trading account - ``true`` API Settings ~~~~~~~~~~~~ .. list-table:: :header-rows: 1 * - Variable - Description - Default * - ``API_HOST`` - API server host - ``0.0.0.0`` * - ``API_PORT`` - API server port - ``8000`` * - ``API_WORKERS`` - Number of API workers - ``4`` Configuration Files ------------------- YAML Configuration ~~~~~~~~~~~~~~~~~~ Create ``config/default.yaml``: .. code-block:: yaml # Environment environment: development debug: false # Logging logging: level: INFO format: json file: logs/openclaw.log # Economy economy: initial_capital: 10000.0 token_cost_per_1m_input: 2.5 token_cost_per_1m_output: 10.0 trade_fee_rate: 0.001 data_cost_per_call: 0.01 survival_thresholds: thriving: 1.5 stable: 1.1 struggling: 0.8 bankrupt: 0.3 # Trading trading: enable_live_trading: false paper_trading: true default_position_size: 0.1 max_position_size: 0.2 max_drawdown: 0.15 stop_loss_pct: 0.05 take_profit_pct: 0.10 # Workflow workflow: enable_parallel: true timeout_seconds: 300 max_retries: 3 # Agents agents: default_skill_level: 0.5 skill_improvement_rate: 0.01 market_analyst: indicators: - sma - rsi - macd risk_manager: max_position_size: 0.2 max_portfolio_heat: 0.5 daily_loss_limit: 0.03 # Exchange exchange: name: alpaca paper_trading: true rate_limit: 200 # Data data: cache_enabled: true cache_ttl: 3600 default_source: yahoo # Monitoring monitoring: enable_metrics: true enable_alerts: true metrics_retention_days: 30 alert_thresholds: drawdown_warning: 0.05 drawdown_critical: 0.10 loss_streak_warning: 3 loss_streak_critical: 5 Environment-Specific Configs ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Create separate configs for different environments: **config/development.yaml**: .. code-block:: yaml environment: development debug: true logging: level: DEBUG format: text economy: initial_capital: 1000.0 # Lower for testing **config/production.yaml**: .. code-block:: yaml environment: production debug: false logging: level: WARNING format: json file: /var/log/openclaw/trading.log economy: initial_capital: 100000.0 trading: paper_trading: false enable_live_trading: true Loading Configuration --------------------- From File ~~~~~~~~~ .. code-block:: python from openclaw.core.config import load_config # Load default config config = load_config() # Load specific environment config = load_config("production") # Access values initial_capital = config.economy.initial_capital log_level = config.logging.level Programmatic Configuration ~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: python from openclaw.core.config import Config # Create config object config = Config( environment="staging", economy={ "initial_capital": 5000.0, "trade_fee_rate": 0.002 }, trading={ "max_position_size": 0.15 } ) # Override specific values config.economy.initial_capital = 7500.0 # Save to file config.save("config/staging.yaml") Validation ---------- Schema Validation ~~~~~~~~~~~~~~~~~ .. code-block:: python from openclaw.core.config import validate_config # Validate configuration errors = validate_config(config) if errors: for error in errors: print(f"Validation error: {error}") else: print("Configuration valid") Type Checking ~~~~~~~~~~~~~ .. code-block:: python from pydantic import ValidationError try: config = Config(**config_dict) except ValidationError as e: print(f"Invalid configuration: {e}") Secure Configuration -------------------- Environment File ~~~~~~~~~~~~~~~~ Create ``.env`` file (don't commit to version control): .. code-block:: bash # Exchange API credentials EXCHANGE_API_KEY=your_api_key_here EXCHANGE_SECRET_KEY=your_secret_here # Database password DATABASE_URL=postgresql://user:password@localhost/openclaw # Other secrets SLACK_WEBHOOK_URL=https://hooks.slack.com/services/... Loading from .env ~~~~~~~~~~~~~~~~~ .. code-block:: python from dotenv import load_dotenv import os # Load .env file load_dotenv() # Access variables api_key = os.getenv("EXCHANGE_API_KEY") secret = os.getenv("EXCHANGE_SECRET_KEY") Secret Management ~~~~~~~~~~~~~~~~~ Use secret management for production: .. code-block:: python # AWS Secrets Manager import boto3 client = boto3.client("secretsmanager") response = client.get_secret_value(SecretId="openclaw/production") secrets = json.loads(response["SecretString"]) # HashiCorp Vault import hvac client = hvac.Client(url="https://vault.example.com") secret = client.secrets.kv.v2.read_secret_version( path="openclaw/production" ) Configuration Best Practices ---------------------------- 1. **Separate environments**: Different configs for dev/staging/prod 2. **Use environment variables**: For sensitive data and deployment-specific values 3. **Validate on startup**: Fail fast on invalid configuration 4. **Document changes**: Keep example configs updated 5. **Version control**: Commit non-sensitive config templates 6. **Secure secrets**: Never commit API keys or passwords