def make_market(self, bars): """ 价格撮合""" #for order in self._open_orders: #print order.id fill_orders = set() for order in self._open_orders: if order.side == TradeSide.CANCEL: transact = Transaction(order) self.events.put(FillEvent(transact)) fill_orders.add(order) continue try: bar = bars[order.contract] except KeyError: logger.error('所交易的合约[%s]数据不存在' % order.contract) continue transact = Transaction(order) if self._strict: if order.price_type == PriceType.LMT: # 限价单以最高和最低价格为成交的判断条件. if (order.side == TradeSide.KAI and \ (order.direction == Direction.LONG and order.price >= bar.low or \ order.direction == Direction.SHORT and order.price <= bar.high)) or \ (order.side == TradeSide.PING and \ (order.direction == Direction.LONG and order.price <= bar.high or \ order.direction == Direction.SHORT and order.price >= bar.low)): transact.price = order.price # Bar的结束时间做为交易成交时间. transact.datetime = bar.datetime fill_orders.add(order) self.events.put(FillEvent(transact)) elif order.price_type == PriceType.MKT: # 市价单以最高或最低价格为成交价格. if order.side == TradeSide.KAI: if order.direction == Direction.LONG: transact.price = bar.high else: transact.price = bar.low elif order.side == TradeSide.PING: if order.direction == Direction.LONG: transact.price = bar.low else: transact.price = bar.high transact.datetime = bar.datetime fill_orders.add(order) self.events.put(FillEvent(transact)) else: transact.datetime = bar.datetime fill_orders.add(order) # self.events.put(FillEvent(transact)) # end of for if fill_orders: self._open_orders -= fill_orders
def make_market(self, bars): """ 价格撮合""" #for order in self._open_orders: #print order.id fill_orders = set() for order in self._open_orders: if order.side == TradeSide.CANCEL: transact = Transaction(order) self.events.put(FillEvent(transact)) fill_orders.add(order) continue try: bar = bars[order.contract] except KeyError: logger.error('所交易的合约[%s]数据不存在' % order.contract) continue transact = Transaction(order) if self._strict: if order.price_type == PriceType.LMT: # 限价单以最高和最低价格为成交的判断条件. if (order.side == TradeSide.KAI and \ (order.direction == Direction.LONG and order.price >= bar.low or \ order.direction == Direction.SHORT and order.price <= bar.high)) or \ (order.side == TradeSide.PING and \ (order.direction == Direction.LONG and order.price <= bar.high or \ order.direction == Direction.SHORT and order.price >= bar.low)): transact.price = order.price # Bar的结束时间做为交易成交时间. transact.datetime = bar.datetime fill_orders.add(order) self.events.put(FillEvent(transact)) elif order.price_type == PriceType.MKT: # 市价单以最高或最低价格为成交价格. if order.side == TradeSide.KAI: if order.direction == Direction.LONG: transact.price = bar.high else: transact.price = bar.low elif order.side == TradeSide.PING: if order.direction == Direction.LONG: transact.price = bar.low else: transact.price = bar.high transact.datetime = bar.datetime fill_orders.add(order) self.events.put(FillEvent(transact)) else: transact.datetime = bar.datetime fill_orders.add(order) # self.events.put(FillEvent(transact)) # end of for if fill_orders: self._open_orders -= fill_orders
def rolling_forward(self): """ 滚动读取下一步的数据。 """ self.new_row, self.last_curbar = self._Helper.rolling_forward() if not self.new_row: self.last_curbar -= 1 return False, None self.next_datetime = self._Helper.data.index[self.last_curbar] if self.datetime[0] >= self.next_datetime and self.curbar != 0: logger.error('合约[%s] 数据时间逆序或冗余' % self.pcontract) raise return True, self.new_row
def rolling_forward(self): """ 滚动读取下一步的数据。 """ self.new_row, self.last_curbar = self._Helper.rolling_forward() if not self.new_row: self.last_curbar -= 1 return False, None self.next_datetime = self._Helper.data.index[self.last_curbar] if self.datetime[0] >= self.next_datetime and self.curbar != 0: logger.error('合约[%s] 数据时间逆序或冗余' % self.pcontract) raise return True, self.new_row
def rolling_forward(self): """ 滚动读取下一步的数据。 """ new_row, self.last_curbar = self._wrapper.rolling_forward() if not new_row: self.last_curbar -= 1 return False, None self.last_row = [1] # mark self.last_date = self._wrapper.data.index[self.last_curbar] if self.datetime[0] >= self.last_date and self.curbar != 0: logger.error('合约[%s] 数据时间逆序或冗余' % self.pcontract) assert (False) return True, new_row
def rolling_forward(self): """ 滚动读取下一步的数据。 """ new_row, self.last_curbar = self._wrapper.rolling_forward() if not new_row: self.last_curbar -= 1 return False, None self.last_row = [1] # mark self.last_date = self._wrapper.data.index[self.last_curbar] if self.datetime[0] >= self.last_date and self.curbar != 0: logger.error('合约[%s] 数据时间逆序或冗余' % self.pcontract) assert(False) return True, new_row