FX / EA Python 個人開発

【完全版】PythonでFX自動売買Botを作る方法|GMO FX APIでデータ取得から定期実行まで

本ページにはプロモーションが含まれています。

PythonでFX自動売買Botを作ってみたいと思っても、

  1. GMO FX APIからローソク足をどう取得するのか
  2. 取得したデータでどうバックテストするのか
  3. バックテストした売買ルールを実際のエントリー判定にどう使うのか
  4. 注文や記録、Discord通知までどうつなげるのか
  5. 作成したスクリプトをどうやって定期実行するのか

と、最初は全体の流れが分かりにくいのではないでしょうか。

そこで本記事では、これまで作成してきたPythonスクリプトをまとめて、GMO FX APIを使ったFX自動売買Botを完成させるまでの流れを紹介します。

ローソク足の取得、バックテスト、live_trade.pyを使った自動売買処理、Discord通知、Dockerによる定期実行までを順番に確認できる内容です。

サンプルファイルもまとめてダウンロードできるようにしているため、とりあえず動かしてみたい方はファイルをダウンロードし、本記事の手順に沿って進めてみてください。

各処理の詳しい仕組みやコードについては個別の記事でも解説しているので、途中で分からない部分があれば、あわせて確認してみてください。

Pythonで作るFX自動売買Botの全体像

今回作成するのは、PythonとGMO FX APIを使ったFX自動売買Botです。

ローソク足データの取得とバックテストを行い、live_trade.pyで最新データの更新・エントリー判定・注文・記録まで実行します。

さらに、Discord通知を追加し、最後にDockerで各処理を定期実行できるようにします。

全体の流れは以下のとおりです。

ローソク足をCSVへ保存
↓
バックテスト
↓
live_trade.pyを実行
・最新ローソク足を更新
・エントリー条件を判定
・注文
・結果を記録
↓
Discordへ通知
↓
Dockerで定期実行

本記事では、この流れを5つのステップに分けて紹介します。

すぐにコードを使いたい方へ

今回作成したFX自動売買Botのサンプルファイル一式は、以下からダウンロードできます。

ZIPファイルを展開すると、各ステップで使用するPythonファイルやDocker関連のファイルが含まれています。

ダウンロード後は、以下のファイル構成になることを確認してください。

GMO-API/
├── backtest_config.py
├── fetch_gmo_candles.py
├── backtest_fx.py
├── candle_updater.py
├── entry_signal.py
├── gmo_api.py
├── live_config.py
├── live_trade.py
├── discord_notify.py
└── Docker/
    ├── Dockerfile
    ├── docker-compose.yml
    └── crontab

Dockerフォルダには、Dockerコンテナの作成やPythonスクリプトの定期実行に使用するファイルをまとめています。

各ファイルの役割

ダウンロードしたファイルの主な役割は以下のとおりです。

ファイル役割
backtest_config.py通貨ペアやSMA期間、損切り・利益確定幅などの売買条件を設定
fetch_gmo_candles.pyGMO FX APIからローソク足を取得してCSVへ保存
backtest_fx.py保存したローソク足を使ってバックテストを実行
candle_updater.py既存CSVへ最新のローソク足を追加
entry_signal.pyバックテストで使用した条件からエントリーを判定
gmo_api.pyGMO FX APIとの通信やPrivate APIの署名処理を担当
live_config.py実注文の有効・無効やスプレッド上限などを設定
live_trade.pyローソク足更新・エントリー判定・注文・記録をまとめて実行
discord_notify.pyエントリーや決済結果などをDiscordへ通知
DockerfilePythonスクリプトを実行するDocker環境を作成
docker-compose.ymlDockerコンテナの起動設定を管理
crontab各Pythonスクリプトを定期実行する時間を設定

すべてのファイルを個別に実行する必要はありません。

実際の自動売買では、live_trade.pyを中心に各処理を実行し、Dockerから決められたスケジュールで自動実行します。

各ファイルの詳しい内容は、このあと紹介する5つのステップや個別記事で解説しています。

GMO FX APIで自動売買Botを作る5ステップ

ここからは、PythonとGMO FX APIを使って自動売買Botを動かす流れを5つのステップで紹介します。

