// 生成AI×Botで副業を仕組み化するリアルな記録
AI・Bot開発

買い戻し価格ロジックを変えたら約定頻度が上がった話

買い戻し価格ロジックを変えたら約定頻度が上がった話

botが動くようになってしばらく経ったころ、こんな疑問が出てきた。

「買い戻しの注文、もっと早く約定させられないか?」

サイクルが速くなればなるほど、メイカーリベートが積み上がる。1日10回より100回の方が稼げる。でも買い戻し注文が約定しないと次の売り注文が出せない。ここをどう改善するか——今回はその試行錯誤の記録だ。


1. 最初の設計:平均建値ベースの買い戻し

最初は「平均建値(平均の売り価格)の少し下に買い戻し注文を置く」という設計にしていた。

買い戻し価格 = 平均建値 × 0.999

考え方としてはシンプルで、「売った値段より少し安く買い戻せれば利益が出る」という発想だ。

ところが実際に動かしてみると、相場が動いたときに問題が起きた。

たとえば、XRPが200円のときに売り約定して、平均建値が200円になったとする。買い戻し注文は 200 × 0.999 = 199.8円 に置かれる。

その後、相場が180円まで下がったとしよう。板の中心はすでに180円付近にあるのに、買い戻し注文は199.8円に置いたままだ。こうなると買い戻しはほぼ約定しない。

相場の動きと買い戻し価格がどんどんずれていってしまう、というのが最初の設計の弱点だった。


2. 何が問題だったのか

整理すると、問題の本質はこうだ。

平均建値は「過去の価格」であり、現在の相場とは関係ない。

相場が上がっても下がっても、平均建値は変わらない。だから買い戻し価格も固定されたまま、現在の相場から乖離していく。

特に相場が下落したとき——つまりショートにとっては有利な方向に動いているときでも——買い戻せないという状況が発生していた。


3. 改善案:現在の相場を基準にする

そこで買い戻し価格の計算を以下のように変えた。

買い戻し価格 = min(直前の約定価格, 現在のミッドプライス) × 0.999

「直前の約定価格」と「現在のミッドプライス」の低い方を基準にする、という式だ。

なぜ低い方を取るのか。

売り約定した直後は「直前の約定価格 ≒ ミッドプライス」になることが多い。でも時間が経つと相場が動く。相場が下がった(ミッドプライスが下がった)なら、それに合わせて買い戻し価格も下げる。相場が上がった(ミッドプライスが上がった)なら、約定価格の方が低いのでそちらを基準にする。

どちらに転んでも「今の相場の近く」に買い戻し注文が置かれるようになる。


4. この変更で何が変わったか

この変更によって、3つのことが改善された。

① 約定頻度が上がった
買い戻し価格が現在の相場に追随するので、注文が板の近くに置かれ続ける。結果として約定のチャンスが増える。

② メイカーリベートの積み上がりが速くなった
サイクルが速くなるので、1日あたりの約定回数が増える。手数料リベートを受け取る頻度も上がる。

③ 平均建値が徐々に上がっていく
売り→買い戻しのサイクルを繰り返すと、現在の相場付近で売り直しが入るので、平均建値が少しずつ引き上げられていく。平均建値が高いほど、最終的な利益が大きくなる。


5. 実際に変えてみた結果

ロジックを変更して稼働させたところ、1日あたりの約定回数が明らかに増えた。

さらに面白いことが起きた。理論上の期待利益(スプレッド収益+リベート)を計算して実績と比較したところ、実際の利益が理論値を上回っていた

原因はまだ完全には特定できていないが、いくつかの仮説がある。相場が薄い時間帯に有利な価格で約定していること、平均建値の引き上げ効果が想定より大きいこと、などが考えられる。この謎は引き続きログを蓄積して分析していく予定だ。


6. まとめ・次回予告

今回の変更のポイントをまとめると:

  • 平均建値ベースの買い戻しは、相場が動くと乖離が起きやすい
  • min(直前の約定価格, 現在のミッドプライス) × 0.999 に変えることで相場に追随できる
  • 約定頻度が上がり、リベートの積み上がりが加速する
  • 売り→買い戻しのサイクルで平均建値が徐々に引き上げられる

こうして信用売りbotとして一通りの完成を見たわたしのbotだったが、次の疑問が出てきた。

「もっと効率的に稼げる設計があるんじゃないか?」

次回は、両建てクォート戦略を検討して最終的に現物マーケットメイキングに移行するまでの、判断の過程を書いていく。


使用技術:Python / python-bitbankcc / PubNub / python-dotenv