private void TrySubscribe(Security subscriber, MarketDataMessage message) { //Если уже выполняется поиск данного инструмента, то нет необходимости в повторном вызове OnRegisterXXX. //Если на инструмент была подписка ранее, то просто вызываем событие SubscriptionSucceed. var subscribersCount = GetSubscribers(message.DataType).ChangeSubscribers(subscriber, true); //var securityId = _connector.GetSecurityId(subscriber); if (subscribersCount == 1) { var lookupMessage = new SecurityLookupMessage { SecurityId = message.SecurityId, SecurityType = message.SecurityType, TransactionId = _connector.TransactionIdGenerator.GetNextId() }; _lookupMessages.Add(lookupMessage.TransactionId, Tuple.Create(lookupMessage, (MarketDataMessage)message.Clone())); _connector.LookupSecurities(lookupMessage); } else // if (subscribed == true) { var reply = new MarketDataMessage { OriginalTransactionId = message.TransactionId, IsSubscribe = true, }; _connector.SendOutMessage(reply); } }
private void ProcessSecurityLookupMessage(SecurityLookupMessage message) { var instruments = _restClient.GetInstruments(GetAccountId(), message.SecurityId.IsDefault() ? ArrayHelper.Empty<string>() : new[] { message.SecurityId.ToOanda() }); foreach (var instrument in instruments) { var secId = instrument.Code.ToSecurityId(); SendOutMessage(new SecurityMessage { OriginalTransactionId = message.TransactionId, SecurityId = secId, SecurityType = SecurityTypes.Currency, Name = instrument.DisplayName, PriceStep = 0.000001m }); if (instrument.Halted) { SendOutMessage(new Level1ChangeMessage { ServerTime = CurrentTime.Convert(TimeZoneInfo.Utc), SecurityId = secId, }.Add(Level1Fields.State, SecurityStates.Stoped)); } } SendOutMessage(new SecurityLookupResultMessage { OriginalTransactionId = message.TransactionId }); }
private void ProcessSecurityLookupMessage(SecurityLookupMessage secMsg) { if (secMsg.SecurityId.IsDefault()) { _client.Session.listExchanges(secMsg.TransactionId); _client.Session.listTradeRoutes(secMsg.TransactionId); } var board = secMsg.SecurityId.BoardCode; if (secMsg.SecurityType == null || secMsg.SecurityType == SecurityTypes.Option) { var expiration = secMsg.ExpiryDate == null ? null : secMsg.ExpiryDate.Value.ToString("yyyyMM"); _client.Session.getOptionList(board, secMsg.UnderlyingSecurityCode, expiration, secMsg.TransactionId); _client.Session.getInstrumentByUnderlying(secMsg.UnderlyingSecurityCode, board, expiration, secMsg.TransactionId); _client.Session.listBinaryContracts(board, secMsg.UnderlyingSecurityCode, secMsg.TransactionId); } if (secMsg.SecurityType != SecurityTypes.Option && !secMsg.SecurityId.SecurityCode.IsEmpty()) { if (board.IsEmpty()) { foreach (var b in _boards.Cache) _client.Session.getRefData(b, secMsg.SecurityId.SecurityCode, secMsg.TransactionId); } else _client.Session.getRefData(board, secMsg.SecurityId.SecurityCode, secMsg.TransactionId); } }
private void ProcessSecurityLookupMessage(SecurityLookupMessage secMsg) { if (secMsg.SecurityId.IsDefault()) { _client.Session.listExchanges(secMsg.TransactionId); _client.Session.listTradeRoutes(secMsg.TransactionId); } var board = secMsg.SecurityId.BoardCode; if (secMsg.SecurityType == null || secMsg.SecurityType == SecurityTypes.Option) { var expiration = secMsg.ExpiryDate == null ? null : secMsg.ExpiryDate.Value.ToString("yyyyMM"); _client.Session.getOptionList(board, secMsg.UnderlyingSecurityCode, expiration, secMsg.TransactionId); _client.Session.getInstrumentByUnderlying(secMsg.UnderlyingSecurityCode, board, expiration, secMsg.TransactionId); _client.Session.listBinaryContracts(board, secMsg.UnderlyingSecurityCode, secMsg.TransactionId); } if (secMsg.SecurityType != SecurityTypes.Option && !secMsg.SecurityId.SecurityCode.IsEmpty()) { if (board.IsEmpty()) { foreach (var b in _boards.Cache) { _client.Session.getRefData(b, secMsg.SecurityId.SecurityCode, secMsg.TransactionId); } } else { _client.Session.getRefData(board, secMsg.SecurityId.SecurityCode, secMsg.TransactionId); } } }
private void ProcessSecurityLookupMessage(SecurityLookupMessage message) { var instruments = _restClient.GetInstruments(GetAccountId(), message.SecurityId.IsDefault() ? ArrayHelper.Empty <string>() : new[] { message.SecurityId.ToOanda() }); foreach (var instrument in instruments) { var secId = instrument.Code.ToSecurityId(); SendOutMessage(new SecurityMessage { OriginalTransactionId = message.TransactionId, SecurityId = secId, SecurityType = SecurityTypes.Currency, Name = instrument.DisplayName, PriceStep = 0.000001m }); if (instrument.Halted) { SendOutMessage(new Level1ChangeMessage { ServerTime = CurrentTime.Convert(TimeZoneInfo.Utc), SecurityId = secId, }.Add(Level1Fields.State, SecurityStates.Stoped)); } } SendOutMessage(new SecurityLookupResultMessage { OriginalTransactionId = message.TransactionId }); }
/// <summary> /// Найти инструменты, соответствующие фильтру <paramref name="criteria"/>. /// Найденные инструменты будут переданы через событие <see cref="IConnector.LookupSecuritiesResult"/>. /// </summary> /// <param name="criteria">Критерий, поля которого будут использоваться в качестве фильтра.</param> public override void LookupSecurities(SecurityLookupMessage criteria) { if (_ownTrader) { UnderlyingConnector.LookupSecurities(criteria); } }
private void ProcessSecurityLookup(SecurityLookupMessage lookupMsg) { var secTypes = lookupMsg.GetSecurityTypes(); foreach (var info in _httpClient.GetPairsInfo()) { var secMsg = new SecurityMessage { SecurityId = info.Name.ToStockSharp(), SecurityType = info.UrlSymbol == _eurusd ? SecurityTypes.Currency : SecurityTypes.CryptoCurrency, MinVolume = info.MinimumOrder.Substring(0, info.MinimumOrder.IndexOf(' ')).To <decimal>(), Decimals = info.BaseDecimals, Name = info.Description, VolumeStep = info.UrlSymbol == _eurusd ? 0.00001m : 0.00000001m, OriginalTransactionId = lookupMsg.TransactionId, }; if (!secMsg.IsMatch(lookupMsg, secTypes)) { continue; } SendOutMessage(secMsg); } SendSubscriptionResult(lookupMsg); }
public ICollection <SecurityMessage> LookupSecurities(SecurityLookupMessage criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } var existingSecurities = ServicesRegistry.TrySecurityProvider?.Lookup(criteria).Select(s => s.ToMessage()).Where(s => !s.SecurityId.IsAllSecurity()).ToArray() ?? Enumerable.Empty <SecurityMessage>(); var existingIds = existingSecurities.Select(s => s.SecurityId.ToStringId()).ToIgnoreCaseSet(); var securities = new List <SecurityMessage>();
private void ProcessSecurityLookup(SecurityLookupMessage lookupMsg) { var reply = _client.GetInstruments(); foreach (var info in reply.Items.Values) { var secId = new SecurityId { SecurityCode = info.Name.ToStockSharpCode(), BoardCode = _boardCode, }; // NOTE сейчас BTCE транслирует для данного тикера // кол-во знаков после запятой 3 и мин цена 0.0001 if (secId.SecurityCode.CompareIgnoreCase("ltc/eur")) { info.MinPrice = 0.001; } // NOTE сейчас BTCE транслирует для данного тикера // кол-во знаков после запятой 2, но цены содержат 5 знаков if (secId.SecurityCode.CompareIgnoreCase("btc/cnh")) { info.DecimalDigits = 5; } if (secId.SecurityCode.CompareIgnoreCase("btc/usd")) { info.DecimalDigits = 5; } SendOutMessage(new SecurityMessage { SecurityId = secId, Decimals = info.DecimalDigits, VolumeStep = (decimal)info.MinVolume, SecurityType = SecurityTypes.CryptoCurrency, OriginalTransactionId = lookupMsg.TransactionId, }); SendOutMessage(new Level1ChangeMessage { SecurityId = secId, ServerTime = reply.Timestamp.ApplyTimeZone(TimeHelper.Moscow) } .TryAdd(Level1Fields.MinPrice, (decimal)info.MinPrice) .TryAdd(Level1Fields.MaxPrice, (decimal)info.MaxPrice) .Add(Level1Fields.State, info.IsHidden ? SecurityStates.Stoped : SecurityStates.Trading)); } SendOutMessage(new SecurityLookupResultMessage { OriginalTransactionId = lookupMsg.TransactionId }); }
private void ProcessSecurityLookupMessage(SecurityLookupMessage message) { if (_lookupSecuritiesId == 0) { _lookupSecuritiesId = message.TransactionId; _wrapper.LookupSecurities(); } else { SendOutError(LocalizedStrings.Str1854); } }
private void TrySubscribe(Security subscriber, MarketDataTypes type) { var subscribers = GetSubscribers(type); //Если уже выполняется поиск данного инструмента, то нет необходимости в повторном вызове OnRegisterXXX. //Если на инструмент была подписка ранее, то просто вызываем событие SubscriptionSucceed. bool?subscribed = false; lock (subscribers.SyncRoot) { var value = subscribers.TryGetValue2(subscriber); if (value == null) { subscribers[subscriber] = 0; subscribed = null; } if (value > 0) { subscribers[subscriber] = (int)value + 1; subscribed = true; } } var securityId = _connector.GetSecurityId(subscriber); if (subscribed == null) { var lookupMessage = new SecurityLookupMessage { SecurityId = securityId, SecurityType = subscriber.Type, TransactionId = _connector.TransactionIdGenerator.GetNextId() }; _lookupMessages.Add(lookupMessage.TransactionId, Tuple.Create(lookupMessage, subscriber, type)); _connector.LookupSecurities(lookupMessage); } if (subscribed == true) { _connector.SendOutMessage(new MarketDataMessage { DataType = type, IsSubscribe = true, //SecurityId = securityId, }.FillSecurityInfo(_connector, subscriber)); } }
private void ProcessSecurityLookup(SecurityLookupMessage lookupMsg) { var reply = _client.GetInstruments(); foreach (var info in reply.Items.Values) { var secId = new SecurityId { SecurityCode = info.Name.ToStockSharpCode(), BoardCode = _boardCode, }; // NOTE сейчас BTCE транслирует для данного тикера // кол-во знаков после запятой 3 и мин цена 0.0001 if (secId.SecurityCode.CompareIgnoreCase("ltc/eur")) info.MinPrice = 0.001; // NOTE сейчас BTCE транслирует для данного тикера // кол-во знаков после запятой 2, но цены содержат 5 знаков if (secId.SecurityCode.CompareIgnoreCase("btc/cnh")) info.DecimalDigits = 5; if (secId.SecurityCode.CompareIgnoreCase("btc/usd")) info.DecimalDigits = 5; SendOutMessage(new SecurityMessage { SecurityId = secId, Decimals = info.DecimalDigits, VolumeStep = (decimal)info.MinVolume, SecurityType = SecurityTypes.CryptoCurrency, OriginalTransactionId = lookupMsg.TransactionId, }); SendOutMessage(new Level1ChangeMessage { SecurityId = secId, ServerTime = reply.Timestamp.ApplyTimeZone(TimeHelper.Moscow) } .TryAdd(Level1Fields.MinPrice, (decimal)info.MinPrice) .TryAdd(Level1Fields.MaxPrice, (decimal)info.MaxPrice) .Add(Level1Fields.State, info.IsHidden ? SecurityStates.Stoped : SecurityStates.Trading)); } SendOutMessage(new SecurityLookupResultMessage { OriginalTransactionId = lookupMsg.TransactionId }); }
private bool ProcessSecurityLookup(SecurityLookupMessage msg) { if (msg == null) { throw new ArgumentNullException(nameof(msg)); } if (msg.Adapter != null && msg.Adapter != this) { return(base.OnSendInMessage(msg)); } foreach (var security in _securityStorage.Lookup(msg)) { RaiseNewOutMessage(security.ToMessage(originalTransactionId: msg.TransactionId)); } return(base.OnSendInMessage(msg)); }
public ICollection <SecurityMessage> LookupSecurities(SecurityLookupMessage criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } var existingSecurities = ServicesRegistry.TrySecurityProvider?.Lookup(criteria).Select(s => s.ToMessage()).Where(s => !s.SecurityId.IsAllSecurity()).ToArray() ?? Enumerable.Empty <SecurityMessage>(); var existingIds = existingSecurities.Select(s => s.SecurityId.ToStringId()).ToHashSet(StringComparer.InvariantCultureIgnoreCase); var securities = new List <SecurityMessage>(); byte[] Send <T>(string method, string argName, T arg) { var request = new MemoryStream(); request.SerializeDataContract(arg); using (var client = new WebClientEx { Timeout = TimeSpan.FromMinutes(1) }) { var response = client.UploadData($"https://stocksharp.com/services/instrumentprovider.ashx?method={method}", request.To <byte[]>().DeflateTo()); return(response.DeflateFrom()); } } var ids = Send(nameof(IRemoteStorage.LookupSecurityIds), "criteria", criteria).UTF8().SplitByDotComma(); var newSecurityIds = ids.Where(id => !existingIds.Contains(id)).ToArray(); foreach (var b in newSecurityIds.Batch(RemoteStorage.DefaultMaxSecurityCount)) { var batch = b.ToArray(); var response = Send(nameof(IRemoteStorage.GetSecurities), "securityIds", batch); securities.AddRange(response.To <Stream>().DeserializeDataContract <SecurityMessage[]>()); } securities.AddRange(existingSecurities); return(securities); }
private bool ProcessSecurityLookup(SecurityLookupMessage msg) { if (msg == null) { throw new ArgumentNullException(nameof(msg)); } if (/*!msg.IsSubscribe || */ (msg.Adapter != null && msg.Adapter != this)) { return(base.OnSendInMessage(msg)); } var transId = msg.TransactionId; foreach (var security in _securityStorage.Lookup(msg)) { RaiseNewOutMessage(security.ToMessage(originalTransactionId: transId).SetSubscriptionIds(subscriptionId: transId)); } return(base.OnSendInMessage(msg)); }
public ICollection <SecurityMessage> LookupSecurities(SecurityLookupMessage criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } var existingIds = ServicesRegistry.TrySecurityProvider?.LookupAll().Select(s => s.Id).ToHashSet(StringComparer.InvariantCultureIgnoreCase) ?? new HashSet <string>(StringComparer.InvariantCultureIgnoreCase); var securities = new List <SecurityMessage>(); byte[] Send <T>(string method, string argName, T arg) { var request = new MemoryStream(); request.SerializeDataContract(arg); using (var client = new WebClientEx { Timeout = TimeSpan.FromMinutes(1) }) { client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; var response = client.UploadString("https://stocksharp.com/services/instrumentprovider.ashx", $"method={method}&{argName}={request.To<byte[]>().DeflateTo().UTF8()}"); return(client.Encoding.GetBytes(response).DeflateFrom()); } } var ids = Send(nameof(IRemoteStorage.LookupSecurityIds), "criteria", criteria).UTF8().Split(";"); var newSecurityIds = ids.Where(id => !existingIds.Contains(id)).ToArray(); foreach (var b in newSecurityIds.Batch(RemoteStorage.DefaultMaxSecurityCount)) { var batch = b.ToArray(); var response = Send(nameof(IRemoteStorage.GetSecurities), "securityIds", batch); securities.AddRange(response.To <Stream>().DeserializeDataContract <SecurityMessage[]>()); } return(securities); }
/// <inheritdoc /> public IEnumerable <Security> Lookup(SecurityLookupMessage criteria) { if (criteria == null) { throw new ArgumentNullException(nameof(criteria)); } var secId = criteria.SecurityId.ToStringId(nullIfEmpty: true); var filter = secId.IsEmpty() ? (criteria.IsLookupAll() ? string.Empty : criteria.SecurityId.SecurityCode) : secId; var securities = _trie.Retrieve(filter); if (!secId.IsEmpty()) { securities = securities.Where(s => s.Id.CompareIgnoreCase(secId)); } return(securities.Filter(criteria)); }
private void ProcessSecurityLookup(SecurityLookupMessage message) { SendOutMessage(new SecurityMessage { OriginalTransactionId = message.TransactionId, SecurityId = _btcUsd, SecurityType = SecurityTypes.CryptoCurrency, VolumeStep = 0.00000001m, PriceStep = 0.01m, }); SendOutMessage(new SecurityMessage { OriginalTransactionId = message.TransactionId, SecurityId = _eurUsd, SecurityType = SecurityTypes.Currency, PriceStep = 0.0001m, }); SendOutMessage(new SecurityLookupResultMessage { OriginalTransactionId = message.TransactionId }); }
/// <inheritdoc /> public void DeleteBy(SecurityLookupMessage criteria) { if (criteria.IsLookupAll()) { _inner.Clear(); Cleared?.Invoke(); return; } Security[] toDelete; lock (_inner.SyncRoot) { toDelete = _inner.Values.Filter(criteria).ToArray(); foreach (var security in toDelete) { _inner.Remove(security.ToSecurityId()); } } Removed?.Invoke(toDelete); }
private void ProcessSecurityLookup(SecurityLookupMessage message) { var criteria = new OEC.API.SymbolLookupCriteria { SearchText = message.SecurityId.SecurityCode, ContractType = ContractType.Electronic, Mode = SymbolLookupMode.AnyInclusion, }; if (!message.SecurityId.BoardCode.IsEmpty()) { var exchange = _client.Exchanges[message.SecurityId.BoardCode]; if (exchange != null) criteria.Exchange = exchange; } if (!message.UnderlyingSecurityCode.IsEmpty()) { var contract = _client.BaseContracts[message.UnderlyingSecurityCode]; if (contract != null) criteria.BaseContract = contract; } switch (message.SecurityType) { case SecurityTypes.Index: criteria.ContractKinds.AddRange(new[] { ContractKind.EquityIndex, ContractKind.Continuous, ContractKind.CustomCompound, ContractKind.FutureCompound, ContractKind.GenericCompound, ContractKind.OptionsCompound }); break; case SecurityTypes.Stock: criteria.ContractKinds.AddRange(new[] { ContractKind.Equity }); break; case SecurityTypes.Bond: criteria.ContractKinds.AddRange(new[] { ContractKind.Bond }); break; case SecurityTypes.Forward: criteria.ContractKinds.AddRange(new[] { ContractKind.ForexForward }); break; case SecurityTypes.Currency: criteria.ContractKinds.AddRange(new[] { ContractKind.Forex, ContractKind.ForexForward }); break; case SecurityTypes.Future: criteria.ContractKinds.AddRange(new[] { ContractKind.Future, ContractKind.Continuous, ContractKind.FutureCompound }); break; case SecurityTypes.Option: criteria.OptionsRequired = true; switch (message.OptionType) { case OptionTypes.Call: criteria.OptionType = SymbolLookupCriteriaOptionType.Call; break; case OptionTypes.Put: criteria.OptionType = SymbolLookupCriteriaOptionType.Put; break; case null: criteria.OptionType = SymbolLookupCriteriaOptionType.All; break; default: throw new ArgumentOutOfRangeException(); } criteria.ContractKinds.AddRange(new[] { ContractKind.Option, ContractKind.EquityOption, ContractKind.OptionsCompound }); break; case SecurityTypes.Fund: criteria.ContractKinds.AddRange(new[] { ContractKind.MutualFund }); break; case null: criteria.OptionType = SymbolLookupCriteriaOptionType.All; break; default: throw new ArgumentOutOfRangeException("message", message.SecurityType, LocalizedStrings.Str2117); } _client.SymbolLookup(criteria); }
public override void LookupSecurities(SecurityLookupMessage criteria) { _realConnector.LookupSecurities(criteria); }
private void ProcessSecurityLookup(SecurityLookupMessage message) { var criteria = new OEC.API.SymbolLookupCriteria { SearchText = message.SecurityId.SecurityCode, ContractType = ContractType.Electronic, Mode = SymbolLookupMode.AnyInclusion, }; if (!message.SecurityId.BoardCode.IsEmpty()) { var exchange = _client.Exchanges[message.SecurityId.BoardCode]; if (exchange != null) { criteria.Exchange = exchange; } } if (!message.UnderlyingSecurityCode.IsEmpty()) { var contract = _client.BaseContracts[message.UnderlyingSecurityCode]; if (contract != null) { criteria.BaseContract = contract; } } switch (message.SecurityType) { case SecurityTypes.Index: criteria.ContractKinds.AddRange(new[] { ContractKind.EquityIndex, ContractKind.Continuous, ContractKind.CustomCompound, ContractKind.FutureCompound, ContractKind.GenericCompound, ContractKind.OptionsCompound }); break; case SecurityTypes.Stock: criteria.ContractKinds.AddRange(new[] { ContractKind.Equity }); break; case SecurityTypes.Bond: criteria.ContractKinds.AddRange(new[] { ContractKind.Bond }); break; case SecurityTypes.Forward: criteria.ContractKinds.AddRange(new[] { ContractKind.ForexForward }); break; case SecurityTypes.Currency: criteria.ContractKinds.AddRange(new[] { ContractKind.Forex, ContractKind.ForexForward }); break; case SecurityTypes.Future: criteria.ContractKinds.AddRange(new[] { ContractKind.Future, ContractKind.Continuous, ContractKind.FutureCompound }); break; case SecurityTypes.Option: criteria.OptionsRequired = true; switch (message.OptionType) { case OptionTypes.Call: criteria.OptionType = SymbolLookupCriteriaOptionType.Call; break; case OptionTypes.Put: criteria.OptionType = SymbolLookupCriteriaOptionType.Put; break; case null: criteria.OptionType = SymbolLookupCriteriaOptionType.All; break; default: throw new ArgumentOutOfRangeException(); } criteria.ContractKinds.AddRange(new[] { ContractKind.Option, ContractKind.EquityOption, ContractKind.OptionsCompound }); break; case SecurityTypes.Fund: criteria.ContractKinds.AddRange(new[] { ContractKind.MutualFund }); break; case null: criteria.OptionType = SymbolLookupCriteriaOptionType.All; break; default: throw new ArgumentOutOfRangeException(nameof(message), message.SecurityType, LocalizedStrings.Str2117); } _client.SymbolLookup(criteria); }
/// <inheritdoc /> public abstract void LookupSecurities(SecurityLookupMessage criteria, ISecurityProvider securityProvider, Action <SecurityMessage> newSecurity, Func <bool> isCancelled, Action <int, int> updateProgress);
/// <inheritdoc /> public void LookupSecurities(SecurityLookupMessage criteria) { Subscribe(new Subscription(criteria)); }
private void ProcessSecurityLookupMessage(SecurityLookupMessage lookupMsg) { if (_isDownloadSecurityFromSite) { using (var client = new WebClient()) { var rows = client.DownloadString("http://www.lmax.com/doc/LMAX-Instruments.csv").Split("\n"); foreach (var row in rows.Skip(1)) { var cells = row.Split(','); var secCode = cells[2]; // иногда файл с багами, и там есть пустая строчка с запятыми if (cells[2].IsEmpty()) { continue; } var secName = cells[0]; SecurityTypes securityType; var volumeStep = 0m; if (_indexCodes.Contains(secCode, StringComparer.InvariantCultureIgnoreCase)) { securityType = SecurityTypes.Index; } else if ( secName.ContainsIgnoreCase("brent") || secName.ContainsIgnoreCase("gasoil") || secName.ContainsIgnoreCase("crude") ) { securityType = SecurityTypes.Commodity; } else { securityType = SecurityTypes.Currency; if (!secCode.StartsWith("XA", StringComparison.InvariantCultureIgnoreCase)) { volumeStep = 0.1m; } } SendOutMessage(new SecurityMessage { SecurityId = new SecurityId { SecurityCode = secCode, BoardCode = ExchangeBoard.Lmax.Code, Native = cells[1].To <long>(), }, SecurityType = securityType, VolumeStep = volumeStep, Name = secName, Multiplier = cells[3].To <decimal?>(), PriceStep = cells[4].To <decimal>(), //security.MinStepPrice = cells[5].To<decimal>(), Currency = cells[8].To <CurrencyTypes>(), ExpiryDate = cells[7].IsEmpty() ? (DateTimeOffset?)null : cells[7].ToDateTime("dd/MM/yyyy HH:mm").ApplyTimeZone(TimeZoneInfo.Utc), OriginalTransactionId = lookupMsg.TransactionId }); } } _isDownloadSecurityFromSite = false; } else { SearchSecurities(lookupMsg.SecurityId.SecurityCode, lookupMsg.TransactionId, new List <Instrument>(), true); } }
void IMarketDataProvider.LookupSecurities(SecurityLookupMessage criteria) { }
/// <summary> /// To call the event <see cref="LookupSecuritiesResult"/>. /// </summary> /// <param name="message">Message.</param> /// <param name="error">An error of lookup operation. The value will be <see langword="null"/> if operation complete successfully.</param> /// <param name="securities">Found instruments.</param> /// <param name="newSecurities">Newly created.</param> private void RaiseLookupSecuritiesResult(SecurityLookupMessage message, Exception error, Security[] securities, Security[] newSecurities) { LookupSecuritiesResult?.Invoke(message, securities, error); LookupSecuritiesResult2?.Invoke(message, securities, newSecurities, error); }
/// <summary> /// To call the event <see cref="LookupSecuritiesResult"/>. /// </summary> /// <param name="message">Message.</param> /// <param name="error">An error of lookup operation. The value will be <see langword="null"/> if operation complete successfully.</param> /// <param name="securities">Found instruments.</param> private void RaiseLookupSecuritiesResult(SecurityLookupMessage message, Exception error, IEnumerable <Security> securities) { LookupSecuritiesResult?.Invoke(message, securities, error); }
/// <summary> /// Call this function to download all details for a particular underlying. the contract details will be received via the contractDetails() function on the EWrapper. /// </summary> /// <param name="criteria">summary description of the contract being looked up.</param> private void RequestSecurityInfo(SecurityLookupMessage criteria) { if (criteria == null) throw new ArgumentNullException("criteria"); ProcessRequest(RequestMessages.RequestContractData, ServerVersions.V4, ServerVersions.V7, socket => { //MIN_SERVER_VER_CONTRACT_DATA_CHAIN = 40 if (socket.ServerVersion >= ServerVersions.V40) { socket.Send(criteria.TransactionId); } if (socket.ServerVersion >= ServerVersions.V37) { socket.SendContractId(criteria.SecurityId); } socket .SendSecurity(criteria, socket.ServerVersion >= ServerVersions.V70, socket.ServerVersion >= ServerVersions.V75) .SendIf(ServerVersions.V68, s => socket.Send(criteria.Class)) .SendIncludeExpired(criteria.ExpiryDate) .SendSecurityId(criteria.SecurityId); }); }
/// <summary> /// Найти инструменты, соответствующие фильтру <paramref name="criteria"/>. /// Найденные инструменты будут переданы через событие <see cref="IConnector.LookupSecuritiesResult"/>. /// </summary> /// <param name="criteria">Критерий, поля которого будут использоваться в качестве фильтра.</param> public void LookupSecurities(SecurityLookupMessage criteria) { Connector.LookupSecurities(criteria); }
/// <inheritdoc /> public IEnumerable <Security> Lookup(SecurityLookupMessage criteria) { return(_inner.SyncGet(d => d.Values.Filter(criteria).ToArray()).Concat(_underlying.Lookup(criteria)).Distinct()); }
private void ProcessSecurityLookupMessage(SecurityLookupMessage message) { ProcessInSubscriptionMessage(message, DataType.Securities); }
private void ProcessSecurityLookupMessage(SecurityLookupMessage lookupMsg) { if (_isDownloadSecurityFromSite) { using (var client = new WebClient()) { var rows = client.DownloadString("http://www.lmax.com/doc/LMAX-Instruments.csv").Split("\n"); foreach (var row in rows.Skip(1)) { var cells = row.Split(','); var secCode = cells[2]; // иногда файл с багами, и там есть пустая строчка с запятыми if (cells[2].IsEmpty()) continue; var secName = cells[0]; SecurityTypes securityType; var volumeStep = 0m; if (_indexCodes.Contains(secCode, StringComparer.InvariantCultureIgnoreCase)) securityType = SecurityTypes.Index; else if ( secName.ContainsIgnoreCase("brent") || secName.ContainsIgnoreCase("gasoil") || secName.ContainsIgnoreCase("crude") ) securityType = SecurityTypes.Commodity; else { securityType = SecurityTypes.Currency; if (!secCode.StartsWith("XA", StringComparison.InvariantCultureIgnoreCase)) volumeStep = 0.1m; } SendOutMessage(new SecurityMessage { SecurityId = new SecurityId { SecurityCode = secCode, BoardCode = ExchangeBoard.Lmax.Code, Native = cells[1].To<long>(), }, SecurityType = securityType, VolumeStep = volumeStep, Name = secName, Multiplier = cells[3].To<decimal?>(), PriceStep = cells[4].To<decimal>(), //security.MinStepPrice = cells[5].To<decimal>(), Currency = cells[8].To<CurrencyTypes>(), ExpiryDate = cells[7].IsEmpty() ? (DateTimeOffset?)null : cells[7].ToDateTime("dd/MM/yyyy HH:mm").ApplyTimeZone(TimeZoneInfo.Utc), OriginalTransactionId = lookupMsg.TransactionId }); } } _isDownloadSecurityFromSite = false; } else SearchSecurities(lookupMsg.SecurityId.SecurityCode, lookupMsg.TransactionId, new List<Instrument>(), true); }
private void ProcessSecurityLookupMessage(SecurityLookupMessage message) { if (_lookupSecuritiesId == 0) { _lookupSecuritiesId = message.TransactionId; _wrapper.LookupSecurities(); } else SendOutError(LocalizedStrings.Str1854); }