import pandas as pd import schedule import time from database.ohlc import insert from datetime import datetime, date, timedelta from iqfeed import get_daily_data, get_historical_data, minutes # Symbols and timeframes to process. # TODO: Store in database to make re-deployment unnecessary. symbols_and_timeframes = [ ('SPX.XO', '5m'), ('SPX.XO', '1d'), ('SPY', '5m'), ('SPY', '1d'), ('VIX.XO', '5m'), ('VIX.XO', '1d'), ('VVIX.XO', '5m'), ('VVIX.XO', '1d'), ('VIX1D.XO', '1d'), ('VIX9D.XO', '1d'), ('VIX3M.XO', '1d'), ('VIX6M.XO', '1d'), ('VIX1Y.XO', '1d') ] def update_ohlc_data(): for symbol, timeframe in symbols_and_timeframes: yesterday = date.today() - timedelta(days=1) if timeframe == '1d': data = get_daily_data(symbol, start_date = datetime.combine(yesterday, datetime.min.time()), end_date = datetime.combine(yesterday, datetime.max.time())) else: # Assuming minutes for now. data = get_historical_data(symbol, minutes(int(timeframe[:-1])), start_date = datetime.combine(yesterday, datetime.min.time()), end_date = datetime.combine(yesterday, datetime.max.time())) data['Symbol'] = symbol data['Timeframe'] = timeframe data['Timestamp'] = pd.to_datetime(data['Date']) data['Date'] = data['Timestamp'].dt.date data = data.rename(columns={ 'Period Volume': 'Volume' }) data = data[['Symbol', 'Date', 'Timeframe', 'Timestamp', 'Open', 'High', 'Low', 'Close', 'Volume']] insert(data) if __name__ == '__main__': schedule.every().day.at('01:00', 'America/Los_Angeles').do(update_ohlc_data) while True: schedule.run_pending() time.sleep(1)