def adjust_limits(self):
self.logger.info("adjust_limits: checking midpoint limits")
current_time = datetime.datetime.today()
for orderid in self.openorders.keys():
if self.openorders[orderid].adjust_periodical == True and orderid in self.__MapToExecuteOrderID:
if (current_time - self.openorders[orderid].last_adjust).total_seconds() > self.limit_adjust_interval*0.9:
contract = self.openorders[orderid].contract
if (current_time - self.openorders[orderid].placed_date) >= self.max_adjust_time:
self.openorders[orderid].ba_offset = 0
self.logger.info("adjust_limits: %s setting ba_offset to zero because max_adjust_time as passed",self.openorders[orderid].contract.m_symbol)
midpoint = self._calc_midpoint(self.openorders[orderid].bid,self.openorders[orderid].ask,self.openorders[orderid].ba_offset,self.openorders[orderid].action,oderid=orderid)
self.logger.debug("midpoint %s", midpoint)
if midpoint is not None:
order = makeStkOrder(self.openorders[orderid].vollume, self.openorders[orderid].action, self._account, ordertype=self.openorders[orderid].ordertype)
order.m_lmtPrice = midpoint
exec_orderid = self.__MapToExecuteOrderID[orderid]
self.con.placeOrder(exec_orderid,contract,order)
self.openorders[orderid].last_adjust = datetime.datetime.today()
self.openorders[orderid].limitprice = order.m_lmtPrice
self.logger.info("adjust_limits: Updated %s order with id %s to %s (bid: %s / ask: %s)",self.openorders[orderid].contract.m_symbol, orderid, order.m_lmtPrice, self.openorders[orderid].bid, self.openorders[orderid].ask)
#reschedule the timer
if len(self.openorders.keys()) > 0:
self.adjist_limits_thread = Timer(self.limit_adjust_interval, self.adjust_limits, ()).start()
else:
self.adjist_limits_thread = None
评论列表
文章目录