【Python】GMOコインAPIで仮想通貨取引の自動売買|ビットコイン等の板情報・残高・現物信用注文の自動化方法解説

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方に向けた記事です
  • 仮想通貨の自動売買に興味がある
  • GMOコインのAPI実装手順を知りたい
  • 仮想通貨(ビットコイン等)の自動売買ツールを自作したい
目次

仮想通貨の自動売買とは

仮想通貨の自動売買とは、通貨情報参照・決済・送金等の取引に関連する操作をプログラムで代替することを指します。

自動売買手法の実装は、取引操作の手間削減に加え、仮想通貨収益化のプロセス効率化も期待できます。

仮想通貨の自動売買ツール実装には「取引所が提供するAPI」が欠かせません。

表面上難しく感じるかもしれませんが、APIの利用方法さえ分かってしまえば意外と簡単に自作ツールで作れてしまうものです。

本記事では仮想通貨の自動売買ツール作成に挑戦してみたい方向けに、GMOコインのAPIを活用し、ビットコインの自動売買ツールの作成方法を解説します。

なお、後述で紹介するプログラムは、ビットコイン以外の通貨にも横展開できるようになっているため、他の暗号資産を用いた自作ツールを作成したい方も必見です!

様々な仮想通貨の自動売買手法はこちらの記事で解説しています。合わせてご覧下さい。

GMOコイン取引所の概要・自動売買に必要な事前準備

