Bot

開発記録#164(2025/4/2)「論文ベースのbot開発フローpart.26 実際の稼働チェック」

2025年4月2日

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

本記事では「暗号通貨のパンプ&ダンプスキームの検出」に関する論文をベースにbot開発の過程をまとめていきます。

Yodaka

次のステップ、**実際の稼働チェック(1日〜1週間後のパフォーマンス分析)**について、以下のように進めていきます。


目的:運用後のBotが期待通りに動いているかを定量的に評価

期間チェックタイミングチェック目的
1日後初期稼働の安定性確認各モジュールの動作確認、異常の早期発見
1週間後中期的な戦略の有効性確認勝率、利益率、エラー頻度、P&D精度などの検証

📊 評価対象の指標と取得方法

指標説明データ取得元
総トレード数1日/週あたりの取引回数live_trade_log.csv or DB
勝率PnLがプラスの割合pnl > 0 の比率
損益 (PnL)合計利益・損失pnl 列の合計
最大ドローダウン残高減少の最大幅balance 列のピーク差
P&D検出精度誤検出率/未検出率検出ログ + 実データ照合
エラー頻度API失敗、異常動作件数Slack通知ログ or ログファイル

🧪 分析スクリプト例(daily_weekly_report.py)

import pandas as pd

def load_trades(path):
    return pd.read_csv(path, parse_dates=["timestamp"])

def analyze(df):
    total = len(df)
    wins = df[df["pnl"] > 0]
    pnl_total = df["pnl"].sum()
    win_rate = len(wins) / total * 100 if total > 0 else 0
    max_dd = (df["balance"].cummax() - df["balance"]).max()

    print(f"🔍 総トレード数: {total}")
    print(f"📈 勝率: {win_rate:.2f}%")
    print(f"💰 合計損益 (PnL): {pnl_total}")
    print(f"📉 最大ドローダウン: {max_dd}")

def main():
    df = load_trades("./results/live_trade_log.csv")

    print("✅ 1日以内のデータ:")
    analyze(df[df["timestamp"] > df["timestamp"].max() - pd.Timedelta("1d")])

    print("\n✅ 1週間以内のデータ:")
    analyze(df[df["timestamp"] > df["timestamp"].max() - pd.Timedelta("7d")])

if __name__ == "__main__":
    main()

📈 出力例

✅ 1日以内のデータ:
🔍 総トレード数: 12
📈 勝率: 66.67%
💰 合計損益 (PnL): 128.0
📉 最大ドローダウン: 42.5

✅ 1週間以内のデータ:
🔍 総トレード数: 87
📈 勝率: 59.77%
💰 合計損益 (PnL): 1080.5
📉 最大ドローダウン: 156.3

📌 評価後のアクション例

問題があれば…対応案
勝率が50%を下回るエントリー条件を再評価(RSI/ATR調整)
ドローダウンが大きい損切りロジックの強化(動的SL)
トレード数が少ないスケジューラや検出感度を緩める
P&D検出誤差が高いモデル再学習 or 精度フィルター導入

🔜 次のステップ候補

  • 定期レポートの自動化(cron + Slack連携)
  • 複数Botの同時比較ダッシュボード化(Grafana拡張)
  • 戦略ごとのパフォーマンスランキング機能

このまま、レポートのSlack自動通知機能や、Botごとの集計レポートにも進められます。


Yodaka

次回は、既存のBotに新しい戦略(ブレイクアウト戦略や機械学習モデル)を追加する方法を紹介します。

関連
開発記録#165(2025/4/2)「論文ベースのbot開発フローpart.27 新戦略の追加」

続きを見る

👇ラジオで話したこと

実際の稼働チェック(1日〜1週間後のパフォーマンス分析)
タイトル:本番稼働後のリアルな姿──Botパフォーマンスを徹底検証する方法


【オープニング】
こんにちは、よだかです。
今日のテーマは「実際の稼働チェック」。
Botを本番環境にデプロイした後、いよいよ運用が始まったわけですが──
じゃあ、実際にBotは期待通りに動いているのか?
これを冷静に検証していくフェーズに入ります。

今日は初心者の方にもわかるように、チェックの目的から指標の見方、分析スクリプトの使い方まで丁寧に解説していきます。


【セクション1|なぜ稼働後のチェックが必要なのか】

まず大前提。
Botの運用は「動かして終わり」ではありません。

