Ejemplo n.º 1
0
def update_margin_buy(new_start_date, new_end_date, margin_df):
    future_trade_days = get_trade_days(start_date=margin_df.index[-1], end_date=new_end_date)[1:]  # 第一天重复
    old_trade_days = get_trade_days(start_date=new_start_date, end_date=margin_df.index[0])[:-1]  # 最后一天重复
    new_trade_days = list(future_trade_days) + list(old_trade_days)

    if len(new_trade_days) > 0:
        for date in new_trade_days:
            margin_df.loc[date] = np.nan
        margin_buy_value.index = pd.to_datetime(margin_buy_value.index) # 最后新加的行index不是datetime

        for stock in tqdm(margin_df.columns):
            if len(future_trade_days) > 0:

                for d in future_trade_days:
                    margin_df.loc[d] = np.nan
                margin_buy_value.index = pd.to_datetime(margin_buy_value.index)  # 最后新加的行index不是datetime

                df1 = get_mtss(stock, future_trade_days[0], future_trade_days[-1], fields=['date', 'sec_code', 'fin_buy_value'])
                df1.index = pd.to_datetime(df1['date'])
                margin_df[stock].loc[df1.index] = df1['fin_buy_value'].values

            if len(old_trade_days) > 0:

                for d in old_trade_days:
                    margin_df.loc[d] = np.nan
                margin_buy_value.index = pd.to_datetime(margin_buy_value.index)  # 最后新加的行index不是datetime

                df2 = get_mtss(stock, old_trade_days[0], old_trade_days[-1], fields=['date', 'sec_code', 'fin_buy_value'])
                df2.index = pd.to_datetime(df2['date'])
                margin_df[stock].loc[df2.index] = df2['fin_buy_value'].values

        margin_df.to_csv('/Users/caichaohong/Desktop/Zenki/融资融券/margin_buy_value.csv')

    else:
        print("No need to Update")
Ejemplo n.º 2
0
def update_st(st_df, new_end_date, new_start_date):
    future_trade_days = get_trade_days(start_date=st_df.index[-1],
                                       end_date=new_end_date)[1:]  # 第一天重复
    old_trade_days = get_trade_days(start_date=new_start_date,
                                    end_date=st_df.index[0])[:-1]  # 最后一天重复
    new_trade_days = list(future_trade_days) + list(old_trade_days)

    if len(new_trade_days) > 0:
        for date in new_trade_days:
            st_df.loc[date] = np.nan

            get_extras(info,
                       security_list,
                       start_date='2015-01-01',
                       end_date='2015-12-31',
                       df=True,
                       count=None)

            st_df.loc[date][df['code']] = df['circulating_market_cap'].values
    else:
        print("No need to Update")

    st_df.index = pd.to_datetime(st_df.index)
    st_df = st_df.sort_index(axis=0)
    st_df = st_df.sort_index(axis=1)  # 按股票代码排序
    st_df = st_df.dropna(how='all', axis=0)
    st_df.to_csv('/Users/caichaohong/Desktop/Zenki/price/is_st.csv')
Ejemplo n.º 3
0
    def initDateIndexDict(self):

        self.date_arr = jq.get_trade_days(self.start_date, self.end_date)
        self.date_list = dateArr2List(self.date_arr)

        self.trade_date_arr = jq.get_trade_days(trade_date_begin,
                                                self.end_date)
        self.trade_date_list = dateArr2List(self.trade_date_arr)
        self.date_index_dict = list2Dic(self.trade_date_list)
        self.inverse_date_index_dict = invert_dict(self.date_index_dict)
