ibpy如何使用交互式经纪人获得佣金';什么是API?

ibpy如何使用交互式经纪人获得佣金';什么是API?,api,interactive-brokers,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 -------------------

我有以下使用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 

但是,这仅适用于执行价格,因为它在打印输出后显示价格信息。但是它没有显示佣金信息(在我的终端中,它一直在等待),我的代码中有什么错误吗?

thx对于brian的回答,这有一个诀窍:

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()

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

我认为这是“佣金报告”,而不是细节。事实上,我知道是这样的,但是你的代码很难理解。检查,我使用
con.register(commReport,message.commissionReport)
,这样,如果你拼写错误,你会得到一个错误。自动完成也可以。嗨,布莱恩,我试过你的代码,但它根本不显示任何消息。你是否使用了
con.register(CommissionDetailsHandler,message.commissionReport)
?我只是指出如何确保你订阅了正确的消息。我的函数名没有那么详细。我再次尝试了你的代码,它工作了,但是它只在disconnect()之后显示信息,并且没有办法将数据存储到某个变量中