3

我已经使用 Zipline 一段时间了,并且可以从能够腌制回测中受益匪浅,以便以后能够恢复它。这个想法是保存交易算法的状态并在新数据可用时更新它。我开始挑选一些我能想到的属性,但忘记了其他一些属性,因此想知道是否有人有一个简单的解决方案来做到这一点。最好的,文森特

PS:我尝试用那几行更新投资组合。一切正常,但需要覆盖更多属性。

if self.load_former_ptf:
    for k, v in context.former_portfolio.__dict__.items():
        self.TradingAlgorithm.portfolio.__setattr__(k, v)

    updPositionDict = {}
    for p in context.former_portfolio.positions.values():
        formerDelta = p.amount*p.last_sale_price
        newSid = context.symbol(p.sid.symbol)
        newPrice = data[newSid].price
        newQuantity = int(formerDelta/newPrice)
        # portfolio should be made of positions instead of plain dict
        updPositionDict.update({newSid:{'amount':newQuantity, 'cost_basis':p.cost_basis,
                                        'last_sale_date':p.last_sale_price, 'last_sale_price':newPrice,
                                        'sid':newSid}})
    self.TradingAlgorithm.portfolio.positions = updPositionDict
    self.load_former_ptf = False
4

1 回答 1

0

...想知道是否有人有一个简单的解决方案来做到这一点。

对于您的要求,我没有使用zipline并且没有实施的解决方案。我能帮助你的只是pickling你的测试状态。

尽管根据您提供的信息,我只能读到perf_tracker您需要帮助的内容。查看它的来源,腌制它应该没有任何问题(如果我错了,请纠正我,因为我自己没有做过)。

您还可以在此处阅读有关腌制自定义对象的信息。另一个有趣的方法是__repr__帮助从字符串重新创建对象。

于 2018-02-15T10:16:51.210 回答