下单后如何在盈透证券(IBPY)获取交易价格和佣金?

How to get the trading price and commission in Interactive Brokers (IBPY) after placing an order?

http://interactivebrokers.github.io/tws-api/ 也许有用 link。 This picture is from java API guide of Interacitve Brokers and the numbers I want are price and commission in trade log.

from ib.opt import Connection, message
from ib.ext.Contract import Contract
from ib.ext.Order import Order
from ib.ext.CommissionReport import CommissionReport
from ib.ext.TickType import TickType as tt

创建函数来处理您感兴趣的每种类型的回调。

def error_handler(msg):
    print (msg)

def execDetails(msg):
    print('ID',msg.execution.m_execId,'PRICE',msg.execution.m_price)

def commReport(msg):
    print('ID',msg.commissionReport.m_execId,'COM',msg.commissionReport.m_commission)

tws = Connection.create(port = 4001, clientId=123)
tws.register(execDetails, message.execDetails)
tws.register(commReport, message.commissionReport)
tws.register(error_handler, 'Error')
tws.connect()

你应该等待 connect() 完成,我通常只使用 nextOrderId 回调在准备好时通知我,但在 python 你可以休眠(2)或者在这种情况下我正在使用笔记本,所以我稍后 运行 下一个单元格。

fx = Contract()
fx.m_secType = "CASH" 
fx.m_symbol = "USD"
fx.m_currency = "CAD"
fx.m_exchange = "IDEALPRO"
#tws.reqMktData(1,fx,"",False)

ord = Order()
ord.m_orderType = 'MKT'
ord.m_totalQuantity = 100000
ord.m_action = 'SELL'
tws.placeOrder(123,fx,ord) #increment this every order

这会打印

ID 0001f4e8.57427bd9.01.01 PRICE 1.31565
ID 0001f4e8.57427bd9.01.01 COM 2.6313`

不要忘记 tws.disconnect() 在某些时候