猫でもわかる 秘密の英語勉強会

ビットコインの全自動トレードシステムを6500円のラズベリーパイで構築してみた

AI Trader

仮想通貨(ビットコインおよびアルトコイン)の自動売買をするトレードシステムを作りました。

これを24時間365日運用したいのですが、PCだと電力を食うし、レンタルサーバはちょっと不安なので、消費電力の少ないラズベリーパイ(以下、ラズパイ)を利用することにしました。

  • やりたいこと
    • 自作のトレードシステムを24時間運用したい
    • 消費電力を抑えたい
  • 使うもの
    • ラズパイ
    • 仮想通貨取引所のAPI
    • Java
  • 免責事項
    • 技術系記事ではなく趣味の日記です

 

 

何がしたいの?

  1. 取引所にアクセスして各種データを取得
  2. チャートパターンを分析
  3. 買いシグナルがあれば買い注文、売りシグナルがあれば売り注文を出す
シグナル

単純にいうとこんな感じのアプリケーションをJavaで作り、これをcron(スケジューラ)で定期的に実行します。ストリーミングAPIなどで常時接続する必要はありません。

シグナルはどうやって判断するの?

「買いシグナル、売りシグナルってどうやって判断するの?」と思われるでしょう。このようなシグナルは投資戦略(ストラテジー)によって異なります。

例えば2本の移動平均線のゴールデンクロスで買い、デッドクロスで売るのもストラテジーになります。このストラテジーが儲かるかどうかは、過去のチャートデータで検証したり、リアルタイムデータでつもり売買(後述)をすることで判断します。

ある程度プログラムが書ける人なら、自動売買自体はそれほど難しくありません。システムトレードで一番大変なのは、儲かるストラテジーを見つけることです。そのために、多くの書籍や海外サイトなどを読み、バックテストツールや分析ツールを作り、ひたすら試行錯誤しました。

色々なストラテジーを検証してみると、不思議なことに、直観的に正しく思える売買ルールほど駄目だったり、負けそうなルールが意外と良かったりします。裁量トレードでほとんどの人が負けるのも納得です。

自分でシステムを研究したい人は以下の書籍が参考になります。

トレーディングシステム入門 ― 仕掛ける前が勝負の分かれ目
楽天で見る Amazonで見る
システムトレード 基本と原則
楽天で見る Amazonで見る
システムトレード 検証と実践 ──自動売買の再現性と許容リスク
楽天で見る Amazonで見る

他にもまだまだあるので、興味があれば調べてみてください。

以下の「マーケットの魔術師」は技術書ではなく読み物です。システムの開発者たちにインタビューをして、システムトレードとはどんなものかを説明しています。

マーケットの魔術師 システムトレーダー編
楽天で見る Amazonで見る
大きな利益を上げているトレーダーはメカニカル派が多いと言われる。その理由は、本書でも繰り返し述べられているように、人間の弱みを完全に排除できるからだとされる。裁量トレードでは、欲望や恐怖の感情に負けて何度も同じ過ちを犯すが、機械的に売買を行えばそうした感情の入る余地がないというわけだ。

また、有名トレーダーのcisさんの著書もシステムトレードに通じるものがあります。

僕はこの本を発売日に購入して一気読みしたのですが、それまでにシステムの研究で得ていた知見と似たことが多数書かれていて嬉しくなりました。

自分の投資戦略を持たない人は、この本を繰り返し読むべきだと思います。

一人の力で日経平均を動かせる男の投資哲学
楽天で見る Amazonで見る
上がっている株を買う。下がっている株は買わない。
買った株が下がったら売る。
マーケットの潮目に逆らわずに買う。そして潮目の変わり目をいち早くキャッチする。
この大原則に従うようにして今の資産を築くことができた。

トレンドフォロー型のシステムは大抵この言葉通りの動作をします。
また、このようなシステムの勝率は3〜5割程度になるのが普通です。

勝率3割でも利益が出るのは、「下がったら売り、上がっている間は持ち続ける」タイプのシステムは損小利大を実現するからです。(これの逆パターンは、勝率こそ高いもののコツコツドカンでめっちゃ負けます)

ただし、このようなトレンドフォロー型の売買は騙し上げに弱く、レンジ相場では小さな損切りを何度も繰り返すことになるので、手動で売買するには強靱なメンタルが必要です。

