2014-12-22 25 views
3

我使用IBrokers上打开IDEALPROIBrokers - 我如何向IBrokers :::。placeOrder发送100000?

这里澳元对美元的订单是语法,我能很好地卖出90000:

# 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) 

接下来,我尝试把订购100,000此API调用:

IBrokers:::.placeOrder(twsobj, myaud, twsOrder(myorderid,"SELL", 100000, "MKT")) 

订单失败。

我看到在我的日志:

java.lang.NumberFormatException: For input string: "1e+05" 

一个简单的解决方法是将2个订单50000

我在寻找其他的解决方法的线索。

我怀疑这个错误是IBrokers正在发送1E + 05的API,而不是100000

+0

我刚刚发现通过谷歌“R中禁用科学记数法”的答案。答案是,我在调用'options(“scipen”= 4)之前插入了这一行语法'一旦SO允许我,我会正确回答。 – user3676943

+0

尝试传递一个字符串而不是数字。即“100000”而不是“100000” – GSee

回答

1
# 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) 

# my workaround: 
options("scipen"=4) 

IBrokers:::.placeOrder(twsobj, myaud, twsOrder(myorderid,"SELL", 190000, "MKT")) 
Sys.sleep(4) 
twsDisconnect(twsobj)