股票筛选器

这是根据微信爱上量化的思路自己写的一个股票筛选器具体代码如下:

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)
posted @ 2020-01-16 12:57  舒畅123  阅读(630)  评论(0)    收藏  举报