【引用】GMOコインの公式HP(

今回はGMOコイン取引所のAPIをベースとしてビットコイン自動売買ツールを作成していきます。

GMOコインの取引所は「API機能が豊富」「最低取引単位を小さく設定できる」「取引時の手数料が低い」という特徴があるため、自動売買ツール作成に関して非常に適した取引所と言えます。

【参考】主要な仮想通貨取引所の比較情報

スクロールできます
取引所名最低取引量現物取引手数料*1入金手数料[円]入金手数料[BTC]出金手数料[円]送金手数料[BTC]信用取引API提供ccxt自動売買おすすめ
0.005 BTC無料無料無料407円0.0005 BTC×★★★★★
0.0001BTCMaker:-0.01%
Taker:0.05%
無料無料0円/
400円(大口出金)
無料×★★★★☆
0.0001BTCMaker:-0.02%
Taker:0.12%
無料無料550円/
770円(3万円以上)
0.0006 BTC×★★★★☆
0.0001 BTC無料無料無料330 円無料××★★★☆☆
表:暗号資産取引所の比較表(最低取引量の単位はBTCで記載)
補足
  1. 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。

さらに、GMOコインでは「信用取引(レバレッジ取引)」ができます。信用取引ができる取引所は国内だとごく一部に限られます。今後本格的な自動売買ツールを作るのであれば、信用取引ができると実現できる取引範囲も大幅に広がります。

上記理由よりGMOコインのAPIは、自動売買ツール作成において使い勝手が非常に良いと言えます。

合わせて読みたい

暗号資産の取引経験が少ない方には、のAPIもおすすめです。

GMO同様少額取引が可能なため、万一のAPI取引失敗リスクを最小限に抑えることができます。

またスムーズなAPI実装を支援するccxtというパッケージが利用できるのは非常に魅力的です。

GMOコインの口座開設する

自動売買ツールを作成するにはGMOコインのAPIを使えるようにする必要があります。APIを使うためには、GMOコインの口座開設が必須です。

そのため、GMOコインの口座開設が未済の方は事前に開設申請をしておきましょう。口座開設はスマホと本人確認書類さえあれば10分で完了できます。

口座開設が未済の方はこちら

GMOコインのAPIキー・シークレットを取得する

口座開設が完了しましたらAPIキーとシークレットキーを取得していきます。

下記の手順でAPI情報を取得していきましょう!

GMOコインでAPI情報を取得する手順
(1) 会員ページにログイン
(2) 会員トップページからAPI画面をクリック
(3) APIキーを新規追加をクリックし必要情報を入力

APIキーが保持する機能を選択します。今回は全てにチェックを入れてAPIキーを作成します。

(4) APIキーとシークレットキーが取得できたことを確認

APIキーとAPIシークレットは、後ほど活用するためメモを残しておきましょう!

【Python・実践】GMOコイン APIの使い方とビットコイン自動売買ツール作成

それでは実際にGMOコイン取引所のAPIを活用し自動売買ツール作成に挑戦です!今回は下記機能をPythonで実装することとします。

No作成する自動売買機能
必須APIキー・シークレットキー設定
1通貨情報の取得
2板情報の取得
3取引履歴の取得
3残高情報の取得
4仮想通貨の注文する
5仮想通貨の注文内容キャンセル
6未約定の注文状況確認
7約定した取引確認

※自動売買ツールはGMOコイン公式APIドキュメントを参考にしながら作成していきます。

APIキー・シークレットキーの設定

まず、ビットコイン自動売買ツールを動かすために必要なAPIキー・シーレットキーを定義します。加えて必要となるライブラリもインポートしておきましょう。

import time
from datetime import datetime
import hmac
import hashlib
import requests
import json

API_Key    = "API KEY"    # APIキーを設定
Secret_Key = "API SECRET" # シークレットキーを設定

通貨情報の取得

GMOコインが取り扱う通貨情報(銘柄情報)は下記コードで取得できます。

関数の引数には、通貨情報(symbol)を指定して実行しましょう。

下記の例はsymbolをビットコイン(BTC/JPY)としていますが、他の通貨コードを指定してお好みの暗号資産情報を出力することも可能です。

# 通貨情報
def get_tuuka_info(symbol):
    EP   = 'https://api.coin.z.com/public/v1/ticker?symbol=' + symbol
    res  = requests.get(EP)
    return json.dumps(res.json())

# 関数実行
get_tuuka_info(symbol = "BTC")
# 出力イメージ
# '{"status": 0, "data": [
#     {"ask": "4918000", 
#      "bid": "4917520", 
#      "high": "4961000", 
#      "last": "4918000", 
#      "low": "4903200", 
#      "symbol": "BTC", 
#      "timestamp": "2022-01-15T02:22:31.543Z", 
#      "volume": "152.1537"}
#    ], "responsetime": "2022-01-15T02:22:31.926Z"}'

板情報の取得

各種通貨の板情報は下記コードで取得できます。

関数の引数には、通貨情報(symbol)を指定して実行しましょう。

# 板情報
def get_ita(symbol):
    EP    = 'https://api.coin.z.com/public/v1/orderbooks?symbol=' + symbol
    res   = requests.get(EP)
    return json.dumps(res.json())

# 関数実行
get_ita(symbol="BTC")
# 出力イメージ
# '{"status": 0, "data": 
#  {"asks": [{"price": "4916336", "size": "0.757"}, 
#  {"bids": [{"price": "4916336", "size": "0.757"}, 
#  "symbol": "BTC"}, "responsetime": "2022-01-15T02:24:34.798Z"}'

取引履歴の取得

履歴情報は下記コードで取得できます。

関数の引数には、通貨情報(symbol)を指定して実行しましょう。

# 取引履歴
def get_history(symbol):
    EP  = 'https://api.coin.z.com/public/v1/trades?symbol='+symbol+'&page=1&count=10'
    res = requests.get(EP)
    return json.dumps(response.json())

# 関数実行
get_history(symbol="BTC")
# 出力イメージ
# '{"status": 0, "data": 
#  {"asks": [{"price": "4916336", "size": "0.757"}, 
#  {"bids": [{"price": "4916336", "size": "0.757"}, 
#  "symbol": "BTC"}, "responsetime": "2022-01-15T02:24:34.798Z"}'

残高情報の取得

GMOコインに預けている残高情報(日本円、仮想通貨の残高)は下記のコードで取得できます。

# 残高を取得
def get_balance(API_Key,Secret_Key):
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'GET'
    endPoint  = 'https://api.coin.z.com/private'

    path_assets = '/v1/account/assets'
    text_assets = timestamp + method + path_assets
    sign_assets = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text_assets.encode('ascii')), hashlib.sha256).hexdigest()
    headers_assets = {"API-KEY": API_Key,"API-TIMESTAMP": timestamp,"API-SIGN": sign_assets}
    res_assets = requests.get(endPoint + path_assets, headers=headers_assets).json().get("data")
    return res_assets

