guohanghui commited on
Commit
9b3c011
·
verified ·
1 Parent(s): cbe58e6

Update pyfolio/mcp_output/mcp_plugin/mcp_service.py

Browse files
pyfolio/mcp_output/mcp_plugin/mcp_service.py CHANGED
@@ -9,7 +9,8 @@ source_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.pa
9
  sys.path.insert(0, source_path)
10
 
11
  from fastmcp import FastMCP
12
- from pyfolio import timeseries
 
13
  from pyfolio.tears import (
14
  create_full_tear_sheet,
15
  create_simple_tear_sheet,
@@ -50,22 +51,22 @@ def _convert_to_dataframe(data: Dict[str, Any]) -> pd.DataFrame:
50
  def _calculate_performance_stats(returns_series: pd.Series) -> Dict[str, float]:
51
  """Calculate key performance statistics."""
52
  try:
53
- stats = {}
54
- stats['total_return'] = timeseries.cum_returns_final(returns_series)
55
- stats['annual_return'] = timeseries.annual_return(returns_series)
56
- stats['annual_volatility'] = timeseries.annual_volatility(returns_series)
57
- stats['sharpe_ratio'] = timeseries.sharpe_ratio(returns_series)
58
- stats['max_drawdown'] = timeseries.max_drawdown(returns_series)
59
- stats['calmar_ratio'] = timeseries.calmar_ratio(returns_series)
60
- stats['stability'] = timeseries.stability_of_timeseries(returns_series)
61
- stats['omega_ratio'] = timeseries.omega_ratio(returns_series)
62
- stats['sortino_ratio'] = timeseries.sortino_ratio(returns_series)
63
- stats['skew'] = timeseries.stats.skew(returns_series)
64
- stats['kurtosis'] = timeseries.stats.kurtosis(returns_series)
65
- stats['tail_ratio'] = timeseries.tail_ratio(returns_series)
66
 
67
  # Convert numpy types to Python types for JSON serialization
68
- return {k: float(v) if pd.notna(v) else None for k, v in stats.items()}
69
  except Exception as e:
70
  return {"error": str(e)}
71
 
 
9
  sys.path.insert(0, source_path)
10
 
11
  from fastmcp import FastMCP
12
+ import empyrical as ep
13
+ import scipy.stats as stats
14
  from pyfolio.tears import (
15
  create_full_tear_sheet,
16
  create_simple_tear_sheet,
 
51
  def _calculate_performance_stats(returns_series: pd.Series) -> Dict[str, float]:
52
  """Calculate key performance statistics."""
53
  try:
54
+ perf_stats = {}
55
+ perf_stats['total_return'] = ep.cum_returns_final(returns_series)
56
+ perf_stats['annual_return'] = ep.annual_return(returns_series)
57
+ perf_stats['annual_volatility'] = ep.annual_volatility(returns_series)
58
+ perf_stats['sharpe_ratio'] = ep.sharpe_ratio(returns_series)
59
+ perf_stats['max_drawdown'] = ep.max_drawdown(returns_series)
60
+ perf_stats['calmar_ratio'] = ep.calmar_ratio(returns_series)
61
+ perf_stats['stability'] = ep.stability_of_timeseries(returns_series)
62
+ perf_stats['omega_ratio'] = ep.omega_ratio(returns_series)
63
+ perf_stats['sortino_ratio'] = ep.sortino_ratio(returns_series)
64
+ perf_stats['skew'] = stats.skew(returns_series)
65
+ perf_stats['kurtosis'] = stats.kurtosis(returns_series)
66
+ perf_stats['tail_ratio'] = ep.tail_ratio(returns_series)
67
 
68
  # Convert numpy types to Python types for JSON serialization
69
+ return {k: float(v) if pd.notna(v) else None for k, v in perf_stats.items()}
70
  except Exception as e:
71
  return {"error": str(e)}
72