先日から実はビットコイン(仮想通貨)のシステムトレード(シストレ)も試験的に始めてみました。
ビットコインのチャートは前からちょくちょく見ていて、たまに売買していたのですが、値段がよく動くうえに値幅が大きいので、デイトレにもハマるんじゃないかと思いながら観察していたのです。
いちおうこれならなんとかなりそうだ、というルールを思いついてさっそく試してみようと思い立ったのですが、しかし丸1日チャートを見続けるのはカラダによくない! そんな時間もない!
というわけで自動売買を行うシステムトレード(シストレ)の bot を作って運用してみることにしました。
ビットコインの取引所「Coincheck」では親切なことにAPIが用意されており、プログラムが書ける人ならそれほど手間がかからずに自動売買システムがすぐ作れちゃいます。
Ruby on Rails、Heroku を使ってかんたんな自動売買システムを作ってみたので、その手順をまとめます。
プログラミングの知識不要で自動売買ができるアプリもあります
目次
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 を使っているので、損益計算も画面で確認できるようにするなど夢が広がりますね!
プログラミングの知識不要で自動売買ができるアプリもあります
ビットコインで自動売買してみた結果はこちらに書きました。
ビットコインのデイトレも試してみました。
bitbank API を使ってコーディングした例もあります。