Bitcoin の FX といえば 日本最大手の仮想通貨販売所、Bitflyer ですね。(2回目)

使いやすい API も公開しており、ドキュメントも読みやすく整理されています。

例えば、Ruby のサンプルコードがこんな感じです。

# マーケット一覧の取得

require 'net/http'
require 'uri'
uri = URI.parse("https://api.bitflyer.jp")
uri.path = '/v1/markets'
uri.query = ''
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
response = https.get uri.request_uri
puts response.body

はい、長いですね笑 これでは書く気が失せてしまいます。

そこで、使いやすいように Ruby で wrapper を書いて呼び出せるようにしていたのですが、「複数のリポジトリで使えた方が便利じゃないですか?」という話があり、gem化しました!

ちなみに、上のマーケット一覧の取得であればこんな感じに書けるようになります。

require "bitflyer_api"

client = BitflyerApi.client
client.market

うん、だいぶシンプルになりましたね!どうせ書くなら楽にいこうぜ!

それでは詳細書いていきまーす!

※ gem化対応は @cohki0305 に手伝ってもらい実現しました。感謝!

トレードを始める前に

実際にBitflyerでトレードするには、まずはじめに登録が必要になります。登録がまだの方はパパッと登録を済ませてしまいましょう!

まずは登録から始めよう

 

また、botでトレードするためには、API_KEY と API_SECRET が必要になります。以下の記事で詳細な手順を紹介していますので、参考にしてください。

 

また、Ruby自体触ったことないしできるか不安という方は、以下の教材がおすすめです。

ゼロから学びたい方はこちら!

 

bitflyer-api gem でできること

Bitflyer Lightning API では、大きく分けて以下の 3 つの API を提供しています。

  1. Public API
  2. Private API
  3. Realtime API

このうち、Public API と Private API の 2 つをほぼほぼ網羅しています。
トレードと関係ない API についてはいくつか使えないものもありますが、bot 運用をするにあたっては特に問題ないレベルになっています。

おことわり

この gem の挙動が原因で、何かしら不利益を被っても、責任は取りかねます。
トレードは自己責任でお願いします!

準備

ruby はすでにインストール済みなものとします。リポジトリは以下です。

 

まずインストールします。

$ gem install bitflyer_api

Bitflyer で発行した API_KEY と API_SECRET を以下のようにします。API_KEY, API_SECRET は個人情報です。バレたら勝手にトレードされたりするので、気をつけて管理してください。

require "bitflyer_api"

BitflyerApi.configure do |config|
  config.key = "ここにAPI_KEYを入力する"
  config.secret = "ここにAPI_SECRETを入力する"
end

client = BitflyerApi.client

これで準備完了です。

HTTP Public API

Public API は、API_KEY と API_SECRET を指定することなく利用できる API です。個人情報ではなく、誰でも取得できるものになります。

以下の情報を取得することが可能です。

マーケット一覧

リクエスト

client = BitflyerApi.client

client.market

ここで取得できる product_code が、以降に出てくるメソッドの引数で指定できるものになります。
BitflyerFX で利用する場合は、 "FX_BTC_JPY" を指定してください。

板情報

リクエスト

client = BitflyerApi.client

client.board(product_code: "FX_BTC_JPY")

クエリパラメータ

  • product_code: マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。

Ticker

リクエスト

client = BitflyerApi.client

client.ticker(product_code: "FX_BTC_JPY")

クエリパラメータ

  • product_code: マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。

約定履歴

リクエスト

client = BitflyerApi.client

client.executions(product_code: "FX_BTC_JPY", count: 100, before: nil, after: nil)

クエリパラメータ

  • product_code: マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • count, before, after: ページ形式 をご参照ください。

板の状態

リクエスト

client = BitflyerApi.client

client.board_state(product_code: "FX_BTC_JPY")

クエリパラメータ

product_code: マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。

取引所の状態

リクエスト

client = BitflyerApi.client

client.health

チャット

リクエスト

client = BitflyerApi.client

client.chat(from_date: nil)

クエリパラメータ

  • from_date: 指定された日付以降の発言を取得します。省略された場合は、5 日前からの発言を返します。

HTTP Private API

Private API は、API_KEY と API_SECRET を指定することで、個人の情報を取得する API です。

個人の情報を取得するために使うため、メソッド名は my_*** といったルールにしています。

APIキーの権限を取得

リクエスト

client = BitflyerApi.client

client.my_permissions

資産残高を取得

リクエスト

client = BitflyerApi.client

client.my_balance

預入用アドレス取得

リクエスト

client = BitflyerApi.client

client.my_addresses

仮想通貨預入履歴

リクエスト

client = BitflyerApi.client

client.my_coin_ins(count: 100, before: nil, after: nil)

クエリパラメータ

仮想通貨送付履歴

リクエスト

client = BitflyerApi.client

client.my_coin_outs(count: 100, before: nil, after: nil)

