Номер тега для строки имени

В QuickFix, как я могу получить имя тега из номера тега с помощью Python? Например, как для OrdStatus преобразовать номер тега 5 в строку «OrdStatus_CANCELED»?


person user3092887    schedule 24.10.2014    source источник
comment
Какую версию QuickFIX вы используете? QuickFIX/Н? QuickFIX/J? С++?   -  person hunch_hunch    schedule 25.10.2014


Ответы (1)


.NET:

Если вы используете QuickFIX/N, вы можете добиться этого, используя экземпляр DataDictionary с любым источником данных, который вы хотите (например, FIX42.xml). Обратите внимание, что вы можете получить экземпляр DataDictionary, связанный с данным Session, или с самим приложением со свойствами SessionDataDictionary и ApplicationDataDictionary Session соответственно.

Рассмотрим эту тривиальную программу на 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++ 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 показывают, как использовать 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", "")
person hunch_hunch    schedule 24.10.2014
comment
Можете ли вы также привести пример с использованием Python? Спасибо! - person user3092887; 27.10.2014
comment
Обновлен с примером Python. - person hunch_hunch; 27.10.2014