仮想通貨との付き合い方
IS17erアドベントカレンダー5日目の記事ですが、だれも入れていなかったためしょうがなく入れた記事であり、執筆は11日です。
はじめに
12月は7日のビットコイン200万円台突破、モナコインの急騰、NEMの急騰など変動が史上最も激しいと思われる月となりました。
僕自身、仮想通貨はけっこう最近に始めたのですが、多分ぼくと思考回路が似ている情報系の人たちに、「プログラムでトレードすることは重要だけどヤバイぞ」ということを伝えたいと思い、この記事を書くことにしました。
仮想通貨との付き合い方
仮想通貨を短期的にトレードすることは長期的にトレードすることに対して次のようなメリット・デメリットがあります。
ここでいう短期トレードとは、秒単位・ミリ秒単位での売買、長期トレードとは数時間〜数日単位での売買を指します。
短期トレードのメリット
- 勝率が高い場合、長期的にトレードする場合より利益率が高い。これは仮想通貨価格が上昇しようと下落しようと適切なトレードにより常に利益を出すことができるためです。
- 手遅れになりにくい。たとえば3ヶ月コインを放置しておいて、久しぶりに確かめたときに大幅に下落していると回復するのを待つにはかなりの時間がかかりますが、短期トレードの場合、損切りのタイミングが一般的に早いので、膨大な損失をすることが少ないです。
長期トレードのメリット
- そもそも仮想通貨価格は全体として上昇傾向にあるので、利益確定を待ちやすいです。つまり、(市場全体がインフレしている限り)リスクが低いです。
- 多分気楽(個人の感想です)
短期トレードの罠
そもそも、coincheckなどの取引所では、一般にコインを買うときと売るときでレートが異なります。こういった場合、短期トレードは不可能です。
coincheckではビットコインに関しては、トレードビューでの取引およびAPIを用いる取引について売りと買いを同じレートで行うことができ、短期トレードが可能です。
いきなりですが、短期トレードを初心者がやると以下のような罠に陥りやすいです。
プログラムを使わない場合
- 指数注文は不向き。指数注文では、事前に取引価格を指定し、マーケットがその価格になったときに注文の価格順に決済されますが、短期トレードでは、秒単位でマーケットが変化するので、マーケットより僅かに安い/高い価格を人力で毎回指定するのは絶対に無理です。とくに暴落時、売り価格を入力中にマーケットがその価格より下がり、さらに低い値を入力したらその価格より下がり・・・ということが続くと思われます。ほとんどの短期トレードは相手がコンピュータで、非常に細かく適切な価格で注文が行われます。注文するときは成行注文(マーケット価格で瞬時に注文)をおすすめします。
- 入力ミスの恐怖。指数注文にしろ成行注文にしろ、需要が高い方に1桁指定し間違えるといずれにしろ瞬時に注文が確定するので、気をつけてください。
プログラムを使う場合
- よっぽどのモデルを用いない限り勝てません。そもそも、短期トレードはコンピュータの戦いなので、平均的に弱いプログラムだと負け続けます。
- APIのタイムラグ。API注文などは通常0.2秒程度で完了しますが、急騰や暴落の場合、アクセスが集中し、数秒かかる場合もあります。このとき、アクセス中に大きな価格変動が起こる場合もあります。ぼくはcoincheckでしかAPIを使用してトレードしたことはありませんが、安定したAPI選定、およびネット環境は必須です。
- Ruby, Pythonなどの言語の仕様による遅れ。プログラム同士の競売になると、一刻でも早く適切な指数注文を行う必要があります。スクリプト言語は実装が容易な反面、遅れが非常に目立ちます。たとえばRubyで、指数注文→取り消し→指数注文→取り消し→指数注文という流れ担った場合、おそらく1秒近くかかりますし、プログラムを使わない場合で指摘したように、最悪暴落時に早めの売りを行うことができず多大な損失を及ぼす可能性があります。
- 絶対に少額で長期的に実験を行うこと。ポイントは長期的であることです。1週間も回せば十分だと思います。
勝てるプログラムの書き方
短期トレードにおいて、もっとも強いのはRNNを使ったディープラーニングだと思います。しかし、短期トレードに参加するプログラムのほとんどがこの方法を採用しており、計算資源的に不利になると思います。
そこで、別の形でプログラムを利用することをおすすめします。それは、価格変動の原因となる情報を収集するのにプログラムを使うことです。
たとえばニュースなどの自然言語解析などが考えられるとは思いますが、もっとシンプルに、効果的なものを見つけました。
仮想通貨の取引は、ネット上にいくつもある取引所を介して行われます。そして、レート変動は各取引所によって異なります。もちろん、時間的にマクロな価格変動はどの取引所でもほぼ同じですが、急騰や下落が始まる時刻は取引所ごとに微妙に異なります。そこで、さまざまな取引所のAPIを利用し、いち早く急騰や暴落を検出することで、人間が行う取引に強力なサポートを提供することができます。実際、NEMの高騰時などは、coinmarketcap.comがcoincheck.comに数時間レベルで先行していました(はじめはもちろん緩やかな上昇であったが)。
おすすめの取引方法
プログラムを使わない場合
普通におすすめです。あまり時間を割けない人はこちらにすべきでしょう。トレードビューを使った指数注文ぐらいは行っておいたほうがいいと思いますが、市場の傾向として、なにもしなくても利益を出せる見込みがあります。
プログラムを使う場合
リアルタイムで予想価格を計算するプログラムはよっぽどの計算資源があってプログラムが安定して勝利しない限りはおすすめしません。上述したような補助プログラムを書くことをおすすめします。
また、プログラムと人力の中間に位置しますが、CLIを自作し、コマンドで適切な取引を瞬時に行えるようにするとかなり勝率が安定すると思います。
この場合、Rubyなどの言語でも開発がしやすいです。coincheckからgemが配布されているので、数行のコードで簡単にかけます。
CLIを使うと、価格指定時にチェックを走らせることにより、価格の指定ミスを防ぐこともできます。
さいごに
ちょっと予想を書いておきます。
12月はスーパービットコインなどのビットコインのハードフォークの配布がいくつも待たれているので、ビットコインの価格はしばらく上昇しそうです。しかし、ハードフォークが行われ、初期配当が確定するとすぐにビットコインを手放すと思われるので、価格は大幅に下落すると思われます(適当ですが、30%ぐらいは下がるのでは)。
ビットコインを手放した人が次に投資先に選ぶのは、ビットコインキャッシュなどのアルトコインでしょう。また、ビットコインキャッシュがそうだったようにハードフォークされたコインの価格はハードフォーク直後、一瞬の上昇の後すぐに暴落すると思われます。
ビットコインの時価総額はまだ日本円のそれよりずっと低いですが、個人的にはこれが日本円の時価総額程度までは伸びると思っています。また、そうなる時期まで、他のコインも同様に成長を続けると思っています。2018年も、2017年ほどの成長率は厳しいにせよ、伸びるのではないかと思っています。