# 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: ```bash 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. ```python 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.