Files
the_information_nexus/projects/forex_algo_trading.md

4.8 KiB

Swing Trading Project with EUR/USD Using Oanda and scikit-learn

Step 1: Environment Setup

Install Python

Ensure Python 3.8+ is installed.

Create a Virtual Environment

Navigate to your project directory and run:

python -m venv venv
source venv/bin/activate  # Unix/macOS
venv\Scripts\activate     # Windows
deactivate

Install Essential Libraries

Create requirements.txt with the following content:

pandas
numpy
matplotlib
seaborn
scikit-learn
jupyterlab
oandapyV20
requests

Install with pip install -r requirements.txt.

Step 2: Project Structure

Organize your directory as follows:

swing_trading_project/
├── data/
├── notebooks/
├── src/
│   ├── __init__.py
│   ├── data_fetcher.py
│   ├── feature_engineering.py
│   ├── model.py
│   └── backtester.py
├── tests/
├── requirements.txt
└── README.md

Step 3: Fetch Historical Data

  • Sign up for an Oanda practice account and get an API key.
  • Use oandapyV20 in data_fetcher.py to request historical EUR/USD data. Consider H4 or D granularity.
  • Save the data to data/ as CSV.
import os
import pandas as pd
from oandapyV20 import API  # Import the Oanda API client
import oandapyV20.endpoints.instruments as instruments

# Set your Oanda API credentials and configuration for data fetching
ACCOUNT_ID = 'your_account_id_here'
ACCESS_TOKEN = 'your_access_token_here'
# List of currency pairs to fetch. Add or remove pairs as needed.
CURRENCY_PAIRS = ['EUR_USD', 'USD_JPY', 'GBP_USD', 'AUD_USD', 'USD_CAD']
TIME_FRAME = 'H4'  # 4-hour candles, change as per your analysis needs
DATA_DIRECTORY = 'data'  # Directory where fetched data will be saved

# Ensure the data directory exists, create it if it doesn't
if not os.path.exists(DATA_DIRECTORY):
    os.makedirs(DATA_DIRECTORY)

def fetch_and_save_forex_data(account_id, access_token, currency_pairs, time_frame, data_dir):
    """Fetch historical forex data for specified currency pairs and save it to CSV files."""
    # Initialize the Oanda API client with your access token
    api_client = API(access_token=access_token)
    
    for pair in currency_pairs:
        # Define the parameters for the data request: time frame and number of data points
        request_params = {"granularity": time_frame, "count": 5000}
        
        # Prepare the data request for fetching candle data for the current currency pair
        data_request = instruments.InstrumentsCandles(instrument=pair, params=request_params)
        # Fetch the data
        response = api_client.request(data_request)
        # Extract the candle data from the response
        candle_data = response.get('candles', [])
        
        # If data was fetched, proceed to save it
        if candle_data:
            # Convert the candle data into a pandas DataFrame
            forex_data_df = pd.DataFrame([{
                'Time': candle['time'],
                'Open': float(candle['mid']['o']),
                'High': float(candle['mid']['h']),
                'Low': float(candle['mid']['l']),
                'Close': float(candle['mid']['c']),
                'Volume': candle['volume']
            } for candle in candle_data])
            
            # Construct the filename for the CSV file
            csv_filename = f"{pair.lower()}_data.csv"
            # Save the DataFrame to a CSV file in the specified data directory
            forex_data_df.to_csv(os.path.join(data_dir, csv_filename), index=False)
            print(f"Data for {pair} saved to {csv_filename}")

def main():
    """Orchestrates the data fetching and saving process."""
    print("Starting data fetching process...")
    # Call the function to fetch and save data for the configured currency pairs
    fetch_and_save_forex_data(ACCOUNT_ID, ACCESS_TOKEN, CURRENCY_PAIRS, TIME_FRAME, DATA_DIRECTORY)
    print("Data fetching process completed.")

if __name__ == '__main__':
    # Execute the script
    main()

Step 4: Exploratory Data Analysis

  • Create a new Jupyter notebook in notebooks/.
  • Load the CSV with pandas and perform initial exploration. Plot closing prices and moving averages.

Step 5: Basic Feature Engineering

  • In the notebook, add technical indicators as features (e.g., SMA 50, SMA 200, RSI) using pandas.
  • Investigate the relationship between these features and price movements.

Step 6: Initial Model Training

  • In model.py, fit a simple scikit-learn model (e.g., LinearRegression, LogisticRegression) to predict price movements.
  • Split data into training and testing sets to evaluate the model's performance.

Step 7: Documentation

  • Document your project's setup, objectives, and findings in README.md.

Next Steps

  • Refine features, try different models, and develop a backtesting framework as you progress.