因子跟踪周报:技术因子上涨,估值因子回调

需积分: 0 0 下载量 178 浏览量 更新于2024-08-03 收藏 1.98MB PDF 举报
"招商证券_0527_因子跟踪周报第21周:技术类因子收益良好,估值类因子有所回调.pdf" 本报告聚焦于量化金融领域,具体讨论了2018年5月27日第21周各投资因子的表现。报告指出,在这一周内,技术类因子表现出色,而估值类因子则出现回调。以下是关键知识点的详细分析: 1. 技术类因子:在本周,技术类因子如3个月股价动量(反转)和24日强弱指数(RSI)展现了良好的收益。3个月股价动量因子收益率为1.45%,表明短期股票价格趋势对投资策略的积极影响。24日RSI因子收益率为0.43%,显示股票的短期强度对投资决策的正面贡献。 2. 估值类因子:估值因子整体回调,如EBITDA/EV因子上周收益为1.05%,但本周下降至-1.28%,这是本周收益最差的因子。这可能反映出市场对股票估值的重新评估,投资者可能对高估值的股票持更为谨慎的态度。 3. 因子方向变化:16个被关注的因子中有9个方向发生变化,包括EBITDA/EV、EP、净利润增长率、市净率(BP)、24个月收益率标准差等5个因子从正收益转向负收益,表明市场环境或这些因子所反映的基本面情况可能出现逆转。另外,诸如速动比率、总资产周转率(同比)等因子从负收益转为正收益,可能意味着流动性改善或运营效率提升。 4. 因子收益回顾:过去一年,ROE(净资产收益率)因子收益最高,达到14.82%,显示出公司盈利能力对投资回报的重要性。尽管技术指标类因子在过去一年的整体表现为负,但最近5周连续获得正收益,表明技术指标可能正在逐步恢复影响力,投资者应密切关注。 5. 投资策略建议:基于以上分析,投资者在制定投资策略时,应考虑当前技术因子的积极信号,同时警惕估值因子的回调风险。对于那些方向转变的因子,需要深入研究背后的基本面变化,以便更准确地评估投资机会。 本报告提供了对特定时间段内因子表现的深度洞察,有助于投资者理解市场动态,优化投资组合,并根据因子收益的变化及时调整投资策略。

代码解释并给每行代码添加注释:class CosineAnnealingWarmbootingLR: def __init__(self, optimizer, epochs=0, eta_min=0.05, steps=[], step_scale=0.8, lf=None, batchs=0, warmup_epoch=0, epoch_scale=1.0): self.warmup_iters = batchs * warmup_epoch self.optimizer = optimizer self.eta_min = eta_min self.iters = -1 self.iters_batch = -1 self.base_lr = [group['lr'] for group in optimizer.param_groups] self.step_scale = step_scale steps.sort() self.steps = [warmup_epoch] + [i for i in steps if (i < epochs and i > warmup_epoch)] + [epochs] self.gap = 0 self.last_epoch = 0 self.lf = lf self.epoch_scale = epoch_scale for group in optimizer.param_groups: group.setdefault('initial_lr', group['lr']) def step(self, external_iter = None): self.iters += 1 if external_iter is not None: self.iters = external_iter iters = self.iters + self.last_epoch scale = 1.0 for i in range(len(self.steps)-1): if (iters <= self.steps[i+1]): self.gap = self.steps[i+1] - self.steps[i] iters = iters - self.steps[i] if i != len(self.steps)-2: self.gap += self.epoch_scale break scale *= self.step_scale if self.lf is None: for group, lr in zip(self.optimizer.param_groups, self.base_lr): group['lr'] = scale * lr * ((((1 + math.cos(iters * math.pi / self.gap)) / 2) ** 1.0) * (1.0 - self.eta_min) + self.eta_min) else: for group, lr in zip(self.optimizer.param_groups, self.base_lr): group['lr'] = scale * lr * self.lf(iters, self.gap) return self.optimizer.param_groups[0]['lr'] def step_batch(self): self.iters_batch += 1 if self.iters_batch < self.warmup_iters: rate = self.iters_batch / self.warmup_iters for group, lr in zip(self.optimizer.param_groups, self.base_lr): group['lr'] = lr * rate return self.optimizer.param_groups[0]['lr'] else: return None

2023-03-24 上传
2023-05-10 上传