回测引擎:优化交易函数

每天都在思考,如何给大家更多,更好的价值。如何优化量化的工程大数据能力,如何挖掘出更优的因子,组合出更好的策略

今天的核心工作:

1、158个因子,优选排序后,相关分析,取相关性低的,合成因子,进行回测。可以等权,按IC值加权合成。2、机器学习模型对优选因子 训练回测。对整个因子集进行训练,提取因子特征重要性。与IC分析做对比。

之前的文章 ,我们对alpha158进行了ic分析并排序。年化63.9%,夏普1.4的沪深300股票池单因子(代码+数据)

今天优化了order_target_weights函数:避免计算误差,超过10%的比率才会调仓:

if abs(new_w - curr_weights[s]) > 0.1:  # 大于10%的幅度才调。

# 这里负责调仓顺序,先卖后买
def order_target_weights(self, weights: dict):
# 卖出的先调仓
to_sell = []
to_close = []
for holding, _ in self.portfolio.curr_holding.items():
# 当前持仓没有在 目标仓位里,那就清仓。 if holding not in weights.keys(): to_close.append(holding) if len(to_close): self.close_symbols(to_close) # 前面清仓之后,curr_holding里就不出现了,也就是说, 原先有,新的没有——卖出。 # 还有 原先有,现在也有,变多或少了; # 原先没有,现在有,买入; total_mv = self.portfolio.get_total_mv() curr_weights = {s: (mv / total_mv) for s, mv in self.portfolio.curr_holding.items()} to_buy = [] for s, new_w in weights.items(): # 新的有,当前也有,当前>新的,卖出 if s in curr_weights.keys(): if abs(new_w - curr_weights[s]) > 0.1: # 大于10%的幅度才调。 if new_w < curr_weights[s]: to_sell.append(s) else: to_buy.append(s) else: # 原先没有,现在有,买入 to_buy.append(s) for s in to_sell: self.order_target_weight(s, weights[s]) for s in to_buy: self.order_target_weight(s, weights[s])

ic值分析:

CORD和CORR都是价量背离的逻辑,MA60/ROC30是动量逻辑;QTLD和QTLU是价格分位点

图片

印象中与我之前使用qlib的lightGBM训练,提取重要特征的逻辑差不多。

不过,在单因子的backtest里,似乎出现了一些问题。

IC值与回测结果没有明显的正相关关系,而且低ic值的结果“出奇”的好。我在查原因,目前优化了一些逻辑,看没有看出来有明显不对的地方————除了没有扣减交易手续费之外。

但这里逻辑,因此今天的进展有点滞后,

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/103975
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 29 日
下一篇 2024 年 7 月 29 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注