2016-01-05 39 views
0

我使用代碼(下面的鏈接)在Interactive Brokers中開立訂單(我使用紙質賬戶),但是當我試圖關閉5秒我無法這樣做。我做錯了什麼?如何在5秒後關閉Interactive Brokers上的已開立訂單

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 - How I send 100000 to IBrokers:::.placeOrder?

UPDATE(以下Brian的回答): 我使用的代碼(鏈接如下)開在盈透證券的訂單(我用的是紙帳戶),但當我在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")) 
+0

只是FYI IDEALPRO有一個至少25000美元,所以也許這是搞砸了。此外,新的紙質交易賬戶默認爲7497端口,但如果您連接的話可能沒問題。我不知道還有什麼不對,但我的理解是IBrokers軟件包並沒有真正完成和測試。 – brian

+0

Thanks @brian你對「IDEALPRO最低25000美元」是正確的,但真正的問題是你寫的orderID。現在代碼工作正常.. – mql4beginner

回答

1

您需要使用不同的訂單ID。它們不可重複使用。您應該永遠增加至少1,甚至是第二天,每月等。當您連接時,TWS會返回下一個有效的ID。我不知道它在R中的什麼地方,或者返回什麼請求(在java中它有一系列ID),但是你需要使用一個唯一的數字。有些人只是使用從時代開始的秒數,或者您可以查找nextValidId()方法。

另外,尋找錯誤信息,如果你得到「重複的訂單ID」,你應該意識到你的錯誤。

+0

你好@brian。感謝提示,跟着他們,現在它工作。 我會進行更新。另外,對於其他讀者,在下面的頁面中有解釋: https://www.interactivebrokers.com/en/software/api/apiguide/api/api_order_ids.htm – mql4beginner

1

我看到兩件事情,首先如果您想修改,關閉您剛剛介紹的開放訂單,應該使用相同的orderId來選擇該確切訂單。

此外,您介紹了一個MKT訂單,它不是限制,您確定該訂單在您可以取消之前未執行嗎?

相關問題