Bot mmnot 開発ログ

🛠️開発記録#220(2025/5/13) MMbot開発ログ24「“リベート黒字型” MM Bot、10 分テストで黒転換」

2025年5月13日

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

§0. はじめに

  • 「前回は“可観測性”強化まで到達。今回は スプレッド条件のチューニングと Maker 固定化 がテーマ」
  • 非公開事項:スプレッド閾値の具体値/エントリー実装コード/API キー etc.

§1. 今日の到達点(サマリ)

項目公開版ステータス
取引環境デリバティブ市場(銘柄・板情報は抽象化)
Bot モード本番ネット/極小ロット
新規実装Maker 100 % 固定ロジック・片翼フラット化・Fee 符号補正
10 min テスト結果Net +0.25 USD / DD 0・Taker 約定 0
次フェーズ24 h テスト → ロット拡大 & 最適化自動化

§1. 今日の到達点(サマリ)— 解説

項目公開版ステータス解説
取引環境デリバティブ市場実際の無期限先物板でテストしました。
Bot モード本番ネット/極小ロット大きな資金を賭ける前に、まずは最小ロットで安全運転。挙動を“実戦”で確かめるフェーズです。
新規実装Maker 100 % 固定ロジック・片翼フラット化・Fee 符号補正① PostOnly で板に置く位置を調整し、約定をすべて Maker 化 ② 片側だけ約定したときは即ヘッジして在庫ゼロに ③ 取引所固有の手数料符号を修正し、リベートを正しく収益に計上——の三本柱です。
10 min テスト結果Net +0.25 USD / DD 0・Taker 約定 0たった 10 分の試走で手数料込みの純利益がプラスに。しかも Taker(逆指値)の混入や損失のブレはゼロでした。
次フェーズ24 h テスト → ロット拡大 & 最適化自動化まず 24 時間通しで統計を取り、問題なければロットを徐々に増やす予定。その後は板状況に応じてパラメータを自動調整する仕組みまで目指します。

§2. 主な改修ポイント

#機能目的・注意点
1±n tick オフセット指値PostOnly で IOC/Taker 化を完全阻止(n は非公開)
2片翼 Fill → 10 s 逆指値 → 成行退避在庫リスクをゼロ化し、DD ガードを温存
3Fee 符号補正 (isMaker 判別)Bybit v5 は Maker でも正値返却 → マイナス計上に修正
4高速ループ (interval=数秒)回転率 ↑・Cancel 率 ↓ ― ただし API Rate-Limit に要注意

§2. 追加した主要機能 — 解説

#機能何をしているか?どうして必要?
1± n tick オフセット指値指値を板中央から “数 tick 外側” にずらして置くことで、必ず PostOnly (=Maker) で板に並ぶようにしています。板が瞬間的に動くと PostOnly 注文が IOC/Taker に化けることがあります。± n tick のバッファを設けるとこの事故を 0 % にできます。
2片翼 Fill → 10 s 逆指値 → 成行退避片側だけ約定したら、逆側を 10 秒待っても刺さらない場合に即成行で逃げる “自動フラット化” を入れました。在庫を抱える時間を 10 秒以内に限定し、ほぼ 在庫リスク 0 で回せます。DD ガード(ロスカット上限)を温存できるのがメリット。
3Fee 符号補正 (isMaker 判別)Bybit v5 API は Maker リベートでも execFee を正値で返します。isMaker=True のときは符号を反転させ、リベートを “マイナス手数料” として集計しました。符号を誤解すると「黒字なのに赤字表示」になる致命的バグに。取引所ごとに API 仕様が違うため、ログで必ず確認するのが鉄則です。
4高速ループ (interval ≈ 数秒)板の再評価を 4 秒ごとに行い、発注のタイミングを細かく刻みました。ループが速いほど Cancel が減り Fill が増える=回転率アップ。ただし API の呼び出し回数が増えるため、レートリミットとサーバー負荷に注意が必要です。

§3. 10 分テストのハイライト(抜粋ログ)

cycle 3  pnl=+0.00  fee=-0.04  net=+0.04  (Maker)
cycle 4  pnl=+0.00  fee=-0.04  net=+0.08  (片翼リベートのみ)
cycle 5  pnl=+0.00  fee=-0.04  net=+0.12
…