クエリパラメータ

銀行口座一覧取得

リクエスト

client = BitflyerApi.client

client.my_bank_accounts(count: 100, before: nil, after: nil)

クエリパラメータ

入金履歴

リクエスト

client = BitflyerApi.client

client.my_deposits(count: 100, before: nil, after: nil)

クエリパラメータ

出金

リクエスト

client = BitflyerApi.client

client.my_withdraw(currency_code: "JPY", bank_account_id:, amount:, code: nil)

クエリパラメータ

  • currency_code: 省略可。現在は "JPY" のみ対応しているため、デフォルトで "JPY" を指定します。
  • bank_account_id: 必須。出金先の口座の id を指定します。
  • amount: 必須。出金する数量です。
  • code: 二段階認証の確認コードです。出金時の二段階認証を設定している場合のみ必要となります。

出金履歴

リクエスト

client = BitflyerApi.client

client.my_withdrawals(count: 100, before: nil, after: nil)

クエリパラメータ

新規注文を出す

リクエスト

client = BitflyerApi.client

client.my_send_child_order(product_code: "FX_BTC_JPY", child_order_type: "LIMIT", side: "BUY", price: 10,000,000, size: 0.1, minute_to_expire: 43200, time_in_force: "GTC")

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • child_order_type: 必須。指値注文の場合は "LIMIT", 成行注文の場合は "MARKET" を指定します。
  • side: 必須。買い注文の場合は "BUY", 売り注文の場合は "SELL" を指定します。
  • price: 価格を指定します。child_order_type に "LIMIT" を指定した場合は必須です。
  • size: 必須。注文数量を指定します。
  • minute_to_expire: 期限切れまでの時間を分で指定します。省略した場合の値は 43200 (30 日間) です。
  • time_in_force: 執行数量条件 を "GTC", "IOC", "FOK" のいずれかで指定します。省略した場合の値は "GTC" です。

注文をキャンセルする

リクエスト

client = BitflyerApi.client

client.my_cancel_child_order(product_code: "FX_BTC_JPY", child_order_id: 123456789, child_order_acceptance_id: nil)

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • child_order_id: キャンセルする注文の ID です。child_order_acceptance_id を指定する場合不要です。
  • child_order_acceptance_id: 新規注文を出す API の受付 ID です。指定された場合、対応する注文をキャンセルします。child_order_id を指定する場合不要です。

新規の親注文を出す(特殊注文)

リクエスト

client = BitflyerApi.client

client.my_send_parent_order(
order_method:,
minute_to_expire: 43200,
time_in_force: "GTC",
product_code: "FX_BTC_JPY",
first_condition_type:,
first_side:,
first_size:,
first_price: nil,
first_trigger_price: nil,
second_condition_type:,
second_side:,
second_size:,
second_price: nil,
second_trigger_price: nil,
third_condition_type: nil,
third_side: nil,
third_size: nil,
third_price: nil,
third_trigger_price: nil,
size:,
offset: nil
)

クエリパラメータ

  • order_method: 注文方法です。以下の値のいずれかを指定してください。
  • "IFD": IFD 注文を行います。一度に 2 つの注文を出し、最初の注文が約定したら 2 つめの注文が自動的に発注される注文方法です。
  • "OCO": OCO 注文を行います。2 つの注文を同時に出し、一方の注文が成立した際にもう一方の注文が自動的にキャンセルされる注文方法です。
  • "IFDOCO": IFD-OCO 注文を行います。最初の注文が約定した後に自動的に OCO 注文が発注される注文方法です。
  • minute_to_expire: 期限切れまでの時間を分で指定します。省略した場合の値は 43200 (30 日間) です。
  • time_in_force: 執行数量条件 を "GTC", "IOC", "FOK" のいずれかで指定します。省略した場合の値は "GTC" です。
  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • first_condition_type: 必須。親注文のうち、一番はじめに注文する condition_type です。以下の値のうちいずれかを指定してください。
    • "LIMIT": 指値注文。
    • "MARKET" 成行注文。
    • "STOP": ストップ注文。
    • "STOP_LIMIT": ストップ・リミット注文。
    • "TRAIL": トレーリング・ストップ注文。
  • first_side: 必須。親注文のうち、一番はじめに注文する side です。買い注文の場合は "BUY", 売り注文の場合は "SELL" を指定します。
  • first_size: 必須。注文数量を指定します。
  • first_price: 必須。親注文のうち、一番はじめに注文する price です。注文数量を指定します。
  • first_trigger_price: 親注文のうち、一番はじめに注文する trigger_price です。ストップ注文のトリガー価格を指定します。 condition_type に "STOP" または "STOP_LIMIT" を選んだ場合は必須です。
  • second_*, third_*: 2番目, 3番目の注文の設定です。それぞれ、first_* の説明をお読みください。

親注文をキャンセルする

リクエスト

client = BitflyerApi.client

