我在 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,我们买入,如果当前价格大于up_stop或者我们买入后小于up,我们卖出。因此,从代码中,我无法生成没有足够现金支付的订单,因为订单是根据我当前的现金计算的。
那么我哪里错了?