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

先日から実はビットコイン(仮想通貨)のシステムトレード(シストレ)も試験的に始めてみました。

ビットコインのチャートは前からちょくちょく見ていて、たまに売買していたのですが、値段がよく動くうえに値幅が大きいので、デイトレにもハマるんじゃないかと思いながら観察していたのです。

 

いちおうこれならなんとかなりそうだ、というルールを思いついてさっそく試してみようと思い立ったのですが、しかし丸1日チャートを見続けるのはカラダによくない! そんな時間もない!

というわけで自動売買を行うシステムトレード(シストレ)の bot を作って運用してみることにしました。

 

ビットコインの取引所「Coincheck」では親切なことにAPIが用意されており、プログラムが書ける人ならそれほど手間がかからずに自動売買システムがすぐ作れちゃいます。

Ruby on Rails、Heroku を使ってかんたんな自動売買システムを作ってみたので、その手順をまとめます。

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

CoinTrader アプリの詳細を見る

 

Coincheck に登録

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

 

Coincheck でAPIキーを作成

ログインして、「設定」→「APIキー」ページに移動します。

 

API追加ボタンを押すと、パーミッションの設定をする画面が現れます。

ここでAPIを使ってなんの操作を行えるようにするかを設定

とりあえず今回作るシステムは注文と注文履歴の確認さえできれば良いので、注文の項目にあるものだけすべてチェックしました。

 

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 に空のアプリケーションがデプロイできました。

 

coincheck のAPIを使ってビットコインの売買注文を入れてみる

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

 

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

Gemfile に以下の行を追加。

gem 'ruby_coincheck_client'

 

追加した 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
    cc = CoincheckClient.new("アクセスキー", "シークレットアクセスキー")
    response = cc.create_orders(rate: "50000", amount: "0.01", order_type: "buy")
    body = JSON.parse(response.body)

    if body['success']
      puts "完了!"
    end
  end
end

 

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

$ rake orders:buy

完了!

 

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

 

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

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

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

namespace :orders do
  desc "60,000円で0.01BTCの売り注文を入れる"
  task :sell => :environment do
    cc = CoincheckClient.new("アクセスキー", "シークレットアクセスキー")
    response = cc.create_orders(rate: "50000", amount: "0.01", order_type: "sell")
    body = JSON.parse(response.body)

    if body['success']
      puts "完了!"
    end
  end
end

 

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

$ rake orders:sell

完了!

 

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

 

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

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

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

    body['orders'].each do |order|
      puts "#{order['id']} - #{order['order_type']}"
    end
  end
end

 

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

$ rake orders:check

123456789 - buy

111111111 - sell

 

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

 

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

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

50,000円で買い注文、60,000円で売り注文を入れて、注文がなくなったら同じ注文を入れ直すプログラムです。

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

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

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

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

    # 50000円で買い注文を入れる
    response = cc.create_orders(rate: 50000, amount: "0.01", order_type: "buy")
    body = JSON.parse(response.body)
    raise 'エラー' unless body['success']

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

    # 60000円で売り注文を入れる
    response = cc.create_orders(rate: 60000, amount: "0.01", order_type: "sell")
    body = JSON.parse(response.body)
    raise 'エラー' unless body['success']
  end
end

 

あとで気づいたけど買い注文が約定していないのに、売り注文入れられないですね。サンプルなので細かいところは気にせずに……。

あらかじめいくらかビットコインを持っている状態でスタートさせればいちおう動きます。

 

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

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

git push heroku master

 

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

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

 

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

 

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

heroku logs -t

 

まとめ

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

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

 

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

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

 

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

CoinTrader アプリの詳細を見る

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

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

ビットコインのデイトレも試してみました。

仮想通貨投資をやったら1晩で5,000円の利益。ビットコインのチャートでデイトレしてみた結果

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

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