Skip to content
🌐Network: Mainnet

Running and Monitoring

This section covers building, running, and monitoring your trading agent in development and production environments.

Logger Setup

The logger provides formatted, colored console output with timestamps to help you monitor your trading agent's activity.

Create the logger utility file:

bash
touch src/utils/logger.ts

Add the following content to src/utils/logger.ts:

typescript
// src/utils/logger.ts
import pino from 'pino';

/**
 * Create a Pino logger with pretty formatting
 * @param logLevel - Logging level (debug, info, warn, error)
 * @returns Configured logger instance
 */
export function createLogger(logLevel: string = 'info') {
  return pino({
    // Set minimum log level
    level: logLevel,
    // Configure pretty printing for human-readable output
    transport: {
      target: 'pino-pretty',     // Use pino-pretty for formatting
      level: logLevel,
      options: {
        colorize: true,          // Add colors to log output
        translateTime: 'SYS:standard',  // Format timestamps as readable dates
        ignore: 'pid,hostname',  // Don't show process ID or hostname
      },
    },
    // Custom serializers for error objects
    serializers: {
      err: pino.stdSerializers.err,  // Pretty-print error stack traces
    },
  });
}

Build and Run

Development Mode

For quick testing and iteration during development:

bash
# Run directly with ts-node (no compilation step needed)
npx ts-node src/index.ts

This is slower but provides instant feedback without a build step.

Production Mode

For production deployments:

bash
# Build with TypeScript compiler (compiles to JavaScript)
pnpm run build

# Run the compiled JavaScript (faster than ts-node)
pnpm start
# or directly:
node dist/src/index.js

The compiled JavaScript runs faster and is more suitable for production environments.

Expected Output

When running successfully, you should see:

[13:45:01] INFO: Starting Trading Agent
[13:45:02] INFO: Wallet initialized: 0x7b2f9e4a3c8d1f6b5a2e7d9c4b8a3e1f6c5d2a9b
[13:45:02] INFO: O2Client initialized successfully
[13:45:02] INFO: Trading agent initialized successfully
[13:45:02] INFO: Starting scheduler for ETH/USDC with 2.5s interval
[13:45:03] INFO: Reference price: 2500.50
[13:45:03] INFO: Adjusted prices - Buy: 2750550000000, Sell: 2250450000000 (±10%)
[13:45:03] INFO: Order size: 40000000 ETH
[13:45:03] INFO: Buy order placed (234ms) - Price: 2750550000000, Qty: 40000000
[13:45:03] INFO: Order created: 0x1234567890abcdef...
[13:45:04] INFO: Sell order placed (198ms) - Price: 2250450000000, Qty: 40000000
[13:45:04] INFO: Order created: 0xfedcba0987654321...
[13:45:06] INFO: Reference price: 2501.25
[13:45:06] INFO: Adjusted prices - Buy: 2751375000000, Sell: 2251125000000 (±10%)
...

Conclusion

Congrats you now have a complete trading agent that:

  • Fetches real-time prices from Bitget
  • Places automated buy and sell orders on o2

Key Reminders:

  • Start on testnet with small orders to validate your setup
  • Monitor logs to ensure orders are filling successfully
  • Keep your session private key secure

For additional resources, refer to the o2 API Documentation and the Fee Structure to understand trading costs.