見出し画像

【bitFlyer - LightningFX】アルゴリズム高頻度取引mmbotの作り方,考え方,サンプルコード紹介 - 2021年1月最終更新

<要旨>
bitFlyer - Lightning FXでは,金融庁へ登録制となり話題となったHFT(超高速取引)に類似した概念の,mmbotという流動性供給の自動売買システムが話題になっている.当noteはmmbot作成にあたり筆者の経験と考え方を紹介し,実際に運用させたプログラムコードのサンプルを公開する.プログラム未経験者でも運用ができるよう,環境構築手順から案内をし,誰でもソースコードの切り貼りのみで稼働可能な説明を目標としている.読者がMMBOTの運用に必要な環境にはAWS Cloud9を紹介し,ソースコードのプログラム言語はRuby及びPythonとした.なお,アルゴリズムの有意性は線形モデルによる統計データを用い単純化したうえで紹介をする.
当noteにおいて,一般的なmmbotの特徴を述べる時は “mmbot” とし,筆者が作成したmmbotを述べる時は “MMBOT”とする. 




はじめまして.訳あって匿名にてnoteを投稿させて頂きます.


当noteでは,私が仕事の延長線上で作成した高頻度取引mmbotの作り方や考え方,また実際に運用させていたMMBOTのプログラムのサンプルコードを紹介します.環境構築の説明もしていますので,ソースコードのコピペのみでMMBOTの運用ができます.私が主として,仮想通貨市場における,自動売買アルゴリズムを運用させていたのは数ヵ月前で,こちらのnoteの執筆も数ヵ月前から初めていましたが,本職の方が忙しく,日の目に出るのが遅れてしまいました.

セビル&セビーさん(@Seville1985)という個人主催の天下一BOT会(開催期間:2018年6月17日~2018年6月23日,エントリー数:24名)にて,らっちょさん(@rc_uni0907 ‏)が華麗なる優勝を果たし,それをきっかけにmmbot,いわゆる,マーケットメイキングのアルゴリズム取引に注目が集まったかと思います.マッケートメイキングは本来,取引所に流動性をもたらす目的で対象資産の売買を繰り返していますが,仮想通貨という未発達の資産(厳密には取引所)の特性上,一個人が参入しても採算が合うアルゴリズムが作れてしまいます.これは仮想通貨でしかありえない現象であり,個人レベルで為替や株のマーケットメイクに参加することは非常に難しいです.資金力は当然のこと,情報技術・市場・金融工学・統計・取引所・インフラ・法規制に精通している必要があり,一般論としては,参入障壁は非常に高いと考え,仮想通貨はその他市場と比べると,この分野において特殊であると言えるでしょう.

当noteにてMMBOTを紹介することにした理由は,単純に自身の経験を流布したかったからです.個人として『仮想通貨市場における流動性不均等下での高頻度取引の検証実験』(笑)をまとめる体力も時間もありません.なぜ有料にしたかと言えば,初期購入者の利益を守るとともに,自身の経験にどれだけ価値が付くか確認したかったからです.昨今は,高額noteに対する批判が強いそうですが,批判している方は皆mmbotの恩恵を受けている方々かと思います.金融業界が閉じられた世界で発展が遅れていると言われている諸悪の根源は,“名誉”より“金”が優先され,有益な情報が一部に偏っているからだとも言われています.自己の取り分が少なくなることを,広めようとしないのは当たり前のことかと思います.当noteも当然そういった方々からの批判の対象であるに違いませんが,これをきっかけに仮想通貨市場での流動性問題について有意義な議論が進めば本望です.

私の本職は,仮想通貨市場での,アルゴリズム取引の運用ではないため,まとまった時間がとれたこともあり,仮想通貨市場での経験を初心者でもわかりやすくまとめさせて頂いた次第です.裁量トレーダーの方も,bitFlyer - Lightning FXの出来高の8割を占めていると言われるアルゴリズム取引が,どういったロジックで動いているのか,ご参考にして頂ければと思います.



----------------------------------------------------------
目次
1. mmbotの基本とコスト
2. MMBOTの有効性
3. MMBOTの統計的有意性
4. MMBOTのロジック
5. パラメータの考え方
6. Q&A
7. MMBOTの稼働環境構築
8. MMBOTのソースコード
9. リスク
10. 補足説明 (※12月22日 追加)
----------------------------------------------------------




1. mmbotの基本とコスト



