【问题标题】:IBrokers - How I send 100000 to IBrokers:::.placeOrder?IBrokers - 我如何向 IBrokers:::.placeOrder 发送 100000?
【发布时间】: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

标签: java r ibrokers


【解决方案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)

【讨论】:

    猜你喜欢
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多