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"?
Asked
Active
Viewed 1,769 times
3
-
Which version of QuickFIX are you using? QuickFIX/N? QuickFIX/J? C++? – hunch_hunch Oct 24 '14 at 20:36
1 Answers
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