def setUp(self): ''' called at the beginning of each test ''' self.log_handler = logbook.TestHandler() self.log_handler.push_thread() self.tickers = ['google', 'apple', 'starbucks'] self.fields = ['close', 'volume'] self.start = dt.datetime(2006, 1, 1, tzinfo = pytz.utc) self.end = dt.datetime(2010, 12, 31, tzinfo = pytz.utc) self.offset = pd.datetools.BMonthEnd() self.agent = DataAgent()
def setUp(self): ''' called at the beginning of each test ''' self.tickers = ['starbucks'] self.fields = ['low', 'adj_close', 'volume'] self.start = dt.datetime(2004, 12, 1, tzinfo=pytz.utc) self.end = dt.datetime(2012, 12, 31, tzinfo=pytz.utc) self.offset = pd.datetools.BMonthEnd(4) self.timestamp = pd.date_range(self.start, self.end, freq=self.offset) self.agent = DataAgent() self.agent.connectTo(['remote', 'database'], db_name='stocks.db', lvl='critical')
def setUp(self): ''' called at the beginning of each test ''' self.tickers = ['starbucks'] self.fields = ['low', 'adj_close', 'volume'] self.start = dt.datetime(2004, 12, 1, tzinfo = pytz.utc) self.end = dt.datetime(2012, 12, 31, tzinfo = pytz.utc) self.offset = pd.datetools.BMonthEnd(4) self.timestamp = pd.date_range(self.start, self.end, freq = self.offset) self.agent = DataAgent() self.agent.connectTo(['remote', 'database'], db_name='stocks.db', lvl='critical')
'''-------------------------------------- Notes Zipline uses a benchmark data very interesting (see utils/factory.py and data/benchmark.py) Modifying it to take in parameter an action and to process associated market ? only s&p500 at the moment ''' if __name__ == '__main__': ''' ----------------------------------------------------------------- Data -----''' # Thiz tzinfo is annoying ! default to provide if forgotten, or the one sent #through the init of dataagent. See also zipline.loader_utils.py timestamp = date_range(dt.datetime(2004,12,31, tzinfo=pytz.utc), \ dt.datetime(2005,12,31, tzinfo=pytz.utc), freq='M') ticker = 'starbucks' #TODO implement a how method wich give the same results as in table #put in some DataAgent properties ? db_agent = DataAgent('stocks.db') data = db_agent.getQuotes([ticker], ['adj_close'], index=timestamp, \ save=False, reverse=True) #ts = Series(data[ticker]['adj_close'], name=ticker) ts = data['adj_close'][ticker] #ts = Series([31.18, 27.0, 25.91, 25.83, 24.76, 27.4, 25.83, 26.27, \ #24.51, 25.05, 28.28, 30.45, 30.51], index=timestamp) ''' ----------------------------------------------------------------------------------''' print print('-' * 60) #1 Simple monthly return between the end of December 2004 and the end of January 2005 compute = Quantitative(lvl='error') monthly_ret = compute.returns(ts, start=dt.datetime(2004, 12, 31),
sys.path.append(str(os.environ['QTRADE'])) from pyTrade.data.DataAgent import DataAgent from pyTrade.calculus.engine import Backtester from pyTrade.utils import LogSubsystem import pandas as pd import pytz from zipline.data.benchmarks import * from pyTrade.ai.genetic import Genetic, GeneticAlgorithm start = pd.datetime(2008, 6, 20, 0, 0, 0, 0, pytz.utc) end = pd.datetime(2010, 4, 1, 0, 0, 0, 0, pytz.utc) delta = pd.datetools.timedelta(days=1) dataobj = DataAgent('stocks.db') data_tmp = dataobj.getQuotes(['google'], ['open'], start=start, end=end, delta=delta, reverse=True) data = data_tmp['open'] def runBacktest(genes): '''-------------------------------------------- Parameters -----''' '''chromosome[short_window, long_window, buy_on_event, sell_on_event] ''' print('chromosome: {}'.format(genes)) short_window = genes['short_window'] long_window = round(short_window * genes['ma_rate'] / 2) buy_on_event = genes['buy_n']
class test_DataAgent(unittest.TestCase): ''' A test class for the data agent of quanTrade ''' def setUp(self): ''' called at the beginning of each test ''' self.log_handler = logbook.TestHandler() self.log_handler.push_thread() self.tickers = ['google', 'apple', 'starbucks'] self.fields = ['close', 'volume'] self.start = dt.datetime(2006, 1, 1, tzinfo = pytz.utc) self.end = dt.datetime(2010, 12, 31, tzinfo = pytz.utc) self.offset = pd.datetools.BMonthEnd() self.agent = DataAgent() def test_loadFromCSV(self): self.agent.connectTo(['database'], timezone=pytz.utc, level='info') timestamps = pd.date_range(self.start, self.end, freq=self.offset) quotes = self.agent.load_from_csv(self.tickers, index=timestamps, fields=self.fields, verbose=True) def test_connectToRemote(self): ''' DataAgent sources controller, make up connections with their initialisations ''' self.agent.connectTo(['remote'], timezone=pytz.utc, level='info') self.assertTrue(self.agent.connected['remote']) def test_connectToDB(self): self.agent.connectTo(['database'], db_name='stocks.db') self.assertTrue(self.agent.connected['database']) def test_getQuotes_Index(self): timestamp = pd.date_range(self.start, self.end, freq=self.offset) self.agent.connectTo(['remote', 'database'], db_name='stocks.db', lvl='critical') quotes = self.agent.getQuotes( self.tickers, self.fields, index=timestamp, save=False, reverse=False) self.assertTrue(isinstance(quotes[self.tickers[0]][self.fields[0]][5], float)) def test_getQuotes_Dates(self): self.agent.connectTo(['remote', 'database'], db_name='stocks.db', lvl='critical') quotes = self.agent.getQuotes( self.tickers, self.fields, start=self.start, end=self.end, delta=self.offset, save=False, reverse=False) self.assertTrue(isinstance(quotes[self.tickers[0]][self.fields[0]][5], float)) pdb.set_trace() def test__guessResolution(self): pass def test_help(self): self.agent.help('test') def tearDown(self): self.log_handler.pop_thread() if self.agent.connected['database']: print('Closing database') self.agent.db.close(commit=True)
sys.path.append(str(os.environ['QTRADE'])) from pyTrade.data.DataAgent import DataAgent from pyTrade.calculus.engine import Backtester from pyTrade.utils import LogSubsystem import pandas as pd import pytz from zipline.data.benchmarks import * from pyTrade.ai.genetic import Genetic, GeneticAlgorithm start = pd.datetime(2008, 6, 20, 0, 0, 0, 0, pytz.utc) end = pd.datetime(2010, 4, 1, 0, 0, 0, 0, pytz.utc) delta = pd.datetools.timedelta(days = 1) dataobj = DataAgent('stocks.db') data_tmp = dataobj.getQuotes(['google'], ['open'], start=start, end=end, delta=delta, reverse = True) data = data_tmp['open'] def runBacktest(genes): '''-------------------------------------------- Parameters -----''' '''chromosome[short_window, long_window, buy_on_event, sell_on_event] ''' print('chromosome: {}'.format(genes)) short_window = genes['short_window'] long_window = round(short_window * genes['ma_rate'] / 2) buy_on_event = genes['buy_n']
class test_getQuotes(unittest.TestCase): ''' A test class for the data agent of quanTrade ''' def setUp(self): ''' called at the beginning of each test ''' self.tickers = ['starbucks'] self.fields = ['low', 'adj_close', 'volume'] self.start = dt.datetime(2004, 12, 1, tzinfo = pytz.utc) self.end = dt.datetime(2012, 12, 31, tzinfo = pytz.utc) self.offset = pd.datetools.BMonthEnd(4) self.timestamp = pd.date_range(self.start, self.end, freq = self.offset) self.agent = DataAgent() self.agent.connectTo(['remote', 'database'], db_name='stocks.db', lvl='critical') ''' ---------------------------------------------------- Index -----------------------''' def test__makeIndex(self): kwargs = {'start' : self.start, 'end' : self.end, 'delta' : self.offset, 'period': pd.datetools.BMonthEnd(6)} made_idx = self.agent._makeIndex(kwargs) self.assertTrue(isinstance(made_idx, pd.DatetimeIndex)) self.assertTrue(made_idx.size > 0) self.assertTrue(made_idx == self.timestamp) def test__guessResolution(self): delta = self.agent._guessResolution(self.star, self.end) self.assertTrue(isinstance(delta, pd.datetools.DateOffset)) self.assertTrue(delta == pd.Datetools.BDay()) ''' ---------------------------------------------------- Remote ---------------------''' def test_getMinutelyQuotes(self): symbols = {self.tickers[0]: 'SBUX'} markets = {self.tickers[0]: 'NASDAQ'} df = self.remote.getMinutelyQuotes(symbols[self.tickers[0], markets[self.tickers[0], self.timestamp]]) df_fields = pd.DataFrame(df, columns=self.fields) cut_df = df.truncate(after=self.timestamp[-1]) def test_getHistoricalQuotes(self): symbols = {self.tickers[0]: 'SBUX'} markets = {self.tickers[0]: 'NASDAQ'} df = self.remote.getHistoricalQuotes(symbols[self.tickers[0], markets[self.tickers[0], self.timestamp]]) df_fields = pd.DataFrame(df, columns=self.fields) ''' ---------------------------------------------------- Database -------------------''' def test__inspectDB(self): db_df, idx_to_dl = self.agent._inspectDB(self.tickers[0], self.timestamp, self.fields) def test_getDataIndex(self): index = self.db.getDataIndex(self.tickers[0], self.fields, summary=False) def test_updateStockDb(self): panel = None self.db.updateStockDb(panel, Fields.QUOTES, drop=True) def test_getQuotesDB(self): quotes_db = self.db.getQuotesDB(self.tickers[0], self.timestamp) df = pd.DataFrame(quotes_db, columns=self.fields) clean_df = df.dropna() self.assertTrue(clean_df.index.tzinfo) def test_getTickersCode(self): symbols, markets = self.db.getTickersCodes(self.tickers) self.assertTrue(isinstance(symbols, list) and isinstance(markets, list)) self.assertTrue(symbols[self.tickers[0]] == 'SBUX') self.assertTrue(markets[self.tickers[0]] == 'NASDAQ') ''' ---------------------------------------------------- Principal ------------------''' def test_getQuotes_Index(self): quotes = self.agent.getQuotes( self.tickers, self.fields, index=self.timestamp, save=False, reverse=False) self.assertTrue(isinstance(quotes[self.tickers[0]][self.fields[0]][5], float)) def test_getQuotes_Dates(self): quotes = self.agent.getQuotes( self.tickers, self.fields, start=self.start, end=self.end, delta=self.offset, save=False, reverse=False) self.assertTrue(isinstance(quotes[self.tickers[0]][self.fields[0]][5], float)) pdb.set_trace() def tearDown(self): if self.agent.connected['database']: print('Closing database') self.agent.db.close(commit=True)
'''-------------------------------------- Notes Zipline uses a benchmark data very interesting (see utils/factory.py and data/benchmark.py) Modifying it to take in parameter an action and to process associated market ? only s&p500 at the moment ''' if __name__ == '__main__': ''' ----------------------------------------------------------------- Data -----''' # Thiz tzinfo is annoying ! default to provide if forgotten, or the one sent #through the init of dataagent. See also zipline.loader_utils.py timestamp = date_range(dt.datetime(2004,12,31, tzinfo=pytz.utc), \ dt.datetime(2005,12,31, tzinfo=pytz.utc), freq='M') ticker = 'starbucks' #TODO implement a how method wich give the same results as in table #put in some DataAgent properties ? db_agent = DataAgent('stocks.db') data = db_agent.getQuotes([ticker], ['adj_close'], index=timestamp, \ save=False, reverse=True) #ts = Series(data[ticker]['adj_close'], name=ticker) ts = data['adj_close'][ticker] #ts = Series([31.18, 27.0, 25.91, 25.83, 24.76, 27.4, 25.83, 26.27, \ #24.51, 25.05, 28.28, 30.45, 30.51], index=timestamp) ''' ----------------------------------------------------------------------------------''' print print('-'*60) #1 Simple monthly return between the end of December 2004 and the end of January 2005 compute = Quantitative(lvl='error') monthly_ret = compute.returns(ts, start=dt.datetime(2004,12,31), end=dt.datetime(2005,1,31)) print('1. Return = {} %'.format(monthly_ret*100.0))
class test_getQuotes(unittest.TestCase): ''' A test class for the data agent of quanTrade ''' def setUp(self): ''' called at the beginning of each test ''' self.tickers = ['starbucks'] self.fields = ['low', 'adj_close', 'volume'] self.start = dt.datetime(2004, 12, 1, tzinfo=pytz.utc) self.end = dt.datetime(2012, 12, 31, tzinfo=pytz.utc) self.offset = pd.datetools.BMonthEnd(4) self.timestamp = pd.date_range(self.start, self.end, freq=self.offset) self.agent = DataAgent() self.agent.connectTo(['remote', 'database'], db_name='stocks.db', lvl='critical') ''' ---------------------------------------------------- Index -----------------------''' def test__makeIndex(self): kwargs = { 'start': self.start, 'end': self.end, 'delta': self.offset, 'period': pd.datetools.BMonthEnd(6) } made_idx = self.agent._makeIndex(kwargs) self.assertTrue(isinstance(made_idx, pd.DatetimeIndex)) self.assertTrue(made_idx.size > 0) self.assertTrue(made_idx == self.timestamp) def test__guessResolution(self): delta = self.agent._guessResolution(self.star, self.end) self.assertTrue(isinstance(delta, pd.datetools.DateOffset)) self.assertTrue(delta == pd.Datetools.BDay()) ''' ---------------------------------------------------- Remote ---------------------''' def test_getMinutelyQuotes(self): symbols = {self.tickers[0]: 'SBUX'} markets = {self.tickers[0]: 'NASDAQ'} df = self.remote.getMinutelyQuotes(symbols[self.tickers[0], markets[self.tickers[0], self.timestamp]]) df_fields = pd.DataFrame(df, columns=self.fields) cut_df = df.truncate(after=self.timestamp[-1]) def test_getHistoricalQuotes(self): symbols = {self.tickers[0]: 'SBUX'} markets = {self.tickers[0]: 'NASDAQ'} df = self.remote.getHistoricalQuotes(symbols[self.tickers[0], markets[self.tickers[0], self.timestamp]]) df_fields = pd.DataFrame(df, columns=self.fields) ''' ---------------------------------------------------- Database -------------------''' def test__inspectDB(self): db_df, idx_to_dl = self.agent._inspectDB(self.tickers[0], self.timestamp, self.fields) def test_getDataIndex(self): index = self.db.getDataIndex(self.tickers[0], self.fields, summary=False) def test_updateStockDb(self): panel = None self.db.updateStockDb(panel, Fields.QUOTES, drop=True) def test_getQuotesDB(self): quotes_db = self.db.getQuotesDB(self.tickers[0], self.timestamp) df = pd.DataFrame(quotes_db, columns=self.fields) clean_df = df.dropna() self.assertTrue(clean_df.index.tzinfo) def test_getTickersCode(self): symbols, markets = self.db.getTickersCodes(self.tickers) self.assertTrue( isinstance(symbols, list) and isinstance(markets, list)) self.assertTrue(symbols[self.tickers[0]] == 'SBUX') self.assertTrue(markets[self.tickers[0]] == 'NASDAQ') ''' ---------------------------------------------------- Principal ------------------''' def test_getQuotes_Index(self): quotes = self.agent.getQuotes(self.tickers, self.fields, index=self.timestamp, save=False, reverse=False) self.assertTrue( isinstance(quotes[self.tickers[0]][self.fields[0]][5], float)) def test_getQuotes_Dates(self): quotes = self.agent.getQuotes(self.tickers, self.fields, start=self.start, end=self.end, delta=self.offset, save=False, reverse=False) self.assertTrue( isinstance(quotes[self.tickers[0]][self.fields[0]][5], float)) pdb.set_trace() def tearDown(self): if self.agent.connected['database']: print('Closing database') self.agent.db.close(commit=True)