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 __rowResultToQuote(self, row): ''' convert rowResult from Hbase to Quote''' keyValues = row.columns for field in QUOTE_FIELDS: key = "%s:%s" % (HBaseDAM.QUOTE, field) if 'time' != field and keyValues[key].value: keyValues[key].value = float(keyValues[key].value) return Quote(*[keyValues["%s:%s" % (HBaseDAM.QUOTE, field)].value for field in QUOTE_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 getQuotes(self, symbol, start, end): """ Get historical prices for the given ticker symbol. Date format is 'YYYY-MM-DD' Returns a nested list. """ try: start = str(start).replace('-', '') end = str(end).replace('-', '') url = 'http://ichart.yahoo.com/table.csv?s=%s&' % symbol + \ 'd=%s&' % str(int(end[4:6]) - 1) + \ 'e=%s&' % str(int(end[6:8])) + \ 'f=%s&' % str(int(end[0:4])) + \ 'g=d&' + \ 'a=%s&' % str(int(start[4:6]) - 1) + \ 'b=%s&' % str(int(start[6:8])) + \ 'c=%s&' % str(int(start[0:4])) + \ 'ignore=.csv' days = urllib.urlopen(url).readlines() values = [day[:-2].split(',') for day in days] # sample values:[['Date', 'Open', 'High', 'Low', 'Close', 'Volume', 'Adj Clos'], \ # ['2009-12-31', '112.77', '112.80', '111.39', '111.44', '90637900', '109.7']...] data = [] for value in values[1:]: data.append( Quote(value[0], value[1], value[2], value[3], value[4], value[5], value[6])) dateValues = sorted(data, key=lambda q: q.time) return dateValues except IOError: raise UfException(Errors.NETWORK_ERROR, "Can't connect to Yahoo server") except BaseException: raise UfException( Errors.UNKNOWN_ERROR, "Unknown Error in YahooFinance.getHistoricalPrices %s" % traceback.format_exc())
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 readQuotes(self, start, end): ''' read quotes ''' quotes = self.__readData(self.targetPath(ExcelDAM.QUOTE), start, end) return [Quote(*quote) for quote in quotes]