Ejemplo n.º 4
0
def update_north_data(new_end_date, new_start_date, share, ratio, value,close):
    if (share.index[0] == ratio.index[0]) & (ratio.index[0] == value.index[0]):
        print('all_start_time_equal{}'.format(share.index[0]))
    else:
        print('START time NOT equal')

    if (share.index[-1] == ratio.index[-1]) & (ratio.index[-1] == value.index[-1]):
        print('all_start_time_equal{}'.format(share.index[-1]))
    else:
        print('START time NOT equal')

    future_trade_days = get_trade_days(start_date=share.index[-1], end_date=new_end_date)[1:]  # 第一天重复
    old_trade_days = get_trade_days(start_date=new_start_date, end_date=share.index[0])[:-1]  # 最后一天重复
    new_trade_days = list(future_trade_days) + list(old_trade_days)

    for date in new_trade_days:
        share.loc[date] = np.nan
        ratio.loc[date] = np.nan
        value.loc[date] = np.nan

    df = finance.run_query(
        query(finance.STK_HK_HOLD_INFO).filter(finance.STK_HK_HOLD_INFO.link_id.in_([310001, 310002]),
                                               finance.STK_HK_HOLD_INFO.day.in_(new_trade_days)))

    new_stocks = list(set(df['code']).difference(set(share.columns)))
    for s in new_stocks:
        share[s] = np.nan
        ratio[s] = np.nan
        value[s] = np.nan

    for date in tqdm(new_trade_days):
        temp = finance.run_query(
            query(finance.STK_HK_HOLD_INFO).filter(finance.STK_HK_HOLD_INFO.link_id.in_([310001, 310002]),
                                                   finance.STK_HK_HOLD_INFO.day == date))
        share.loc[date][temp['code']] = temp['share_number'].values # 有error???????
        ratio.loc[date][temp['code']] = temp['share_ratio'].values

        tmp_share = share.loc[date]
        tmp_price = close.loc[date][share.columns]
        value.loc[date] = tmp_price * tmp_share * 10 ** (-8)

    share = share.sort_index(axis=1)
    ratio = ratio.sort_index(axis=1)
    value = value.sort_index(axis=1)
    share.index = pd.to_datetime(share.index)
    ratio.index = pd.to_datetime(ratio.index)
    value.index = pd.to_datetime(value.index)

    share.to_csv('/Users/caichaohong/Desktop/Zenki/南北向资金/share.csv')
    ratio.to_csv('/Users/caichaohong/Desktop/Zenki/南北向资金/ratio.csv')
    value.to_csv('/Users/caichaohong/Desktop/Zenki/南北向资金/value.csv')
Ejemplo n.º 5
0
def syncListTradeDay(sdate, edate):
    listDate = jq.get_trade_days(start_date=sdate, end_date=edate, count=None)
    #filePath= path.join(cfg.jqDataPath, 'trade_days.csv')
    listDate = pd.Series(listDate)
    #pd.Series(listDate).to_csv(filePath,header= 0, index= 0)
    listDate = listDate.map(lambda x: x.strftime("%Y%m%d"))
    return list(listDate)
Ejemplo n.º 6
0
def downloadMinuteBarByDate(start_date, end_date=datetime.today().date()):
    jqdatasdk.auth(JQDATA_USER, JQDATA_PASSWORD)
    """下载所有配置中的合约的分钟线数据"""
    print('-' * 50)
    print(u'开始下载合约分钟线数据')
    print('-' * 50)

    trade_date_list = jqdatasdk.get_trade_days(start_date=start_date,
                                               end_date=end_date)

    i = 0
    for trade_date in trade_date_list:
        if i == 0:
            i = 1
            continue

        symbols_df = jqdatasdk.get_all_securities(types=['futures'],
                                                  date=trade_date)

        for index, row in symbols_df.iterrows():
            downMinuteBarBySymbol(index, row, str(trade_date_list[i]),
                                  str(trade_date_list[i - 1]))

        i += 1

    print('-' * 50)
    print(u'合约分钟线数据下载完成')
    print('-' * 50)
    return
 def dec(i):
     Dec = '12-'+str(i.year)
     start_date = start_rng.loc[Dec].index[0]
     date = pd.to_datetime(jd.get_trade_days(start_date=str(i.year)+'-12-01', end_date=str(i.year)+'-12-30'))
     
     d = date[date > start_date]
     return d[0]
Ejemplo n.º 8
0
def jq_get_trade_days(start_date=None, end_date=None, count=None):
    logger.info(
        "HTTP GET: trade_days, with start_date={}, end_date={}, count={}".
        format(start_date, end_date, count))
    return get_trade_days(start_date=start_date,
                          end_date=end_date,
                          count=count)
 def june(i):
     June = '6-'+str(i.year)
     start_date = start_rng.loc[June].index[0]
     date = pd.to_datetime(jd.get_trade_days(start_date=str(i.year)+'-06-01', end_date=str(i.year)+'-06-30'))
     
     d = date[date > start_date]
     return d[0]
