def getTickData(self, queue):
     # self._db_connection = mysql.connector.connect(user='******', database='blackbox', host="192.168.0.8")
     cursor = self._db_connection.cursor()
     cursor.callproc('aggregated_data', [self.symbol.identifier, self.period, self.start_date.timestamp(), self.end_date.timestamp() ])
     for tick in self.cursor.stored_results():
         quote = Quote(self.symbol, tick[0], self.period, Tick(tick[0], tick[1], tick[1]))  # open
         quote.add_tick(Tick(tick[0], tick[2], tick[2]))  # high
         quote.add_tick(Tick(tick[0], tick[3], tick[3]))  # low
         quote.add_tick(Tick(tick[0], tick[4], tick[4]))  # close
         queue.put(quote)
     queue.put(None)
Example #2
0
class PriceConflator(object):
    def __init__(self, symbol, period, callback=None):
        if not isinstance(period, datetime.timedelta):
            raise TypeError("period must be a timedelta")
        self.symbol = symbol
        self.period = period
        self.callback = callback
        self.period_starting_timestamp = None
        self.current_quote = None

    @staticmethod
    def round_datetime_to_period(timestamp, period):
        return timestamp - timestamp % period

    def add_tick(self, tick):
        grouping_period = self.period.total_seconds()

        if not self.current_quote:
            self.period_starting_timestamp = PriceConflator.round_datetime_to_period(
                tick.timestamp, grouping_period)
            self.current_quote = Quote(
                self.symbol,
                datetime.datetime.utcfromtimestamp(
                    self.period_starting_timestamp), self.period, tick)
            return self.current_quote
        else:
            current_tick_timeblock = PriceConflator.round_datetime_to_period(
                tick.timestamp, grouping_period)
            if (current_tick_timeblock -
                    self.period_starting_timestamp) < grouping_period:
                self.current_quote.add_tick(tick)
            else:
                if self.callback is not None:
                    self.callback(self.current_quote)
                t = self.period_starting_timestamp + grouping_period
                while current_tick_timeblock >= (t + grouping_period):
                    self.callback(
                        Quote(
                            self.symbol, datetime.datetime.utcfromtimestamp(t),
                            self.period,
                            Tick(self.period_starting_timestamp,
                                 self.current_quote.close,
                                 self.current_quote.close)))
                    t += grouping_period
                self.current_quote = Quote(
                    self.symbol, datetime.datetime.utcfromtimestamp(t),
                    self.period, tick)
                self.period_starting_timestamp = t
                return self.current_quote
        return None
Example #3
0
    def add_tick(self, tick):
        grouping_period = self.period.total_seconds()

        if not self.current_quote:
            self.period_starting_timestamp = PriceConflator.round_datetime_to_period(tick.timestamp, grouping_period)
            self.current_quote = Quote(self.symbol, datetime.datetime.utcfromtimestamp(self.period_starting_timestamp), self.period, tick)
            return self.current_quote
        else:
            current_tick_timeblock = PriceConflator.round_datetime_to_period(tick.timestamp, grouping_period)
            if (current_tick_timeblock - self.period_starting_timestamp) < grouping_period:
                self.current_quote.add_tick(tick)
            else:
                if self.callback is not None:
                    self.callback(self.current_quote)
                t = self.period_starting_timestamp + grouping_period
                while current_tick_timeblock >= (t + grouping_period):
                        self.callback(Quote(self.symbol, datetime.datetime.utcfromtimestamp(t), self.period, Tick(self.period_starting_timestamp, self.current_quote.close, self.current_quote.close)))
                        t += grouping_period
                self.current_quote = Quote(self.symbol, datetime.datetime.utcfromtimestamp(t), self.period, tick)
                self.period_starting_timestamp = t
                return self.current_quote
        return None
Example #4
0
class PriceConflator(object):
    def __init__(self, symbol, period, callback = None):
        if not isinstance(period, datetime.timedelta):
            raise TypeError("period must be a timedelta")
        self.symbol = symbol
        self.period = period
        self.callback = callback
        self.period_starting_timestamp = None
        self.current_quote = None

    @staticmethod
    def round_datetime_to_period(timestamp, period):
        return timestamp - timestamp % period

    def add_tick(self, tick):
        grouping_period = self.period.total_seconds()

        if not self.current_quote:
            self.period_starting_timestamp = PriceConflator.round_datetime_to_period(tick.timestamp, grouping_period)
            self.current_quote = Quote(self.symbol, datetime.datetime.utcfromtimestamp(self.period_starting_timestamp), self.period, tick)
            return self.current_quote
        else:
            current_tick_timeblock = PriceConflator.round_datetime_to_period(tick.timestamp, grouping_period)
            if (current_tick_timeblock - self.period_starting_timestamp) < grouping_period:
                self.current_quote.add_tick(tick)
            else:
                if self.callback is not None:
                    self.callback(self.current_quote)
                t = self.period_starting_timestamp + grouping_period
                while current_tick_timeblock >= (t + grouping_period):
                        self.callback(Quote(self.symbol, datetime.datetime.utcfromtimestamp(t), self.period, Tick(self.period_starting_timestamp, self.current_quote.close, self.current_quote.close)))
                        t += grouping_period
                self.current_quote = Quote(self.symbol, datetime.datetime.utcfromtimestamp(t), self.period, tick)
                self.period_starting_timestamp = t
                return self.current_quote
        return None
