Пример #1
0
    
    # Connection and Server ##############################################################
    # EClientSocket
    # eConnect                     
    # eDisconnect          --->   connectionClosed      
    # isConnected
    # setServerLogLevel
    # reqCurrentTime       --->   currentTime           self.current_Time
    # serverVersion
    # TwsConnectionTime
    #                      --->   error
    ###################################################################################'''
    print "Testing Connection and Server Group \n"
    print tws.isConnected()
    tws.setServerLogLevel(5)
    tws.reqCurrentTime()
    print "Server Version " + str(tws.serverVersion())
    print "TWS Connection Time %s " % tws.TwsConnectionTime()

    # Executions #########################################################################
    # reqExecutions        --->   execDetails           self.exec_Details_reqId
    #                                                   self.exec_Details_contract
    #                                                   self.exec_Details_execution
    #                      --->   execDetailsEnd        self.exec_DetailsEnd_flag
    #                      --->   commissionReport      self.commission_Report
    ###################################################################################'''
    print "Testing Executions Group \n"
    order_id = []
    tws.reqIds(1)
    while not order_id:
        time.sleep(0.1)
Пример #2
0
class IbGateway(VtGateway):
    """IB接口"""

    #----------------------------------------------------------------------
    def __init__(self, eventEngine, gatewayName='IB'):
        """Constructor"""
        super(IbGateway, self).__init__(eventEngine, gatewayName)
        
        self.host = EMPTY_STRING        # 连接地址
        self.port = EMPTY_INT           # 连接端口
        self.clientId = EMPTY_INT       # 用户编号
        
        self.tickerId = 0               # 订阅行情时的代码编号    
        self.tickDict = {}              # tick快照字典,key为tickerId,value为VtTickData对象
        
        self.orderId  = 0               # 订单编号
        self.orderDict = {}             # 报单字典,key为orderId,value为VtOrderData对象
        
        self.accountDict = {}           # 账户字典
        
        self.connected = False          # 连接状态
        
        self.wrapper = IbWrapper(self)                  # 回调接口
        self.connection = EClientSocket(self.wrapper)   # 主动接口

    #----------------------------------------------------------------------
    def connect(self):
        """连接"""
        # 载入json文件
        fileName = self.gatewayName + '_connect.json'
        fileName = os.getcwd() + '/ibGateway/' + fileName
        
        try:
            f = file(fileName)
        except IOError:
            log = VtLogData()
            log.gatewayName = self.gatewayName
            log.logContent = u'读取连接配置出错,请检查'
            self.onLog(log)
            return
        
        # 解析json文件
        setting = json.load(f)
        try:
            self.host = str(setting['host'])
            self.port = int(setting['port'])
            self.clientId = int(setting['clientId'])
        except KeyError:
            log = VtLogData()
            log.gatewayName = self.gatewayName
            log.logContent = u'连接配置缺少字段,请检查'
            self.onLog(log)
            return            
        
        # 发起连接
        self.connection.eConnect(self.host, self.port, self.clientId)
        
        # 查询服务器时间
        self.connection.reqCurrentTime()
        
        # 请求账户数据主推更新
        self.connection.reqAccountUpdates(True, '')
    
    #----------------------------------------------------------------------
    def subscribe(self, subscribeReq):
        """订阅行情"""
        # 订阅行情
        self.tickerId += 1
        
        contract = Contract()
        contract.m_symbol = str(subscribeReq.symbol)
        contract.m_exchange = exchangeMap.get(subscribeReq.exchange, '')
        contract.m_secType = productClassMap.get(subscribeReq.productClass, '')
        contract.m_currency = currencyMap.get(subscribeReq.currency, '')
        contract.m_expiry = subscribeReq.expiry
        contract.m_strike = subscribeReq.strikePrice
        contract.m_right = optionTypeMap.get(subscribeReq.optionType, '')
    
        self.connection.reqMktData(self.tickerId, contract, '', False)
        
        # 创建Tick对象并保存到字典中
        tick = VtTickData()
        tick.symbol = subscribeReq.symbol
        tick.exchange = subscribeReq.exchange
        tick.vtSymbol = '.'.join([tick.symbol, tick.exchange])
        tick.gatewayName = self.gatewayName
        self.tickDict[self.tickerId] = tick
    
    #----------------------------------------------------------------------
    def sendOrder(self, orderReq):
        """发单"""
        # 增加报单号1,最后再次进行查询
        # 这里双重设计的目的是为了防止某些情况下,连续发单时,nextOrderId的回调推送速度慢导致没有更新
        self.orderId += 1
        
        # 创建合约对象
        contract = Contract()
        contract.m_symbol = str(orderReq.symbol)
        contract.m_exchange = exchangeMap.get(orderReq.exchange, '')
        contract.m_secType = productClassMap.get(orderReq.productClass, '')
        contract.m_currency = currencyMap.get(orderReq.currency, '')
        
        contract.m_expiry = orderReq.expiry
        contract.m_strike = orderReq.strikePrice
        contract.m_right = optionTypeMap.get(orderReq.optionType, '')
        
        # 创建委托对象
        order = Order()
        order.m_orderId = self.orderId
        order.m_clientId = self.clientId
        
        order.m_action = directionMap.get(orderReq.direction, '')
        order.m_lmtPrice = orderReq.price
        order.m_totalQuantity = orderReq.volume
        order.m_orderType = priceTypeMap.get(orderReq.priceType, '')
        
        # 发送委托
        self.connection.placeOrder(self.orderId, contract, order)
        
        # 查询下一个有效编号
        self.connection.reqIds(1)
    
    #----------------------------------------------------------------------
    def cancelOrder(self, cancelOrderReq):
        """撤单"""
        self.connection.cancelOrder(cancelOrderReq.orderID)
    
    #----------------------------------------------------------------------
    def qryAccount(self):
        """查询账户资金"""
        log = VtLogData()
        log.gatewayName = self.gatewayName        
        log.logContent = u'IB接口账户信息提供主推更新,无需查询'
        self.onLog(log) 
    
    #----------------------------------------------------------------------
    def qryPosition(self):
        """查询持仓"""
        log = VtLogData()
        log.gatewayName = self.gatewayName        
        log.logContent = u'IB接口持仓信息提供主推更新,无需查询'
        self.onLog(log) 
    
    #----------------------------------------------------------------------
    def close(self):
        """关闭"""
        self.connection.eDisconnect()
Пример #3
0
    
    # Connection and Server ##############################################################
    # EClientSocket
    # eConnect                     
    # eDisconnect          --->   connectionClosed      
    # isConnected
    # setServerLogLevel
    # reqCurrentTime       --->   currentTime           self.current_Time
    # serverVersion
    # TwsConnectionTime
    #                      --->   error
    ###################################################################################'''       
    print "Testing Connection and Server Group \n"
    print  tws.isConnected()
    tws.setServerLogLevel(5)
    tws.reqCurrentTime()
    print "Server Version " + str(tws.serverVersion())
    print "TWS Connection Time %s " % tws.TwsConnectionTime()





    # Executions #########################################################################
    # reqExecutions        --->   execDetails           self.exec_Details_reqId
    #                                                   self.exec_Details_contract
    #                                                   self.exec_Details_execution
    #                      --->   execDetailsEnd        self.exec_DetailsEnd_flag
    #                      --->   commissionReport      self.commission_Report
    ###################################################################################''' 
    print "Testing Executions Group \n"