5

我试图请求历史期货数据,但对于初学者来说,ibrokers.pdf 文档的文档记录不够好。黄金矿业合约 Dec11 NYSELIFFE 示例:

goldminy<-twsFuture("YG","NYSELIFFE","201112",multiplier="33.2")
reqHistoricalData(conn,
Contract= "goldminy",
endDateTime"",
barSize = "1 S",
duration = "1 D",
useRTH = "0",
whatToShow = "TRADES","BID", "ASK", "BID_ASK",
timeFormat = "1",
tzone = "",
verbose = TRUE,
tickerId = "1",
eventHistoricalData,
file)

我也不知道如何正确指定一些数据参数?

whatToShow ? 我需要日期、时间、BidSize、Bid、Ask、AskSize、Last、LastSize、Volume

股票代码?

事件历史数据?

文件 ?

4

1 回答 1

7

我编写了 twsInstrument 包(在 RForge 上)来缓解这些头痛。如果你给它任何合理的东西,getContract 会为你找到合同。这些格式中的任何一种都应该可以工作:
“YG_Z1”、“YG_Z11”、“YGZ1”、“YGZ11”、“YGZ2011”、“YGDEC2011”、“YG_DEC2011”等
(你也可以使用 conId,或者给它一个工具对象,或仪器对象的名称)

> library(twsInstrument)
> goldminy <- getContract("YG_Z1")
Connected with clientId 100.
Contract details request complete. Disconnected.
> goldminy
List of 16
 $ conId          : chr "42334455"
 $ symbol         : chr "YG"
 $ sectype        : chr "FUT"
 $ exch           : chr "NYSELIFFE"
 $ primary        : chr ""
 $ expiry         : chr "20111228"
 $ strike         : chr "0"
 $ currency       : chr "USD"
 $ right          : chr ""
 $ local          : chr "YG   DEC 11"
 $ multiplier     : chr "33.2"
 $ combo_legs_desc: chr ""
 $ comboleg       : chr ""
 $ include_expired: chr "0"
 $ secIdType      : chr ""
 $ secId          : chr ""

我没有订阅 NYSELIFFE 的市场数据,因此我将使用 2011 年 12 月的 e-mini S&P 期货作为这个答案的其余部分。

可以得到这样的历史数据

tws <- twsConnect()
hist.data <- reqHistoricalData(tws, getContract("ES_Z1"))

这将使您返回这些列,并且都是“交易”数据

> colnames(hist.data)
[1] "ESZ1.Open"    "ESZ1.High"    "ESZ1.Low"     "ESZ1.Close"   "ESZ1.Volume" 
[6] "ESZ1.WAP"     "ESZ1.hasGaps" "ESZ1.Count"  

whatToShow 必须是“TRADES”、“BID”、“ASK”或“BID_ASK”之一。如果您的请求使用 whatToShow='BID' 那么您将获得 BID 价格的 OHLC 等。"BID_ASK" 表示卖出价将用于最高价,买入价将用于最低价。

既然你说小插曲太高级了,那么需要重复一下,盈透证券将历史数据请求限制为每 60 秒 6 次。所以你应该在每个请求之间暂停 10 秒(或者为了获取大量数据,我通常在发出 3 个请求后暂停 30 秒,这样如果我有某事的 BID 数据,我也可能有它的 ASK 数据)

函数 getBAT 将下载 BID、ASK 和 TRADES 数据,并仅将这些数据的收盘值合并到一个 xts 对象中,如下所示:

> getBAT("ES_Z1")
Connected with clientId 120.
waiting for TWS reply on ES ............. done.
Pausing 10 seconds between requests ...
waiting for TWS reply on ES .... done.
Pausing 10 seconds between requests ...
waiting for TWS reply on ES .... done.
Pausing 10 seconds between requests ...
Disconnecting ... 
[1] "ES_Z1"
> tail(ES_Z1)
                    ES.Bid.Price ES.Ask.Price ES.Trade.Price ES.Mid.Price
2011-09-27 15:09:00      1170.25      1170.50        1170.50     1170.375
2011-09-27 15:10:00      1170.50      1170.75        1170.50     1170.625
2011-09-27 15:11:00      1171.25      1171.50        1171.25     1171.375
2011-09-27 15:12:00      1171.50      1171.75        1171.50     1171.625
2011-09-27 15:13:00      1171.25      1171.50        1171.25     1171.375
2011-09-27 15:14:00      1169.75      1170.00        1170.00     1169.875
                    ES.Volume
2011-09-27 15:09:00      6830
2011-09-27 15:10:00      4509
2011-09-27 15:11:00      4902
2011-09-27 15:12:00      6089
2011-09-27 15:13:00      6075
2011-09-27 15:14:00     14380

您询问了 LastSize 和 Volume。getBAT 返回的“交易量”是柱线时间内交易的总金额。因此,对于 1 分钟柱,它是那 1 分钟内发生的总交易量。

这是一个不使用 twsInstrument 的答案:我几乎可以肯定这会起作用,但正如我所说,我没有所需的市场数据订阅,所以我无法测试。

reqHistoricalData(tws, twsFuture("YG","NYSELIFFE","201112"))

再次使用 e-mini S&P:

> mydata <- reqHistoricalData(tws, twsFuture("ES","GLOBEX","201112"), barSize='1 min', duration='5 D', useRTH='0', whatToShow='TRADES')
waiting for TWS reply on ES .... done.

> head(mydata)
                    ESZ1.Open ESZ1.High ESZ1.Low ESZ1.Close ESZ1.Volume ESZ1.WAP ESZ1.hasGaps ESZ1.Count
2011-09-21 15:30:00   1155.25   1156.25  1155.00    1155.75        3335  1155.50            0        607
2011-09-21 15:31:00   1155.75   1156.25  1155.50    1155.75         917  1155.95            0        164
2011-09-21 15:32:00   1155.75   1156.25  1155.50    1156.00         859  1155.90            0        168
2011-09-21 15:33:00   1156.00   1156.25  1155.50    1155.75         642  1155.83            0        134
2011-09-21 15:34:00   1155.50   1156.00  1155.25    1155.25        1768  1155.65            0        232
2011-09-21 15:35:00   1155.25   1155.75  1155.25    1155.25         479  1155.45            0         94

您尝试的问题之一是,如果您使用“1 S”的 barSize,您的持续时间不能大于“60 S”请参阅IB 历史数据限制

于 2011-09-27T21:18:13.233 回答