概要
かねてから金融商品の自動売買プログラムを実装してみたいと思っていたのですが、巷に出ている情報はPublicな情報をプログラムで取得してバックテストができます、といったものが多く、実際に売買する方法を紹介していた資料が少ない(というか見つからない)印象でした。
そこで、実際にプログラムで売買する方法を調べてみました、というのが今回の趣旨です。
ちなみにFXを題材にしたのは、巷に多い資料に株が多かった印象(要は逆張り野郎です)なのと、仕事以外の時間で売買できる方が良いと思ったのが理由です。
自動売買プログラムの実装方法(3種)
FXの自動売買プログラムを実装する方法は、主に以下の3種類が考えられます。
実装方法 | 特徴 |
---|---|
証券会社APIの利用 | Pythonなどのプログラミング言語から直接、相場情報の取得や注文発注が可能なAPIを利用します。最も公式で安定した方法ですが、APIを提供している証券会社は限られています。 |
FX自動売買プラットフォーム(MT4/MT5など)の利用 | MetaTrader 4 (MT4) や MetaTrader 5 (MT5) といった専用プラットフォームのMQL4/MQL5言語を使って、自動売買プログラム(EA)を開発します。自動売買に特化した機能が豊富で、情報やコミュニティも充実しています。 |
スクレイピングなど、非公式な方法 | Webサイトの情報を解析したり、GUI操作を自動化したりする方法です。利用規約違反のリスク、システム変更への脆弱性、安定性の欠如、セキュリティリスクが非常に高いため、強く非推奨です。 |
今回はPythonでの実装を想定していたため、証券会社APIを利用する方針で進めます。
APIを提供している証券会社例
現在、個人投資家向けに売買用のAPIを提供している主なFX証券会社は以下の通りです。
証券会社名 | 特徴 |
---|---|
OANDA Japan | Pythonなど多様な言語に対応し、ドキュメントやサンプルコードが充実しています。REST APIとWebSocket APIを提供しており、デモ口座でもAPIアクセスが可能です(本番口座は条件あり)。 |
GMOコイン(外国為替FX) | 外国為替FXサービス向けにAPIを提供しています。Public API(認証不要のレート取得など)とPrivate API(注文、残高照会など)があり、Pythonを含む複数言語のサンプルコードも提供。API利用の30日間無料トライアルがあります。 |
(補足)その他の証券会社について調べた限りの情報
証券会社名 | API提供状況(FX取引に関して) |
---|---|
GMOクリック証券 | かつて個人向けFX APIを提供していましたが、現在は新規提供を終了しています。 |
楽天証券 | FX取引でMT4は提供していますが、Pythonなどから直接アクセスできる公式APIはFX取引では提供していません。 (暗号資産サービス「楽天ウォレット」ではAPIを提供しています) |
MetaTraderプラットフォームを提供している証券会社例
多くのFX自動売買トレーダーが利用するMetaTrader 4 (MT4) や MetaTrader 5 (MT5) を提供している主な国内FX証券会社は以下の通りです。
- OANDA Japan: MT4/MT5両方を提供。
- 外為ファイネスト: MT4/MT5両方を提供。
- 楽天証券: MT4のみ提供。
- FXTF (ゴールデンウェイ・ジャパン): MT4のみ提供。
- JFX: MT4のみ提供。
(補足) - GMOクリック証券: MT4やMT5は提供していません。
APIを利用した場合の手数料(スプレッドを添えて)
APIを利用した場合の手数料は、利用する証券会社によって異なります。ここでは、APIを提供しているGMOコイン「外国為替FX」を例に説明します。
手数料の種類 | 詳細 |
---|---|
API経由での注文・変更手数料 | API経由で発注された注文が約定した場合に、1通貨ごとに0.002円の手数料が発生します。これは明示的に徴収される手数料です。API利用の初回30日間は無料トライアル期間があります。 |
スプレッド | API手数料とは別に発生するコストです。通貨ペアの「買値(Ask)」と「売値(Bid)」の差額であり、取引開始時に含み損として発生する実質的な取引コストです。スプレッドの幅は、通貨ペアや市場状況(流動性、経済指標発表時など)によって変動します。 |
入金手数料 | 即時入金は無料です。振込入金時の銀行手数料はお客様負担となります。 |
出金手数料 | 無料です。 |
ロスカット手数料 | ロスカットが発生した場合に発生します。1通貨単位あたり0.05円(ただし、20通貨未満の場合は1円)です。 |
基本的には注文時の手数料とスプレッドを意識しておけばよさそう。
APIの種類について(Public API, Private APIなど)
GMOコインのAPIは大まかに以下に分類されます。詳細は公式ドキュメントを確認してください。気が向いたら仕様をまとめるかもしれません。
Public API
- 定義: 認証が不要で、誰でもアクセス・利用できるAPIです。
* 主な用途:
- リアルタイムレートの取得: 特定の通貨ペアの現在の買値(Ask)と売値(Bid)などを取得します。
- 過去のチャートデータ/OHLCVデータ: 一部のAPIでは、特定の時間軸(例: 日足、時間足、分足)での過去のローソク足データ(始値、高値、安値、終値、出来高)を提供します。
- 市場の概要情報や、取引所の公開されている統計データなどを取得できる場合もあります。
* 特徴:
- 口座開設やAPIキーの取得が不要な場合が多く、手軽に市場情報を参照できます。
- 主に市場の監視や分析を目的とし、実際の取引操作はできません。
- レート制限が設けられていることが多く、短時間に大量のリクエストを送信するとブロックされる可能性があります。
Public WebSocket API
- 定義: 認証が不要で、リアルタイムの市場データを継続的にストリーミング配信するためのWebSocketプロトコルを利用したAPIです。
* 主な用途:
- リアルタイムティックデータ/レートの継続的な受信: 都度リクエストを送信するREST APIとは異なり、一度接続を確立すれば、価格が変動するたびに自動的に最新のレートがプッシュ配信されます。
- 市場の板情報(オーダーブック)の更新をリアルタイムで受け取る場合もあります。
* 特徴:
- リアルタイム性が非常に高く、低遅延で市場の動きを把握するのに適しています。
- APIをポーリング(定期的にリクエストを送信)する必要がないため、効率的でサーバーへの負荷も少なくなります。
- Public APIと同様に、口座開設やAPIキーは通常不要です。
Private API
- 定義: APIキーやAPIシークレットなどの認証情報が必要となるAPIです。口座開設後に発行されるこれらの情報を用いて、本人確認が行われます。
* 主な用途:
- 注文の発注: 成行注文、指値注文、逆指値注文などの新規注文を行います。
- 注文の変更・取消: 既存の指値・逆指値注文の価格や数量を変更したり、注文を取り消したりします。
- ポジションの決済: 保有しているポジションを決済します。
- 口座情報の取得: 現在の口座残高、証拠金情報、有効証拠金などを取得します。
- 保有ポジションの確認: 現在保有しているポジションの詳細(通貨ペア、数量、平均取得価格など)を確認します。
- 注文履歴/取引履歴の取得: 過去の注文や約定の履歴を取得します。
* 特徴:
- 実際の取引操作をプログラムから行うために必須のAPIです。
- 個人情報や資産に関わる操作を行うため、セキュリティが非常に重要です。APIキーやシークレットの厳重な管理が求められます。
- 多くの場合、口座開設が必須条件となります。
Private WebSocket API
- 定義: APIキーなどによる認証情報が必要で、口座に紐付く特定の情報(注文状況、約定通知など)をリアルタイムでストリーミング配信するためのWebSocketプロトコルを利用したAPIです。
* 主な用途:
- 約定通知のリアルタイム受信: 自分の注文が約定した際に即座に通知を受け取ります。
- 注文ステータスのリアルタイム更新: 注文が「約定済み」「取消済み」「変更済み」など、状態が変化した際にリアルタイムで情報を取得します。
- ポジションのリアルタイム更新: ポジションの損益や数量の変化などを継続的に監視します。
- 口座残高のリアルタイム更新など。
* 特徴:
- Private APIのストリーミング版であり、取引状況の変化を低遅延で把握できます。
- これにより、より高頻度で精度の高い自動売買戦略やリスク管理が可能になります。
- 口座開設と認証情報の取得が必須です。
これらのAPIを組み合わせることで、リアルタイムの市場データ取得から、自身の口座状況の監視、そして実際の売買まで、FXの自動売買プログラムを構築することが可能になります。