ibpy如何使用交互式经纪人的API获得佣金?

时间:2017-01-17 21:19:29

标签: api interactive-brokers

我有以下使用IB的python API的代码,它应该显示价格和佣金:

from ib.ext.ExecutionFilter import ExecutionFilter 
from ib.ext.CommissionReport import CommissionReport
from ib.opt import ibConnection, message 

from time import sleep 

#-- message handlers ------------------------------------------------- 

# print all messages from TWS 
def watcher(msg): 
    pass 

def ExecutionDetailsHandler(msg): 
    global execDetails 
    execDetails = msg.execution 
    #print execDetails.m_price 
    #print execDetails.m_side 

def CommissionDetailsHandler(msg): 
    global commission 
    commission = msg.commissionReport

# global variable that stores the last Execution seen by 
ExecutionDetailsHandler 
CommissionDetailsHandler
execDetails = None 
commission = None

#-- factories 
#----------------------------------------------------------- 

def makeExecFilter(): 
    filter=ExecutionFilter() 
    return filter 

#-- utilities -------------------------------------------------------- 

def getExecutionPrice(): 
    filter=makeExecFilter() 
    con.reqExecutions(744,filter) 

    # wait for TWS message to come back to message handler 
    while execDetails is None: 
        print 'waiting' 
        sleep(1) 
    return execDetails.m_price 

def getCommission(): 
    filter=CommissionReport() 
    con.commissionReport(filter) 

    # wait for TWS message to come back to message handler 
    while commission is None: 
        print 'waiting' 
        sleep(1) 
    return commission.m_commission

con = ibConnection() 
con.registerAll(watcher) 
con.register(ExecutionDetailsHandler, 'ExecDetails') 
con.register(CommissionDetailsHandler, 'commissionDetails') 
con.connect() 

price=getExecutionPrice() 
c = getCommission()
con.disconnect()
print 'The price of one execution is:', price 
print 'The commission fee is:', c 

然而,这只适用于执行价格,因为它会在打印后显示价格信息。但它没有显示佣金信息(在我的终端中它一直在等待),我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:2)

对于布莱恩的回答,这就是诀窍:

commission = None

def commReport(msg):
    global commission
    #print('ID',msg.commissionReport.m_execId,'COM',msg.commissionReport.m_commission)
    commission = msg.commissionReport.m_commission

conn = Connection.create(port=7496, clientId=222)
conn.register(commReport, message.commissionReport)
conn.connect()

现在我很乐意在任何地方使用佣金