FXCM FIX API如何实现每5分钟获取一次价格更新?
关于FXCM FIX引擎定时推送行情的问题解答
核心结论
FXCM的FIX服务器不支持通过请求参数设置固定周期(比如5分钟)的行情推送,你必须在客户端自行处理持续的数据流,实现定时输出逻辑。
原因说明
- 标准FIX 4.4协议的
MarketDataRequest消息中,没有定义用于指定推送周期的字段。你当前使用的SubscriptionRequestType_SNAPSHOT_PLUS_UPDATES是订阅实时增量更新的模式,服务器会在行情变动时立即推送,而非按固定间隔。 - FXCM的FIX API实现也未扩展支持此类周期推送的自定义参数,仅支持实时快照+增量更新、仅快照两种订阅模式。
客户端实现方案示例
如果你需要每5分钟输出一次最新行情,可以在客户端维护一个行情缓存,搭配定时器触发输出逻辑:
// 类成员变量:缓存最新行情及线程安全锁 std::map<std::string, double> m_latestPrices; std::mutex m_priceMutex; // 处理行情增量更新的回调(在FixApplication的onMessage方法中实现) void FixApplication::onMessage(const FIX44::MarketDataIncrementalRefresh& msg, const FIX::SessionID& sessionID) { FIX::Symbol symbol; FIX::MDEntryType entryType; FIX::MDEntryPx price; msg.getField(symbol); msg.getField(entryType); msg.getField(price); std::lock_guard<std::mutex> lock(m_priceMutex); std::string key = symbol.getValue() + "_" + entryType.getValue(); m_latestPrices[key] = price.getValue(); } // 启动定时输出的线程函数 void FixApplication::StartPriceOutputTimer() { std::thread([this]() { while (true) { std::this_thread::sleep_for(std::chrono::minutes(5)); std::lock_guard<std::mutex> lock(m_priceMutex); // 输出缓存的最新行情数据 for (const auto& pricePair : m_latestPrices) { std::cout << pricePair.first << ": " << pricePair.second << std::endl; } } }).detach(); }
补充建议
- 若需要的是周期K线数据(而非实时行情的定时快照),可以考虑使用FXCM的REST API直接获取指定周期的历史/实时K线,无需通过FIX协议处理数据流。
内容的提问来源于stack exchange,提问作者Tessan
相关产品推荐
相关产品推荐

