AI量化引擎,优化order_target_weigths函数,优化TopK轮动模型

今天优化了order_target_weights函数:

解决一个bug,topK,当K大于2时会出现“现金不足”的情况:

图片

图片

# 这里负责调仓顺序,先卖后买
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 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])

这是29个行业的TopK的回测结果:

图片

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

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

相关推荐

发表回复

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