#初めに
GMOコイン株式会社より5月29日に参照系と更新系のAPIのリリースされたました。
できることできないこと、今後の発展などをまとめてみました。
#GMOコインのAPIでできること
Public APIは認証不要で、各通貨の価格や取引量などの情報を取得ができる。
Private APIは認証必要で自身の口座にアクセスをして情報の取得ができる。
取得できる情報は以下の通りとなる。
-
Public API
-
取引所の稼働状況
-
最新レート
-
板情報
-
取引履歴
-
Private API
-
余力情報
-
資産残高
-
注文情報取得
-
有効注文一覧
-
約定情報取得
-
最新の約定一覧
-
建玉一覧を取得
-
建玉サマリーを取得
-
注文
-
注文変更
-
注文キャンセル
-
決済注文
-
一括決済注文
-
ロスカットレート変更
##リファレンス
リファレンスではjavascriptとpythonのサンプルコードがあります。
- Node.js v10.15.3 で動作確認済みのサンプルがある
- Python 3.7.2で動作確認済みのサンプルがある
##開発環境
-
インフラ環境
-
AWS
-
CentOS7.6
-
Python 3.7.2
#Public APIのサンプルコードを試してみた
認証不要なPublic APIを利用して、現在の市場の相場RATEを見てみます。
・サンプルコード(最新レート取得)
import requests
import json
endPoint = 'https://api.coin.z.com/public'
path = '/v1/ticker?symbol=BTC'
response = requests.get(endPoint + path)
print(json.dumps(response.json(), indent=2))
});
symbolパラメータを指定しない場合、全銘柄分の最新レートを取得します。
-
symbolパラメータ
BTC ETH BCH LTC XRP BTC_JPY ETH_JPY BCH_JPY LTC_JPY XRP_JPY
※現物取引とレバレッジ取引に対応 -
実行結果
symbolはXRP_JPY
{
"status": 0,
"data": [
{
"ask": "41.72",
"bid": "41.65",
"high": "41.859",
"last": "41.665",
"low": "40.91",
"symbol": "XRP_JPY",
"timestamp": "2019-07-06T03:29:49.525Z",
"volume": "3194000"
}
],
"responsetime": "2019-07-06T03:29:50Z"
}
#Private APIのサンプルコードを試してみた
Private APIを利用して、仮想通貨の注文をしてみました。
- APIキー作成
API > APIキーを新規追加
ラベル名は任意な名前を入力、取得する情報にチェックをいれる。
今回はすべての情報を取得として、IP制限はAWSの開発環境からのみアクセスとする。
APIキーとAPIシークレットが作成されます。
- サンプルコード(注文)
import requests
import json
import hmac
import hashlib
import time
from datetime import datetime
apiKey = 'YOUR_API_KEY'
secretKey = 'YOUR_SECRET_KEY'
timestamp = '{0}000'.format(int(time.mktime(datetime.now().timetuple())))
method = 'POST'
endPoint = 'https://api.coin.z.com/private'
path = '/v1/order'
reqBody = {
"symbol": "BTC_JPY",
"side": "BUY",
"executionType": "LIMIT",
"price": "430001",
"size": "0.02"
}
text = timestamp + method + path + json.dumps(reqBody)
sign = hmac.new(bytes(secretKey.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
headers = {
"API-KEY": apiKey,
"API-TIMESTAMP": timestamp,
"API-SIGN": sign
}
res = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody))
print (json.dumps(res.json(), indent=2))
-
指定できる値
-
symbol:銘柄
-
side:買い(BUY) or 売り(SELL)
-
executionType:成行(MARKET) or 指値(LIMIT)
-
price(LIMIT指定時のみ必要):指定した値段になったら銘柄を購入
-
size : 購入する銘柄の量
-
実際に購入
テストのため、購入可能な最小値でXRPを取得します。
status0で正常に完了しました。
[root@gmo-api gmo-api]# python neworder.py
{
"status": 0,
"data": "119038592",
"responsetime": "2019-07-06T04:12:08Z"
}
- WEB取引画面で購入確認
実際にWEB取引画面でも、約定のポップアップがでて注文が確定したことが確認できます。
##自動取引について
現在のAPIリリース(V1)では決済基準となる情報が、銘柄価格のみとなるため、GMOコインで提供のAPIのみで完全自動取引に使うのは難しそうです。
理由としてはテクニカル(MACD、RSI)を利用したエントリ判断ができないため。
テクニカルの情報取得は今後APIのバージョンがあがることで、機能として追加される可能性はあるため、今後に期待しています。
半自動取引として、GMOコインの現物取引とレバレッジ取引でできない、「IFD注文」、「OCO注文」機能をAPIを利用して実装することは可能と思われます。
- IFD注文
現在価格が1XRP40円の場合に、 1XRP45円になったらBUY、1XRP50円になったら指値決済
- OCO注文
現在価格が1XRP40円の場合に、 1XRP45円になったらBUY、1XRP50円になったら指値決済、1XRP35円になったら逆指値決済
実装には、APIから取得したJSONデータをデータベースに格納して、その値をpythonプログラムが定期的に参照、約定時と価格変化したときの値を確認して決済(指値決済・逆指値決済)する処理を実装することで機能の実現が可能と考えています。
今後もGMOコインAPI機能を利用した、自動取引の実装は追って注視していこうと思います。
##現在の相場レートをLINEに通知してみる
最後に現在の仮想通貨のレートをLINEに通知してみる、プログラムを作成してみました。
LINEへの通知はLINE Notifyを利用しました。
- LINE Notify
- 実装コード
ひとまず5分間隔でcronまわしてみました。
import requests
import json
import subprocess
import re
#GMO接続
endPoint = 'https://api.coin.z.com/public'
path = '/v1/ticker?symbol=XRP_JPY'
response = requests.get(endPoint + path)
#データ成型
tmpfile = open("tmpfile", "w")
print(json.dumps(response.json(), indent=2), file=tmpfile)
tmpfile.close()
f = open('tmpfile', 'r')
response2 = f.read()
tmpfile.close()
response3 = re.findall('XRP_JPY|ask.*|bid.*', response2)
#LINE転送
def line():
url = "https://notify-api.line.me/api/notify"
token = "Fpf2nw2KWyJVwOeVJL3qngXCTNu8jDtkdRDl3InW6r3"
headers = {"Authorization": "Bearer " + token}
message = response3
payload = {"message": message}
requests.post(url, headers=headers, params=payload)
if __name__ == '__main__':
line()
- 結果