2011-12-17 9 views
4

インタラクティブ・ブローカーからデータをダウンロードするときに、将来の契約が正しくダウンロードされない場合があります。getContractを使用してtwsInstrumentで履歴データをダウンロードする方法は?

Rのコンソールコマンド:getBATを使用している

icegasoil_feb <- getContract("GOILG2") 

Connected with clientId 100. 
Error in buildIBcontract(symbol = instrument, tws = tws, addIBslot = addIBslot, : 
Could not create valid twsContract. 
GOI may not be a valid CASH. Disconnected. 

次のエラー:あなたが FinancialInstrumentを更新した場合

getBAT("ZWH2") 

Connected with clientId 120. 
waiting for TWS reply on ZW ............failed. 
waiting for TWS reply on ZW ....failed. 
waiting for TWS reply on ZW ....failed. 
Disconnecting ... 
NULL 
Failure: 

1: In errorHandler(con, verbose, OK = c(165, 300, 366, 2104, 2106, : 
    Historical Market Data Service error message:No data of type DayChart is available for 

the exchange 'CBOT' and the security type 'Futures' and '5 d' and '1 min' 
able for the exchange 'CBOT' and the security type 'Futures' and '5 d' and '1 min' 
+0

twsInstrumentに関するご質問は、私に直接お問い合わせください。私の電子メールアドレスは、パッケージのDESCRIPTIONファイルにあります。 – GSee

答えて

3

あなたが最初に遭遇した問題は発生しません。

改正前888に、FinancialInstrument:::parse_id - twsInstrumentによって内部的に使用され - それは として「ILG2」を見ているだろうので 「GOILG2」のような記号を思っただろうが、「GO」のROOT_IDを持っている必要がありますインタラクティブブローカーが単一の 株式先物に使用するのと同様の4文字の接尾辞。これを回避する方法の1つは、 のroot_idとsuffix_idをアンダースコアで区切って、parse_idがあいまいなIDの を処理する必要がないようにすることです。したがって、getContract("GOIL_G2")は機能しているはずですが、まだ の機器IDの推奨フォーマットです。つまり、 FinancialInstrumentを更新すると、そのまま動作します。

> require("twsInstrument") 
> getContract("GOILG2") 
Connected with clientId 100. 
Checking to see if other 'type's have a pre-defined currency. 
Request complete: GOIL FUT USD. 
Disconnected. 
List of 16 
$ conId   : chr "34134707" 
$ symbol   : chr "GOIL" 
$ sectype  : chr "FUT" 
$ exch   : chr "IPE" 
$ primary  : chr "" 
$ expiry   : chr "20120210" 
$ strike   : chr "0" 
$ currency  : chr "USD" 
$ right   : chr "" 
$ local   : chr "GOILG2" 
$ multiplier  : chr "100" 
$ combo_legs_desc: chr "" 
$ comboleg  : chr "" 
$ include_expired: chr "0" 
$ secIdType  : chr "" 
$ secId   : chr "" 

第2の問題は少しトリッキーです。基本的には、「ZWH2」に対応する の複数の契約が見つかりました。「間違った」ものが使用されました(電子の代わりにピット・トレードされた )。解決に達する前に、 に少しの背景を与えるようにしてください。

twsInstrumentパッケージは私に更新私はすでに たFinancialInstrumentパッケージで定義された楽器のメタデータを支援するインタラクティブ ブローカーを使用することを意図して造られました。

これは、どのような情報を持っていて、より多くの情報を収集するのに使用しますか。

getContractを使用すると、最初にローカルでtwsContractを検索します。 見つからない場合は、機器のメタデータが のFinancialInstrument:::.instrument環境で定義されているかどうかを確認します。その場合、その情報 は、 IBrokers:::reqContractDetailsに渡すことができるtwsContractのシェルを作成するために使用され、欠落した部分を埋めるでしょう。 にこのシンボルの機器定義がない場合、FinancialInstrument:::parse_id は、IBrokers:::reqContractDetailsが必要とする情報を把握します。

インタラクティブブローカーに与えられた情報と一致するいくつかの契約がある場合、 はすべてのリストを返します。残念ながら、私は がtwsInstrumentを書いたときにこれを認識しませんでした。したがって、リストの最初の要素だけが使用されます。それはたとえば、あなたが最後に見たの契約に応じて、異なる 契約を与えているとき

FWIWは、IBのAPIは、それが最初に 返す契約について、スマートになろうとして見えるんが、それは実際に不満を引き起こす可能性があります。

あなたの場合、「ZWH2」に関するデータを要求しています。 reqContractDetailsが返す最初の契約は "CBOT"で取引される未来になりますが、 があなたが持っているエラーメッセージから見ることができるように、そのデータは利用できません。それは です。本当に "ECBOT"で取引される商品がほしいからです。以下は、 が長さ2のリストを表示する方法を示しています。IBrokers:::reqContractDetailsが返されます。

require("IBrokers") 
fut <- twsContract() 
fut$symbol <- 'ZW' 
fut$sectype <- 'FUT' 
fut$expiry <- '201203' 
fut$currency <- 'USD' 
tws <- ConnectIB() 
reqContractDetails(tws, fut) 
twsDisconnect(tws) 

あなたが欲しいの契約を得ることを確実にする方法はreqContractDetailsが複数の一致を見つけることができません十分な情報 を使用することです。例:

> define_futures("ZW", "ECBOT", "201203") 
Connected with clientId 100. 
Request complete: ZW FUT USD. 
Disconnected. 
[1] "ZW_MAR12" 

> getBAT("ZW_MAR12") 
Connected with clientId 120. 
waiting for TWS reply on ZW ....... done. 
Pausing 10 seconds between requests ... 
waiting for TWS reply on ZW .... done. 
Pausing 10 seconds between requests ... 
waiting for TWS reply on ZW .... done. 
Pausing 10 seconds between requests ... 
Disconnecting ... 
[1] "ZW_MAR12" 

define_futurestwsContractで 「ローカル」の値がオフに基づいて、機器のprimary_idになります。この場合、それは "ZW_MAR12"です。あなたは idは「ZWH2」になりたい場合は、代わりにFinancialInstrument:::instrument_attr

> instrument_attr("ZW_MAR12", "primary_id", "ZWH2") 
> # Now your original code will work 
> getBAT("ZWH2") 
Connected with clientId 120. 
waiting for TWS reply on ZW ....... done. 
Pausing 10 seconds between requests ... 
waiting for TWS reply on ZW .... done. 
Pausing 10 seconds between requests ... 
waiting for TWS reply on ZW .... done. 
Pausing 10 seconds between requests ... 
Disconnecting ... 
[1] "ZWH2" 

でそれを変更することができ、あなたは、交換を提供することを確認することだけFinancialInstrument パッケージを使って楽器を定義することができます。

future("ZW", currency("USD"), 5000, exchange='ECBOT') 
future_series("ZWH2") 
getBAT("ZWH2") 
後でtwsInstrumentのリビジョン233以上を持っている場合

最後に、以下の も楽器を定義するために動作します。 twsInstrument(twsFUT("ZW", "ECBOT", "201203"))

私は早く返事を言いましたが、私はそれほど頻繁に訪れません。 r-sig-financeリストに質問を送信するか、直接私に連絡してください(私の電子メールアドレスはパッケージの ファイルにあります)。twsInstrumentについて の方が早く返信されます。 twsInstrumentはまだ開発中ですのでご注意ください。

関連する問題