2022年1月に,仮想通貨(BTC)の自動売買をはじめました(*1).今では,かなり夢中になっています.
私には,もともと自動売買に関する知識は全くありませんでした.実は,昔から(仮想通貨に限らず)自動売買には興味があったものの,「難しそうだなぁ」と避けていたのです.
しかし,richmanbtcさんの本を読んだことをきっかけに色々と調べてみると,ネットには実に様々な情報が溢れており,(動けば良い程度の)自動売買のシステムは簡単に構築できることがわかりました.
さらに,システムを改良していくのはとても楽しい作業でした.自分の作ったbotが取引をしているのは,いつ見ても感動します.
1ヶ月ほど試行錯誤した今では,「資産運用をするすべての人にbotづくりをトライしてみてほしい」と感じています.
この記事では,私がどうやってbotを作り始めたかをまとめたいと思います.少しでもbotづくりに取り組む人が増えると良いな,と思います.
たとえ,利益が出るbotができなかったとしても,将来,思わぬところで役に立つかもしれませんよ!(例えば,株式市場で将来APIを使った取引が活発化したときにすぐに参入できる,など).
botについて学ぶ
まず,richmanbtcさんの本を2021年末に読みました.この書籍には,
- botとは何なのか
- いったいどれくらいの額を稼いでいる人がいるのか
- 売買ストラテジーに関するサンプルコード
こうした書籍は,通常,成功体験しか書かれておらず,再現性に乏しいものです.しかし,予想に反して,かなり実践的な内容が載っています.
サンプルコードを理解する
年末年始の休みを利用して,richmanbtcさんのサンプルコードを読み込みました.様々なアイディアに溢れており,感心しました.mlbot_tutorial/tutorial.ipynb at master · richmanbtc/mlbot_tutorial · GitHub
一つ一つのロジックは,それほど難しいものではありませんが,最初は苦労すると思います.ネットで検索すれば,このコードで勉強している人の記事が出てくるので,参考にすると良いと思います.
richmanbtcさんのチュートリアルをじっくり読んでみた|黒枝|note
個人的には,まず,「どこからが機械学習を使ったものなのか」を理解するのが良いと思いました.最初に出てくる右肩上がりのグラフは,機械学習を使ってないんですよね.すごくないですか?
動くものを作る
richmanbtcさんの本では,実際の売買をするところまでのコードは載っていません.これまでの経験から,とりあえず動くものをつくって,最小ロットで運用して改善していくのが良いのではないかと思います.
理由は,自分がつくったbotがどのように注文を出しているのかを,チャートと一緒に眺めていると,損を出すパターン・プログラムのバグ・新しいアイディアがどんどん見つかるためです.
私は,ネットで見つけた実装例を購入して,それをベースに改良を重ねました.自分でイチから構築する工数に比べて,かなり割安な価格だと思いました.
改良する
特徴量や執行条件,モデルなど,いろいろ変えてみましょう.結果が全然違ってくることがわかります.はじめのうちは,できることを少しづつ試すのが良いと思います(パラメータの値を変えるとか).
そのうちに,段々とできることが増えて来て,「気になったことを片っ端から試してやろう」という気になってきます.
richmanbtcさんのFAQも参考になります.行き詰まったときにみると,ヒントが見つかるかもしれません.
FAQ|richmanbtc|note
特徴量
まず,TA-Libにあるものをすべて追加しました.使えないものを使えないと諦めるのではなく,なぜ使えないのか?使う方法はあるか?と考えて,特徴量を加工しました.
また,統計解析の本を眺めたところ,いくつか思いつくアイディアがありました.
執行条件
少し条件をいじってみればわかるように,リターンに対する影響がものすごくデカイです.執行条件の良し悪しは,「毎時刻、この執行方法でトレードした場合の累積リターン」を使うと,モデルの学習をせずにある程度判断できます.
条件が良くないと,グラフが右下がりになってしまうのです.このまま機械学習をさせても,最終的なリターンは良くならないです(少なくとも私が試した範囲では).
モデル
モデルの内容は殆ど理解していませんが,以下の書籍を参考にいろいろと試したところ,かなり改善する場合がありました.実装
バックテストと実環境の動作がだいたい同じにならないと,バックテストをもとにした改良の意味がなくなります.ここをいい加減に考えて,「バックテストよりは有利なはず」と思いこんで実装した結果,利益が全然でなくなるパターンもありました.
最初は「実環境でもバックテストと同じように動作するように実装すること」がメチャクチャ難しいです.こまめに実動作とバックテストを比較して,乖離があったら原因を確かめる必要があります.
逆に,バックテストで実環境を模擬するのが難しいこともあります.例えば,「成行注文」について,いくつかモデル化のパターンを試したところ,ぜんぜん違う結果になりました.
*1:成績としてはあまり良くなく,そこそこ利益が出た後,「全モ」してしまいました.バックテストでは利益が出ているので,相場環境が悪いのが原因だと楽観的に見ています.また,相場環境が良くない状態は,機会損失を考えずにbotを開発に集中できる良い機会だと言えるかもしれません.私は,この相場環境でも利益が出るbotをつくってやろう!と思っています.