TradingAgents/docs/004_Performance_Metrics_Imp...

3.9 KiB
Raw Blame History

チケット #004: 評価指標計算実装

概要

バックテスト結果の評価指標を計算するモジュールの実装。標準的な金融指標を網羅的に計算

目的

  • 戦略パフォーマンスの定量的評価
  • Buy & Holdとの比較可能な指標提供
  • 業界標準の指標による結果の信頼性確保

実装要件

1. 評価指標クラス

@dataclass
class PerformanceMetrics:
    # リターン関連
    total_return: float  # 累積リターン
    annual_return: float  # 年率リターン
    
    # リスク関連
    sharpe_ratio: float  # シャープレシオ
    max_drawdown: float  # 最大ドローダウン
    max_drawdown_duration: int  # 最大DD期間日数
    
    # 取引統計
    win_rate: float  # 勝率
    profit_factor: float  # プロフィットファクター
    total_trades: int  # 総取引回数
    winning_trades: int  # 勝ち取引数
    losing_trades: int  # 負け取引数
    
    # その他
    final_capital: float  # 最終資産
    trading_days: int  # 取引日数

class MetricsCalculator:
    def calculate(self, 
                 equity_curve: List[float],
                 trades: List[Trade],
                 initial_capital: float,
                 start_date: str,
                 end_date: str) -> PerformanceMetrics:
        """
        評価指標を計算
        """
        pass

2. 指標計算の詳細

累積リターン

累積リターン = (最終資産 / 初期資産 - 1) × 100%

年率リターン

年率リターン = ((1 + 累積リターン) ^ (365 / 日数) - 1) × 100%

シャープレシオ

日次リターン = (今日の資産 / 昨日の資産) - 1
シャープレシオ = (日次平均リターン / 日次標準偏差) × √252
※無リスク金利 = 0と仮定

最大ドローダウン

def calculate_max_drawdown(equity_curve: List[float]) -> tuple[float, int]:
    """
    Returns:
        (max_drawdown_pct, max_duration_days)
    """
    peak = equity_curve[0]
    max_dd = 0
    max_duration = 0
    current_duration = 0
    
    for value in equity_curve:
        if value > peak:
            peak = value
            current_duration = 0
        else:
            drawdown = (peak - value) / peak
            max_dd = max(max_dd, drawdown)
            current_duration += 1
            max_duration = max(max_duration, current_duration)
    
    return max_dd * 100, max_duration

勝率とプロフィットファクター

勝率 = 利益取引数 / 総取引数 × 100%
プロフィットファクター = 総利益 / 総損失

3. Buy & Hold との比較

class ComparativeMetrics:
    def compare(self,
               strategy_metrics: PerformanceMetrics,
               buy_hold_metrics: PerformanceMetrics) -> dict:
        """
        戦略とBuy & Holdを比較
        
        Returns:
            {
                'excess_return': float,  # 超過リターン
                'relative_sharpe': float,  # シャープレシオの差
                'relative_drawdown': float,  # DD改善率
            }
        """
        pass

受け入れ条件

  • 全指標の正確な計算
  • エッジケース(取引なし、損失のみ等)の処理
  • Buy & Hold指標の同時計算
  • 比較指標の提供
  • 計算精度のテスト(小数点以下の扱い)
  • パフォーマンス(大量データでの計算速度)

依存関係

  • numpy統計計算
  • pandas時系列処理
  • BacktestEngineの出力形式

タスク

  • PerformanceMetricsデータクラスの定義
  • MetricsCalculatorクラスの基本実装
  • 各指標の計算メソッド実装
  • Buy & Hold計算機能
  • 比較指標計算機能
  • エラーハンドリング(ゼロ除算等)
  • 単体テストの作成
  • ドキュメント作成