僕の場合、銘柄それぞれの勝敗を考えるなら、利益になる取引は3割くらいしかない。
残りのほとんどがトントンかちょい負け。けれども、時々負け額に対して10倍や20倍の金額を勝つことがあるから、勝率は低くともトータルではプラスになる。

また、cisさんは押し目買いを否定しています。

押し目買いは、下がったところで買おうとするわけだから、逆張りの一種になる。
つまり、やってはいけない買い方のひとつ。
上がっているものを買い、下がったら売る。その基本に反していることになる。

ラズベリーパイって何なの?

ラズパイとは超小さい格安パソコンです。
こういうの。

ラズパイ
ラズパイのセット

どこのご家庭にもあるデオコと比較すると、ラズパイの大きさがわかりやすいですね。

ラズパイ
大きさの比較

HDMI、USB、LANポートがあるので、ディスプレイやUSB機器(キーボードやマウス)が使えるし、ネットも普通に繋がります。
消費電力がわずか3W程度なので、24時間運用したい自宅サーバなどに良さげです。

ちなみに、ホリエモンのロケットにもラズパイが使われているそうです。

堀江氏は「スタートアップであれば、どんどん新しい設計のロケットを試すこともできる」とし「インターステラテクノロジズのロケットもH-IIAロケットよりも高性能なコンピュータを積んでいる」と教えてくれた。そして「高性能といってもラズパイなのでコストは安い」とのこと。ご存じのようにラズパイは、ワンボードマイコンのRaspberry Piのことで、一般向けなら6000円弱、産業用でも5万円ぐらいで手に入る。

もう、何十万も使ってハイスペックPCを自作してドヤる時代は終わりでいいんじゃないかな。

購入したもの

ラズパイは以下の商品を購入しました。約6500円。
マザボ、ケース、電源アダプタ、ヒートシンクがセットになっています。CPUやメモリはオンボード、さらにWi-FiとBluetoothにも対応。そそるぜこれは。

Raspberry Pi3 Model B+ 技適対応ベーシックセット(基板・3B,3B+両対応クリアケース・ヒートシンク・USB電源アダプタ 5V/3A 1.5m)
Amazonで見る

OSをインストールするためにMicro SDカードも必要なので別途購入しました。

僕の用途では最小構成でも問題ないので8GBにしましたが、Full Desktop Versionをインストールするには8GBだと少し足りません。色々やってみたい人は16GB以上がお勧めです。1000円ぐらい。

TOSHIBA microSDHCカード 16GB Class10 UHS-I対応 (最大転送速度48MB/s) 5年保証 (国内正規品) MU-F016GX
楽天で見る Amazonで見る

余裕があれば

今回購入したセットにはプラスチックのケースが付属しますが、以下のような冷却ファン付きのケースも別売りで購入できます。2000〜3000円。
発熱が気になるようならケースだけ買い換えても良さそうです。ちょっとかっこいいし(重要)。

EleDuino Raspberry Pi 3モデル B +ケース ラズベリーパイB + アルミニウム合金ケース デュアル冷却ファン 自動温度調整 (黒)
Amazonで見る

普通はPC用のディスプレイをラズパイに繋いだり、SSHでリモート操作することが多いと思いますが、ラズパイ対応の小型ディスプレイもあります。2500〜8000円

ELECROW 3.5インチTFT LCD ディスプレイ 解像度480*320 タッチスクリーン モニター Raspberry Pi 3B+ 3B 2B対応
Amazonで見る

また、ラズパイにUSB DACとヘッドホンを繋げば、コンパクトで省エネなネットワークオーディオを作れます。アンプとスピーカーでも可。BGMを垂れ流したい人向け。

ラズパイとUSB DACとヘッドホン
USB DACとヘッドホンを繋いで

上の写真のUSB DACはFX-AUDIOのDAC-X6J。約9000円。安いのにハイレゾ対応で高音質、普段はMacに繋いで使っています。電源アダプターは別売りです。約1000円。

FX-AUDIO- DAC-X6J[シルバー]高性能ヘッドフォンアンプ搭載ハイレゾ対応DAC 最大24bit 192kHz
楽天で見る Amazonで見る

ラズパイのセットアップ

OSはLinuxを使い慣れている方なら特に問題はないと思います。インストール作業にはディスプレイとキーボードとマウスが必要です。

OSインストール中の画面はこんな感じ。RaspbianというDebianベースのOSです。FedoraベースのPidoraというOSもあります。

