Web Lukes
📄

【Python FXボット入門】MT4を使わない自動売買の始め方

公開日: 2025/12/13更新日: 2025/12/13

「MT4のEAは作れるようになった。でも、もっと自由にやりたい...」 「Pythonで機械学習を使った売買システムを作りたい」 「クラウドで24時間動かしたい」

そんなあなたへ。Pythonで直接FX取引する方法を解説します。

なぜPythonなのか?

MT4/MQL4 vs Python

MT4/MQL4Python
学習コスト低いやや高い
自由度MT4内に限定無限
ライブラリ少ない豊富
機械学習困難得意
クラウド対応難しい簡単
対応業者MT4対応業者のみAPI提供業者

Pythonのメリット:

  • pandas, numpyで高度なデータ分析
  • scikit-learn, TensorFlowで機械学習
  • Google Cloud, AWSでクラウド運用
  • 他のシステムとの連携が簡単

PythonでFX取引する仕組み

アーキテクチャ

Code
あなたのPythonスクリプト
↓ APIリクエスト
FX業者のサーバー
↓
実際の取引が執行される

MT4を介さず、FX業者のAPIに直接アクセスして取引します。

API提供業者(国内)

業者特徴最小単位
GMOコイン外国為替FX、無料トライアルあり100通貨
OANDA Japan豊富なAPI、情報量多い1通貨
マネーパートナーズAPI提供あり100通貨

この記事ではGMOコインを例に解説します。

環境構築

必要なもの

  1. Python 3.9以上
  2. GMOコインの口座(外国為替FX)
  3. APIキー

Pythonのインストール

まだの人は python.org からダウンロード。

インストール確認:

Bash
python --version
# Python 3.11.x など

必要なライブラリ

Bash
pip install requests python-dotenv

GMOコインの準備

1. 口座開設

  1. GMOコイン にアクセス
  2. 口座開設(無料)
  3. 外国為替FX口座を追加開設

2. APIキー発行

  1. ログイン後、メニュー → API
  2. 「外国為替FX」用のAPIキーを新規追加
  3. 権限: 外国為替FX取引(出金権限は付けない!)
  4. APIキーとAPIシークレットをメモ

⚠️ APIシークレットは一度しか表示されません!

最小限のコード

まずは「現在価格を取得する」だけの最小限コードから。

プロジェクト構成

Code
my-fx-bot/
├── .env # APIキー(Gitに上げない!)
├── main.py # メインスクリプト
└── requirements.txt

.env(環境変数)

Code
GMO_FX_API_KEY=your_api_key_here
GMO_FX_API_SECRET=your_api_secret_here

main.py

Python
import os
import requests
from dotenv import load_dotenv
# 環境変数を読み込む
load_dotenv()
def get_ticker(symbol="USD_JPY"):
"""現在価格を取得(Public API - 認証不要)"""
url = f"https://forex-api.coin.z.com/public/v1/ticker?symbol={symbol}"
response = requests.get(url)
data = response.json()
if data["status"] == 0:
ticker = data["data"][0]
print(f"通貨ペア: {ticker['symbol']}")
print(f"買値(Ask): {ticker['ask']}")
print(f"売値(Bid): {ticker['bid']}")
print(f"時刻: {ticker['timestamp']}")
return ticker
else:
print(f"エラー: {data}")
return None
if __name__ == "__main__":
get_ticker()

実行

Bash
python main.py

出力例:

Code
通貨ペア: USD_JPY
買値(Ask): 149.523
売値(Bid): 149.520
時刻: 2025-12-13T10:30:00.000Z

動いた! これがPython FXボットの第一歩です。

Private API(認証が必要なAPI)

価格取得はPublic APIなので認証不要でした。 注文を出すにはPrivate APIを使う必要があり、認証が必要です。

認証の仕組み

GMOコインのPrivate APIは、リクエストごとに以下を送る必要があります:

  • API-KEY: APIキー
  • API-TIMESTAMP: リクエスト時刻(ミリ秒)
  • API-SIGN: 署名(HMAC-SHA256)

認証付きリクエストのコード

