Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
 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')
Ejemplo n.º 3
0
 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')
Ejemplo n.º 4
0
'''-------------------------------------- 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),
Ejemplo n.º 5
0
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']
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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']
Ejemplo n.º 8
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)
Ejemplo n.º 9
0
'''-------------------------------------- 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))
Ejemplo n.º 10
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)