【发布时间】:2014-12-22 01:46:27
【问题描述】:
我正在使用 IBrokers 在 IDEALPRO 上开立澳元兑美元订单
这里的语法很适合我卖出 90,000:
# myscript.r
.libPaths("rpackages")
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)
myorderid = as.integer(difftime(Sys.time(), "2014-10-30", units = "secs"))
Sys.sleep(2)
IBrokers:::.placeOrder(twsobj, myaud, twsOrder(myorderid,"SELL", 90000, "MKT"))
Sys.sleep(4)
twsDisconnect(twsobj)
接下来,我尝试通过此 API 调用订购 100,000 个:
IBrokers:::.placeOrder(twsobj, myaud, twsOrder(myorderid,"SELL", 100000, "MKT"))
订单失败。
我在日志中看到了这个:
java.lang.NumberFormatException: For input string: "1e+05"
一个简单的解决方法是为 50000 下 2 个订单。
我正在寻找其他解决方法的线索。
我怀疑错误在于 IBrokers 向 API 发送 1e+05 而不是 100000。
【问题讨论】:
-
我刚刚通过谷歌“禁用 R 中的科学记数法”找到了答案。答案是,我在拨打电话
options("scipen"=4)之前插入这行语法,一旦允许,我将正确回答。 -
尝试传递字符串而不是数字。即
"100000"而不是100000