インストール1
OSインストール中

インストール中にプログラミング練習アプリなどの宣伝が入る。このアプリもラズパイで使えるのでしょう、たぶん。

インストール2
OSインストール中

インストール完了。YouTubeもちゃんと再生できます。

Youtube
YouTube

セキュリティとか

セキュリティ関連の知識はさっぱりですが、なるべく自分でできそうなことはやりました。ま、外部に公開するサーバじゃないから、そんなに気にしなくても良いとは思うけど。

  • SSHの公開鍵認証設定
  • SSHのポート番号変更
  • SSHログインユーザの制限
  • rootのログイン禁止
  • デフォルトのユーザアカウントを停止
  • 不要なサービスを停止(ポートを閉じる)
  • ウイルス対策ソフトのインストール

 

セキュリティについては、以下の書籍を参考にしました。SSHの細かい設定なども載っています。

Linuxサーバーセキュリティ徹底入門 オープンソースによるサーバー防衛の基本
楽天で見る Amazonで見る

そんなこんなでセットアップ完了。
普段はディスプレイやキーボードは繋がず、MacからSSHでリモート操作するので下の写真の構成で十分です。コンパクト。

ラズパイ
電源とLANケーブルだけ(Wi-Fiでも可)

ようこそ我が家へ。今日から24時間ブラック労働だ。

プログラムはどんなの?

Javaで作ったプログラムは以下のような処理をします。大抵の取引所にはAPIが用意されているので簡単にアクセスできます。

  1. 取引所から仮想通貨の価格データなどを取得
  2. ストラテジーに従い買いシグナルをチェック
    • 買いシグナルがあれば買い注文を出す
  3. ストラテジーに従い売りシグナルをチェック
    • 売りシグナルがあれば売り注文を出す

ざっくりこんな感じ。ね、簡単でしょ?

これに加えてポジション管理や資金管理などを行います。複数のストラテジーを同時に運用できるように設計したので、リスクを分散することもできます。

アクセス頻度

トレードシステムと聞くと、1日中すごい勢いで売買を繰り返しているシステムを想像するかもしれません。しかし、僕のシステムは1時間に1回とか4時間に1回程度の頻度でチャートをチェックして、シグナルがあれば売買するものです。ストラテジーによっては、1日に1回だけチェックして売買するものもあります。

cron

そのため、アプリケーションを常駐するのではなく、cron(Macならlaunchd)で定期的に実行するだけで十分です。常駐しないので実行ファイル(jar)の更新やラズパイの再起動も気軽にできます(わりと重要)。

性能はどうなの? 〜バックテスト〜

バックテストとは、ストラテジーの性能を知るために、過去の価格データでトレードのシミュレーションをすることです。

過去のデータで好成績を出したからといって、必ずしも今後のトレードで儲かる保証はありませんが、全く検証していない売買ルールや素人の直観に頼るよりはだいぶマシです。

大抵のストラテジーには調整可能なパラメータがあり、パラメータの組み合わせ数が多いほど特定のチャートパターンにフィットしすぎる結果になります。この現象はカーブフィッティングと呼ばれ、過去のデータでは好成績を叩き出すものの、実際のトレードではうまく機能しなくなります。機械学習の過学習に似ています。そのため、できるだけパラメータ数を少なくした方が汎用性が高くなります。

僕が有望視しているストラテジーのバックテスト結果を以下に示します。

バックテスト期間は2017年1月1日〜2019年6月30日。
レバレッジは1倍でロングとショートの両方行う設定です。
つまり下落時もうまくトレードすれば利益が出ます。

同期間のビットコインのチャートはこちら。

BTCUSDT
BTC/USDT(週足)

ビットコインは2017年下旬に急騰、2018年に急落して、2019年の上半期は2017年に負けず劣らずの勢いで急騰しました。

ストラテジーA

ストラテジーAは4時間に1回チャートをチェックして売買します。
そのためバックテストでは4時間足チャートを使います。パラメータ数は2。

資産曲線はこちら。軸のラベルが見にくいのはすんません。

ストラテジーA
資産曲線

資産曲線とは、トレードによって資産がどのように変化するかを示すグラフです(今回は原資を10万円に設定)。

上の資産曲線のようにビットコインの暴落時にも資産が増えているのは、ロング取引を控え、代わりにショート取引で利益を出しているためです。

