def index_weights(order_book_id, date=None): # type: (str, Optional[Union[str, datetime.date]]) -> pd.Series """ 获取T-1日的指数权重 :param order_book_id: 指数 :param date: 可选,默认为T-1日 :return: 每只股票在指数中的构成权重 :example: 获取上证50指数上个交易日的指数构成 .. code-block:: python3 :linenos: index_weights('000016.XSHG') # [Out] # Order_book_id # 600000.XSHG 0.03750 # 600010.XSHG 0.00761 # 600016.XSHG 0.05981 # 600028.XSHG 0.01391 # 600029.XSHG 0.00822 # 600030.XSHG 0.03526 # 600036.XSHG 0.04889 # 600050.XSHG 0.00998 # 600104.XSHG 0.02122 """ env = Environment.get_instance() data_proxy = env.data_proxy dt = to_date(data_proxy.get_previous_trading_date(env.trading_dt.date())) if date is None: date = dt else: date = to_date(date) if date > dt: raise RQInvalidArgument( _('in index_weights, date {} is no earlier than previous test date {}' ).format(date, dt)) order_book_id = assure_order_book_id(order_book_id) return rqdatac.index_weights(order_book_id, date)
def generate_stock_pool(date, indicator_series, stock_number): order_book_ids = indicator_series.index.tolist() industry_classification = rqdatac.zx_instrument_industry( order_book_ids, date)['first_industry_name'] index_weight = rqdatac.index_weights('000300.XSHG', date) # 优先选入沪深300成分股中权重大于3%的股票 prioritized_stock_pool = index_weight[index_weight >= 0.03].index.tolist() prioritized_stock_industry = industry_classification.loc[ prioritized_stock_pool] remaining_indicator_series = indicator_series.drop(prioritized_stock_pool) selected_stock = prioritized_stock_pool for i in list(industry_classification.unique()): # 除优先选入股票外,在每个行业选取指标得分最高的股票,使得每一个行业股票总数量为5 industry_prioritized_stock = prioritized_stock_industry[ prioritized_stock_industry == i].index.tolist() industry_stocks = industry_classification[ industry_classification == i].drop(industry_prioritized_stock) industry_selected_stock = remaining_indicator_series.loc[ industry_stocks.index].sort_values( )[-(stock_number - len(industry_prioritized_stock)):].index.tolist() selected_stock = selected_stock + industry_selected_stock return selected_stock
first_period_s = '2014-01-01' first_period_e = '2014-06-30' second_period_s = '2014-07-01' second_period_e = '2014-12-30' third_period_s = '2015-01-01' third_period_e = '2015-06-30' fourth_period_s = '2015-07-01' fourth_period_e = '2015-12-30' fifth_period_s = '2016-01-01' fifth_period_e = '2016-06-30' sixth_period_s = '2016-07-01' sixth_period_e = '2016-12-30' seventh_period_s = '2017-01-01' seventh_period_e = '2017-05-20' portfolio1 = rqdatac.index_weights(index_name, second_period_s) equity_list1 = list(portfolio1.index) portfolio2 = rqdatac.index_weights(index_name, third_period_s) equity_list2 = list(portfolio2.index) portfolio3 = rqdatac.index_weights(index_name, fourth_period_s) equity_list3 = list(portfolio3.index) portfolio4 = rqdatac.index_weights(index_name, fifth_period_s) equity_list4 = list(portfolio4.index) portfolio5 = rqdatac.index_weights(index_name, sixth_period_s) equity_list5 = list(portfolio5.index) portfolio6 = rqdatac.index_weights(index_name, seventh_period_s) equity_list6 = list(portfolio6.index) # Min variance optimizer equity_fund_portfolio_min_variance = pt.TestPortfolio(equity_list1, 'stocks') equity_fund_portfolio_min_variance.data_preprocessing(equity_list1, first_period_s, first_period_e)