Example #1
0
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
Example #2
0
    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)
Example #3
0
 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)
Example #4
0
 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)