Ejemplo n.º 10
0
    def init_finance_table(self, start_date=0):
        self.authenticate()
        self.stock = jdk.normalize_code(self.stock)
        self.stock_info = jdk.get_security_info(self.stock)

        if self.stock_info is None:
            print('Error: Cannot get data or stock code not correct!')
        '''Internal usage. To get finance table'''
        
        q = jdk.query(jdk.valuation).filter(jdk.valuation.code == self.stock)
        end_date = datetime.now().date()
        
        if start_date == 0:
            df = jdk.get_fundamentals_continuously(q, end_date=end_date, count=5000)
        else:
            # get the days between start date and end date
            date_span = jdk.get_trade_days(start_date=start_date, end_date=end_date)
            if len(date_span) == 0:
                return
            df = jdk.get_fundamentals_continuously(q, end_date=end_date, count=len(date_span))

        if df is None:
            return

        self.finance_data = df.swapaxes('items', 'minor_axis')
        self.finance_data = self.finance_data[self.stock]
        del self.finance_data['day.1']
        del self.finance_data['code.1']
        del self.finance_data['id']
        return
Ejemplo n.º 11
0
def update_financials(new_start_date, new_end_date, cir_mc, pe, ps):
    # share 是持股数df,换成其他df也行,用来检测股票数量是否相等

    future_trade_days = get_trade_days(start_date=pe.index[-1],
                                       end_date=new_end_date)[1:]  # 第一天重复
    old_trade_days = get_trade_days(start_date=new_start_date,
                                    end_date=pe.index[0])[:-1]  # 最后一天重复
    new_trade_days = list(future_trade_days) + list(old_trade_days)

    if len(new_trade_days) > 0:
        for date in new_trade_days:
            cir_mc.loc[date] = np.nan
            pe.loc[date] = np.nan
            ps.loc[date] = np.nan

        for date in tqdm(new_trade_days):
            df = get_fundamentals(
                query(valuation.code, valuation.circulating_market_cap,
                      valuation.pe_ratio, valuation.ps_ratio).filter(
                          valuation.code.in_(list(pe.columns))),
                date=date)
            cir_mc.loc[date][df['code']] = df['circulating_market_cap'].values
            pe.loc[date][df['code']] = df['pe_ratio'].values
            ps.loc[date][df['code']] = df['ps_ratio'].values
    else:
        print("No need to Update")
    cir_mc.index = pd.to_datetime(cir_mc.index)
    pe.index = pd.to_datetime(pe.index)
    ps.index = pd.to_datetime(ps.index)

    cir_mc = cir_mc.sort_index(axis=0)  # 按index排序
    pe = pe.sort_index(axis=0)  # 按index排序
    ps = ps.sort_index(axis=0)  # 按index排序

    cir_mc = cir_mc.sort_index(axis=1)  # 按股票代码排序
    pe = pe.sort_index(axis=1)  # 按股票代码排序
    ps = ps.sort_index(axis=1)  # 按股票代码排序

    cir_mc = cir_mc.dropna(how='all', axis=0)
    pe = pe.dropna(how='all', axis=0)
    ps = ps.dropna(how='all', axis=0)

    cir_mc.to_csv(
        '/Users/caichaohong/Desktop/Zenki/financials/circulating_market_cap.csv'
    )
    pe.to_csv('/Users/caichaohong/Desktop/Zenki/financials/pe_ratio.csv')
    ps.to_csv('/Users/caichaohong/Desktop/Zenki/financials/ps_ratio.csv')
Ejemplo n.º 12
0
    def record(self, entity, start, end, size, timestamps):
        df = pd.DataFrame()
        dates = get_trade_days(start_date=start)
        df['timestamp'] = pd.to_datetime(dates)
        df['id'] = [to_time_str(date) for date in dates]
        df['entity_id'] = 'stock_sz_000001'

        df_to_db(df=df, data_schema=self.data_schema, provider=self.provider, force_update=self.force_update)
Ejemplo n.º 13
0
 def get_new_trade_days(self, df):
     last = df.index[len(df) - 1]
     dt = last
     if isinstance(last, str):
         dt = datetime.datetime.strptime(last, '%Y-%m-%d').date()
     dt = dt + datetime.timedelta(days=1)
     days = jqdatasdk.get_trade_days(start_date=dt)
     return days
