class BollingerBreakoutEntryManager(NoScaleInEntryManager): def __init__(self, settings=None, name=None): NoScaleInEntryManager.__init__(self, settings, name) self.min_price = self._getfloatsetting("BollingerBreakoutEntryManager", "minPrice") self.min_vol = self._getintsetting("BollingerBreakoutEntryManager", "minVolume") bb_period = self._getintsetting("BollingerBreakoutEntryManager", "bbPeriod") bb_stdevs = self._getfloatsetting("BollingerBreakoutEntryManager", "bbStdevs") self.do_long = self._getboolsetting("BollingerBreakoutEntryManager", "doLong") self.do_short = self._getboolsetting("BollingerBreakoutEntryManager", "doShort") sma_period = self._getintsetting("BollingerBreakoutEntryManager", "smaPeriod") if sma_period is not None: self.sma = SimpleMovingAverage(period=sma_period) else: self.sma = None self.raw_close = Close() self.close = AdjustedClose() self.vol = AverageVolume() self.bb = BollingerBands(metric=self.close, period=bb_period, stdev=bb_stdevs) self._addMetrics(self.sma, self.raw_close, self.close, self.vol, self.bb) def _checkTradeNoScale(self): trade = None if self.raw_close.value() >= self.min_price and self.vol.value() >= self.min_vol \ and self.close.value() > self.bb.upperBand() and self.do_long \ and (self.sma is None or self.close.value() > self.sma.value()): entry_price = self.close.value() stop = 0 trade = Trade(stock=self.periodData.stock, entry=self.periodData.date, entryPrice=entry_price, stop=stop) if self.raw_close.value() >= self.min_price and self.vol.value() >= self.min_vol \ and self.close.value() < self.bb.upperBand() and self.do_short \ and (self.sma is None or self.close.value() < self.sma.value()): entry_price = self.close.value() stop = entry_price * 10 trade = Trade(stock=self.periodData.stock, entry=self.periodData.date, entryPrice=entry_price, stop=stop) return trade
def __init__(self, settings=None, name=None): NoScaleInEntryManager.__init__(self, settings, name) self.min_price = self._getfloatsetting("BollingerBreakoutEntryManager", "minPrice") self.min_vol = self._getintsetting("BollingerBreakoutEntryManager", "minVolume") bb_period = self._getintsetting("BollingerBreakoutEntryManager", "bbPeriod") bb_stdevs = self._getfloatsetting("BollingerBreakoutEntryManager", "bbStdevs") self.do_long = self._getboolsetting("BollingerBreakoutEntryManager", "doLong") self.do_short = self._getboolsetting("BollingerBreakoutEntryManager", "doShort") sma_period = self._getintsetting("BollingerBreakoutEntryManager", "smaPeriod") if sma_period is not None: self.sma = SimpleMovingAverage(period=sma_period) else: self.sma = None self.raw_close = Close() self.close = AdjustedClose() self.vol = AverageVolume() self.bb = BollingerBands(metric=self.close, period=bb_period, stdev=bb_stdevs) self._addMetrics(self.sma, self.raw_close, self.close, self.vol, self.bb)