client.my_cancel_parent_order(product_code: "FX_BTC_JPY", parent_order_id: nil, parent_order_acceptance_id: nil)

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • child_order_id: キャンセルする注文の ID です。child_order_acceptance_id を指定する場合不要です。
  • child_order_acceptance_id: 新規注文を出す API の受付 ID です。指定された場合、対応する注文をキャンセルします。child_order_id を指定する場合不要です。

すべての注文をキャンセルする

リクエスト

client = BitflyerApi.client

client.my_cancel_all_child_orders(product_code: "FX_BTC_JPY")

注文の一覧を取得

リクエスト

client = BitflyerApi.client

client.my_child_orders(product_code: "FX_BTC_JPY", count: 100, before: nil, after: nil, child_order_state: nil, child_order_id: nil, child_order_acceptance_id: nil, parent_order_id: nil)

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • count, before, after: ページ形式 をご参照ください。
  • child_order_state: 指定された場合、child_order_state がその値に一致する注文のみを返します。 指定されない場合、 ACTIVE な注文とそうでない注文の一覧を連結したものを返します。次のいずれかを指定します。
    • ACTIVE: オープンな注文の一覧を取得します。
    • COMPLETED: 全額が取引完了した注文の一覧を取得します。
    • CANCELED: お客様がキャンセルした注文です。
    • EXPIRED: 有効期限に到達したため取り消された注文の一覧を取得します。
    • REJECTED: 失敗した注文です。
  • child_order_id, child_order_acceptance_id: 指定した ID に一致する注文を取得できます。
  • parent_order_id: 指定された場合、その親注文に関連付けられている注文の一覧を取得します。

親注文の一覧を取得

リクエスト

client = BitflyerApi.client

client.my_parent_orders(product_code: "FX_BTC_JPY", count: 100, before: nil, after: nil, parent_order_state: nil)

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • count, before, after: ページ形式 をご参照ください。
  • parent_order_state: 指定された場合、parent_order_state がその値に一致する注文のみを返します。次のいずれかを指定します。
    • ACTIVE: オープンな注文の一覧を取得します。
    • COMPLETED: 全額が取引完了した注文の一覧を取得します。
    • CANCELED: お客様がキャンセルした注文です。
    • EXPIRED: 有効期限に到達したため取り消された注文の一覧を取得します。
    • REJECTED: 失敗した注文です。

親注文の詳細を取得

リクエスト

client = BitflyerApi.client

client.my_parent_order(parent_order_id: nil, parent_order_acceptance_id: nil)

クエリパラメータ

  • parent_order_id: 対象の親注文の ID です。child_order_acceptance_id を指定する場合不要です。
  • parent_order_acceptance_id: 新規の親注文を出す API の受付 ID です。指定された場合、対応する親注文の詳細を返します。parent_order_id を指定する場合不要です。

約定の一覧を取得

リクエスト

client = BitflyerApi.client

client.my_executions(product_code:, count: 100, before: nil, after: nil, child_order_id: nil, child_order_acceptance_id: nil)

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。
  • count, before, after: ページ形式 をご参照ください。
  • child_order_id: 省略可能。指定された場合、その注文に関連する約定の一覧を取得します。
  • child_order_acceptance_id: 省略可能。新規注文を出す API の受付 ID です。指定された場合、対応する注文に関連する約定の一覧を取得します。

建玉の一覧を取得

リクエスト

client = BitflyerApi.client

client.my_positions(product_code: "FX_BTC_JPY")

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。

証拠金の変動履歴を取得

リクエスト

client = BitflyerApi.client

client.my_collateral_history(count: 100, before: nil, after: nil)

クエリパラメータ

取引手数料を取得

リクエスト

client = BitflyerApi.client

client.my_trading_commission(product_code: "FX_BTC_JPY")

クエリパラメータ

  • product_code: 必須。マーケット一覧で取得できる product_code を指定してください。BitflyerFX で利用する場合は、 FX_BTC_JPY を指定してください。デフォルトは BTC_JPY です。

Realtime API

未対応です。希望があれば対応しますが、今のところ対応予定はありません。

まとめ

BTCFX を bot で運用するのは、「自動でお金儲けできるー!やったー!」というものではありません。
そのとき調子がよかったからといって、時間が経てば通用しなくなったりします。

ただ、コードを書いて、bot 運用を任せることによって、自分がはじめに考えたルールに則って売り買いしてくれます。一定のルールのトレードさえしてくれれば、何が悪かったか分析することは可能ですし、作り上げていった bot が利益をあげてくれたときは、誰かから購入したbotで利益をあげてくれるのとは違い、心底!嬉しいものです!

金欲しさの欲望に身を任せるのもいいですが、ゲームを攻略する気分になって bot を作った方が楽しいトレードができると僕は思っています。

心身ともに健康なトレードを!珍獣でした!

 

※ まだ触るのが不安な方は、以下の動画からはじめてみるのがおすすめです。

 

ゼロから学びたい方はこちら!