예제 #1
0
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)
예제 #2
0
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
예제 #3
0
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)