Pandas Более высокий таймфрейм без повторной выборки - PullRequest
0 голосов
/ 02 марта 2020

У меня есть pandas DF с 5-минутными наблюдениями. Я хотел бы добавить еще один столбец для наблюдений за rsi в течение 1 часа по цене закрытия, но используя непосредственные 60 минут перед новым 5-минутным наблюдением, которое только приходило каждые 5 минут. Это должно быть обновлено каждые 5 минут. Попробовал повторную выборку, но у меня возникла проблема, когда приходят новые данные и 60 минут еще не закончены, поэтому я не хочу обновлять данные по часам, но каждые 5 минут.

Попытка взять df['sma60'] = df.close.rolling(window=60), но когда я применяю PYTI rsi, я получаю NAN.

РЕДАКТИРОВАТЬ: После первого ответа я попробовал следующее, но мне это не кажется правильным, если Вы смотрите на графики ниже.

df['rsiCurrent'] = rsi(df.close, 13)
df['sma15'] = df.close.rolling('15min').mean()
df['rsi15'] = rsi(df.sma15, 13)
df['sma60'] = df.close.rolling('1H').mean()
df['rsi60'] = rsi(df.sma15, 13)

Отображение выходных графиков, и вы можете видеть, что они выглядят неправильно

plt.figure(figsize=(20, 8))
plt.subplot(311)
plt.plot(df[:450]['rsiCurrent'])
plt.legend(['TDI Cur'])
plt.subplot(312)
plt.plot(df[:450]['rsi15'])
plt.legend(['TDI 15m'])
plt.subplot(313)
plt.plot(df[:450]['rsi60'])
plt.legend(['TDI 60'])
plt.show()

Код выше для дисплей, но, кроме этого, это только закрытие в DF.

Любое направление или коррекция приветствуется.

1 Ответ

0 голосов
/ 02 марта 2020

если ваш Dataframe индексируется по времени (индекс - datetieme), вы можете использовать период времени как окно см. Здесь например:

df = pd.DataFrame({'col1': [1, 2, 3, 4, 5],'col2':[1,2,3,4,5]},
                   index = [pd.Timestamp('20130101 09:00:00'),
                            pd.Timestamp('20130101 09:10:02'),
                            pd.Timestamp('20130101 09:31:03'),
                            pd.Timestamp('20130101 10:30:05'),
                            pd.Timestamp('20130101 10:40:06')])
>>>df
                     col1  col2
2013-01-01 09:00:00     1     1
2013-01-01 09:10:02     2     2
2013-01-01 09:31:03     3     3
2013-01-01 10:30:05     4     4
2013-01-01 10:40:06     5     5

применить окно = 1H

df.col1.rolling('1H').mean()

2013-01-01 09:00:00    1.0
2013-01-01 09:10:02    1.5
2013-01-01 09:31:03    2.0
2013-01-01 10:30:05    3.5
2013-01-01 10:40:06    4.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...