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)
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
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)
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
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))
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))
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))