当前位置: 首页 > 知识库问答 >
问题:

交互式经纪人TWS API上的IB Insync期货订单存在问题

柴嘉年
2023-03-14

我希望在座的人能够帮助澄清如何在python API链接和交互式经纪人API中构建期货订单的IB Insync合同格式。我正在尝试使用IB Insync将autobot API链接开发成交互式代理API。我的系统现在运行得很好,自动以“库存”合同格式下订单;详情如下:

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日志中显示了一个错误。

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

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

我尝试了许多不同的方法来构建期货合约格式;包括:

contract=Future('MES', '20121217', 'GLOBEX')

但是同样的问题也会出现——互动经纪人TWS应用编程接口正在将订单记录为通过智能交换协议路由的STK订单;显然不是。我可以手动在MES的TWS上下期货订单;所以这不可能是由于特权设置。

我希望这里有人可能知道一个解决方案,或者以前遇到过这个问题?

我被它难住了

谢谢你的帮助

整个代码如下:

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()

共有1个答案

梁池暝
2023-03-14

感谢那些在广泛的研究、实验和来自另一个论坛的想法之后做出回答的人。。。。我找到了解决办法。

IB Insync中期货订单的合同参数格式与股票订单中的合同参数格式非常不同。

最终起作用的代码是:

        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)

库存订单的合同参数格式如下所示:

stock = Stock(MSFT, 'SMART', 'USD')
ib.qualifyContracts(stock)
order = MarketOrder('BUY/SELL', Qty)
trade = ib.placeOrder(stock, order)

就我而言——IB Insync文档中没有明确传达这种要求的格式,或者可能是因为我是自学成才的程序员,这对我来说并不明显——但对经验丰富的开发人员来说可能是这样。不管怎样,希望这些信息能帮助那些陷入同样问题的人。

 类似资料:
  • 我曾尝试在VisualStudio2008中设置Interactive Broker的C API,但我知道的C非常有限,并且不断出现错误: 1)是否有任何方法可以使用某种轻量级的脚本语言来连接到Interactive Brokers并进行交易。 像Python这样轻量级的东西就可以了,是的,我已经研究过IBMY,但我不明白java2python系统是如何工作的。 2) 您是如何设置您的自动系统的,

  • 我想使用IB Api,但无法计算我们如何请求完整的符号列表和信息。 在我找到的文档中:reqScannerParameters()——但不清楚如何获得纳斯达克股票的列表? 有更好的办法吗?

  • 有了下面的标准代码,我可以使用一个免费的演示帐户提交市场(MKT)和限额订单(LMT) 有没有人有提交LOO或MOO订单的经验?当我改变时: 我没有得到一个例外,但是,没有悬而未决的订单显示在IB TWS(演示)。

  • 我正在尝试为API创建一个程序,一次进行多个交易,然后获取股票价格,然后每隔一段时间重新平衡一次。我使用了一个在线教程来获取一些代码,并做了一些调整。 但是,当我运行代码时,它经常连接,如果我重新启动IB TWS,它会下订单。但是如果我再次运行代码,它就不起作用,或者显示它将连接的任何指示。有人能帮我弄清楚如何保持连接,这样我就可以运行main.java文件,它会执行多个交易,然后结束连接吗?我需

  • 我正在尝试为Python应用编程接口创建一个程序,以便一次下多个交易/市场订单。我在网上使用了一个教程来获取一些代码,并做了一些更改。但是,我不能一次下多个订单。我使用了2个列表1是用于符号,另一个是用于它们的数量。(例如:购买3只苹果股票)。我的代码只执行最后一个订单:即“购买3只客户关系管理股票”。有人能帮我弄清楚如何下多个订单吗? 下面是我的Python代码:

  • Noob是个问题,但我正试图弄清楚Matlab交易工具箱使用的是哪种API,以便我可以参考适当的指南。 Matlab网站表示,有关如何实现交易系统的详细信息,请参考交互式经纪人API指南。。http://www.mathworks.com/help/trading/ibtws.createorder.html#inputarg_ibContract 但是,当我打开Interactive Broke