2016-04-27 5 views
2

In dem Bemühen, Daten von IB in R herunterzuladen, habe ich die Schritte hier: IBrokers request Historical Futures Contract Data?. Die sind ungefähr die gleichen wie hier: https://cran.r-project.org/web/packages/IBrokers/vignettes/IBrokers.pdf.R IBrokers API schlägt fehl, reqHistoricalData für abgelaufene Monate

Es funktioniert alles. Mit einer Ausnahme: reqHistoricalData funktioniert nicht mit abgelaufenen Monaten. den folgenden Code ausgeführt gibt Fehlermeldung: "Meldung Warnung: In errorhandler (con, ausführlich, OK = c (165, 300, 366, 2104, 2106,: keine Sicherheitsdefinition für die Anforderung gefunden worden"

#DOES NOT WORK (using expired month) 
tws <- twsConnect() 
mydata <- reqHistoricalData(tws, twsFuture("ES","GLOBEX","201603"), barSize='1 min', duration='5 D', useRTH='0', whatToShow='TRADES') 

#YET THE FOLLOWING DO WORK (using unexpired months) 
mydata <- reqHistoricalData(tws, twsFuture("ES","GLOBEX","201606"), barSize='1 min', duration='5 D', useRTH='0', whatToShow='TRADES') 
mydata <- reqHistoricalData(tws, twsFuture("ES","GLOBEX","201609"), barSize='1 min', duration='5 D', useRTH='0', whatToShow='TRADES') 
getContract("ES_M6") 

Die IB FAQ sagt folgendes zu dieser Nachricht: "Warum erhalte ich einen Fehler 200 - Es wurde keine Sicherheitsdefinition für die Anfrage gefunden, wenn ich reqContractDetails, reqMktData oder addOrder() für einen Aktienvertrag anrufe? diese Methoden für einen Aktienvertrag, lassen Sie Global Symbol und Trading Class leer. "(gefunden bei https://www.interactivebrokers.com/en/software/api/apiguide/tables/frequentlyaskedquestions.htm)

Würde ich sehr schätzen, jede Einsicht das mögen. Vielen Dank.

Antwort

2

Sie müssen include_expired auf true setzen. Ich vermute, der Code wäre:

twsFuture("ES","GLOBEX","201603",include_expired='1') 

Die vollständige Liste der Argumente aus der Dokumentation ist:

twsEquity(symbol, 
      exch="SMART", 
      primary, 
      strike='0.0', 
      currency='USD', 
      right='', 
      local='', 
      multiplier='', 
      include_expired='0', 
      conId=0) 

Und die Hilfeseite zu zitieren:

Das endDateTime Argument muss der Form "CCYYMMDD HH: MM: SS TZ" sein. Wenn nicht angegeben, wird die aktuelle Zeit, die vom TWS-Server zurückgegeben wird, verwendet. Dies ist die bevorzugte Methode zum Hinterfüllen von Daten. Der 'TZ' Teil der Zeichenfolge ist optional.

So könnte man auch versuchen,

mit
reqHistoricalData(..., endDateTime='20160315 16:00:00') 
+0

Vielen Dank. Funktioniert immer noch nicht. Anderes Problem jetzt. 'mydata <- reqHistoricalData (tws, twsFuture (" ES "," GLOBEX "," 201603 ", include_expired = '1'), barSize = '1 Stunde', duration = '5 D', useRTH = '0', whatToShow = 'TRADES') 'returns 'wartet auf TWS-Antwort auf ES .... fehlgeschlagen. Warnmeldung: In errorHandler (con, ausführlich, OK = c (165, 300, 366, 2104, 2106,: Historische Markt Data Service Fehlermeldung: HMDS-Abfrage zurückgegeben keine Daten: ESH6 @ GLOBEX Trades ". Es funktioniert ganz gut mit 201606 (der aktuelle Monat). – Krug

+1

Wenn es keine Daten gibt, dann verwenden Sie nur das falsche Datum. Vergessen Sie nicht, es hat ein Ablauf, bei dem nicht mehr gehandelt wird Verwenden Sie ein früheres Datum vor etwa der Mitte des Verfallsmonats (für ES) Verwenden Sie also für H = Mar das Mär 15/2016 als ungefähres Datum. – brian