2

我是 quickfix 的新手,我有几个关于 quickfix 库的问题,我很乐意从你那里得到答案:

我正计划开发同时从多个客户端获取 FIX 请求的 FIX 服务器。对此,

a)如果我需要区分来自不同客户端的请求(如何区分这些请求),TargetID(即CLIENT1)的确切含义是什么?

b) TargetID 关于服务器/客户端的一般含义是什么?

c) 我如何添加自定义字段和自定义消息,以及与消息破解对象的确切连接是什么?

问候,

莫迪凯·雅科比

4

1 回答 1

8
  1. TargetID是您发送消息的框的名称,如果您需要区分多个客户端的会话(我假设为一个服务器),只需给每个客户端不同的SenderCompID.

    在您的服务器上,您必须为每个客户端设置一个会话。

    一个服务器-客户端会话的示例:

    在您的服务器 (INCA) 上:

    [SESSION]
    BeginString=FIX.4.0
    SenderCompID=INCA
    TargetCompID=CLIENT1
    

    在您的客户端(CLIENT1)上:

    [SESSION]
    BeginString=FIX.4.0
    SenderCompID=CLIENT1
    TargetCompID=INCA
    

    quickfixengine 根据这 3 个值区分会话(服务器-客户端连接):(BeginString, TargetCompID, SenderCompID)

    当您发送消息时,您将您的 comp idsendercompid和目标放在您发送消息的位置targetcompid。您 beginstring根据希望用于通信的修复版本指定 ( FIX4.0/ FIX4.2 ....)。

  2. 我想上面已经解释过了,TargetID 是您发送消息的框的 ID。当服务器响应客户端时,它将设置SenderCompID为它的(服务器)ID,TargetCompID并将设置为发送响应的客户端。

  3. 自定义字段取决于确切的要求。FIX 协议指定 FieldID 大于保留范围的自定义字段,因此您的自定义字段可以以 FieldID 5000 开头。

    关于如何去做有几个选择。最简单的一种是只使用 message 的数值并将其添加到 message 中(我假设您使用 c++,但它与其他语言相似)。

    就像是:

     msg.setField(5000,"SomeValue");
    

    此自定义字段不会自动验证,因为 FIX 不知道它。FIX 使用指定了每个消息和字段的 xml 文件。

    有一个适当的过程可以将新消息添加到 xml 规范,然后重新生成 quickfixengine 代码以生成新的字段结构,但到目前为止我不需要这样做。

    消息破解器只是一种获取通用消息指针的方法,然后它会查看消息 ID(如果我记得的话)并调用适当的处理程序。

    这是一个包含大量字符串操作的大型 if 语句,因此有时最好自己进行检查,但您应该可以使用它。

    这就是方法的样子,你会明白的:

    void crack( const Message& message, 
          const FIX::SessionID& sessionID )
    {
    const std::string& msgTypeValue 
             = message.getHeader().getField( FIX::FIELD::MsgType );        
    if( msgTypeValue == "0" )
      onMessage( (const Heartbeat&)message, sessionID );
    else
    if( msgTypeValue == "A" )
      onMessage( (const Logon&)message, sessionID );
    else
    if( msgTypeValue == "1" )
      onMessage( (const TestRequest&)message, sessionID );
    else
    

    然后,您通常会实现适当的方法,例如,如果您只关心 ExecutionReport您在代码中实现的 s :

    virtual void onMessage( ExecutionReport&, const FIX::SessionID& );
    

    然后您的应用程序将获得, ExecutionReport以便您可以处理它。您未实现的onMessage消息方法只是什么都不做并返回,因此消息永远不会到达您的应用程序。

如果您需要添加自定义消息/字段,我发现这很有用,但我没有使用它。

于 2010-02-09T01:19:20.980 回答