首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用IB insync从ib api获取选项链(Python)

使用IB insync从ib api获取选项链(Python)
EN

Stack Overflow用户
提问于 2019-10-29 22:47:54
回答 1查看 906关注 0票数 1

我有这个简单的脚本,以获得在IB的期权链的所有期权价格。我的问题是它太慢了(每个合同11秒)。我知道我可以使用多进程,但似乎仍然有更好的方法来做到这一点。我喜欢ib insync的简单性,并且希望尽可能远离常规的ib api包。如果能帮上忙,我们将不胜感激。

代码语言:javascript
复制
from ib_insync import *

ib = IB()
ib.connect('127.0.0.1', 4001, clientId=666, timeout = 11)


def get_multiple_expirations_strikes(exp_list,strike_list):

    for i in exp_list:
        print('Expiration: ', i)
        for x in strike_list:
            for k in ['C','P']:
                contract = Option('AAPL', i, x, k, 'SMART')
                details = ib.reqTickers(contract)
                print ('strike: ',x,' C/P: ',k," ",details[0].close)

上面的代码看起来运行得很好,但速度非常慢。我试图添加多进程,但显然ib insync不能很好地工作。下面的代码使用了starmap,但它返回了一个错误。

代码语言:javascript
复制
from ib_insync import *
import multiprocessing


ib = IB()
ib.connect('127.0.0.1', 4001, clientId=666, timeout=11)

def get_contract(symbol,exp,strike,kind):

    contract = Option(symbol, exp, strike, kind, 'SMART')
    details = ib.reqTickers(contract)
    print('strike: ', strike, ' C/P: ', kind, " ", details[0].close)



def get_multiple_expirations_strikes(symbol,exp_list,strike_list):

    inputs = []
    for i in exp_list:
        for x in strike_list:
            for k in ['C','P']:
                inputs.append([symbol,i,x,k])


    with multiprocessing.Pool(processes= 3) as pool:
        g = pool.starmap(get_contract,inputs)


    print(g)

get_multiple_expirations_strikes('AAPL',['20191115', '20200320'],[155.0, 160.0, 165.0, 170.0])
ib.disconnect()

错误消息: OSError: Errno 9错误的文件描述符

EN

回答 1

Stack Overflow用户

发布于 2021-10-13 11:51:57

这是一个旧的线程,所以你的问题很有可能在很久以前就解决了。然而..。我认为问题在于您正在一个接一个地获取合同。您可以获取整个选项链,如下所示:https://nbviewer.org/github/erdewit/ib_insync/blob/master/notebooks/option_chain.ipynb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58609816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档