・約9分で読めます
更新:

GMOコイン暗号資産(BTC)自動売買の始め方【実運用中のコードで解説】Python APIセットアップ手順


PRGMOコインFX・仮想通貨が1つの口座で取引可能。API対応でBot運用にも最適。入出金手数料無料。
GMOコイン 無料口座開設 →

はじめに — FX Botの技術で暗号資産を自動売買する

FX自動売買Botの開発経験がある人にとって、暗号資産(BTC/ETH等)の自動売買は自然な次のステップです。Pythonで REST API を叩き、ロジックに従って注文を出す — 基本構造はFX Botと同じ。

しかし、暗号資産にはFXとは異なる特性があります。24時間365日の市場、FXとは桁違いのボラティリティ、取引所ごとに異なるAPI仕様。これらの差分を理解せずにFXと同じ感覚で参入すると、想定外の損失を招きます。

この記事では、GMOコインの暗号資産APIを使って、BTC自動売買の環境をゼロからセットアップする手順を解説します。FX自動売買との明確な違いを理解した上で、最小限のコードで動くBotの土台を構築するところまでカバーします。

FX側のAPI実装は GMOコイン API で FX 自動売買 Bot を作る完全ガイド で解説しています。本記事は暗号資産側に特化した内容です。

どの取引所のAPIを使うか迷っている方へ: Python対応!API公開済みFX・暗号資産おすすめ取引所比較 でGMOコイン・bitFlyer・OANDAの3社をBot開発者視点で比較しています。

FX自動売買と暗号資産自動売買の違い

FX Botの開発経験がある前提で、暗号資産との主要な差分を整理します。

取引時間

項目 FX 暗号資産
取引時間 平日24時間(土日休場) 365日24時間
メンテナンス 業者により異なる(数分〜数時間/日) 週1回程度(GMOコインは毎週水曜 15:00〜16:00)
休場リスク 週末に地政学リスクで窓開け 休場なし。ただしメンテ中は注文不可

暗号資産は土日も動くのが最大の違いです。FXでは「金曜にポジションをクローズして週末リスクを回避」という運用が一般的ですが、暗号資産にその概念はありません。代わりに、Botを24/365で稼働させ続けるインフラ設計が必要になります。

ボラティリティ

指標 USD/JPY(FX) BTC/JPY(暗号資産)
1日の平均値幅 0.5〜1.5% 2〜5%
急変時の値幅 2〜3%(指標発表) 10〜20%(規制ニュース等)
フラッシュクラッシュ 稀(年1〜2回) 比較的頻繁(月1〜2回)

暗号資産のボラティリティはFXの 3〜10倍 です。これは利益機会が大きい反面、損切り幅の設計がFXと同じでは全く機能しないことを意味します。FXで2%の損切りラインを設定していた戦略をそのままBTCに適用すると、通常のノイズで頻繁にストップアウトします。

API仕様の差分

GMOコインは FX用API暗号資産用API でサブドメインが分かれています。

項目 FX API 暗号資産 API
ベースURL(Public) https://forex-api.coin.z.com/public/v1 https://api.coin.z.com/public/v1
ベースURL(Private) https://forex-api.coin.z.com/private/v1 https://api.coin.z.com/private/v1
WebSocket wss://forex-api.coin.z.com/ws/public/v1 wss://api.coin.z.com/ws/public/v1
認証方式 HMAC-SHA256 HMAC-SHA256(同じ)
注文単位 1,000通貨〜 0.0001 BTC〜(銘柄による)
レバレッジ 25倍(規制上限) 2倍(個人)/ 現物は1倍

認証ロジックは共通(HMAC-SHA256)なので、FX Botの認証コードはほぼそのまま流用可能です。ただしエンドポイントURLの差し替えは必須。

手数料構造

項目 FX 暗号資産(取引所)
取引手数料 スプレッドに内包 Maker: -0.01% / Taker: 0.05%(GMOコイン)
建玉管理料 レバレッジポジションに日次課金 レバレッジポジションに日次課金
出金手数料 無料(GMOコイン) 無料(GMOコイン)

暗号資産の取引所取引では Maker/Taker手数料 の概念があります。Maker(指値で板に注文を並べる)はマイナス手数料(リベート)が付くケースもあるため、Bot設計ではできる限り指値注文を使うのが手数料面で有利です。

GMOコインで暗号資産APIキーを取得する手順

GMOコインの口座をすでに持っている場合は、暗号資産APIキーの追加取得のみで完了します。FX口座しか持っていない場合でも、同じアカウント内で暗号資産取引を有効化できます。

