def tickUpdate(self, tick):
        ''' consume ticks '''
        LOG.debug("tickUpdate %s with tick %s, price %s" % (self.__security, tick.time, tick.close))
        # update sma
        self.__smaShort(tick.close)
        self.__smaMid(tick.close)
        self.__smaLong(tick.close)
        self.__smaVolumeShort(tick.volume)
        self.__smaVolumeMid(tick.volume)
        self.__movingLowShort(tick.close)
        self.__movingLowWeek(tick.close)

        # if not enough data, skip to reduce risk -- SKIP NEWLY IPOs
        if not self.__smaLong.getLastValue() or not self.__smaMid.getLastValue() or not self.__smaShort.getLastValue():
            self.__updatePreviousState(tick)
            return

        # if haven't started, don't do any trading
        if tick.time <= self.start_date:
            return

        # already have some holdings
        if self.__stopOrderId:
            self.__sellIfMeet(tick)
            self.__adjustStopOrder(tick)

        # don't have any holdings
        if not self.__stopOrderId and self.__getCashToBuyStock():
            self.__buyIfMeet(tick)

        self.__updatePreviousState(tick)