Bot

開発記録#164(2025/4/2)「論文ベースのbot開発フローpart.26」

前回の記事に引き続き、今回も仮想通貨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」

続きを見る

-Bot