# 関数実行
get_balance(API_Key,Secret_Key)
# 出力イメージ
# [{'amount': '1000000',
#   'available': '1000000',
#   'conversionRate': '1',
#   'symbol': 'JPY'},
#  {'amount': '0',
#   'available': '0',
#   'conversionRate': '1000000',
#   'symbol': 'BTC'},
#  {'amount': '0',
#   'available': '0',
#   'conversionRate': '1000000',
#   'symbol': 'ETH'},

仮想通貨の注文する

仮想通貨を注文するコードを下記に記載します。関数実行で実際に注文が走ります。取り扱いには十分注意です。

以下注文に用いる関数とその実行方法を分けて記載します。

注文に用いる関数

# 注文
def GMO_order(API_Key, Secret_Key, symbol, side, executionType, price, size):
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'POST'
    endPoint  = 'https://api.coin.z.com/private'
    path = '/v1/order'
    reqBody = {
        "symbol": symbol,                # 銘柄
        "side": side,                    # BUY または SELL
        "executionType": executionType,  # 注文タイプ(成行,指値)
        "price": price,                  # 価格[円]
        "size": size                     # 購入数量[BTC]
    }
    text = timestamp + method + path + json.dumps(reqBody)
    sign = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
    headers = {
        "API-KEY": API_Key,
        "API-TIMESTAMP": timestamp,
        "API-SIGN": sign}

    res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
    print (res.json())

注文関数実行例

注文条件を変えてビットコインを購入・売却するコード例
(1) 指値現物購入
""" 注文条件(1) """
# 銘柄:BTC
# 注文:購入(BUY)
# 注文方法:指値(LIMIT)
# 注文価格:3,000,000円
# 購入数量:0.01 BTC

# 関数実行
GMO_order(API_Key, Secret_Key,
          symbol = "BTC",
          side   = "BUY",
          executionType = "LIMIT",
          price  = "3000000",
          size   = "0.01")
(2) 指値現物売却
""" 注文条件(2) """
# 銘柄:BTC
# 注文:売却(SELL)
# 注文方法:指値(LIMIT)
# 注文価格:3,000,000円
# 購入数量:0.01 BTC

# 関数実行
GMO_order(API_Key, Secret_Key,
          symbol = "BTC",
          side   = "SELL",
          executionType = "LIMIT",
          price  = "3000000",
          size   = "0.01")
(3) 成行現物売却
""" 注文条件(3) """
# 銘柄:BTC
# 注文:売却(SELL)
# 注文方法:成行(LIMIT)
# 注文価格:0円
# 購入数量:0.01 BTC

# 関数実行
GMO_order(API_Key, Secret_Key,
          symbol = "BTC",
          side   = "SELL",
          executionType = "MARKET",
          price  = "0",
          size   = "0.01")
(4) 指値レバレッジ購入
""" 注文条件(4) """
# 銘柄:BTC(レバレッジ取引)
# 注文:購入(BUY)
# 注文方法:指値(LIMIT)
# 注文価格:3,000,000円
# 購入数量:0.01 BTC

# 関数実行
GMO_order(API_Key, Secret_Key,
          symbol = "BTC_JPY",
          side   = "BUY",
          executionType = "MARKET",
          price  = "3000000",
          size   = "0.01")
(5) 指値レバレッジ空売り
""" 注文条件(4) """
# 銘柄:BTC(レバレッジ取引)
# 注文:購入(SELL)
# 注文方法:指値(LIMIT)
# 注文価格:3,000,000円
# 購入数量:0.01 BTC

# 関数実行
GMO_order(API_Key, Secret_Key,
          symbol = "BTC_JPY",
          side   = "SELL",
          executionType = "MARKET",
          price  = "3000000",
          size   = "0.01")

ビットコインの注文内容キャンセル

注文をキャンセルしたい場合、引数に注文した取引IDを指定し、下記のように実行します。

# 注文キャンセル
def order_cancel(API_Key, Secret_Key,symbol,order_id):
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'POST'
    endPoint  = 'https://api.coin.z.com/private'
    path      = '/v1/cancelOrder'
    reqBody = {
    "orderId": order_id}
    text = timestamp + method + path + json.dumps(reqBody)
    sign = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
    parameters = {
        "symbol": symbol,
        "page": 1,
        "count": 100
    }
    headers = {
        "API-KEY": API_Key,
        "API-TIMESTAMP": timestamp,
        "API-SIGN": sign
    }
    res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))

    print (json.dumps(res.json(), indent=2))#約定情報
    