今回の流れは以下のとおりです。

  1. ローソク足をCSVへ保存する
  2. ローソク足データでバックテストする
  3. live_trade.pyでローソク足更新・エントリー判定・注文を実行する
  4. Discordへ通知する
  5. Dockerで自動売買Botを定期実行する

サンプルコードを実行するには、PythonやDocker Desktopなどの実行環境が必要です。

また、実注文を行う場合はGMO FX APIキー、Discord通知を使用する場合はWebhook URLも準備してください。

各ステップでは、サンプルコードを動かすために必要な最低限の実行方法を紹介します。

実行時にエラーが出る場合や、設定方法・コードの詳しい仕組みを確認したい場合は、それぞれのステップで紹介している詳細記事を確認してください。

ステップ1|ローソク足をCSVへ保存する

まずは、バックテストやエントリー判定で使用するローソク足データをGMO FX APIから取得します。

GMO-APIフォルダへ移動し、fetch_gmo_candles.pyを実行しましょう。

python fetch_gmo_candles.py

実行すると、取得したローソク足データがCSVとして保存されます。

今回の自動売買Botでは、15分足・1時間足・4時間足・日足など、売買判定に必要な時間足を準備します。

取得する通貨ペアや時間足、取得開始日などを変更したい場合は、fetch_gmo_candles.pyの設定を変更してください。

ローソク足の取得方法やコードの詳しい内容は、以下の記事で解説しています。

ステップ2|ローソク足データでバックテストする

ローソク足CSVを準備したら、実際に使用する売買ルールをバックテストしましょう。

売買条件はbacktest_config.pyで設定します。

設定ができたら、以下のコマンドを実行してください。

python backtest_fx.py

実行すると、バックテスト結果がdata/backtests配下へ保存されます。

取引回数や勝率、損益、プロフィットファクター、最大ドローダウンなどを確認し、実運用に使用する売買条件を決めましょう。

今回の自動売買Botでは、ここで設定した売買条件を、そのままエントリー判定でも使用します。

バックテストの方法やbacktest_config.pyの設定方法は、以下の記事で詳しく解説しています。

ステップ3|live_trade.pyで自動売買処理を実行する

バックテストで売買条件を確認したら、live_trade.pyを実行します。

live_trade.pyでは、主に以下の処理を順番に行います

  • 最新ローソク足を取得してCSVを更新する
  • バックテストで使用したコンフィグからエントリー条件を判定する
  • 建玉や未約定注文を確認する
  • 最新のASK・BIDとスプレッドを確認する
  • 条件を満たした場合に注文を行う
  • 注文内容や結果を記録する

実行する場合は、GMO-APIフォルダで以下のコマンドを使用します。

python live_trade.py

初期設定ではデモ発注として動作し、実際の注文はGMO FXへ送信しません。

まずはデモ発注で、エントリー判定や注文価格、利益確定価格、損切り価格などが想定どおりになっているか確認してください。

実注文へ切り替える場合は、GMO FX APIキーとシークレットキーを環境変数へ設定します。

PowerShellの場合は、以下のように設定できます。

$env:GMO_FX_API_KEY="APIキー"
$env:GMO_FX_SECRET_KEY="シークレットキー"

そのうえで、live_config.pyの実注文設定を変更します。

最新ローソク足の更新やエントリー判定、GMO FX APIへの注文処理については、以下の記事で詳しく解説しています。

ローソク足更新やエントリー判定だけを詳しく確認したい場合は、それぞれの個別記事も参考にしてください。

ステップ4|Discordへ通知する

自動売買Botを動かす場合、毎回ターミナルを確認するのは手間がかかります。

そこで、エントリーや決済などの結果をDiscordへ通知できるようにします。

まずはDiscordでWebhook URLを取得し、環境変数へ設定します。

PowerShellの場合は、以下のように設定します。

$env:DISCORD_WEBHOOK_URL="Webhook URL"

通知処理の動作を確認する場合は、discord_notify.pyを実行します。

python discord_notify.py

Discordへテストメッセージが届けば、Webhookの設定は完了です。

実際の自動売買では、エントリーや決済などのタイミングで通知処理を呼び出します。

Discord Webhookの取得方法やPythonから通知する方法は、以下の記事で詳しく解説しています。

