読者です 読者をやめる 読者になる 読者になる

BitCoinを自動売買するアプリ

作ろうと思ったきっかけ

  • Ruby / Rails 使ってなんか作りたい(前から思ってる)
  • BitCoin の値動きが気になる (BitFlyer社のアカウントあり)
  • あわよくばドリンクやランチ代くらい稼げないか
  • お金に関わる事だから、飽きずに進められそう

急に2017年2月くらいにBitCoinの自動売買を試してみようと思い、アカウントのあるBitFlyer社のAPI説明ページを読み始める。PHPでかけばもっとサクッと行けたと思うけど、動機の1つにRailsを触るという事があったので、少し調べて実装の繰り返し。

github.com

作った仕組み

  • Batch を毎10分で実行し、ログから"買い時"と判断したら、買いと売り注文を出す
  • Log も毎10分で実行し、過去数時間経過した注文の結果を取得し、結果モデルを作成
  • Result は1日1回実行し、結果を集計し、メールで結果を知らせる
  • Gabage は Heroku の Free プランの上限を超えないよう PostgreSql のレコードを削除する
  • 概要はこんな感じ f:id:tbrhdys:20170320000435j:plain

現在の結果

  • 2017/¾ - 20173/19 時点の結果。
  • 752 戦中 317 勝 435 敗 (金額は少額の取引を行っているので、1000円 - 2000円 くらいマイナスじゃないか)
    • 基本的には1取引 0.01BTC (約1300円〜1450円)で行っている

毎朝届くメール (3/21のresult)

  • 実際は 1/100 で取引しているので、day_sum 35円くらいのイメージ
total_count => 853

day_count => 42

day_sum => 3547.0

day_lose => -6219.0

day_lose_count => 20

day_win => 9766.0

day_win_count => 22

1BTCの値動き

  • 130000 - 145000 くらいの間で動いていた。
  • 3/18 - 3/19 に 大きく動き 119000 くらいまで下がった。

やっていて感じる事、これからやっていきたい事

  • “買い時"の判断材料不足なので、データを解析して、"買い"タイミングの精度をあげていきたい。
    • 以前は毎10分のログで、過去10回の金額が+xxx円だったら買いという風に仕込んでいた。
      • これだと買いのタイミングが遅いと判断したので、過去2回の差額が+50円だと買いにした。
        • この結果、勝ちの数(買った時の金額より、売りの時の金額が高い) が増えた。
        • 買いの件数も増えて、取引量が増えた。
  • データを解析をし、勝ち・負けの精度をあげたい
    • 実際のログと、売買結果の差が起きていないか(以下の勝ち、負けが単純にログを見ただけで分析出来ていない)
      • 買い注文時に、同時に+ / - の子注文を同時に行っている。
      • この時に買い注文より高く売れたら “勝ち” / 低く売れたら"負け" と評価している
  • ソースはただ、スケジュールからバッチを叩いているだけなので、Viewで処理結果などを参照出来るようにしたい
    • Rails というよりは、 ActiveRecord を使った処理を書いただけ。という印象
    • ActiveRecordRails 側から簡単に扱えるので、使っていて楽しい
  • GitHub の Readme にいろいろ追記しなくては
    • ENV

雑感

  • 少額の取引なので、50円くらいの勝ち負けは頻繁に発生しているので、元でを増やしたいという欲を抑えながらやっている
    • FXには走りたくない
  • お金に関わる事で興味が強いのか、飽きずに続けられている
    • 時間はかかっているが、ちょこちょこ実装を進められている
  • まだまだ Ruby / Rails らしからぬコードをたくさん書いているので、お作法を覚えながらやっていきたい
  • 他にも作りたい思いのアプリがあるので、第二弾、第三弾と続けて行きたい(Ruby / Rails 面白い)
  • Google 図形で処理を描いてみたけど、結構ポチポチ時間がかかった。Keynote とかで作った方が速そう。

(この記事は画像作成込みで90分くらいで書いた)