用于构建、审查、调试或优化基于NexusFIX的C++ FIX协议代码,涵盖会话管理、订单录入及市场数据订阅等功能。
NexusFIX开发专家.是一项面向实际任务的技能,主要用于GitHub: https://github.com/StratCraftsAI/NexusFIX;何时使用. 当用户需要构建,优化,或调试C++中的FIX协议连接时.;
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
当用户需要在 C++ 中构建、优化或调试 FIX 协议连接时使用。覆盖会话管理、订单录入、行情数据及低延迟消息解析。
NexusFIX 是一个仅含头文件的 C++23 FIX 协议引擎。ExecutionReport 消息的解析延迟低于 250 纳秒,单线程吞吐量超过 400 万条/秒。
关键设计决策:
std::span 直接引用原始缓冲区,不创建任何中间字符串副本。NewOrderSingle::Builder 链式调用字段设置器,最终通过 .build(assembler) 完成序列化。std::expected 进行错误处理:所有解析函数均返回 std::expected;热路径上不抛出异常。FixedPrice(8 位小数),数量类型为 Qty(4 位小数);价格计算禁用浮点数。生成使用 NexusFIX 的代码时,必须遵守以下规则:
std::expected、concepts、constexpr/consteval 等特性。new、delete、std::map、std::unordered_map 或构造 std::string。std::endl,应改用 \n。virtual 函数。std::shared_ptr。FixedPrice::from_double() 或 FixedPrice::from_string() 构造。std::expected;访问前须检查 .has_value()。noexcept。[[nodiscard]] 属性。#includeusing namespace nfx; using namespace nfx::fix44; TcpTransport transport; transport.connect("fix.broker.com", 9876); SessionConfig config{ .sender_comp_id = "MY_CLIENT", .target_comp_id = "BROKER", .heartbeat_interval = 30 }; SessionManager session{transport, config}; session.initiate_logon(); while (!session.is_active()) { session.poll(); } MessageAssembler asm_; NewOrderSingle::Builder order; auto msg = order .cl_ord_id("ORD001") .symbol("AAPL") .side(Side::Buy) .order_qty(Qty::from_int(100)) .ord_type(OrdType::Limit) .price(FixedPrice::from_double(150.00)) .build(asm_); transport.send(msg);
void on_message(std::spandata) { auto result = ExecutionReport::from_buffer(data); if (!result) return; auto& exec = *result; if (exec.is_fill()) { // 处理成交 } }
auto parser = IndexedParser::parse(data);
if (!parser) return;
switch (parser->msg_type()) {
case '8': on_execution_report(data); break;
case 'W': on_snapshot(data); break;
case 'X': on_incremental(data); break;
}
使用 NexusFIX 时,切勿生成如下代码:
// BAD:热路径上发生堆内存分配 std::string field_value(data.begin() + offset, data.begin() + end); // BAD:使用 std::map 进行字段查找 std::mapfields; // BAD:使用浮点数表示价格 double price = 150.50; // BAD:用异常控制流程 try { parse(data); } catch (...) { } // BAD:使用 std::endl std::cout << "done" << std::endl;
| MsgType | 名称 | 方向 |
|---|---|---|
| A | Logon | 双向 |
| 5 | Logout | 双向 |
| 0 | Heartbeat | 双向 |
| D | NewOrderSingle | 发送 |
| F | OrderCancelRequest | 发送 |
| 8 | ExecutionReport | 接收 |
| V | MarketDataRequest | 发送 |
| W | MarketDataSnapshotFullRefresh | 接收 |
| X | MarketDataIncrementalRefresh | 接收 |
如需完整 API 说明,请执行:skill_view("nexusfix", "references/api-reference.md")。
如需快速上手指南,请执行:skill_view("nexusfix", "references/quick-start.md")。
生成 NexusFIX 相关代码后,请确认以下几点:
new/delete/std::string 构造操作std::expected 检查(不得直接返回裸指针)FixedPrice 类型,数量使用 Qty 类型相关专题
热门下载
相关下载
精品课程
共6课时 | 54.6万人学习
共89课时 | 133.4万人学习
共49课时 | 82.2万人学习