美文网首页
winq python基本面选股例子

winq python基本面选股例子

作者: 昵称违法 | 来源:发表于2021-09-15 00:15 被阅读0次

    一、选股的需求

    • 上市日期在给定之日之后
    • 最近N个交易日成交额大于给定值
    • 大股东质押率不大于给定值
    • 归母利润达到指定值
    • 上一年的年报审计意见为正常
    • 最近没有停牌

    二、选股常见方式

    • 一键式选股:各种金融终端里面的自定义条件
    • 自编公式选股:tongdaxin里面自编公式,引用专业财务数据
    • winq选股:
    • 量化API选股:

    三、如何选择

    • 研究阶段的选择:用一键式,自编公式选股
    • 模型稳定后,用winq来综合实现(后期可以直接移植到wind量化接口下)
    • 其他量化接口选股

    四、winq选股的实现例子

    连接服务器

    #连接服务器
    from WindPy import *
    w.start(); #命令超时时间为 120 秒
    print('连接状态:' ,w.isconnected())
    w.start(); #命令超时时间设置成 60
    

    获取A股列表

    import datetime
    
    #获取当前的日期
    today_date = datetime.date.today().isoformat()  #str类型,iso格式:2020-01-01
    print("当前时间为:",today_date)
    
    #读取A股股票列表
    a_stocks = w.wset("sectorconstituent", f"date={today_date};sectorId=a001010100000000", usedf=True)
    
    #错误代码处理
    err_code = a_stocks[0]
    #print(f"err_code = {err_code}")
    if err_code != 0:
        raise ValueError(f"读取A股股票列表,出错,错误代码:{err_code}")
        
    a_stock_df = a_stocks[1]
    """
        格式:
        ===========a_stock_df:dataFrame=============
                            date    wind_code   sec_name
        -------------------------------------------------
        1   2020-02-25 00:00:00.005 000001.SZ   平安银行
        2   2020-02-25 00:00:00.005 000002.SZ   万科A
    """
    
    a_stock_list = a_stock_df.wind_code.values.tolist()
    print(f"读取的股票代码数量为:{len(a_stock_list)}")
    #print(f"type of a_stock_list is {type(a_stock_list)}")
    print("代码的格式如下:",a_stock_list[-1:])
    
    today = '20210914'      #日期  年【----】月【--】日【--】 总计8个数字
    sjnb_date = '20201231'  #审计年报的读入日期   '####1231'-该年年报读取日期,目前尚无2019年的年报审计意见,遂,读取上一年的年报审计意见
    

    函数定义

    import pandas as pd
    
    #获取大股东累计质押数占持股数比例
    def get_dagudong_zhiya_zhanbi(stock_code:str,deal_date:str):
        """
        功能:获取大股东累计质押数占持股数比例
        参数:
        stock_code:股票代码,包含市场后缀,可以是一只或者多只股票 eg. 一只 '002157.SZ'  多只  ['002157.SZ','600797.SH']
        deal_date:交易日期               eg.  '20191106'   
        
        return:df
        ==========================
                   大股东质押占比
        002157.SZ   80.841848
        600797.SH   76.293443
        ==========================
        """
        dd = w.wss(stock_code, "share_pledgeda_pct_largestholder", f"tradeDate={deal_date}", usedf=True)
        df = dd[1]
        df.columns = ['大股东质押占比']
        df['大股东质押占比'] = df.apply(lambda r: 0 if r['大股东质押占比']==None else r['大股东质押占比'],axis = 1)   #单独查询一只股,占比为0时,返回None的处理
        df = df.fillna(0)                                                                                         #查询多只股,占比为0时,返回NaN 
        return df
        
        """
        #=========test code=============
        stock_code = ['002157.SZ','600797.SH']
        deal_date = '20191106'  
    
        mydf =get_dagudong_zhiya_zhanbi(stock_code,deal_date)
        mydf
        """
        
    #获取财报的 [归属母公司的净利润]
    def get_guishu_mugongsi_jinglirun(stock_code:str,deal_date:str):
        """
        功能:归属母公司的净利润
        参数:
        stock_code:股票代码,包含市场后缀,可以是一只或者多只股票 eg. 一只 '002157.SZ'  多只  ['002157.SZ','600797.SH']
        deal_date:交易日期               eg.  '20191106'
        **万矿是取每个季度最后一天作为报告期,如取2017年的四个定期报告数据,那报告期设置分别为 :一季报:2017-03-31,半年报:2017-06-30,三季报:2017-09-30,年报:2017-12-31
        
        return:df
        =============================
                    归属母公司的净利润
         600352.SH      4.814994e+09
        ==============================
        """
        
        dd = w.wss(stock_code, "netprofit_ttm", f"tradeDate={deal_date}", usedf=True)
        df = dd[1]
        df.columns = ['归属母公司的净利润']   
        df['归属母公司的净利润'] = df['归属母公司的净利润'].astype('float')
        return df
    
        """    
        #===========test code=============
        stock_code = ['600352.SH','000001.SZ']
        deal_date = '20181231'
        my_df = get_guishu_mugongsi_jinglirun(stock_code,deal_date)
        display(my_df)
        """
    
    #获取股票的上市日期
    def get_shangshi_date(stockCodes):
        """
        功能:获取股票的上市日期
        参数:
        stockCodes:股票列表  ['000001.SZ','600000.SH']
        
        return:df,
        ===========================================
                        上市日期
            000001.SZ   1991-04-03 00:00:00.005
            600000.SH   1999-11-10 00:00:00.005
        ===========================================
        """
        
        dd = w.wss(stockCodes, "ipo_date", "", usedf=True)
        df = dd[1]
        df.columns = ['上市日期']
        return df
    
        """
        #==============test code===============
        stockCodes = ['000001.SZ','600000.SH']
        df = get_shangshi_date(stockCodes)
        df
        """
    
    #得到某些股票的N日成交额
    def get_amount_nDays(stockCodes:list,days:int,tradeDate:str):
        """
        功能:得到某些股票的N日成交额
        参数:
        stockCodes:要查询的股票列表
        days:N日成交额中的N,往前推的交易天数,days = 1 ,表示往前推一天,连同当天(tradeDate),则有两个交易日
        tradeDate:查询的日期
        
        return df
        ===========================
                    N日成交额
        000001.SZ   3.669349e+10
        600000.SH   1.619291e+10
        ===========================     
        """
        dd = w.wss(stockCodes, "amt_nd", f"days=-{days};tradeDate={tradeDate}", usedf=True)
        df = dd[1]
        df.columns = ["N日成交额"]    
        
        return df
    
        """
        #========test code=====================
        stockCodes = ['000001.SZ','600000.SH']
        days = 20
        tradeDate = '20191111'
        df = get_amount_nDays(stockCodes,days,tradeDate)
        df
        """
        
    #日期格式转换:timestamp_str '2019-01-08 00:00:00.005' to str '20190108'
    def timestamp_2_str(timestamp_str_date):
        """
        功能:日期格式转换:timestamp_str '2019-01-08 00:00:00.005' to str '20190108'
        参数:
        timestamp_str_date:'2019-01-08 00:00:00.005'
        return:string,20190108
        """
        day1 = timestamp_str_date.split(' ')[0].split('-')    #'2019','01','08'
        day2 = f"{day1[0]}{day1[1]}{day1[2]}"  #'20190108'
        return day2
    
    #日期用年数进行相减操作
    import datetime
    from dateutil.relativedelta import relativedelta
    
    #给定日期减去指定年数后,返回一个新日期
    def substract_date_years(mydate:str,years_to_substract:int):
        """
        功能:给定日期减去指定年数后,返回一个新日期
        参数:
        mydate:str日期  eg. '20190101'  '%Y%m%d'
        years_to_substract:int要减去的年数
        
        return:'%Y%m%d' '20180101' 
        备注:pandas矢量化操作有日期加减函数
        """
        d = datetime.datetime.strptime(f"{mydate}", '%Y%m%d')
        #print(d) # 2018-01-31 00:00:00
        new_date = (d - relativedelta(years=years_to_substract)).strftime('%Y%m%d')
        #print(new_date) # 20170131
        return new_date
    
    #获取一个大盘交易日列表,作为交易日时间轴
    def get_dapan_tradeday(dapan:str,begin_dapan_date:str,end_dapan_date:str):
        """
        功能:获取一个大盘交易日列表,作为交易日时间轴
        参数:
        dapan:大盘代码  eg. '000001.SH'#上证指数
        begin_dapan_date:起始日期
        end_dapan_date:结束日期    
        
        return:days , 交易日系列,string
        """
        
        dd =w.wsd(dapan, "close", begin_dapan_date, end_dapan_date, "Fill=Previous", usedf=True)
        df = dd[1]
        df['日期'] = df.index
        days = df['日期'].astype('str').values.tolist()
        return days
    
        """
        #=========test code=============
        dapan = '000001.SH'#上证指数
        begin_dapan_date = '2019-01-01'
        end_dapan_date = '2019-11-10'
        days =  get_dapan_tradeday(dapan,begin_dapan_date,end_dapan_date)    
        """
        
    #审计意见类别
    def get_shenjiyijian(stocks:list,date:str):   
        """
        功能:获取给定股票的某期财务审计意见
        参数:
        stocks:股票列表list
        date:报告期 str
        
        return:df    
        df的格式如下:
        -----------------------
                 |审计意见类别
        -----------------------
        000001.SZ|标准无保留意见
        600000.SH|标准无保留意见
        -----------------------
        """
        dd = w.wss(stocks, "stmnote_audit_category", f"rptDate={date};zoneType=1", usedf=True)
        df = dd[1]
        df.columns = ['审计意见类别']
        return df
        """
        #==========test code==============
        stocks = ['600352.SH','000001.SZ']
        date = '20181231'
        DF = get_shenjiyijian(stocks,date)
        DF
        """
    

    ST股票处理

    #st处理的函数
    
    #获取ST字典
    def get_st_dict(df_st,st_start_date,st_end_date)->dict:   
        #df_st = pd.read_excel(file_path,converters={'代码':str})
        df_st['操作日期'] = pd.to_datetime(df_st['操作日期'])
        #display(df_st)
        
        #整理成字典 
        st_dict = {}
        for name,df in df_st.groupby(['代码']):
            #print(name)
            df = df.sort_values(['操作日期'])
            df.index = range(len(df))
            #display(df)
            df_tmp = get_st_info(df,st_start_date,st_end_date)
            #display(df_tmp)
            st_dict[name] = df_tmp
        print("停牌字典处理完毕!")
        
        return st_dict
        
        #====测试代码====
        file_path = 'C:/缓存数据/ST状态合并表.xls'
        df_st_dict = get_st_dict(file_path) 
        df_st_dict['600163']
    
    
    #获取st的信息
    def get_st_info(df,st_start_date,st_end_date)->pd.DataFrame:
        """
        注意事项:中间用到两个日期常量,需要设定
        df:ST合并表:实施ST 和 撤销ST
        st_start_date:2020-01-01
        st_end_date:2020-12-31
        
        """
        lenth_df = len(df)
        status_list = []
        for idx in range(len(df)):
            #print(idx)
            op = df.at[idx,'操作']
            op_date = df.at[idx,'操作日期']
    
            #1、实施及撤销操作前后的状态处理
            if op == '实施':
                #print('实施')
                #----实施前----
                status_before_op = "正常"
                if '*ST'in df.at[idx,'操作前简称']:
                    #print(f"操作前为:*ST")
                    status_before_op = "*ST"
                else:
                    if 'ST' in df.at[idx,'操作前简称']:
                        #print(f"操作前为:ST")
                        status_before_op = "ST"               
    
                #----实施后----    
                status_after_op = "正常"
                if '*ST'in df.at[idx,'操作后简称']:
                    #print(f"操作后为:*ST")
                    status_after_op = "*ST"
                else:
                    if 'ST' in df.at[idx,'操作后简称']:
                        #print(f"操作后为:ST")
                        status_after_op = "ST"
                if '退' in df.at[idx,'操作后简称']:
                    #print(f"操作后为:退")
                    status_after_op = "退"
    
            elif op == '撤销':
                #print("撤销")
                #----撤销前---- 
                status_before_op = "正常"
                if '*ST'in df.at[idx,'操作前简称']:
                    #print(f"操作前为:*ST")
                    status_before_op = "*ST"
                else:
                    if 'ST' in df.at[idx,'操作前简称']:
                        #print(f"操作前为:ST")
                        status_before_op = "ST"
                if '退' in df.at[idx,'操作前简称']:
                    #print(f"操作后为:退")
                    status_before_op = "退"
    
                #----撤销后----
                status_after_op = "正常"
                if '*ST'in df.at[idx,'操作后简称']:
                    #print(f"操作后为:*ST")
                    status_after_op = "*ST"
                else:
                    if 'ST' in df.at[idx,'操作后简称']:
                        #print(f"操作后为:ST")
                        status_after_op = "ST"
                if '退' in df.at[idx,'操作后简称']:
                    #print(f"操作后为:退")
                    status_after_op = "退"  
    
            #2、状态对应的时间段处理
            if idx == 0:  #当前为第一条记录   
                #增加一段:起始日期到当前日期的状态
                start_date_1 = pd.to_datetime(st_start_date)
                end_date_1 = op_date - pd.DateOffset(days = 1)
                status_cur_1 = status_before_op
                status_list.append([start_date_1,end_date_1,status_cur_1])
    
                #当前日期及之后的状态处理
                start_date_2 = op_date        
                if idx < lenth_df - 1:   #不是最后一条记录,日期取下一次操作的日期
                    end_date_2 = op_date = df.at[idx + 1,'操作日期']  
                    end_date_2 = end_date_2 - pd.DateOffset(days = 1)
                elif idx == lenth_df - 1: #确定是最后一条记录,日期取2019-12-31
                    end_date_2 = pd.to_datetime(st_end_date)
                status_cur_2 = status_after_op
                status_list.append([start_date_2,end_date_2,status_cur_2])        
                #print(f"op = {op},op_date = {op_date}  status_before_op = {status_before_op} status_after_op = {status_after_op} ")   
            elif idx > 0: #当前为第一条记录 
                #当前日期及之后的状态处理
                start_date_2 = op_date
                if idx < lenth_df - 1:   #不是最后一条记录,日期取下一次操作的日期
                    end_date_2 = df.at[idx + 1,'操作日期']  
                    end_date_2 = end_date_2 - pd.DateOffset(days = 1)
                elif idx == lenth_df - 1: #确定是最后一条记录,日期取2019-12-31
                    end_date_2 = pd.to_datetime(st_start_date)
                status_cur_2 = status_after_op
                status_list.append([start_date_2,end_date_2,status_cur_2])        
                #print(f"op = {op},op_date = {op_date}  status_before_op = {status_before_op} status_after_op = {status_after_op} ") 
    
        df_tmp = pd.DataFrame(status_list)
        df_tmp.columns = ['起始日期','结束日期','状态']
        df_tmp
        return df_tmp
    
    
    # .1、设置【起始日期】和【终止日期】
    def get_st(last_3years_date,today_date):
        """
        
        """
        # 生成ST信息
    
        # .2、读取【实施ST】
        dd = w.wset("carryoutspecialtreatment", f"startdate={last_3years_date};enddate={today_date}", usedf=True)
        df = dd[1]
        do_st_df = df[["wind_code","implementation_date","name_before","name_after"]]
        do_st_df.columns=['代码','操作日期','操作前简称','操作后简称']
        do_st_df['操作'] = '实施'
        do_st_df.index = do_st_df.index + do_st_df['操作']
        #print(do_st_df.head(2))
    
        # .3、读取【撤销ST】
        dd = w.wset("cancelspecialtreatment",f"startdate={last_3years_date};enddate={today_date}", usedf=True)
        df = dd[1]
        undo_st_df = df[["wind_code","implementation_date","name_before","name_after"]]
        undo_st_df.columns=['代码','操作日期','操作前简称','操作后简称']
        undo_st_df['操作'] = '撤销'
        undo_st_df.index = undo_st_df.index + undo_st_df['操作']
        #print(undo_st_df.head(2))
    
        # .4、双表合并
        st_df = pd.DataFrame()
        st_df = st_df.append(do_st_df).append(undo_st_df)
        #print(f"{len(do_st_df)},{len(undo_st_df)}")
        #print(len(st_df))
    
        # .5、计算st信息
        st_dict = get_st_dict(st_df,last_3years_date,today_date)  #{last_3years_date};enddate={today_date}"
    
        #print(len(st_dict))
        #print(list(st_dict.keys())[0])
        #display(st_dict["000010.SZ"])
        
        return st_dict
    
    #判断筛选出来的股票集合,在指定的日期,它们是否在停牌字典里,并且当前处于停牌状态
    def get_st_stocks(st_dict:dict,select_stocks:set,check_date:str)->set:
        keys_set = set(st_dict.keys())
        #print(len(keys_set))
        common_set = select_stocks & keys_set
        #print(len(common_set))
        
        common_set
        res_set = set()
        for item in common_set:
            #display(st_dict[item])
            df = st_dict[item]
            df1 = df.query("(起始日期 <= @check_date <= 结束日期) & (状态 != '正常')")
            if len(df1) >=1:
                #print("处于停牌状态")
                res_set.add(item)
            else:
                #print("处于正常状态")
                pass
                
        return res_set  
    

    main流程

    #获取A股列表    API--WSD日期序列 -- 直接拉清单
    all_stocks = a_stock_list
    
    print("指定的截止日期为today = ",today)
    beginDate = substract_date_years(today,3)      #得到今天往前推3年的日期,作为上市日期起始判断值 
    
    
    # 1、选取符合上市日期的股票列表
    df = get_shangshi_date(all_stocks)             #获取上市日期df
    beginDate = pd.to_datetime(beginDate)
    df = df.query("上市日期 <= @beginDate")
    select_stocks = df.index.tolist()
    print("上市日期筛选后的股票",len(select_stocks))
    
    # 2、 近21个交易日成交额大于63亿
    df = get_amount_nDays(select_stocks,20,today)
    df = df.query("N日成交额>= 6300000000")         #近21日成交额总计大于63亿       
    select_stocks = df.index.tolist()              #更新股票列表
    print("近21个交易日成交额大于63亿",len(select_stocks))
    
    
    # 3、第一大股东质押率小于80%
    df = get_dagudong_zhiya_zhanbi(select_stocks,today)   
    df = df.query("大股东质押占比 < 80")
    #display(df)
    select_stocks = df.index.tolist()              #更新股票列表
    print("第一大股东质押率小于80%",len(select_stocks))
    
    
    # 4、归属母公司净利润判断 
    """
    在1月1日-8月30日之间的,选用上一年度报告净利润;
    在9月1日-10月31日之间的,选用当年半年报数据*2;
    在11月1日-12月31日的,选用本年度3季报数据*4/3
    """
    month = pd.to_datetime(today).month
    year = pd.to_datetime(today).year
    if 1 <= month <= 8:              #在1月1日-8月30日之间的,选用上一年度报告净利润;
        last_year = year - 1
        last_year_nianbao_date = f"{last_year}1231"
        df = get_guishu_mugongsi_jinglirun(select_stocks,last_year_nianbao_date)    
    elif 9 <= month <= 10:
        this_year_banNianBao_date = f"{year}0630"
        df = get_guishu_mugongsi_jinglirun(select_stocks,this_year_banNianBao_date)
        df['归属母公司的净利润'] = df.eval("归属母公司的净利润 * 2")
    
    elif 11 <= month <= 12:    
        this_year_quarter3_date = f"{year}0930"
        df = get_guishu_mugongsi_jinglirun(select_stocks,this_year_quarter3_date)
        df['归属母公司的净利润'] = df.eval("归属母公司的净利润 * 4/3")
    
    df = df.query("归属母公司的净利润 >= 50000000 ")  #文档显示为1亿
    select_stocks = df.index.tolist()
    print("归属母公司的净利润:",len(select_stocks))
    
    
    # 5、审核意见处理:排除“标准无保留意见”之外的其它股票
    sjyj_df:pd.DataFrame = get_shenjiyijian(select_stocks,'20181231')  #获取审计意见df
    df2 = sjyj_df.query("审计意见类别 !='标准无保留意见' ")              #筛选非标意见的股票
    feibiao_stocks_set = set(df2.index)                                #非标准意见的股票集合
    final_select_stocks = set(select_stocks) - feibiao_stocks_set      #最终选股股票 = 排除了非标意见的股票 
    print(f"万矿选股结束,选出的股票数量为:{len(final_select_stocks)}")
    
    
    # 6、ST信息获取
    last_3years_date = substract_date_years(today_date.replace("-",""),3) 
    st_dict = get_st(last_3years_date,today_date)
    print(f"ST信息获取,共获取停牌股票数量:{len(st_dict)}")
    
    # 7、刨除ST的股票
    st_set = get_st_stocks(st_dict,final_select_stocks,today)
    final_select_stocks  = final_select_stocks - st_set
    print(f"ST停牌的股票:{len(st_set)}")
    print(f"最终选出的股票只数:{len(final_select_stocks)}")
    

    运行结果

    指定的截止日期为today = 20210914
    上市日期筛选后的股票 3496
    近21个交易日成交额大于x亿 941
    第一大股东质押率小于80% 900
    归属母公司的净利润: 823
    万矿选股结束,选出的股票数量为:817
    停牌字典处理完毕!
    ST信息获取,共获取停牌股票数量:836
    ST停牌的股票:1
    最终选出的股票只数:816

    {'000001.SZ',
    '000002.SZ',
    '000009.SZ',
    '000012.SZ',
    '000027.SZ',
    '000039.SZ',
    '000050.SZ',
    '000060.SZ',
    '000063.SZ',
    '000066.SZ',
    '000100.SZ',
    '000155.SZ',
    '000157.SZ',
    '000158.SZ',
    '000166.SZ',
    '000301.SZ',
    '000333.SZ',
    '000338.SZ',
    '000400.SZ',
    '000401.SZ',
    '000422.SZ',
    '000425.SZ',
    '000488.SZ',
    '000507.SZ',
    '000516.SZ',
    '000519.SZ',
    '000528.SZ',
    '000538.SZ',
    '000547.SZ',
    '000559.SZ',
    '000568.SZ',
    '000576.SZ',
    '000581.SZ',
    '000591.SZ',
    '000596.SZ',
    '000612.SZ',
    '000623.SZ',
    '000625.SZ',
    '000629.SZ',
    '000630.SZ',
    '000635.SZ',
    '000636.SZ',
    '000651.SZ',
    '000655.SZ',
    '000657.SZ',
    '000661.SZ',
    '000672.SZ',
    '000681.SZ',
    '000686.SZ',
    '000698.SZ',
    '000703.SZ',
    '000709.SZ',
    '000717.SZ',
    '000725.SZ',
    '000728.SZ',
    '000731.SZ',
    '000733.SZ',
    '000738.SZ',
    '000739.SZ',
    '000750.SZ',
    '000751.SZ',
    '000758.SZ',
    '000761.SZ',
    '000768.SZ',
    '000776.SZ',
    '000778.SZ',
    '000783.SZ',
    '000786.SZ',
    '000789.SZ',
    '000791.SZ',
    '000799.SZ',
    '000800.SZ',
    '000807.SZ',
    '000818.SZ',
    '000821.SZ',
    '000825.SZ',
    '000829.SZ',
    '000830.SZ',
    '000831.SZ',
    '000833.SZ',
    '000837.SZ',
    '000848.SZ',
    '000858.SZ',
    '000860.SZ',
    '000862.SZ',
    '000875.SZ',
    '000876.SZ',
    '000877.SZ',
    '000878.SZ',
    '000883.SZ',
    '000887.SZ',
    '000893.SZ',
    '000895.SZ',
    '000898.SZ',
    '000902.SZ',
    '000923.SZ',
    '000932.SZ',
    '000933.SZ',
    '000935.SZ',
    '000938.SZ',
    '000949.SZ',
    '000960.SZ',
    '000962.SZ',
    '000963.SZ',
    '000966.SZ',
    '000968.SZ',
    '000969.SZ',
    '000970.SZ',
    '000975.SZ',
    '000977.SZ',
    '000983.SZ',
    '000988.SZ',
    '000990.SZ',
    '000997.SZ',
    '000998.SZ',
    '001979.SZ',
    '002001.SZ',
    '002004.SZ',
    '002007.SZ',
    '002008.SZ',
    '002009.SZ',
    '002010.SZ',
    '002013.SZ',
    '002023.SZ',
    '002025.SZ',
    '002026.SZ',
    '002027.SZ',
    '002028.SZ',
    '002030.SZ',
    '002036.SZ',
    '002041.SZ',
    '002044.SZ',
    '002048.SZ',
    '002049.SZ',
    '002050.SZ',
    '002056.SZ',
    '002057.SZ',
    '002060.SZ',
    '002064.SZ',
    '002068.SZ',
    '002074.SZ',
    '002075.SZ',
    '002078.SZ',
    '002079.SZ',
    '002080.SZ',
    '002091.SZ',
    '002092.SZ',
    '002097.SZ',
    '002108.SZ',
    '002110.SZ',
    '002120.SZ',
    '002123.SZ',
    '002125.SZ',
    '002127.SZ',
    '002128.SZ',
    '002129.SZ',
    '002130.SZ',
    '002131.SZ',
    '002132.SZ',
    '002135.SZ',
    '002136.SZ',
    '002138.SZ',
    '002139.SZ',
    '002140.SZ',
    '002142.SZ',
    '002145.SZ',
    '002149.SZ',
    '002151.SZ',
    '002155.SZ',
    '002156.SZ',
    '002169.SZ',
    '002170.SZ',
    '002171.SZ',
    '002176.SZ',
    '002179.SZ',
    '002180.SZ',
    '002182.SZ',
    '002183.SZ',
    '002184.SZ',
    '002185.SZ',
    '002191.SZ',
    '002192.SZ',
    '002201.SZ',
    '002202.SZ',
    '002206.SZ',
    '002214.SZ',
    '002218.SZ',
    '002221.SZ',
    '002223.SZ',
    '002230.SZ',
    '002233.SZ',
    '002236.SZ',
    '002237.SZ',
    '002240.SZ',
    '002241.SZ',
    '002245.SZ',
    '002249.SZ',
    '002254.SZ',
    '002258.SZ',
    '002266.SZ',
    '002270.SZ',
    '002271.SZ',
    '002273.SZ',
    '002274.SZ',
    '002283.SZ',
    '002285.SZ',
    '002286.SZ',
    '002288.SZ',
    '002291.SZ',
    '002297.SZ',
    '002300.SZ',
    '002304.SZ',
    '002311.SZ',
    '002312.SZ',
    '002318.SZ',
    '002326.SZ',
    '002335.SZ',
    '002340.SZ',
    '002346.SZ',
    '002350.SZ',
    '002352.SZ',
    '002353.SZ',
    '002368.SZ',
    '002371.SZ',
    '002378.SZ',
    '002382.SZ',
    '002384.SZ',
    '002385.SZ',
    '002386.SZ',
    '002389.SZ',
    '002396.SZ',
    '002402.SZ',
    '002407.SZ',
    '002409.SZ',
    '002410.SZ',
    '002413.SZ',
    '002414.SZ',
    '002415.SZ',
    '002428.SZ',
    '002436.SZ',
    '002442.SZ',
    '002453.SZ',
    '002455.SZ',
    '002459.SZ',
    '002460.SZ',
    '002465.SZ',
    '002472.SZ',
    '002475.SZ',
    '002487.SZ',
    '002493.SZ',
    '002497.SZ',
    '002498.SZ',
    '002507.SZ',
    '002508.SZ',
    '002511.SZ',
    '002518.SZ',
    '002520.SZ',
    '002531.SZ',
    '002532.SZ',
    '002533.SZ',
    '002539.SZ',
    '002555.SZ',
    '002559.SZ',
    '002568.SZ',
    '002585.SZ',
    '002594.SZ',
    '002597.SZ',
    '002598.SZ',
    '002600.SZ',
    '002601.SZ',
    '002607.SZ',
    '002611.SZ',
    '002612.SZ',
    '002617.SZ',
    '002624.SZ',
    '002636.SZ',
    '002645.SZ',
    '002648.SZ',
    '002673.SZ',
    '002709.SZ',
    '002714.SZ',
    '002733.SZ',
    '002736.SZ',
    '002738.SZ',
    '002741.SZ',
    '002745.SZ',
    '002747.SZ',
    '002756.SZ',
    '002759.SZ',
    '002791.SZ',
    '002797.SZ',
    '002812.SZ',
    '002821.SZ',
    '002837.SZ',
    '002850.SZ',
    '002895.SZ',
    '002897.SZ',
    '002920.SZ',
    '002922.SZ',
    '002926.SZ',
    '300001.SZ',
    '300002.SZ',
    '300003.SZ',
    '300007.SZ',
    '300012.SZ',
    '300014.SZ',
    '300015.SZ',
    '300017.SZ',
    '300019.SZ',
    '300031.SZ',
    '300033.SZ',
    '300034.SZ',
    '300035.SZ',
    '300036.SZ',
    '300037.SZ',
    '300040.SZ',
    '300041.SZ',
    '300059.SZ',
    '300065.SZ',
    '300070.SZ',
    '300073.SZ',
    '300079.SZ',
    '300082.SZ',
    '300087.SZ',
    '300088.SZ',
    '300091.SZ',
    '300099.SZ',
    '300101.SZ',
    '300113.SZ',
    '300115.SZ',
    '300118.SZ',
    '300122.SZ',
    '300124.SZ',
    '300127.SZ',
    '300129.SZ',
    '300131.SZ',
    '300136.SZ',
    '300142.SZ',
    '300146.SZ',
    '300171.SZ',
    '300173.SZ',
    '300177.SZ',
    '300179.SZ',
    '300183.SZ',
    '300185.SZ',
    '300188.SZ',
    '300203.SZ',
    '300207.SZ',
    '300212.SZ',
    '300221.SZ',
    '300223.SZ',
    '300224.SZ',
    '300227.SZ',
    '300228.SZ',
    '300229.SZ',
    '300236.SZ',
    '300241.SZ',
    '300260.SZ',
    '300263.SZ',
    '300265.SZ',
    '300271.SZ',
    '300274.SZ',
    '300285.SZ',
    '300294.SZ',
    '300302.SZ',
    '300303.SZ',
    '300311.SZ',
    '300316.SZ',
    '300319.SZ',
    '300320.SZ',
    '300323.SZ',
    '300327.SZ',
    '300329.SZ',
    '300339.SZ',
    '300342.SZ',
    '300346.SZ',
    '300347.SZ',
    '300350.SZ',
    '300358.SZ',
    '300369.SZ',
    '300373.SZ',
    '300376.SZ',
    '300377.SZ',
    '300378.SZ',
    '300379.SZ',
    '300382.SZ',
    '300390.SZ',
    '300393.SZ',
    '300395.SZ',
    '300408.SZ',
    '300409.SZ',
    '300413.SZ',
    '300418.SZ',
    '300428.SZ',
    '300432.SZ',
    '300433.SZ',
    '300435.SZ',
    '300438.SZ',
    '300441.SZ',
    '300443.SZ',
    '300450.SZ',
    '300454.SZ',
    '300456.SZ',
    '300457.SZ',
    '300458.SZ',
    '300460.SZ',
    '300474.SZ',
    '300476.SZ',
    '300483.SZ',
    '300487.SZ',
    '300488.SZ',
    '300490.SZ',
    '300496.SZ',
    '300497.SZ',
    '300500.SZ',
    '300502.SZ',
    '300503.SZ',
    '300508.SZ',
    '300527.SZ',
    '300529.SZ',
    '300558.SZ',
    '300567.SZ',
    '300568.SZ',
    '300569.SZ',
    '300576.SZ',
    '300581.SZ',
    '300582.SZ',
    '300590.SZ',
    '300593.SZ',
    '300595.SZ',
    '300598.SZ',
    '300601.SZ',
    '300604.SZ',
    '300607.SZ',
    '300610.SZ',
    '300613.SZ',
    '300618.SZ',
    '300623.SZ',
    '300629.SZ',
    '300631.SZ',
    '300648.SZ',
    '300655.SZ',
    '300657.SZ',
    '300661.SZ',
    '300663.SZ',
    '300671.SZ',
    '300672.SZ',
    '300677.SZ',
    '300679.SZ',
    '300693.SZ',
    '300696.SZ',
    '300699.SZ',
    '300708.SZ',
    '300712.SZ',
    '300719.SZ',
    '300724.SZ',
    '300725.SZ',
    '300726.SZ',
    '300727.SZ',
    '300737.SZ',
    '300747.SZ',
    '300750.SZ',
    '600000.SH',
    '600006.SH',
    '600008.SH',
    '600010.SH',
    '600011.SH',
    '600016.SH',
    '600018.SH',
    '600019.SH',
    '600021.SH',
    '600022.SH',
    '600023.SH',
    '600025.SH',
    '600027.SH',
    '600028.SH',
    '600030.SH',
    '600031.SH',
    '600036.SH',
    '600038.SH',
    '600039.SH',
    '600048.SH',
    '600050.SH',
    '600055.SH',
    '600061.SH',
    '600063.SH',
    '600066.SH',
    '600072.SH',
    '600075.SH',
    '600079.SH',
    '600085.SH',
    '600089.SH',
    '600095.SH',
    '600096.SH',
    '600104.SH',
    '600109.SH',
    '600110.SH',
    '600111.SH',
    '600116.SH',
    '600118.SH',
    '600123.SH',
    '600126.SH',
    '600132.SH',
    '600141.SH',
    '600143.SH',
    '600150.SH',
    '600151.SH',
    '600160.SH',
    '600161.SH',
    '600163.SH',
    '600166.SH',
    '600171.SH',
    '600176.SH',
    '600183.SH',
    '600185.SH',
    '600188.SH',
    '600196.SH',
    '600197.SH',
    '600199.SH',
    '600206.SH',
    '600210.SH',
    '600216.SH',
    '600218.SH',
    '600219.SH',
    '600223.SH',
    '600230.SH',
    '600251.SH',
    '600256.SH',
    '600259.SH',
    '600268.SH',
    '600273.SH',
    '600276.SH',
    '600282.SH',
    '600295.SH',
    '600297.SH',
    '600298.SH',
    '600307.SH',
    '600308.SH',
    '600309.SH',
    '600312.SH',
    '600316.SH',
    '600328.SH',
    '600330.SH',
    '600332.SH',
    '600338.SH',
    '600346.SH',
    '600348.SH',
    '600352.SH',
    '600360.SH',
    '600361.SH',
    '600362.SH',
    '600363.SH',
    '600366.SH',
    '600367.SH',
    '600369.SH',
    '600372.SH',
    '600379.SH',
    '600383.SH',
    '600389.SH',
    '600392.SH',
    '600395.SH',
    '600406.SH',
    '600409.SH',
    '600418.SH',
    '600426.SH',
    '600428.SH',
    '600435.SH',
    '600436.SH',
    '600438.SH',
    '600456.SH',
    '600459.SH',
    '600460.SH',
    '600470.SH',
    '600481.SH',
    '600482.SH',
    '600483.SH',
    '600487.SH',
    '600489.SH',
    '600497.SH',
    '600499.SH',
    '600500.SH',
    '600507.SH',
    '600509.SH',
    '600516.SH',
    '600517.SH',
    '600519.SH',
    '600522.SH',
    '600529.SH',
    '600531.SH',
    '600536.SH',
    '600546.SH',
    '600547.SH',
    '600549.SH',
    '600552.SH',
    '600559.SH',
    '600563.SH',
    '600567.SH',
    '600569.SH',
    '600577.SH',
    '600580.SH',
    '600581.SH',
    '600582.SH',
    '600584.SH',
    '600585.SH',
    '600586.SH',
    '600587.SH',
    '600588.SH',
    '600590.SH',
    '600596.SH',
    '600600.SH',
    '600618.SH',
    '600621.SH',
    '600623.SH',
    '600641.SH',
    '600660.SH',
    '600667.SH',
    '600673.SH',
    '600685.SH',
    '600688.SH',
    '600690.SH',
    '600691.SH',
    '600699.SH',
    '600702.SH',
    '600703.SH',
    '600704.SH',
    '600707.SH',
    '600711.SH',
    '600720.SH',
    '600727.SH',
    '600732.SH',
    '600737.SH',
    '600739.SH',
    '600740.SH',
    '600741.SH',
    '600745.SH',
    '600746.SH',
    '600755.SH',
    '600760.SH',
    '600763.SH',
    '600765.SH',
    '600773.SH',
    '600779.SH',
    '600782.SH',
    '600795.SH',
    '600801.SH',
    '600803.SH',
    '600808.SH',
    '600809.SH',
    '600810.SH',
    '600837.SH',
    '600845.SH',
    '600859.SH',
    '600862.SH',
    '600863.SH',
    '600872.SH',
    '600873.SH',
    '600875.SH',
    '600879.SH',
    '600882.SH',
    '600884.SH',
    '600885.SH',
    '600887.SH',
    '600888.SH',
    '600893.SH',
    '600900.SH',
    '600909.SH',
    '600919.SH',
    '600926.SH',
    '600958.SH',
    '600961.SH',
    '600963.SH',
    '600966.SH',
    '600970.SH',
    '600985.SH',
    '600988.SH',
    '600993.SH',
    '600997.SH',
    '600999.SH',
    '601001.SH',
    '601005.SH',
    '601009.SH',
    '601011.SH',
    '601012.SH',
    '601015.SH',
    '601016.SH',
    '601058.SH',
    '601066.SH',
    '601088.SH',
    '601100.SH',
    '601101.SH',
    '601106.SH',
    '601108.SH',
    '601117.SH',
    '601126.SH',
    '601138.SH',
    '601139.SH',
    '601166.SH',
    '601168.SH',
    '601169.SH',
    '601179.SH',
    '601186.SH',
    '601198.SH',
    '601211.SH',
    '601216.SH',
    '601222.SH',
    '601225.SH',
    '601233.SH',
    '601238.SH',
    '601288.SH',
    '601311.SH',
    '601318.SH',
    '601328.SH',
    '601336.SH',
    '601369.SH',
    '60......

    相关文章

      网友评论

          本文标题:winq python基本面选股例子

          本文链接:https://www.haomeiwen.com/subject/tazhgltx.html