【问题标题】:Interactive Brokers IB_INSYNC API - why I can only send one order at a timeInteractive Brokers IB_INSYNC API - 为什么我一次只能发送一个订单
【发布时间】:2022-08-24 05:24:11
【问题描述】:

我正在开发一个基于盈透证券 in_insync API 的交易应用程序。

下面是我的代码,我想知道为什么我一次只能发送一个订单。一旦我打电话给地方贸易()功能订单被传输到 IB,但如果我想发送另一个订单,我只能在重新启动应用程序后执行此操作。 我在 ib_insync 文档中找不到任何信息,它说只允许 1 个订单。我怀疑这可能与 OrderID 有关,但我又不确定。

任何想法我需要怎么做才能允许多个订单?

import tkinter as tk
from tkinter import filedialog, Text 
import os
from ib_insync import *
from tkinter import *
import pandas as pd
#

import ibapi
from ibapi.client import EClient
from ibapi import contract 
from ibapi.order import *
import threading
import time


root = tk.Tk()

#Port 7496 for TWS Live account and 7497 for paper trading and 4002 for Gateway
ib = IB() 
ib.connect(\'127.0.0.1\', 7497, clientId=1) 

        
def definecontract():
    ticker = tickerentry1.get() 
    exchange = \"SMART\"
    currency = \"USD\"
    return ticker, exchange, currency


def defineorder():
    direction = tradeentry1.get()
    ordersize = qtyentry1.get()       
    orderprice = priceentry1.get()
    return direction, ordersize, orderprice


def placetrade():
    ticker, exchange, currency = definecontract()
    direction, ordersize, orderprice = defineorder()
    
    contract = Stock(ticker, exchange, currency)
    order = LimitOrder(direction, ordersize, orderprice)

    ib.placeOrder(contract, order)

#definition of buttons
placetrade1 = tk.Button(root, text=\'Trade\', padx=10, pady=5, fg=\'white\', bg=\'grey\', command=placetrade)
placetrade1.grid(row=1, column=4)


  • 为什么您认为您只能在必须重新启动之前发送一个订单?当您发送第二个订单时会发生什么?
  • 什么都没有发生 :-) 它只是没有被传输。我认为这可能是由于一些延迟,但即使在几分钟后,也没有传输任何订单,而第一个订单会立即发送。

标签: python tkinter interactive-brokers


【解决方案1】:

增加订单 ID,使用 API 时需要有唯一的 ID。尝试使用全局 orderId 从 IBKR 获取下一个可用的 id

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多