手順

  1. GMOコインにログイン → マイページに遷移
  2. 「API」メニュー → 左メニューまたはアカウント設定から「API」を選択
  3. 「APIキー新規追加」 をクリック
  4. 権限の設定 — 以下を選択:
    • 資産残高の参照: ON
    • 現物取引: ON(自動売買で使う場合)
    • レバレッジ取引: ON(レバレッジBotの場合)
    • 出金・送金: OFF(セキュリティ上、Botに出金権限は不要)
  5. IPアドレス制限 — Bot稼働サーバーのIPを指定(任意だが推奨)
  6. 2段階認証 → APIキーとAPIシークレットが表示される

APIキーの管理

# 環境変数に設定(.bashrc / .zshrc)
export GMO_CRYPTO_API_KEY="your_api_key_here"
export GMO_CRYPTO_API_SECRET="your_api_secret_here"

セキュリティ上の必須事項:

  • APIキーをソースコードに直書きしない
  • .env ファイルを使う場合は .gitignore に追加
  • 出金・送金権限は絶対にOFFのままにする
  • IPアドレス制限を設定すれば、キーが漏洩しても不正利用を防げる

FX側のAPIキー取得と認証の詳細は GMOコイン API で FX 自動売買 Bot を作る完全ガイド を参照してください。

PythonでBTC残高取得・価格取得・成行注文の最小コード

ここからは実際のコードです。暗号資産API特有のエンドポイントを使い、3つの基本操作を実装します。

認証ヘルパー(FX Botの流用)

import hmac
import hashlib
import time
import os
import json
import requests

API_KEY = os.environ["GMO_CRYPTO_API_KEY"]
API_SECRET = os.environ["GMO_CRYPTO_API_SECRET"]
BASE_URL = "https://api.coin.z.com/private/v1"

def create_headers(method: str, path: str, body: str = "") -> dict:
    """HMAC-SHA256認証ヘッダーを生成"""
    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,
    }

FX APIと認証ロジックは同一です。BASE_URLforex-api から api に変わるだけ。

1. 資産残高の取得

def get_assets():
    """口座の資産残高を取得する"""
    method = "GET"
    path = "/v1/account/assets"

    headers = create_headers(method, path)
    url = "https://api.coin.z.com/private" + path
    response = requests.get(url, headers=headers)
    data = response.json()

    if data["status"] == 0:
        for asset in data["data"]:
            if float(asset["amount"]) > 0:
                print(f"{asset['symbol']}: "
                      f"残高={asset['amount']}, "
                      f"利用可能={asset['available']}")
    else:
        print(f"エラー: {data['messages']}")

    return data

# 実行
get_assets()
# 出力例:
# JPY: 残高=50000, 利用可能=50000
# BTC: 残高=0.001, 利用可能=0.001

2. 現在価格(Ticker)の取得

価格取得はPublic APIなので認証不要です。

def get_ticker(symbol: str = "BTC_JPY"):
    """指定銘柄の現在価格を取得する(認証不要)"""
    url = f"https://api.coin.z.com/public/v1/ticker?symbol={symbol}"
    response = requests.get(url)
    data = response.json()

    if data["status"] == 0:
        for ticker in data["data"]:
            print(f"{ticker['symbol']}: "
                  f"ask={ticker['ask']}, "
                  f"bid={ticker['bid']}, "
                  f"last={ticker['last']}")
        return data["data"]
    else:
        print(f"エラー: {data['messages']}")
        return None

# 実行
get_ticker("BTC_JPY")
# 出力例:
# BTC_JPY: ask=15230000, bid=15228500, last=15229000

取得できる銘柄: BTC_JPY, ETH_JPY, XRP_JPY, SOL_JPY

3. 成行注文(現物買い)

def place_market_order(symbol: str, side: str, size: str):
    """現物の成行注文を発注する

    Args:
        symbol: 銘柄 (例: "BTC_JPY")
        side: "BUY" or "SELL"
        size: 注文数量 (例: "0.001")
    """
    method = "POST"
    path = "/v1/order"

    body = json.dumps({
        "symbol": symbol,
        "side": side,
        "executionType": "MARKET",
        "size": size,
    })

    headers = create_headers(method, path, body)
    headers["Content-Type"] = "application/json"
    url = "https://api.coin.z.com/private" + path
    response = requests.post(url, headers=headers, data=body)
    data = response.json()

    if data["status"] == 0:
        print(f"注文成功: orderId={data['data']}")
    else:
        print(f"注文失敗: {data['messages']}")

    return data

# 使用例(実行注意: 実際に注文が発注されます)
# place_market_order("BTC_JPY", "BUY", "0.0001")

