noteのタイトル画像

[Puppeteer] mm botを作ろう、、と思って挫折しているあなたへ (00:導入編)

連載開始について

すっかり記事執筆から遠のいてしまっていました。申し訳ありません。

資格試験受験日が今月末なので、現在追込中ですが、ずーっと資格の勉強ばっかりしていると脳味噌の働きが偏る感じなので、たまには違うことを考えないと逆に馬○になりそう。
AIも同じことをずっと学習させていると知識が偏って間違いを連発するとかいう話を聞いたことがあります。
なにごとも適度が良いってとこですよね。

さて、これからはタイトル通り「mm botを作ろう、、と思って挫折しているあなたへ」をディアゴスティーニ・スタイルの連載で執筆していきたいと思います。

ディアゴスティーニをご存じない方はググっていただければ直ぐに情報はヒットすると思います。
良く書店で見かける”週刊”とかで販売されて「全巻集めるとタイトルのものが完成する」っていうやつです。

私も二足歩行ロボットシリーズが欲しかったり、第二次世界大戦の航空機シリーズが欲しかったりしたのですが、あれだけの冊数を継続して購入していいける気がしなくて手が出ませんでした。

そうこうしているうちに高機能ドローンが超絶安価になったり、Raspberry Piのような手のひらサイズのコンピュータが1万円以下で購入できたりと、、即買い出来る方になびいてしまいました(笑)

ってなことを言うと、「おいおい、ディアゴスティーニ・スタイルでnoteを書くって言っている奴がそれを言うか?」って感じですが、こちらのnoteはあくまで週刊誌程度の感覚で読んでいただけると嬉しいです。

マーケットメイクとは

マーケットメイクについては、私がとやかく言うまでもなく、すでに多数の識者の方が述べられているので、詳細は割愛しますが、私がnoteを執筆しだした頃にふと目に止まった記事がこちらです。

スキの数が現在600を超えているので、多くの方が参照されたことは間違いないですね。

マーケットメイクの理論について詳しくお知りになりたい方は、magitoさんも参照されている

をご覧になると良いと思います。
残念ながら、私は途中で挫折しましたが。。

マーケットメイク戦略をbotにするには

さて、マーケットメイク戦略が概略がわかった(めちゃくちゃ他力本願)ところで、この考えからどうやって儲けを出すかを考えます。

スプレッドの僅かな隙間に指値(もしくは成行)をねじ込んで、揺れ動く板に追従し、指値を出したり引っ込めたりする所業はとても人間業では出来ません(いや、断言は出来ませんが、私には無理)。

目にも止まらぬ速さで演算して、指値(もしくは成行)の値・数量を決めねばなりません。つまりbotの出番でしょう。

ですが、ちょっとだけ待ってください。
botとして実装してしまう前に戦略というかbotに対する要件を考えましょう。

実装の前にbotの要件を決める必要がある

本来は要件(システム要求)を考える前に、要求(ユーザが求めるもの)を確定する必要があるのですが、今はまだ要望(まとまっていない要求)や要求(ユーザの求めるものの総意)については一旦横に置いておいてbotの「要件」について考えます。

なぜこんなことを前置きするかと言いますと

いきなり実装を始めると大抵は失敗します。

良い案を思いついたと思って実装を始めると、多くの場合、後から手直しが多くなり、どんどん実装が複雑になって改修困難な状態に陥ります。

今回のタイトルの「挫折してしまった」方々の多くが、実は良いアイディアを持っていながら、闇雲に実装を始めたがために

プログラムの内容がワケワカメな状態になってしまった

という人も居るのではないかと思っています。

どんなに簡単な実装でも、ちゃんと要件を考えてから、その本分に沿った実装(プログラムコードを書く)を心がけましょう。

残念なことですが

実装は”誰にでも”出来ます

しかし、それならなぜ世間ではSE(システム・エンジニア)が不足とか言われているのでしょう。

その答えは実装スキル(ほぼプログラミング・スキルと同義)以外のところにあると私は思っています。

これから国は小学生にすらプログラミングを教えると言っているし、プログラミング・スキルを多くの人が持つ時代が来るでしょう。
プログラミング・スキルだけで飯を食っていくのは困難な時代になってきます。

要件を定義する

さて、では「要件」とはなんでしょうか?
めちゃくちゃ簡単に言うと

システム(今回はbot)が「できる」こと

だと思っています。