mmbotはbuyとsellの両方を指値として提示し,他の参加者による成行注文を呼び込んでいます.自身が提示したbuyとsellが約定することによって,提示したbuyとsellの価格差のスプレッドがmmbotの収益源になります.一回の取引における利益はとても小さいですが,この作業を数千回,数万回と繰り返すことによって全体の利益を生み出してきます.

画像1

理論上は対象資産の価格の上下は予想しなくとも利益は出ることになりますが,仮想通貨のmmbotで重要になってくるのが短期での価格上下の予想です.正しい方向の指値は約定しづらく,不利な指値のみが約定しやすいという市場原理が働くため,上述のようにbuyとsellが同時に約定し,スプレッド収益を得続けることは難しいです.情報の非対称性により,mmbotの運用は逆選択のリスクに常にさらされています.どちらか一方のみが残ってしまい,価格が不利な方向へ動いてしまうことがmmbotのリスクであり避けなければいけないことです.
これを避けるためには,必然として上下の価格予測が重要となっており,それに対応するためのアルゴリズムが必要となってきます.でたらめにbuyとsellの指値を提示していても,いくらかは利益が出るかもしれませんが,いずれかは全体の利益はマイナスになります.高頻度で取引を繰り返すため,有意な予測ができない場合には期待値はマイナスとなり,大数の法則より必ず破産します.
このことより,mmbotのアルゴリズムで最も重要になってくるのは短期での価格予想です.利益を出しているmmbotの大半は,本来のマーケットメーカーとしてスプレット収益ではなく,大部分が価格上下による超短期のキャピタルゲインだと考えています.これに当てはまらないケースとしては,リベート制度がありますが,現時点では国内の仮想通貨取引所で対応しているところはありません.


次にコストですが,上記でも述べた予測に対する逆選択から発生するコストではなく,利益を阻害する普遍的なコストをご説明します.

画像2


一つは,コミッションコストです.流動性の観点から実際に多くのmmbotの運用先はbitFlyerですが,bitFlyer - Lightning FXにおいてはbuy/sell,make/takeともに取引手数料はかかりません(正確にはスワップポイントが手数料として差し引かれますが無視できる大きさです).しかしながら,テイカーメイカーモデルを考慮せずに議論するのであれば,取引所の正常運営を鑑みると取引手数料は取られてしかるべきです.現時点では,取引手数料はかかりませんが,いつ発生してもおかしくないでしょう.よって,現時点では無視できる事柄ですが,単位取引あたりの利益が少なく,高頻度に取引をするmmbotにおける潜在的な最大のコストだと考えます.


第二のコストはレイテンシーコストです.レイテンシーコストは情報の伝達,取得,分析,発信までのタイムラグです.当然ながら時間は不可逆で停止することはありません.bitFlyerのマッチングエンジンでの処理時間,データが自動売買システムへ到達するまでの時間,その後分析に要する時間,分析を基に注文を出しマッチングエンジンまで到達する時間,これらは全てミリ秒・ナノ秒単位で時間が経過しています.自動売買システムが分析するデータは既に過去のものであり,マッチングエンジンと自動売買システムには時差が存在します.現時点では,仮想通貨取引所はコロケーションサービスを提供していないため,一個人が競う相手は一個人であり,そこでの差別化はさほど大きくないと考えます.これが,機関投資家が入ってくると,ナノ秒単位,もしくはそれ以下での争いになり,個人投資家では太刀打ちできない次元へ発展するでしょう.
レイテンシーコストを最小化するためには,地理的有意性,ネットワーク速度,回線経路,アルゴリズム処理速度,反応速度,など様々な検討材料があります.また,公式のAPIではなく,Web APIを使った通信が有利とも言われています.bitFlyer - Lightning FXにおいては,取引所システムの外部からの負荷の耐久性のなさが顕著に出ており遅延が頻繁に起こります.mmbotにおいてレイテンシーコストを下げるための工夫は避けられない課題でしょう.


