0

我使用代码(链接如下)在盈透证券开立订单(我使用纸质账户),但是当我尝试在 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:::.placeOrder 发送 100000?

更新(按照布赖恩的回答):我使用代码(链接如下)在盈透证券中打开订单(我使用纸质账户)但是当我尝试在 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"))
4

2 回答 2

1

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

另外,您介绍了一个MKT订单,它不是限制,您确定订单没有执行之前您可以取消它吗?

于 2016-10-23T10:59:49.193 回答
1

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

此外,查找错误消息,如果您收到“重复的订单 ID”,您应该意识到自己的错误。

于 2016-01-05T12:58:44.557 回答