前回の記事 に引き続き、今回も仮想通貨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 ガードを温存 3 Fee 符号補正 (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 ガード(ロスカット上限)を温存できるのがメリット。 3 Fee 符号補正 (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
「リベートだけで黒字」を先に作ると精神的にラク まずは“取引手数料の返金(メーカーリベート)だけでプラスになる”状態を目指すと、値動きを読むストレスがぐっと減ります。相場がどちらへ動いても、置いておくだけで少しずつ利益が積み上がるので、落ち着いて次の改良に取り組めます。
PostOnly 固定でも板が動くと IOC 化する ⇒ tick オフセット は必須 「PostOnly =必ず板に乗る」と思いがちですが、板(オーダーブック)が急に動くと、指値が相場に飲み込まれて IOC/Taker 約定 に変わることがあります。数 tick(0.1 USD × n)外側に指す余裕を持たせることで、この“化け”をゼロにできます。
片翼ヘッジは「“埋める”より“逃げる”ほうがコスト小 」 片側だけ約定して在庫を抱えたとき、同じ価格で反対側を待つより、すぐ成行で逃げたほうがコストが小さく済む ケースが多いです。今回も「10 秒待ってダメなら即逃げる」方式で、損失ゼロのままリベートだけ取ることに成功しました。
手数料 API は取引所ごとに符号仕様が違う ― テストログで必ず検証 ある取引所は「リベート=負の手数料」、別の取引所は「リベートも正の手数料で返す」などバラバラです。実際のログを見て符号を合わせる ひと手間をサボると、損益表示が真逆になるので要注意。
DD Guard は Net ベースで張ると誤爆しない DD ガードを「手数料控除後の純利益(Net)」で判定すると、リベート分 を含めた本当の損益を基準にできます。Gross(手数料控除前)で張ると「黒字なのに DD ガード誤発火」という悲劇が起きるので、Net ベース推奨です。
§5. 今後のロードマップ
24 h 通し運転 で統計を収集(Net / DD / Cancel% / p95 latency)
ロットを 段階的 に 1.5× → 2× … 拡大
Spread 閾値を ボラ指標 に連動させる自動最適化
Grafana ダッシュボードで Net 曲線を常時モニタ
噛み砕くと,,,
まずは 24 時間ぶっ通しで走らせて “健康診断” Bot を丸1日止めずに回し、
純利益(Net)
ドローダウン(DD)
注文キャンセル率(Cancel%)
ループの遅さの上位 5%(p95 latency) といった数字を集めます。人間でいえば血圧や脈拍を測るようなもの。長時間データが取れれば、本当に安定しているか判断できます。
ロット(取引数量)は “じわじわ” 増やす いきなり大金を動かすと想定外の揺れが怖いので、1× → 1.5× → 2× …
と 段階的にロットをアップ 。 各ステップで Net が安定してプラスなら、次の段階へ進む安全運転方式です。
スプレッド条件を“相場の元気さ”に合わせて自動調整 相場が静かなときと荒れているときでは、取りたいスプレッド幅が変わります。そこで、価格の動き(ボラティリティ)を指標にして スプレッド閾値を自動で上下させる仕組み を作る予定です。手動チューニングを減らして、24 h 任せっぱなしでも最適に近づけるのが狙い。
Grafana で “成績グラフ” を常時表示 最後に、純利益の折れ線や Cancel 率などをリアルタイムで眺められる ダッシュボード(Grafana) を用意します。グラフで異常を早期に発見でき、スマホからでも状況確認できるので運用がグッと楽になります。
§6. ⚠️さいごに(安全系ディスクレーマー)
本記事は個人開発の技術共有を目的としており、売買シグナルやアルゴリズムの核心部分は公開していません。 実売買は必ず自己責任でお願いします。