3週間で仮想通貨取引botを作った話

仮想通貨との出会い

原点

私と仮想通貨の付き合いの始まりは私が高校2年のとき、すなわち2016年だ。
当時はBitcoinがまだ10万円ぐらいだった頃、そのとき俺はお年玉をbitcoinに投資して増やすことを画策していた。

お年玉の袋を一気に開封し、5万円を握りしめて最寄りのファミリーマートへ。
この頃にハマっていたオンラインFPSへの課金欲を、この元手を増やせばもっと課金できるぞ….!と抑えながら、銀行口座にお年玉を投入。

この前に買ってもらったばかりのiPhone7で、これから俺は投資家になるんだと意気込みつつCoincheckに口座を開設。
胸の高鳴りから、数日間の本人確認の時間はまるで1年が終わってしまいそうなほど長く感じた。

本人確認完了の知らせを受け取ってすぐに、iPhoneに画面上の水色の四角形を連打した。
アプリを開くとBitcoinの価格チャートが現れた。

年次、月次、日時、1時間、1分のそれぞれのチャートを一通り確認し、なんとなく上がりそうだった。
これで俺も金持ちになれると信じ、Bitcoinを買いでエントリーした。

だがポジションを持って数分もすると、少しずつ値段が下がってきた。
含み損が大きくなってくる。
耐えられない。
このぐらいだったらまた後で取り返せる….。

私はポジションを手放し、数百円の損失を被った。
ポジションを手放してすぐに、また値段が上がり始めた。
この値動きに乗り遅れてはいけない、今度こそ、前回の失敗を取り返す…!

頭には血がのぼり、そこに冷静な判断はなかった。
損失を取り返すことばかりを考え、ロットは次第に増えていった。
それが意味するところは、負けに負けを積み重ねていたということだ。

この頃は、取引所がどのように金を儲けているのかについて全く考えたことはなかった。
今ならいかにその行動が愚かだったのかよくわかる。

下手くそなマーチンゲール法で金をぶち込み、手数料について無知だった俺はたったの1日でお年玉の半分を溶かした。
そして失意のもと、残ったお年玉を引き出し、嫌な新年だなと思った、そして金輪際仮想通貨は触らないと決意した。

コインチェックを許すな

そしてここから1年が経過。またお年玉の季節がやってきた。
1年がたち、仮想通貨市場は大いに盛り上がっていた。
値がうなぎのぼりに上がるbitcoin、ICO、ポンジスキーム、Telegramの仕手筋。

俺は昨年の誓いを破り、今度は手数料に気をつけながらBitcoinを買った。
CoincheckはBitcoinだけではなく他にもEthereumやRippleなどのアルトコインも取り扱っていた。

俺はこの中でRippleに目をつけた。
しばらく価格上昇が続いていたからだ。
この頃は帰納的推論の危うさをわかっていたが、俺はそれを無視しBitcoinからRippleにお年玉を移し替えた。
出川組の流入に比例するかのように、Rippleの価格は上昇し、俺は目論見通りになったことを喜んだ。

1週間ほど放置していたが、お年玉が5000円ほど増えていた。仮想通貨万歳。そう思っていた矢先だった。
この頃に仮想通貨を触っていた人なら皆覚えているであろう、CoincheckのNEM大量流出事件が起きた。

流出したのはNEMだけだったが、取り付け騒ぎを警戒したCoincheckはNEM以外の通過についても取引を禁止した。
ニュースを聞いて、そして金が引き出せなかった時は大いに憤り、CoincheckのページでF5を連打した。

お金を引き出せるようになったのは数カ月後だったが、資金は大きく減少しており、アンチ和田になった。
また俺は金輪際仮想通貨を触らないことを決意し情報をシャットアウトする方向に転じた。

Botter

そこから時は経ち、大学2年の頃。
留学先のベッドでゴロゴロTwitterを見ているとBitflyerで爆益、システムトレード、Botter、EA、機械学習、自動取引などの情報が入ってくる。

ほう、プログラミングができると自動取引でこれだけの利益を出すことができるのかと深く感心した。
幸いなことに1年次でインターンを経験してそれなりにプログラミングはできるようになっていた。
そしてちょうどFintechの授業でディープラーニングを取り扱うこともあり、この自動取引botをテーマにすることにした。

だが他の授業で忙しかったり自身が怠惰で始めるまで時間がかかることもあって、取り掛かり始めたのは2019年12月の半ばぐらいからだった。

課題への熱

Twitterの損益グラフを見て俄にやる気の湧いてきた俺は、まずはバックテストの環境を整えることにした。
久しぶりに触るMySQLとpython、そしてAlembic、ccxt、BitmexWS、Jupyter notebook、matplotlib、numpy、pandasなど。
これらのほとんどよく知らなかったライブラリについて、コードを書きながら学んだ。

1週間かけて、詳細なバックテストが行える環境を構築した。
パラメータを入力すれば、あとのテストは自動でやってくれる。
そして非常に単純な取引戦略を用いるbotを作った。
はっきり言ってこんなしょぼいbotじゃ儲けは期待できないだろうというレベルだった。

総当りで最適なパラメータを探して見た感じ良さげなパラメータを抽出。
そのパラメータに対して資産曲線を描いてやると、とんでもない利益が出ていた。
そこで俄に意欲が湧き、俺の実力でもマーケットに勝てるのかもしれないと思い始めた。

そこからさらに1週間、睡眠時間を削り、メンテナンス性を非常に損なった稚拙なコードであるがとりあえずbotそのものは完成した。

そして一昨日、実践に投入した。
結果は散々だった。
Bitmexの手数料でなんとか稼げないかと考えたが、それもどうにも無理なようだった。

結果はこんな感じだった。
見た目では大きく増えているように見えるが、ここで増えた箇所は裁量で増やしたものでBotの実力ではない。

俺のBotterデビューとしてはこんなもんかという感想だった。
だが今までと違うのは俺自身がこのプロジェクトに完全にハマっているということだ。
この作業はデータサイエンティスト兼投資家兼エンジニアの領域。
これらに興味を持って学んでいた俺からすれば、面白くないわけがない。

Bot開発はFintechのグループワークのついでのつもりだったが、今や文字通り寝食を忘れて没頭している。
今後、このブログはシステムトレードとそれに付随する話が中心になるだろう。

次回はこのBotの詳細な研究結果を今月中にブログ上で発表する。