最小注文数量の確認:

def get_trading_rules():
    """取引ルール(最小注文数量等)を取得"""
    url = "https://api.coin.z.com/public/v1/symbols"
    response = requests.get(url)
    data = response.json()

    if data["status"] == 0:
        for sym in data["data"]:
            if sym["symbol"] == "BTC_JPY":
                print(f"最小注文数量: {sym['minOrderSize']}")
                print(f"最大注文数量: {sym['maxOrderSize']}")
                print(f"注文数量単位: {sym['sizeStep']}")
    return data

get_trading_rules()

一連のフローをまとめたサンプル

"""
GMOコイン暗号資産API — 最小構成サンプル
実行前に環境変数 GMO_CRYPTO_API_KEY, GMO_CRYPTO_API_SECRET を設定すること
"""

def main():
    # 1. 現在価格を確認
    ticker = get_ticker("BTC_JPY")
    if not ticker:
        print("価格取得失敗。終了。")
        return

    current_price = float(ticker[0]["last"])
    print(f"\n現在のBTC価格: ¥{current_price:,.0f}")

    # 2. 残高を確認
    assets = get_assets()

    # 3. 残高に応じた注文数量を計算(例: JPY残高の10%で買う)
    jpy_available = 0
    for asset in assets.get("data", []):
        if asset["symbol"] == "JPY":
            jpy_available = float(asset["available"])
            break

    order_jpy = jpy_available * 0.1  # 残高の10%
    order_size = order_jpy / current_price
    order_size = round(order_size, 4)  # 小数点4桁に丸め

    print(f"注文予定: {order_size} BTC (約 ¥{order_jpy:,.0f})")

    # 4. 注文実行(コメントアウト — 実行時は解除)
    # place_market_order("BTC_JPY", "BUY", str(order_size))

if __name__ == "__main__":
    main()

このサンプルが動けば、あとは売買ロジックを main() の中に組み込むだけです。

暗号資産特有のリスク

FX Botの運用経験があっても、暗号資産には追加で認識すべきリスクがあります。

1. ボラティリティリスク

前述のとおり、BTCの日次変動率はFXの3〜10倍です。

実運用での対策:

  • 損切り幅をFXの3倍以上に設定する(FXで50pipsなら、BTCでは同等の比率換算が必要)
  • ポジションサイズを小さくする(資金の5%以下で1ポジション)
  • 急変検知ロジックを入れる(直近N分でX%以上動いたら新規注文を停止)
def is_volatile(symbol: str, threshold_pct: float = 3.0, minutes: int = 5) -> bool:
    """直近N分の変動率が閾値を超えたらTrue"""
    # klines APIで直近データを取得し、変動率を計算
    # 閾値を超えたら新規注文を停止する判断に使う
    pass  # 実装は省略

2. 規制リスク

暗号資産は各国の規制が流動的です。

  • 中国の暗号資産取引禁止(2021年)→ BTC 30%以上下落
  • 米SEC のETF承認/非承認 → 数時間で10%変動
  • 日本の税制改正議論 → 市場心理に影響

FXでは通貨自体が禁止されるリスクは実質ゼロですが、暗号資産では「特定の銘柄が上場廃止」「取引所が行政処分で停止」といったテールリスクがあります。

対策:

  • 1つの銘柄に資金を集中しない
  • 取引所に資金を置きっぱなしにしない(必要額のみ入金)
  • 重大ニュース検知時にBotを自動停止する仕組みを入れる

3. 取引所リスク

FXは金融庁の厳格な規制下にありますが、暗号資産取引所には追加のリスクがあります。

  • サーバーダウン(高負荷時にAPIが応答しない)
  • セキュリティインシデント(ハッキング)
  • 経営破綻リスク

GMOコインは東証プライム上場のGMOインターネットグループ企業であり、他の取引所と比較すると信頼性は高い部類です。しかし「取引所に預けている資金は自分の完全な管理下にない」という意識は常に持つべきです。

対策:

  • 運用に必要な金額のみ取引所に入金する
  • API応答のタイムアウト処理を実装する(5秒以上応答なしなら注文を中止)
  • 定期的に残高を確認し、想定外の変動があればアラートを出す
import time

def safe_request(url, headers, timeout=5, retries=3):
    """タイムアウト付きリクエスト"""
    for i in range(retries):
        try:
            response = requests.get(url, headers=headers, timeout=timeout)
            return response
        except requests.exceptions.Timeout:
            print(f"タイムアウト ({i+1}/{retries})")
            time.sleep(1)
        except requests.exceptions.ConnectionError:
            print(f"接続エラー ({i+1}/{retries})")
            time.sleep(2)
    return None  # 全リトライ失敗

