FXCM API 与 sgcWebSockets 更新

· 功能
Delphi 中的 FXCM 外汇交易 API 集成

FXCM API 提供对全球最大零售外汇券商之一的程序化访问,支持实时市场数据流、订单执行和历史K线数据获取。面向 Delphi 的 TsgcWSAPI_FXCM 组件将 FXCM 的 WebSocket(socket.io)和 HTTP 接口封装为一个易用的类,让您无需处理底层协议细节即可构建自动化交易系统、市场扫描器和投资组合仪表板。

目录

概述与架构

FXCM 通过混合协议公开其交易平台:将基于 socket.io 的持久 WebSocket 连接用于实时流式传输,将标准 HTTP 端点用于请求/响应操作。TsgcWSAPI_FXCM 组件将两个传输层抽象在统一的 Delphi 接口后面,无论底层调用使用 WebSocket 还是 HTTP,您都只需与单个组件交互。

API 支持三个主要功能区:

功能区 说明 传输方式
市场数据 实时价格流和交易品种发现 WebSocket + HTTP
交易表格 账户状态、持仓、订单和报价 WebSocket + HTTP
订单执行 下单、修改订单和平仓 HTTP

配置

在连接 FXCM API 之前,必须在 TsgcWSAPI_FXCM 组件上配置两个必要属性:

属性 类型 说明
FXCM.AccessToken 字符串 您的 API 访问令牌,从 FXCM Trading Station Web 获取
FXCM.Demo 布尔值 演示环境设为 True,实盘交易设为 False
注意:要获取访问令牌,请登录 FXCM Trading Station Web,进入账户设置并生成新的 API 令牌。开发时请始终先使用 FXCM.Demo := True 以避免下达真实交易订单。

快速开始

设置 FXCM 组件只需三步:创建 WebSocket 客户端、附加 API 组件、配置凭证。激活客户端后,组件将自动处理 socket.io 握手和 HTTP Bearer 令牌身份验证。

var
  oClient: TsgcWebSocketClient;
  oFXCM: TsgcWSAPI_FXCM;
begin
  oClient := TsgcWebSocketClient.Create(nil);
  oFXCM := TsgcWSAPI_FXCM.Create(nil);
  oFXCM.Client := oClient;
  oFXCM.FXCM.AccessToken := 'your_access_token';
  oFXCM.FXCM.Demo := True;
  oClient.Active := True;
end;

市场数据方法

市场数据方法允许您发现可用的交易品种、订阅实时价格更新并管理活跃订阅。

方法 说明
GetSymbols 返回所有可用交易品种列表(货币对、差价合约等)
SubscribeMarketData 订阅指定品种的实时价格更新
UnSubscribeMarketData 停止接收指定品种的实时价格更新
UpdateSubscriptions 过滤报价表格,仅显示当前已订阅的品种

订阅市场数据

连接后,调用 GetSymbols 发现可用品种,然后订阅任意品种以获取流式买/卖价格:

// Retrieve all available trading symbols
ShowMessage(oFXCM.GetSymbols);
// Subscribe to real-time EUR/USD price updates
oFXCM.SubscribeMarketData('EUR/USD');
// Subscribe to additional pairs
oFXCM.SubscribeMarketData('GBP/USD');
oFXCM.SubscribeMarketData('USD/JPY');
// Filter the offer table to show only subscribed symbols
oFXCM.UpdateSubscriptions;

交易表格方法

FXCM 将账户数据组织为交易表格。您可以订阅以在状态变化时持续接收更新,或请求当前状态的一次性快照。

可用交易表格

表格名称 说明
Offer 每个品种的当前买/卖价格、最高/最低价及交易时段信息
OpenPosition 所有当前持仓,含盈亏、保证金和开仓价格
ClosedPosition 近期已平仓位置,含已实现盈亏
Order 待执行挂单及其参数
Summary 每个品种的持仓汇总
LeverageProfile 每个品种和账户的杠杆设置
Account 账户余额、权益、已用保证金和可用保证金
Properties 账户级别设置和交易属性