第三は流動性コストです.流動性コストはいくつかに分けることができます.手持ちのポジションが期待された価格で処分できないコスト,自己の取引によるマーケットインパクトから生じるコスト,期待された価格で注文が約定されない機会損失コスト,これらはレイテンシーコストと異なり,他の投資家との相互作用によってもたらされるものです.同じような戦略の投資家が多ければ多いほど,流動性コストは高まり,自己の利益は小さくなります.仮想通貨においては,長らくマーケットメーカーがさほどおらず,統計的有意性を持たないmmbotでも指値を供給し続けるだけで利益が出ていた時期がありました.mmbotが着目されているいま,流動性コストを最小化するためには他のmmbotより正しく動く必要があります.利益を最大化するという意味では,mmbotの最大の敵は,同じ時間軸を見ている他のmmbotです.さて,流動性コストを下げるための具体的な取り組みは,手持ちのポジションを利益極値点まで最小化する,一回あたりの約定サイズを最小にする,他の投資家より1円でも安く/高く,1秒でも早く取引する,ことが大切です.どれも当たり前のことですが,これら流動性コストを下げるための取り組みの重要性を考えてみてください.



2. MMBOTの有効性


図1は,MMBOTの有効性検証期間,2018年12月4日~12月6日の損益の記録です.所々ドローダウンはありますが,全体的に期待値が高いのが分かるかと思います.取引数は各日とも多く,利益を取れるところで確実にとることを目的としたアルゴリズムなのがわかります.今回のテスト運用で大きなロットの増減は行っておらず,最大利益を生みだすロット確認はしていません.私が運用していた数ヵ月前はこの3日間の5倍程度の資金で運用をしていたので,結果のみを追求するなら上を目指す余地はまだまだあります.

12月4日:久々に動かしたため,パラメータ調整が上手くいかずPFが悪くなっています
12月5日:前日と比較するとパラメータも上手く調整されているのがわかります
12月6日:さらに前日より良いパラメータですが,最後に遅延対処ができずに大きなドローダウンがありました

画像19

図1.12月4日から12月6日の3日間のMMBOTによる損益
※利用規約に基づき損益金額をマスクしています(2021年1月3日編集)


3. MMBOTの統計的有意性


mmbotの作成において必ず考慮しなければいけないのは,統計的に有意性があるか,ということです.アルファやエッジとも呼ばれますが,高頻度で取引をする自動売買においては,取引回数を無限と近似し,統計的にみて根拠がある方向やパラメータで指値を供給・キャンセル,することが絶対的に必要です.もしかすると,競合が少ないこともあり,統計的な分析をせずにいわゆる感覚のみでロジックを構築し,パラメータ調整しても,利益が出るかもしれません.これは,仮想通貨市場特有の現象であり,裁定取引同様に先行者利益が強く働いている部分だと考えます.しかしながら,徐々に統計的に考えられているか否かで成績に明暗がわかれており,昔は利益を出していたが今は全く出せていない,という投資家も多くいるはずです.これは,『1.mmbotの基本とコスト』で説明した通り,流動性コストにより,他の統計的考察をし,運用している投資家と比較して投資指標が劣っていることが要因です. “統計的”とは,相関関係がある指標をもとに価格の上下を予測し,パラメータ調整には精度の高い評価ができているか,ということです.でたらめに指値を供給し続けたり,なんとなくの指標をいくつか組み合わせて指値の方向を決めたり,過去の経験によるパラメータ調整をしても上手くいきません.もしも,上手くいっているのであれば,そこに統計的な考察をいれることで,よりシャープレシオの高いmmbotが作れるはずです.

個人で情報発信をしている投資家の中では,UKIさん(@blog_uki)はこれらの感覚はとても鋭く,短命のmmbotを運用する投資家が多い中でも,最も利益を持続し続けられる方かと思います.

前置きが長くなりましたが,MMBOTの売買判断に使用している投資指標の統計的考察の一部を簡単に紹介します.なお,計算の説明と実際の数値データは『4.MMBOTのロジック』でダウンロードできますので,確認したい方はご自身の環境で再現をしてみてください.なお,当モデルは最適化された状況での売買モデルなことをご了承ください.前提としてt=0からt=212400の約60時間分のデータを,遅延なし,取引回数制限なし,スプレッドなし,取引手数料なし,などのノイズがない状態での純粋な投資指標の評価を行っています.また,参考にした価格データは私個人が取得できる範囲で,悪意ある改良のないもので,bitFlyerのメンテンナンス時間など,データは不完全であることにご了承ください.


画像4

図2. 損益曲線


画像5

図3. 度数分布表


画像6

図4. 散布図


