bitbank API でビットコイン(仮想通貨)の自動売買を行うシステムトレードプログラムを書いてみた

前にビットコイン(仮想通貨)のシステムトレードを coincheck API を使って行っていました。

 

システム構築手順はこちらに書きました。

Coincheck でビットコイン(仮想通貨)の自動売買を行うシステムトレードプログラムbot を作成してみた

成績はこちらに書きました。

ビットコイン投資でいくら儲かる? 自動売買プログラムでデイトレードした結果を公開

 

ビットコインのチャートは価格がよく動くうえに値幅が大きいのでデイトレにハマっており、着実に利益が積み重なっていたものの、最近では価格が高騰したことで暴落のリスクが高まっていることや、アルトコインのほうに大きな資金が流れていることを感じ始めていました。

どうせならビットコインではなくアルトコインに回したほうが資金効率が良さそうだという結論に至り、リップル(XRP)に切り替えてシステムトレードを行うことにしました。

 

Coincheck API だと現在はビットコインの取引しか対応していないので、アルトコインの売買もできる bitbank のAPIを使うことにしました。

ここでは、bitbank API、Ruby on Rails、Heroku を使って、ビットコイン(仮想通貨)の自動売買を行うシステムトレードプログラムを構築する手順をまとめていきます。

 

プログラミングの知識不要で自動売買ができるアプリもあります

CoinTrader アプリの詳細を見る

 

bitbank(ビットバンク)に登録

まずは仮想通貨の取引所である bitbank(ビットバンク)に登録します。

公式サイトビットバンク

 

bitbank(ビットバンク)でAPIキーを作成

ログインして、メニューから「API」をクリックし、APIページが表示されたら「APIキーの発行」をクリック

 

するとAPIキーの発行ウィンドウが現れます。

ラベルは自分のわかりやすい好きな名前をつけます。APIを何に使うか後からわかるようにしておくと良いでしょう。

権限はAPIを使ってなんの動作を行えるようにするか設定します。今回作るシステムは注文と注文履歴の確認ができるようにしたいので、「参照」と「取引」を選択しておきました。

あとは二段階認証のキーを入力し、SMS確認コードを取得して送られてきたコードを入力し、「確認する」ボタンをクリックします。

 

確認ウィンドウが表示されたら「発行する」ボタンをクリックします。

 

これでAPIキーの発行が完了です。

「閉じる」ボタンをクリックして戻ります。

 

一覧に発行したAPIキーのラベルが表示されているので、「確認」ボタンをクリックします。

 

APIキーを発行したときと同様にして、二段階認証とSMS確認コードを記入し、「確認する」ボタンをクリック

 

これでAPIキーとシークレットキーが確認できます。

シークレットキーは「表示」ボタンを押すと表示されます。

メモ

キーは外部に公開してはいけないので、取り扱い注意です。

 

それぞれのキーはあとで使うので、とりあえずここでの作業は終わりです。

 

Rails のアプリケーションを新規作成

ターミナルを開いて Heroku にログイン。

メモ

Heroku アカウントを持っていない方は作成する必要があります。

$ heroku login

 

Rails をインストール。

$ gem install rails --no-ri --no-rdoc

 

Rails アプリケーションを作成。

$ rails new myapp --database=postgresql

 

アプリケーションのディレクトリに移動。

$ cd myapp

 

Gem をインストール。

$ bundle install

 

ひとまず空のアプリケーションを Heroku へデプロイ

git でアプリケーションを管理させる。

$ git init
$ git add .
$ git commit -m "init"

 

Heroku 上でアプリケーションを新しく作成。

$ heroku create

 

Heroku へデプロイ。

$ git push heroku master

 

いちおうマイグレーションも実行しておく。

$ heroku run rake db:migrate

 

ひとまずこれで Heroku に空のアプリケーションがデプロイできました。

 

bitbank(ビットバンク)のAPIを使ってビットコインの売買注文を入れてみる

いよいよプログラムでビットコインの売買を行っていきます。

 

公式で便利なライブラリが用意されているので、それをありがたく使わせていただきます。

Gemfile に以下の行を追加。

gem 'ruby_bitbankcc'

 

追加した gem をインストール。

bundle install

 

orders タスクを追加。

rails g task orders

 

すると lib/tasks/orders.rake というファイルが作成されるので、ここに注文の処理を書いていこうと思います。

 

買い注文を入れるプログラム

50,000円で0.01BTCの買い注文を入れるソースコードを以下のように書いてみました。

最初に作成したアクセスキーやシークレットアクセスキーをこのコード内で使います。

namespace :orders do
  desc "50,000円で0.01BTCの買い注文を入れる"
  task :buy => :environment do
    bbcc = Bitbankcc.new("アクセスキー", "シークレットアクセスキー")
    response = bbcc.create_order('btc_jpy', "0.01", 50000, 'buy', 'limit')
    result = JSON.parse(response)

    if result['success'] == 1
      puts "完了!"
    end
  end
