首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交互式券商TWS API中IB独立期货订单的问题

交互式券商TWS API中IB独立期货订单的问题
EN

Stack Overflow用户
提问于 2021-10-20 13:13:20
回答 1查看 1.5K关注 0票数 1

我希望这里的人能够帮助阐明如何在python链接和Interactive中构建期货订单的IB-Insync合同格式。我正在尝试开发一个自动the链接到Interactive,使用Insync。我的系统工作得很好,现在用“股票”合同格式自动下单,如下所示:

代码语言:javascript
复制
stock = Stock(message_data['ticker'], 'SMART', 'USD')
ib.qualifyContracts(stock)
order = MarketOrder(message_data['strategy']['order_action'], message_data['strategy']['order_contracts'])
trade = ib.placeOrder(stock, order)

但是,当我按照文档将相同的python脚本应用于对期货订单所需的IB-Insync合同格式的理解时,什么都不会发生,API日志中会显示错误。

所使用的Insync期货合约格式如下:

代码语言:javascript
复制
contract = Future(symbol='MES', lastTradeDateOrContractMonth='20211217', exchange='GLOBEX',
localSymbol='MESZ1', multiplier='5', currency='USD')
ib.qualifyContracts(contract)
order = MarketOrder(message_data['strategy']['order_action'], message_data['strategy']['order_contracts'])
trade = ib.placeOrder(contract, order)

API日志错误消息如下:

22:28:49:791 <- 9-8-59-0-MES-STK-0.0-SMART-美元-0- 22:28:50:029 -> -A4-2-59-200-没有为请求找到安全定义- 22:28:50:030 <- ->1-0-0-0-0-0-0-0--0.0--------0---1-0---0---0-0--0------0-----0-----------0---0-0---0--0-0-0-0-------0---------0-0-0-0- 22:28:50:264 -> --A4-2-60-200-没有为请求找到安全定义-

我曾尝试过多种不同的方法,以制订期货合约的格式,包括:

代码语言:javascript
复制
contract=Future('MES', '20121217', 'GLOBEX')

但同样的问题也发生了--正在将订单记录为STK订单,通过智能交换协议路由它;显然并非如此。我可以手动为MES在TWS上下一个期货订单,所以不能因为特权的设置。

我希望在座的人可能知道解决这个问题的办法,或者曾经遇到过这个问题?

我被它迷住了

谢谢你的帮助

整个守则如下:

代码语言:javascript
复制
import redis, json
from ib_insync import *
import asyncio, time, random
from dataclasses import dataclass, field
from typing import List, NamedTuple, Optional
import ib_insync.util as util

# connect to Interactive Brokers 
util.startLoop()
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)

# connect to Redis and subscribe to tradingview messages
r = redis.Redis(host='localhost', port=6379, db=0)
p = r.pubsub()
p.subscribe('tradingview')

async def check_messages():
    print(f"{time.time()} - checking for tradingview webhook messages")
    message = p.get_message()
    if message is not None and message['type'] == 'message':
        print(message)

        message_data = json.loads(message['data'])

        contract = Future(symbol='MES', lastTradeDateOrContractMonth='20211217', exchange='GLOBEX', localSymbol='MESZ1', multiplier='5', currency='USD')
        ib.qualifyContracts(contract)
        order = MarketOrder(message_data['strategy']['order_action'], message_data['strategy']['order_contracts'])
        trade = ib.placeOrder(contract, order)

async def run_periodically(interval, periodic_function):
    while True:
        await asyncio.gather(asyncio.sleep(interval), periodic_function())

asyncio.run(run_periodically(1, check_messages))

ib.run()
EN

回答 1

Stack Overflow用户

发布于 2021-10-21 05:55:06

谢谢那些已经回答了-经过广泛的研究,实验,和一个想法从另一个论坛.我找到了解决办法。

Insync中期货订单的合约参数格式与股票订单中的合约参数格式有很大的不同。

最终起作用的代码是:

代码语言:javascript
复制
        fut_contract = Contract()
        fut_contract.secType = 'FUT'
        fut_contract.exchange = 'GLOBEX'
        fut_contract.currency = 'USD'
        fut_contract.symbol = 'MNQ'
        fut_contract.localSymbol = 'MNQZ1'
        ib.qualifyContracts(fut_contract)
        
        order = MarketOrder('order_action', 'order_contracts')
        trade = ib.placeOrder(fut_contract, order)

股票订单的合同参数格式非常简单,如:

代码语言:javascript
复制
stock = Stock(MSFT, 'SMART', 'USD')
ib.qualifyContracts(stock)
order = MarketOrder('BUY/SELL', Qty)
trade = ib.placeOrder(stock, order)

就我而言,这种所需的格式在IB-Insync文档中没有清楚地传达,或者可能是因为我是自学的程序员,这对我来说并不明显--但可能是对经验丰富的开发人员来说。不管怎么说,希望这个信息能帮助那些被困在同一个问题上的人。

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

https://stackoverflow.com/questions/69646647

复制
相关文章

相似问题

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