PythonでFX自動売買Botを作る入門ガイド — GMOコインAPIで実際に動かす
この記事で作れるもの
Python + GMOコイン REST API を使って、FX の自動売買 Bot を作ります。
完成イメージ:
[GMOコイン API] ←→ [Python Bot] ←→ [あなたの戦略ロジック]
↓
[ログ出力 / 通知]
できあがるもの:
- ローソク足データの取得
- テクニカル指標の計算
- 条件に合致したときの自動注文
- 基本的なリスク管理(損切り・ポジション制限)
前提
| 項目 | 内容 |
|---|---|
| Python | 3.10 以上(3.12 推奨) |
| プログラミング経験 | 基本的な Python が読める程度 |
| FX の知識 | 「通貨ペア」「レバレッジ」が分かる程度 |
| 費用 | すべて無料(口座維持費・API利用料ともに¥0) |
GMOコインでFX口座を開設する
Bot を動かすには API 対応の FX 口座 が必要です。国内で Bot 開発者に最も使われているのが GMOコイン。REST API と WebSocket の両方に対応していて、最小 1,000 通貨から取引できます。
口座開設の手順
- GMOコイン公式サイト にアクセスして無料口座開設
- 本人確認(マイナンバーカード or 運転免許証、スマホで完結)
- 審査通過(最短当日)
- ログイン後、外国為替FXを有効化(マイページから申込み、追加審査なし)
口座開設は無料で、維持費もかかりません。
口座のスペック詳細は GMOコイン外国為替FX レビュー にまとめています。 他の口座と比較したい方は FX自動売買 口座比較 2026年版 をどうぞ。
APIキーの発行
口座開設後、管理画面から API キーを発行します。
- GMOコインにログイン
- 「API」メニューへ移動
- 「新しい API キーを作成」をクリック
- 権限は「注文」「建玉照会」「資産残高」を有効化
- API キーと API シークレットをメモ(シークレットは二度と表示されない)
# .env ファイルに保存(Git にコミットしないこと)
GMO_API_KEY=your_api_key_here
GMO_API_SECRET=your_api_secret_here
最小構成のBot実装
実装に入る前に、本番運用でつまずきやすい API のエラー処理はGMOコインAPIでFX自動売買Botを作る際のエラー対処法にまとめています。あわせて読むと、後述のコードの例外処理の意図が掴みやすくなります。
ファイル構成
fx-bot/
├── main.py # メインスクリプト
├── .env # APIキー(.gitignore に追加)
└── requirements.txt # 依存ライブラリ
# requirements.txt
requests
python-dotenv
pandas
ta
API認証の仕組み
GMOコイン API は HMAC-SHA256 による署名認証を使います。
import hashlib
import hmac
import time
import requests
from dotenv import load_dotenv
import os
load_dotenv()
API_KEY = os.environ["GMO_API_KEY"]
API_SECRET = os.environ["GMO_API_SECRET"]
BASE_URL = "https://forex-api.coin.z.com"
def call_api(method: str, path: str, body: str = "") -> dict:
timestamp = str(int(time.time() * 1000))
text = timestamp + method + path + body
sign = hmac.new(
API_SECRET.encode(), text.encode(), hashlib.sha256
).hexdigest()
headers = {
"API-KEY": API_KEY,
"API-TIMESTAMP": timestamp,
"API-SIGN": sign,
}
url = BASE_URL + path
if method == "GET":
res = requests.get(url, headers=headers)
else:
headers["Content-Type"] = "application/json"
res = requests.post(url, headers=headers, data=body)
return res.json()
ローソク足データの取得
import pandas as pd
def get_candles(symbol: str = "USD_JPY", interval: str = "1hour", count: int = 100) -> pd.DataFrame:
path = f"/public/v1/klines?symbol={symbol}&interval={interval}&count={count}"
data = requests.get(BASE_URL + path).json()
candles = data["data"]
df = pd.DataFrame(candles)
df["open"] = df["open"].astype(float)
df["high"] = df["high"].astype(float)
df["low"] = df["low"].astype(float)
df["close"] = df["close"].astype(float)
df["volume"] = df["volume"].astype(float)
return df
テクニカル指標の計算
import ta
def add_indicators(df: pd.DataFrame) -> pd.DataFrame:
# EMA(トレンド方向)
df["ema20"] = ta.trend.ema_indicator(df["close"], window=20)
df["ema50"] = ta.trend.ema_indicator(df["close"], window=50)
# RSI(過熱度)
df["rsi"] = ta.momentum.rsi(df["close"], window=14)
return df
シグナル判定と注文
import json
def check_signal(df: pd.DataFrame) -> str | None:
latest = df.iloc[-1]
# 買いシグナル: EMA20 > EMA50 かつ RSI が 40〜70
if latest["ema20"] > latest["ema50"] and 40 < latest["rsi"] < 70:
return "BUY"
# 売りシグナル: EMA20 < EMA50 かつ RSI が 30〜60
if latest["ema20"] < latest["ema50"] and 30 < latest["rsi"] < 60:
return "SELL"
return None
def place_order(side: str, size: int = 1000) -> dict:
body = json.dumps({
"symbol": "USD_JPY",
"side": side,
"executionType": "MARKET",
"size": str(size),
})
return call_api("POST", "/private/v1/order", body)
メインループ
import time as t
def main():
print("Bot 起動")
while True:
try:
df = get_candles()
df = add_indicators(df)
signal = check_signal(df)
if signal:
result = place_order(signal)
print(f"注文実行: {signal} → {result}")
else:
print("シグナルなし、待機中...")
except Exception as e:
print(f"エラー: {e}")
t.sleep(3600) # 1時間ごとにチェック
if __name__ == "__main__":
main()
これで最小限の自動売買 Bot が動きます。
コードの詳細解説は Python + REST API でFX自動売買を始める最小構成 を参照してください。
本番環境で動かす
ローカル PC で動かすと、PC を閉じた瞬間に Bot が止まります。24 時間稼働させるには、クラウド上にデプロイするのが現実的です。
選択肢
| 環境 | コスト | 特徴 |
|---|---|---|
| Oracle Cloud Always Free | 無料 | ARM 4コア 24GB メモリ。個人 Bot には十分すぎるスペック |
| 自宅サーバー | 電気代のみ | ネットワーク障害リスクあり |
| VPS | 月¥500〜 | 手軽だが費用がかかる |
自分は Oracle Cloud の Always Free インスタンスで 24 時間稼働させています。無料で ARM 4コア + 24GB メモリが使えるので、Bot の運用先としてはベスト。
構築手順は Oracle Cloud Always Free で FX Bot を24時間無料運用する方法 にまとめています。
環境変数の管理
本番環境では .env ファイルではなく、OS の環境変数やシークレット管理サービスを使います。
# Linux / Oracle Cloud の場合
export GMO_API_KEY="your_key"
export GMO_API_SECRET="your_secret"
API キーをコードに直接書くのは絶対にNG。Git に push した瞬間に漏洩リスクが生まれます。
リスク管理を組み込む
コードが動くことと利益が出ることは別問題です。Bot を本番で動かすなら、リスク管理は最低限組み込んでおく必要があります。
1トレードあたりのリスク制限
MAX_RISK_PERCENT = 2 # 資金の2%まで
def calc_position_size(balance: float, stop_loss_pips: float) -> int:
risk_amount = balance * (MAX_RISK_PERCENT / 100)
# 1pip = ¥10 (1,000通貨、USD/JPYの場合)
size = int(risk_amount / (stop_loss_pips * 10))
return max(size, 1000) # 最小1,000通貨
最大ドローダウンでの停止
MAX_DRAWDOWN = 0.10 # 10%で停止
def check_drawdown(current_balance: float, peak_balance: float) -> bool:
drawdown = (peak_balance - current_balance) / peak_balance
if drawdown >= MAX_DRAWDOWN:
print(f"最大DD到達 ({drawdown:.1%})。Bot 停止。")
return True
return False
Bot が暴走して資金を溶かさないために、ドローダウン上限は必ず入れてください。
リスク管理の詳細は FX Bot のドローダウン管理と自動停止の仕組み で解説しています。
次のステップ
最小構成の Bot が動いたら、次に取り組むべきことは:
-
戦略を高度化する — EMA + MACD + RSI を組み合わせたトレンドフォロー戦略など。自分が使っている戦略は AutoTrade Bot の戦略を全公開 で公開しています
-
バックテストを行う — 過去データで戦略の有効性を検証してから本番投入する
-
成績を記録・評価する — 勝率やシャープレシオの読み方は FX自動売買の成績評価 を参照
-
月次レポートで振り返る — Bot の運用実績は 月次レポート 2026年5月 で公開予定
まとめ
- Python + GMOコイン API で FX 自動売買 Bot は作れる
- 最小構成なら ファイル1つ + 無料口座 で始められる
- Oracle Cloud Always Free を使えば 24時間稼働も無料
- リスク管理(損切り・DD制限)は必ず入れる
- まずは少額(1,000通貨)で動作確認してから徐々に拡大する
自動売買の全体像を把握したい方は FX自動売買の始め方 完全ガイド もあわせてどうぞ。
Bot を動かすために必要な口座
この記事のコードを実行するには、GMOコインのAPIキーが必要です。口座開設は無料で、最短10分で完了します。
※ 口座開設後、マイページの「API」メニューからAPIキーを発行してください。
関連記事
- GMOコイン暗号資産(BTC)自動売買の始め方【実運用中のコードで解説】 — 詳細はこちら
- FX自動売買(Bot)に向いている業者比較 2026 — GMOコイン・松井証券・DMM FXを比較 — 詳細はこちら
- GMOコイン外国為替FX レビュー →
- FX Bot のドローダウン管理と自動停止の仕組み →
- Oracle Cloud Always Free で FX Bot を24時間無料運用する方法 →
※ 当記事のリンクにはアフィリエイトリンクを含む場合があります。口座開設の費用には影響しません。