-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathrolling_mean.py
80 lines (50 loc) · 2.08 KB
/
rolling_mean.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
# =============================================================================
# File: rolling_mean.py
# Author: Andre Brener
# Created: 03 Jun 2017
# Last Modified: 07 Jun 2017
# Description: description
# =============================================================================
import pandas as pd
def get_signal(df):
if df['average_difference'] > 0 and df['prev_diff'] < 0:
return 1
elif df['average_difference'] < 0 and df['prev_diff'] > 0:
return -1
else:
return 0
def get_rolling_mean(df, fast_window, slow_window, macd=False):
df['fast_average'] = df['price'].ewm(span=fast_window).mean()
df['slow_average'] = df['price'].ewm(span=slow_window).mean()
col_name = 'average_difference'
if macd:
col_name = 'roll_mean_diff'
df[col_name] = df['fast_average'] - df['slow_average']
return df
def get_roll_mean_decision(df, roll_mean_params):
fast_window, slow_window = roll_mean_params
rm_df = get_rolling_mean(df, fast_window, slow_window)
rm_df['prev_diff'] = rm_df['average_difference'].shift(1)
rm_df['signal'] = rm_df.apply(get_signal, axis=1)
return rm_df
def get_macd_decision(df, macd_params):
fast_window, slow_window, comparison_window = macd_params
macd_df = get_rolling_mean(df, fast_window, slow_window, macd=True)
macd_df['comparison_average'] = macd_df['price'].ewm(
span=comparison_window).mean()
macd_df['average_difference'] = macd_df['comparison_average'] - macd_df[
'roll_mean_diff']
macd_df['prev_diff'] = macd_df['average_difference'].shift(1)
macd_df['signal'] = macd_df.apply(get_signal, axis=1)
return macd_df
if __name__ == '__main__':
df = pd.read_csv('test_series.csv')
df = df[['date', 'ETH']]
fast_window = 12
slow_window = 29
comparison_window = 9
roll_mean_params = (fast_window, slow_window)
rm_df = get_roll_mean_decision(df, roll_mean_params)
macd_params = (fast_window, slow_window, comparison_window)
macd_df = get_macd_decision(df, macd_params)
print(macd_df)