def __init__(self, settings, name=None): NoScaleInEntryManager.__init__(self, settings, name) self.minPrice = settings.getfloat("JBMarwoodSupernovaShortEntry", "minPrice") self.maxPrice = settings.getfloat("JBMarwoodSupernovaShortEntry", "maxPrice") self.minVol = settings.getint("JBMarwoodSupernovaShortEntry", "minVol") self.minPctChange = settings.getfloat("JBMarwoodSupernovaShortEntry", "minPctChange") self.numdays = settings.getint("JBMarwoodSupernovaShortEntry", "numBars") self.onOpen = settings.getboolean("JBMarwoodSupernovaShortEntry", "enterNextOpen") self.onDownClose = settings.getboolean("JBMarwoodSupernovaShortEntry", "enterNextDayDownClose") targetstr = settings.get("JBMarwoodSupernovaShortEntry", "target") if targetstr == "None": self.target = None else: self.target = float(targetstr) self.stopPercent = settings.getfloat("JBMarwoodSupernovaShortEntry", "stopPercent") self.setupYesterday = True self.rawclose = Close() self.close = AdjustedClose() self.oldClose = HistoricMetric(self.close, period=self.numdays) self.change = Subtract(self.close, self.oldClose) self.pctChange = Divide(self.change, self.oldClose) self.volume = Volume() self._addMetric(self.rawclose) self._addMetric(self.close) self._addMetric(self.oldClose) self._addMetric(self.change) self._addMetric(self.pctChange) self._addMetric(self.volume)
class JBMarwoodSupernovaShortEntryManager(NoScaleInEntryManager): def __init__(self, settings, name=None): NoScaleInEntryManager.__init__(self, settings, name) self.minPrice = settings.getfloat("JBMarwoodSupernovaShortEntry", "minPrice") self.maxPrice = settings.getfloat("JBMarwoodSupernovaShortEntry", "maxPrice") self.minVol = settings.getint("JBMarwoodSupernovaShortEntry", "minVol") self.minPctChange = settings.getfloat("JBMarwoodSupernovaShortEntry", "minPctChange") self.numdays = settings.getint("JBMarwoodSupernovaShortEntry", "numBars") self.onOpen = settings.getboolean("JBMarwoodSupernovaShortEntry", "enterNextOpen") self.onDownClose = settings.getboolean("JBMarwoodSupernovaShortEntry", "enterNextDayDownClose") targetstr = settings.get("JBMarwoodSupernovaShortEntry", "target") if targetstr == "None": self.target = None else: self.target = float(targetstr) self.stopPercent = settings.getfloat("JBMarwoodSupernovaShortEntry", "stopPercent") self.setupYesterday = True self.rawclose = Close() self.close = AdjustedClose() self.oldClose = HistoricMetric(self.close, period=self.numdays) self.change = Subtract(self.close, self.oldClose) self.pctChange = Divide(self.change, self.oldClose) self.volume = Volume() self._addMetric(self.rawclose) self._addMetric(self.close) self._addMetric(self.oldClose) self._addMetric(self.change) self._addMetric(self.pctChange) self._addMetric(self.volume) def _checkTradeNoScale(self): trade = None if self.setupYesterday: if self.onOpen: entry = self.periodData.adjustedOpen stop = entry * (1 + self.stopPercent) if entry != stop: trade = Trade(self.periodData.stock, self.periodData.date, entry, stop) if self.target != None: target = self.close.value() * (1.0 - self.target) trade.target = target elif self.onDownClose and self.periodData.adjustedClose < self.periodData.adjustedOpen: stop = self.periodData.adjustedHigh + 0.01 # stop = self.close.value()*(1+self.stopPercent) if stop != self.close.value(): trade = Trade(self.periodData.stock, self.periodData.date, self.close.value(), stop) if self.target != None: target = self.close.value() * (1.0 - self.target) trade.target = target if ( self.pctChange.ready() and self.rawclose.value() >= self.minPrice and self.rawclose.value() <= self.maxPrice and self.volume.value() >= self.minVol and self.pctChange.value() >= self.minPctChange ): if not self.onDownClose and not self.onOpen: # enter immediately stop = self.close.value() * (1 + self.stopPercent) if stop != self.close.value(): trade = Trade(self.periodData.stock, self.periodData.date, self.close.value(), stop) if self.target != None: target = self.close.value() * (1.0 - self.target) trade.target = target self.setupYesterday = True else: self.setupYesterday = False if trade is not None and (trade.entryPrice == 0 or trade.entryPrice == trade.stop): return None return trade