ОЧЕНЬ основные вопросы от новичка FIX
Глядя на документацию на http://www.quickfixengine.org и читая посты здесь на stackoverflow, я вижу много разговоров о «взломе» сообщений. Я думаю, что вроде как идея, но чувствую, что мне все еще не совсем ясно.
Могут ли некоторые объяснить в общих чертах, что именно это (зачем это нужно? Это звучит как хак), почему это только относится к полученным сообщениям FIX и вообще не используется при использовании Python?
Спасибо!
На практике все, что вам нужно знать, это:
Ваш 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()
делает это:
Message
в правильный подкласс (например, NewOrderSingle
, ExecutionReport
, так далее)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()
(увидеть этот вопрос для получения дополнительной информации).
Я использую quickfixj для Java. Взлом использует интерфейс и возвращает возвращенное взломанное сообщение реализации интерфейса. Разработчик перезапустит методы интерфейса, чтобы он мог обрабатывать каждый тип сообщения индивидуально.
Взломщик сообщений принимает простое сообщение и возвращает сообщение как специально напечатанное сообщение. Преимущество этого состоит в том, что словарь будет ограничивать поля сообщения, чтобы легче было искать каждое поле.