Ejemplo n.º 1
0
    def testSqlDam(self):
        dam = SqlDAM(echo=False)
        dam.setup({"db": 'sqlite:////tmp/sqldam.sqlite'})
        dam.setSymbol("test")

        quotes = [
            Quote(*[
                '1320676200', '32.59', '32.59', '32.58', '32.58', '65213', None
            ]),
            Quote(*[
                '1320676201', '32.60', '32.60', '32.59', '32.59', '65214', None
            ])
        ]
        ticks = [
            Tick(*['1320676200', '32.59', '32.59', '32.58', '32.58', '65213']),
            Tick(*['1320676201', '32.60', '32.60', '32.59', '32.59', '65214'])
        ]

        dam.writeQuotes(quotes)
        dam.writeTicks(ticks)
        dam.commit()
        print([
            str(quotes) for symbol, quotes in dam.readBatchTupleQuotes(
                ["test"], 0, None).items()
        ])
        print([str(quote) for quote in dam.readQuotes(0, None)])
        print([str(tick) for tick in dam.readTicks(0, "1320676201")])
        print([str(tick) for tick in dam.readTicks(0, "1320676202")])
Ejemplo n.º 2
0
    def testIsOrderMet(self):
        tc = TradingCenter()
        tick1 = Tick('time', 'open', 'high', 'low', 13.20, 'volume')
        order1 = Order(accountId=None,
                       side=Side.BUY,
                       symbol='symbol',
                       price=13.25,
                       share=10)
        order2 = Order(accountId=None,
                       side=Side.BUY,
                       symbol='symbol',
                       price=13.15,
                       share=10)
        order3 = Order(accountId=None,
                       side=Side.SELL,
                       symbol='symbol',
                       price=13.25,
                       share=10)
        order4 = Order(accountId=None,
                       side=Side.SELL,
                       symbol='symbol',
                       price=13.15,
                       share=10)

        self.assertEquals(True, tc.isOrderMet(tick1, order1))
        self.assertEquals(False, tc.isOrderMet(tick1, order2))
        self.assertEquals(False, tc.isOrderMet(tick1, order3))
        self.assertEquals(True, tc.isOrderMet(tick1, order4))
Ejemplo n.º 3
0
    def __rowResultToTick(self, row):
        ''' convert rowResult from Hbase to Tick'''
        keyValues = row.columns
        for field in TICK_FIELDS:
            key = "%s:%s" % (HBaseDAM.TICK, field)
            if 'time' != field and keyValues[key].value:
                keyValues[key].value = float(keyValues[key].value)

        return Tick(*[keyValues["%s:%s" % (HBaseDAM.TICK, field)].value for field in TICK_FIELDS])
Ejemplo n.º 4
0
    def testWriteExcel(self):
        writeDam = ExcelDAM()
        writeDam.setDir(self.targetPath)
        writeDam.setSymbol(self.symbol)

        for f in [
                writeDam.targetPath(ExcelDAM.QUOTE),
                writeDam.targetPath(ExcelDAM.TICK)
        ]:
            if os.path.exists(f):
                os.remove(f)

        quote1 = Quote('1320676200', '32.58', '32.58', '32.57', '32.57',
                       '65212', None)
        quote2 = Quote('1320676201', '32.59', '32.59', '32.58', '32.58',
                       '65213', None)
        tick1 = Tick('1320676200', '32.58', '32.58', '32.57', '32.57', '65212')
        tick2 = Tick('1320676201', '32.59', '32.59', '32.58', '32.58', '65213')
        writeDam.writeQuotes([quote1, quote2])
        writeDam.writeTicks([tick1, tick2])
    def testIsOrderMet(self):
        tc = TradingCenter()
        tick1 = Tick(datetime.now(), 30.0, 35.0, 13.20, 13.20, 100000)
        order1 = Order(accountId = None, side = Side.BUY, symbol = 'symbol', price = 13.25, share = 10)
        order2 = Order(accountId = None, side = Side.BUY, symbol = 'symbol', price = 13.15, share = 10)
        order3 = Order(accountId = None, side = Side.SELL, symbol = 'symbol', price = 13.25, share = 10)
        order4 = Order(accountId = None, side = Side.SELL, symbol = 'symbol', price = 13.15, share = 10)

        self.assertEquals(True, tc.isOrderMet(tick1, order1))
        self.assertEquals(False, tc.isOrderMet(tick1, order2))
        self.assertEquals(False, tc.isOrderMet(tick1, order3))
        self.assertEquals(True, tc.isOrderMet(tick1, order4))
Ejemplo n.º 6
0
    def testIndexTicks_tick(self):
        tickTime1Dam1 = Tick('time1', 'open1', 'high1', 'low1', 'close1',
                             'volume1')
        tickTime2Dam1 = Tick('time2', 'open2', 'high2', 'low2', 'close2',
                             'volume2')
        tickTime1Dam2 = Tick('time1', 'open11', 'high11', 'low11', 'close11',
                             'volume11')
        tickTime2Dam2 = Tick('time2', 'open22', 'high22', 'low22', 'close22',
                             'volume22')

        dam1 = self.mock.CreateMock(BaseDAM)
        dam1.readTicks(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
            [tickTime1Dam1, tickTime2Dam1])

        dam2 = self.mock.CreateMock(BaseDAM)
        dam2.readTicks(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
            [tickTime1Dam2, tickTime2Dam2])

        tf = TickFeeder()
        tf.inputType = TickFeeder.TICK_TYPE
        tf._TickFeeder__source = {'s1': dam1, 's2': dam2}

        self.mock.ReplayAll()
        timeTicks = tf.indexTicks()
        self.mock.VerifyAll()

        print(timeTicks)
        self.assertEquals(
            {
                'time1': {
                    's1': tickTime1Dam1,
                    's2': tickTime1Dam2
                },
                'time2': {
                    's1': tickTime2Dam1,
                    's2': tickTime2Dam2
                }
            }, timeTicks)