# 関数実行
order_cancel(API_Key, Secret_Key,symbol="BTC",order_id="注文ID")

未約定の注文状況確認

指値注文した際、約定せずに注文が残り続ける場合があります。そのような未約定の注文状況は、下記のコードで確認できます。

関数の引数には、APIキー、シークレットキー、通貨情報(symbol)を指定して実行しましょう。

# 未約定の注文状況を確認
def active_orders(API_Key, Secret_Key, symbol):
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'GET'
    endPoint  = 'https://api.coin.z.com/private'
    path      = '/v1/activeOrders'
    
    text = timestamp + method + path
    sign = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
    parameters = {"symbol": symbol,}
    headers = {
        "API-KEY": API_Key,
        "API-TIMESTAMP": timestamp,
        "API-SIGN": sign}
    res = requests.get(endPoint + path, headers=headers, params=parameters)

    print (json.dumps(res.json(), indent=2))
    
# 関数実行
active_orders(API_Key, Secret_Key, symbol="BTC")
# 出力イメージ
# {
#   "status": 0,
#   "data": {"注文一覧情報が表示される"},
#   "responsetime": "2022-01-15T02:51:44.183Z"
# }

約定した取引確認

約定した取引情報の確認には、下記のコードを用います。

関数の引数には、APIキー、シークレットキー、通貨情報(symbol)を指定して実行しましょう。

# 約定情報
def contract(API_Key, Secret_Key,symbol):
    timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
    method    = 'GET'
    endPoint  = 'https://api.coin.z.com/private'
    path      = '/v1/latestExecutions'
    text = timestamp + method + path
    sign = hmac.new(bytes(Secret_Key.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
    parameters = {
        "symbol": symbol,
        "page": 1,
        "count": 100
    }
    headers = {
        "API-KEY": API_Key,
        "API-TIMESTAMP": timestamp,
        "API-SIGN": sign
    }
    res = requests.get(endPoint + path, headers=headers, params = parameters)

    print (json.dumps(res.json(), indent=2))
    
# 関数実行
contract(API_Key, Secret_Key,symbol="BTC")
# 出力イメージ
# {
#   "status": 0,
#   "data": {"約定した取引一覧情報が表示される"},
#   "responsetime": "2022-01-15T02:51:44.183Z"
# }

【仮想通貨・ビットコイン】自動取引実践法・その他優良情報

最後までご覧いただきありがとうございました。当サイトでは仮想通貨・ビットコインにおける多様な自動取引手法の解説記事を多数取り扱っております。

取引所別:APIの取得手順と使い方の解説記事

スクロールできます
対応言語記事名
Python【GMOコイン】 APIで仮想通貨取引の自動化
Python【BitTrade】 APIで仮想通貨取引の自動化
Python【bitbank】 APIで仮想通貨取引の自動化
Python【Coincheck】APIで仮想通貨取引の自動化
Python【bitFlyer】APIで仮想通貨取引を自動化
Python【BITPOINT】APIで仮想通貨取引の自動化

機械学習やテクニカル分析を採用した仮想通貨取引の解説記事

スクロールできます
対応言語記事名指標
共通自動売買の種類・自作時のポイント全て
Pythonリアルタイムチャート分析基礎トレンド
Python移動平均線トレンド
Pythonゴールデンクロス・デッドクロストレンド
Pythonアービトラージ(裁定取引)時間・値幅
Pythonボリンジャーバンドオシレータ
PythonMACDオシレータ
PythonRSIオシレータ
Python時系列予測モデルの構築機械学習・AI
【トレンド】:値動きが上昇・下降どちらのトレンドなのか判断に有効
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効

その他仮想通貨自動トレード解説記事

スクロールできます
対応言語記事名
Python【データ収集】仮想通貨の過去データを大量取得する方法
Python【初心者向け】ccxtを活用した仮想通貨の自動取引
Node.js【初心者向け】ccxtを活用した仮想通貨の自動取引

最後に

この記事が気に入ったら
フォローしてね!

目次