Stock Filter

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)