Example #1
0
            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);
                }
            }
        }
Example #5
0
        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
            });
        }
Example #6
0
 /// <summary>
 /// Найти инструменты, соответствующие фильтру <paramref name="criteria"/>.
 /// Найденные инструменты будут переданы через событие <see cref="IConnector.LookupSecuritiesResult"/>.
 /// </summary>
 /// <param name="criteria">Критерий, поля которого будут использоваться в качестве фильтра.</param>
 public override void LookupSecurities(SecurityLookupMessage criteria)
 {
     if (_ownTrader)
     {
         UnderlyingConnector.LookupSecurities(criteria);
     }
 }
Example #7
0
        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);
        }
Example #8
0
            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);
     }
 }
Example #11
0
            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));
        }
Example #14
0
            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);
            }
Example #15
0
        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);
            }
Example #17
0
        /// <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));
        }
Example #18
0
        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
            });
        }
Example #19
0
        /// <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);
		}
Example #21
0
			public override void LookupSecurities(SecurityLookupMessage criteria)
			{
				_realConnector.LookupSecurities(criteria);
			}
Example #22
0
        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);
        }
Example #23
0
 /// <inheritdoc />
 public abstract void LookupSecurities(SecurityLookupMessage criteria, ISecurityProvider securityProvider, Action <SecurityMessage> newSecurity, Func <bool> isCancelled, Action <int, int> updateProgress);
Example #24
0
 /// <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);
            }
        }
Example #26
0
 public override void LookupSecurities(SecurityLookupMessage criteria)
 {
     _realConnector.LookupSecurities(criteria);
 }
Example #27
0
 void IMarketDataProvider.LookupSecurities(SecurityLookupMessage criteria)
 {
 }
Example #28
0
 /// <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);
 }
Example #29
0
 /// <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);
			});
		}
		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 });
		}
Example #32
0
 /// <summary>
 /// Найти инструменты, соответствующие фильтру <paramref name="criteria"/>.
 /// Найденные инструменты будут переданы через событие <see cref="IConnector.LookupSecuritiesResult"/>.
 /// </summary>
 /// <param name="criteria">Критерий, поля которого будут использоваться в качестве фильтра.</param>
 public void LookupSecurities(SecurityLookupMessage criteria)
 {
     Connector.LookupSecurities(criteria);
 }
Example #33
0
 /// <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);
		}