Exemple #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")])
    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])
Exemple #3
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])
Exemple #4
0
    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]