end

 

実行するとこうなります。

$ rake orders:buy

完了!

 

「完了!」と表示されれば、買い注文ができたことになります。

 

売り注文を入れるプログラム

今度は60,000円で0.01BTCの売り注文を入れるソースコードを以下のように書いてみました。

さきほどの買い注文と要領はほとんど同じ。

namespace :orders do
  desc "60,000円で0.01BTCの売り注文を入れる"
  task :sell => :environment do
    bbcc = Bitbankcc.new("アクセスキー", "シークレットアクセスキー")
    response = bbcc.create_order('btc_jpy', "0.01", 60000, 'sell', 'limit')
    result = JSON.parse(response)

    if result['success'] == 1
      puts "完了!"
    end
  end
end

 

実行するとこうなります。

$ rake orders:sell

完了!

 

「完了!」と表示されれば、売り注文ができたことになります。

 

注文を確認するプログラム

今度は現在入っている注文を確認するソースコードを以下のように書いてみました。

namespace :orders do
  desc "現在 入っている注文を確認する"
  task :check => :environment do
    bbcc = Bitbankcc.new("アクセスキー", "シークレットアクセスキー")
    response = bbcc.read_active_orders('btc_jpy')
    result = JSON.parse(response)

    result["data"]["orders"].each do |order|
      puts "#{order['order_id']} - #{order['price']} / #{order['side']}"
    end
  end
end

 

実行するとこうなります。

$ rake orders:check

1000001 - 50000.0000 / buy

1000000 - 60000.0000 / sell

 

オーダーIDと、注文価格、買い注文か売り注文かが確認できます。

 

サンプルで作った自動売買システム

以下はサンプルで作った自動売買プログラム。

50,000円で買い注文、60,000円で売り注文を交互に入れるプログラムです。

1時間に1回などの頻度で定期的に実行する想定です。

namespace :orders do
  desc "実行処理の説明"
  task :update => :environment do
    bbcc = Bitbankcc.new("アクセスキー", "シークレットアクセスキー")

    # 注文一覧を確認して、前の注文が残っている場合は何もせずに終了
    response = bbcc.read_active_orders('btc_jpy')
    result = JSON.parse(response)
    if result["data"]["orders"].count > 0
      exit
    end

    # 連続で注文するとエラーになることがあるのを回避
    sleep 1

    response = bbcc.read_ticker('btc_jpy')
    ticker = JSON.parse(response.body)
    raise 'エラー' unless ticker['success'] == 1
    last_rate = ticker['data']['last'].to_f

    # 連続で注文するとエラーになることがあるのを回避
    sleep 1

    if last_rate > 60000
    # 現在のレートが60000円を超えたら、50000円で買い注文を入れる
      response = bbcc.create_order('btc_jpy', "0.01", 50000, 'buy', 'limit')
      result = JSON.parse(response)
      raise 'エラー' unless result['success'] == 1
    elsif last_rate < 50000
    # 現在のレートが50000円を下回ったら60000円で売り注文を入れる
      response = cc.create_orders(rate: 60000, amount: "0.01", order_type: "sell")
      body = JSON.parse(response.body)
      raise 'エラー' unless body['success']
    end
  end
end

 

とりあえずAPIを組み合わせてみた例なので、実用で使う場合はもっと複雑になると思います。

 

作成したプログラムを Heroku 上で動かす

作成したプログラムを Heroku にデプロイします。

git push heroku master

 

次に、ウェブブラウザで Heroku のサイトにログインして、「Heroku Scheduler」アドオンを追加します。

このアドオンを使って、Heroku に反映した自動売買タスクを定期的に実行させることができます

 

「Heroku Scheduler」アドオンの設定ページに移動したら、タスクの実行コマンドを入力し、実行間隔を10分ごとに設定して保存します。

 

Heroku のコマンドで実行されているログを確認できます。

heroku logs -t

 

まとめ

これで自動売買を行うしくみをひととおり構築することができました。

あとは自分なりの注文条件ルールをプログラムで書いてアレンジしていくだけです。

 

ここで作成したプログラムは買いと売り注文ひとつずつしか対応していないシンプルなものですが、データベースで注文を管理することでより細かな注文に対応したシステムが構築できると思います。

あとはせっかく Ruby on Rails を使っているので、損益計算も画面で確認できるようにするなど夢が広がりますね!

 

実際にこのしくみで資産を運用しています

実際にリップル(XRP)で運用し始めたので、また機会があれば成績なども公開できればと思います。

 

Coincheck API を使ってコーディングした例もあります。

Coincheck でビットコイン(仮想通貨)の自動売買を行うシステムトレードプログラムbot を作成してみた

ビットコインで自動売買してみた結果はこちらに書きました。

ビットコイン投資でいくら儲かる? 自動売買プログラムでデイトレードした結果を公開