Bot mmnot 開発ログ

🛠️開発記録#232(2025/5/15)Mbot開発ログ26「解析スクリプト完成までの道のり」

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

「備忘録がてら、ほぼリアルタイムで格闘した内容をまとめました。
これから 自作ボットをいじる人の参考になれば嬉しいです。」


本日のゴール

  1. 約定 DB (trades) とログを自動でマージして可視化するスクリプトを完成させる
  2. mainnet/testnet を .env 切替と Docker プロファイルで即座に起動できるよう構成を整理する

結果から言うと ❶ は達成、❷ は 9 割完了(testnet の自動切替は次回) でした。


1. 解析スクリプト analyze_pnl_vs_log.py の完成

見どころ実装ポイント
DB → PnL 計算trades テーブルを 2 行ずつ(Buy→Sell)ペアにして Cycle PnL & 累積 PnL を算出
ログ自動マッチングlogs/logs_archive/ を再帰検索し、DB の日付と最も近い mm_bot_YYYYMMDD_HHMMSS.log(.zip) を選択
 └ zip 内はメモリ展開&TextIOWrapper でそのままパース
タイムゾーン対応CLI --tz Asia/Tokyo で JST ⇄ UTC を自由変換(pytzlocalize
可視化1. Spread vs Cycle PnL 散布図
2. 累積 PnL 折れ線
統計出力- 日次 / 時間帯別 PnL 集計
- 勝率・最大 DD
- 時間帯フィルタ後の再計測までワンコマンド
ファイル保存- PNG 2 枚 (spread_vs_pnl.png, cum_pnl.png)
- CSV 出力も既存スクリプト互換で継続
# 使い方(例)
python analyze_pnl_vs_log.py \
        --db  mmtrades_mainnet.db  \
        --log logs_archive/mm_bot_20250514_061954.log \
        --tz  Asia/Tokyo

出力イメージ↓

=== PnLとログのマージ結果(直近5件) ===
┌─────────────────────┬───────────┬────────┬─────────┐
│ datetime            │ cycle_pnl │ spread │ notional│
├─────────────────────┼───────────┼────────┼─────────┤
│ 2025-05-14 13:18:49 │  0.0016   │  NaN   │   NaN   │
└─────────────────────┴───────────┴────────┴─────────┘
✅ spread_vs_pnl.png / cum_pnl.png を保存
✅ 勝率 81.97 % / 最大DD -1.66 USDT

2. Bot 環境まわりの整備

2-1. .env で mainnet / testnet を切り替え

# .env.prod
MMBOT_MODE=mainnet        # 本番
⋯

# .env.test
MMBOT_MODE=testnet        # 検証
BYBIT_KEY_TEST=xxxxx
BYBIT_SECRET_TEST=yyyyy
SYMBOL=BTCUSDT
LOT=0.005
MAX_NOTIONAL_USD=400
⋯

2-2. config_testnet.tplconfig_testnet.jsonenvsubst で生成

テンプレ側を 数値はインライン展開 に修正したのがポイント👇

"bot": {
  "max_notional": ${MAX_NOTIONAL_USD},   // ← 文字列化しない!
  "lot": ${LOT},
  ⋯
}

コマンド:

export $(grep -Ev '^\s*#' .env.test | xargs)
envsubst < config_testnet.tpl > config_testnet.json

2-3. Docker プロファイル運用

# testnet で起動
docker compose --profile testnet up -d

# mainnet に戻す
docker compose stop mmbot
docker compose --profile mainnet up -d

本日は mainnet でスプレッド閾値が厳しすぎ → 約定ゼロ を確認
testnet へスイッチしてパラメータ緩和 を次回タスクに設定。


3. 明日の TODO

  1. testnet を低スプレッド・小 LOT で回して約定を発生させる
  2. MMBOT_MODE が Docker profile に追従するよう Entrypoint を微修正
  3. 解析スクリプトで Spread & PnL の相関を本番データで検証
  4. Slack WARN / STOP 通知の実地テスト
  5. (時間があれば)Cursor からのパラメータ Live 書換え機構を PoC

さいごに

  • 解析スクリプト完成 で “ボットが何をしているのか” を即座に可視化できるようになった
  • 環境切替がシェル 1 行 で済むので、検証→本番のハードルが激減
  • 明日は 実際の約定データ取りリスクガード (DD) の動作確認 に進みます

「やっとスタートラインに立った感…!
引き続き改善していくので、同じくアルゴを育ててる方もお楽しみに! ✌️」

-Bot, mmnot, 開発ログ