broker.backtesting [DEBUG]没有足够的现金来填补600800订单[1684]的998股/秒

时间:2015-04-09 11:44:09

标签: python-2.7 pyalgotrade

我在Pyalgotrade中使用优化器来运行我的策略以找到最佳参数。我得到的信息是:

2015-04-09 19:33:35,545 broker.backtesting [DEBUG] Not enough cash to fill 600800 order [1681] for 888 share/s
2015-04-09 19:33:35,546 broker.backtesting [DEBUG] Not enough cash to fill 600800 order [1684] for 998 share/s
2015-04-09 19:33:35,547 server [INFO] Partial result 7160083.45 with parameters: ('600800', 4, 19) from worker-16216
2015-04-09 19:33:36,049 server [INFO] Best final result 7160083.45 with parameters: ('600800', 4, 19) from client worker-16216

这只是信息的一部分。您只能看到我们有结果的参数('600800', 4, 19)('600800', 4, 19),对于其他参数组合,我收到消息:546 broker.backtesting [DEBUG] Not enough cash to fill 600800 order [1684] for 998 share/s

我认为这条消息意味着我创建了一个买单,但我没有足够的现金来忙碌。但是,从我的下面的脚本:

        shares = self.getBroker().getShares(self.__instrument)
        if bars[self.__instrument].getPrice() > up and shares == 0:
            sharesToBuy = int(self.getBroker().getCash()/ bars[self.__instrument].getPrice())
            self.marketOrder(self.__instrument, sharesToBuy)

        if shares != 0 and bars[self.__instrument].getPrice() > up_stop:
            self.marketOrder(self.__instrument, -1 * shares)
        if shares != 0 and bars[self.__instrument].getPrice() < up:
            self.marketOrder(self.__instrument, -1 * shares)

我的策略的逻辑是,当前价格大于上涨,我们买入,如果当前价格大于up_stop或小于我们买入后的价格,我们卖出。因此,从代码中,我无法生成我没有足够现金支付的订单,因为订单是以我当前的现金计算的。

那我哪里出错?

1 个答案:

答案 0 :(得分:1)

您可以根据当前价格计算订单大小,但下一个柱的价格可能会上涨。订单未在当前栏中填写,但从下一栏开始。

关于“部分结果”和“最佳最终结果”消息,您尝试了多少参数组合?请注意,如果您使用10种不同的组合,则不会获得10种不同的“部分结果”,因为它们是以200种组合的批次进行评估的,并且只打印每批200种组合的最佳部分结果。