3

In QuickFix, how can I get the name of the tag from the tag number using Python? For example, for OrdStatus, how do I convert tag number 5 to the String "OrdStatus_CANCELED"?

hunch_hunch
  • 2,283
  • 1
  • 21
  • 26
user3092887
  • 471
  • 1
  • 5
  • 8

1 Answers1

6

.NET:

If you are using QuickFIX/N, you can achieve this using a DataDictionary instance with whatever data source you want (e.g., FIX42.xml). Note that you can get the DataDictionary instance associated with a given Session or the application itself with Session's properties SessionDataDictionary and ApplicationDataDictionary, respectively.

Consider this trivial C# program:

namespace QuickFixTests
{
    using System;

    using QuickFix;
    using QuickFix.DataDictionary;
    using QuickFix.Fields;

    class Program
    {
        static void Main(string[] args)
        {
            var qfm = new Message();
            qfm.SetField(new OrdStatus('4'));
            var ordStatus = qfm.GetField(Tags.OrdStatus);
            var dd = new DataDictionary("FIX42.xml");
            Console.WriteLine(dd.FieldsByTag[39].EnumDict[ordStatus]); // Prints CANCELED
        }
    }
}

C++/Python:

The C++ DataDictionary class has a method getValueName:

bool getValueName( int field, const std::string& value, std::string& name ) const
{
  ValueToName::const_iterator i = m_valueNames.find( std::make_pair(field, value) );
  if(i == m_valueNames.end()) return false;
  name = i->second;
  return true;
}

The following snippets (with comments added) from one of the Python DataDictionary unit tests show how to use getValueName given a DataDictionary instance.

# Create a DataDictionary
def setUp(self):
    self.object = fix.DataDictionary()

# Add a dummy value
self.object.addValueName( 23, "BOO", "VALUE_23_BOO" )

# Test that the dummy value's name in the dictionary matches what was set
self.assertEquals( "VALUE_23_BOO", self.object.getValueName(23, "BOO", "")
hunch_hunch
  • 2,283
  • 1
  • 21
  • 26