今週は “CI → テスト → 実戦データ回収” のループを高速で回しつつ、
並行プロジェクト(FR 系・マルチ CEX アビトラ)の設計にも着手しました。
専業botterとして約1ヶ月半を過ごしてみて明確になったことがいくつかある。
【時間をかけないと分からないこと】
・統計的エッジの検証
・相場の構造変化察知
・運用オペレーションの深化
これらは、サンプルサイズ、一定期間での変動、障害パターンの網羅(実戦経験ベース)を要するので焦ってはダメ— よだか(夜鷹/yodaka) (@yodakablog) May 21, 2025
1. 1 行サマリ
CI を完全グリーン化 → E2E スクリプト修正 → 本番ネット最小ロット運用再開 —— “測って直す” サイクルの実装に着手した1週間!
2. 日次ハイライト
日付 | 詳細ログ |
---|---|
5 / 17 (土) | pre-refactor-dd タグを push し GitHub Actions が発火 → Python 3.10–3.12 マトリクス + カバレッジ 65 % ゲートを初突破。CI 緑化を受けて mainnet 用一時ブランチ を検討(緊急度低で保留)。 Slack へ成功通知をテスト送信し Webhook 動作を確認。OpenAI o3 モデル一時制限を検知し、サポートへ連絡して代替モデルへ切替。 |
5 / 18 (日) | tests/e2e/realnet_checks.sh を新規作成(本番 API 健全性チェック用)。ローカル実行で BYBIT_TEST_APIKEY 未定義エラーが発生 → .env 動的ロードの必要性をメモ。FR Delta-Hedge / FR-Momentum の 6 観点整理メモを作成し Notion へ保存。 |
5 / 19 (月) | Docker 安全停止 & Bind-mount 手順をメモ段階でまとめ始める。Cursor で multi-cex-arb ディレクトリ雛形を自動生成。tests/e2e/realnet_checks.sh を CI に仮登録し、失敗ログ収集のみで一旦ブロック。 |
5 / 20 (火) | 📝ブログ草稿「開発記録 #235(CI 強化 Day)」を執筆。 公開 / 非公開 ラベルを導入し、API キー等を黒塗りして下書きを GitHub Draft に保存。 |
5 / 21 (水) | MMBot を 本番ネット最小ロットで再起動し、MMBot.log でスプレッド・約定ログを確認。analyze_pnl_vs_log.py に spread / notional → PnL 結合処理を統合。Slack へ PnL サイクル速報を手動送信しフォーマット確定。ライブデータで PnL 黒字を初確認(Maker 100 % 固定ロジック)。 |
5 / 22 (木) | E2E スクリプトを .env 読み込み対応でリファクタし、CI が再びパス。mainnet / testnet 変数抽象化 TODO をコメント追加。Slack Webhook に失敗時アラートの Stub を push。 |
5 / 23 (金) | E2E スクリプト用の 環境変数マップ JSON を作成し抽象化作業を開始。env.sample をリポジトリ直下へ追加し、ドキュメント ToC を更新。GitHub Actions で両ネット切替のパラメータ渡しテストを実施(matrix 未導入)。 週報用アウトラインを整理し、本記事のドラフトを作成。 |
3. テーマ別進捗
3-1. コード & テスト
- CI 品質ゲート確立 – マトリクステスト+カバレッジ門番で “赤いコミットは即 Reject”。
- E2E real-net スクリプト – .env 読み込みに対応し、落ちる原因を一掃。
analyze_pnl_vs_log.py
– spread / notional を PnL と結合し、因果分析が 1 コマンドに。
3-2. 戦略リサーチ
- FR Delta-Hedge / FR-Momentum:6 観点(技術・優位性・リスク etc.)で要件整理完了。
- マルチ CEX アビトラ:Cursor でフォルダ雛形だけ生成、共通ライブラリ化を検討開始。
3-3. インフラ & 可観測性
- Docker:安全停止&ログ共有の手順をドキュメント化(まだメモ段階)。
- Slack 通知:safe-halt(連続失敗 / DD オーバー)まで繋げる設計草案を作成。
3-4. メタ活動
- GPT-o3 一時制限:Support へ連絡 → 代替フローを確保。
- 自己スコアリング:日次で「botterスコア」を更新、改善点を即タスク化。
4. 振り返り & 気づき
4-1. 良かった点 ✅
観点 | 具体的成果 | なぜ良かったか |
---|---|---|
品質ゲートの常時稼働 | CI が 3.10-3.12 すべて緑化し、カバレッジ 65 % 未満コミットを自動 Reject | 「割れ窓」を根本から封じ、レビュー前に壊れたコードが残らない 状態を実現。今後の開発スピードが加速する土台が整った。 |
実戦データ回収の再開 | 本番ネット最小ロットで稼働 → ログと PnL を 1 サイクル粒度 で取得 | 機能テストだけでは見えない レイテンシ/スリッページ/ポジション解消タイミング が数字で可視化でき、次のチューニング指標が明確に。 |
分析パイプラインの“一枚岩化” | analyze_pnl_vs_log.py に spread / notional → PnL 結合を統合 | CSV 手作業や複数スクリプト連携が不要になり、「走らせたその場でグラフ化」までワンショット。検証→修正サイクルがより短く。 |
Slack 通知フォーマット確定 | 成功/失敗/PnL 報告のテンプレを用意 | 人間の確認コスト をさらに削減。特に失敗時アラートは、深夜稼働の安全網として必須。 |
戦略リサーチが“構想止まり”で終わらず | FR Delta-Hedge/Momentumを 6 観点で定義し、 ディレクトリ雛形+ロードマップに着手 | アイデア段階から「実装工程に落とすまで」を同週で行った点が◎。同時並行開発に向けたフットワークが上がった。 |
4-2. 課題・改善したい点 ⚠️
課題 | 影響 | 対応アクション |
---|---|---|
オブザーバビリティが部分的 | PnL は見えるが、 スプレッド変動・板深度・レイテンシ をリアルタイム対比できない | - MMBot.log への 時刻一致キー 追加- Prometheus or TUI で多軸可視化 - Slack へ 要約スナップショット を自動添付 |
adaptive_s_entry 未着手 | スプレッド最適化が静的値のまま → 利益天井が頭打ち | - まずバックテストで “感度 1 パラメータ版” を生成 - live モードは パラメータを env 変更だけで切替 できる設計に |
E2E ワークフローの二重化が道半ば | mainnet / testnet の変数抽象化が手作業 → 誤設定リスク | - matrix 戦略で “ネット×ブランチ” パターンを自動生成 - 成功/失敗ログをタグで分離し混在を防ぐ |
Docker 停止・再起動手順がドキュメント止まり | 人手運用箇所が残り、サーバ再構築時の再現性が 100 % ではない | - make restart-bot 的ワンコマンド化- 停止前に ポジ残高&オーダー 自動チェックを組み込み |
4-3. 学び & 次に活かすヒント
- 「CI 緑化 → 実戦→ PnL 検証」の距離を最短にすることで、
仮説検証スループット が劇的に向上する。
→ 来週: adaptive_s_entry を実装し、1 日 1 仮説 を実戦データで潰すリズムを死守。 - ログの“粒度”より“照合キー”が重要。
spread・depth・latency を同じタイムスタンプで揃えるだけで
可観測性グラフ の読解力が一気に高まる。 - 通知は「人間の行動トリガー」にならないと意味がない。
失敗アラートには 原因のサマリ+次の手順リンク を添付すべし。 - 戦略メモは同日中に“コードの骨格”へ。
仕様書きっぱなしは熱が冷める。ディレクトリと README 雛形を置くと “放置罪悪感” が働き、実装率が上がる。
総括
品質ゲート と 実戦検証 の2輪が回り始めたことで、
“やるべき改善が自動でリスト化される” フローが完成寸前。
来週は オブザーバビリティ拡張 と adaptive_s_entry の実装で、
「数字で即座に方針が変えられる」状態を完成させる。
5. 今後 の TODO(優先度順)
- E2E real-net ワークフロー:変数抽象化を完了し、GitHub Actions へ再組込。
- PNL サイクル自動集計 & TUI / Slack 通知 をリリース。
- adaptive_s_entry(スプレッド自動最適化)プロトタイプ → A/B テスト計画。
- safe-halt 連携:連続失敗 / 想定外 DD で自動停止&通知。
- 共通ライブラリ設計:MM / FR / アービトラを同一抽象レイヤへ統合する設計ドラフト。
優先度 | タスク | 目的・ゴール | 具体アクション | 完了判定 |
---|---|---|---|---|
A-1 | E2E real-net ワークフローの“二重化”完了 | 本番 vs テストの切替ミスをゼロにし、CI から即デプロイできる状態に | - tests/e2e/realnet_checks.sh ┗ ネット種別・キーを matrix-strategy で渡す- env.sample を env.testnet / env.mainnet に分割し、CI が自動注入- 成功ログは artifacts/<net>/pass 、失敗ログは artifacts/<net>/fail に保存 | GitHub Actions が mainnet / testnet 両パターンで緑 かつ アーティファクトがネット別に自動仕分け されている |
A-2 | PNL サイクル自動集計+TUI & Slack 通知 | データ取得から可視化まで 1 分以内で完結し、人間の確認負荷を最小化 | - analyze_pnl_vs_log.py をモジュール化 → pnl_tui.py 作成(rich or textual )- Slack: /report pnl --last 1h コマンドで直近 Cycles を返す Bot コマンドを追加 | TUI でライブ PnL が更新 & Slack コマンドが JSON レスポンス < 3 秒 |
A-3 | adaptive_s_entry プロトタイプ & A/B テスト設計 | スプレッド条件を自動最適化し推測コストを削減 | - 過去 3 日の実データ→ 分位点ごとに PnL/FillRate を計算- ε-greedy アルゴで次サイクルのスプレッド閾値を決定- Feature Flag (ADAPTIVE_ENTRY=on/off ) を env で切替- mainnet は “off” でスタート→ A/B | *テストネットで ADAPTIVE=on が PnL Δ > +5 % を示したら mainnet へ昇格 |
B-1 | safe-halt(連続失敗 / 想定外 DD)実装 | 想定外損失を防ぎ、24 h 無人運用の安全網を構築 | - failure_counter を Redis / SQLite に追加- 連続失敗 ≥ N & DD ≥ X で graceful exit → Slack ALERT- exit 時に 取引所ポジション/注文残 を即キャンセル | テストネットで意図的に N 失敗を起こし、Bot が自動停止&通知 |
B-2 | 共通ライブラリ設計 (MM / FR / Arb) | 複数 Bot を 1 リポで並行開発し、重複コードを排除 | - core/ に Exchanges, PositionManager, RiskGuard 抽象層を定義- 既存 MMBot を移植 → テスト通過後 FR Bot スケルトンを生成- docs: “Strategy adds X linesのみで実装” ガイドを書く | MMBot が新 core/ 上で動き CI 緑 & FR スケルトンのユニットテスト通過 |
C-1 | オブザーバビリティ拡張(板深度・レイテンシ) | 戦略改善サイクルの決定打を“勘”から“数字”へ | - WS 受信時刻 ⇆ 注文 Fill 時刻のラグを ms 単位で記録- 板深度 5 枚の連続スナップを depth.csv へストリーム- Grafana or matplotlib quick-plot で相関を可視化 | 深度・レイテンシ指標が PnL と同タイムスタンプで並列保存 |
C-2 | Docker 安全停止 & 再起動ワンコマンド化 | 手順属人化を排除、再現性 100 % | - scripts/restart.sh : ① open orders/positions check ② kill -SIGINT ③ healthcheck passで起動完了- make restart-bot ターゲットを追加 | 任意時点で make restart-bot → 予期せぬポジ残無し |
優先度の考え方
- A レベル:来週中に完了しないと実戦 PDCA 速度が落ちるもの
- B レベル:安全性・拡張性を高める大粒タスク。A が終わり次第すぐ着手
- C レベル:効果は高いが A/B を阻害しない範囲で並行進行
週末セルフチェック用
- A-1, A-2, A-3 が Done → PnL/ログ指標が Slack に自動飛んでいるか?
- safe-halt がテストネットで発火 → 通知まで到達したか?
- core/ 移行後も MM テストが全緑か?
このリストをベースに “毎朝 1 タスク完了” 目標で進めれば、
次回週報で MMBot 収益フェーズ への移行が具体的数字で示せるはずです。
6. おわりに
「品質ゲート × 実戦データ」の歯車が噛み合ったことで、
“測って直す → また測る” という 高速 PDCA がようやく実現しはじめました。
来週は 可観測性の仕上げ と adaptive_s_entry の実装で、
いよいよ “収益ブースト検証” フェーズに踏み込みます。
次回の自分へ ⚒️
1 日 1 ループでデプロイまで回せ。数字で語れ。焦らず、でも止まらず。
それでは、また来週の開発ログでお会いしましょう。