【Python FXボット入門】MT4を使わない自動売買の始め方
「MT4のEAは作れるようになった。でも、もっと自由にやりたい...」 「Pythonで機械学習を使った売買システムを作りたい」 「クラウドで24時間動かしたい」
そんなあなたへ。Pythonで直接FX取引する方法を解説します。
なぜPythonなのか?
MT4/MQL4 vs Python
| MT4/MQL4 | Python | |
|---|---|---|
| 学習コスト | 低い | やや高い |
| 自由度 | MT4内に限定 | 無限 |
| ライブラリ | 少ない | 豊富 |
| 機械学習 | 困難 | 得意 |
| クラウド対応 | 難しい | 簡単 |
| 対応業者 | MT4対応業者のみ | API提供業者 |
Pythonのメリット:
- pandas, numpyで高度なデータ分析
- scikit-learn, TensorFlowで機械学習
- Google Cloud, AWSでクラウド運用
- 他のシステムとの連携が簡単
PythonでFX取引する仕組み
アーキテクチャ
あなたのPythonスクリプト ↓ APIリクエストFX業者のサーバー ↓実際の取引が執行されるMT4を介さず、FX業者のAPIに直接アクセスして取引します。
API提供業者(国内)
| 業者 | 特徴 | 最小単位 |
|---|---|---|
| GMOコイン | 外国為替FX、無料トライアルあり | 100通貨 |
| OANDA Japan | 豊富なAPI、情報量多い | 1通貨 |
| マネーパートナーズ | API提供あり | 100通貨 |
この記事ではGMOコインを例に解説します。
環境構築
必要なもの
- Python 3.9以上
- GMOコインの口座(外国為替FX)
- APIキー
Pythonのインストール
まだの人は python.org からダウンロード。
インストール確認:
python --version# Python 3.11.x など必要なライブラリ
pip install requests python-dotenvGMOコインの準備
1. 口座開設
- GMOコイン にアクセス
- 口座開設(無料)
- 外国為替FX口座を追加開設
2. APIキー発行
- ログイン後、メニュー → API
- 「外国為替FX」用のAPIキーを新規追加
- 権限: 外国為替FX取引(出金権限は付けない!)
- APIキーとAPIシークレットをメモ
⚠️ APIシークレットは一度しか表示されません!
最小限のコード
まずは「現在価格を取得する」だけの最小限コードから。
プロジェクト構成
my-fx-bot/├── .env # APIキー(Gitに上げない!)├── main.py # メインスクリプト└── requirements.txt.env(環境変数)
GMO_FX_API_KEY=your_api_key_hereGMO_FX_API_SECRET=your_api_secret_heremain.py
import osimport requestsfrom 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()実行
python main.py出力例:
通貨ペア: 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)
認証付きリクエストのコード
import osimport timeimport hmacimport hashlibimport requestsfrom 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キーが正しく設定されていれば、あなたの口座情報が表示されます。
注文を出す
いよいよ注文です。
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通貨)で!
完成版:シンプルボット
価格取得 → 条件判定 → 注文 のシンプルなボットです。
import osimport timeimport hmacimport hashlibimport jsonimport requestsfrom 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 EA | Python |
|---|---|---|
| セットアップ | 簡単 | やや手間 |
| 売買ロジック | 書ける | 書ける |
| データ分析 | 限定的 | pandas等で強力 |
| 機械学習 | 難しい | 得意 |
| クラウド運用 | VPS必須 | GCF等で簡単 |
| 自由度 | MT4に縛られる | 何でもできる |
初心者:MT4 EAから始めるのが簡単 中級者以上:Pythonで自由度の高いシステムへ
次のステップ
これでPythonからFX APIを叩く基本ができました。
次は、実際に移動平均線を使った売買ロジックをPythonで実装します。
📚 次に読む記事: Python 移動平均線ボットを作ろう
MQL4で作ったMA Cross EAと同じロジックを、Pythonで再実装します。両方を比較することで、それぞれの特徴がよくわかりますよ!
参考リンク
🎁おすすめツール・サービス
※上記リンクにはプロモーション(広告)が含まれています
量子相場謀略|ホソノP
ブログでは書けない本音のトレード戦略とEA開発の裏側を公開。 データに基づいた検証で、再現性のある手法だけをお届けします。