quickfix库问题

时间:2010-01-31 13:14:08

标签: finance quickfix fix-protocol

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

我打算开发FIX服务器,同时从多个客户端获取FIX请求。对此,

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

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

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

此致

Mordechai Yaakobi

1 个答案:

答案 0 :(得分: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为sendercompid和。{ 定位到您发送消息的位置 为targetcompid。你指定 beginstring基于修复程序 您希望使用的版本 沟通(FIX4.0 / FIX4.2 ....)。

  2. 我想这是上面解释的, TargetID是您所在的框的ID 发送消息。当服务器 回应客户,它会 设置SenderCompID因为它(服务器) id和TargetCompID将设置为 响应所在的客户端 被发送。

  3. 自定义字段取决于具体内容 确切是必需的。 FIX协议 指定自定义字段 FieldID大于保留 范围,所以您的自定义字段可以 从FieldID 5000开始。

    有几种选择 怎么去吧。最简单的一个 就是使用数值 消息并将其添加到消息(我 假设你使用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 你的代码:

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

    然后你的应用程序将获得 ExecutionReport以便你可以 处理它。 onMessage方法 对于你没有的消息 实施简单无所事事 返回所以消息永远不会到达 你的申请。

  4. 如果您需要添加我发现this useful的自定义消息/字段,我还是没有使用它。