标签: ibpy

在Interactive Brokers API中获取列出的期权和期货的参数

有很多例子说明如何从盈透证券获得特定资产的价格.但是,当我想获得一个资产的整个选项链时,我不知道列出了哪些特定的攻击.期货相同,我不知道目前有哪些到期日.因此,对于选项,我只是循环遍历所有可能的打击,并且reqMktData每个打击也会产生sleep(1)每100条消息,以避免达到每秒请求数量的限制.显然,其中许多消息返回错误"未找到请求的安全性定义".

这看起来是错误的方法,因为它浪费了很多时间在不存在的资产上.有没有更干净的方法来做这个,或为此目的的特殊功能?

interactive-brokers ibpy

7
推荐指数
2
解决办法
8603
查看次数

ibpy:提取多个合同的API响应

我有兴趣使用ibpy和Interactive Brokers API来获取给定100个股票的实时定时器数据.下面的代码,来自网络上的示例适用于一个股票.有人可以告诉我如何同时为100只股票做这个吗?

Python脚本:

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

def my_callback_handler(msg):
    inside_mkt_bid = ''
    inside_mkt_ask = ''

    if msg.field == 1:
        inside_mkt_bid = msg.price
        print 'bid', inside_mkt_bid
    elif msg.field == 2:
        inside_mkt_ask = msg.price
        print 'ask', inside_mkt_ask


tws = ibConnection()
tws.register(my_callback_handler, message.tickSize, message.tickPrice)
tws.connect()

c = Contract()
c.m_symbol = "DATA"
c.m_secType = "STK"
c.m_exchange = "SMART"
c.m_currency = "USD"

tws.reqMktData(1,c,"",False)
sleep(25)

print 'All done'

tws.disconnect()
Run Code Online (Sandbox Code Playgroud)

命令行输出:

    Server Version: 76
    TWS Time at …
Run Code Online (Sandbox Code Playgroud)

python tws interactive-brokers ibpy

7
推荐指数
1
解决办法
3091
查看次数

如何启用TWS延迟市场数据?

这是我用来请求市场数据的脚本.

我还没有订阅数据馈送,所以我会自动返回延迟的市场数据,但显然我必须启用它,但无法找到这样做的地方.
这是脚本和我得到的错误,我只需要接收延迟数据,所以我可以测试我的算法.

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

def fundamentalData_handler(msg):
    print(msg)

def error_handler(msg):
    print(msg)

tws = ibConnection(port=7496, clientId=100)
tws.register(error_handler, message.Error)
tws.register(fundamentalData_handler, message.fundamentalData)
tws.connect()

c = Contract()
c.m_symbol = 'AAPL'
c.m_secType = 'STK'
c.m_exchange = "SMART"
c.m_currency = "USD"

print "on it"

tws.reqMktData(897,c,"",False)
sleep(50)

tws.disconnect()
Run Code Online (Sandbox Code Playgroud)

错误:

<error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:hfarm>
<error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:eufarm>
<error id=-1, errorCode=2104, errorMsg=Market data farm connection is OK:jfarm> …
Run Code Online (Sandbox Code Playgroud)

python algorithmic-trading interactive-brokers ibpy

7
推荐指数
1
解决办法
2756
查看次数

无法使用python连接到Interactive Brokers

我想用python连接到IB,这是我的代码:

from ib.ext.Contract import Contract
from ib.ext.Order import Order
from ib.opt import Connection, message


def error_handler(msg):

   print "Server Error: %s" % msg

def reply_handler(msg):

   print "Server Response: %s, %s" % (msg.typeName, msg)



if __name__ == "__main__":
 tws_conn = Connection.create(port=7496, clientId=100)
 tws_conn.connect()
 tws_conn.register(error_handler, 'Error')  
 tws_conn.registerAll(reply_handler)
Run Code Online (Sandbox Code Playgroud)

每当我使用此代码时,我收到此错误,表示我无法连接到服务器:

Server Error: <error id=-1, errorCode=504, errorMsg=Not connected>
Server Response: error, <error id=-1, errorCode=504, errorMsg=Not connected>
Run Code Online (Sandbox Code Playgroud)

为什么我无法连接到IB?

python interactive-brokers ibpy

6
推荐指数
1
解决办法
2201
查看次数

IBPY 获取正确的历史成交量数据

我正在尝试从 IBPY 获取历史数据。我明白了,但是音量太低了,根本没用。我想知道如何获得正确的历史成交量估计。

我正在执行以下代码:

from ib.opt import Connection, message
from ib.ext.Contract import Contract
from ib.ext.Order import Order
from time import sleep, strftime

def historical_data_handler(msg):
    print(msg)

connection = Connection.create(port=7496, clientId=999)
connection.register(historical_data_handler, message.historicalData)
connection.connect()

req = Contract()
req.m_secType = "STK"
req.m_symbol = "TSLA"
req.m_currency = "USD"
req.m_exchange = "AMEX"
endtime = strftime('%Y%m%d %H:%M:%S')
connection.reqHistoricalData(1,req,endtime,"1 D","1 hour","TRADES",1,1)

sleep(5)
connection.disconnect()
Run Code Online (Sandbox Code Playgroud)

这是输出:

<historicalData reqId=1, date=20181123  16:30:00, open=333.21, high=333.33, low=331.04, close=332.92, volume=22, count=21, WAP=332.233, hasGaps=False>
<historicalData reqId=1, date=20181123  16:30:00, open=333.21, high=333.33, low=331.04, close=332.92, volume=22, count=21, WAP=332.233, …
Run Code Online (Sandbox Code Playgroud)

algorithmic-trading interactive-brokers ibpy

6
推荐指数
1
解决办法
2353
查看次数

ibpy获取投资组合信息:Interactive Broker,Python

我已成功编写代码,使用代码从TWS的演示版本中提取有关我的职位的信息:

    tws_conn = conn.Connection.create(port=7497, clientId=100)    
    tws_conn.register( acct_update, msg.updateAccountValue,  
    msg.updateAccountTime, msg.updatePortfolio)
    tws_conn.connect()
    tws_conn.reqPositions()
    tws_conn.reqAccountUpdates(True,'DU15181')
Run Code Online (Sandbox Code Playgroud)

但是,它将信息转储为:

<updatePortfolio contract=<Packages.IbPy.ib.ext.Contract.Contract object at 0x06B0FE30>, position=-10, marketPrice=3.4000001, marketValue=-3400.0, averageCost=334.345, unrealizedPNL=-56.55, realizedPNL=0.0, accountName=DU15181>
Run Code Online (Sandbox Code Playgroud)

我想知道如何将上述信息存储到一个数组中,其中包含合同或股票代码列,投资组合数量和不同列中的购买价格

python ibpy

5
推荐指数
1
解决办法
4337
查看次数

如何在 Python 中接收来自 IBs API 的数据?

盈透证券刚刚发布了他们 API 的 Python 版本。我正在尝试获取数据。

我正在使用“Program.py”中的“示例”,只是想获取帐户值。我只想知道帐户清算价值是多少,并将其输入python。这是文档。这是创建和发送请求的代码:

        app = TestApp()
        app.connect("127.0.0.1", 4001, clientId=0)
        print("serverVersion:%s connectionTime:%s" % (app.serverVersion(),
                                                   app.twsConnectionTime()))
        app.reqAccountSummary(9004, 'All', '$LEDGER')
Run Code Online (Sandbox Code Playgroud)

我可以使用 IB 网关,并查看正在发送的请求以及返回到 IB 网关的响应。我不知道如何将响应输入 Python。如果我正确阅读文档,我会看到:

Receiving

Summarised information is delivered via IBApi.EWrapper.accountSummary and IBApi.EWrapper.accountSummaryEnd

    1 class TestWrapper(wrapper.EWrapper):
