python – 标记号到Name字符串

在QuickFix中,如何使用Python从标签号中获取标签的名称?例如,对于OrdStatus,如何将标记号5转换为字符串“OrdStatus_CANCELED”?

解决方法:

.净:

如果您使用的是QuickFIX / N,则可以使用DataDictionary实例以及您想要的任何数据源(例如,FIX42.xml)来实现此目的.请注意,您可以分别使用Session的属性SessionDataDictionary和ApplicationDataDictionary来获取与给定Session或应用程序本身关联的DataDictionary实例.

考虑一下这个简单的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之一的以下片段(添加了注释)显示了如何在给定DataDictionary实例的情况下使用getValueName.

# 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", "")
上一篇:Python-Quickfix:尝试登录时出现getHeader()属性错误


下一篇:[label][翻译][JavaScript-Translation]七个步骤让你写出更好的JavaScript代码