bot開発5.bifFlyerのAPI経由を使ってPythonで「注文処理」のプログラミングをしてみよう

bifFlyerの口座は開設できましたか?今回は、bifFlyerのAPI経由で「注文」処理を行ってみましょう。

bifFlyerに限らずですが、取引では「買い注文」「売り注文」「キャンセル」の3つがあります。まざまだ先ではありますが、この3つを使えるようにならないと損が膨らんでしまうプログラムになってしまいます。

Contents

注文処理を行う前に確認しておくこと

プログラムを開発する前にFXについて少し知識をつけておく必要があります。覚えてほしい欲しいキーワードは以下の通りです。

  • 証拠金
  • レバレッジ
  • 追証
  • 強制決済

証拠金
FXは通貨を取引するものです。その取引に要する資金が“証拠金”と呼ばれています。

本来1BTC300万円であった場合、1BTC欲しい場合は300万円の現物金額が必要になります。
しかし、この証拠金というのは、取引を行う資金ではなくFX会社に預け入れる資金のことであり、取引を行うために必要な担保のようなものです。

レバレッジ
直訳するとレバレッジ(Leverage)とは「てこの原理」という意味です。金融業界でレバレッジといった場合には、借り入れを利用することで、自己資金のリターン(収益)を高める効果が期待できることを指します。

50万円の資金があるとします。そこに2倍のレバレッジをかけた取引となると100万円までの取引が可能となります。少ない資金で大きな取引が可能となるのです。レバレッジ2倍の場合、2倍のスピードで利益が上がりますが、2倍のスピードで損が膨らむ場合もありますので注意が必要です。

また、日本はギャンブル性を低くするため最大レバレッジはかなり低いです。

追証
「追証(おいしょう)」とは「追加保証金」の略称で、保証金を追加で差し入れなければならない状態のことです。

マイナスがどんどん膨らんでしまって補償金以上のマイナスになってしまった場合、資金を追加で入金しなくてはいけないです。

強制決済
口座の残高が一定の割合を下回った際、強制的に反対売買(買いポジションなら売り、売りポジションなら買い)が行われる仕組みのことです。

Bitflyerではより詳細な説明がなされていますので、気になった方は目を通してもらうと仕組みが理解できます。

bitFlyerの買い注文のAPI

プログラムを書いてbitFlyerで買い注文をいれてみましょう。

bitFlyerのAPIの仕様を知る必要があります。
bitFlyerのAPIですが、何も知らない状態でみても意味がわからないと思いますので、もう少しプログラミングに慣れてからでも十分です。

買い注文のAPI仕様書(公式ドキュメント)を参考に開発していきます。
必要なパラメータは以下の通りです。

product_code

取引する通貨種類のことです。本開発は「BTC_JPY」です。

child_order_type

指値注文の場合は “LIMIT”、成行注文の場合は “MARKET” を指定します。今回は指値注文なので「LIMIT」とします。

side

買い注文の場合は”BUY”、売り注文の場合は”SELL”を指定します。

price

価格を指定します。child_order_type に”LIMIT”を指定した場合は必須です。
今回は練習ですので、ログインし、板を確認し、20%ほど乖離した値で注文をいれます。

size

注文数量を指定します。今回は、最低単位の0.01BTCだけ買いたいので、「0.01」を指定します。

他にも注文時に利用できるパラメータは多数ありますが、まずは「注文処理」のプログラミングで行う最低限だけで十分です。

買い注文のAPI仕様書(公式ドキュメント)

Pythonコード

いきなりですが、買い注文をだせるPythonコードをお見せします。

import hashlib
import hmac
import requests
import datetime
import json

# API Key入力
# 取引する時はアクティブにする
api_key = "APIキーの入力"
api_secret = "AOIシークレットの入力"

base_url = "https://api.bitflyer.jp"
path_url = "/v1/me/sendchildorder"
method = "POST"

timestamp = str(datetime.datetime.today())

# 購入を指定する
param = {
    "product_code" : "BTC_JPY",
    "child_order_type" : "LIMIT",
    "side" : "BUY",
    "price" :BITCOINの価格,
    "size" : 0.01,
}
body = json.dumps(param)

message = timestamp + method + path_url + body
signature = hmac.new(bytearray(api_secret.encode('utf-8')), message.encode('utf-8') , digestmod = hashlib.sha256 ).hexdigest()

headers = {
    'ACCESS-KEY' : api_key,
    'ACCESS-TIMESTAMP' : timestamp,
    'ACCESS-SIGN' : signature,
    'Content-Type' : 'application/json'
}

response = requests.post( base_url + path_url , data = body , headers = headers)
print( response.status_code )
print( response.json() )

プログラム初心者にはきついですよね。どんな処理が行われているのかさっぱりかもしれません。でも、今のところはいいと思います。これも慣れです。

さて、コードの説明を行います。
「いやいやさっさと動かしたいよ」
という方のために、先に動かし方を説明します。

  1. api_key = “APIキーを入力”にbitflyerlightningの管理画面で発行したAPIキーを設定
  2. api_secret = “APIシークレットを入力”にbitflyerlightningの管理画面で発行したAPIシークレットキーを設定
  3. “price” : に金額を設定
  4. pythonファイルとして保存
  5. コンソールでpythonを実行

で注文指示を出すことができます。

pythonの実行結果です。ステータス200が返ってきており、child_order_acceptance_idで注文が入ったことがわかります。

bitflyerlightningの画面です。2523434で買い注文が入っています。金額をクリックするとポップアップが表示され詳細がわかります。

pythonで実行した結果の{‘child_order_acceptance_id’: ‘JRF20220901-150053-011718’}と指値Orderの値が一致していることがわかります。
pythonで注文を出すことができました!

今は練習ですので、注文はキャンセルで構いません。「いやいや買い注文残しておきたい」というのであればそのままでも大丈夫です。

※注意:本bot開発は「文系でもわかる!BitcoinのBOT自動売買トレードの始め方」をもとに開発・自分なりの解釈用備忘録としています。


Python勉強したいのであればこれ一択


AIの技術、データ分析を身につけるにはPythonが取り組みやすいです。専門コースもあるので、まずは、気軽に問い合わせしてみてください!
技術者も多くなってきていますが、世界と戦うにはまだまだ人材不足です。高い年収を狙うなら今がチャンス!


フリーランスエンジニアが登録して欲しいエージェント


長くお世話になっているengineer-route。
単価、稼働日数、稼働時間相談も親身にのってくれます。しっかりしたサポート・コミュニケーションを交わすことで「はいってみた違った」というエンジニアあるあるを極力回避できると思います。私は当たりしかないです。