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.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 クライアントの OnDisconnect と OnError イベントを監視してください。
レート制限
FXCM は HTTP リクエストにレート制限を設けています。GetHistoricalData や TradingOrder などのメソッドをタイトループで呼び出すことを避けてください。リアルタイムデータには HTTP によるポーリングよりも WebSocket サブスクリプションを優先してください。
SubscribeMarketData と SubscribeTradingTables('OpenPosition')・SubscribeTradingTables('Account') を組み合わせることで、市場状況とポートフォリオ状態の両方を表示する完全なリアルタイム取引ダッシュボードを構築できます。
