Beispiel #1
0
    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)
Beispiel #2
0
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()