...
    1     def accountSummary(self, reqId: int, account: str, tag: str, value: str,
    2                        currency: str):
    3         super().accountSummary(reqId, account, tag, value, currency)
    4         print("Acct Summary. ReqId:", reqId, "Acct:", account,
    5               "Tag: ", tag, "Value:", value, "Currency:", currency)
    6 
...
    1     def …
Run Code Online (Sandbox Code Playgroud)

python interactive-brokers ibpy

4
推荐指数
1
解决办法
4717
查看次数

放置订单而不通过IBpy传递订单?

我是新手IBpy,我想知道是否有任何方法可以下达订单而不传输订单,而无需等待人工输入来实际传输订单?

我习惯于placeOrder下订单,但是找不到不发送订单的方法。

任何帮助将不胜感激。

interactive-brokers ibpy

3
推荐指数
1
解决办法
928
查看次数

盈透证券 - 获取 OPT 的历史数据(MIDPOINT 和 TRADES)

我正在尝试通过盈透证券 API 获取在 SPY 上编写的底层证券和期权,虽然获取当前期权(包括罢工、权利等)不是问题,但我坚持获取历史数据,比如从 5 个月到现在。

代码如下:

from ib.ext.Contract import Contract
from ib.ext.ContractDetails import ContractDetails
from ib.opt import ibConnection, message
import time
import datetime

def watcher(msg):
    print(msg)

def contractDetailsHandler(msg):
    contracts.append(msg.contractDetails.m_summary)

def contractDetailsEndHandler(msg):
    global DataWait
    DataWait =  False

def contractHistDetailsHandler(msg):
    contracts.append(msg.contractDetails.m_summary)


con = ibConnection()
con.host = "..."
con.port = ...
con.clientId = 5
con.registerAll(watcher)
con.register(contractDetailsHandler, 'ContractDetails')
con.register(contractDetailsEndHandler, 'ContractDetailsEnd')
con.register(contractHistDetailsHandler, message.historicalData)

con.connect()

contract = Contract()
contract.m_exchange     = "SMART"
contract.m_secType      = "OPT"
contract.m_symbol       = "SPY"
contract.m_currency     = "USD"

endtime = '20170102 01:00:00' …
Run Code Online (Sandbox Code Playgroud)

python api interactive-brokers ibpy

3
推荐指数
1
解决办法
4676
查看次数

IBPY 中的 reqHistoricalData 不返回任何内容 [python]

我正在尝试通过 Ibpy 从盈透证券(IB)获取历史数据。我已经尝试了几个用于此任务的脚本,这些脚本是我从其他人那里改编而来的,他们表明它应该可以工作。然而,它们都不适合我!我是Python新手,所以我承认我对这些方法的工作原理没有完全的了解——但是,我应该尝试最明显的修复。下面我列出了我尝试过的两个脚本。我正在使用 python 2x。

在 TWS 中我有以下设置:

选中:启用 ActiveX 和套接字客户端。未选中:启用 DDE 客户端。未选中:只读 API。选中:下载连接上的未结订单。选中:发送投资组合时包括外汇头寸。选中:发送 EEP 的状态更新。Socket port = 7496.勾选:使用负数绑定自动订单。未选中:创建 API 消息日志文件。未选中:在 API 日志文件中包含市场数据。日志记录级别 = 错误。主API客户端ID = 222。向API发送批量数据的超时时间为30秒。组分交换分离器 = 空白。选中:仅允许来自本地主机的连接。

API - 检查预防措施:绕过 API 订单的订单预防措施。此选项卡中的所有其他内容均未选中。

当我运行 python 脚本时,我已经登录并运行了 TWS,并且与其他人在网上所说的相比,上面的 TWS API 设置似乎是正确的。我有一个订阅美国股票数据的真实 IB 账户。还应该提到的是,我也尝试运行另一个通过 IBPY 下订单的脚本 - 这有效,因此问题似乎仅(至少目前)存在于获取历史数据方面。

