Fablog

社会人マイナス1年生のブログ / プログラミング / 料理 / ビットコイン

エンジニアが仮想通貨で稼ぐことを試みた話

 

f:id:sasa_sfc:20180121200256j:plain

 

概要

  • エンジニアの見習いが仮想通過について勉強した話
  • 仮想通貨をテクニカル分析してみた話
  • 仮想通貨のシミュレーターを作った話

 

経緯

「億万長者になりたい!!」と思って、去年から仮想通貨を始めた。
仮想通貨の技術に魅力を感じて投資しているのではなく、儲かりそうだからやっている。

 

購入した通貨を時々売買しているのだが、全く上手く行かない。
売ったものは上がるし、買ったものは下がっていく。

 

で、どうにか売買を上手くやる方法はないのかと思い調べた。

 

 

テクニカル分析

仮想通貨よりも売買に関する知恵が溜まっていそうな、株とかFXの相場の分析手法に関してざっくり調べた。

結果、相場の分析はテクニカル分析ファンダメンタル分析という2つの分析手法が存在することが分かった。

 

テクニカル分析とは

株式・商品取引・為替等の取引市場で、将来の取引価格の変化を過去に発生した価格や出来高等の取引実績の時系列パターンから予想・分析しようとする手法

 

ファンダメンタル分析

株式・商品取引・為替等の取引市場で、経済、金利、製品、賃金、企業経営の全般的な状況に着目して予想分析する手法

 

経済状況とか企業経営の話とかは良くわらないし、テクニカル分析の方がエンジニアっぽくてかっこいいのでこっちの方を詳しく調べた。 

 

調べてみると、単純移動平均線・ボリンジャーバンド・RSI・MACDストキャスティクス一目均衡表RCIパラボリックなどなど沢山のテクニカル分析手法が見つかった。

 

ググればすぐ分かるが、せっかくなので「単純移動平均線」だけ少し解説する。

単純移動平均線とは

短期・中期・長期の期間の平均価格を繋いだ線を使って、現在のトレンドを判断する手法。

例えば「過去5日間の平均価格を繋いだ短期の線」が「過去25日間の平均価格を繋いだ中期の線」を上回っていた場合、それは最近値上がり傾向にあるということである。この場合、分析結果は「短期トレンドは上昇中」ということになる。

単純移動平均線を使う場合は、トレンドが下降中から上昇中に変わったタイミングで購入をして、上昇中から下降中に変わったタイミングで売却する。

 

f:id:sasa_sfc:20180121163136p:plain

 

他のテクニカル分析に関しては、三菱東京UFJauがやっているじぶん銀行の解説記事が一番わかりやすかったのでオススメします。

 

 仮想通貨でテクニカル分析を試してみた

テクニカル分析を理解して、今度こそ儲かりそうな気がした。

ので、単純移動平均・RSI・MACDを計算するコード実装して、ボットでの自動売買をしてみた。

 

自動売買を実装すれば、人がやるよりも高速に売買できるし、テクニカル分析に則って完璧な売買ができるので絶対儲かるだろうなと思った。

 

結果は駄目だった。

 

正確には投資額の2%分くらいの利益が出たが、投資していた仮想通貨の元値は1.4倍くらいになってた。

投資した通貨自体の値段が上がっていなければ確実に損失を出していた。

 

原因を調べてみると、明らかに高値で購入してしまったり、上昇途中に売ってしまったりしていた。

このような分析結果と異なる動きをすることを「テクニカル分析の騙し」と言うらしい。

 

僕が作ったものは「寝ながら金を稼ぐボット」ではなく「無限に損失を生み続ける不良品」だった。

結構頑張ってコード書いてたので悲しかった。絶望した。

 

それでも寝ながら金を稼ぐ生活を諦めきれず、時々「なにが駄目だったんだろうな〜」としばらく考えて、1つの結論に至った。

 

 

「もしかして、パラメーターの設定をミスったのでは?」

 

 

テクニカル分析のパラメーター

ここで指すパラメーターとは

  • 1本の線の期間
  • 短期の期間
  • 中期の期間
  • 長期の期間
  • 売買の条件

などである。

 

前述の単純移動平均で試した時は

  • 5分間隔
  • 短期は5本
  • 中期は25本
  • 長期は75本
  • 短期・長期トレンドが両方上昇中になったタイミングで購入
  • 短期・長期トレンドのどちらかが下降中になったタイミングで売却

をしていた。

これらのパラメーターは株やFXを分析している他のサイトにのっていたものを参考にして設定した値だが、もしかして仮想通貨では別のパラメーターを設定する必要があったのではないだろうか。

というわけで試して見た。

 

仮想通貨 テクニカル分析シミュレーター

実際のトレードをしてしまうと損をしてしまう可能性があるので、パラメーターを自由に弄れる仮想通貨取引のシミュレーターを作った。

 

coin.kento.work

 

このサイトを使うと、指定したパラメーターで単純移動平均線を利用して売買をしていた場合、どの程度上昇していたのかが分かるようになっている。

