Python + REST API で FX 自動売買を始める最小構成
はじめに
FX 自動売買 Bot は「難しそう」と思われがちですが、最小構成なら Python ファイル 1 つ + 無料 API で動きます。
この記事では、GMOコイン外国為替 FX の REST API を使い、最小限のコードで自動売買の仕組みを構築する方法を解説します。
注意: この記事は教育目的です。実際のトレードは自己責任で行ってください。
必要なもの
| 項目 | 内容 | コスト |
|---|---|---|
| Python | 3.10 以上 | 無料 |
| GMOコイン口座 | 外国為替FX有効化済み | 無料 |
| API キー | GMOコイン管理画面で発行 | 無料 |
| ライブラリ | requests, pandas, ta-lib or pandas-ta | 無料 |
GMOコインの口座開設はこちら — 口座開設から外国為替FX有効化まで解説しています。
Bot開発者向け口座選び: Python対応!API公開済みFX・暗号資産おすすめ取引所比較 — APIの仕様・ccxt対応・デモ口座有無を比較しています。
アーキテクチャ(最小構成)
fx-bot-minimal/
├── main.py # メインスクリプト(これだけで動く)
├── .env # API キー(Git にコミットしない)
└── requirements.txt # 依存ライブラリ
最小構成のポイントは「1 ファイルで完結」すること。データベースもフレームワークも不要です。
Step 1: API 認証
GMOコイン API は HMAC-SHA256 による署名認証を使います。
import hashlib
import hmac
import time
import requests
from urllib.parse import urlencode
API_KEY = "YOUR_API_KEY"
API_SECRET = "YOUR_API_SECRET"
BASE_URL = "https://forex-api.coin.z.com"
def get_headers(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()
return {
"API-KEY": API_KEY,
"API-TIMESTAMP": timestamp,
"API-SIGN": sign,
}
実際の運用では
.envファイルに API キーを格納し、python-dotenvで読み込みましょう。キーをコードにハードコードするのは厳禁です。
Step 2: ローソク足データの取得
def get_candles(symbol: str = "USD_JPY", interval: str = "1hour", count: int = 100):
path = "/public/v1/klines"
params = {"symbol": symbol, "interval": interval, "count": count}
url = f"{BASE_URL}{path}?{urlencode(params)}"
res = requests.get(url)
res.raise_for_status()
data = res.json()["data"]
return data
公開 API なので認証不要。interval には 1min, 5min, 15min, 1hour, 4hour, 1day などが指定できます。
Step 3: テクニカル指標の計算
移動平均線(EMA)とRSIを計算します。pandas-ta を使えば 1 行で計算できます。
import pandas as pd
import pandas_ta as ta
def calc_indicators(candles: list) -> pd.DataFrame:
df = pd.DataFrame(candles)
df["close"] = df["close"].astype(float)
# EMA(短期: 9, 長期: 21)
df["ema_short"] = ta.ema(df["close"], length=9)
df["ema_long"] = ta.ema(df["close"], length=21)
# RSI(14期間)
df["rsi"] = ta.rsi(df["close"], length=14)
return df
Step 4: 売買シグナルの判定
最もシンプルなトレンドフォロー戦略: EMA のゴールデンクロス/デッドクロスで売買します。
def get_signal(df: pd.DataFrame) -> str:
latest = df.iloc[-1]
prev = df.iloc[-2]
# RSI フィルター: 過熱時はエントリーしない
if latest["rsi"] > 70 or latest["rsi"] < 30:
return "HOLD"
# ゴールデンクロス: 短期EMAが長期EMAを上抜け
if prev["ema_short"] <= prev["ema_long"] and latest["ema_short"] > latest["ema_long"]:
return "BUY"
# デッドクロス: 短期EMAが長期EMAを下抜け
if prev["ema_short"] >= prev["ema_long"] and latest["ema_short"] < latest["ema_long"]:
return "SELL"
return "HOLD"
Step 5: 注文の発行
def place_order(side: str, symbol: str = "USD_JPY", size: str = "1000"):
path = "/private/v1/order"
body = {
"symbol": symbol,
"side": side,
"executionType": "MARKET",
"size": size,
}
import json
body_str = json.dumps(body)
headers = get_headers("POST", path, body_str)
headers["Content-Type"] = "application/json"
res = requests.post(f"{BASE_URL}{path}", headers=headers, data=body_str)
res.raise_for_status()
return res.json()
最小取引単位は 1,000 通貨。USD/JPY なら約 6,000 円の証拠金で始められます(レバレッジ 25 倍の場合)。
Step 6: メインループ
import time
def main():
print("FX Bot 起動")
while True:
try:
candles = get_candles()
df = calc_indicators(candles)
signal = get_signal(df)
print(f"Signal: {signal}")
if signal in ("BUY", "SELL"):
result = place_order(signal)
print(f"Order: {result}")
except Exception as e:
print(f"Error: {e}")
# 1時間足なら1時間待つ
time.sleep(3600)
if __name__ == "__main__":
main()
この最小構成の限界
最小構成は「動くことの確認」が目的です。実運用には以下が必要です。
| 機能 | 最小構成 | 実運用 |
|---|---|---|
| ポジション管理 | なし | 保有中の重複注文防止 |
| ストップロス | なし | 必須(最大損失の制限) |
| ログ記録 | print のみ | ファイル/DB に永続化 |
| エラー通知 | なし | LINE/Slack 通知 |
| デプロイ | ローカル実行 | サーバー 24 時間稼働 |
本格的な Bot 構築の全工程は Claude Code で FX 自動売買 Bot を作った話 で解説しています。 24 時間稼働の方法は Oracle Cloud Always Free で FX Bot を無料運用する方法 を参照してください。
リスク管理の重要性
自動売買は便利ですが、リスク管理なしの Bot は口座を壊します。最低限、以下を実装してください。
- ストップロス: 1 トレードの最大損失を資金の 1〜2% に制限
- 1 日の最大損失: 日次で -3% に達したら自動停止
- ポジションサイズ: 資金に対して過大なロットを取らない
ドローダウン管理の詳細は FX Bot のドローダウン管理と自動停止の仕組み で解説しています。
まとめ
Python + REST API で FX 自動売買を始める最小構成を紹介しました。
- API 認証: HMAC-SHA256 署名
- データ取得: ローソク足を REST API で取得
- 指標計算: pandas-ta で EMA + RSI
- シグナル判定: ゴールデンクロス / デッドクロス
- 注文発行: MARKET 注文を POST
まずは デモ環境やごく小さなロット で動作確認し、リスク管理を十分に実装してから実運用に移行しましょう。
口座開設から運用までの一気通貫ガイドは PythonでFX自動売買Botを作る入門ガイド にまとめています。
コードを動かすために必要なもの
この記事のスクリプトを実行するには、GMOコインのFX口座とAPIキーが必要です。口座開設は無料、維持費もかかりません。
関連記事
- PythonでFX自動売買Botを作る入門ガイド →
- Claude Code で FX 自動売買 Bot を作った話 →
- Oracle Cloud Always Free で FX Bot を無料運用 →
- FX Bot のドローダウン管理と自動停止の仕組み →
※ 当記事のリンクにはアフィリエイトリンクを含む場合があります。口座開設の費用には影響しません。