脚本1:

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


new_symbolinput = ['AAPL']
newDataList = []  
dataDownload = []  

def historical_data_handler(msg):  
    global newDataList  
    print (msg.reqId, msg.date, msg.close) …
Run Code Online (Sandbox Code Playgroud)

python api ibpy

3
推荐指数
1
解决办法
3997
查看次数

使用python ibPy库获取您的投资组合的位置

我正在使用ibpy获取我的投资组合的头寸.我明白我能做到:

from ib.opt import ibConnection
tws = ibConnection( host = 'localhost',port= 7496, clientId = 123)
tws.reqAccountUpdates(True,'accountnumber')
Run Code Online (Sandbox Code Playgroud)

然后我应该以updatePortfolio()某种方式使用,但我不知道如何.

谢谢

python interactive-brokers ibpy

2
推荐指数
1
解决办法
1765
查看次数

Ibpy 与 Interactive Brokers API 不起作用

我觉得有一些根本性的错误。我从示例代码到示例代码进行尝试,但从未取得任何成功。

下面是我运行的脚本和响应的集合。这些脚本中的大多数来自 StackOverflow 上的示例,此人似乎在此方面取得了成功(经过一些帮助)。唉,我没有成功,只是觉得我所做的一定有什么问题。

在我开始使用似乎在这里不起作用的脚本之前,是我对 Interactive brokers GUI、TWS 的配置。

API - 设置

选中:启用 ActiveX 和套接字客户端。未选中:启用 DDE 客户端。未选中:只读 API。选中:在连接时下载未结订单。选中:发送投资组合时包括外汇头寸。选中:发送 EEP 的状态更新。Socket port = 7496. 勾选:使用负数绑定自动订单。未选中:创建 API 消息日志文件。未选中:在 API 日志文件中包含市场数据。未选中:让 AP​​I 帐户请求切换用户可见的 acc 订阅。日志级别 = 错误。主 API 客户端 ID = 100。向 API 发送批量数据的超时时间为 30 秒。组件交换分隔符 = 空白(此处无条目)。选中:仅允许来自本地主机的连接。

API - 已检查预防措施:绕过 API 订单的订单预防措施。此选项卡中的所有其他内容均未选中。

示例 1。

#test_conn.py

from ib.opt import ibConnection
con = ibConnection(port=7496,clientId=100)
print(con.connect())
Run Code Online (Sandbox Code Playgroud)

运行脚本和响应

C:\Users\alex>python test_conn.py
Server Version: 76
TWS Time at connection:20160314 16:13:59 ICT
True
True
Run Code Online (Sandbox Code Playgroud)

我想我可以连接到交易平台吗?

示例 2。

#test_portfolio.py

from …
Run Code Online (Sandbox Code Playgroud)

python api ibpy

2
推荐指数
1
解决办法
3093
查看次数

未能使用IBPy更改价格数据的时区

我希望能够以EST(纽约)作为时区获得证券的价格数据.我的经纪人是盈透证券.我正在使用带有IBPy库的 python 3.5 .我的问题是,当我修改控制数据时区的reqHistoricalData的第三个参数时,我得到的价格完全相同.

如何重现问题:

  1. 通过指定contract.m_symbol ='AUD',contract.m_secType ='CASH',contract.m_exchange ='IDEALPRO',contract.m_primaryExch ='IDEALPRO',contract.m_currency ='NZD'来创建要查询的合同
  2. 使用reqHistoricalData,以EST作为23/6/2016的时区,获得上述合约的每日开盘价.
  3. 现在通过修改reqHistoricalData的第3个参数来更改时区,以使用JST作为23/6/2016的时区.
  4. 比较第2步和第3步的开盘价

感谢任何帮助.

python timezone interactive-brokers ibpy

2
推荐指数
1
解决办法
331
查看次数

标签 统计

ibpy ×13

interactive-brokers ×10

python ×10

api ×3

algorithmic-trading ×2

timezone ×1

tws ×1