-
Notifications
You must be signed in to change notification settings - Fork 0
/
3MAStrategy.py
68 lines (55 loc) · 2.1 KB
/
3MAStrategy.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
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight')
df = pd.read_csv('StockTickers/CRSR.csv',nrows=365)
df = df.set_index(pd.DatetimeIndex(df['Date'].values))
#calculating moving averages
short_ema = df.Close.ewm(span=5,adjust=False).mean()
middle_ema = df.Close.ewm(span=21,adjust=False).mean()
long_ema = df.Close.ewm(span=63,adjust = False).mean()
#add exponential moving averaes to dataset
df['Short'] = short_ema
df['Middle'] = middle_ema
df['Long'] = long_ema
def buy_sell_function(data):
buy_list=[]
sell_list=[]
flag_long=False
flag_short=False
for i in range(0,len(data)):
if data['Middle'][i] < data['Long'][i] and data['Short'][i]<data['Middle'][i] and flag_long ==False and flag_short==False:
buy_list.append(data['Close'][i])
sell_list.append(np.NaN)
flag_short=True
elif flag_short and data['Short'][i] > data['Middle'][i]:
sell_list.append(data['Close'][i])
buy_list.append(np.NaN)
flag_short=False
elif data['Middle'][i] > data['Long'][i] and data['Short'][i]>data['Middle'][i] and flag_long ==False and flag_short==False:
buy_list.append(data['Close'][i])
sell_list.append(np.NaN)
flag_long=True
elif flag_long and data['Short'][i] < data['Middle'][i]:
sell_list.append(data['Close'][i])
buy_list.append(np.NaN)
flag_long=False
else:
buy_list.append(np.NaN)
sell_list.append(np.NaN)
return (buy_list,sell_list)
#add buy and sell signals to data set
df['Buy'] = buy_sell_function(df)[0]
df['Sell'] = buy_sell_function(df)[1]
plt.figure(figsize=(12.2,6.4))
plt.title('Buy and Sell Plot',fontsize=18)
plt.plot(df['Close'],label='Close Price',color='blue',alpha=.35)
plt.plot(short_ema,label='Short/Fast EMA',color='red',alpha=.35)
plt.plot(middle_ema,label='Middle/Medium EMA',color='orange',alpha=.35)
plt.plot(long_ema,label='Long/Slow EMA',color='green',alpha=.35)
plt.scatter(df.index, df['Buy'],color='green',marker='^',alpha=1)
plt.scatter(df.index, df['Sell'],color='red',marker='v',alpha=1)
plt.xlabel('Date',fontsize=18)
plt.ylabel('Close Price',fontsize=18)
plt.legend(loc='upper left')
plt.show()