线性回归和量化交易基础(下)

使用回归法选股, 和之前选取的因子是一样的

def regression_select(context,bar_dict):
# 查询因子数据
q=query(fundamentals.eod_derivative_indicator.pe_ratio,
    fundamentals.eod_derivative_indicator.market_cap,
    fundamentals.eod_derivative_indicator.pb_ratio,
    fundamentals.financial_indicator.return_on_equity,
    fundamentals.financial_indicator.cost_to_sales,
    fundamentals.income_statement.operating_revenue,
    fundamentals.income_statement.net_profit,
    fundamentals.income_statement.total_expense
    ).filter(
    fundamentals.stockcode.in_(context.hs300))
 
    fund=get_fundamentals(q)
    context.factors_data=fund.T

    # 特征值数据进行处理
    # 根据预测收益率大小来调仓
    # 根据股票池来调仓
 
    deal_with_data(context)

 

在deal_with_data中 我们去对数据进行预处理

def deal_with_data(context):
    # 去除空缺值
    context.factors_data=context.factors_data.dropna()
    # 每一项都去极值
    # 都标准化
    market_cap_factor=context.factors_data["market_cap"]
    print(context.factors_data.head())
    for name in context.factors_data.columns:
        if name == "market_cap":
            continue
        else:
            lr=LinearRegression()
            lr.fit(market_cap_factor.to_frame().values.reshape(-1,1),context.factors_data[name])
            y_predict=lr.predict(market_cap_factor.to_frame().values.reshape(-1,1))

            context.factors_data[name]=context.factors_data[name]-y_predict

    # 市值中性化
    # market_cap 本身不需要中性化
    for name in context.factors_data.columns:
        context.factors_data[name]=mad(context.factors_data[name])
        context.factors_data[name]=stand(context.factors_data[name])
    

    stock_select(context)

在stock_select中直接调仓:

我们调仓的方法很简单,每个月做一次判断,如果不在股票池里面,就卖出,

卖出后,我们对其他的股票做一个仓位的平均, 当然包括新进来的股票,就可以了

def purchase(context):
    for stock in context.portfolio.positions.keys():
        if context.portfolio.positions[stock].quantity>0:
            if stock not in context.stock_list:
                order_target_percent(stock,0)

    for stock in context.stock_list:
        order_target_percent(stock,1.0 / 20)

 

进阶知识:

在使用基本面,即多因子分析的时候,我们可以进行股票和股指期货对冲的操作,来减少行情对我们的影响

因为A股是有期货的,股指期货和股票基本是反着来的,我们可以考虑在熊市的时候,不进行股票的交易,但进行股指期货的交易

 

整理完毕

 

posted @ 2021-03-26 09:06  ProgrammerZT  阅读(57)  评论(0编辑  收藏  举报