我使用代码(链接如下)在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-我如何向IBrokers发送100000::.placeOrder?
更新(根据brian的回答):我使用代码(链接如下)在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)
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"))
您需要使用不同的订单id。它们不可重复使用。你应该永远至少增加1,即使是第二天、第二个月等等。当你连接时,TWS会返回下一个有效的ID。我不知道它在R中的位置,也不知道reqIds会返回什么(在java中,它会得到一系列ID),但你需要使用一个唯一的数字。有些人只使用epoch的秒数,或者您可以查找nextValidatId()方法。
此外,寻找错误消息,如果你得到"重复订单id",你应该意识到你的错误。
我看到了两件事,首先,如果你想修改,关闭你刚刚介绍的打开的订单,你应该使用相同的orderId来选择确切的订单。
此外,您引入了一个MKT订单,它不是限制性的,您确定该订单在取消之前没有执行吗?