こんにちは、はやたす(@hayatasuuu )です。
第10回目の本記事では、Pythonを使ってビットコインを購入していきたいと思います。
前回の記事 : #9 Python×ビットコイン自動売買 | Pythonを使ってビットコインを指値注文しよう!
今回は指値ではなく成行注文を使います。
例によって、新規発注するためには、口座に資金を入れる必要があります。
もし残高がなかったり不足したりしている場合は、先に入金しておきましょう。
また、第1回目でも書きましたが、学習を進めていく中で投資における損失リスクがあります。こちらで責任は取りかねますので、必ず自己責任の範囲で学習をお願いします。
Pythonを使ってビットコインを購入しよう!
前回の記事で書いた指値注文のためのコードは、以下のようになっていました。
import hmac
import hashlib
import json
import time
from pprint import pprint
import configparser
import requests
conf = configparser.ConfigParser()
conf.read('config.ini')
ACCESS_KEY = conf['coincheck']['access_key']
SECRET_KEY = conf['coincheck']['secret_key']
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/exchange/orders'
nonce = str(int(time.time()))
params = {
'pair': 'btc_jpy',
'order_type': 'buy',
'rate': '3000000',
'amount': '0.005'
}
body = json.dumps(params)
# body = ''
message = nonce + url + body
signature = hmac.new(SECRET_KEY.encode(),
message.encode(),
hashlib.sha256).hexdigest()
headers = {
'ACCESS-KEY': ACCESS_KEY,
'ACCESS-NONCE': nonce,
'ACCESS-SIGNATURE': signature,
'Content-Type': 'application/json'
}
# r = requests.get(url, headers=headers)
r = requests.post(url, headers=headers, data=body)
r = r.json()
pprint(r)
今回は「指値」が「成行」に変わるだけなので、上記のコードを少し編集すれば完成です。
具体的にいうと、以下のパラメータだけ変更することになります。
order_type
:buy
からmarket_buy
に変更rate
とamount
→market_buy_amount
に変更
順番に見ていきましょう。
STEP① : 注文方法とパラメータの確認
注文方法(=order_type)は、以下の4つありました。
- buy : 指値注文 現物取引 買い
- sell : 指値注文 現物取引 売り
- market_buy : 成行注文 現物取引 買い
- market_sell : 成行注文 現物取引 売り
今回は「これらの注文方法でmarket_buy(成行買い)
を選ぶ」ということになります。
成行注文で必要なパラメータは以下のとおりです。
- pair : 通貨ペア(※必須)
- order_type : 注文方法(※必須)
- market_buy_amount : 使用する日本円の金額(※必須)
- stop_loss_rate : 逆指値レート・ストップロス
成行注文は「使用する日本円」を指定すると、勝手にビットコインの枚数を決定してくれます。(※ただし、指値同様に0.005BTCを下回る注文はできません!)
URLの変更はないので、前回のコードでパラメータだけ変更してあげましょう。
STEP③ : パラメータの設定
この記事を書いている時点で、1BTCが約5,100,000円になっています。
もし本記事を読んでいる時点で、「1BTC=5,100,000円」のままなら最低金額は「25,500円」です。
25,500円(最低必要金額) = 5,100,000円(値段) × 0.005BTC(最低取引量)
ゆえに最小ロットで成行注文をかけるなら、以下のようにパラメータ設定します。
params = {
'pair': 'btc_jpy',
'order_type': 'market_buy',
'market_buy_amount': '25500'
}
0.005BTCを下回ると、指値注文と同じで以下のようなエラーになります。
{'error': 'Amount 量が最低量(0.005 BTC)を下回っています', 'success': False}
STEP④ : POSTメソッドでAPIにアクセス
これでコードは完成です。以下が全体像になります。
import hmac
import hashlib
import json
import time
from pprint import pprint
import configparser
import requests
conf = configparser.ConfigParser()
conf.read('config.ini')
ACCESS_KEY = conf['coincheck']['access_key']
SECRET_KEY = conf['coincheck']['secret_key']
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/exchange/orders'
nonce = str(int(time.time()))
params = {
'pair': 'btc_jpy',
'order_type': 'market_buy',
'market_buy_amount': '25500'
}
body = json.dumps(params)
# body = ''
message = nonce + url + body
signature = hmac.new(SECRET_KEY.encode(),
message.encode(),
hashlib.sha256).hexdigest()
headers = {
'ACCESS-KEY': ACCESS_KEY,
'ACCESS-NONCE': nonce,
'ACCESS-SIGNATURE': signature,
'Content-Type': 'application/json'
}
# r = requests.get(url, headers=headers)
r = requests.post(url, headers=headers, data=body)
r = r.json()
pprint(r)
上記のコードを実行すると、以下のような出力になるはずです。
{'amount': None,
'created_at': '2021-02-15T23:29:26.000Z',
'id': 3125356737,
'market_buy_amount': '25500.0',
'order_type': 'market_buy',
'pair': 'btc_jpy',
'rate': None,
'stop_loss_rate': None,
'success': True}
market_buy_amount
やorder_type
を確認すると、パラメータで設定したとおりに成行注文が入っていますね!
STEP⑤ : コインチェックで注文内容を確認
念のためコインチェックのTraderViewで、いま発注した成行注文を確認してみましょう。
注文が2つに分かれていますが、しっかり25,500円分のBTCを購入できていますね。
前回の指値注文時は、TraderViewから注文を取り消ししました。
でも今回はPythonを使ってビットコインの売却をしたいので、このままホールドしておきます。
補足 : Pythonでビットコインの枚数を確認する
Pythonを使ってビットコインの保有枚数と日本円残高を確認するには、第8回目で紹介したAPIを使う必要があります。
第8回目のコードをコピペして、残高情報を取得してみましょう。表示を分かりやすくするため、出力部分だけ変更してあります。
import hmac
import hashlib
import time
from pprint import pprint
import configparser
import requests
conf = configparser.ConfigParser()
conf.read('config.ini')
ACCESS_KEY = conf['coincheck']['access_key']
SECRET_KEY = conf['coincheck']['secret_key']
BASE_URL = 'https://coincheck.com'
url = BASE_URL + '/api/accounts/balance'
nonce = str(int(time.time()))
body = ''
message = nonce + url + body
signature = hmac.new(SECRET_KEY.encode(),
message.encode(),
hashlib.sha256).hexdigest()
headers = {
'ACCESS-KEY': ACCESS_KEY,
'ACCESS-NONCE': nonce,
'ACCESS-SIGNATURE': signature,
'Content-Type': 'application/json'
}
r = requests.get(url, headers=headers)
r = r.json()
# 以下だけ変更
# pprint(r)
print('JPY: ', r['jpy'])
print('BTC: ', r['btc'])
入金額によって表示される金額は変わりますが、コードを実行すると以下のような出力になるはずです。
JPY: 24512.84920736
BTC: 0.00500736
これでビットコインの保有枚数を確認できるようになりました。
「もしビットコインを持っていなかったら購入する」というロジックを組む場合には、if r['btc'] == 0:
と書けば良さそうですね。
まとめ : Pythonを使ってビットコインを購入しよう!
というわけで、今回はPythonを使ってビットコインを購入しました。
少しずつ自動売買に近づいてきて、楽しくなってきたのではないでしょうか。
次回の記事では、Pythonを使って今回購入したビットコインを売却していきます。
ここまでできると、自動売買に必要なピースは揃ってきます。
というわけで、ぜひ次回も楽しんでいきましょう!