Python
import os
import time
import hmac
import hashlib
import requests
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.environ.get("GMO_FX_API_KEY")
API_SECRET = os.environ.get("GMO_FX_API_SECRET")
def create_signature(timestamp, method, path, body=""):
"""APIリクエストの署名を生成"""
text = timestamp + method + path + body
sign = hmac.new(
bytes(API_SECRET.encode("ascii")),
bytes(text.encode("ascii")),
hashlib.sha256
).hexdigest()
return sign
def get_timestamp():
"""ミリ秒タイムスタンプを取得"""
return str(int(time.time() * 1000))
def get_assets():
"""資産残高を取得(Private API)"""
timestamp = get_timestamp()
method = "GET"
path = "/v1/account/assets"
headers = {
"API-KEY": API_KEY,
"API-TIMESTAMP": timestamp,
"API-SIGN": create_signature(timestamp, method, path)
}
url = "https://forex-api.coin.z.com/private" + path
response = requests.get(url, headers=headers)
data = response.json()
if data["status"] == 0:
assets = data["data"]
print(f"取引余力: {assets['availableAmount']} 円")
print(f"証拠金維持率: {assets['marginRatio']}%")
return assets
else:
print(f"エラー: {data}")
return None
if __name__ == "__main__":
get_assets()

これで資産残高を取得できます。APIキーが正しく設定されていれば、あなたの口座情報が表示されます。

注文を出す

いよいよ注文です。

Python
import json
def place_order(symbol, side, size, execution_type="MARKET"):
"""
新規注文を出す
Args:
symbol: 通貨ペア("USD_JPY"など)
side: "BUY" または "SELL"
size: 注文数量(最小100通貨)
execution_type: "MARKET"(成行)または "LIMIT"(指値)
"""
timestamp = get_timestamp()
method = "POST"
path = "/v1/order"
body = {
"symbol": symbol,
"side": side,
"executionType": execution_type,
"size": str(size),
"timeInForce": "FAK"
}
body_str = json.dumps(body)
headers = {
"API-KEY": API_KEY,
"API-TIMESTAMP": timestamp,
"API-SIGN": create_signature(timestamp, method, path, body_str),
"Content-Type": "application/json"
}
url = "https://forex-api.coin.z.com/private" + path
response = requests.post(url, headers=headers, data=body_str)
data = response.json()
if data["status"] == 0:
print(f"注文成功!")
print(f"注文ID: {data['data']}")
return data["data"]
else:
print(f"注文エラー: {data}")
return None
# 使用例(実際に注文が出るので注意!)
# place_order("USD_JPY", "BUY", 100) # ドル円を100通貨買う

⚠️ 実際に注文が出ます! テストはデモ環境か、最小ロット(100通貨)で!

完成版:シンプルボット

価格取得 → 条件判定 → 注文 のシンプルなボットです。

Python
import os
import time
import hmac
import hashlib
import json
import requests
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.environ.get("GMO_FX_API_KEY")
API_SECRET = os.environ.get("GMO_FX_API_SECRET")
SYMBOL = "USD_JPY"
ORDER_SIZE = 100 # 最小ロット
def create_signature(timestamp, method, path, body=""):
text = timestamp + method + path + body
return hmac.new(
bytes(API_SECRET.encode("ascii")),
bytes(text.encode("ascii")),
hashlib.sha256
).hexdigest()
def get_timestamp():
return str(int(time.time() * 1000))
def get_ticker(symbol):
"""現在価格を取得"""
url = f"https://forex-api.coin.z.com/public/v1/ticker?symbol={symbol}"
response = requests.get(url)
data = response.json()
if data["status"] == 0:
return data["data"][0]
return None
def place_order(symbol, side, size):
"""成行注文を出す"""
timestamp = get_timestamp()
path = "/v1/order"
body = json.dumps({
"symbol": symbol,
"side": side,
"executionType": "MARKET",
"size": str(size),
"timeInForce": "FAK"
})
headers = {
"API-KEY": API_KEY,
"API-TIMESTAMP": timestamp,
"API-SIGN": create_signature(timestamp, "POST", path, body),
"Content-Type": "application/json"
}
response = requests.post(
"https://forex-api.coin.z.com/private" + path,
headers=headers,
data=body
)
return response.json()
def run_bot():
"""メインループ"""
print("=== Python FX Bot 起動 ===")
while True:
ticker = get_ticker(SYMBOL)
if ticker:
bid = float(ticker["bid"])
ask = float(ticker["ask"])
spread = (ask - bid) * 100 # pips
print(f"[{SYMBOL}] Bid: {bid} / Ask: {ask} / Spread: {spread:.1f}pips")
# ここに売買ロジックを書く
# 例: if some_condition:
# place_order(SYMBOL, "BUY", ORDER_SIZE)
time.sleep(5) # 5秒待機
if __name__ == "__main__":
run_bot()

