【问题标题】:Unable to connect to IB TWS using IbPy python api无法使用 IbPy python api 连接到 IB TWS
【发布时间】:2017-12-25 18:56:10
【问题描述】:

我正在尝试使用从 https://github.com/blampe/IbPy/ 找到的代码提取各种代码的历史市场数据

在这个存储库中,有一个如何在“fancy_marketdata.py”文件中请求市场数据的示例。但是,我无法使用以下代码建立连接:

from ib.opt import ibConnection, message
from ib.ext.Contract import Contract
from time import sleep

# print all messages from TWS
def watcher(msg):
    print(msg)

# show Bid and Ask quotes
def my_BidAsk(msg):
    if msg.field == 1:
        print ('%s:%s: bid: %s' % (contractTuple[0],
                       contractTuple[6], msg.price))
    elif msg.field == 2:
        print ('%s:%s: ask: %s' % (contractTuple[0], contractTuple[6], msg.price))

def makeStkContract(contractTuple):
    newContract = Contract()
    newContract.m_symbol = contractTuple[0]
    newContract.m_secType = contractTuple[1]
    newContract.m_exchange = contractTuple[2]
    newContract.m_currency = contractTuple[3]
    newContract.m_expiry = contractTuple[4]
    newContract.m_strike = contractTuple[5]
    newContract.m_right = contractTuple[6]
    print ('Contract Values:%s,%s,%s,%s,%s,%s,%s:' % contractTuple)
    return newContract


con = ibConnection(port=7496,clientId=100)
con.registerAll(watcher)
showBidAskOnly = True  # set False to see the raw messages
if showBidAskOnly:
    con.unregister(watcher, message.tickSize, message.tickPrice,
                   message.tickString, message.tickOptionComputation)
    con.register(my_BidAsk, message.tickPrice)
con.connect()
sleep(1)
tickId = 1


contractTuple = ('QQQQ', 'STK', 'SMART', 'USD', '', 0.0, '')
stkContract = makeStkContract(contractTuple)
con.reqMktData(tickId, stkContract, '', False)
sleep(10)
con.cancelMktData(tickId)
sleep(1)
con.disconnect()
sleep(1)

当我到达“con.connect()”时,它会给出以下错误消息:

Server Version: 76
<error id=None, errorCode=None, errorMsg='Receiver' object has no attribute 'managedAccounts'>TWS Time at connection:20171225 13:38:01 EST

Exception in thread EReader:
Traceback (most recent call last):
  File "/Users/XYZ/anaconda3/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/Users/XYZ/anaconda3/ib/IbPy-master/ib/ext/EReader.py", line 113, in run
    self.m_parent.close()
  File "/Users/XYZ/anaconda3/ib/IbPy-master/ib/ext/EClientSocket.py", line 1714, in close
    self.wrapper().connectionClosed()
AttributeError: 'Receiver' object has no attribute 'connectionClosed'

是因为我使用的是 python 3.6 吗?我的 TWS 版本 968.2h。请任何帮助将不胜感激!我试图提取市场数据的合约是 CBOE 和 CME(分别为 GXBT 和 BRR)用于比特币交易的两个新期货合约。

【问题讨论】:

  • 您的代码看起来不错。你有什么版本的 IBpy,我只是在你提供的 github 链接上查看了源代码,并且 managedAccounts 在那里(在 ext/EWrapper.py 中)。您必须使用旧版本或其他错误。你的代码对我有用。请注意,IB 现在拥有自己的 python API,可能是更好的选择。 interactivebrokers.github.io/#

标签: python interactive-brokers ibpy tws


【解决方案1】:

您的代码没有问题,只需确认您指定了合约元组即可。 这两家交易所最近都设置了您为其请求数据的比特币合约——它们可能还没有让一切顺利运行——该对象可能指的是与你的账户类型有关的特定内容。

根据我的经验,我发现使用来自

的 Anaconda Python 发行版

https://www.anaconda.com/download/

提供最一致的安装。一口气提供您所需的一切...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    • 2020-10-26
    • 2021-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多