1 import pandas as pd 2 import numpy as np 3 import matplotlib.pylab as plt 4 5 res=pd.read_csv("601318.csv",parse_dates=True,index_col="date") 6 7 8 #画图 9 # plt.plot(res["open"],"r-",res["close"],"b-") 10 # plt.xlabel(u"time") 11 # plt.ylabel(u"price") 12 # plt.show() 13 14 #计算ma5和ma10 15 16 #----------方案1 17 # res["ma5"]=np.NaN 18 # res["ma10"]=np.NaN 19 # 20 # for i in range(4,len(res)): #从4开始 21 # res.loc[res.index[i],"ma5"]=res["close"][i-4:i+1].mean() #按下表取到时间对象,然后loc拿到该位置的ma5值,然后取到平均值 22 # 23 # for i in range(9,len(res)): 24 # res.loc[res.index[i],"ma5"]=res["close"][i-9:i+1].mean() 25 # 26 # print(res) 27 28 #----------方案2 29 # res["ma5"]=(res["close"].cumsum()-res["close"].cumsum().shift(1).fillna(0).shift(4))/5 #如果一次性移动5个的话,第五个 30 #位置会成为NaN,这样,第五个位置上相减后就会没有值,所以先移动一个,让其填充上0,这样保证前四个是NaN,但是第五个有值 31 # res["ma10"]=(res["close"].cumsum()-res["close"].cumsum().shift(1).fillna(0).shift(9))/10 32 33 34 # 1 2 3 4 5 6 7 35 # 1 3 6 10 15 21 28 36 # 1 3 6 10 37 38 #----------方案3 39 res["ma5"]=res["close"].rolling(5).mean() #默认rolling的光标行是最后一行 40 res["ma10"]=res["close"].rolling(10).mean() 41 42 # plt.plot(res["ma5"],"r-",res["ma10"],"b-") 43 # plt.xlabel(u"time") 44 # plt.ylabel(u"price") 45 # plt.show() 46 47 48 #找出金叉和死叉 49 50 res=res.dropna() 51 52 #----------------方案1 53 # golden=[] 54 # black=[] 55 # sr=res["ma5"]>=res["ma10"] 56 # 57 # for i in range(1,len(sr)): 58 # if sr.iloc[i]==True and sr.iloc[i-1]==False: 59 # golden.append(sr.index[i]) 60 # if sr.iloc[i]==False and sr.iloc[i-1]==True: 61 # black.append(sr.index[i]) 62 63 #----------------方案2 64 golden=res[list((res["ma5"]>=res["ma10"]) & (res["ma5"]<res["ma10"]).shift(1))].index 65 66 black=res[(res["ma5"]<=res["ma10"]) & (res["ma5"]>res["ma10"]).shift(1)].index 67 68 # print(type((res["ma5"]>=res["ma10"]) & (res["ma5"]<res["ma10"]).shift(1))) 69 # print(list((res["ma5"]>=res["ma10"]) & (res["ma5"]<res["ma10"]).shift(1))) 70 71 #1、先取到5日大于10日的True,在取到5日小于10日的True,让后者往后挪一天则按照布尔索引取到所有值,然后再转化为索引 72 73 # 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 74 #例如:5日>10日:# T T T F T T T T F F F F T T T 75 #例如:5日<10日:# F F F T F F F F T T T T F F F 76 #例如:5日<10日,后挪1:# F F F T F F F F T T T T F F F 77 78 #死叉是4日和9日,则都是T的时候是金叉,如5日