Ejemplo n.º 14
0
 def insertInfo(self,start_date,end_date):
     #
     df = jq.get_trade_days(start_date=start_date, end_date=end_date) # include start_date,end_date
     df = pd.DataFrame(df)
     df = self.transform_2_jq_loc(df)
     self.table.insert_many(json.loads(df.T.to_json()).values())
     
     self.createIndex()
Ejemplo n.º 15
0
def getTradeDays(dateStr, num_prev):
    validays = []
    numpre = int(num_prev)
    date = datetime.datetime.strptime(dateStr, '%Y-%m-%d')
    tradays = jq.get_trade_days(end_date=date, count=numpre)
    list_tradays = tradays.tolist()  # datetime in list
    for day in list_tradays:
        validays.append(day.strftime("%Y-%m-%d"))
    return validays
Ejemplo n.º 16
0
def update_market_cap(new_start_date, new_end_date, market_cap, close):
    # share 是持股数df,换成其他df也行,用来检测股票数量是否相等

    future_trade_days = get_trade_days(start_date=market_cap.index[-1],
                                       end_date=new_end_date)[1:]  # 第一天重复
    old_trade_days = get_trade_days(
        start_date=new_start_date, end_date=market_cap.index[0])[:-1]  # 最后一天重复
    new_trade_days = list(future_trade_days) + list(old_trade_days)

    if len(new_trade_days) > 0:
        for date in new_trade_days:
            market_cap.loc[date] = np.nan

        for date in tqdm(new_trade_days):
            df = get_fundamentals(query(valuation.code,
                                        valuation.market_cap).filter(
                                            valuation.code.in_(
                                                list(market_cap.columns))),
                                  date=date)
            market_cap.loc[date][df['code']] = df['market_cap'].values
    else:
        print("No need to Update")
    market_cap.index = pd.to_datetime(market_cap.index)
    # close 是持股数,用来检测股票数量是否相等, 新加入股票补齐

    new_stocks = list(set(close.columns).difference(set(market_cap.columns)))
    if len(new_stocks) > 0:
        print('total number of new stocks = {}'.format(len(new_stocks)))
        for s in new_stocks:
            market_cap[s] = np.nan

        for date in tqdm(list(market_cap.index)):
            df = get_fundamentals(query(valuation.code,
                                        valuation.market_cap).filter(
                                            valuation.code.in_(new_stocks)),
                                  date=datetime.date(date))
            # get_fundamentals 必须是 date格式的日期
            market_cap.loc[date][df['code']] = df['market_cap'].values

    market_cap = market_cap.sort_index(axis=0)  # 按index排序
    market_cap = market_cap.sort_index(axis=1)  # 按股票代码排序
    market_cap = market_cap.dropna(how='all', axis=0)
    market_cap.to_csv(
        '/Users/caichaohong/Desktop/Zenki/financials/market_cap.csv')
Ejemplo n.º 17
0
 def insertInfo(self,start_date,end_date):
     
     period_trade_date = jq.get_trade_days(start_date=start_date, end_date=end_date) # include start_date,end_date
     #period_trade_date = TradeDayTable.fetch_period_trade_days(self.database,start_date=start_date, end_date=end_date)
     for date in period_trade_date:
         print ("inserting all_security table,date:",date)
         df = jq.get_all_securities(types=[], date=date)
         df = self.transform_2_jq_loc(df,date)
         self.table.insert_many(json.loads(df.T.to_json()).values())
     self.createIndex()
def get_interval(start_year,end_year):
    
    rng = get_rng(start_year=start_year,end_year=end_year)
    
    ind = npr.randint(0,len(rng))
    start_date = rng[ind].strftime('%Y-%m-%d')
    #适当处理得到结束日期
    end_date = jd.get_trade_days(end_date=rng[ind+1],count=2)[0]

    return (start_date,end_date)
Ejemplo n.º 19
0
def get_trade_list(start, end):
    """
    return:
        trade_list: 时间区间内的交易日
        month_end:  月末时间
        month_start: 月初时间
    """
    trade_list = jq.get_trade_days(start, end)

    return trade_list
Ejemplo n.º 20
0
 def get_trade_days(self):
     """
     获取最近10天交易日
     :return:
     """
     if self.cache.get('trade_days') is None:
         self.cache.set(
             'trade_days',
             jq.get_trade_days(end_date=datetime.datetime.now(), count=10),
             21600)
     return self.cache.get('trade_days')
