接收 FIX 协议的交易捕获(AE)报告





0/5 (0投票)
交易确认报告 (AE) 是一种事后交易消息,由经纪商或交易所发送,用于向参与者报告交易。
交易确认报告 (AE) 消息是一种事后交易消息,由经纪商或交易所发送,用于向参与者报告交易。
如何请求交易确认报告?
客户可以使用 交易确认报告请求 (AD) 根据交易确认报告请求中提供的选择标准订阅交易确认报告。
服务器将通过 TradeRequestStatus
(750) 和 TradeRequestResult
(749
) 字段回复一个 交易确认报告请求确认 (AR),以指示请求是否成功。有时,如果由于某些验证原因拒绝了交易确认报告请求消息,则可以生成一个 Reject
消息作为响应。
交易确认报告请求 (AD) 消息结构
Tag | 字段名 | Req | 描述 |
568 | TradeRequestID | Y | 请求唯一标识符 |
569 | TradeRequestType | Y | 请求类型
|
150 | ExecType | N | 请求特定执行类型的全部交易 |
<Instrument> 块 | N | 请求列表中的所有工具的交易 | |
=>Symbol | 股票代码 | ||
=> SecurityId | 证券ID | ||
=>…… |
请记住,这些是交易确认报告请求 (AD) 消息的标准字段,受支持的字段列表可能因不同的FIX格式而异。
此外,在实施FIX消息之前,请务必遵循经纪商提供的《行为准则》文档。
交易确认报告请求确认 (AC) 消息
这是对 交易确认报告请求 (AD) 的确认消息
Tag | FieldName | Req | 描述 |
568 | TradeRequestID | Y | 被确认请求的标识符 |
569 | TradeRequestType | Y | 被确认请求的标识符 |
750 | TradeRequestStatus | Y | 请求是否接受或拒绝 0:接受 1:拒绝 |
749 | TradeRequestResult | Y | 拒绝请求的原因。 0:成功 9:未授权 100:无法匹配选择标准 200:当日请求限制已达到 |
交易确认报告
这是对 TradeCapture
报告请求 (AD) 的响应消息,报告交易对手之间的交易。
消息结构
Tag | 字段名 | Req | 描述 |
568 | TradeRequestID | Y | 请求唯一标识符 |
571 | TradeReportID | Y | 响应消息的唯一ID |
17 | ExecId | Y | 交易标识符 |
48 | SecurityId | N | 工具ID |
55 | 符号 | N | 股票代码 |
32 | LastQty | Y | 交易数量 |
31 | LastPx | Y | 交易价格 |
75 | TradeDate | Y | 交易日期 |
60 | TransactTime | Y | 交易时间 |
实现
TradeCaptureReportRequest (AD)
TradeCaptureReportRequest request = new TradeCaptureReportRequest();
string requestId = DateTime.UtcNow.ToString("yyyyMMddHHmmssfff");//generate unique request ID
request.TradeRequestID = new TradeRequestID(requestId);
request.TradeRequestType = new TradeRequestType
(TradeRequestType.MATCHED_TRADES_MATCHING_CRITERIA_PROVIDED_ON_REQUEST);
request.NoDates = new NoDates(2);
//Criteria to get trades between two dates
var noDatesGroup = new TradeCaptureReportRequest.NoDatesGroup();
noDatesGroup.TransactTime = new TransactTime(start);
request.AddGroup(noDatesGroup);
noDatesGroup = new TradeCaptureReportRequest.NoDatesGroup();
noDatesGroup.TransactTime = new TransactTime(end);
request.AddGroup(noDatesGroup);
<br>Session.SendToTarget(request, sessionId);
TradeCaptureReportRequest Ack (AC)
public void OnMessage(TradeCaptureReportRequestAck ackReport, SessionID session)
{
if (ackReport.TradeRequestStatus.getValue() == TradeRequestStatus.REJECTED)
{
if (OnReject != null)
Console.WriteLine("TradeReportRequest Rejected");
}
else if (ackReport.TradeRequestStatus.getValue() == TradeRequestStatus.ACCEPTED)
{
Console.WriteLine("TradeReportRequestStatus Accepted");
}
else if (ackReport.TradeRequestStatus.getValue() == TradeRequestStatus.COMPLETED)
{
Console.WriteLine("TradeReportRequestStatus COMPLETED");
}
}
TradeCaptureReport (AE)
public override void OnMessage(TradeCaptureReport ackReport, SessionID session)
{
//Capturing data in DTO
TradeReport tradeReport = new TradeReport
{
Id = ackReport.ExecID.getValue(),
LastQty = ackReport.LastQty.getValue(),
TransactTime = ackReport.IsSetTransactTime() ?
ackReport.TransactTime.getValue() : DateTime.UtcNow,
LastPrice = ackReport.LastPx.getValue(),
InstrumentId = Convert.ToInt32(ackReport.SecurityID.getValue())
};
NoSides noSides = ackReport.NoSides;
tradeReport.Symbol = _symbolMap[tradeReport.InstrumentId];
var group = new TradeCaptureReport.NoSidesGroup();
group = (TradeCaptureReport.NoSidesGroup)ackReport.GetGroup(1, group);
if (group.IsSetSide())
{
switch (group.Side.getValue())
{
case Side.BUY:
tradeReport.Side = BuySellType.Buy;
break;
case Side.SELL:
tradeReport.Side = BuySellType.Sell;
break;
}
}
tradeReport.OrderId = group.OrderID.getValue();
tradeReport.ClientOrderId = group.ClOrdID.getValue();
}
您可以从Github 这里 下载代码。