class RSIExitManager(ExitManager): """ Exit on a target RSI value. Handles long and short """ def __init__(self, settings): ExitManager.__init__(self) self.period = settings.getint("RSIExitManager", "period") self.longExit = settings.getfloat("RSIExitManager", "longExit") self.shortExit = settings.getfloat("RSIExitManager", "shortExit") self.close = AdjustedClose() self.rsi = RSI(metric=self.close, period=self.period) def handle(self, perioddata): ExitManager.handle(self, perioddata) self.close.handle(perioddata) self.rsi.handle(perioddata) def checkTrade(self, trade): if trade is not None and self.rsi.ready() and trade.is_open() \ and ((trade.is_long() and self.rsi.value() >= self.longExit) or (trade.is_short() and self.rsi.value() <= self.shortExit)): trade.close(self.perioddata.date, self.perioddata.adjustedClose) return trade def recommendedPreload(self): return self.period + 3
def __init__(self, settings): ExitManager.__init__(self) self.period = settings.getint("RSIExitManager", "period") self.longExit = settings.getfloat("RSIExitManager", "longExit") self.shortExit = settings.getfloat("RSIExitManager", "shortExit") self.close = AdjustedClose() self.rsi = RSI(metric=self.close, period=self.period)
def testRSI(self): rsi = RSI(14) for close in [ 44.34, 44.09, 44.15, 43.61, 44.33, 44.83, 45.10, 45.42, 45.84, 46.08, 45.89, 46.03, 45.61, 46.28, 46.28, 46, 46.03, 46.41, 46.22 ]: rsi.handle(self._fakePeriodData(close)) self.assertTrue(rsi.ready()) self.assertTrue(rsi.value() < 67 and rsi.value() > 65)
def testRSI(self): rsi = RSI(14) for close in [44.34, 44.09, 44.15, 43.61, 44.33, 44.83, 45.10, 45.42, 45.84, 46.08, 45.89, 46.03, 45.61, 46.28, 46.28, 46, 46.03, 46.41, 46.22]: rsi.handle(self._fakePeriodData(close)) self.assertTrue(rsi.ready()) self.assertTrue(rsi.value() < 67 and rsi.value() > 65)