繁体   English   中英

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

[英]ibpy how to get commission using interactive broker's API?

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

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

谢谢布莱恩的回答,这可以解决问题:

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

现在我很高兴在任何需要的地方使用佣金

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM