Web Lukes
💻

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

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

🔥 「TradingViewのストラテジーで自動売買できたら最高なのに...」

TradingViewでバックテストしたら、年利30%のストラテジーができた。

でも手動で売買するの面倒すぎる...

シグナル出るたびにスマホ確認して、注文出して...

いや、自動化したい。

この記事では、TradingView × GMOコイン API × Pythonで完全自動売買システムを構築する方法を解説します。

2025年版、最新のAPI仕様に完全対応。


🤔 なぜGMOコインなのか

API連携でFX自動売買するなら、国内ではGMOコインが有力な選択肢です。

GMOコイン APIの強み

項目GMOコインOANDA
最小取引単位100通貨1,000通貨
API手数料0.002%無料(スプレッド内包)
ドキュメント10言語サンプル日本語あり
無料トライアル30日間なし
TradingView連携公式対応自作必要

2025年4月の神アップデート

GMOコインが大幅にAPI仕様を改善:

Code
変更前:最小注文数量 10,000通貨
変更後:最小注文数量 100通貨 ← 🔥これがデカい
変更前:API手数料 1通貨ごとに0.002円
変更後:約定金額 × 0.002%

100通貨から取引できるようになったことで、少額から自動売買を始められる。


📐 システム構成図

Code
TradingView
│
│ ストラテジーのシグナル発火
▼
Webhook送信(JSON)
│
▼
サーバー(GCF (Google Cloud Functions) / VPS)
│
│ Pythonでリクエスト処理
▼
GMOコイン API
│
│ 注文実行
▼
自動売買完了!🎉

ポイント:

  • TradingViewのWebhookは**有料プラン(Pro以上)**が必要
  • サーバーはGCF (Google Cloud Functions)(サーバーレス)かVPSを使う

🚀 準備編

Step 1:GMOコインで口座開設

  1. GMOコイン公式サイトへ
  2. 「口座開設」から申し込み
  3. 本人確認書類をアップロード
  4. 審査通過後、ログイン可能に
  5. 「外国為替FX」を有効化する

Step 2:APIキーを取得

Code
1. GMOコインにログイン
2. 「API」メニューへ
3. 「APIキー新規追加」をクリック
4. 以下を設定:
- APIキー名:自由(例:TradingViewBot)
- 権限:注文、照会にチェック
5. 「追加」をクリック
6. APIキーとシークレットをメモ(二度と表示されない!)

⚠️ APIキーは絶対に他人に見せない。 資産を自由に動かせる鍵です。

Step 3:TradingView有料プランに加入

Webhookを使うにはPro以上が必要。

プラン月額Webhookアラート数
Pro$12.9520個
Pro+$24.95100個
Premium$49.95400個

おすすめ:Proで十分。1ストラテジーなら20アラートで足りる。


💻 実装編:GMOコイン API

基本構成

Python
# gmo_fx_api.py
import hmac
import hashlib
import time
import json
import requests
from datetime import datetime
class GMOFxAPI:
"""GMOコイン 外国為替FX API クライアント"""
BASE_URL = "https://forex-api.coin.z.com/private"
def __init__(self, api_key: str, api_secret: str):
self.api_key = api_key
self.api_secret = api_secret
def _create_signature(self, timestamp: str, method: str, path: str, body: str = "") -> str:
"""署名を作成"""
text = timestamp + method + path + body
sign = hmac.new(
self.api_secret.encode(),
text.encode(),
hashlib.sha256
).hexdigest()
return sign
def _request(self, method: str, path: str, data: dict = None) -> dict:
"""APIリクエストを実行"""
timestamp = str(int(time.time() * 1000))
body = json.dumps(data) if data else ""
headers = {
"API-KEY": self.api_key,
"API-TIMESTAMP": timestamp,
"API-SIGN": self._create_signature(timestamp, method, path, body),
"Content-Type": "application/json"
}
url = self.BASE_URL + path
if method == "GET":
response = requests.get(url, headers=headers)
elif method == "POST":
response = requests.post(url, headers=headers, data=body)
return response.json()
def get_account(self) -> dict:
"""口座情報を取得"""
return self._request("GET", "/v1/account")
def get_positions(self) -> dict:
"""ポジション一覧を取得"""
return self._request("GET", "/v1/openPositions")
def place_order(self, symbol: str, side: str, size: int) -> dict:
"""
成行注文を出す
symbol: "USD_JPY" など
side: "BUY" or "SELL"
size: 取引数量(100通貨単位)
"""
data = {
"symbol": symbol,
"side": side,
"executionType": "MARKET",
"size": str(size)
}
return self._request("POST", "/v1/order", data)
def close_position(self, position_id: str, size: int) -> dict:
"""ポジションを決済"""
data = {
"positionId": position_id,
"executionType": "MARKET",
"size": str(size)
}
return self._request("POST", "/v1/closeOrder", data)
def close_all_positions(self, symbol: str) -> list:
"""指定通貨ペアの全ポジションを決済"""
positions = self.get_positions()
results = []
if positions.get("data"):
for pos in positions["data"]["list"]:
if pos["symbol"] == symbol:
result = self.close_position(
pos["positionId"],
int(pos["size"])
)
results.append(result)
return results

使用例

Python
import os
from gmo_fx_api import GMOFxAPI
# 初期化
api = GMOFxAPI(
api_key=os.environ["GMO_API_KEY"],
api_secret=os.environ["GMO_API_SECRET"]
)
# 口座情報を確認
account = api.get_account()
print(f"口座残高: {account['data']['balance']}円")
# USD/JPYを100通貨買い
result = api.place_order("USD_JPY", "BUY", 100)
print(f"注文結果: {result}")
# ポジション確認
positions = api.get_positions()
print(f"保有ポジション: {positions}")
# 全決済
api.close_all_positions("USD_JPY")
print("全決済完了!")

💻 実装編:Webhookサーバー

TradingViewからのWebhookを受信し、GMOコインに注文を出すサーバーを作ります。

Flask版(VPS向け)

Python
# webhook_server.py
import os
import json
from flask import Flask, request, jsonify
from gmo_fx_api import GMOFxAPI
app = Flask(__name__)
# API初期化
api = GMOFxAPI(
api_key=os.environ["GMO_API_KEY"],
api_secret=os.environ["GMO_API_SECRET"]
)
# セキュリティ用のシークレット
WEBHOOK_SECRET = os.environ.get("WEBHOOK_SECRET", "your_secret_here")
@app.route("/webhook", methods=["POST"])
def webhook():
"""TradingViewからのWebhookを処理"""
try:
# シークレット検証
data = request.json
if data.get("secret") != WEBHOOK_SECRET:
return jsonify({"error": "Unauthorized"}), 401
# シグナル取得
action = data.get("action") # "BUY" or "SELL" or "CLOSE"
symbol = data.get("symbol", "USD_JPY")
size = int(data.get("size", 100))
print(f"受信: action={action}, symbol={symbol}, size={size}")
# 注文実行
if action == "BUY":
# 売りポジションがあれば決済
api.close_all_positions(symbol)
result = api.place_order(symbol, "BUY", size)
elif action == "SELL":
# 買いポジションがあれば決済
api.close_all_positions(symbol)
result = api.place_order(symbol, "SELL", size)
elif action == "CLOSE":
result = api.close_all_positions(symbol)
else:
return jsonify({"error": "Invalid action"}), 400
print(f"結果: {result}")
return jsonify({"success": True, "result": result})
except Exception as e:
print(f"エラー: {e}")
return jsonify({"error": str(e)}), 500
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000)

GCF (Google Cloud Functions)版(サーバーレス)

Python
# main.py
import os
import json
from flask import jsonify
from gmo_fx_api import GMOFxAPI
api = GMOFxAPI(
api_key=os.environ["GMO_API_KEY"],
api_secret=os.environ["GMO_API_SECRET"]
)
WEBHOOK_SECRET = os.environ["WEBHOOK_SECRET"]
def webhook_handler(request):
"""Cloud Functionsのエントリーポイント"""
try:
# ボディをパース
body = request.get_json()
# シークレット検証
if body.get("secret") != WEBHOOK_SECRET:
return jsonify({"error": "Unauthorized"}), 401
action = body.get("action")
symbol = body.get("symbol", "USD_JPY")
size = int(body.get("size", 100))
# 注文実行
if action == "BUY":
api.close_all_positions(symbol)
result = api.place_order(symbol, "BUY", size)
elif action == "SELL":
api.close_all_positions(symbol)
result = api.place_order(symbol, "SELL", size)
elif action == "CLOSE":
result = api.close_all_positions(symbol)
else:
return jsonify({"error": "Invalid action"}), 400
return jsonify({"success": True, "result": result}), 200
except Exception as e:
return jsonify({"error": str(e)}), 500

💻 実装編:TradingView設定

ストラテジーにアラートを追加

TradingViewのPine Scriptストラテジーで、エントリー/エグジット時にアラートを発火させます。

Pine Script
//@version=5
strategy("MA Cross Strategy", overlay=true)
// パラメータ
shortPeriod = input.int(5, "短期MA")
longPeriod = input.int(20, "長期MA")
// 移動平均計算
shortMA = ta.sma(close, shortPeriod)
longMA = ta.sma(close, longPeriod)
// プロット
plot(shortMA, color=color.blue, title="短期MA")
plot(longMA, color=color.red, title="長期MA")
// エントリー条件
longCondition = ta.crossover(shortMA, longMA)
shortCondition = ta.crossunder(shortMA, longMA)
// エントリー
if longCondition
strategy.entry("Long", strategy.long)
alert('{"secret":"your_secret","action":"BUY","symbol":"USD_JPY","size":"1000"}', alert.freq_once_per_bar)
if shortCondition
strategy.entry("Short", strategy.short)
alert('{"secret":"your_secret","action":"SELL","symbol":"USD_JPY","size":"1000"}', alert.freq_once_per_bar)

⚠️注意: alert内のsizeはご自身の戦略に合わせて調整してください。Python側のデフォルト(100通貨)と異なると意図しないロット数で発注される可能性があります。

アラート設定手順

Code
1. TradingViewでストラテジーをチャートに追加
2. 右上の「アラート」ボタンをクリック
3. 以下を設定:
- 条件:ストラテジー名 → 注文が発注された時
- Webhook URL:https://your-server.com/webhook
- メッセージ:そのまま(ストラテジーのalert()が使われる)
4. 「作成」をクリック

🖥️ デプロイ編

方法1:VPS + Flask(おすすめ)

Bash
# 1. VPSを契約(ConoHa、さくら、Vultrなど)
# 2. SSHで接続
ssh root@your-server-ip
# 3. Python環境構築
apt update && apt install python3 python3-pip
pip3 install flask requests
# 4. ファイルをアップロード
scp gmo_fx_api.py webhook_server.py root@your-server-ip:~/
# 5. 環境変数を設定
export GMO_API_KEY="your_key"
export GMO_API_SECRET="your_secret"
export WEBHOOK_SECRET="your_webhook_secret"
# 6. 起動(screenで永続化)
screen -S bot
python3 webhook_server.py
# Ctrl+A, D で抜ける

方法2:GCF (Google Cloud Functions)

Bash
# 1. GCPプロジェクトを作成
# 2. Cloud Functionsで関数を作成
# 3. ランタイムをPython 3.xに設定
# 4. 環境変数を設定(GMO_API_KEY, GMO_API_SECRET, WEBHOOK_SECRET)
# 5. HTTPトリガーを有効化
# 6. TradingViewのWebhook URLにCloud FunctionsのURLを設定

メリット:サーバー管理不要、従量課金で安い、日本リージョンあり デメリット:初期設定がやや複雑


🧪 テスト手順

Step 1:GMOコイン API単体テスト

Python
# test_api.py
from gmo_fx_api import GMOFxAPI
api = GMOFxAPI("your_key", "your_secret")
# 口座情報取得できるか確認
account = api.get_account()
print(account)
# 小さい注文でテスト(100通貨)
result = api.place_order("USD_JPY", "BUY", 100)
print(result)
# すぐ決済
api.close_all_positions("USD_JPY")

Step 2:Webhookサーバー単体テスト

Bash
# curlでWebhookをシミュレート
curl -X POST http://localhost:5000/webhook \
-H "Content-Type: application/json" \
-d '{"secret":"your_secret","action":"BUY","symbol":"USD_JPY","size":"100"}'

Step 3:TradingViewからの統合テスト

  1. TradingViewでアラートを設定
  2. チャートを操作してシグナルを発火させる
  3. GMOコインの注文履歴を確認
  4. 注文が入っていれば成功!🎉

⚠️ 注意点

注意①:レート制限

GMOコイン APIは1秒に1リクエストの制限がある。

Python
import time
def safe_request(func, *args, **kwargs):
"""レート制限を守る"""
time.sleep(1) # 1秒待つ
return func(*args, **kwargs)

注意②:エラーハンドリング

APIは失敗することがある。リトライ処理を入れること。

Python
def place_order_with_retry(api, symbol, side, size, max_retries=3):
for i in range(max_retries):
try:
result = api.place_order(symbol, side, size)
if result.get("status") == 0:
return result
print(f"注文失敗({i+1}回目): {result}")
except Exception as e:
print(f"エラー({i+1}回目): {e}")
time.sleep(2)
raise Exception("注文に失敗しました")

注意③:30日間無料トライアルを活用

GMOコインのAPI、最初の30日間は無料で試せる。

本番運用前に十分テストすること。


📝 第4回まとめ

今回学んだこと:

  1. GMOコイン APIの強み

    • 最小100通貨から取引可能
    • 10言語のサンプルコード
    • 30日間無料トライアル
  2. システム構成

    • TradingView → Webhook → サーバー → GMOコイン API
  3. 実装方法

    • GMOFxAPIクラスで注文・決済
    • FlaskでWebhookサーバー構築
    • TradingViewのストラテジーでアラート発火
  4. デプロイ

    • VPS + Flask が簡単でおすすめ
    • GCF (Google Cloud Functions)ならサーバー管理不要

🔜 次回予告:EA購入・選び方ガイド

第5回では、EAを購入する方法を解説します。

  • GogoJungleの使い方
  • 良いEAの見分け方
  • 詐欺EAに騙されない方法
  • おすすめEAランキング

「自作は無理だけど、いいEA欲しい!」 という人は必見です!


💬 最後に

TradingView × GMOコイン × Python

この組み合わせ、マジで最強だと思う。

  • TradingViewで自由にストラテジー開発
  • バックテストで検証
  • Webhookで自動発注
  • GMOコインで少額から本番運用

プログラミングできる人にとっては、これ以上の環境はない。

ぜひこの記事のコードをベースに、あなただけの自動売買システムを構築してみてほしい。

「自分のコードが、実際にお金を動かしてる...」

この感動、プログラマーなら分かるはず。


📚 シリーズ記事

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

FX自動売買VPSなら50%OFF

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

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

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

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

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

🔮
MEMBERSHIP

量子相場謀略|ホソノP

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

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

📚あわせて読みたい

💻

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

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

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

「夜中にチャート見るのもう疲れた…😴」仮想通貨自動売買ボット開発の完全ガイド 🤖💰 - Python + TradingView + Bybitで始める

PythonとTradingView、Bybitを組み合わせて仮想通貨の自動売買ボットを構築する方法を、初心者向けにステップバイステップで解説します。

プログラミング・開発2025/1/29
💻

【プログラミング初心者でも安心!】TradingViewのシグナルでMT4を動かす自動売買システム構築ガイド

TradingViewの高度な分析を使ったアラートをきっかけに、お使いのMT4で自動的に売買する仕組みを、Googleの無料クラウドサービスを使って作ってみましょう。専門知識は不要です!

プログラミング・開発2023/2/19
💻

TradingViewとMT4連携をGCFで自動化!サーバーレスで無料から始める自動売買ガイド

TradingViewのアラートでMT4を自動売買!GCF (Google Cloud Functions)の無料枠を使えば、サーバー契約不要で24時間安定稼働するシステムを自作できます。PythonとEAコードも完全公開。

プログラミング・開発2023/2/5
💻

😤『cBot・MQL4・MQL5・Python、どれから始めればいいの!?』習得時間を徹底比較【実体験ベース】

自動売買を始めたいけど、cBot(C#/Python)・MQL4(MT4)・MQL5(MT5)・Python、どれを学ぶべき?プログラミング未経験者〜経験者別に習得時間の目安と効率的な学習順序を実体験ベースで解説。

プログラミング・開発2026/1/13
📄

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

Pythonで直接FX取引する自動売買ボットの作り方。MT4に依存しない、自由度の高いシステム開発の第一歩。GMOコインやOANDAのAPIを使った実践的な入門ガイド。

FX自動売買2025/12/13