また、テクニカルトレード成功率という購入時よりも売却時の方が高かったトレードの割合や、最も収益が得られたであろうパラメーターも計算することができる。

 

具体例を出す。

例えば下記の画像は、ビットコインを90日間、4時間間隔、短期7、中期15、長期30でトレードした時の表である。

ビットコインの価格は95%増加しているが、テクニカル分析を利用してトレードしていた場合は1%の利益しか出ないことが分かる。

また、もし短期1、中期6、長期27の最適な組み合わせで売買をしてたら179%の利益がでていたことが分かる。

f:id:sasa_sfc:20180121165018p:plain

 

やった!これでベストパラメータがわかった!!

このパラメーターを使って売買をすれば儲かるはずだ!

これで億万長者だぜ!!!!

 

 

結果

結論として、まだ億万長者にはなれていない。

 

試していないが、このパラメーターを使って取引をしても上手くいかないと思う。

対象の期間を変えてシミュレーションすれば気付くことだが、期間によって最適なパラメーターは異なる。

 

このパラメーターはあくまで過去のデータに対する最適解であって、未来のデータに関する最適解ではない。

 

シミュレーターのパラメーターを使用して儲かる可能性もあるけど、損する可能性もあるのだ。

 

まあ、そうだよね。
現実は甘くない。

 

 

ご精読ありがとうございました。

よろしければシェア・はてブお願いいたします。

 

 

 

p.s
@シミュレーター使って便利だと思った人
BTCの投げ銭待ってます
1p3AmnEsmd5MQZKPADUHerfMn2J3dd1bP

coincheckAPIが1秒に1回しか叩け無くて辛かったので修正した

bitcoin自動取引のためにcoincheckのAPIを使っていんたのですが、公開されているGemを使った所1秒に1回以上リクエストをするとエラーが起きてしまうという問題が起きました

自動取引を考える上で1秒に1回しかアクセスできないのはつらすぎる。。。。

 

調べてみたら禁止されている様子はなかったので、Gemを使わずにそのまま自分で実装すればいけそうだった

 

けど、Gemを修正した方が早そう & 便利そうなので修正しました

 

多分 1/10000 秒単位でのリクエストまでなら仕様的にはできるようになったはずです(Server側で拒否されそうだけど)

 

おなじ問題に遭遇した人は使ってみてください

 

github.com

 

追記

変なことせずに普通にインクリメントしてあげれば良かった。後で直そ。

ビットコインの自動売買システム 実装編1

ビットコインの自動売買システム 施策編1## 百聞は一見にしかず的な

ビットコインの自動売買システムについて思案したり調べたりするのもいいのだが、とりあえず一度自動売買システムを作ったほうが実際の問題点などを理解できそうな気がしたので作ってみた。

やはりエンジニアならとりあえず作らねばならん

とりあえず作った

色々コードを書いて、二種類ほどのビットコイン自動売買Botを作ってみた。

詳細はGithubを診て欲しいです。

コメントもプルリクもIssueも大歓迎です。

https://github.com/kentosasa/bitcoinBotgithub.com

ちなみにどちらも上手く行っていません。

ああ、どうやったら簡単にお金持ちになれるのだろうか。

ビットコインの自動売買システム 準備編

最近ビットコインについて興味が出ています。

調べてみるとビットコインは他の通貨に比べてかなり自由であることがわかりました。

価格情報などはpublicAPIとして多くの取引所が公開しているし、アクセストークンさえ取得すれば実際にビットコインを購入することもできます。

取引手数料も殆どのところで0円です。

「これはエンジニアとしての血が騒ぐぜ」

ということでこれらのAPIを利用してビットコインの自動売買システムを作り、利益を出すことができないかと画策してみました。

 

ビットコイン自動売買の準備

ビットコインの売買を自動化するとして、どんな技術を使うのかを検討してみました。

機械学習やルールベースなどがあげられるのですが、正直どれがいいのか全く分かりません。

実際に運用してみなければそのシステムが本当に儲かるのかどうか分からないが、損してしまうかもしれない。。それは嫌だ。。。

そうだ、テストをしよう

実際に運用しなくてもアルゴリズムを試せる環境。

つまりテスト環境さえ作れればいいいのではないかと考えました。

実際にテストをするために過去のビットコインの相場推移情報が必要です。

CSVとかで保存している場所がないかなーとweb上をあさってみましたが見つかりませんでした。。

 

ビットコインの自動売買システムの準備

世の中に無いものは自分で作っていくのがエンジニアという生き物。

ということでビットコインの価格推移情報を収集するスクリプトを書きました。

自動売買システムに機械学習を取り入れるならどっちにしろこれらの情報は手元に無いと辛いので丁度良かったです。

仕組みは簡単です。

定期的にコインチェックの価格情報を返してくれるAPIを叩き、返ってきた価格情報と時刻データを保存します。

ビットコイン用のサーバーやデータベースを用意しても良かったのですが、完全無料なシステムを作りたかったので google app script と google spread sheet を使いました。