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

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

sell-bitcoin-using-api

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

前回の記事では、PythonでAPIを操作して、ビットコインを購入しました。

»前回の記事 : #10 Python×ビットコイン自動売買 | Pythonを使ってビットコインを購入しよう!

 

今回は、前の記事で購入しておいたビットコインを売却してみたいと思います。

つまり、この記事まで学習していただくと、Pythonを使ったビットコインの購入から売却までできるようになります。

さらに、以前の記事で学習した「ビットコインの最新価格を取得する」ロジックを使ってあげれば、簡易的な自動売買モデルを作成できるはずです。

それでは今回も頑張っていきましょう!

 

Pythonを使ってビットコインを売却しよう!

Pythonを使ったビットコインの売却は、購入で書いたコードとほとんど変わりません。

なので、第10回目で書いていた以下のコードを使っていきましょう。

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)

 

先に結論を言ってしまうと、上記のコードでmarket_buyになっている部分をmarket_sellにするだけですね。

STEP① : 売却で必要なパラメータの確認

成行の買い(=market_buy)を注文するときは、以下のパラメータが必要でした。

  • pair : 通貨ペア(※必須)
  • order_type : 注文方法(※必須)
  • market_buy_amount : 使用する日本円の金額(※必須)
  • stop_loss_rate : 逆指値レート・ストップロス

 

それに対して、成行の売り(=market_sell)をかける場合には、以下のパラメータが必要になります。

  • pair : 通貨ペア(※必須)
  • order_type : 注文方法(※必須)
  • amount : 指定した通貨ペアを売却する量(※必須)
  • stop_loss_rate : 逆指値レート・ストップロス

少しややこしいのですが、成行で買いを入れるときは「日本円」を指定していたのに対して、売り注文するときは「ビットコインの枚数」を指定する必要があります。

STEP③ : パラメータの設定

というわけで、売り注文をするためのパラメータ設定をしていきましょう。

売りで指定するビットコインの枚数は、前回の記事で取得した値をハードコーディングしましょう。全量売却するためのロジックは、のちの記事で組んでいきます。

»前回の記事 : #10 Python×ビットコイン自動売買 | Pythonを使ってビットコインを購入しよう!

 

僕の場合だと”0.00500736BTC”になっていたので、以下のようにパラメータ設定します。

params = {
    'pair': 'btc_jpy',
    'order_type': 'market_sell',
    'amount': '0.00500736'
}

 

これで準備が整いました。

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_sell',
    'amount': '0.00500736'
}

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': '0.00500736',
 'created_at': '2021-02-16T13:41:58.000Z',
 'id': 3127242874,
 'market_buy_amount': None,
 'order_type': 'market_sell',
 'pair': 'btc_jpy',
 'rate': None,
 'stop_loss_rate': None,
 'success': True}

 

order_type=sellamount=0.00500736なので、指定したとおりの成行注文が入っていそうですね!

念のためTraderViewでも確認してみます。

sell-bitcoin-using-api1

しっかり売り注文が入っていて、残高がJPY(日本円)だけになっているかと思います。

僕の場合は、もともと50,000円入金していたので、445円だけプラスになりました!

 

まとめ : Pythonを使ってビットコインを売却しよう!

というわけで、今回はPythonを使ってビットコインの売却をしました。ここまで分かれば、あとは売買判定のロジックを組んであげるだけです。

ただ、あと1つ重要なAPIがあるので、それを最後に紹介していきたいと思います。次回まで学習していただくと、APIの取り扱いは十分慣れている状態になるはずです。

というわけで、あと少しだけ基礎学習を頑張っていきましょう!