来自FIX新手的非常基本的问题
查看http://www.quickfixengine.org上的文档并在stackoverflow上阅读这里的帖子,我看到很多关于消息'破解'的讨论.我想我有点想法,但觉得我还不完全清楚.
有些人可以解释一下究竟是什么(为什么它是必要的?听起来像是一个黑客),为什么它似乎只与收到的FIX消息有关,并且在使用Python时根本没有使用?
谢谢!
Gra*_*ier 27
在实践中,您需要知道的是:
你的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);
}
Run Code Online (Sandbox Code Playgroud)
这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.
}
Run Code Online (Sandbox Code Playgroud)
你想处理ExecutionReports吗?定义onMessage(ExecutionReport).等等.
但是,那些消息类型,你不希望处理?如果你必须添加处理程序来拒绝所有其他消息类型,那会很糟糕,但幸运的是,你不必这样做.正如我之前所说,如果你没有定义onMessage(),QF将拒绝你.(如果您想吞下特定的消息类型并忽略它而不拒绝,那么只需定义一个onMessage()没有正文的调用.)
这有点清楚吗?也许现在QF文档中的这个页面可能会更容易阅读 - 底部部分讨论了MessageCracker.
注意: MessageCracker不处理会话级(也称为"admin")消息.如果要为Logon或Heartbeat消息添加自定义处理,则必须明确地执行此操作fromAdmin()(有关详细信息,请参阅此问题).