Bot mmnot 開発ログ

🛠️開発記録#215 (2025/5/9) MMBot 開発ログ 20「Mainnet ミニマム運用 - env 分離と“静かな”24h 監視体制」

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


対象読者

  • Bybit で “まずは 0.1 USDT/回の実弾” を試したい個人開発者
  • .envMakefile で「公開しない設定ファイル」を安全に回す方法を知りたい人
  • ログを tail しながら“何も起こらない”を確認する運用フローを学びたい人

1. この記事で得られるもの

トピック一行まとめ
env 分離の最終形.env.prod / .env.test + config_mainnet.tpl で誤発注ゼロへ
Makefile 自動生成make mainnet-loopconfig_mainnet.json を envsubst → Docker 起動までワンショット
Mainnet ミニマム回しlot=0.0001 BTC, DD=10 USD, 無限ループで 24 h 放置
WARN だけリアルタイム監視make logs-warn を別タブで tail -F
“Fill しない” の原因調査スプレッド/閾値/手数料を CLI 1 行で可視化&納得感

2. 本日の作業ログ

2-1. シークレットを envtpljson へ流す一本線

# 1) .env.prod に MAINNET キーだけ保管
BYBIT_KEY_MAIN=xxxxxxxx
BYBIT_SECRET_MAIN=xxxxxxxx
MAX_NOTIONAL_USD=50
LOT=0.0001
# ほか Slack URL 等…

# 2) テンプレ (config_mainnet.tpl) には ${VAR} を書く
{
  "bybit": { "apiKey": "${BYBIT_KEY_MAIN}", "secret": "${BYBIT_SECRET_MAIN}" },
  "bot":   { "max_notional": ${MAX_NOTIONAL_USD}, "lot": ${LOT}, ... }
}

# 3) Makefile で自動生成 ➜ Docker コンテナへ渡す
make mainnet-loop ENV=.env.prod

ポイント

  • 生成した config_mainnet.json には秘密キーが平文で入る。必ず .gitignore
  • rm -f config_mainnet.json 後に再生成 → “古いキーが残る事故” を防止。

2-2. Mainnet 最小ロットで 24 h 監視フロー

ターミナルコマンド役割
Amake mainnet-loop S_ENTRY=1e-6Bot 本体(Docker)
Bmake logs-warnlogs/warn.log を tail -F
C`watch -n 60 'curl …orderbook…jq'`
  • lot: 0.0001 BTC
  • DD ガード: 10 USD
  • max_notional: 50 USD
  • 結果: 現在まで Fill 0、DD 0 — “静かな成功”

Why Quiet?

  • ask-bid スプレッドが 0.1 bps しか開かず、S_ENTRY=1bps (1e-6) を超えなかった。
  • Bot が“何もしない”=想定どおり。間違って高値掴みするより 100 倍安全。

3. つまずき & 解決メモ

つまずき原因解決
envsubst 後に ${…} が残る.env.prod に変数が未定義.env.prod に BYBIT_KEY_MAIN 等を追加
JSONDecodeErrorconfig_mainnet.tpl 内の数値を Quote していた${MAX_NOTIONAL_USD} など 数値は裸に修正
TypeError: '>' not supported between float & strMAX_NOTIONAL_USD が文字列float(env or cfg) へキャスト、テストコード追加
Fill が来ないスプレッド激狭curl+jq 一行コマンドで即計測、S_ENTRY を再考

4. 今日の学び 🎓

学び初学者への刺さるポイント
“何もしない”もテストMainnet 1 bps 条件で Fill 0 = 手数料負けしない安全証明
tpl → json パイプラインenvsubst 前後で jq を挟めばバグは 90 % 消える
WARN だけ tail成功ログは黙らせ、異常だけ即 Slack & 端末に集約
Spread 可視化ワンライナー```bash
curl -s 'https://api.bybit.com/v5/market/orderbook?category=linear&symbol=BTCUSDT' | jq -r '.result | (.a[0][0]

5. 次の To-Do(優先順)

  1. 自動スプレッドログ
    • orderbook.1 の ask-bid を 10 秒ごとに DB へ → 可視化準備
  2. pytest + gitleaks CI
    • env キャスト & JSON 生成テストを GitHub Actions に固定
  3. DD ガード閾値の昼夜切替
    • 00:00 UTC で daily_loss_cap をリセット
  4. tools/agg.py で 24 h PnL グラフ
    • 1 行 python tools/agg.py → Markdown 出力
  5. パラメータ sweep
    • Actions matrix で S_ENTRY & LOT を自動検証(Testnet)

6. botter スコア (by GPTo3)

項目配点評価
問題切り分け力3026 – 401 / TypeError を即特定
自動化・再現性2015 – Makefile ◎、CI は雛形のみ
リスク管理視点2017 – DD guard & MAX_NOTIONAL を実戦投入
ドキュメント整備1510 – README とコードコメントを随時更新
開発ペース & 共有1514 – Slack / Chat で高頻度共有

総合 = 82 / 100

80+ =「実弾長期運用ライン」突破
CI 緑化と PnL 可視化が完了すれば 90 点台が見えてきます。


7. まとめ

「静かな成功」を検証する日
今日は Fill 0 でも OK。‐ リスクを最小に絞った Mainnet 運用が 問題なく 6 h 以上走る ことを確認できました。今後はスプレッド/ボリュームに応じてダイナミックに S_ENTRY を調節するロジックを足しつつ、CI と可視化を整えて “寝ていても見える” ボットへ育てていきます。


この記事は学習目的の技術ログです。
コード断片は MIT License で公開、利用は自己責任で!

-Bot, mmnot, 開発ログ