-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmovAvgAlgo.py
61 lines (49 loc) · 1.97 KB
/
movAvgAlgo.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
import datetime as dt
import matplotlib.pyplot as plt
import pandas_datareader as web
plt.style.use("dark_background")
ma_1 = 30
ma_2 = 100
start = dt.datetime.now() - dt.timedelta(days=356 * 5)
end = dt.datetime.now()
data = web.DataReader('SPY', 'yahoo', start, end)
data[f'SMA_{ma_1}'] = data['Adj Close'].rolling(window=ma_1).mean()
data[f'SMA_{ma_2}'] = data['Adj Close'].rolling(window=ma_2).mean()
# display data from ma_2
data = data.iloc[ma_2:]
# plt.plot(data['Adj Close'], label="Share Price", color="lightgray")
# plt.plot(data[f'SMA_{ma_1}'], label=f"SMA_{ma_1}", color="orange")
# plt.plot(data[f'SMA_{ma_2}'], label=f"SMA_{ma_2}", color="blue")
# plt.legend(loc="upper left")
# plt.show()
#
buy_signals = []
sell_signals = []
trigger = 0
# if ma_1 is larger than 2 and trigger not 1, we have buy signal at location x, leave sell_sig to empty, set trigger to 1, and vice verse
for x in range(len(data)):
if data[f'SMA_{ma_1}'].iloc[x] > data[f'SMA_{ma_2}'].iloc[x] and trigger != 1:
buy_signals.append(data['Adj Close'].iloc[x])
sell_signals.append(float('nan'))
trigger = 1
elif data[f'SMA_{ma_1}'].iloc[x] < data[f'SMA_{ma_2}'].iloc[x] and trigger != -1:
buy_signals.append(float('nan'))
sell_signals.append(data['Adj Close'].iloc[x])
trigger = -1
else:
buy_signals.append(float('nan'))
sell_signals.append(float('nan'))
data['Buy Signals'] = buy_signals
data['Sell Signals'] = sell_signals
print(data)
plt.plot(data['Adj Close'], label="Share Price", alpha=0.5)
plt.plot(data[f'SMA_{ma_1}'], label=f"SMA_{ma_1}",
color="orange", linestyle="--")
plt.plot(data[f'SMA_{ma_2}'], label=f"SMA_{ma_2}",
color="pink", linestyle="--")
plt.scatter(data.index, data['Buy Signals'],
label="Buy Signal", marker="^", color="#00ff00", lw=3)
plt.scatter(data.index, data['Sell Signals'],
label="Sell Signal", marker="v", color="#ff0000", lw=3)
plt.legend(loc="upper left")
plt.show()