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.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 客户端的 OnDisconnect 和 OnError 事件,以优雅地处理网络中断。
速率限制
FXCM 对 HTTP 请求强制执行速率限制。避免在紧密循环中调用 GetHistoricalData 或 TradingOrder 等方法。对于实时数据,优先使用 WebSocket 订阅而非 HTTP 轮询。
SubscribeMarketData(实时价格)与 SubscribeTradingTables('OpenPosition') 和 SubscribeTradingTables('Account') 结合使用,构建同时显示市场状况和投资组合状态的完整实时交易仪表板。
