【Python学習】ビットコイン自動売買プログラム#3 ~ request.postで送信して売買要求~
こんにちは。
ビットコイン自動売買プログラム作成を進めるレオハルです。
~前回記事~
今回は、ついにコインチェックの売買をPythonで行います。
実際に売買が出来れば、あとは、儲かるロジックを考えるだけです!
それが出来れば、世の中の人みんな大儲けできるわけですが……
ともかく、まずは売買できる仕組みを構築します。
POSTメソッド
APIへアクセスするということは、HTTPでHTMLをインターネット経由で送受信していることと同じです。
HTTPで送受信する仕組みとして、GETとPOSTがあります。
GET:サーバから情報取得してくるときに使用する
POST:サーバへ情報を登録するときに使用する
だそうです。
ビットコインの購入・売却には、利用者からいくらで買うのか、何ビットコイン売るのか、などをこちらから指定する必要がるため、POSTを利用します。
パラメータの指定
公式のAPIドキュメントから、パラメータの指定方法を確認します。
今回は、現在価格を取得して、成行注文で購入することにします。
params = { 'pair': 'btc_jpy', 'order_type': 'market_buy', 'market_buy_amount': 現在価格 }
売却は、所有しているビットコインをすべて一度に売却します。
params = { 'pair': 'btc_jpy', 'order_type': 'market_sell', 'amount': 保有ビットコイン }
現在価格・保有ビットコインは、これまで利用していたAPIを駆使してどうにか設定します。
Pythonコード
リクエスト処理
認証コードをすべての機能に入れ込むのは面倒なので、関数化します。
アクセスURL:endoint
売買時のパラメータ:params(未指定の場合、None)
GET/POST切り替え:method(未指定の場合、GET)
def reqest(endpoint, params=None, method='GET'): time.sleep(1) nonce = str(int(time.time())) body = json.dumps(params) if params else '' message = nonce + endpoint + 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' } if method == 'GET': r = requests.get(endpoint,headers=headers,params=params) else: r = requests.post(endpoint, headers=headers, data=body) return r.json()
購入処理
購入時は、購入したいビットコイン量を指定してorder_buyを実行します。
def private_rate(buy_amount): params = {'order_type': 'buy', 'pair': 'btc_jpy', 'amount': buy_amount} endpoint = url+'/api/exchange/orders/rate' r=reqest(endpoint=endpoint,params=params) return r def order_buy(buy_amount): market_buy_amount =private_rate(buy_amount) buy_amount_jpy=market_buy_amount['price'] params = { 'pair': 'btc_jpy', 'order_type': 'market_buy', 'market_buy_amount': buy_amount_jpy } endpoint = url + '/api/exchange/orders' r = reqest(endpoint, params=params, method='POST') print(r)
売却処理
売却時は、order_sellを実行することで保有しているビットコインを全部売却します。
def private_balance(): endpoint = url+'/api/accounts/balance' return reqest(endpoint=endpoint) def private_position(): balance = private_balance() return {k: v for k, v in balance.items() if isinstance(v, str) and float(v)} def order_sell(): position = private_position() params = { 'pair': 'btc_jpy', 'order_type': 'market_sell', 'amount': positions['btc'] } endpoint = url + '/api/exchange/orders' r = reqest(endpoint, params=params, method='POST') print(r)
実行結果
購入時・売却時それぞれ成功すれば、下記のような応答が表示されます。
購入時
{'success': True, 'id': 4399663184, 'amount': None, 'rate': None, 'order_type': 'market_buy', 'pair': 'btc_jpy', 'created_at': '2022-02-25T09:08:09.000Z', 'market_buy_amount': '22111.07', 'stop_loss_rate': None}
売却時
{'success': True, 'id': 4399663801, 'amount': '0.005', 'rate': None, 'order_type': 'market_sell', 'pair': 'btc_jpy', 'created_at': '2022-02-25T09:08:26.000Z', 'market_buy_amount': None, 'stop_loss_rate': None}
これで、自動売買システムの基礎となる購入処理・売却処理が実装できました。
あとは、自動で売り買いするロジックと24時間稼働させればOKですね。