MT4 vs Python まとめ

観点MT4 EAPython
セットアップ簡単やや手間
売買ロジック書ける書ける
データ分析限定的pandas等で強力
機械学習難しい得意
クラウド運用VPS必須GCF等で簡単
自由度MT4に縛られる何でもできる

初心者:MT4 EAから始めるのが簡単 中級者以上:Pythonで自由度の高いシステムへ

次のステップ

これでPythonからFX APIを叩く基本ができました。

次は、実際に移動平均線を使った売買ロジックをPythonで実装します。

📚 次に読む記事: Python 移動平均線ボットを作ろう

MQL4で作ったMA Cross EAと同じロジックを、Pythonで再実装します。両方を比較することで、それぞれの特徴がよくわかりますよ!


参考リンク

🎁おすすめツール・サービス

FX自動売買VPSなら50%OFF

キャンペーンで月1,790円〜。MT4/MT5プリインストール済み、自動復旧機能付き。14日間無料お試し。

シンクラウドデスクトップ for FX
ゴトー日EAを探しているならソースコード付

4年で資金4.7倍のバックテスト実績。ソースコード付きで自由にカスタマイズ可能。

ゴトー日EA Ultimate版(3,980円)

※上記リンクにはプロモーション(広告)が含まれています

🔮
MEMBERSHIP

量子相場謀略|ホソノP

ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。

✓EAソースコード公開
✓バックテスト生データ共有
✓リアルタイム相場分析
✓メンバー限定記事
メンバーシップに参加する※ noteアカウントで簡単登録

📚あわせて読みたい

📄

【Python】移動平均線クロスボットを作る|pandasでテクニカル分析

Pythonとpandasを使って移動平均線クロス戦略のFXボットを作ります。ローソク足データの取得から、MA計算、クロス検出、自動売買まで完全解説。

FX自動売買2025/12/13
📄

【Python】RSI逆張りボットを作る|pandas-taでテクニカル指標計算

Pythonとpandas-taを使ってRSI逆張り戦略のFXボットを作ります。RSIが30以下で買い、70以上で売り。テクニカル指標の計算が1行で完結!

FX自動売買2025/12/13
📄

【Python】損切り・リスク管理の自動化|トレーリングストップの実装

FXボットのリスク管理を自動化する方法を解説。固定損切り、トレーリングストップ、ブレイクイーブン、ATRベースの動的損切りまで、Pythonで実装します。

FX自動売買2025/12/13
📄

【完全ガイド】FXボットを24時間稼働させる方法|VPS vs クラウド

FX自動売買ボットを24時間止めずに動かす方法を解説。従来のVPSからGoogle Cloud Functions、AWSまで、用途に合わせた最適な選択肢を紹介します。

FX自動売買2025/12/13
💻

🐍『TradingViewのストラテジーで自動売買したい...』を現実にする方法【第4回:GMOコイン × TradingView × Python 完全攻略編】

GMOコイン APIとTradingView Webhookを連携して、完全自動売買システムを構築する方法。2025年最新のAPI仕様に対応した実践コード付き。

プログラミング・開発2025/12/7
💻

😤『国内FXでもゴトー日やりたい!』GMOコインAPIで自動売買を作る全手順 - Python + GCF で24時間稼働

MT4のゴトー日EAをPythonに移植して、GMOコインの外国為替FX APIでドル円自動売買を実現。Google Cloud Functions (GCF)とスケジューラーで完全自動化する方法を初心者向けに解説します。

プログラミング・開発2025/12/7