def __init__(self, settings): nbars = settings.getint("NBarEntry", "nbars") self.high = High() self.low = Low() self.range = Subtract(self.high, self.low) self.minrange = Lowest(self.range, nbars) self.lastrange = HistoricMetric(self.range, 1) self.lastminrange = HistoricMetric(self.minrange, 2) self.lasthigh = HistoricMetric(self.high,1) self.lastlow = HistoricMetric(self.low,1)
class NBarEntryManager: def __init__(self, settings): nbars = settings.getint("NBarEntry", "nbars") self.high = High() self.low = Low() self.range = Subtract(self.high, self.low) self.minrange = Lowest(self.range, nbars) self.lastrange = HistoricMetric(self.range, 1) self.lastminrange = HistoricMetric(self.minrange, 2) self.lasthigh = HistoricMetric(self.high,1) self.lastlow = HistoricMetric(self.low,1) def handle(self, perioddata): self.high.handle(perioddata) self.low.handle(perioddata) self.range.handle(perioddata) self.minrange.handle(perioddata) self.lastrange.handle(perioddata) self.lastminrange.handle(perioddata) self.lasthigh.handle(perioddata) self.lastlow.handle(perioddata) self.lastdd = perioddata def checkTrade(self): if self.lastrange.ready() and self.lastminrange.ready() \ and self.lastrange.value() < self.lastminrange.value(): # we have an N-bar, take a break long or short and hold to close if self.lastdd.high > self.lasthigh.value(): entry = max(self.lastdd.open, self.lasthigh.value() + 0.01) stop = self.lastlow.value() - 0.01 if entry < 0: entry = 0 if stop < 0: stop = 0 if entry > stop and entry > 0: trade = Trade(self.lastdd.stock, self.lastdd.date, entry, stop) trade.exit = self.lastdd.date if self.lastdd.low <= stop: trade.exitPrice = stop else: trade.exitPrice = self.lastdd.close return trade elif self.lastdd.low < self.lastlow.value(): entry = min(self.lastdd.open,self.lastlow.value() - 0.01) stop = self.lasthigh.value() + 0.01 if entry < 0: entry = 0 if stop < 0: stop = 0 if entry < stop and entry > 0: trade = Trade(self.lastdd.stock, self.lastdd.date, entry, stop) trade.exit = self.lastdd.date if self.lastdd.high >= stop: trade.exitPrice = stop else: trade.exitPrice = self.lastdd.close return trade return None def recommendedPreload(self): return self.lastminrange.recommendedPreload()