こんなことを言うと、きっと「んなこと、言われなくても分かっているよ!」という声が聞こえてきそうです。

ですが、実際に開発を進めていると、本当に”要件定義”が出来ていない人が多い。

先程紹介したmagito氏も、掲載されているサンプル実装を書く前にはきっとちゃんと要件定義をしているはずです。

サンプルを読んでざっとわかることは

・板に乗っている数量と注文数量から実行スプレッド幅を知ることが「できる」
・実行スプレッドの値によって発注とキャンセルをコントロールすることが「できる」

などです。
(列挙しようと思えば、もっとありますが割愛します)

また、制約条件として「取引所はbitflyerに限定」されているようですが、これは実装上bitflyer用のモジュールを利用しているからであり、要求から導き出された要件ではないので、ここでは割愛します。

要件は必ず上位の「要求」に応える必要がある

物事が前後しますが、要件「・・・ができる」は、その上位の要求「・・・したい」を満足するものでなくてはなりません。

例えば、先の例のmm botの場合

「スプレッド幅拡大のタイミングで指値を置いて、効率よく利益をあげたい」

というような要求になることでしょう。
「スプレッドの幅を狙って差益を得ることが出来る」という着想から、利益を上げたいと考えたわけですね。

ここまでくると、多くの方が

「あれれ?要求が違えば、当然要件も違うし、実装も違ってくるのでは?」

と思われたと思います。

そうです。先程「要望・要求は一旦置いておいて」と言いましたが、本当に大事なことは

ユーザが何を「したい」のかをちゃんと理解していること

だと思います。
いきなり実装に突入してしまう人は、今一度「このbotに何をしてもらいたいんだっけ?」を考えて、要求を書き出してみることをおすすめします。

mm botを作ろうと思って、その思いを書き出す

あれもしたい、これもしたいってことで、色々な要望(まとまっていない要求の素)が出てきます。

・bitflyerFXで取引するならTaker手数料も0だし、mt(market taker)でも良いんじゃない?指値じゃなくて成行でサクッと約定させたい。
・スプレッドが拡大するまで待ってないで約定機会を増やす方向で利益を上げたい。
・bitmexなどTakerの手数料が高い取引所ではmaker取引をしたい。あ、ってことはmaker売買を高速で行って手数料で利益が出せないか?高速で指値を約定させて手数料を得たい。

などなど。

目的は「利益を上げる」ことなので、その目的を達成するために
「こんなこと出来ないかなぁー」とか、「こうだったら良いのに」っていう思いがたくさん出てくることでしょう。
でも、かなりの数の要望が衝突(利害が一致しない)することになると思います。

こんなまとまりのない「要望」を整理して、一貫性を持ってまとめたのが「要求」です。

さて、あなたの要求は何でしょう?

いくつもの衝突する要望を整理して、

これがしたいんだ!

ってことがまとまったら、それらを要求として「一旦」確定します。
(一旦と断りを入れた理由はまた他の回でお話しましょう)

今すぐにまとまらなくても、一晩寝かせておいて改めて読み比べると、意外と整理できるものなので、無理をせずにまとめていきましょう。

次回以降に

次回以降の予告です。

Puppeteerを使って、実際にmm botを作っていきます。

どれだけのパターンのmm botが連載できるかはわかりませんが、最低でも数ヶ月前にbitmexで実運用した「ヘカトンケイル」に近い形のものは作りたいと思います。

ヘカトンケイル(イメージ図)

現在、testnet.bitmexで連続運転させている「バーサーカー」については資格試験受験が終わったら本格的にパラメータ調整したいと思っています。
testnet.bitmexでは全然負けないのでそろそろ飽きました(笑)

バーサーカー(イメージ図)

バーサーカーのtestnet.bitmexでの運転実況はDiscordグループで公開しています。

楽しいbotライフを!



この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

note.user.nickname || note.user.urlname

ソフトウェア・エンジニアを40年以上やってます。 「Botを作りたいけど敷居が高い」と思われている方にも「わかる」「できる」を感じてもらえるように頑張ります。 よろしくお願い致します。

嬉しくて、泣けます。
10
ソフトウェア開発40年以上の実績を活かして、初心者・中級者の方にトレードBotの作り方を丁寧に伝授します。 プログラミング言語はサーバサイドJavaScript (Node.js) 、Pythonを基本に、最新かつ有効な手法を取り入れます。 twitter: @o_matsuo
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。