diff --git a/projects/forex_algo_trading.md b/projects/forex_algo_trading.md index 86e5054..013a814 100644 --- a/projects/forex_algo_trading.md +++ b/projects/forex_algo_trading.md @@ -55,55 +55,64 @@ swing_trading_project/ ```python import os import pandas as pd -from oandapyV20 import API +from oandapyV20 import API # Import the Oanda API client import oandapyV20.endpoints.instruments as instruments -# Configuration +# Set your Oanda API credentials and configuration for data fetching ACCOUNT_ID = 'your_account_id_here' ACCESS_TOKEN = 'your_access_token_here' -INSTRUMENTS = ['EUR_USD', 'USD_JPY', 'GBP_USD', 'AUD_USD', 'USD_CAD'] # Extendable to more pairs -GRANULARITY = 'H4' # Can be parameterized as needed -DATA_DIR = 'data' +# 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 -def fetch_and_save_data(account_id, access_token, instruments, granularity, data_dir): - """Fetch historical forex data for specified instruments and save to CSV.""" - client = API(access_token=access_token) +# 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) - if not os.path.exists(data_dir): - os.makedirs(data_dir) - - for instrument in instruments: - params = { - "granularity": granularity, - "count": 5000 # Adjust based on needs - } + 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} - data_request = instruments.InstrumentsCandles(instrument=instrument, params=params) - data = client.request(data_request) - candles = data.get('candles', []) + # 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 candles: - df = pd.DataFrame([{ + # 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 candles]) + } for candle in candle_data]) - # Save to CSV - output_filename = f"{instrument.lower()}_data.csv" - df.to_csv(os.path.join(data_dir, output_filename), index=False) - print(f"Data saved for {instrument} to {output_filename}") + # 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(): - """Main function to orchestrate data fetching and saving.""" - print("Fetching data for instruments...") - fetch_and_save_data(ACCOUNT_ID, ACCESS_TOKEN, INSTRUMENTS, GRANULARITY, DATA_DIR) - print("Data fetching and saving complete.") + """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() ```