Вопросы о взломе сообщений QuickFIX

ОЧЕНЬ основные вопросы от новичка FIX

Глядя на документацию на http://www.quickfixengine.org и читая посты здесь на stackoverflow, я вижу много разговоров о «взломе» сообщений. Я думаю, что вроде как идея, но чувствую, что мне все еще не совсем ясно.

Могут ли некоторые объяснить в общих чертах, что именно это (зачем это нужно? Это звучит как хак), почему это только относится к полученным сообщениям FIX и вообще не используется при использовании Python?

Спасибо!

10

Решение

На практике все, что вам нужно знать, это:

Ваш fromApp() обратный вызов получает Message объект. Это сообщение на самом деле NewOrderSingle или ExecutionReport или что-то еще. Вместо того, чтобы заставить вас понять это, QF позволяет вам наследовать от MessageCracker, Чтобы использовать это, позвоните crack() в вашем fromApp(), следующее:

void fromApp( const FIX::Message& message, const FIX::SessionID& sessionID )
throw( FIX::FieldNotFound&, FIX::IncorrectDataFormat&, FIX::IncorrectTagValue&, FIX::UnsupportedMessageType& )
{
crack(message, sessionID);
}

Какие crack() делает это:

  1. Преобразует ваш Message в правильный подкласс (например, NewOrderSingle, ExecutionReport, так далее)
  2. Звонит ваш пользовательский onMessage(subtype) обратный вызов, если он определен. Если не определено, он бросает UnsupportedMessageType исключение, и ваше приложение автоматически отправит BusinessMessageReject (35 = j) контрагенту.

Итак, вы хотите обрабатывать сообщения NewOrderSingle? Отлично, просто определите onMessage(NewOrderSingle) Перезвоните.

void onMessage( const FIX42::NewOrderSingle& message, const FIX::SessionID& )
{
// Do whatever you want with your NewOrderSingle message's content.
// Note that this message and the one passed to crack() are the same, content-wise.
}

Вы хотите обрабатывать ExecutionReports? определять onMessage(ExecutionReport), И так далее.

Но как насчет тех типов сообщений, которые вы не хочешь справиться? Было бы плохо, если бы вам пришлось добавить обработчики, чтобы отклонить все эти другие типы сообщений, но, к счастью, вам это не нужно. Как я уже говорил ранее, если вы не определите onMessage()QF отклонит это для вас. (Если вы хотите проглотить определенный тип сообщения и игнорировать его без отклонения, просто определите onMessage() звонить без тела.)

Это немного проясняет? Возможно сейчас эта страница в документах QF может быть, читать немного проще — нижняя часть рассказывает о MessageCracker.

Замечания: MessageCracker не обрабатывает сообщения на уровне сеанса (он же «admin»). Если вы хотите добавить пользовательскую обработку, скажем, сообщений Logon или Heartbeat, вы должны сделать это явно в fromAdmin() (увидеть этот вопрос для получения дополнительной информации).

25

Другие решения

Я использую quickfixj для Java. Взлом использует интерфейс и возвращает возвращенное взломанное сообщение реализации интерфейса. Разработчик перезапустит методы интерфейса, чтобы он мог обрабатывать каждый тип сообщения индивидуально.

Взломщик сообщений принимает простое сообщение и возвращает сообщение как специально напечатанное сообщение. Преимущество этого состоит в том, что словарь будет ограничивать поля сообщения, чтобы легче было искать каждое поле.

2

По вопросам рекламы [email protected]