0

コード (リンクは以下) を使用して Interactive Brokers で注文を開きます (私は紙の口座を使用しています) が、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 - 100000 を IBrokers:::.placeOrder に送信するにはどうすればよいですか?

更新 (ブライアンの回答に続く): コード (リンクは以下) を使用して Interactive Brokers で注文を開きます (紙の口座を使用します) が、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

2 つのことがわかります。まず、変更したい場合は、導入した未処理の注文を閉じて、同じ 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 に答える