嗨,我正在尝试按照此处使用 IBPy:https ://github.com/blampe/IbPy ,它的反应非常奇怪。调用 EClientSocket 类的方法返回数据,但任何调用 EWrapper 或 EWrapper 方法的 EClientSocket 方法都返回 None 和/或有问题。我意识到 IB 的 API 在其 Java 源中是异步的,但我不知道它在哪里中断。我在 TWS 中启用了 DDE/Socket 连接,甚至指定了 clientId(100)。
我正在使用来自此链接的 IB TWS 演示:https ://www.interactivebrokers.com/en/index.php?f=553&twsdemo=1和 Python 3.4。我的 IBpy 版本是使用 pip install ib-api 安装的。
这是我的代码:
from ib.opt import ibConnection, Connection, message
from ib.ext.Contract import Contract
from ib.ext.EWrapper import EWrapper
from ib.ext.EClientSocket import EClientSocket
from ib.ext.ExecutionFilter import ExecutionFilter
from ib.ext.Order import Order
import time
from time import sleep
def reply_handler(msg):
print("Reply:", msg)
def create_contract(symbol, sec_type, exch, prim_exch, curr):
contract = Contract()
contract.m_symbol = symbol
contract.m_sec_type = sec_type
contract.m_exch = exch
contract.m_prim_exch = prim_exch
contract.m_curr = curr
return contract
if __name__ == "__main__":
tws_conn = ibConnection(host='localhost', port=7496, clientId=100)
tws_conn.connect()
tws_conn.registerAll(reply_handler)
contract = Contract()
contract.m_symbol = 'GE'
contract.m_exchange = 'SMART'
contract.m_localSymbol = 'GE'
contract.m_primaryExch = 'SMART'
contract.m_currency = 'USD'
contract.m_secType = 'STK'
#EClientSocket only methods
reply_handler(tws_conn.isConnected())
reply_handler(tws_conn.serverVersion())
reply_handler(tws_conn.TwsConnectionTime())
#EWrapper methods or calls to EWrapper methods
reply_handler(tws_conn.reqCurrentTime())
reply_handler(tws_conn.reqAccountUpdates(1, ''))
reply_handler(tws_conn.currentTime())
reply_handler(tws_conn.reqMktData(1, contract, '', False))
reply_handler(tws_conn.contractDetails(1, contract))
这是运行脚本时的控制台输出:
服务器版本:76
TWS 连接时间:20150529 23:29:54 PST
回复:真
回复:76
回复:20150529 23:29:54 PST
回复:无
回复:无
回复:currentTime time=None
回复:无
回复:无
回复:contractDetails reqId=1,contractDetails=ib.ext.Contract.Contract 对象在 0x000000000287FB70
回复:无
您可以看到,在第三种方法之后,最后一次 EClientSocket 调用它停止工作。我查看了 IB 和 IBpy 的文档,Stackoverflow 上也没有提到这个特定问题。谢谢你的帮助!