问答交流

调整卖出订单功能问题

由j2015创建,最终由j2015 被浏览 58 用户

请问如何修改下面的卖出订单的代码,实现判断当股票总仓位大于总市值金额的60%时,卖出大于60%的那部分排序末位的仓位?

if not is_staging and cash_for_sell > 0:
        equities = {e.symbol: e for e, p in context.perf_tracker.position_tracker.positions.items()}
        instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply(
                lambda x: x in equities and not context.has_unfinished_sell_order(equities[x]))])))
        for instrument in instruments:
            context.order_target(context.symbol(instrument), 0)
            cash_for_sell -= positions[instrument]
            if cash_for_sell <= 0:
                break

\

标签

金融交易仓位管理交易策略
评论
  • 你好,现在代码所实现的卖出逻辑为:按机器学习算法预测的排序末位淘汰来卖出,卖出持仓中排名靠后的股票直到卖出的总市值达到cash_for_sell。是否可以详细描述一下,你想要问的是不是一旦某支股票的总市值金额超过60%,就卖出该支股票所占60%以外所有的部分吗?如果是这样的话就要更改底部代码所有的逻辑了。另外,这个文档解释了怎么自定义买入和卖出逻辑,可以留意一下:
  • 不是某只股票超过60%,是要求所有持仓股票市值超过的总金额的60%时,卖出大于60%的那部分排序末位的仓位,也就是某只股票要减仓一部分,请问可以实现吗?
  • 是可以实现的,但是有点复杂,会涉及到更改整个代码的逻辑了。大概方法就是,先判断是否在持仓期内,以及持仓股票市值是否超过总金额的60%,是的话,就用 ```python instruments = list(reversed(list(ranker_prediction.instrument[ranker_prediction.instrument.apply( lambda x: x in equities and not context.has_unfinished_sell_order(equities[x]))]))) ``` 来对持仓的票进行排序。之后再写一个循环,依次卖出排名末尾的票,直到满足所有持仓股票市值小于等于总金额的60%。
  • 你好,请参考以下策略,其中m4模块实现了你想要的一个60%的轮动策略,注意,参数设置在初始化函数里面。感谢你提供的此轮动换仓的策略,我们发现,回测结果显示该策略实现的收益率,以及夏普比率都是非常的理想的。另外,我们认为,可以以此策略为一个模版,通过调试参数,达到更好的结果,我们也欢迎社区的其他用户来多多献策。 [https://bigquant.com/experimentshare/8d85eeab351648da9ab8137c0bc4182e](https://bigquant.com/experimentshare/8d85eeab351648da9ab8137c0bc4182e) \
  • 感谢你给的例子,在例子中有个问题:回测模块初始资金设的1000000,交易详情中 2021-01-05买入¥872434.936,2021-01-06 九点三十买入 ¥386764.685,1月6日九点三十现金不超过230000,应该无法买入¥386764.685。请帮看一下如何修改这个问题?谢谢