我对 FIX 协议很陌生,希望有人可以帮助澄清一些术语。
特别是有人可以解释(可能有一个例子) , 的流程,NewOrderSingle
以及这些消息中如何使用字段, ,吗?ExecutionReport
CancelReplaceRequest
ClOrdID
OrdID
OrigClOrdID
我对 FIX 协议很陌生,希望有人可以帮助澄清一些术语。
特别是有人可以解释(可能有一个例子) , 的流程,NewOrderSingle
以及这些消息中如何使用字段, ,吗?ExecutionReport
CancelReplaceRequest
ClOrdID
OrdID
OrigClOrdID
关于字段用法的快速说明。我的经验是,许多实施 FIX 的人的做法略有不同。所以请注意,虽然我试图解释正确的用法,但您可能会发现实现之间存在差异。当我连接到一个新的代理时,我会得到一个 FIX 规范,其中详细说明了他们如何使用该协议。我必须非常小心,以确保它们偏离了其他实现。
也就是说,我会给你一个你所要求的概要。
有更复杂的订单,但 NewOrderSingle 是最常用的。它允许您为任何资产创建交易。您将需要使用此对象/消息类型创建一个新订单。然后,您将使用方法 sendToTarget() 通过会话发送它。您可以通过 toApp() 方法修改此点之后的消息,假设您的应用程序实现了 quickfix.Application 接口。
经纪人(或与您有联系的任何人)将以执行报告的形式向您发送回复。使用 quickfix 该回复将通过 fromApp() 回调进入您的应用程序。从那里最好的办法是使用 MessageCracker 的破解方法实现从 MessageCracker 类继承的应用程序(或在其他地方实现它),然后它将回调相关的 onMessage() 方法调用。您将需要实现许多 onMessage() 方法(具体取决于您正在做什么以及需要哪些方法),主要的是 onMessage(ExecutionReport msg, SessionID session)。当您收到来自代理的执行报告时,消息破解者将调用此方法。这是对新订单的标准回复。
从那里您可以根据需要处理回复。
有些订单不会像限价订单那样立即成交。它们可以更改。为此,您将需要 CancelReplaceRequest。您的经纪人将为您提供具体如何为他们执行此操作的详细信息(同样存在差异,并非每个人都这样做)。您必须先完成 NewOrderSingle,然后您将使用此 MsgType 来更新它。
ClOrdID 是客户用来识别订单的 ID。它与 NewOrderSingle 一起发送并在 ExecutionReport 中返回。OrdID 标签在 ExecutionReport 消息中,它是经纪人用来识别订单的 ID。OrgClOrdID 通常用于在您进行更新(使用 CancelReplaceRequest)时识别原始订单,它应该包含原始订单的 ClOrdID。有些经纪人只想要原始订单,有些经纪人想要最后一次更新的 ClOrdID,所以第一个 OrigClOrdID 或将是 NewOrderSingle 的 ClOrdID,然后如果同一订单有后续更新,那么它们将是最后一次 CancelReplaceRequest 的 ClOrderID . 一些经纪人想要最后一个 OrderID 而不是 ClOrderID。请注意,CancelReplaceRequest 也需要一个 ClOrdID。