sgcWebSockets における FXCM API の更新

· 機能
FXCM Forex 取引 API の Delphi 統合

FXCM API は世界最大級のリテール Forex ブローカーへのプログラマティックアクセスを提供し、リアルタイム市場データストリーミング・注文執行・過去のローソク足データ取得を実現します。Delphi 向けの TsgcWSAPI_FXCM コンポーネントは FXCM の WebSocket(socket.io)と HTTP インターフェースを単一の使いやすいクラスにラップし、低レベルのプロトコル詳細を扱わずに自動売買システム・マーケットスキャナー・ポートフォリオダッシュボードを構築できます。

目次

概要とアーキテクチャ

FXCM はリアルタイムストリーミング用の永続的な WebSocket 接続(socket.io 上に構築)とリクエスト/レスポンス操作用の標準 HTTP エンドポイントを組み合わせたハイブリッドプロトコルで取引プラットフォームを公開しています。TsgcWSAPI_FXCM コンポーネントは両方のトランスポート層を統合 Delphi インターフェースの背後に抽象化し、基礎となる呼び出しが WebSocket を使うか HTTP を使うかに関わらず単一コンポーネントで操作できます。

API は 3 つの主要な機能エリアをサポートします:

エリア 説明 トランスポート
市場データ リアルタイム価格ストリーミングとシンボル検索 WebSocket + HTTP
取引テーブル 口座状態・ポジション・注文・気配値 WebSocket + HTTP
注文執行 取引注文の発注・変更・クローズ HTTP

設定

FXCM API に接続する前に、TsgcWSAPI_FXCM コンポーネントの 2 つの必須プロパティを設定する必要があります:

プロパティ 説明
FXCM.AccessToken String FXCM Trading Station Web から取得した API アクセストークン
FXCM.Demo Boolean デモ環境の場合は True、本番取引の場合は False に設定
注:アクセストークンを取得するには、FXCM Trading Station Web にログインし、アカウント設定に移動して新しい API トークンを生成してください。実際の取引を避けるため、常に FXCM.Demo := True で開発を開始してください。

はじめに

FXCM コンポーネントのセットアップは 3 つのステップだけです:WebSocket クライアントを作成し、API コンポーネントをアタッチし、認証情報を設定します。クライアントが有効化されると、コンポーネントが socket.io ハンドシェイクと HTTP ベアラートークン認証を自動的に処理します。

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 利用可能なすべての取引シンボルのリストを返します(通貨ペア・CFD など)
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(始値・高値・安値・終値)ローソク足データを取得します。戦略のバックテスト・チャート構築・テクニカル分析に不可欠です。

メソッド パラメーター 説明
GetHistoricalData Symbol, TimeFrame, NumPeriods 指定した時間足と期間数での指定銘柄のローソク足データを取得します

サポートされる時間足

説明
m1 1 分足
m5 5 分足
m15 15 分足
m30 30 分足
H1 1 時間足
H4 4 時間足
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 デモ環境への接続・利用可能なシンボルの取得・リアルタイム市場データのサブスクライブ・過去のローソク足データの取得。

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 などのメソッドをタイトループで呼び出すことを避けてください。リアルタイムデータには HTTP によるポーリングよりも WebSocket サブスクリプションを優先してください。

ヒント:ライブ価格の SubscribeMarketDataSubscribeTradingTables('OpenPosition')SubscribeTradingTables('Account') を組み合わせることで、市場状況とポートフォリオ状態の両方を表示する完全なリアルタイム取引ダッシュボードを構築できます。