/
utils.py
82 lines (67 loc) · 1.8 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
81
82
from typing import List
import numpy as np
import datetime
def get_timestamp():
current_time = datetime.datetime.now()
timestamp = (
str(current_time.year)
+ "-"
+ str(current_time.month)
+ "-"
+ str(current_time.day)
+ "_"
+ str(current_time.hour)
+ "-"
+ str(current_time.minute)
+ "-"
+ str(current_time.second)
+ "-"
+ str(current_time.microsecond)
)
return timestamp
def ema(data: List, gamma=.9):
'''
Implemnets exponential moving average.
Args:
data (list): list of data
gamma (float): decay factor. default 0.9
Out:
list of em-averaged data.
'''
res = []
curr = data[0]
res.append(float(curr))
for val in data[1:]:
curr = gamma * curr + (1 - gamma) * val # EMA
res.append(float(curr))
return res
def ema_np(data, gamma=0.9):
'''
Implemnets exponential moving average.
Args:
data (list): list of data
gamma (float): decay factor. default 0.9
Out:
list of em-averaged data.
'''
l_ema = ema(list(data), gamma=gamma)
res = np.array(l_ema)
return res
def ema2(data: List, gamma=.9, no_of_steps_back = 10):
'''
Implements average over a fixed window of 'no_of_steps_back' iterations
'''
res = []
curr = data[0]
i=0
res.append(float(curr))
for val in data[1:]:
min_index = int(max(0,i-no_of_steps_back))
curr = gamma* sum(data[min_index:i+1])/len(data[min_index:i+1]) + (1-gamma)* val
res.append(float(curr))
i+=1
return res
def ema2_np(data, gamma=0.9, no_of_steps_back = 10):
l_ema = ema2(list(data), gamma=gamma, no_of_steps_back=no_of_steps_back)
res = np.array(l_ema)
return res