双均线:此处采用5日均线和30日均线
具体实现代码:
import tushare as ts #金融数据接口 import pandas as pd from pandas import Series,DataFrame data=ts.get_k_data(code='002460',start='2015',end='2019-06') data.to_csv('./gfly.csv',) df=pd.read_csv('./gfly.csv',index_col='date',parse_dates=['date']) #将日期列作为列的索引对象 df.drop(labels='Unnamed: 0',axis=1,inplace=True) #清除空白列 df day_5=df['close'].rolling(5).mean() #收盘价的五日均价 rolling依次取值 mean 聚合求值 day_30=df['close'].rolling(30).mean() #30日均价 df['d5']=day_5 df['d30']=day_30 s1= df['d5']< df['d30'] # T->F 出现金叉 F->T 出现死差 s2= df['d5']> df['d30'] # s1 T T F T T T F F F T F T # S2 F F T F F F T T T F T F 向右偏移一位 # T F T T T F T T T F T 此行中的F就是对应的S1发生金叉的日期 # F T F F F T F F F T F 取反后得到的T就是对应的金叉日期 过滤出T gold=df.loc[~(s1 | s2.shift(1))].index #金叉对应的时间 death=df.loc[(s1 & s2.shift(1))].index #出现死叉日期 first_money=100000 #初始可用资金 money=first_money hold=0 #初始持有股票 g1=pd.Series(1,index=gold) #金叉标志位 1 d1=pd.Series(0,index=death) #死叉标志位 0 gd=g1.append(d1).sort_index() for i in range(0,len(gd)): p=df['open'][gd.index[i]] #金叉当天的开盘价 if gd[i]==1: #金叉 会买入股票 hand=(money//(100*p)) #最多可以买几手 hold+=hand*100 #持有股票数量 money-=hand*100*p #剩余可用资金 else: money+=hold*p #股票卖出 hold=0 #清零 price=df['open'][-1] #上个交易日的开盘价 now_money=hold*price+money #可用资金和持有股票价值 print(now_money)