【仮想通貨の自動売買を目指して】PythonでGMOコイン API
はじめに
仮想通貨の自動売買に向けて、Python から API で GMO コインでの売買ができるようにします。
bitFlyer の API に関しては下記を参考にしてください。
【仮想通貨の自動売買を目指して】PythonでbitFlyer API
はじめに 仮想通貨の自動売買に向けて、PythonからAPIでbitFlyerの売買ができるよう
bitFlyer は SFD の手数料がきつかったので、今回は GMO コインについても使えるようにしていきます。
unknown linkGMO コインの API
GMO コインの API は Public API と Private API があります。
それぞれの API の特徴は下記の通りです。
API | 認証 | できること |
---|---|---|
Public API | あり | 誰でも確認できる情報の取得(板情報など) |
Private API | なし | 個人アカウントに関する操作(注文や資産残高確認など) |
Private API の API キーの取得
Private API を使うためには、API Key と API Secret を作成する必要があります。
GMO コインからログインして、メニューから「API」を選択します。
「API キーを新規追加」をクリックします。
API キーを使って操作できる権限を選択して、API Key と API Secret を作成します。
API Key と API Secret の取り扱いには注意しましょう。
Python で GMO コイン API
基本的には、ドキュメントにいくつかの言語でのサンプルコードが記載されているので、そちらを参考に実装が可能です。
暗号資産のAPIドキュメント| GMOコイン
GMOコインが提供する暗号資産のAPIのドキュメントページです。認証不要のPublic APIと、APIキーによる認証が必要なPrivate APIをご提供。価格の自動取得や、取引所サービス(現物取引とレバレッジ取引)での自動取引(Botトレード)などにご利用いただけます。GMOインターネットグループの暗号資産FX・売買サービス、GMOコイン。
ここでは、よく使いそうな 2 つの API を紹介します。
ローソク足の取得(Public API)
ローソク足の取得は下記になります。YYYYMMDD
もしくはYYYY
で日付を指定して、その日付のローソク足を取得してくれます。
1import requests
2import json
3
4endPoint = 'https://api.coin.z.com/public'
5path = '/v1/klines'
6symbol = "BTC_JPY"
7date = "20230601"
8interval = "15min"
9params = {"symbol": symbol, "interval": interval, "date": date}
10
11response = requests.get(endPoint + path, params).json()
12print(json.dumps(response))
注文(Private API)
注文は下記になります。注文は Private API なので、API Key と API Secret が必要になります。
1import requests
2import json
3import hmac
4import hashlib
5import datetime
6
7apiKey = 'YOUR_API_KEY'
8secretKey = 'YOUR_SECRET_KEY'
9
10timestamp = datetime.datetime.now().date().strftime('%Y%m%d')
11method = 'POST'
12endPoint = 'https://api.coin.z.com/private'
13path = '/v1/order'
14reqBody = {
15 "symbol": "BTC_JPY",
16 "side": "BUY",
17 "executionType": "MARKET",
18 "size": "0.01"
19}
20
21text = timestamp + method + path + json.dumps(reqBody)
22sign = hmac.new(bytes(secretKey.encode('ascii')), bytes(text.encode('ascii')), hashlib.sha256).hexdigest()
23
24headers = {
25 "API-KEY": apiKey,
26 "API-TIMESTAMP": timestamp,
27 "API-SIGN": sign
28}
29
30response = requests.post(endPoint + path, headers=headers, data=json.dumps(reqBody)).json()
31print (json.dumps(response))
気になった点
少し使ってみた中で気になった点をまとめます。
日付の切り替えのタイミング
まず、日付の切り替えのタイミングです。
ドキュメントにも記載されてますが、日付の切り替えは日本時間の朝 6:00になります。つまり、20230601
という日付を指定した場合は、2023/06/01 06:00 ~ 2023/06/02 05:45
のデータを取得することになります。