IbPy:如何将API响应提取到variab中

2024-05-16 11:29:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究IbPy是否可以成为我连接到交互式经纪人交易API的一个好方法。我现在,作为一个测试,试图收集一些股票价格快照,看看我是否可以让IbPy为我工作。我正在使用Brokertron网关连接IB

我从IB API中得到请求的股票价格很好(从我发现的错误处理的一些示例代码中,见下文),所以从技术上讲,它适用于IB API,但我不知道如何将特定字段(字段=4,价格=175.95,见下文)提取到变量中以供以后使用。

有什么办法把字段4的内容变成变量吗?谢谢!

Python示例脚本:

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

class Downloader(object):
    def __init__(self,debug=False):
        self.tws = ibConnection('localhost', 4001, 0)

        if debug:
            self.tws.registerAll(self.debugHandler)

        self.tws.connect()
        self._reqId = 1 # current request id

    def debugHandler(self,msg):
        print '[debug]', msg

    def requestData(self,contract):
        self.tws.reqMktData(self._reqId,c,'',1)
        self._reqId+=1
        return "???"

if __name__=='__main__':
    dl = Downloader(debug=True)
    c = Contract()
    c.m_symbol = 'SPY'
    c.m_secType = 'STK'
    c.m_exchange = 'SMART'
    c.m_currency = 'USD'
    laststockpricefield4 = dl.requestData(c)
    print laststockpricefield4
    sleep(3)
    print 'Done.'

命令行输出:

01-Nov-12 22:30:43 DEBUG Server Version: 65
01-Nov-12 22:30:43 DEBUG TWS Time at connection: 20121101 22:30:43 GMT
???
[debug] ManagedAccounts accountsList=DU15144>
[debug] NextValidId orderId=1>
[debug] TickString tickerId=1, tickType=45, value=1351808899>
[debug] TickPrice tickerId=1, field=4, price=175.95, canAutoExecute=0>
[debug] TickSize tickerId=1, field=5, size=1>
[debug] TickGeneric tickerId=1, tickType=49, value=0.0>
[debug] TickPrice tickerId=1, field=1, price=176.03, canAutoExecute=1>
[debug] TickSize tickerId=1, field=0, size=378>
[debug] TickPrice tickerId=1, field=2, price=176.05, canAutoExecute=1>
[debug] TickSize tickerId=1, field=3, size=344

Tags: fromdebugimportselfapifielddefib
1条回答
网友
1楼 · 发布于 2024-05-16 11:29:28

这能行!

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

class Downloader(object):
    field4price = ''

    def __init__(self):
        self.tws = ibConnection('localhost', 4001, 0)
        self.tws.register(self.tickPriceHandler, 'TickPrice')
        self.tws.connect()
        self._reqId = 1 # current request id

    def tickPriceHandler(self,msg):
        if msg.field == 4:
            self.field4price = msg.price
            #print '[debug]', msg

    def requestData(self,contract): 
        self.tws.reqMktData(self._reqId, contract, '', 1)
        self._reqId+=1

if __name__=='__main__':
    dl = Downloader()
    c = Contract()
    c.m_symbol = 'SPY'
    c.m_secType = 'STK'
    c.m_exchange = 'SMART'
    c.m_currency = 'USD'
    dl.requestData(c)
    sleep(3)
    print 'Price - field 4: ', dl.field4price

相关问题 更多 >