Ejemplo n.º 7
0
    def getTicks(self, symbol, start, end):
        """
        Get tick prices for the given ticker symbol.
        @symbol: stock symbol
        @interval: interval in mins(google finance only support query till 1 min)
        @start: start date(YYYYMMDD)
        @end: end date(YYYYMMDD)

        start and end is disabled since only 15 days data will show

        @Returns a nested list.
        """
        #TODO, parameter checking
        try:
            #start = string2EpochTime(start)
            #end = string2EpochTime(end)
            #period = end - start
            period = 15
            #url = 'http://www.google.com/finance/getprices?q=%s&i=%s&p=%sd&f=d,o,h,l,c,v&ts=%s' % (symbol, interval, period, start)
            url = 'http://www.google.com/finance/getprices?q=%s&i=61&p=%sd&f=d,o,h,l,c,v' % (
                symbol, period)
            try:
                page = self.__request(url)
            except UfException as ufExcep:
                ##if symol is not right, will get 400
                if Errors.NETWORK_400_ERROR == ufExcep.getCode:
                    raise UfException(
                        Errors.STOCK_SYMBOL_ERROR,
                        "Can find data for stock %s, symbol error?" % symbol)
                raise ufExcep

            days = page.readlines()[7:]  # first 7 line is document
            # sample values:'a1316784600,31.41,31.5,31.4,31.43,150911'
            values = [day.split(',') for day in days]

            data = []
            for value in values:
                data.append(
                    Tick(value[0][1:].strip(), value[4].strip(),
                         value[2].strip(), value[3].strip(), value[1].strip(),
                         value[5].strip()))

            return data

        except BaseException:
            raise UfException(
                Errors.UNKNOWN_ERROR,
                "Unknown Error in GoogleFinance.getTicks %s" %
                traceback.format_exc())
Ejemplo n.º 8
0
    def testLoadTicks_tick(self):
        time1 = datetime.now()
        time2 = datetime.now()
        tickTime1Dam1 = Tick(time1, 100.0, 100.0, 100.0, 100.0, 100.0)
        tickTime2Dam1 = Tick(time2, 100.0, 100.0, 100.0, 100.0, 100.0)
        tickTime1Dam2 = Tick(time1, 100.0, 100.0, 100.0, 100.0, 100.0)
        tickTime2Dam2 = Tick(time2, 100.0, 100.0, 100.0, 100.0, 100.0)

        dam1 = self.mock.CreateMock(BaseDAM)
        dam1.readTicks(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
            [tickTime1Dam1, tickTime2Dam1])

        dam2 = self.mock.CreateMock(BaseDAM)
        dam2.readTicks(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
            [tickTime1Dam2, tickTime2Dam2])

        tf = TickFeeder()
        tf._TickFeeder__source = {'s1': dam1, 's2': dam2}
        tf.inputType = TICK
        appGlobal[TRADE_TYPE] = TICK

        self.mock.ReplayAll()
        timeTicks = tf.loadTicks()
        self.mock.VerifyAll()

        self.assertEquals(
            {
                time1: {
                    's1': tickTime1Dam1,
                    's2': tickTime1Dam2
                },
                time2: {
                    's1': tickTime2Dam1,
                    's2': tickTime2Dam2
                }
            }, timeTicks)
Ejemplo n.º 9
0
    def readTicks(self, start, end):
        ''' read ticks '''
        rows = self.__hbase.scanTable(self.tableName(HBaseDAM.TICK), [HBaseDAM.TICK], start, end)
        return [self.__rowResultToTick(row) for row in rows]

    def writeTicks(self, ticks):
        ''' read quotes '''
        tName = self.tableName(HBaseDAM.TICK)
        if tName not in self.__hbase.getTableNames():
            self.__hbase.createTable(tName, [ColumnDescriptor(name=HBaseDAM.TICK, maxVersions=5)])

        for tick in ticks:
            self.__hbase.updateRow(self.tableName(HBaseDAM.TICK),
                                   tick.time,
                                   [Mutation(column = "%s:%s" % (HBaseDAM.TICK, field),
                                             value = getattr(tick, field) ) for field in TICK_FIELDS])

if __name__ == '__main__':
    dam = HBaseDAM()
    dam.setSymbol("test")
    quotes = [Quote(*['1320676200', '32.59', '32.59', '32.58', '32.58', '65213', None]),
              Quote(*['1320676201', '32.60', '32.60', '32.59', '32.59', '65214', None])]
    ticks = [Tick(*['1320676200', '32.59', '32.59', '32.58', '32.58', '65213']),
              Tick(*['1320676201', '32.60', '32.60', '32.59', '32.59', '65214'])]

    dam.writeQuotes(quotes)
    dam.writeTicks(ticks)
    print(dam.readQuotes("0", None))
    print(dam.readTicks("0", "1320676201"))
    print(dam.readTicks("0", "1320676202"))
Ejemplo n.º 10
0
 def readTicks(self, start, end):
     ''' read ticks '''
     ticks = self.__readData(self.targetPath(ExcelDAM.TICK), start, end)
     return [Tick(*tick) for tick in ticks]
Ejemplo n.º 11
0
 def __sqlToTupleTick(self, row):
     ''' convert row result to tuple Tick '''
     return Tick(row.time, row.open, row.high, row.low, row.close,
                 row.volume)