# Python version import sys print('Python: {}'.format(sys.version)) import pandas as pd import numpy as np import matplotlib.pyplot as plt import datetime import os def rsi(series, period): delta = series.diff().dropna() u = delta * 0 d = u.copy() u[delta > 0] = delta[delta > 0] d[delta < 0] = -delta[delta < 0] u[u.index[period-1]] = np.mean( u[:period] ) #first value is sum of avg gains u = u.drop(u.index[:(period-1)]) d[d.index[period-1]] = np.mean( d[:period] ) #first value is sum of avg losses d = d.drop(d.index[:(period-1)]) rs = u.ewm(com=period-1, adjust=False).mean() / d.ewm(com=period-1, adjust=False).mean() # rs = u.ewm(com=period-1).mean() # rs = pd.ewma(u, com=period-1, adjust=False) / \ # pd.ewma(d, com=period-1, adjust=False) return 100 - 100 / (1 + rs) if __name__ == "__main__": os.makedirs('./result/',exist_ok=True) ref_time = datetime.datetime.now().strftime('%Y%m%d_%H%M%S') path_data = '../../Data/' df = pd.read_csv(path_data+'train.csv') df['Date']= pd.to_datetime(df['Date']) df = df.set_index('Date') # df = df.sort_values('Date') df_36 = df.resample('36Min').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume':'sum'}) df_36.index += datetime.timedelta(minutes=35) df_360 = df.resample('360Min').agg({'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last', 'Volume':'sum'}) df_360.index += datetime.timedelta(minutes=359) df_36_rsi = pd.DataFrame(rsi(df_36['Close'],14)).rename({'Close':'RSI 36'},axis=1) df_360_rsi = pd.DataFrame(rsi(df_360['Close'],14)).rename({'Close':'RSI 360'},axis=1) df_1 = df.copy() for k in range(6): df_1 = pd.merge(df_1,df_36_rsi.shift(periods=-k).rename({'RSI 36':'RSI 36 T-'+str(k)},axis=1),how='left',left_index=True,right_index=True) df_1 = pd.merge(df_1,df_360_rsi.shift(periods=k).rename({'RSI 360':'RSI 360 T-'+str(k)},axis=1),how='left',left_index=True,right_index=True) df_1 = df_1.fillna(method='ffill')