4. 流動性リスク

BTCはメジャー通貨ペア(USD/JPY等)と比較して流動性が低い場合があります。特にアルトコイン(ETH以外の小型銘柄)は板が薄く、成行注文で想定以上のスリッページが発生する可能性があります。

対策:

  • 大量注文は分割して発注する(TWAP/VWAP的なアプローチ)
  • アルトコインは指値注文を基本にする
  • 流動性の低い時間帯(日本時間の深夜帯)に大型注文を避ける

運用時のリスク管理

暗号資産Botの継続運用で実装すべきリスク管理の仕組みを整理します。

ドローダウン管理

FX Botと同様に、最大ドローダウンに達したらBotを自動停止する仕組みは必須です。ただし暗号資産ではボラティリティが大きいため、停止閾値をFXより大きめに設定する必要があります。

  • FXでの一般的な停止閾値: 資金の10〜15%
  • 暗号資産での推奨停止閾値: 資金の15〜25%

閾値を大きくしすぎると回復不能なダメージを受けるリスクがあるため、ポジションサイズを小さくすることで閾値を小さく保つのが理想です。

ドローダウン管理の具体的な実装パターンは FX Bot のドローダウン管理と自動停止の仕組み で詳しく解説しています。暗号資産Botにも同じアーキテクチャが適用可能です。

日次・週次のモニタリング

24/365で動くBotは、放置すると問題の発見が遅れます。以下を自動化することを推奨します。

  • 日次: 損益、取引回数、最大DD、API エラー率をログ出力
  • 週次: 週間パフォーマンスサマリーを通知(Slack/Discord/LINE)
  • 異常検知: 1時間で資金の5%以上の損失が出たらアラート + Bot停止

口座開設 — 暗号資産自動売買を始めるなら

GMOコインは暗号資産とFXの両方でAPIを提供している数少ない国内取引所です。FX Bot開発者が暗号資産に展開する場合、認証コードの共通化ができるため開発効率が高い。

GMOコインの特徴:

  • 暗号資産 REST API + WebSocket 対応
  • Maker手数料 -0.01%(指値注文にリベート)
  • 口座開設・維持手数料: 無料
  • 入出金手数料: 無料
  • 取扱銘柄: BTC, ETH, XRP, SOL 等 20銘柄以上
  • 東証プライム上場GMOグループの運営

GMOコイン 無料口座開設はこちら

暗号資産を複数の取引所で分散管理したい場合は、Coincheckも選択肢です。招待コードを使えば口座開設時に1,500円分のBTCが付与されます。少額でBot検証を始める資金として活用できます。

Coincheck 口座開設(招待コード: Cg7Ad30 / 1,500円BTC付き)

FX Botから暗号資産Botへの移行チェックリスト

すでにFX Botを運用している人向けに、暗号資産Bot化の際に変更・追加すべき点をまとめます。

項目 変更内容
API ベースURL forex-api.coin.z.comapi.coin.z.com
注文単位 1,000通貨 → 0.0001 BTC(銘柄ごとに確認)
損切り幅 3〜10倍に拡大(ボラティリティ差分)
ポジションサイズ 資金の5%以下に制限
稼働時間 平日のみ → 24/365
メンテナンス対応 週1回のメンテ時間帯を避けるロジック追加
エラーハンドリング タイムアウト、レートリミット対応を強化
監視頻度 日次確認 → リアルタイム異常検知

まとめ

この記事で解説した内容を整理します。

  1. FXと暗号資産は基本構造が同じ — REST API + HMAC認証のアーキテクチャは共通。FX Botのコードは高い再利用性がある
  2. ただし差分の理解が必須 — 24/365取引、高ボラティリティ、取引所リスク、規制リスクはFXにない暗号資産固有のリスク
  3. APIキー取得は数分で完了 — 権限設定で「出金OFF」「IP制限ON」を徹底する
  4. 最小コードで動作確認 — 残高取得→価格取得→成行注文の3ステップが動けばBot開発の土台は完成
  5. リスク管理を最初に設計する — ドローダウン管理、異常検知、自動停止の仕組みを注文ロジックより先に実装する

暗号資産自動売買は、FX Botの延長線上にある技術です。しかし「FXで動いているからそのまま使える」という安易な移行は危険。差分を正しく理解し、リスク管理を先に設計してから参入してください。

関連記事

※ 当記事のリンクにはアフィリエイトリンクを含む場合があります。口座開設の費用には影響しません。

GMOコイン無料口座開設