Ejemplo n.º 21
0
def isOpenFromJqdata(jqDataAccount='13268108673',
                     jqDataPassword='******'):
    jqdatasdk.auth(jqDataAccount, jqDataPassword)
    array = jqdatasdk.get_trade_days(start_date='2018-11-01',
                                     end_date='2019-12-31')
    today = time.strftime('%Y-%m-%d', time.localtime(time.time()))
    for date in array:
        datestr = str(date)
        if today == datestr:
            return True
    return False
Ejemplo n.º 22
0
 def insertInfo(self,start_date,end_date):
     #
     period_trade_date = jq.get_trade_days(start_date=start_date, end_date=end_date) # include start_date,end_date
     
     for date in period_trade_date:
         print ("inserting unfq_price table,date:",date)
         securities = jq.get_all_securities(types=[], date=date)
         df = jq.get_price(security = list(securities.index),start_date=date, end_date=date, frequency='daily', fields=fields, skip_paused=False, fq='none', count=None, panel=False, fill_paused=False)
         df = self.transform_2_jq_loc(df)
         self.table.insert_many(json.loads(df.T.to_json()).values())
     
     self.createIndex()
Ejemplo n.º 23
0
 def get_data_by_date(self, index_code, date):
     stock_codes = jqdatasdk.get_index_stocks(index_code)
     trade_day = jqdatasdk.get_trade_days(end_date=date, count=1)[0]
     q = jqdatasdk.query(jqdatasdk.valuation.code, jqdatasdk.valuation.day,
                         jqdatasdk.valuation.pe_ratio_lyr,
                         jqdatasdk.valuation.pe_ratio,
                         jqdatasdk.valuation.pb_ratio,
                         jqdatasdk.valuation.market_cap,
                         jqdatasdk.valuation.circulating_market_cap).filter(
                             jqdatasdk.valuation.code.in_(stock_codes))
     df = jqdatasdk.get_fundamentals(q, date=trade_day)
     return df
Ejemplo n.º 24
0
 def get_index_data(self, index_code, trade_days):
     open_date = jqdatasdk.get_security_info(index_code).start_date
     if (open_date > trade_days[0]):
         trade_days = jqdatasdk.get_trade_days(start_date=open_date)
     df = pd.DataFrame()
     for day in trade_days:
         dic = self._calc_pe_pb(index_code, day)
         if dic:
             df = df.append(dic, ignore_index=True)
     if not df.empty:
         df.set_index('day', inplace=True)
     return df
Ejemplo n.º 25
0
 def get_trade_days(self, start_date=None, end_date=None, count=None):
     data = None
     if (start_date != None and count != None):
         self.print_line(
             "Error  : trade day info can't work with start_date and count")
     if (self.login):
         data = jqs.get_trade_days(start_date=start_date,
                                   end_date=end_date,
                                   count=count)
         self.log.log(
             "Log : Get all trade days " + "from date {}".format(start_date)
             if start_date != None else "" +
             "to date {}".format(end_date) if end_date != None else "" +
             "count {}".format(count) if count != None else "", self.name)
     return data
def get_sw1_valuation(start_date=None, end_date=None):
    #2014-02-22之后申万一级行业28个
    code = jd.get_industries(name='sw_l1',date='2014-02-22').index.tolist()
    days = jd.get_trade_days(start_date,end_date)
    index = jd.finance.run_query(jd.query(jd.finance.SW1_DAILY_VALUATION).filter(
            jd.finance.SW1_DAILY_VALUATION.date=='2014-02-22'
            ).limit(1)).columns.tolist()
    data =  pd.DataFrame(columns = index)
    for day in days:
        df=jd.finance.run_query(jd.query(jd.finance.SW1_DAILY_VALUATION).filter(
            jd.finance.SW1_DAILY_VALUATION.code.in_(code),
            jd.finance.SW1_DAILY_VALUATION.date==day
            ))
        name1 = set(list(map(lambda x:x[:-1],jd.get_industries(name='sw_l1',date='2014-02-22').name.tolist())))
        name2 = set(df.name.tolist())
        if not name1-name2:
            data = pd.concat([data, df], axis = 0, sort=False)
    return data
