1. 程式人生 > >選股策略二:用pandas pd.merge()進行類海龜法則選股

選股策略二:用pandas pd.merge()進行類海龜法則選股

用pd.merge()方法將今天股票資料和過去N1天股票資料合併在一張dataframe中,將今天資料和過去資料比較進行選股
選股策略:今天股票的收盤價和換手率均超過3%,但前N1=10天股價收盤價的方差最小的(收盤價基本水平運動,突然放量漲起來的股票)(類海龜法則)
注:海龜法則:1.收盤價高於過去N1天最高價買入;2.收盤價低於過去N2天最低價賣出;

第一步:pd.concat的應用,將資料載入到一個dataframe中

import pandas as pd
dates=range(20161010,20161022)
pieces=[]
for date in dates:
    path='%d/stock overview.csv'%date
    data
=pd.read_csv(path,encoding='gbk')
pieces.append(data) data=pd.concat(pieces,ignore_index=True)

第二步:進行groupby分組操作,用groupby().std()方法計算方差,按收盤價排序;
注意,groupby中的欄位使用MultiIndex的機構返回,這是我們要用groupby中的欄位再二次處理,使用pd.merge()函式就有問題了
使用reset_index()的方法,將MultiIndex的多層索引重置為0,1,2,….這樣原來groupby返回的多層索引就可以直接轉出列了,可以用繼續二次處理了;

index_data=data[['股票程式碼','股票名稱','交易日期','漲跌幅','換手率','最高價','最低價','開盤價','收盤價']]
index_data=index_data.groupby(['股票程式碼']).std().sort('收盤價')
index_data=index_data.reset_index()

第三步:載入今天的股票資料,使用pd.merge()函式合併今天的股票資料和前N1天的股票資料

data_1021=pd.read_csv('20161021/stock overview.csv',encoding='gbk')
data_1021=data_1021[['股票程式碼'
, '股票名稱','新浪行業', '新浪概念', '新浪地域','漲跌幅', '換手率', '流通市值','量比','市盈率TTM', '市銷率TTM', '市現率TTM', '市淨率','MA金叉死叉','MACD_金叉死叉','KDJ_金叉死叉']] pd.set_option('display.max_columns',50) data_all=pd.merge(data_1021,index_data,on='股票程式碼')

第四步:對合並後的資料進行篩選操作,篩選策略如上文,也可以自己定

data=data_all[(data_all.漲跌幅_x>0.03) & (data_all.換手率_x>0.03)]
data=data[data.流通市值<5000000000]
data=data.sort('收盤價')
data.shape