こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- 仮想通貨の自動売買に興味がある
- GMOコインのAPI実装手順を知りたい
- 仮想通貨(ビットコイン等)の自動売買ツールを自作したい
仮想通貨の自動売買とは
仮想通貨の自動売買とは、通貨情報参照・決済・送金等の取引に関連する操作をプログラムで代替することを指します。
自動売買手法の実装は、取引操作の手間削減に加え、仮想通貨収益化のプロセス効率化も期待できます。
仮想通貨の自動売買ツール実装には「取引所が提供するAPI」が欠かせません。
表面上難しく感じるかもしれませんが、APIの利用方法さえ分かってしまえば意外と簡単に自作ツールで作れてしまうものです。
本記事では仮想通貨の自動売買ツール作成に挑戦してみたい方向けに、GMOコインのAPIを活用し、ビットコインの自動売買ツールの作成方法を解説します。
なお、後述で紹介するプログラムは、ビットコイン以外の通貨にも横展開できるようになっているため、他の暗号資産を用いた自作ツールを作成したい方も必見です!
様々な仮想通貨の自動売買手法はこちらの記事で解説しています。合わせてご覧下さい。
【仮想通貨】自動売買ツールの自作方法とおすすめ暗号資産取引所|無料で実践できるビットコイン自動取引の仕組みも徹底解説
「仮想通貨(暗号資産)の自動売買ツール作成に興味がある」「自動売買の仕組み・作り方を知りたい」「どこの仮想通貨取引所がおすすめなのか知りたい」本記事ではこのような要望にお応えします。
GMOコイン取引所の概要・自動売買に必要な事前準備
今回はGMOコイン取引所のAPIをベースとしてビットコイン自動売買ツールを作成していきます。
GMOコインの取引所は「API機能が豊富」「最低取引単位を小さく設定できる」「取引時の手数料が低い」という特徴があるため、自動売買ツール作成に関して非常に適した取引所と言えます。
【参考】主要な仮想通貨取引所の比較情報
取引所名 | 最低取引量 | 現物取引手数料*1 | 入金手数料[円] | 入金手数料[BTC] | 出金手数料[円] | 送金手数料[BTC] | 信用取引 | API提供 | ccxt | 自動売買おすすめ |
---|---|---|---|---|---|---|---|---|---|---|
Coincheck | 0.005 BTC | 無料 | 無料 | 無料 | 407円 | 0.0005 BTC | × | ○ | ○ | ★★★★★ |
GMOコイン | 0.0001BTC | Maker:-0.01% Taker:0.05% | 無料 | 無料 | 0円/ 400円(大口出金) | 無料 | ○ | ○ | × | ★★★★☆ |
bitbank | 0.0001BTC | Maker:-0.02% Taker:0.12% | 無料 | 無料 | 550円/ 770円(3万円以上) | 0.0006 BTC | × | ○ | ○ | ★★★★☆ |
BITPOINT | 0.0001 BTC | 無料 | 無料 | 無料 | 330 円 | 無料 | × | ○ | × | ★★★☆☆ |
- 現物取引手数料の対象通貨はBTC/JPY。手数料は約定数量 × 上記記載の割合[%]として算出可能。
さらに、GMOコインでは「信用取引(レバレッジ取引)」ができます。信用取引ができる取引所は国内だとごく一部に限られます。今後本格的な自動売買ツールを作るのであれば、信用取引ができると実現できる取引範囲も大幅に広がります。
上記理由よりGMOコインのAPIは、自動売買ツール作成において使い勝手が非常に良いと言えます。
暗号資産の取引経験が少ない方には、bitbankのAPIもおすすめです。
GMO同様少額取引が可能なため、万一のAPI取引失敗リスクを最小限に抑えることができます。
またスムーズなAPI実装を支援するccxtというパッケージが利用できるのは非常に魅力的です。
【Python】ビットバンク(bitbank) APIの取得|自動売買を仮想通貨・ビットコイン取引で実現する方法解説
「bitbankのAPI実装手順を知りたい」「仮想通貨の自動売買ツールを作成したい」そのような要望にお応えします。
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 | ボリンジャーバンド | オシレータ |
Python | MACD | オシレータ |
Python | RSI | オシレータ |
Python | 時系列予測モデルの構築 | 機械学習・AI |
【オシレータ】:現在の相場に対する買われすぎ・売られすぎの判断に有効
その他仮想通貨自動トレード解説記事
対応言語 | 記事名 |
---|---|
Python | 【データ収集】仮想通貨の過去データを大量取得する方法 |
Python | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
Node.js | 【初心者向け】ccxtを活用した仮想通貨の自動取引 |
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら