import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import tushare,talib
from datetime import datetime, timedelta
############# 参数设置 #################
pastNdays = 100 # 根据过去多少天判断
volRatio = 6 # 成交量增长倍数
MACDcrit = 0.1 # MACD大于
############# 程序 #####################
def analyse(code):
df = tushare.get_hist_data(code).sort_values(by='date')
df.reset_index(inplace=True)
startDate = datetime.today() - timedelta(days=pastNdays)
df = df[ df['date'] > str(startDate) ]
df.index = pd.to_datetime(df.date)
vol = df.volume.values
volResult = True if vol[-1]>np.mean(vol[:-1])*volRatio else False
#print(vol[-1])
if not volResult: return False
close = df.close.values
DIF,DEA,MACD = df['DIF'],df['DEA'],df['MACD'] = talib.MACD(close)
macdResult = True if DIF[-1]>MACDcrit and DEA[-1]>MACDcrit else False
#print(DIF[-1],DEA[-1],MACD[-1]*2)
#df[['volume']].plot(title=code); plt.show()
#df[['DIF','DEA','MACD']].plot(title=code); plt.show()
return macdResult
basics = tushare.get_stock_basics()
cnt = 1; n=0
for i in basics.index:
try:
if analyse(i): cnt+=1; print(i,basics.name[i])
except: pass
n+=1
if n%100==0: print(n,'/',basics.index.size)
print(cnt)