こんにちは、 https ://github.com/blampe/IbPy に従って 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 object at 0x000000000287FB70
返信: なし
3 番目のメソッドの後、最後の EClientSocket 呼び出しが機能しなくなることがわかります。私はIBとIBpyのドキュメントを調べましたが、この特定の問題はStackoverflowのどこにも言及されていません。助けてくれてありがとう!