Создание индексированных значений дельты с помощью np.diff () и индексация массива с датой / временем - PullRequest
1 голос
/ 06 мая 2020

Я создаю функцию для вычисления кода индекса относительной силы (RSI), используя python. Функция работает правильно при генерации значений RSI, хотя с небольшим отличием от значения на mt4.

Я хочу, чтобы RSI был проиндексирован с соответствующей датой / временем для RSI. Код, который мне удалось создать для генерации значений, приведен ниже:

import pandas as pd
import numpy as np

df = pd.read_csv('Data/EURUSD.csv')
df.columns = ['date','open','high','low','close','AskVol']

df.date = pd.to_datetime(df.date,format='%d.%m.%Y %H:%M:%S.%f')

df = df.set_index(df.date)
df = df[['open','high','low','close','AskVol']]
df = df.drop_duplicates(keep=False)

def rsi(prices, periods=14):

    deltas = np.diff(prices)
    seed = deltas[:periods + 1]
    U = seed[seed >= 0].sum() / periods
    D = -seed[seed < 0].sum() / periods
    rs = U / D
    rsi = np.zeros_like(prices)
    rsi[:periods] = 100. - 100. / (1.+rs)

    for i in range(periods, len(prices)):
        delta = deltas[i - 1]
        if delta > 0:
            U_val = delta
            D_val = 0.
        else:
            U_val = 0.
            D_val = -delta
        U = (U * (periods - 1) + U_val) / periods
        D = (D * (periods - 1) + D_val) / periods
        rs = U / D
        rsi[i] = 100. - 100. / (1.+rs)
    return rsi
RSI = rsi(df.close,14)

print(RSI)

Я получаю;

[27.02149437 27.02149437 27.02149437 ... 36.83424327 33.12870442
 26.38605386]

Но на самом деле я хочу;

date
2020-01-01 23:00:00    |      27.02149437
2020-01-02 00:00:00    |      27.02149437
2020-01-02 01:00:00    |      27.02149437
                              ...   
2020-05-06 06:00:00    |      36.83424327
2020-05-06 07:00:00    |      33.12870442
2020-05-06 08:00:00    |      26.38605386

Я очень благодарен за любую помощь, которую я могу получить для достижения этой цели.

Спасибо

1 Ответ

0 голосов
/ 07 мая 2020

Наконец получил ответ:

rsi = pd.Series(rsi,index=prices.index[0:])
rsi = rsi.to_frame()
rsi.columns =  ['RSI (' + str(periods) + ')']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...