ibpy如何使用交互式经纪人获得佣金';什么是API?
我有以下使用IB的python 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 -------------------
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()之后显示信息,并且没有办法将数据存储到某个变量中