【选股策略】换手率&市值&MACD&量价(三天齐升)

第一步:选出今天的开盘价、收盘价、换手率大于昨天的开盘价、收盘价、换手率的股票;用concat将今天和昨天两天的股票加载到一个DataFrame,用
groupyby 选出今天的和昨天的开盘价、收盘价和换手率,再用merge()函数将昨天和今天的股票并到一起求今天和昨天开盘价、收盘价和换手率之差;
选出今天的开盘价、收盘价、换手率大于昨天的开盘价、收盘价、换手率的股票;

import pandas as pd
dates1=[20161115,20161116]
pieces1=[]
for date in dates1:
    path='A_stock/overview-push-%d/stock overview.csv'%date
    data1=pd.read_csv(path,encoding='gbk')
    pieces1.append(data1)

data1=pd.concat(pieces1,ignore_index=True)

index_data_A=data1[['股票代码','交易日期','开盘价','收盘价','换手率']]
index_data_A.交易日期=pd.to_datetime(index_data_A.交易日期)
index_data_A=index_data_A.set_index('交易日期')

index_data1=index_data_A.groupby(['股票代码']).last()
index_data2=index_data_A.groupby(['股票代码']).first()
index_data1=index_data1.reset_index()
index_data2=index_data2.reset_index()
index_data_A=pd.merge(index_data1,index_data2,on='股票代码')

index_data_A['开盘价差']=index_data_A.开盘价_x-index_data_A.开盘价_y
index_data_A['收盘价差']=index_data_A.收盘价_x-index_data_A.收盘价_y
index_data_A['换手率差']=index_data_A.换手率_x-index_data_A.换手率_y
index_data_A=index_data_A[(index_data_A.开盘价差>0)&(index_data_A.收盘价差>0)&(index_data_A.换手率差>0)]

第二步:重复第一步,选出昨天的收盘价、开盘价、换手率大于前天的收盘价、开盘价、换手率的股票;

dates2=[20161114,20161115]
pieces2=[]
for date in dates2:
    path='A_stock/overview-push-%d/stock overview.csv'%date
    data2=pd.read_csv(path,encoding='gbk')
    pieces2.append(data2)

data2=pd.concat(pieces2,ignore_index=True)

index_data_B=data2[['股票代码','交易日期','开盘价','收盘价','换手率']]
index_data_B.交易日期=pd.to_datetime(index_data_B.交易日期)
index_data_B=index_data_B.set_index('交易日期')

index_data3=index_data_B.groupby(['股票代码']).last()
index_data4=index_data_B.groupby(['股票代码']).first()
index_data3=index_data3.reset_index()
index_data4=index_data4.reset_index()
index_data_B=pd.merge(index_data3,index_data4,on='股票代码')

index_data_B['开盘价差']=index_data_B.开盘价_x-index_data_B.开盘价_y
index_data_B['收盘价差']=index_data_B.收盘价_x-index_data_B.收盘价_y
index_data_B['换手率差']=index_data_B.换手率_x-index_data_B.换手率_y
index_data_B=index_data_B[(index_data_B.开盘价差>0)&(index_data_B.收盘价差>0)&(index_data_B.换手率差>0)]

index_data=pd.merge(index_data_A,index_data_B,on='股票代码')

第三步:将今天的数据与前面merge出来的数据再merge,然后按照今天的流通市值等指标筛选出符合要求的股票:

data=pd.read_csv('a_stock/overview-push-20161116/stock overview.csv',encoding='gbk')
#data=data[data['MACD_金叉死叉']=='金叉']
#data=data[(data.MACD_DIF<0) & (data.MACD_DEA <0)]
#data=data[(abs(data.MACD_DIF)<0.1) & (abs(data.MACD_DEA) <0.1) ]
data=data[(data['开盘价']<data['MA_5'])|(data['开盘价']<data['MA_30'])|(data['开盘价']<data['MA_20'])|(data['开盘价']<data['MA_10'])|(abs(data.开盘价-data.MA_5)<0.1)]
#data=data[(data['收盘价']>data['MA_60'])&(data['开盘价']<data['MA_60'])]
data=data[data.流通市值<10000000000]
#data=data[data.市盈率TTM<60]
#data=data[data.换手率>0.02]
#data=data[data.涨跌幅<0.05]
#data=data[str(data.股票代码).get(2) ==6]  
data=data.sort('换手率',ascending=False)
data=data[['股票代码','股票名称','换手率','涨跌幅', '流通市值','市盈率TTM','市销率TTM','市现率TTM','市净率','收盘价','开盘价']]
data=pd.merge(data,index_data,on='股票代码')
data=data[['股票代码','股票名称','换手率','涨跌幅', '流通市值','市盈率TTM','市销率TTM','市现率TTM','市净率']]
data=data[data['股票代码'].str.contains('sz0')|data['股票代码'].str.contains('sh6')] #选取某列中不含某些字符的数据
data

第四步:如果前三步筛选出的股票比较多,用第四步来加载前一段时间(一个月/半年)换手率和涨跌幅标准差由低到高排序的股票,找出前段时间换手率无波动;换手率突然放大的股票;

import pandas as pd
dates=range(20161010,20161116)
pieces=[]
for date in dates:
    try:
        data1=pd.read_csv('A_stock/overview-push-%d/stock overview.csv' %date, encoding='gbk')
        pieces.append(data1)
    except OSError:
        pass
    continue
data1=pd.concat(pieces)
data1=data1[['股票代码','股票名称','换手率','涨跌幅']].groupby(['股票代码']).std()
data1=data1.reset_index()
#data1.shape
data2=pd.merge(data,data1,on='股票代码').sort('换手率_y')
data2

这一策略的最终目标是为了寻找在起步阶段突然连续三天有微放量的股票,如果股票前期很平稳,突然开盘价、收盘价、换手率上升,配合均线法则,则成功率较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值