private void ReadHistoricalData(IBSocket socket, ServerVersions version) { var requestId = socket.ReadInt(); if (version >= ServerVersions.V2) { //Read Start Date String /*String startDateStr = */ socket.ReadStr(); /*String endDateStr = */ socket.ReadStr(); //completedIndicator += ("-" + startDateStr + "-" + endDateStr); } var secId = GetSecurityId(requestId); var itemCount = socket.ReadInt(); for (var i = 0; i < itemCount; i++) { //Comes in as seconds //2 - dates are returned as a long integer specifying the number of seconds since 1/1/1970 GMT. var time = socket.ReadLongDateTime(); var open = socket.ReadDecimal(); var high = socket.ReadDecimal(); var low = socket.ReadDecimal(); var close = socket.ReadDecimal(); var volume = socket.ReadInt(); var wap = socket.ReadDecimal(); /* hasGaps */ socket.ReadStr().To<bool>(); var barCount = -1; if (version >= ServerVersions.V3) barCount = socket.ReadInt(); SendOutMessage(new TimeFrameCandleMessage { OpenPrice = open, HighPrice = high, LowPrice = low, ClosePrice = close, TotalVolume = volume, OpenTime = time, TotalTicks = barCount, SecurityId = secId, OriginalTransactionId = requestId, State = CandleStates.Finished, IsFinished = i == (itemCount - 1) }); } }
private void ReadRealTimeBars(IBSocket socket) { var requestId = socket.ReadInt(); var time = socket.ReadLongDateTime(); var open = socket.ReadDecimal(); var high = socket.ReadDecimal(); var low = socket.ReadDecimal(); var close = socket.ReadDecimal(); var volume = socket.ReadLong(); var wap = socket.ReadDecimal(); var count = socket.ReadInt(); SendOutMessage(new TimeFrameCandleMessage { OpenPrice = open, HighPrice = high, LowPrice = low, ClosePrice = close, TotalVolume = volume, OpenTime = time, CloseVolume = count, SecurityId = GetSecurityId(requestId), OriginalTransactionId = requestId, }); //realTimeBar(reqId, time, open, high, low, close, volume, wap, count); }
private bool OnProcessResponse(IBSocket socket) { var str = socket.ReadStr(false); if (str.IsEmpty()) { socket.AddErrorLog(LocalizedStrings.Str2524); return false; } var message = (ResponseMessages)str.To<int>(); socket.AddDebugLog("Msg: {0}", message); if (message == ResponseMessages.Error) return false; var version = (ServerVersions)socket.ReadInt(); switch (message) { case ResponseMessages.CurrentTime: { // http://www.interactivebrokers.com/en/software/api/apiguide/java/currenttime.htm var time = socket.ReadLongDateTime(); OnProcessTimeShift(TimeHelper.NowWithOffset - time); break; } case ResponseMessages.ErrorMessage: { if (version < ServerVersions.V2) { OnProcessMarketDataError(socket.ReadStr()); } else { var id = socket.ReadInt(); var code = socket.ReadInt(); var msg = socket.ReadStr(); socket.AddInfoLog(() => msg); if (id == -1) break; switch ((NotifyCodes)code) { case NotifyCodes.OrderCancelled: { OnProcessOrderCancelled(id); break; } case NotifyCodes.OrderCannotTransmit: case NotifyCodes.OrderCannotTransmitId: case NotifyCodes.OrderCannotTransmitIncomplete: case NotifyCodes.OrderDuplicateId: case NotifyCodes.OrderFilled: case NotifyCodes.OrderNotMatchPrev: case NotifyCodes.OrderPriceOutOfRange: case NotifyCodes.OrderSubmitFailed: case NotifyCodes.OrderVolumeTooSmall: case NotifyCodes.Rejected: { OnProcessOrderError(id, msg); break; } case NotifyCodes.SecurityNoDefinition: OnProcessSecurityLookupNoFound(id); break; default: OnProcessMarketDataError(LocalizedStrings.Str2525Params.Put(msg, id, code)); break; } } break; } case ResponseMessages.VerifyMessageApi: { /*int version =*/ socket.ReadInt(); /*var apiData = */ socket.ReadStr(); //eWrapper().verifyMessageAPI(apiData); break; } case ResponseMessages.VerifyCompleted: { /*int version =*/ socket.ReadInt(); var isSuccessfulStr = socket.ReadStr(); var isSuccessful = "true".CompareIgnoreCase(isSuccessfulStr); /*var errorText = */ socket.ReadStr(); if (isSuccessful) { throw new NotSupportedException(); //m_parent.startAPI(); } //eWrapper().verifyCompleted(isSuccessful, errorText); break; } case ResponseMessages.DisplayGroupList: { /*int version =*/ socket.ReadInt(); /*var reqId = */ socket.ReadInt(); /*var groups = */ socket.ReadStr(); //eWrapper().displayGroupList(reqId, groups); break; } case ResponseMessages.DisplayGroupUpdated: { /*int version =*/ socket.ReadInt(); /*var reqId = */ socket.ReadInt(); /*var contractInfo = */ socket.ReadStr(); //eWrapper().displayGroupUpdated(reqId, contractInfo); break; } default: { if (!message.IsDefined()) return false; var handled = ProcessTransactionResponse(socket, message, version); if (!handled) handled = ProcessMarketDataResponse(socket, message, version); if (!handled) throw new InvalidOperationException(LocalizedStrings.Str1622Params.Put(message)); break; } } return true; }