← Back to Projects
Financial TechnologyProduction

OANDA Trading Bot System

Automated forex trading platform with custom algorithmic strategies, real-time signal execution, and comprehensive risk management via OANDA's professional trading API.

TECHNOLOGY STACK

PythonOANDA v20 APIpandasnumpySQLiteasyncioAPSchedulerLogging

Project Overview

Challenge

Design and implement a fully automated forex trading system capable of executing multiple trading strategies simultaneously while maintaining strict risk controls and comprehensive logging for performance analysis.

System Architecture

  • • Modular strategy framework with pluggable algorithms
  • • Real-time market data processing and signal generation
  • • Multi-timeframe analysis and decision making
  • • Automated position sizing and risk management
  • • Comprehensive trade logging and performance tracking

Performance Metrics

24/7
Autonomous operation with monitoring
5 Strategies
Simultaneous algorithm execution
1-5 sec
Signal to execution latency

Trading Strategy Framework

The system implements multiple trading strategies with configurable parameters and risk controls. Each strategy operates independently while sharing common infrastructure for market data, execution, and risk management.

Strategy Base Class Implementation

Python
class TradingStrategy:
    def __init__(self, name, config):
        self.name = name
        self.config = config
        self.positions = {}
        self.risk_manager = RiskManager(config)
        
    def analyze_market(self, market_data):
        """Override in strategy implementations"""
        raise NotImplementedError
        
    def generate_signals(self, analysis):
        """Generate buy/sell signals based on analysis"""
        signals = []
        for instrument, data in analysis.items():
            signal = self._evaluate_signal(instrument, data)
            if signal and self.risk_manager.validate_signal(signal):
                signals.append(signal)
        return signals
        
    def execute_trades(self, signals):
        """Execute validated trading signals"""
        for signal in signals:
            try:
                order = self._create_order(signal)
                response = self.api.place_order(order)
                self._log_execution(signal, response)
            except Exception as e:
                self.logger.error(f"Execution failed: {e}")

Risk Management System

Risk Controls

Position Sizing

Dynamic position sizing based on account equity, volatility, and strategy confidence levels.

Drawdown Limits

Automatic strategy suspension when maximum drawdown thresholds are exceeded.

Correlation Monitoring

Real-time correlation analysis to prevent over-exposure to correlated currency pairs.

Risk Calculation Module

Python
def calculate_position_size(self, signal, account_balance):
    # Kelly Criterion with conservative scaling
    win_rate = self.get_strategy_win_rate()
    avg_win_loss_ratio = self.get_avg_win_loss_ratio()
    
    kelly_fraction = (win_rate * avg_win_loss_ratio - (1 - win_rate)) / avg_win_loss_ratio
    
    # Conservative scaling (25% of Kelly)
    risk_fraction = kelly_fraction * 0.25
    
    # Apply maximum risk per trade (2%)
    max_risk = account_balance * 0.02
    
    # Calculate position size based on stop loss
    stop_loss_pips = signal.stop_loss
    pip_value = self.get_pip_value(signal.instrument)
    
    position_size = min(
        max_risk / (stop_loss_pips * pip_value),
        account_balance * risk_fraction / (stop_loss_pips * pip_value)
    )
    
    return position_size

Technical Implementation

System Components

  • Market Data Handler: Real-time price feed processing
  • Strategy Engine: Signal generation and validation
  • Order Management: Trade execution and monitoring
  • Risk Controller: Position and portfolio risk management
  • Performance Tracker: Trade analysis and reporting
  • Alert System: Error handling and notifications

OANDA API Integration

  • • Real-time streaming price data
  • • Market order execution with slippage control
  • • Position monitoring and modification
  • • Account balance and margin tracking
  • • Historical data for backtesting
  • • Rate limiting and connection management

Development Decisions

This project required balancing performance, reliability, and maintainability while handling real financial transactions. Every architectural decision was made with fault tolerance and risk management as primary concerns.

Key Design Choices

Asynchronous Architecture

Used asyncio for concurrent market data processing and order execution without blocking strategy calculations.

SQLite Database

Local database for trade history and performance metrics, ensuring data persistence without external dependencies.

Modular Strategies

Plugin-based strategy system allowing easy addition of new algorithms without modifying core infrastructure.

Comprehensive Logging

Detailed logging of all decisions, trades, and system events for performance analysis and debugging.

Security & Compliance

Trading systems require robust security practices and compliance with financial regulations. This implementation includes secure credential management, audit trails, and risk controls.

Security Measures

  • • Environment-based credential storage
  • • API key rotation procedures
  • • Encrypted local data storage
  • • Network timeout and retry logic

Audit & Compliance

  • • Complete trade audit trail
  • • Performance reporting
  • • Risk exposure monitoring
  • • Regulatory trade sizing limits

Monitoring

  • • Real-time system health checks
  • • Automated alert notifications
  • • Performance metric tracking
  • • Error rate monitoring