図2は,取引を実際に行った場合の損益推移を描写しています.損益は右肩上がりであることから,指標に対する連続的な有意性があることがわかると思います.また高頻度で取引を仮定しているモデルより一回当たりの利益は小さいですが,トータルでは十分な総利益を生み出しています.図3は,指標をヒストグラフで表したものです.正規分布となっていることが一目瞭然であり,これは回帰分析の線形モデルの結果を支持するものになります.もし,正規分布に従わない場合には,リンク関数を用いて従属変数を変換する必要がありますが,その必要性がないことがわかります.図4は,取引毎の損益と指標の散布図です.縦軸が利益,横軸が投資指標ですが,横軸が中心より外にずれると,それに従い縦軸の値も大きく(小さく)なっているのがわかります.その尺度を表すための線形モデルが赤線ですが,決定係数が0.0226,情報係数が0.15であることがわかり,投資指標として使うのに十分であることが読み取れます.
以上のことより,MMBOTは統計的に有意であることが分かり,私が個人としてMMBOTを実装した経緯になります.あくまで,統計的有意なのでmmbotを作った,でありmmbotを作ってみて統計的有意だったでは順序が逆だと考えています.mmbotの作成にあたり,ブラックボックスモデルでも構わないので,一度統計的に有意なのかを判断してみましょう.



4. MMBOTのロジック


私が作成したMMBOTのロジックをご紹介します.ロジックの投資指標の説明とその使い方,『3.MMBOTの統計的有意性』で用いた計算と実際の数値データ,そして,『8.MMBOTのソースコード』を運用させるために使用するパラメータの説明をします.

(4. MMBOTのロジック 有料部3932文字.内容は購入者限定とさせて頂きます)




5.パラメータの考え方


パラメータの調整は投資指標の選別と同程度重要です.ほとんどの方が今までの経験に基づき,その日のパラメータを決めていると思います.mmbotなどの高頻度取引においては,人間の感覚でパラメータを決めることは避けるべきです.今日は出来高が多いからロットを増やすだとか,値幅が大きいから指値を遠くに置こうとか,今朝大きなドローダウンがあったからストップ注文を浅めに設定しようなど,経験則で決めてはいないでしょうか.高頻度取引は1円,2円の差で運用成績は大きく左右します.HFTも含め多くのファンドは,そのような人間の感でパラメータの設定はしていません.アカウントを複数使用し,または協力者を集い,フォワードテストで良かったものを翌日以降に採用する方法があるかもしれませんが,それにも限界があります.
変更可能なパラメータが4つあるとし,それぞれ10~100まで10刻みで変更をするとしても,10000通りあります.その10000通りから何を選ぶかにより,運用成績は大きく左右されます.10000通りから自分の経験則で決めたパラメータが,その日の自動売買を運用するのに最適解なはずがありません.同じアルゴリズムを使ったとしても,パラメータが異なれば結果は大きく異なってきます(正確に言えば同じパラメータを使っても外的要因で同一にはなりません).パラメータの調整は投資指標の選別と同程度大事なことです.ここでは,私たちがどうやってパラメータの最適化をしているかの方法をご紹介します.

(5.パラメータの考え方 有料部2229文字.内容は購入者限定とさせて頂きます)



6.Q&A


Q. noteを購入しMMBOTを起動すれば絶対に儲かりますか?
A. いいえ.投資に絶対はなく,必ず儲かる自動売買は全て詐欺だと思ってください.そもそも投資は余剰資金でやるものであり,リスクないリターンはありません.もし,あなたが生活費に困窮しているほどであれば,購入はお勧めできません.少しでも自分で調べ,学び,疑い,工夫し,行動する方のみご購入頂ければと思います.

Q. 値下げはありますか?
A. 初期購入者が不利になるので値下げは考えていません.

Q.一般販売することで,MMBOTの有意性は多少なりとも失われませんか?
A. 失われます.流動性リスクの観点からも,他の購入者が全く同じパラメータであれば,同時刻かつ同価格での指値供給の可能性が増し,一人当たりの利益は必然的に小さくなります.また,MMBOTを狩ることが目的とする購入者がいてもおかしくありません.
(投資指標の有意性が失われるか?という問の答えはNoだと考えています.そこまで市場をコントロールする程の影響力はないでしょう)

Q.購入後のサポートはありますか?
A.基本的に売り切りの自動売買プログラムです.一度稼働が出来れば,その後私からデータの提供・その他サポート等必要なことはありません.本職の合間にこちらの作業をやっているため,そこまで時間もなくサポートは原則ないものとご判断ください.販売後に,noteの追加情報等に関しては専用アカウント@mmbotXXXでご案内します.なお,noteの内容に関することや本職のこと等,質問にはお答えできかねますのでご了承ください.

