在QuickFix中,如何使用Python从标签号中获取标签的名称?例如,对于OrdStatus,如何将标签号5转换为字符串" OrdStatus_CANCELED"?
答案 0 :(得分:6)
<强> .NET:强>
如果您使用的是QuickFIX / N,则可以使用DataDictionary
实例以及您想要的任何数据源(例如,FIX42.xml)来实现此目的。请注意,您可以分别使用DataDictionary
的属性Session
和Session
获取与给定SessionDataDictionary
或应用程序本身相关联的ApplicationDataDictionary
实例。
考虑一下这个简单的C#程序:
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的:强>
C ++ DataDictionary
类有一个方法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;
}
Python DataDictionary unit tests之一的以下代码段(添加了评论)显示如何在getValueName
个实例的情况下使用DataDictionary
。
# 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", "")