見出し画像

3年間、仮想通貨自動売買BOTを作って思うこと。

 どうも

 愚者の戦略です。

 今回は、3年間仮想通貨自動売買プログラムの作成、運用をしてきて、思うことを書いていきます。

 自動売買BOTの現状や難しさについて、興味のある方の参考になれば良いなと思ってます。

自動売買を始めたきっかけ

 きっかけは、深夜に発生した暴落に巻き込まれたことです。
 2018年当時、勢いのあったzaifという取引所で信用取引をしていたのですが、深夜にzaifがハッキングに合いBTCが暴落したことがありました。

 簡単に言うと、朝起きたらロスカットして手持ちの資金がぶっ飛んだ訳です。

 大学生だったこともあり、なけなしのバイト代を入れていた程度なので大した損失額ではないですが、人生で初めてロスカットを経験しました。その時、「手動売買は向いてないし、いっちょ自動売買の勉強でもするか!」と思い立ち、自動売買を始めた感じです。大学4年の夏はプログラミングの勉強と卒論に費やしました。


コツコツ儲けるプログラムは簡単に作れる

 意外と思われるかもしれませんが、ある相場でコツコツ儲けるプログラムを作るのは難しくありません。例えば、「1時間足のRSIが20を下回ったら仕込んで、3%上昇したら手仕舞い」のような単純ロジックでもコツコツ稼ぐことができます。おそらく、自動売買プログラムの勉強を初めて最初に作るプログラムはこういう系だと思います。
 ちなみに僕が一番最初につくったプログラムは「移動平均線のゴールデンクロスで買って、デッドクロスで売る」プログラムです。言うまでもなく儲かりませんでしたが・・・

 ただ、ここで問題なのは「ある相場でしか機能しない」ということです。上記の例であげたプログラムはレンジ相場でしか機能しません。トレンドのある相場ではRSIが20を下回っても、さらに価格が下がるような状況が普通に起こります。そんなとき、別で設定した損切基準にしたがって損切りする流れとなりますが、多くの場合この損切で今までコツコツ積み上げた利益をすべて吹き飛ばし、結果的に損失が発生します。

 「いやいや。それなら損切ライン厳しめにしたらいいだけでしょ?」と思われるかもしれませんが、損切しやすくすると、今度は本当は儲かる相場でも損切が多発してしまい、結果的に損失が発生するようになります。

 「じゃあ、仕込む条件をもっと厳しくすればよいのでは?」と考えるようになるのが自然な流れでしょう。例えば、「日足RSIが30以下かつ、1時間足のRSIが20以下の時に仕込む」などといった感じで複数条件で仕込む基準を設定する場合です。

 こうすると、仕込んだ際の勝率は確かに高くなりますが、月に数回しか買わないようなボットになります。月に数回しか買わないなら、わざわざBOTにする必要は無いですよね?
 また、「仕込む条件を厳しくする≒損切り条件をゆるくする」ことになります。理由は先程述べたとおり、損切り条件を厳しくすると本当は儲かる相場でも損切が発生してしまうからです。

 ただ、これをやると、損切りの際の損失が大きくなるので、結果的に利益が吹っ飛びます

 また、いくら損切り基準をゆるくしてもフラッシュ・クラッシュで損切りラインにかかって、利益が吹っ飛ぶこともザラにありるのが現状です。

バックテストと実運用の結果は乖離する

 バックテストでうまく儲けが出ることがわかっても、いざ運用すると儲からない。なんてことがよくあります。

理由としては

1.バックテストはその価格で即時約定する前提だけど、実運用では指値注文が刺さらなかったり、成行注文で価格がずれる。特に成行で損切り注文出すときはかなりずれる。

2.多少なりともオーバーフィッティングしてしまうため、儲かるように見える

です。

なので、バックテストで運用成果を見るときは、基本的に

・不利な価格で約定するように設計する

・パラメタの調整はオーバーフィッティングしていないか常に気にかける

ことが必要です。


いかにうまく損切りできるか

 結局、BOTの本質は仕込みでも、手仕舞いでもなく損切です。

 どんな相場でも儲かるBOT=損切がうまいBOT

 自動売買BOTを作った経験のある方なら同意してくれるはず。損切り基準やロジック作成はほんとに難しいです。

 ここまでの話から、損切設定は自動売買BOT作成で避けては通れないことがお分かりいただけたかと思います。じゃあ、どうすれば損切り問題に立ち向かえるのか?僕は2通りのアプローチがあると考えています。

①損切り問題に立ち向かう
なんとか頑張って理想的な損切設定を模索し続ける!

②損切り問題を避ける
損切しなくて良いロジック、もしくは、損切りすることがほぼ無いロジックのBOTを組む

 ちなみに、多くの自動売買で利益を出しているBOTは②です。①のアプローチで作られたプログラムは大抵バックテストの成績は良いけどいざ運用すると儲からない。謳い文句はAIトレード。みたいなのが多い印象。。。。

どんなロジックなら儲かりやすいのか

 儲かりやすいロジックを2つ紹介します。

ーーー 高頻度取引BOT(スキャルピング系BOT) ーーー

 1日に数十~数百回の取引を行うBOTは儲かりやすいロジックの一つと言えるでしょう。理由は単純で、損切基準をあまり意識しなくてよいからです。

 基本的に高頻度取引BOTは仕掛けてから手仕舞いするまでの間隔が数十秒〜数分程度です。つまり、何かしらの買い判定基準で購入し、数十秒後に狙った状態(例えば、価格が0.1%上昇しているなど)になっていてもいなくても売却するような振る舞いのものが多いです。

 なので、高頻度取引BOTは損切り基準ではなく、「いかに高い勝率で仕込むことができるか」に注力すれば良いことになります。

 普通のスイングトレードBOTなら、仕込むロジックに加え損切りロジックも適切に設定しないと儲からないため、なかなか難しいです。

 というか、仮想通貨のスイングトレードBOTで「継続的に」儲けてますって人に会ったことがないです。Twitterとかブログで利益公開してる方ってほとんど高頻度取引ボットだと思うんですよね。

ーーー リピート系注文BOT ーーー

 こちらは、僕が作成したタイプのBOTになります。

 リピート系注文BOTは基本的に現物で取引し、損切はしません。損切りするとしても、年末に利益額調整を目的として実施する感じです。

 「損切なんてするから儲からないんだよね。加えて、相場は基本ランダムウォークでトレンドない場合は上がるか下がるかなんてそうそう分からない。じゃあ、一定の値幅に細かい現物注文たくさん出して、含み損は解消するまでガチホしようぜ」ってことです。

 つまり、損切基準とか仕込むときの勝率は一切考えなくて良いんですよね。そこが最大の強みです。また「このロジックって今の相場に合ってないのでは…」と考えることもありません。機械学習botで負けが続いたときは、たまたま負けが続いているのか、そのbotのロジック自体がもう相場に合わないのか判断が難しいですよね。リピート系注文はロジックが相場に合わないかも?と不安になることはありません。

 もちろん、その分大きく稼ぐことはできませんが、大量のポジション管理など自動売買のメリットを最大限に生かして取引することができます。

まとめ

・自動売買プログラムは意外と簡単に作れるが、頑健性のあるものを作るのは難しい

・損切基準をどう設定するかが最重要。筆者的には、損切りしないBOTを作るのがおすすめ

・スイングトレードBOTで継続的に儲けるのは難しい

・スキャルピングかリピート系注文BOTを作ろう

チップありがとうございます!超嬉しいです。