IBrokers запрашивают исторические данные фьючерсного контракта? - PullRequest
5 голосов
/ 27 сентября 2011

Я пытался запросить исторические фьючерсные данные, но для начинающего документ ibrokers.pdf недостаточно хорошо документирован. пример Gold Miny Contract 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? Мне нужны Дата, Время, Размер ставки, Ставка, Спросить, Размер Ask, Последний, Последний размер, Объем

tickerID?

eventHistoricalData?

файл?

1 Ответ

7 голосов
/ 28 сентября 2011

Я написал пакет 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, поэтому я буду использовать будущее e-mini S & P в декабре 2011 года для остальной части этого ответа.

Вы могли бы получить исторические данные, подобные этому

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', вы получите OHLC и т. Д. Из цен BID. «BID_ASK» означает, что цена Ask будет использоваться для максимума, а цена Bid будет использоваться для минимума.

Поскольку вы сказали, что виньетка была слишком продвинутой, стоит повторить, что Interactive Brokers ограничивает количество запросов исторических данных до 6 каждые 60 секунд. Таким образом, вы должны сделать паузу на 10 секунд между каждым запросом (или для получения большого количества данных я обычно делаю паузу на 30 секунд после того, как сделаю 3 запроса, чтобы, если у меня есть данные 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

Одна из проблем, связанных с вашей попыткой, заключается в том, что если вы используете barSize '1 S', ваша продолжительность не может превышать '60 S'. См. IB Исторические ограничения данных

...