Q.APIキーとシークレットを提供する必要はありますか?
A. ご自身でプログラム上にて管理して頂くため,私を含め第三者へ開示する必要はありません.


Q. 他の人が運用しているmmbotの違いが知りたい

 A. mmbotの戦略の違いがわからない方はこちらを参考にしてみてください.必ずしも,これらの戦略に分けられるとは限りませんし,それぞれ独立した戦略として捉える必要がないことは,念頭に置いてください.まとめたのは少し前ですが,基本は変わらないのでmmbotの理解に役立つと思います.

MM分類_v2



※その他のQ&AやMMBOTに関する情報はTwitter @mmbotXXXでツイートさせて頂いていますので,こちらもご確認お願い致します.


7.MMBOTの稼働環境構築


MMBOTの運用にはAWS Cloud9を使用できます.『8.MMBOTのソースコード』では,RubyとPythonでソースコードを公開しているので,これら言語を実行できる環境があればCloud9を使用しなくとも問題ありません.ここでは,プログラム初心者のために,利用のハードルが低いCloud9をご紹介させて頂きます.
AWS Cloud9はインターネットエクスプローラー等のブラウザを用い,プログラムを稼働させることができる統合開発環境 (IDE)です.定額のVPSなどをレンタルすることなく,自宅のPC等から無料でクラウドベースのサーバへアクセスし,だれでもインターネットに接続しているPCがあれば利用することができます.
なお,Cloud9での環境構築はRubyを想定したケースのみご説明いたします.Pythonでの情報はインターネット上に沢山ありますので,ここでは割愛をさせて頂きます.


MMBOTの稼働環境構築はPDFにまとめましたので,次のURLよりダウンロードをして頂ければと思います.




8.MMBOTのソースコード


(内容は購入者限定とさせて頂きます)




9リスク


投資にリスクはつきものです.自動売買プログラムで,絶対に損失がなく,必ず儲かるというものは存在しません.特に,仮想通貨という特性上,値動きが激しく思いがけない損失を被る場合があります.また,価格判断や取引注文をプログラムに依存している以上,想定外の事象により,ポジションをもったままシステムが停止する可能性があり,不利方向に相場が動けば損失を被ります.高頻度取引特有なこととしては,期待値がマイナスな状態で運用を続けると右肩下がりに資産が減少します.初期運用時には出来るだけ見守り,想定外の事象がおこっていないか確認することを推奨します.また,必須条件ではありませんが,理想としては,『8.MMBOTのソースコード』で紹介する,ソースコードが理解できると良いと思います.何の処理をどの順序で行っているか理解することによって,自身で改良しリスクを減らすための工夫をして頂ければと思います.

/////////////////////////////////////////////////////////////////////////////////////
MMBOTはbitFlyer - Lightning FXで運用できる仮想通貨の自動売買のプログラムです.仮想通貨取引所が提供しているAPI等を使用し,対象通貨に関する情報を取得,保有,分析,計算,取引の注文,等を実行し,これらを自動で繰り返し行うプログラムです.当該プログラムの利用にあたり筆者から継続的に投資情報に関わるデータやその他サポート等の提供を受ける必要はありません取引前にはbitFlyerの仮想通貨取引におけるリスク(https://bitflyer.com/ja-jp/risk)を確認して下さい.万が一,当noteが原因による損害が生じた場合でも,損害の責任は購入者にあり,筆者を含め,各関係者(株式会社ピースオブケイク,Amazon Web Services, Inc.,当noteの推薦者)は一切の責任を負わないこととします.当noteや自動売買プログラムにおける,明示的か否かに関わらず,様々な想定しうるリスクをご理解,ご了承頂けない場合にはご購入お控え下さい.当noteに記載された内容はあくまで個人的見解に基づくものであり,筆者が所属する組織の意見ではなく,また,内容は必ずしも正確であるとは限りません.
/////////////////////////////////////////////////////////////////////////////////////



10. 補足説明


(1) 在庫管理について

マーケットメイクにおいて在庫管理とは逆選択のリスクにどのように対処するかと同じことです.在庫とは当然ながら自身が保有しているポジションのことであり,mmbotは従来のマーケットメイクによるスプレッド収益ではなく…(10.補足説明 在庫管理について 有料部2396文字.内容は購入者限定とさせて頂きます)


ここから先は

26,585字 / 11画像

¥ 50,000

この記事が気に入ったらチップで応援してみませんか?