§3. 10 分テストのハイライト — 解説

ログ行何が起きた?着目ポイント
cycle 3 pnl=+0.00 fee=-0.04 net=+0.04両サイドとも Maker でキャンセル無し。“価格差益” (pnl) はゼロでも、リベート (fee) が −0.04 USD 入り、純利益 (net) が +0.04 USD。「リベートだけで黒字」という戦略が機能していることを示す典型例。
cycle 4 pnl=+0.00 fee=-0.04 net=+0.08 (片翼リベートのみ)片側だけ約定→10 秒の逆指値→在庫ゼロ化。結果としてリベートだけをもう一回獲得。片翼でもリスクを抱えずに もう一度 −0.04 USD を積み上げられる。
cycle 5 pnl=+0.00 fee=-0.04 net=+0.12同じくリベートのみが積み上がり、10 分で純利益は +0.12 USD に。スプレッド利益を狙わずとも、Maker100 % × 高回転だけで黒字が伸びる様子が見える。

ポイントは “fee がマイナス” になっていること。
取引所から受け取るリベートを正しくマイナス計上できている証拠で、これが Net を押し上げています。サンプルでは価格差益 (pnl) がゼロのままでも、3 サイクル連続で Net が右肩上がりになっているのがわかります。


§4. 学び・Tips

  1. 「リベートだけで黒字」を先に作ると精神的にラク
    まずは“取引手数料の返金(メーカーリベート)だけでプラスになる”状態を目指すと、値動きを読むストレスがぐっと減ります。相場がどちらへ動いても、置いておくだけで少しずつ利益が積み上がるので、落ち着いて次の改良に取り組めます。
  2. PostOnly 固定でも板が動くと IOC 化する ⇒ tick オフセット は必須
    「PostOnly =必ず板に乗る」と思いがちですが、板(オーダーブック)が急に動くと、指値が相場に飲み込まれて IOC/Taker 約定 に変わることがあります。数 tick(0.1 USD × n)外側に指す余裕を持たせることで、この“化け”をゼロにできます。
  3. 片翼ヘッジは「“埋める”より“逃げる”ほうがコスト小
    片側だけ約定して在庫を抱えたとき、同じ価格で反対側を待つより、すぐ成行で逃げたほうがコストが小さく済むケースが多いです。今回も「10 秒待ってダメなら即逃げる」方式で、損失ゼロのままリベートだけ取ることに成功しました。
  4. 手数料 API は取引所ごとに符号仕様が違う ― テストログで必ず検証
    ある取引所は「リベート=負の手数料」、別の取引所は「リベートも正の手数料で返す」などバラバラです。実際のログを見て符号を合わせるひと手間をサボると、損益表示が真逆になるので要注意。
  5. DD Guard は Net ベースで張ると誤爆しない
    DD ガードを「手数料控除後の純利益(Net)」で判定すると、リベート分を含めた本当の損益を基準にできます。Gross(手数料控除前)で張ると「黒字なのに DD ガード誤発火」という悲劇が起きるので、Net ベース推奨です。

§5. 今後のロードマップ

  • 24 h 通し運転で統計を収集(Net / DD / Cancel% / p95 latency)
  • ロットを 段階的 に 1.5× → 2× … 拡大
  • Spread 閾値を ボラ指標 に連動させる自動最適化
  • Grafana ダッシュボードで Net 曲線を常時モニタ

噛み砕くと,,,

  1. まずは 24 時間ぶっ通しで走らせて “健康診断”
    Bot を丸1日止めずに回し、
    • 純利益(Net)
    • ドローダウン(DD)
    • 注文キャンセル率(Cancel%)
    • ループの遅さの上位 5%(p95 latency)
      といった数字を集めます。人間でいえば血圧や脈拍を測るようなもの。長時間データが取れれば、本当に安定しているか判断できます。
  2. ロット(取引数量)は “じわじわ” 増やす
    いきなり大金を動かすと想定外の揺れが怖いので、
    1× → 1.5× → 2× …段階的にロットをアップ
    各ステップで Net が安定してプラスなら、次の段階へ進む安全運転方式です。
  3. スプレッド条件を“相場の元気さ”に合わせて自動調整
    相場が静かなときと荒れているときでは、取りたいスプレッド幅が変わります。そこで、価格の動き(ボラティリティ)を指標にして スプレッド閾値を自動で上下させる仕組みを作る予定です。手動チューニングを減らして、24 h 任せっぱなしでも最適に近づけるのが狙い。
  4. Grafana で “成績グラフ” を常時表示
    最後に、純利益の折れ線や Cancel 率などをリアルタイムで眺められる ダッシュボード(Grafana) を用意します。グラフで異常を早期に発見でき、スマホからでも状況確認できるので運用がグッと楽になります。