ステップ5|Dockerで自動売買Botを定期実行する

最後に、これまで作成した処理をDockerで定期実行します。

Docker関連のファイルは、GMO-API内のDockerフォルダへまとめています。

GMO-API/
└── Docker/
    ├── Dockerfile
    ├── docker-compose.yml
    └── crontab

まず、Dockerフォルダへ移動します。

cd Docker

続いて、Dockerイメージをビルドしてコンテナを起動します。

docker compose up -d --build

起動状態を確認する場合は、以下を実行します。

docker compose ps

実行ログを確認する場合は、以下のコマンドを使用します。

docker compose logs -f

これで、crontabに設定したスケジュールに従って、ローソク足更新やエントリー判定、注文・記録、通知などの処理が自動実行されます。

Docker Desktopのインストール方法やDockerfiledocker-compose.ymlcrontabの設定方法は、以下の記事で詳しく解説しています。

FX自動売買Botを実運用する際の注意点

ここまでの設定が完了すれば、FX自動売買Botを実際に動かせる状態になります。

ただし、実運用では注文ミスや設定漏れを防ぐために、事前に確認しておきたいポイントがいくつかあります。

特に注意したいのは、以下の5つです。

  • 最初はデモ発注で動作確認する
  • APIキーやWebhook URLを公開しない
  • 注文数量や売買条件を確認する
  • Dockerのログを定期的に確認する
  • PCやDockerを停止するとBotも停止する

どれも安全に運用するうえで重要なポイントなので、実注文へ切り替える前に1つずつ確認しておきましょう。

最初はデモ発注で動作確認する

いきなり実注文へ切り替えるのではなく、まずはデモ発注で動作確認してください。

今回のサンプルでは、live_config.pyの設定によって実注文の有効・無効を切り替えられます。

ローソク足の更新、エントリー判定、注文価格、利益確定価格、損切り価格などが想定どおりになっていることを確認してから実注文へ切り替えるのがおすすめです。

APIキーやWebhook URLを公開しない

GMO FX APIキーやDiscord Webhook URLは、ソースコードへ直接書かず、環境変数などで管理してください。

これらの情報をGitHubやブログへ公開すると、第三者に利用される可能性があります。

配布用のファイルにも、自分のAPIキーやWebhook URLが含まれていないことを必ず確認してください。

注文数量や売買条件を確認する

実注文を行う前に、backtest_config.pylive_config.pyの設定を確認してください。

特に、以下の項目は実際の損益に影響します。

  • 注文数量
  • 利益確定幅
  • 損切り幅
  • SMA期間
  • スプレッド上限
  • 実注文の有効・無効

バックテストで確認した設定と、実運用時の設定が一致しているかも確認しておきましょう。

Dockerのログを定期的に確認する

Dockerで定期実行していても、PythonスクリプトやAPI通信でエラーが発生する可能性があります。

以下のコマンドでログを確認できます。

docker compose logs -f

ローソク足の更新やエントリー判定が予定どおり実行されているか、定期的に確認してください。

PCやDockerを停止するとBotも停止する

今回の構成では、Dockerを動かしているPCが停止すると、自動売買Botも実行されません。

スリープやシャットダウン、Docker Desktopの停止などによって定期実行されなくなるため注意してください。

常時運用する場合は、PCの電源設定やDockerの起動状態も確認しておきましょう。

今回紹介したコードは、自動売買の基本的な流れを確認するためのサンプルです。

実際に運用する場合は、少額・最小数量から動作を確認し、注文や記録、通知が想定どおりに動いていることを確認しながら運用してください。

まとめ

今回は、PythonとGMO FX APIを使ってFX自動売買Botを作る流れを紹介しました。

今回の構成では、ローソク足データの取得からバックテスト、live_trade.pyを使ったエントリー判定・注文・記録、Discord通知、Dockerによる定期実行までを一通り行えるようにしています。

各処理は個別の記事でも詳しく解説しているため、設定方法やコードの内容を確認したい場合は、それぞれの詳細記事を参考にしてください。

まずはデモ発注で一連の処理が正しく動くことを確認し、問題がなければ少額・最小数量から実運用へ切り替えていきましょう。

-FX / EA, Python, 個人開発