2010-01-31 57 views
2

我是新用的quickfix的东西,我有一个关于入quickfix库的若干问题,我会更乐意从你得到答案:的quickfix库问题

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

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

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

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

问候,

莫迪凯Yaakobi

+0

用于添加自定义消息和字段遵循以下简单步骤http://adding-custom-fields-messages-in-qf-6-easy-steps.32054.n6.nabble.com – 2012-06-18 12:14:58

回答

8
  1. TargetID是盒子 的到你发送消息时,如果 你需要区分多个客户端的会话 (我假设成 一个名字服务器)只是给每个客户端 不同SenderCompID

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

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

    在您的服务器(INCA):

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

    在您的客户端(客户端1):

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

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

    当您发送消息时,您将您的 comp id设为sendercompid,并将 设为您要发送消息的地址 as targetcompid。您指定 beginstring基于您想使用的修复程序 版本进行通信(FIX4.0/FIX4.2 ....)。

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

  3. 自定义字段取决于确切需要什么 。FIX协议 指定自定义字段那些 FieldID比保留 范围大,所以你的自定义字段可以 开始FieldID 5000

    有几个关于 选择如何去了解它。最简单的一个 只是使用消息的数值 并将其添加到消息(我假设您使用C++,但它与其他语言使用C++类似,但它的类似 )。

    喜欢的东西:

    msg.setField(5000,"SomeValue"); 
    

    此定制字段将不会被 自动验证,因为FIX 不知道这件事。 FIX使用xml 文件,其中指定了每个消息和字段 。

    有一个正确的程序添加 新的消息,XML规范,然后 再生quickfixengine代码 产生新的领域结构,但这样 到目前为止,我没必要这么做。

    消息破解只是一个方法 是采用指针通用 消息,然后它看起来在 消息ID(如果我没记错),并调用 相应的处理程序。

    这是一个大的,如果有很多语句字符串操作 所以有时 最好是自己做的检查 ,但你应该还好 使用它。

    这是方法是如何的样子,你会得到的想法:

    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方法 对于您不需要的消息 只需执行任何操作,并且 返回,因此消息将永远不会到达 您的应用程序。

如果您需要添加自定义消息/场我发现this useful,我没有,虽然使用过它。