如何在5秒钟后关闭Interactive Broker上已打开的订单

时间:2016-01-05 09:47:51

标签: r ibrokers interactive-brokers

我使用代码(链接在下面)在Interactive Brokers中打开订单(我使用纸质帐户)但是当我试图在5秒后关闭打开的订单时我无法这样做。我在做什么错?

library(IBrokers)
myconid = 3
twsobj  = twsConnect(myconid)
myaud = twsCurrency("AUD",currency="USD",exch="IDEALPRO",primary="",strike="0.0",right="",local="",multiplier="",include_expired="0",conId=myconid)
Sys.sleep(2)
myorderid = as.integer(reqIds(twsobj))
print(myorderid)
Sys.sleep(2)
# my workaround:
options("scipen"=4)
placeOrder(twsobj, myaud, twsOrder(myorderid,"SELL", 1, "MKT"))
Sys.sleep(5)
placeOrder(twsobj, myaud, twsOrder(myorderid,"BUY", 1, "MKT"))

我使用的链接:[IBrokers - How I send 100000 to IBrokers:::.placeOrder?

更新(遵循布莱恩的回答): 我使用代码(链接在下面)在Interactive Brokers中打开订单(我使用纸质账户)但是当我试图在5秒后关闭打开的订单时我无法这样做。我做错了什么?< / p>

 library(IBrokers)
    myconid = 3
    twsobj  = twsConnect(myconid)
    myaud = twsCurrency("AUD",currency="USD",exch="IDEALPRO",primary="",strike="0.0",right="",local="",multiplier="",include_expired="0",conId=myconid)
    Sys.sleep(2)
    print(myorderid)
    Sys.sleep(2)
    # my workaround:
    options("scipen"=4)
    placeOrder(twsobj, myaud, twsOrder(122,"SELL", 1, "MKT"))
    Sys.sleep(5)
    placeOrder(twsobj, myaud, twsOrder(123,"BUY", 1, "MKT"))

2 个答案:

答案 0 :(得分:1)

您需要使用不同的订单ID。它们不可重复使用。你应该永远增加至少1,甚至第二天,等等。当你连接时,TWS返回下一个有效的ID。我不知道它在R中的位置或者reqIds返回的内容(在java中它获得了一系列ID),但是您需要使用唯一的数字。有些人只使用纪元的秒数​​,或者你可以寻找nextValidId()方法。

此外,查找错误消息,如果您得到重复的订单ID&#34;,您应该意识到自己的错误。

答案 1 :(得分:1)

我看到两件事,首先如果你想修改,关闭你刚刚介绍的开放订单,你应该使用相同的orderId来选择那个确切的订单。

另外,您介绍了一个MKT订单,它没有限制,您确定订单没有执行才能取消吗?