運用初期は、特に以下の2つの視点で状態を見ます:

  • 1日後チェック:初期稼働の安定性確認
  • 1週間後チェック:中期的な戦略有効性の確認

たとえば、
「エラー連発でBotが止まってないか?」
「思ったより勝率が低くないか?」
「P&D検出の精度が落ちてないか?」
こういったリスクを早期に炙り出すことが目的です。


【セクション2|見るべき指標はこれ】

Botの稼働状況を評価するため、主に以下の指標を見ていきます。

📊評価指標一覧

指標説明データ取得元
総トレード数どれだけ取引したかlive_trade_log.csvやDB
勝率取引のうち何%が利益だったかpnl > 0 の割合
損益(PnL)トータルでいくら儲けたか・損したかpnlの合計
最大ドローダウン残高がどれだけ減ったかbalanceのピーク差
P&D検出精度パンプ&ダンプを正しく検出できたか検出ログ+実データ
エラー頻度異常動作やAPIエラーの件数Slack通知ログなど

これらをバランスよくチェックすることで、見た目の成績だけでなく「内側の健全性」も評価できます。


【セクション3|実際にチェックする方法】

さて、ここから実践。

Pythonスクリプトを使って、実際にデータを読み込み、分析します。

🧪分析スクリプト(daily_weekly_report.py)

import pandas as pd

def load_trades(path):
    return pd.read_csv(path, parse_dates=["timestamp"])

def analyze(df):
    total = len(df)
    wins = df[df["pnl"] > 0]
    pnl_total = df["pnl"].sum()
    win_rate = len(wins) / total * 100 if total > 0 else 0
    max_dd = (df["balance"].cummax() - df["balance"]).max()

    print(f"🔍 総トレード数: {total}")
    print(f"📈 勝率: {win_rate:.2f}%")
    print(f"💰 合計損益 (PnL): {pnl_total}")
    print(f"📉 最大ドローダウン: {max_dd}")

def main():
    df = load_trades("./results/live_trade_log.csv")
    print("✅ 1日以内のデータ:")
    analyze(df[df["timestamp"] > df["timestamp"].max() - pd.Timedelta("1d")])

    print("\n✅ 1週間以内のデータ:")
    analyze(df[df["timestamp"] > df["timestamp"].max() - pd.Timedelta("7d")])

if __name__ == "__main__":
    main()

🔍ポイント:

  • 1日以内1週間以内のデータを分けて見る
  • 総トレード数、勝率、PnL、最大ドローダウンをそれぞれ出力

これだけでかなり有用なレポートが作れます。


【セクション4|出力例と読み取り方】

例えば、こんな結果が出たとしましょう。

1日以内のデータ

  • 総トレード数:12回
  • 勝率:66.67%
  • 合計損益:+128ドル
  • 最大ドローダウン:42.5ドル

1週間以内のデータ

  • 総トレード数:87回
  • 勝率:59.77%
  • 合計損益:+1080.5ドル
  • 最大ドローダウン:156.3ドル

このデータをもとに、次のアクションを考えます。


📌問題があれば対応するポイント

問題改善アクション例
勝率が50%を下回るエントリー条件を再検討(RSI/ATRなど)
ドローダウンが大きい損切り設定を強化(動的ストップロス)
トレード数が少ないスケジューラや検出感度の見直し
P&D検出誤差が高いモデルの再学習・フィルター強化

これが、**「運用改善ループ」**です。


【ラストセクション|まとめと次のステップ】

Bot運用で勝つためには、
「分析 → 改善 → 再運用」
このサイクルを止めずに回し続けることが本当に大事です。

ここまでできたら、次はさらに発展した取り組みが待っています。

🔜次の発展ステップ

  • 定期レポートの自動化(cron + Slack連携)
  • 複数Botの比較ダッシュボード化(Grafana拡張)
  • 戦略ごとのパフォーマンスランキング作成

そして──次回からはいよいよ、
「既存Botに新しい戦略を追加する方法」
たとえばブレイクアウト戦略や、機械学習を使ったモデル組み込みに進みます。
運用からさらに「攻め」に転じるフェーズです。

今回は「1つのBotの中で新しい戦略を取り込む方法」を紹介しました。
次回はさらに視点を広げて、「複数Botを並行運用する設計」にステップアップしていきます!

それでは今日はこのへんで。
よだかでした。

-Bot