def test_alpaca_intraday(self): provider = JSONDataProvider(['data/alpaca'], ['t', 'o', 'h', 'l', 'c', 'v'], epoch=True, verbose=2) symbol_datas = [ SymbolData('SPY', '15min', '15min', '2020-05-11', '2020-05-13', rth_only=False), SymbolData('SPY', '5min', '5min', '2020-05-11', '2020-05-13', rth_only=False) ] datas = provider.get_datas(symbol_datas) assert datas[0].timeframe == '15min' assert datas[1].timeframe == '5min' assert datas[0].df.loc['2020-05-12 16:15']['Close'] == 285.48 assert datas[1].df.loc['2020-05-12 16:35']['Close'] == 284.88
def test_alpaca_week(self): provider = JSONDataProvider(['data/alpaca'], [ 'startEpochTime', 'openPrice', 'highPrice', 'lowPrice', 'closePrice', 'volume' ], epoch=True, verbose=2) symbol_datas = [ SymbolData('XONE', 'day', 'day', '2020-01-11', '2020-05-17', rth_only=True), SymbolData('XONE', 'day', 'week', '2020-01-11', '2020-05-17', rth_only=True) ] datas = provider.get_datas(symbol_datas) daily = datas[0].df weekly = datas[1].df #assert d.timeframe == 'week' print(daily) print(weekly)
def test_weekly_volume(self): provider = CsvFileDataProvider(["data"]) spy_daily, spy_weekly = provider.get_dataframes([ SymbolData('SPY', 'day', 'day', '2010-01-01', '2017-01-01'), SymbolData('SPY', 'day', 'week', '2010-01-01', '2017-01-01') ]) assert spy_daily.loc['20160104':'20160108', 'Volume'].sum() == \ spy_weekly.loc['20160104']['Volume']
def test_resample_timeframe_metadata(self): provider = CsvFileDataProvider(["data"], verbose=2) datas = provider.get_datas([ SymbolData('SPY', 'day', 'day', '2016-01-01', '2016-12-31'), SymbolData('SPY', 'day', 'week', '2016-01-01', '2016-12-31'), SymbolData('SPY', 'day', 'month', '2016-01-01', '2016-12-31') ]) assert datas[0].timeframe == 'day' assert datas[1].timeframe == 'week' assert datas[2].timeframe == 'month'
def test_resample_timeframe(self): provider = CsvFileDataProvider(["data"], verbose=2) #df = provider.get_data(['AAPL_2018-01-06'], '2017-12-10', '2017-12-31', timeframe='5min', transform='60min', rth=True)[0] df = provider.get_dataframes([ SymbolData('AAPL_2018-01-06', '5min', '60min', '2017-12-10', '2017-12-31', rth_only=True) ])[0] # Assert 2017-12-29 09:30: O=170.71, H=170.71, L=169.71, C=169.93 assert str( df.loc[pd.to_datetime('2017-12-29 09:00:00')]['Open']) == "170.71" assert str( df.loc[pd.to_datetime('2017-12-29 09:00:00')]['High']) == "170.71" assert str( df.loc[pd.to_datetime('2017-12-29 09:00:00')]['Low']) == "169.71" assert str( df.loc[pd.to_datetime('2017-12-29 09:00:00')]['Close']) == "169.93" # Assert 2017-12-29 10:00: O=169.92, H=169.95, L=169.31, C=169.64 assert str( df.loc[pd.to_datetime('2017-12-29 10:00:00')]['Open']) == "169.92" assert str( df.loc[pd.to_datetime('2017-12-29 10:00:00')]['High']) == "169.95" assert str( df.loc[pd.to_datetime('2017-12-29 10:00:00')]['Low']) == "169.31" assert str( df.loc[pd.to_datetime('2017-12-29 10:00:00')]['Close']) == "169.64" # Assert 2017-12-29 16:00: O=169.23 assert str( df.loc[pd.to_datetime('2017-12-29 16:00:00')]['Open']) == "169.23"
def test_filter_days(self): provider = CsvFileDataProvider(["data"]) nyse = mcal.get_calendar('NYSE') days = nyse.valid_days(start_date='2000-01-01', end_date='2017-01-01') daily = provider.get_dataframes( [SymbolData('DIS', 'day', 'day', '2000-01-01', '2017-01-01')])[0] assert len(days) == len(daily)
def test_resample_multi_timeframes(self): provider = CsvFileDataProvider(["data"], verbose=2) (min60, daily, weekly) = provider.get_datas([ SymbolData('VOLV.B_5min', '5min', '60min', '', '', rth_only=False), SymbolData('VOLV.B_5min', '5min', 'day', '', '', rth_only=False), SymbolData('VOLV.B_5min', '5min', 'week', '', '', rth_only=False) ]) assert str(min60.df.loc[pd.to_datetime('2020-04-01 10:00:00')] ['Open']) == "115.45" assert str( daily.df.loc[pd.to_datetime('2020-04-01')]['Open']) == "116.0" assert str( round(daily.df.loc[pd.to_datetime('2020-04-01')]['Close'], 2)) == "112.83" assert str( weekly.df.loc[pd.to_datetime('2020-04-14')]['Open']) == "130.0"
def test_daily_trading_days(self): provider = CsvFileDataProvider(["data"]) spy_daily = provider.get_dataframes( [SymbolData('SPY', 'day', 'day', '2010-01-01', '2017-01-01')])[0] assert spy_daily.loc['20160104']['Day'] == 1 # Monday Jan. 4 assert spy_daily.loc['20160108']['Day'] == 5 # Friday Jan. 8 assert spy_daily.loc['20160111']['Day'] == 6 # Monday Jan. 11 assert spy_daily.loc['20161230']['Day'] == 252 # 240? Friday Dec. 30
def test_infront_daily(self): provider = CsvFileDataProvider(["data"]) nyse = mcal.get_calendar('NYSE') days = nyse.valid_days(start_date='2008-01-01', end_date='2015-12-31') daily_xlp = provider.get_dataframes( [SymbolData('NYSF_XLP', 'day', 'day', '2008-01-01', '2015-12-31')])[0] assert str(daily_xlp.loc['2010-11-05']['High']) == '29.2301'
def test_filter_rth(self): provider = CsvFileDataProvider(["data"]) df = provider.get_dataframes([ SymbolData('AAPL_2017-11-03', '5min', '5min', '2017-10-10', '2017-10-31', rth_only=True) ])[0] assert len(df.at_time('09:25:00')) == 0 assert len(df.at_time('09:30:00')) > 0 assert len(df.at_time('16:05:00')) == 0
def test_daily_with_snapshots(self): provider = JSONDataProvider( ['data/alpaca-v2'], ['DateTime', 'Open', 'High', 'Low', 'Close', 'Volume'], verbose=2) sym_datas = [ SymbolData('AAPL', 'day', 'day', '2021-01-01', '2021-12-02') ] df = provider.get_datas(sym_datas, snapshots=True)[0].df assert df.loc['2021-01-05']['Close'] == 130.20761 assert df.loc['2021-11-30'][ 'Close'] == 165.3 # Last bar from daily file assert df.loc['2021-12-01'][ 'Close'] == 164.77 # Single bar from snapshots file
def test_alpaca_intraday_v2(self): provider = JSONDataProvider( ['data/alpaca-v2'], ['DateTime', 'Open', 'High', 'Low', 'Close', 'Volume'], verbose=2) sym_datas = [ SymbolData('AAPL', '1min', '1min', '2021-12-01', '2021-12-03', rth_only=False) ] df = provider.get_datas(sym_datas)[0].df assert df.loc['2021-12-03 07:59']['Close'] == 163.76
self.logger.warning( f"Could not find or open {symbol_data.symbol} in {self.paths}") return pd.DataFrame() else: raise Exception("{} not found in {}".format( symbol_data.symbol, self.paths)) def add_quotes(self, data, ticker): """ Quotes are not available... """ return data if __name__ == '__main__': paths = [f"/Users/{os.environ['USER']}/OneDrive/Data/tradingview"] tradingview = CsvFileDataProvider( paths, col_names=['time', 'open', 'high', 'low', 'close', 'Volume'], epoch=True) # alphavantage = CsvFileDataProvider(paths, col_names=['timestamp', 'open', 'high', 'low', 'close', 'Volume'], epoch=False) # data = provider.get_data(['OMXS30 F18-OMF_1 Minute'], '2017-12-01', '2017-12-31', timeframe='1min', transform='1h') symbols_data = [ SymbolData('BIDU', '5min', '5min', '2021-02-24 09:30', '2021-02-26 16:00') # SymbolData('SKA_B_1H', '60min', '60min', '2020-04-02 10:00:00', '2020-04-03 15:00:00') ] datas = asyncio.run(tradingview.get_datas_async(symbols_data)) df = datas[0].df print(df.tail())