-
Notifications
You must be signed in to change notification settings - Fork 4
/
utils.py
80 lines (55 loc) · 2.78 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import pandas as pd
from datetime import timedelta
def ftxTransformer(data):
data['endTime'] = (pd.to_datetime(data['startTime'].copy())+timedelta(seconds =3600))
data.drop(['Unnamed: 0','volume','startTime'],axis=1,inplace=True)
cols = ['endTime','open','high','low','close']
outputData = data[cols].copy()
outputData.sort_values(by=['endTime'],inplace=True)
outputData.set_index('endTime',inplace=True)
outputData['volatility'] = outputData.close.pct_change().ewm(alpha=0.4).std()
weeklyData = outputData.resample('7d',offset = '8h',label='right').agg({'open':'first','close':'last','high':'max','low':'min'})
# drop this as last week data is extrapolated
weeklyData.drop(index=weeklyData.index[-1],
axis=0,
inplace=True)
weeklyData['price_change'] = weeklyData['close'] / weeklyData['open'] - 1
weeklyData = weeklyData.dropna()
return outputData,weeklyData
def chainlinkTransformer(data):
data['endTime'] = (pd.to_datetime(data['updatedAt'].copy(),unit='s'))
data.drop(['updatedAt','startedAt','roundId','roundId.1'],axis=1,inplace=True)
data['price'] = data['price'].copy() / 1e8
data.sort_values(by=['endTime'],inplace=True)
data.set_index('endTime',inplace=True)
data['index_twap'] = data.rolling('15min').mean()
#generate weeklyData
opens = data.price.resample('7d',offset = '8h',label='right').first()
opens.rename('open',inplace=True)
mins = data.index_twap.resample('7d',offset = '8h',label='right').min()
mins.rename('low',inplace=True)
maxs = data.index_twap.resample('7d',offset = '8h',label='right').max()
maxs.rename('high',inplace=True)
weeklyData = pd.concat([opens,maxs,mins],axis=1)
weeklyData['close'] = weeklyData.open.shift(-1)
weeklyData = weeklyData[['open','close','high','low']]
# drop this as last week data is extrapolated
weeklyData.drop(index=weeklyData.index[-1],
axis=0,
inplace=True)
weeklyData['price_change'] = weeklyData['close'] / weeklyData['open'] - 1
#generate hourlyData
opens = data.price.resample('1h',offset = '8h',label='right').first()
opens.rename('open',inplace=True)
mins = data.index_twap.resample('1h',offset = '8h',label='right').min()
mins.rename('low',inplace=True)
maxs = data.index_twap.resample('1h',offset = '8h',label='right').max()
maxs.rename('high',inplace=True)
hourlyData = pd.concat([opens,maxs,mins],axis=1)
hourlyData['close'] = hourlyData.open.shift(-1)
hourlyData = hourlyData[['open','close','high','low']]
# drop this as last week data is extrapolated
hourlyData.drop(index=hourlyData.index[-1],
axis=0,
inplace=True)
return data,weeklyData,hourlyData