【自動売買Bot作成4】適当に成行で買ってみる

では買ってみましょう。
買うためのコードを確認するため、とりあえず適当に成行で買います。

取引所はbitFlyerで、通貨はイーサリアムとします。
背景や前提については、以下のカテゴリーページをご覧ください。

目次

注意事項

  • 本サイトで掲載されている評価や感想等は、あくまでサイト運営者の主観であり、広告主に保証されたものではありません。
  • 暗号資産(仮想通貨)取引は、元本を保証するものでなく、価格変動により損失が生じるリスクがあります。
    お取引される際には、取引内容をよく理解し、ご自身の判断で行ってください。

APIキーを入力するためのファイルを作成する

いつものフォルダにファイルを作成して、取得したAPIキーを以下のように入力します。
ファイル名は「credential.py」としました。

api_key = '**************'
api_secret = '********************'

ちゃんと書いて公開すると大変なことになるので、「*」にしてますが、みなさんは取得したAPIキーとAPIシークレットを入力してください。
もちろん下に載せる、買うためのコードに直接書いてもいいのですが、私がマスクするのを忘れてそのまま公開してしまうリスクを避けるため、今後もこの方式とさせていただきます。

ファイルを作成する

買うためのコードを書くファイルを作成してください。
私は「buy_market.py」としました。

サンプルコード

import credential
import requests
import json
import time
import hmac
import hashlib

url = 'https://api.bitflyer.com'
product_code = 'ETH_JPY'

path_sendorder = '/v1/me/sendchildorder'
method = 'POST'
pre_buy_body = {
    'product_code': product_code,
    'child_order_type': 'MARKET',
    'side': 'BUY',
    'size': 0.01
}
buy_body = json.dumps(pre_buy_body)

access_key = credential.api_key
access_timestamp = str(int(time.time()))
text = access_timestamp + method + path_sendorder + buy_body
access_sign = hmac.new(
    bytearray(credential.api_secret.encode('utf-8')),
    text.encode('utf-8'),
    digestmod = hashlib.sha256
).hexdigest()

headers = {
    'ACCESS-KEY': access_key,
    'ACCESS-TIMESTAMP': access_timestamp,
    'ACCESS-SIGN': access_sign,
    'Content-Type': 'application/json'
}

result_sendorder = requests.post(
    url + path_sendorder,
    data = buy_body,
    headers = headers
).json()

print(result_sendorder)

購入に必要な金額について

上記を実行すると、成行で買ってしまうため、購入にかかる金額を書いておきます。

以下を見ると、「Lightning 現物」の「ETH/JPY」の最小発注数量が「0.01」となっています(※2022/3/12時点)。

注文数量について | 仮想通貨ビットコイン(Bitcoin)の購入/販売所/取引所【bitFlyer(ビットフライヤー)】

私が購入した時点(2022年3月初旬)の「ETH/JPY」のレートは、「304,325」のため、

304,325 × 0.01 = 3,043.325(円)

で、だいたい「3,000円」ぐらい必要という計算になります。

みなさんが購入する際も、通貨の注文数やレートから必要な金額を計算して、問題ない金額であることを確認してからコードを実行してください。

実行結果

{'child_order_acceptance_id': 'JRF20220306-072234-084896'}

実行結果はこんな感じで、IDしか返ってきません。

このIDは次回の記事などで利用するため、どこかにメモしておいてください。

これ、公開しても大丈夫ですよね・・・?

説明

では素人が説明していきましょう。

モジュールインポート

import credential
import requests
import json
import time
import hmac
import hashlib

一番上のcredentialは、APIキーを入力したファイルを使用するためにインポートしています。
ファイル名の「.py」を除いたものになるため、ファイル名が私と違う場合は変更してください。

2行目以降は、まぁ下のコードで利用するためインポートします。

変数設定1

url = 'https://api.bitflyer.com'
product_code = 'ETH_JPY'

まぁこれは説明する必要ないかと。

変数設定2

path_sendorder = '/v1/me/sendchildorder'
method = 'POST'
pre_buy_body = {
    'product_code': product_code,
    'child_order_type': 'MARKET',
    'side': 'BUY',
    'size': 0.01
}
buy_body = json.dumps(pre_buy_body)

成行で買うための変数を、以下の公式ドキュメントを確認して設定します。

公式APIドキュメントの「新規注文を出す」箇所

15行目の「child_order_type」を「MARKET」にすると、成行になります。
LIMIT」にすれば指値で注文ができるようです。
指値にすると「price」などのパラメータが必要になるため、公式ドキュメントをご確認ください。

変数設定3

access_key = credential.api_key
access_timestamp = str(int(time.time()))
text = access_timestamp + method + path_sendorder + buy_body
access_sign = hmac.new(
    bytearray(credential.api_secret.encode('utf-8')),
    text.encode('utf-8'),
    digestmod = hashlib.sha256
).hexdigest()

これは「Private API」を利用するための変数設定です。
新規注文や資産残高を確認するためには、「Private API」を使います。

前回やった、現在のレートを確認するようなものは「Public API」として定義されています。

Private API」の利用には、以下の公式ドキュメントに書かれているように、「認証」が必要になります。

公式APIドキュメントの「認証」箇所

その「認証」のために必要な情報を生成しています。
別のファイルで定義したAPIキーとAPIシークレットをここで使っています。

変数設定4

headers = {
    'ACCESS-KEY': access_key,
    'ACCESS-TIMESTAMP': access_timestamp,
    'ACCESS-SIGN': access_sign,
    'Content-Type': 'application/json'
}

公式ドキュメントの「認証」に書かれているように、上の「変数設定3」で生成した情報をHTTPリクエストヘッダに含める必要があるため、さらに変数設定をしています。

API実行と結果出力

result_sendorder = requests.post(
    url + path_sendorder,
    data = buy_body,
    headers = headers
).json()

print(result_sendorder)

ここまで散々やってきた変数を使って、APIを実行します。
返ってきた結果も変数に入れて出力しています。

最後に

これで買いの注文は出したのですが、いくらで買ったのかなどの情報がありません。
次回はそれを確認します。

なお、bitFlyerホームの「資産状況」を見ると、通貨が購入されていることがわかると思います。
また、「bitFlyer Lightning」の画面下に「取引履歴」の枠があるので、それを見るといくらで購入したのかなどもわかります。

本シリーズの一覧ページは以下にまとめています。

それでは。

  • URLをコピーしました!

コメント

コメントする

目次