You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FXCM FIX API如何实现每5分钟获取一次价格更新?

关于FXCM FIX引擎定时推送行情的问题解答

核心结论

FXCM的FIX服务器不支持通过请求参数设置固定周期(比如5分钟)的行情推送,你必须在客户端自行处理持续的数据流,实现定时输出逻辑。

原因说明

  1. 标准FIX 4.4协议的MarketDataRequest消息中,没有定义用于指定推送周期的字段。你当前使用的SubscriptionRequestType_SNAPSHOT_PLUS_UPDATES是订阅实时增量更新的模式,服务器会在行情变动时立即推送,而非按固定间隔。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 06:20:23