Example #1
0
    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
Example #2
0
    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)
Example #3
0
    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"
Example #6
0
 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"
Example #8
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
Example #9
0
    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
Example #11
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
Example #12
0
 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())