成績

  • 利益:1,230,860円 (初期資金:100,000円 最終資金:1,330,860円)
  • 勝率:50.57% (44 勝 43 敗)
  • 最大ドローダウン:23.68%
  • プロフィットファクター:3.11

原資10万円が100万円以上になるとか、さすがビットコインバブル。
さすがに今後はこの倍率で暴騰することはないでしょうけど。

ストラテジーB

ストラテジーBは1日に1回チャートをチェックして売買します。 そのためバックテストでは日足チャートを使います。パラメータ数は1。

ストラテジーB
資産曲線

たまたま相場と相性が良かったのか、ストラテジーAより資産が大きく増えています。

このストラテジーはつい最近発見したのですが、1日1回だけという横着トレードでこの結果には驚きました。

成績

  • 利益:2,981,126円 (初期資金:100,000円 最終資金:3,081,126円)
  • 勝率:48.96% (47 勝 49 敗)
  • 最大ドローダウン:34.57%
  • プロフィットファクター:2.29

駄目な時期もある

上の資産曲線を見るとわかるように、常に儲かり続けているわけではなく、資産が横ばいの時期やガクンと減る時期もあります。これはドローダウンと呼ばれ、どのようなシステムにも必ずドロータウンがあります。

そのような時期にトレードをやめてしまうか、それとも我慢して継続するかは、判断が難しい所です。

ちゃんと動くの? 〜つもり売買〜

ラズパイのセットアップが完了したので、上述のプログラムを実際に運用してみます。

といっても、いきなり売買するのではなく、まずはリアルタイムデータを使用したつもり売買をします。ラズパイが長時間運用に耐えられるかどうかもテストしたいし。

つもり売買とは、ビットコインのチャートをリアルタイムで分析しながら、買いシグナルがあれば買ったつもりで記録、売りシグナルがあれば売ったつもりで記録するものです。

つもり売買

過去のデータを使用するバックテストとは違い、実際のトレードに近い条件でストラテジーと自動売買のテストができます。

僕のストラテジーは、本来は数時間に1回チャートをチェックして売買するものですが、今回は動作確認なのでもっと高頻度で動作するよう設定を変更。
ラズパイを放置して、つもり売買処理を4日間ほど実施しました。

履歴
つもり売買の履歴ファイル

よしよし、ちゃんと動いてる。

実際に儲かるの? 〜そしてリアル売買へ〜

つもり売買によって、本システムが24時間のブラック労働に耐えられることがわかりました。

さあ、いよいよリアル売買に移行するときです。
つもり売買の処理を本来の売買処理に変更して、ほったらかし運用の始まりです。

売買処理は、各取引所が提供するAPIを利用するだけ。
果たして、6500円のラズパイは世界中のトレーダーたちと対等に渡り合えるのでしょうか。

俺たちの本当の戦いはこれからだ!!!

AutoTrader

おまけ 〜プログラミングを始めたい人へ〜

僕は元プログラマなので、本システムのキモであるプログラム開発ではそれほど苦労していません。毎日MacBookを持ち歩いて、いつでもどこでもプラモ感覚で楽しみながら作りました。

では、プログラミング初心者や未経験の人には作れないのかというと、そうでもないです。

たとえばマンガ家の坂本タクマ氏は、自分でRubyのプログラムを書いてトレードシステムを開発しています(売買は手動)。坂本氏のトレード方法や売買ルールについては以下の「パチンコトレーダー」シリーズをご覧ください(パチンコではなく株の話です)。
Kindle unlimitedの利用者なら追加料金なしで閲覧できます。

マンガ パチンコトレーダー システムトレード入門編
楽天で見る Amazonで見る

また、2020年から小学校でプログラミングの授業が必修化されるので、書店には初心者向けの入門書も増えています。さらに、自分でプログラミング学習ができる Progate や、TechAcademy などのオンラインスクールもあります(無料体験あり)。

TechAcademy はホリエモンチャンネルでも紹介されました。

恋愛とかも一緒。
堀江貴文

さらに、子ども向けのプログラミングスクールもあります。

つまり、学習環境はかなり整っているわけです。

独学にしろ、スクールにしろ、プログラミングを学ぶに当たって一番大事なことは「作りたいもの」があることだと思います。

もし興味があれば、トレードシステムに限らず、好きなテーマでプログラミングを始めてみてはいかがでしょうか。一度覚えたら一生役立つかもしれませんよ。