getCont-6ren">
gpt4 book ai didi

r - 如何使用 getContract 使用 twsInstrument 下载历史数据?

转载 作者:行者123 更新时间:2023-12-04 11:04:22 24 4
gpt4 key购买 nike

从交互式经纪人下载数据时,某些 future 合约可以正确下载,而其他合约则不能。

R 控制台命令:

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.

使用 getBAT 时的下一个错误是:
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'

最佳答案

你遇到的第一个问题如果你更新就不会出现
金融工具。

888 版之前,FinancialInstrument:::parse_id ——
由 twsInstrument 内部使用 - 会认为像这样的符号
“GOILG2”的 root_id 应该为“GO”,因为它会将“ILG2”视为
4 个字符后缀,类似于盈透证券用于单个字符的后缀
股票 future 。解决此问题的一种方法是使用下划线分隔
root_id 来自 suffix_id 以便 parse_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 ""

第二个问题有点棘手。基本上,不止一份契约(Contract)
发现对应于“ZWH2”并且使用了“错误”的(pit-traded
而不是电子)。在得到解决方案之前,请允许我给出
一点背景。

twsInstrument 包的构建目的是使用 Interactive
经纪人帮助我更新我已经拥有的工具的元数据
使用 FinancialInstrument 包定义。

它将获取它所拥有的信息并使用它来收集更多信息。

当您使用 getContract它将首先在本地搜索 twsContract .
如果找不到,则查看是否定义了仪器元数据
FinancialInstrument:::.instrument环境。如果是这样,该信息
将用于创建 twsContract 的 shell 可以传递给 IBrokers:::reqContractDetails ,这将填补缺失的部分。如果有
没有此符号的工具定义,则 FinancialInstrument:::parse_id会找出 IBrokers:::reqContractDetails需要的信息.

如果盈透证券有多个与给定信息相匹配的合约,它将
返回所有这些的列表。不幸的是,当我没有意识到这一点时
写了 twsInstrument。因此,只会使用列表的第一个元素。

FWIW,IB API 似乎确实试图对其返回的契约(Contract)保持智能
首先,但是当它给你一个不同的
例如,契约(Contract)取决于您最后查看的契约(Contract)。

在您的情况下,您要求提供有关“ZWH2”的数据。第一份契约(Contract) reqContractDetails返回将是在“CBOT”上交易的 future ,但随着您
从您收到的错误消息中可以看出,该数据不可用。那是
因为你真的想要在“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)

确保你得到你想要的契约(Contract)的方法是使用足够的信息
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_futures使 primary_id该工具的值(value)基于 twsContract 中的“本地” .在这种情况下,它是“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")

最后,如果您有 233 或更高版本的 twsInstrument,以下内容
还将努力定义仪器: twsInstrument(twsFUT("ZW", "ECBOT", "201203"))
我会早点回复,但我不经常访问 SO。你会得到一个
如果您将问题发送至
r-sig-finance 列表,或直接给我(我的电子邮件地址在描述中
包的文件)。请注意,twsInstrument 仍在开发中。

关于r - 如何使用 getContract 使用 twsInstrument 下载历史数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8544724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com