コード例 #1
0
ファイル: exchange.py プロジェクト: chinqkung/quantdigger
    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
コード例 #2
0
ファイル: exchange.py プロジェクト: zckm/quantdigger
    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
コード例 #3
0
ファイル: data_context.py プロジェクト: QuantFans/quantdigger
 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
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
ファイル: context.py プロジェクト: AgeanSea/quantdigger
 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