Ejemplo n.º 27
0
def downloadAllMinuteBar():
    jqdatasdk.auth(JQDATA_USER, JQDATA_PASSWORD)
    """下载所有配置中的合约的分钟线数据"""
    print('-' * 50)
    print(u'开始下载合约分钟线数据')
    print('-' * 50)

    today = datetime.today().date()

    trade_date_list = jqdatasdk.get_trade_days(end_date=today, count=2)

    symbols_df = jqdatasdk.get_all_securities(types=['futures'], date=today)

    for index, row in symbols_df.iterrows():
        downMinuteBarBySymbol(index, row, str(today), str(trade_date_list[-2]))

    print('-' * 50)
    print(u'合约分钟线数据下载完成')
    print('-' * 50)
    return
Ejemplo n.º 28
0
def downloadDonmainMinuteBar():
    jqdatasdk.auth(JQDATA_USER, JQDATA_PASSWORD)
    """下载所有配置中的合约的分钟线数据"""
    print('-' * 50)
    print(u'开始下载合约分钟线数据')
    print('-' * 50)

    today = datetime.today().date()

    trade_date_list = jqdatasdk.get_trade_days(end_date=today, count=3)

    #symbols_df = jqdatasdk.get_all_securities(types=['futures'], date=today)
    symbols_df = jqdatasdk.get_dominant_future('AG', '2018-09-30')  #jinsong
    downMinuteBarBySymbol("RB9999.XSGE", {'name': 'RB9999.XSGE'.split('.')[0]},
                          str(today), str(trade_date_list[-2]))

    print('-' * 50)
    print(u'合约分钟线数据下载完成')
    print('-' * 50)
    return
Ejemplo n.º 29
0
    def hist_data(code, start_date=None, end_date=None):
        jqdatasdk.auth("13695683829", "ssk741212")
        # 参数检查
        today_str = (datetime.now().date() - timedelta(1)).strftime('%Y-%m-%d')
        if start_date is None or start_date < _start_date:
            start_date = _start_date
        if end_date is None or end_date < _start_date or end_date > today_str:
            end_date = today_str
            # 交易日
        trade_days = get_trade_days(start_date=start_date, end_date=end_date)
        col = _codes[code].get('position')
        name = _codes[code].get('name')

        def data_list():
            for day in trade_days:
                datas = []
                for page in [2, 3, 4]:
                    # 链接
                    url = '%stype=zy%s&date=%s' % (_url_base, page, day)
                    # 页面请求
                    content = requests.get(url).text
                    soup = BeautifulSoup(content, 'html.parser')
                    data = soup.select('tbody[class="tc"] td')
                    if len(data) == 0:
                        break
                    datas.append(data[col].get_text())
                print
                '\r数据更新:板块%s %s %s ' % (code, name, day),
                yield [day] + datas

        # 组织数据(迭代数据生成器)
        df = pd.DataFrame(data=[item for item in data_list()],
                          columns=['date', 'pe', 'pb', 'dyr'])
        df.set_index('date', inplace=True)
        df.index.name = None
        df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
        return df.astype('float')
Ejemplo n.º 30
0
zz800_industry = get_industry(zz800, date=datetime.strftime(datetime.today(), '%Y-%m-%d'))
zz800_industry = pd.DataFrame(zz800_industry).T[[industry_type]]
zz800_industry[industry_type] = zz800_industry[industry_type].apply(lambda x: x['industry_name'])

industries = zz800_industry[industry_type]
industries = list(set(industries))
industries.sort()

# 创建表格  列是日期,行是行业,最后需要转置
market_breadth = pd.DataFrame(index=(['zz800'] + industries))

# 根据交易日来计算宽度
# 最近80天交易日
# 然后倒序[::-1]
# 最后取出80天[:80]
trade_days = get_trade_days(start_date='2015-01-01', end_date=None)[::-1][:market_breadth_days]

for day in tqdm(trade_days):
    # BIAS:(CLOSE-MA(CLOSE,N))/MA(CLOSE,N)*100
    # 负的说明 当前收盘价在MAN日线之下
    BIAS1, BIAS2, BIAS3 = BIAS(zz800, check_date=day, N1=20, N2=60, N3=120)  # 乖离率

    zz800_industry['BIAS20'] = pd.Series(BIAS1)

    day_market_breadth1 = pd.DataFrame()

    # 统计zz800中站在20日线上的有多少占比
    day_market_breadth1.loc['zz800', 'BIAS20'] = round(
        (len(zz800_industry[zz800_industry['BIAS20'] > 0]) / len(zz800_industry)) * 100)

    # 统计每个行业有多少只股票站在20日线上