# Mean Reversion Trading System for EUR/USD Welcome to the Mean Reversion Trading System project, specifically tailored for the EUR/USD forex pair. This project combines the precision of machine learning (ML), the robustness of Backtrader for strategy evaluation, and the real-world applicability of trading via the Oanda platform. It’s structured for scalability, leveraging containerization for development consistency and serverless architecture for operational efficiency. ## Project Overview This system is designed for traders and developers interested in exploring and deploying automated trading strategies. It focuses on the mean reversion principle, a well-regarded concept in finance that suggests asset prices and returns eventually move back towards the mean or average. This project aims to capitalize on this phenomenon using historical EUR/USD data, predictive modeling, and live execution. ## Project Structure ``` /mean-reversion-trading |-- /data | |-- /raw # Store raw historical data from Oanda | `-- /processed # Processed data, ready for ML | |-- /models | |-- /trained # Location for storing trained models | `-- model_training.py # Script for ML model training | |-- /strategies | |-- mean_reversion_strategy.py # Strategy implementation for Backtrader | |-- /backtesting | |-- backtest.py # Backtesting script using Backtrader | |-- /trading | |-- live_trade.py # Live trading execution script | |-- /utils | |-- data_fetcher.py # Utility script for data retrieval | |-- feature_engineering.py # Data processing and feature engineering | `-- indicators.py # Custom technical indicators | |-- Dockerfile # For containerization |-- requirements.txt # Python package dependencies `-- README.md # Project documentation ``` ### Detailed Component Overview - **/data**: Contains both raw and processed datasets. Raw data is directly fetched from Oanda, while processed data includes features engineered to enhance model training. - **/models**: This directory is pivotal for the ML lifecycle, encompassing scripts for training, validation, and serialization of models. - **/strategies**: Implements trading strategies within the Backtrader framework, enabling a seamless transition from theory to practical testing. - **/backtesting & /trading**: These separate concerns between historical strategy evaluation and real-world application, ensuring a clear pathway from concept to execution. - **/utils**: A collection of utility scripts support the data pipeline, from fetching and cleaning to feature engineering, alongside custom indicator development for strategic analysis. ## Getting Started ### Installation Ensure Python 3.8+ is installed on your system. Clone this repository and navigate into the project directory. Set up a virtual environment and install the required dependencies: ```sh python -m venv venv source venv/bin/activate # or venv\Scripts\activate on Windows pip install -r requirements.txt ``` ### Environment Configuration Create a `.env` file in the project root. Add your Oanda API credentials here: ```plaintext OANDA_ACCOUNT_ID= OANDA_API_KEY= ``` ### Running the Project #### Data Preparation Fetch and prepare your data for analysis and model training: ```sh python utils/data_fetcher.py ``` #### Model Training Train your model using historical data: ```sh python models/model_training.py ``` #### Backtesting Evaluate your strategy with Backtrader: ```sh python backtesting/backtest.py ``` #### Live Trading Execute your strategy in the live market: ```sh python trading/live_trade.py ``` ## Deployment For containerization, build the Docker image with: ```sh docker build -t mean-reversion-trading . ``` To run the containerized application: ```sh docker run -it mean-reversion-trading ``` For serverless deployment, refer to your cloud provider's documentation for deploying Docker containers and setting up serverless functions for tasks like scheduled data fetching and model retraining. ## Contributing We welcome contributions! Whether it's feature requests, bug reports, or code contributions, please feel free to reach out or submit a pull request. ## License Distributed under the MIT License. See `LICENSE` for more information.