订阅与快照方法

方法 说明
SubscribeTradingTables 订阅指定交易表格的持续更新
UnSubscribeTradingTables 停止接收指定交易表格的更新
SnapshotTradingTables 获取指定交易表格当前状态的一次性快照
// Subscribe to real-time updates for open positions
oFXCM.SubscribeTradingTables('OpenPosition');
// Subscribe to account balance updates
oFXCM.SubscribeTradingTables('Account');
// Get a one-time snapshot of all pending orders
ShowMessage(oFXCM.SnapshotTradingTables('Order'));
// Stop receiving position updates
oFXCM.UnSubscribeTradingTables('OpenPosition');

交易订单

TradingOrder 方法通过 FXCM HTTP API 提供下单、修改和平仓的统一接口。所有订单操作均通过此单一方法执行,不同参数控制所采取的操作。

方法 说明
TradingOrder 根据提供的参数下达新订单、修改现有订单或平仓
注意:TradingOrder 方法通过 HTTP 发送请求。提交订单后,请务必通过检查交易表格(OpenPosition、Order)确认执行结果。

历史数据

GetHistoricalData 方法以指定时间周期获取任意可用品种的 OHLC(开高低收)K线数据,对于策略回测、图表构建和技术分析至关重要。

方法 参数 说明
GetHistoricalData 品种、时间周期、周期数 获取指定品种在指定时间周期和周期数内的K线数据

支持的时间周期

说明
m1 1 分钟K线
m5 5 分钟K线
m15 15 分钟K线
m30 30 分钟K线
H1 1 小时K线
H4 4 小时K线
D1 日线
W1 周线
M1 月线
// Get the last 100 five-minute candles for EUR/USD
ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
// Get the last 50 daily candles for GBP/USD
ShowMessage(oFXCM.GetHistoricalData('GBP/USD', 'D1', 50));

完整代码示例

以下示例演示了完整工作流:连接 FXCM 演示环境、获取可用品种、订阅实时市场数据并获取历史K线数据。

var
  oClient: TsgcWebSocketClient;
  oFXCM: TsgcWSAPI_FXCM;
begin
  // Create and configure the WebSocket client
  oClient := TsgcWebSocketClient.Create(nil);
  oFXCM := TsgcWSAPI_FXCM.Create(nil);
  oFXCM.Client := oClient;
  // Configure FXCM credentials
  oFXCM.FXCM.AccessToken := 'your_access_token';
  oFXCM.FXCM.Demo := True;
  // Connect to FXCM
  oClient.Active := True;
  // Get all available symbols
  ShowMessage(oFXCM.GetSymbols);
  // Subscribe to real-time market data for EUR/USD
  oFXCM.SubscribeMarketData('EUR/USD');
  // Get the last 100 five-minute candles
  ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
end;

注意事项与最佳实践

演示与实盘环境

请始终使用 FXCM.Demo := True 进行开发和测试。演示环境提供与实盘环境相同的 API 接口和数据格式,但使用虚拟资金。仅在充分测试后才切换到 FXCM.Demo := False

连接管理

底层 socket.io 连接会发送定期心跳以保持会话存活。若连接断开,组件将尝试自动重连。请监控 WebSocket 客户端的 OnDisconnectOnError 事件,以优雅地处理网络中断。

速率限制

FXCM 对 HTTP 请求强制执行速率限制。避免在紧密循环中调用 GetHistoricalDataTradingOrder 等方法。对于实时数据,优先使用 WebSocket 订阅而非 HTTP 轮询。

提示:SubscribeMarketData(实时价格)与 SubscribeTradingTables('OpenPosition')SubscribeTradingTables('Account') 结合使用,构建同时显示市场状况和投资组合状态的完整实时交易仪表板。