Example #5
0
    def add_tick(self, tick):
        grouping_period = self.period.total_seconds()

        if not self.current_quote:
            self.period_starting_timestamp = PriceConflator.round_datetime_to_period(
                tick.timestamp, grouping_period)
            self.current_quote = Quote(
                self.symbol,
                datetime.datetime.utcfromtimestamp(
                    self.period_starting_timestamp), self.period, tick)
            return self.current_quote
        else:
            current_tick_timeblock = PriceConflator.round_datetime_to_period(
                tick.timestamp, grouping_period)
            if (current_tick_timeblock -
                    self.period_starting_timestamp) < grouping_period:
                self.current_quote.add_tick(tick)
            else:
                if self.callback is not None:
                    self.callback(self.current_quote)
                t = self.period_starting_timestamp + grouping_period
                while current_tick_timeblock >= (t + grouping_period):
                    self.callback(
                        Quote(
                            self.symbol, datetime.datetime.utcfromtimestamp(t),
                            self.period,
                            Tick(self.period_starting_timestamp,
                                 self.current_quote.close,
                                 self.current_quote.close)))
                    t += grouping_period
                self.current_quote = Quote(
                    self.symbol, datetime.datetime.utcfromtimestamp(t),
                    self.period, tick)
                self.period_starting_timestamp = t
                return self.current_quote
        return None
 def getTickData(self, queue):
     # self._db_connection = mysql.connector.connect(user='******', database='blackbox', host="192.168.0.8")
     cursor = self._db_connection.cursor()
     cursor.callproc('aggregated_data', [
         self.symbol.identifier, self.period,
         self.start_date.timestamp(),
         self.end_date.timestamp()
     ])
     for tick in self.cursor.stored_results():
         quote = Quote(self.symbol, tick[0], self.period,
                       Tick(tick[0], tick[1], tick[1]))  # open
         quote.add_tick(Tick(tick[0], tick[2], tick[2]))  # high
         quote.add_tick(Tick(tick[0], tick[3], tick[3]))  # low
         quote.add_tick(Tick(tick[0], tick[4], tick[4]))  # close
         queue.put(quote)
     queue.put(None)
Example #7
0
    def testBodyEngulfing(self):
        start_time = datetime.datetime(2015, 7, 26, 12, 0, 0)
        symbol = self.algo.analysis_symbols()[0]

        t = (0.6, 0.8, 0.2, 0.4)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))

        t = (0.8, 1.0, 0.0, 0.2)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote2 = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote2.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote2.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote2.add_tick(Tick(start_time.timestamp(), t[3], t[3]))

        self.assertFalse(self.algo.is_body_engulfing(quote, quote2))
        self.assertTrue(self.algo.is_body_engulfing(quote2, quote))
Example #8
0
    def testStrongCandleBull(self):
        start_time = datetime.datetime(2015, 7, 26, 12, 0, 0)
        symbol = self.algo.analysis_symbols()[0]

        t = (0.2, 0.0, 1.0, 0.8)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))

        self.assertTrue(self.algo.is_strong_candle(quote, Direction.LONG))

        t = (0.2, 0.0, 1.0, 0.7)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))

        self.assertFalse(self.algo.is_strong_candle(quote, Direction.LONG))
Example #9
0
    def testLargestCandle(self):
        start_time = datetime.datetime(2015, 7, 26, 12, 0, 0)
        symbol = self.algo.analysis_symbols()[0]

        history = []
        t = (0.6, 0.8, 0.2, 0.4)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))
        history.append(quote)

        t = (0.7, 0.9, 0.1, 0.3)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))
        history.append(quote)

        t = (0.8, 1.0, 0.0, 0.2)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))

        self.assertTrue(self.algo.is_largest(quote, history))

        t = (0.7, 0.8, 0.0, 0.31)
        tick = Tick(start_time.timestamp(), t[0], t[0])
        quote = Quote(symbol, start_time, MarketDataPeriod.HOUR_1, tick)
        quote.add_tick(Tick(start_time.timestamp(), t[1], t[1]))
        quote.add_tick(Tick(start_time.timestamp(), t[2], t[2]))
        quote.add_tick(Tick(start_time.timestamp(), t[3], t[3]))
        self.assertFalse(self.algo.is_largest(quote, history))