股票筛选器
这是根据微信爱上量化的思路自己写的一个股票筛选器具体代码如下:
https://mp.weixin.qq.com/s/YTOE-uf5l3NsjwWPzQxvFQ
import tushare as ts import pandas as pd from datetime import date,datetime,timedelta from collections import OrderedDict from functools import reduce from collections import namedtuple from functools import partial class stock_filter: def get_stock_dict(self,day,code): history_days=(date.today()+timedelta(days=day)).strftime('%Y-%m-%d') stock_hist=ts.get_hist_data(code,history_days) if stock_hist is None: return OrderedDict() stock_hist=stock_hist.sort_index() stock_hist=stock_hist.to_dict(orient='list') float_price=stock_hist['close'] pp_array=[(price1,price2) for price1,price2 in zip(float_price[:-1],float_price[1:])] change_array=list(map(lambda pp:reduce(lambda a,b:round((b-a)/a,4),pp),pp_array)) date_list=[] pp_date=datetime.today().date() for i in range(0,-day): if (pp_date.weekday()!=6) and (pp_date.weekday()!=5): date_list.append(pp_date.strftime('%Y-%m-%d')) pp_date=datetime.strptime((pp_date+timedelta(days=-1)).strftime('%Y-%m-%d'),'%Y-%m-%d').date() date_list=sorted(date_list) stcok_namedtuple=namedtuple('stock',('date','price','change')) stock_dict=OrderedDict((date,stcok_namedtuple(date,peice,change)) for date,peice,change in zip(date_list,float_price[1:],change_array)) return stock_dict def filter_stock(self,code,stockarray_dict,want_up): if stockarray_dict is None: return 0.0 stock_days=((lambda day:day.change>0) if want_up else (lambda day:day.change<0)) want_days=filter(stock_days,stockarray_dict.values()) change_sum=0.0 for day in want_days: change_sum+=day.change return change_sum if __name__=="__main__": pro=ts.pro_api('4d0a4088f9bfdec704c56b6d2c8a4e9970dcf39a0f3251b495939640') data1=pro.stock_basic(exchange='',list_status='L',fields='ts_code,symbol,name,area,industry,list_date') stock_codes=data1.to_dict(orient='list')['symbol'] stocker=stock_filter() down_stock_changes=[] up_stock_changes=[] for code in stock_codes: stock_dict=stocker.get_stock_dict(-9,code) if stock_dict is None: continue down_stock_changes.append(stocker.filter_stock(code,stock_dict,False)) up_stock_changes.append(stocker.filter_stock(code,stock_dict,True)) change={'stock_codes':stock_codes,'up':up_stock_changes,'down':down_stock_changes} data=DataFrame(change) data.to_csv('F:\python\python学习\学习\data.csv')
下面是自己重新更改以后的代码
import tushare as ts import pandas as pd import numpy as np from datetime import date,datetime,timedelta day1=input('你想要的天数:') today_date=datetime.today().date() start_date=(today_date-timedelta(days=int(day1))).strftime('%Y-%m-%d') end_date=today_date.strftime('%Y-%m-%d') data=ts.get_k_data('002812',start_date,end_date) data['change']=data['close'].pct_change() data['signal']=np.where(data['change']>0,1,-1) data_1=data.loc[data['signal']==1] data_1_sum=data_1['change'].sum() print(data_1,data_1_sum)