/// <summary>
		/// Deaktywacja odbioru (subskrypcji) informacji o bieżących notowaniach giełdowych.
		/// To, co się udało do tej pory zebrać, pozostaje nadal w pamięci - dostępne przez "MarketDataResults".
		/// </summary>
		public void MarketDataStop()
		{
			if (mdReqId == null) return;
			lock (mdResults)
			{
				Debug.WriteLine("\nMarketDataStop...");
				using (Socket socket = GetSyncSocket())
				{
					MarketDataRequestMsg request = new MarketDataRequestMsg();
					request.Type = SubscriptionRequestType.CancelSubscription;
					request.Send(socket);
					MarketDataFullRefreshMsg response = new MarketDataFullRefreshMsg(socket);
					if (response.RequestId != request.Id)
						throw new FixmlException("Unexpected MktDataFull ReqID.");
				}
				mdReqId = null;
				Debug.WriteLine("MarketDataStop OK\n");
			}
		}
		/// <summary>
		/// Aktywacja odbioru (subskrypcji) informacji o bieżących notowaniach giełdowych.
		/// Treść tych informacji ustalamy (najlepiej wcześniej) korzystając z metod "MarketDataSubscription*".
		/// </summary>
		public void MarketDataStart()
		{
			if (mdReqId != null) MarketDataStop();
			lock (mdResults)
			{
				mdResults.Clear();
				Debug.WriteLine("\nMarketDataStart...");
				using (Socket socket = GetSyncSocket())
				{
					MarketDataRequestMsg request = new MarketDataRequestMsg();
					request.Type = SubscriptionRequestType.StartSubscription;
					request.MarketDepth = 1;
					request.EntryTypes = mdEntryTypes.ToArray();
					request.Instruments = mdInstruments.ToArray();
					request.Send(socket);
					MarketDataFullRefreshMsg response = new MarketDataFullRefreshMsg(socket);
					if (response.RequestId != request.Id)
						throw new FixmlException("Unexpected MktDataFull ReqID.");
					mdReqId = request.Id;
				}
				Debug.WriteLine("MarketDataStart OK\n");
			}
		}