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")])
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))
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])
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))
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)
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())
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)
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"))
def readTicks(self, start, end): ''' read ticks ''' ticks = self.__readData(self.targetPath(ExcelDAM.TICK), start, end) return [Tick(*tick) for tick in ticks]
def __sqlToTupleTick(self, row): ''' convert row result to tuple Tick ''' return Tick(row.time, row.open, row.high, row.low, row.close, row.volume)