量化交易——动量策略vs反转策略

一、动量策略和反转策略介绍 1、动量效应&反转效应

  动量效应(Momentum effect):股票的收益率有延续原来的运动方向的趋势,即过去一段时间收益率较高的股票在未来获得的收益率仍会高于过去收益率较低的股票。

  反转效应(Reversal effect):在一段较长的时间内,表现差的股票在其后的一段时间内有强烈的趋势经历相当大的逆转,要回复到正常水平(reversal to mean),而在给定的一段时间内,最佳股票则倾向于在其后的时间内出现差的表现。

2、动量策略&反转策略

  动量策略:基于股价动量效应的投资策略,如果某只股票在前一段时期表现较好,那么下一端时期该股票仍将有良好表现。

  反转策略:基于股价反转效应的投资策略,如果某只股票在前一段时期表现不好,那么下一段时期该股票将会反转,即表现良好。

  使用策略:

计算股票池中所有股票在前一段时间的收益率

选择收益率最大(最小)的N只股票调仓

二、动量策略&反转策略实现

def initialize(context): # 设定沪深300作为基准 set_benchmark(\'000300.XSHG\') # 开启动态复权模式(真实价格) set_option(\'use_real_price\', True) # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type=\'stock\') # 持股数量 g.N = 10 run_monthly(handle, 1) def handle(context): stocks = get_index_stocks(\'000300.XSHG\') # 沪深300股票的过去30天(不包含今天)的每天的收盘价 df_close = history(30, field=\'close\', security_list=list(stocks)).T # 加入一列——每只股票这30天收益率 df_close[\'ret\'] = (df_close.iloc[:,-1]-df_close.iloc[:,0]) / df_close.iloc[:,0] # ascending=False:根据收益率降序排列——动量策略 # ascending=True:根据收益率升序排列——反转策略 sorted_stocks = df_close.sort_values(\'ret\', ascending=False).index # 找到收益最大/最小的N只股票 to_hold = sorted_stocks[:g.N] for stock in context.portfolio.positions: if stock not in to_hold: order_target_value(stock, 0) to_buy = [stock for stock in to_hold if stock not in context.portfolio.positions] if len(to_buy) > 0: cash_per_stock = context.portfolio.available_cash / len(to_buy) for stock in to_buy: order_value(stock, cash_per_stock)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzgsgx.html