§6. ⚠️さいごに(安全系ディスクレーマー)

本記事は個人開発の技術共有を目的としており、売買シグナルやアルゴリズムの核心部分は公開していません。
実売買は必ず自己責任でお願いします。

👇ラジオで話したこと

─ 「リベート黒字型 MM Bot、10 分テストで黒転換」回 ─


🎙️「どうも、よだかです。
前回は“観測できるボット”を目指してメトリクスを仕込みました。
きょうは 『Maker 100 % 固定で手数料負けをゼロにする』 がテーマ。
10 分のテストで『リベートだけで黒字』を確認できたので、
そのロジックと学びをサクッと共有していきます。」


1️⃣ サマリ

  • 取引環境 … 本番ネット、極小ロット
  • 新実装 … PostOnly+片翼ヘッジ+手数料符号補正
  • 10 分結果 … Net + 0.25 USD、Taker 0 件、DD 0
  • 次フェーズ … 24h 通し → ロット拡大 → 自動最適化

🎙️「要は“板に置くだけで利益が出る体質”に一歩近づいた、
というわけです。」


2️⃣ 主要改修4つ

(1) ± n tick オフセット指値

読み方:ティック・オフセット
「PostOnly でも板が飛ぶと IOC 化して Taker に化けます。
そこで 中央から数ティック外側 にずらして置いて、
‘Maker でしか約定しない’ 条件を物理的に保証しました。」

(2) 片翼 Fill → 10 s ヘッジ

「片側だけ刺さったら 10 秒だけ反対側を待機。
埋まらなければ 即成行で逃げる
在庫リスクを 10 秒以内に封じ込める作戦です。」

(3) Fee 符号補正(isMaker 判定)

「Bybit v5 はリベートも 正の値 で返すクセ者。
isMaker=True だけは 符号を反転 させて
net = pnl - fee が正しく計算できるようにしました。」

(4) 高速ループ(interval ≈ 数秒)

「8 秒→4 秒へ短縮。Cancel は減り Fill は増える。
ただし API レート制限 を踏まえて、
ここは板の流動性と要相談。」


3️⃣ 10 分テストの結果

Cyclepnlfeenetメモ
3+0.00–0.04+0.04両サイド Maker
4+0.00–0.04+0.08片翼→逃げ
5+0.00–0.04+0.12

🎙️「見てのとおり、価格差益ゼロでも
リベートだけが積み上がって右肩上がり

これが“リベート黒字型”の醍醐味です。」


4️⃣ 学び & Tips

  1. リベート黒字を先に作る → 相場を読まなくてもメンタル安定
  2. PostOnly だけでは不十分 → オフセット必須
  3. 片翼は“埋めるより逃げる” → コスト最小
  4. API ごとに手数料符号が違う → ログで要確認
  5. DD ガードは Net 基準で張れ → 誤爆防止

5️⃣ 次のロードマップ

  • 24 h 通し運転 … Net / DD / Cancel% を統計
  • ロット 1 → 1.5 → 2 × … 段階拡大
  • ボラ連動の動的 s_entry … 閾値を自動で上下
  • Grafana ダッシュボード … 成績をリアルタイム監視

🎙️「まず 24 時 間走らせて“健康診断”を終えたら、
ロットをジワジワ上げていきます。
目標は 『寝てても稼働、起きたらグラフで確認』 です。」


🎙️「というわけで、『Maker 固定で黒字化』 の回でした。
今後は 24 h テストとロット拡大の過程についてお届けします。
コードと資金はくれぐれも自己責任で!
それでは、また次回。」

-Bot, mmnot, 開発ログ