Goで始める仮想通貨自動取引Bot

3 min read読了の目安(約2800字

Goで仮想通貨の自動取引Botを作ってみました。
対応する取引所はbitflyerのみです。
Botの紹介をしようと思います。

免責

本記事や紹介するソースコードを利用する際は自己責任でお願いします。当方は一切の責任を負いかねます。

モチベーション

以前から作ろうかと思っていたのですが、仮想通貨が今ほど盛り上がっていない(≒ボラティリティが落ち着いていた)ときだったので、面倒くささも相まって放置していました。
少し前からまた盛り上がりを感じたので重い腰を上げて実装することにしました。

参考:ビットコインのチャート

準備

botを実装・動作させる上で必要なことは以下の通りです。

  • プログラミングの知識
    • 今回はGoですが好きな言語で良いです。
  • 仮想通貨取引の経験
    • 取引所のUIで取引を行った経験があるほうが実装しやすいと思います。
  • bitflyerの口座
    • 今回はbitflyerを利用するのでbitflyerの口座が必要です。
  • 銀行口座
    • bitflyerの口座があれば銀行口座も当然用意されているかと思います。
  • お金
    • 今回はbtc-fxで取引を行う想定のロジックを実装しましたが、ロジックを差し替えれえば現物も可能です。btc-fxで取引を行う場合は50k弱あれば十分かと思います。(2020.1月現在)
  • 確定申告する心意気
    • 夢かもしれないですが、思ったより利益が出たときは確定申告が必要なはずです。取引する前に仮想通貨取引で発生した所得の確定申告方法について調べておくと良いかと思います。

どんなbotをつくるか

トレード戦略に基づいて自動で取引をするbotを作ります。
トレード戦略といってもそのへんのプロじゃないので、テキトーな思いつきのロジックを実装するだけです。色んな戦略が世の中には転がっているので、詳しく知りたい場合は色々ググってみてください。

今回は下記の環境、条件で実装しました。

  • 取引所:bitflyer
  • 通貨:BTC/JPY
  • 取引:FX(レバレッジ1倍)
  • 実装言語:Golang

bitflyerのAPI概要

大きく分けてHTTP APIとRealtime APIの両方があります。

  • HTTP API
    • PublicなものとPrivate(認証が必須)なものがあります。
    • 資産・入出金・トレードの一通りの操作ができるエンドポイントが揃っています。
  • Realtime API
    • 板情報・Ticker(取引データ)・約上・注文譲許うなどのリアルタイム受信ができます
    • JSON-RPC2.0が採用されています。
      • Goの標準パッケージではjson-rpc1.0のみ対応なので今回は2.0対応している外部パッケージを利用しました。

取引ロジック

今回実装したロジックの概要です。

  • 売買どちらのポジションからでも取引を開始することができる。
  • 約定待ちの注文は常に1つまで。
  • 建玉が存在する場合の新規注文条件
    • 買い建玉の場合
      • 建玉価格1*1.001で売り指値の買い注文をする。
    • 売り建玉の場合
      • 建玉価格1*0.999で買い指値注文をする。
  • 建玉が存在しない時
    • 新規注文条件はBestBidSize>=BestAskSizeなら買い指値注文、逆なら売り指値注文
  • 建玉は常に1つまでを保つ。
  • bot稼働終了時は注文を全て取り下げる。(ポジション解消はしない)

こんな感じの思いつきのロジックです。
本格的なロジックは本格稼働する前に調整&稼働後に調整していくものかなと考えているので、まずは自動で売買してくれれば良しとしています。

botのソース

というわけで今回実装したものがこちらになります。

https://github.com/bmf-san/oilking

templateリポジトリにしているので触ってみたい場合はtemplate利用でprivateリポジトリ
つくると良いと思います。
実際に自分が稼働させているbotはprivateリポジトリで管理しています。

APIのリクエスト制限をちゃんと意識した実装にしていないので、稼働しつづけて運が良いとリクエスト制限にぶちあたります。
取引ロジックについてはテキトーなので言う必要ないかもしれませんが、損切を考慮していないので、稼働終了後、ポジションが残っている場合はポジションの解消を手動(bitflyerの取引画面)を行うことを忘れずに...

websocketの通信が一定時間で断絶してしまう問題があったのですが、それについてはアドホックな感じの対応(ただ再接続するだけの処理。原因がちゃんと見えていないので対応が適切といえないかもです。)をしています。

仮想通貨で自動取引botを動かす雰囲気くらいは掴めるのではないかなと思っています。
github漁るだけでももっとちゃんとしたbotがいくつか転がっているのでそういったものもぜひ見てみてください。

バックテストを用意したかったのですが、時間的都合で用意していません。。

仮想通貨取引をbotで行うことのメリット

  • 感情に左右されない。
    • システムなので基本的にはルールに忠実に取引する。
  • 理論上24時間365日取引ができる。
  • 取引画面のUI操作では難しい取引ができる。
    • ex. 手動よりも高速な注文、データに基づいたトレードロジックなど
  • 不労所得??
    • 見方によるでしょうか・・
    • 儲かるとはいってない(ry
  • 技術が実益にダイレクトに影響する
    • 技術力が高い・低いが利益に直接結びつくということではないですが、下手な実装すれば損を確実にすることもできますし、上手くやれば相場の流れに乗った有利な取引をすることができる、かもしれないです。

所感

仮想通貨のボラティリティはエキサイティングな要素の一つですが、自分の場合はあくまで趣味で、儲かる儲からないという話は二の次で、技術面の面白さを一番に感じました。

https://github.com/bmf-san/oilking