我使用代码(链接在下面)在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"))
答案 0 :(得分:1)
您需要使用不同的订单ID。它们不可重复使用。你应该永远增加至少1,甚至第二天,等等。当你连接时,TWS返回下一个有效的ID。我不知道它在R中的位置或者reqIds返回的内容(在java中它获得了一系列ID),但是您需要使用唯一的数字。有些人只使用纪元的秒数,或者你可以寻找nextValidId()方法。
此外,查找错误消息,如果您得到重复的订单ID&#34;,您应该意识到自己的错误。
答案 1 :(得分:1)
我看到两件事,首先如果你想修改,关闭你刚刚介绍的开放订单,你应该使用相同的orderId来选择那个确切的订单。
另外,您介绍了一个MKT订单,它没有限制,您确定订单没有执行才能取消吗?