Python×ビットコイン自動売買

#10 Python×ビットコイン自動売買 | Pythonを使ってビットコインを購入しよう!

market-order-bitcoin-using-api

こんにちは、はやたす(@hayatasuuu )です。

前回の記事では、Pythonを使ってビットコインの指値注文をおこないました。

前回の記事はこちら

python-bitcoin-limit-order
#9 Python×ビットコイン自動売買 | Pythonを使ってビットコインを指値注文しよう!こんにちは、はやたす(@hayatasuuu )です。 前回の記事では、認証情報の設定と口座残高の取得をおこないました。 前...

今回は指値ではなく成行注文を入れて、ビットコインを実際に購入してみたいと思います。

例によって、発注するためのAPIを使うには、口座に資金を入れる必要があります。
もし残高が入っていなかったり、不足したりしている場合には、先に入金しておきましょう。

※コインチェックのアカウントを持っていない場合は、まず口座開設(無料)しましょう!
»公式ページ : 仮想通貨取引所・販売所の口座開設|Coincheck(コインチェック)

また第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: buyorder_type: market_buyに変更
  • rateamount → 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_amountorder_typeを確認すると、パラメータ設定したとおりの成行注文が入っていますね!

STEP⑤ : コインチェックで注文内容を確認

念のためコインチェックのTraderViewで、いま発注した成行注文を確認してみましょう。

market-order-bitcoin-using-api1

2つのポジションに分かれていますが、しっかり25,500円分のBTCを購入できていますね。

前回の指値注文時は、TraderViewから注文を取り消ししました。
でも今回は、あとあとPythonからビットコインの売却をしたいので、このままホールドしておきます。

補足 : Pythonでビットコインの枚数を確認する

Pythonを使ってビットコインの保有枚数と日本円残高を確認するには、第8回目で学習したAPIを使う必要があります。

python-bitcoin-balance
#8 Python×ビットコイン自動売買 | 認証情報を設定して口座残高を取得してみよう!こんにちは、はやたす(@hayatasuuu )です。 前回の記事では、API Keyの取得と設定ファイルの準備をおこないました。...

第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を使って今回購入したビットコインを売却していきます。
ここまでできると、自動売買に必要なピースは揃ってきます。

というわけで、ぜひ次回も楽しんでいきましょう!

第11回目の記事はこちら

sell-bitcoin-using-api
#11 Python×ビットコイン自動売買 | Pythonを使ってビットコインを売却しよう!こんにちは、はやたす(@hayatasuuu )です。 前回の記事では、Pythonを使ってビットコインを購入してみました。 ...

トップページはこちら

python-bitcoin-auto-trade
Python×ビットコイン自動売買 | 初心者でも理解できる入門講義『Pythonを使ったビットコインの自動売買って、どうやって実装するんだろう...。分かりやすく書かれている入門記事はないかな〜。』このような悩みを解決する記事になっています。Pythonを使ったビットコインの自動売買を学んでみたい人は必見です。...