Рассчитать индикатор RSI в соответствии с торговым представлением? - PullRequest
0 голосов
/ 10 апреля 2020

Я хотел бы рассчитать RSI 14 в соответствии с графиком трейдинга.

Согласно этой вики это должно быть решение: https://www.tradingview.com/wiki/Talk: Relative_Strength_Index_ (RSI)

Я реализовал это в объекте под названием RSI: Вызов в объекте RSI:

    self.df['rsi1'] = self.calculate_RSI_method_1(self.df, period=self.period)

Реализация кода вычисления:

    def calculate_RSI_method_1(self, ohlc: pd.DataFrame, period: int = 14) -> pd.Series:

        delta = ohlc["close"].diff()

        ohlc['up'] = delta.copy()
        ohlc['down'] = delta.copy()

        ohlc['up'] = pd.to_numeric(ohlc['up'])
        ohlc['down'] = pd.to_numeric(ohlc['down'])

        ohlc['up'][ohlc['up'] < 0] = 0
        ohlc['down'][ohlc['down'] > 0] = 0

        # This one below is not correct, but why?
        ohlc['_gain'] = ohlc['up'].ewm(com=(period - 1), min_periods=period).mean()
        ohlc['_loss'] = ohlc['down'].abs().ewm(com=(period - 1), min_periods=period).mean()

        ohlc['RS`'] = ohlc['_gain']/ohlc['_loss']

        ohlc['rsi'] = pd.Series(100 - (100 / (1 + ohlc['RS`'])))

        self.currentvalue = round(self.df['rsi'].iloc[-1], 8)
        print (self.currentvalue)

        self.exportspreadsheetfordebugging(ohlc, 'calculate_RSI_method_1', self.symbol)

Я протестировал несколько других решений, таких как, например, но не возвращает правильное значение:

https://github.com/peerchemist/finta https://gist.github.com/jmoz/1f93b264650376131ed65875782df386

Поэтому я создал юнит-тест на основе: https://school.stockcharts.com/doku.php?id=technical_indicators :lative_strength_index_rsi

Я создал входной файл: (см. изображение Excel ниже) и выходной файл: (см. изображение Excel ниже)

Выполнение unittest (код unittest здесь не включен) ) должен привести к, но проверяет только последнее значение.

if result == 37.77295211:
    log.info("Unit test 001 - PASSED")
    return True
else:
    log.error("Unit test 001 - NOT PASSED")
    return False 

Но опять я не могу пройти тест. Я проверил все значения с помощью Excel.

enter image description here

Так что теперь я немного растерялся.

Если я после этого вопроса: Рассчитать индикатор RSI из pandas DataFrame? Но это не даст никакого значения в усилении.

  • a) Каким должен быть расчет для выравнивания юнит-тест?
  • б) Каким должен быть расчет, чтобы соответствовать торговому представлению?
...