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])
    def testTotalValue(self):
        share = 10
        price = 9.1
        curPrice = 10.1
        account = Account(1000, 1)
        account._Account__holdings = {'stock1': (share, price)}
        account.setLastTickDict({'stock1': Quote(0, 0, 0, 0, curPrice, 0, 0)})

        totalValue = account.getTotalValue()
        self.assertAlmostEquals(1000 + share * curPrice, totalValue)
    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 #5
0
    def testLoadTicks_quote(self):
        time1 = datetime.now()
        time2 = datetime.now()
        quoteTime1Dam1 = Quote(time1, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0)
        quoteTime2Dam1 = Quote(time2, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0)
        quoteTime1Dam2 = Quote(time1, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0)
        quoteTime2Dam2 = Quote(time2, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0)

        dam1 = self.mock.CreateMock(BaseDAM)
        dam1.readQuotes(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
            [quoteTime1Dam1, quoteTime2Dam1])

        dam2 = self.mock.CreateMock(BaseDAM)
        dam2.readQuotes(mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(
            [quoteTime1Dam2, quoteTime2Dam2])

        tf = TickFeeder()
        tf.inputType = QUOTE
        appGlobal[TRADE_TYPE] = QUOTE

        tf._TickFeeder__source = {'s1': dam1, 's2': dam2}

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

        self.assertEquals(
            {
                time1: {
                    's1': quoteTime1Dam1,
                    's2': quoteTime1Dam2
                },
                time2: {
                    's1': quoteTime2Dam1,
                    's2': quoteTime2Dam2
                }
            }, timeTicks)
Exemple #6
0
    def getQuotes(self, symbol, start, end):
        """
        Get historical prices for the given ticker symbol.
        Date format is 'YYYYMMDD'

        Returns a nested list.
        """
        try:
            url = 'http://www.google.com/finance/historical?q=%s&startdate=%s&enddate=%s&output=csv' % (
                symbol, start, end)
            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()
            values = [day.split(',') for day in days]
            # sample values:[['Date', 'Open', 'High', 'Low', 'Close', 'Volume'], \
            #              ['2009-12-31', '112.77', '112.80', '111.39', '111.44', '90637900']...]
            data = []
            for value in values[1:]:
                date = convertGoogCSVDate(value[0])
                try:
                    data.append(
                        Quote(date, value[1].strip(), value[2].strip(),
                              value[3].strip(), value[4].strip(),
                              value[5].strip(), None))
                except Exception:
                    LOG.warning(
                        "Exception when processing %s at date %s for value %s"
                        % (symbol, date, value))

            #dateValues = sorted(data, key=itemgetter(0))
            dateValues = sorted(data, key=lambda x: x.time)
            return dateValues

        except BaseException:
            raise UfException(
                Errors.UNKNOWN_ERROR,
                "Unknown Error in GoogleFinance.getHistoricalPrices %s" %
                traceback.format_exc())
    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]
Exemple #10
0
 def __sqlToQuote(self, row):
     ''' convert row result to Quote '''
     return Quote(row.time, row.open, row.high, row.low, row.close,
                  row.volume, row.adjClose)