Skip to main content
Glama
JerBouma

Finance Toolkit

performance

Read-onlyIdempotent

Calculate risk-adjusted performance metrics such as Sharpe, Sortino, Alpha, Beta and Treynor for chosen tickers, comparing returns against a benchmark over a date range.

Instructions

Pre-computed risk-adjusted performance metrics (Sharpe ratio incl. standard/adjusted/probabilistic/deflated methods, Sortino ratio, Alpha, Jensen's Alpha, Beta, CAPM, Treynor ratio, M2 ratio, Tracking Error, Information Ratio, Fama-French factors, period Returns, Excess Returns — Returns/Excess Returns support cumulative=true for the compounded growth of 1 from the start of the date range, so the first value includes the first period's return). Beta, CAPM, Alpha, Jensen's Alpha, Treynor, Sortino, M2, Tracking Error and Information Ratio support rolling=N for a rolling N-period value spanning the full history instead of one value per period (e.g. period='monthly', rolling=6 for a rolling 6-month figure). Sharpe ratios are per observation (e.g. per day within the period) unless annualize=true. Requires tickers='AAPL' — use comma-separated values for multiple tickers. Supports period='daily' only together with rolling=N (e.g. period='daily', rolling=60 for a rolling 60-day figure); per-period results use weekly, monthly, quarterly, or yearly. get_style_analysis also takes period='daily' without rolling. The factor models (get_fama_and_french_model, get_carhart_four_factor_model, get_factor_asset_correlations, get_factor_correlations) take region='United States' (default), 'Developed', 'Developed ex US', 'Europe', 'Japan', 'Asia Pacific ex Japan' or 'North America' for Ken French's regional factors. get_style_analysis is Sharpe's returns-based style analysis: style_tickers= names tickers of the call that serve as style indices (e.g. tickers='ARKK,IWF,IWD,IWO,IWN,AGG', style_tickers='IWF,IWD,IWO,IWN,AGG'), and every other ticker gets its style weights and in-sample R Squared, selection return and tracking error; window= for rolling weights, which adds Sharpe's out-of-sample selection return per period.

Input Schema

NameRequiredDescriptionDefault
lagNoNumber of periods to lag when computing growth rates.
alphaNoFor get_rachev_ratio: The confidence level used for both tails (e.g. 0.05 for the best/worst 5% of outcomes). For get_starr_ratio: The confidence level used for the CVaR calculation (e.g. 0.05 for the worst 5% of outcomes).
limitNoThe rows to return, like head and tail: 5 for the first five, -5 for the last five (the most recent of a time series). A table with its periods as columns (financial statements, ratios) keeps its first or last periods instead. For ETF holdings the largest (or, negative, the smallest) by weight, and for a list (e.g. news or a screener) its length.
orderNoThe order of the lower partial moment used in the denominator.
growthNoReturn period-over-period growth rates instead of absolute values.
methodNoFor get_fama_and_french_model: The regression method to use for the calculation. For get_sharpe_ratio: Which Sharpe ratio to calculate, one of "standard", "adjusted", "probabilistic" or "deflated". Leave unset to use the default of the indicator you selected. Defaults are 'multi' for get_fama_and_french_model; 'standard' for get_sharpe_ratio.
periodNoObservation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method). Leave unset to use the default of the indicator you selected. Defaults differ between indicators.
regionNoThe region whose factors to use: "United States", "Developed", "Developed ex US", "Europe", "Japan", "Asia Pacific ex Japan" or "North America" (the factors of Ken French's library for that region's stocks). Every region's factors are U.S. dollar returns with the U.S. one-month Treasury bill as...United States
windowNoThe number of periods the indicator looks back over, e.g. 14 or 20.
rollingNoRolling window size in number of periods. When set, the metric is computed over a smoothly overlapping trailing window across the full history (e.g. period='monthly' and rolling=6 gives a rolling 6-month value) instead of one value per period, or (for economics indicators) a simple moving average used to smooth the raw series. Leave unset to use the default of the indicator you selected. Defaults are None for get_alpha, get_appraisal_ratio, get_beta, get_capital_asset_pricing_model, get_fama_decomposition, get_information_ratio, get_jensens_alpha, get_m2_ratio, get_omega_ratio, get_sharpe_ratio, get_sortino_ratio, get_tracking_error, get_treynor_ratio; 14 for get_ulcer_performance_index.
tickersNoComma-separated ticker symbols, e.g. 'AAPL,MSFT,GOOGL'.
end_dateNoEnd of the date range in YYYY-MM-DD format.2026-10-27
n_trialsNoThe number of independent (or effectively independent) strategy variations, parameter combinations, or lookback windows tried before arriving at the reported Sharpe ratio. Only used when method="deflated". Pass this explicitly whenever the actual number of trials is known.
annualizeNoSet to true to annualize a Sharpe ratio (by default it is per observation, e.g. per day, so roughly sqrt(252) smaller than the annualized figure).
indicatorYesName of the specific metric to calculate, one of the listed values. Required — search_metrics finds the indicator (and its tool) for a metric by name.
quarterlyNoReturn quarterly data instead of annual when True.
adjustmentNoThe fixed adjustment added to the Average Drawdown, conventionally 0.1 (10%).
cumulativeNoReturn the cumulative value compounded over time instead of the discrete value per period. Always rebased to start at 1 at the beginning of the selected date range.
start_dateNoStart of the date range in YYYY-MM-DD format.2021-10-28
standardizeNoReturn the Z-Score (standard score) instead of the raw values, i.e. how many standard deviations each value is from the mean of its own series. When combined with growth=True, the growth values are standardized instead of the raw values.
show_columnsNoComma-separated names to filter the output. For historical data use the key names visible in any response record (e.g. 'Close,Volume,Return'). For financial statements use the 'metric' field values from the response (e.g. 'Revenue,Net Income,EBITDA'). Call the tool once without this parameter to see all available names, then repeat with show_columns to reduce response size and token usage.
style_tickersNoThe tickers of the style indices, as a list or a comma-separated string. Leave unset to use the default of the indicator you selected. Required by: get_style_analysis.
trials_windowNoThe window size of the auxiliary rolling Sharpe ratio series that approximates `Var[SR_trials]` and the default `n_trials`. Only used when method="deflated". It counts observations of the returns the Sharpe ratio is computed from: daily (or intraday) observations for the Sharpe ratio per period,...
within_periodNoWhether to calculate the CVaR within the specified period or for the entire period. Thus whether to look at the CVaR within a specific year (if period = 'yearly') or look at the entirety of all years.
benchmark_tickerNoTicker used as the market benchmark, e.g. 'SPY' or '^GSPC'.SPY
exclude_risk_freeNoWhether to exclude the risk-free rate from the results.
show_full_resultsNoWhether to show the actual and benchmark returns next to the Alpha.
factors_to_calculateNoComma-separated factor names to include in the calculation.
benchmark_sharpe_ratioNoThe hypothesized or benchmark Sharpe ratio (SR*) to test the observed Sharpe ratio against. Only used when method="probabilistic".
include_daily_residualsNoWhether to also return the pointwise (daily) regression residuals as a second DataFrame.
minimum_acceptable_returnNoThe minimum acceptable return (MAR) threshold below which returns are considered downside, e.g. 0.0 for downside relative to a zero return.

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv2.3.0
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-10-14"New value: +"2026-10-27"
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_alpha",
      -  "get_appraisal_ratio",
      -  "get_beta",
      -  "get_burke_ratio",
      -  "get_calmar_ratio",
      -  "get_capital_asset_pricing_model",
      -  "get_carhart_four_factor_model",
      -  "get_compound_growth_rate",
      -  "get_correlation_matrix",
      -  "get_covariance_matrix",
      -  "get_downside_capture_ratio",
      -  "get_excess_return",
      -  "get_factor_asset_correlations",
      -  "get_factor_correlations",
      -  "get_fama_and_french_model",
      -  "get_fama_decomposition",
      -  "get_gain_to_pain_ratio",
      -  "get_henriksson_merton_model",
      -  "get_information_ratio",
      -  "get_jensens_alpha",
      -  "get_kappa_ratio",
      -  "get_m2_ratio",
      -  "get_omega_ratio",
      -  "get_rachev_ratio",
      -  "get_returns",
      -  "get_sharpe_ratio",
      -  "get_sortino_ratio",
      -  "get_starr_ratio",
      -  "get_sterling_ratio",
      -  "get_tracking_error",
      -  "get_treynor_mazuy_model",
      -  "get_treynor_ratio",
      -  "get_ulcer_performance_index",
      -  "get_upside_capture_ratio",
      -  "get_win_rate"
      -]New value: +[
      +  "get_alpha",
      +  "get_appraisal_ratio",
      +  "get_beta",
      +  "get_burke_ratio",
      +  "get_calmar_ratio",
      +  "get_capital_asset_pricing_model",
      +  "get_carhart_four_factor_model",
      +  "get_compound_growth_rate",
      +  "get_correlation_matrix",
      +  "get_covariance_matrix",
      +  "get_downside_capture_ratio",
      +  "get_excess_return",
      +  "get_factor_asset_correlations",
      +  "get_factor_correlations",
      +  "get_fama_and_french_model",
      +  "get_fama_decomposition",
      +  "get_gain_to_pain_ratio",
      +  "get_henriksson_merton_model",
      +  "get_information_ratio",
      +  "get_jensens_alpha",
      +  "get_kappa_ratio",
      +  "get_m2_ratio",
      +  "get_omega_ratio",
      +  "get_rachev_ratio",
      +  "get_returns",
      +  "get_sharpe_ratio",
      +  "get_sortino_ratio",
      +  "get_starr_ratio",
      +  "get_sterling_ratio",
      +  "get_style_analysis",
      +  "get_tracking_error",
      +  "get_treynor_mazuy_model",
      +  "get_treynor_ratio",
      +  "get_ulcer_performance_index",
      +  "get_upside_capture_ratio",
      +  "get_win_rate"
      +]
    • changedInput schema / properties / period / description
      Previous value: -"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method)."New value: +"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method). Leave unset to use the default of the indicator you selected. Defaults differ between indicators."
    • addedInput schema / properties / region
      Added value: +{
      +  "default": "United States",
      +  "description": "The region whose factors to use: \"United States\", \"Developed\", \"Developed ex US\", \"Europe\", \"Japan\", \"Asia Pacific ex Japan\" or \"North America\" (the factors of Ken French's library for that region's stocks). Every region's factors are U.S. dollar returns with the U.S. one-month Treasury bill as...",
      +  "type": "string"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-10-15"New value: +"2021-10-28"
    • addedInput schema / properties / style_tickers
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The tickers of the style indices, as a list or a comma-separated string. Leave unset to use the default of the indicator you selected. Required by: get_style_analysis."
      +}
    • changedInput schema / properties / trials_window / description
      Previous value: -"The window size (in units of `period`) used for the auxiliary rolling Sharpe ratio series that approximates `Var[SR_trials]` and the default `n_trials`. Only used when method=\"deflated\"."New value: +"The window size of the auxiliary rolling Sharpe ratio series that approximates `Var[SR_trials]` and the default `n_trials`. Only used when method=\"deflated\". It counts observations of the returns the Sharpe ratio is computed from: daily (or intraday) observations for the Sharpe ratio per period,..."
    • addedInput schema / properties / window
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The number of periods the indicator looks back over, e.g. 14 or 20."
      +}
  2. Changed48 schema fields changedv2.2.3
    • changedInput schema / properties / adjustment / description
      Previous value: -"Value for adjustment."New value: +"The fixed adjustment added to the Average Drawdown, conventionally 0.1 (10%)."
    • removedInput schema / properties / adjustment / title
      Removed value: -"Adjustment"
    • changedInput schema / properties / alpha / description
      Previous value: -"Value for alpha."New value: +"For get_rachev_ratio: The confidence level used for both tails (e.g. 0.05 for the best/worst 5% of outcomes). For get_starr_ratio: The confidence level used for the CVaR calculation (e.g. 0.05 for the worst 5% of outcomes)."
    • removedInput schema / properties / alpha / title
      Removed value: -"Alpha"
    • addedInput schema / properties / annualize
      Added value: +{
      +  "default": false,
      +  "description": "Set to true to annualize a Sharpe ratio (by default it is per observation, e.g. per day, so roughly sqrt(252) smaller than the annualized figure).",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / benchmark_sharpe_ratio / description
      Previous value: -"Value for benchmark_sharpe_ratio."New value: +"The hypothesized or benchmark Sharpe ratio (SR*) to test the observed Sharpe ratio against. Only used when method=\"probabilistic\"."
    • removedInput schema / properties / benchmark_sharpe_ratio / title
      Removed value: -"Benchmark Sharpe Ratio"
    • removedInput schema / properties / benchmark_ticker / title
      Removed value: -"Benchmark Ticker"
    • removedInput schema / properties / cumulative / title
      Removed value: -"Cumulative"
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-10-02"New value: +"2026-10-14"
    • removedInput schema / properties / end_date / title
      Removed value: -"End Date"
    • changedInput schema / properties / exclude_risk_free / description
      Previous value: -"Value for exclude_risk_free."New value: +"Whether to exclude the risk-free rate from the results."
    • removedInput schema / properties / exclude_risk_free / title
      Removed value: -"Exclude Risk Free"
    • removedInput schema / properties / factors_to_calculate / title
      Removed value: -"Factors To Calculate"
    • removedInput schema / properties / growth / title
      Removed value: -"Growth"
    • changedInput schema / properties / include_daily_residuals / description
      Previous value: -"Value for include_daily_residuals."New value: +"Whether to also return the pointwise (daily) regression residuals as a second DataFrame."
    • removedInput schema / properties / include_daily_residuals / title
      Removed value: -"Include Daily Residuals"
    • changedInput schema / properties / indicator / description
      Previous value: -"Name of the specific metric to calculate, e.g. 'get_asset_turnover_ratio'. Required — omitting it returns the list of available indicators."New value: +"Name of the specific metric to calculate, one of the listed values. Required — search_metrics finds the indicator (and its tool) for a metric by name."
    • removedInput schema / properties / indicator / title
      Removed value: -"Indicator"
    • addedInput schema / properties / lag / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "items": {
      +      "type": "integer"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / lag / title
      Removed value: -"Lag"
    • removedInput schema / properties / lag / type
      Removed value: -"integer"
    • addedInput schema / properties / limit
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "The rows to return, like head and tail: 5 for the first five, -5 for the last five (the most recent of a time series). A table with its periods as columns (financial statements, ratios) keeps its first or last periods instead. For ETF holdings the largest (or, negative, the smallest) by weight, and for a list (e.g. news or a screener) its length."
      +}
    • changedInput schema / properties / method / description
      Previous value: -"Value for method. Leave unset to use the default of the indicator you selected. Defaults are 'multi' for get_fama_and_french_model; 'standard' for get_sharpe_ratio."New value: +"For get_fama_and_french_model: The regression method to use for the calculation. For get_sharpe_ratio: Which Sharpe ratio to calculate, one of \"standard\", \"adjusted\", \"probabilistic\" or \"deflated\". Leave unset to use the default of the indicator you selected. Defaults are 'multi' for get_fama_and_french_model; 'standard' for get_sharpe_ratio."
    • removedInput schema / properties / method / title
      Removed value: -"Method"
    • removedInput schema / properties / minimum_acceptable_return / title
      Removed value: -"Minimum Acceptable Return"
    • changedInput schema / properties / n_trials / description
      Previous value: -"Value for n_trials."New value: +"The number of independent (or effectively independent) strategy variations, parameter combinations, or lookback windows tried before arriving at the reported Sharpe ratio. Only used when method=\"deflated\". Pass this explicitly whenever the actual number of trials is known."
    • removedInput schema / properties / n_trials / title
      Removed value: -"N Trials"
    • changedInput schema / properties / order / description
      Previous value: -"Value for order."New value: +"The order of the lower partial moment used in the denominator."
    • removedInput schema / properties / order / title
      Removed value: -"Order"
    • changedInput schema / properties / period / description
      Previous value: -"Observation frequency, e.g. 'monthly', 'quarterly', or 'annual'."New value: +"Observation frequency, e.g. 'daily', 'weekly', 'monthly', 'quarterly', or 'annual' (supported values differ per method)."
    • removedInput schema / properties / period / title
      Removed value: -"Period"
    • removedInput schema / properties / quarterly / title
      Removed value: -"Quarterly"
    • removedInput schema / properties / rolling / title
      Removed value: -"Rolling"
    • removedInput schema / properties / show_columns / title
      Removed value: -"Show Columns"
    • changedInput schema / properties / show_full_results / description
      Previous value: -"Value for show_full_results."New value: +"Whether to show the actual and benchmark returns next to the Alpha."
    • removedInput schema / properties / show_full_results / title
      Removed value: -"Show Full Results"
    • removedInput schema / properties / standardize / title
      Removed value: -"Standardize"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-10-03"New value: +"2021-10-15"
    • removedInput schema / properties / start_date / title
      Removed value: -"Start Date"
    • addedInput schema / properties / tickers / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +]
    • removedInput schema / properties / tickers / title
      Removed value: -"Tickers"
    • removedInput schema / properties / tickers / type
      Removed value: -"string"
    • changedInput schema / properties / trials_window / description
      Previous value: -"Value for trials_window."New value: +"The window size (in units of `period`) used for the auxiliary rolling Sharpe ratio series that approximates `Var[SR_trials]` and the default `n_trials`. Only used when method=\"deflated\"."
    • removedInput schema / properties / trials_window / title
      Removed value: -"Trials Window"
    • changedInput schema / properties / within_period / description
      Previous value: -"Value for within_period."New value: +"Whether to calculate the CVaR within the specified period or for the entire period. Thus whether to look at the CVaR within a specific year (if period = 'yearly') or look at the entirety of all years."
    • removedInput schema / properties / within_period / title
      Removed value: -"Within Period"
    • removedInput schema / title
      Removed value: -"performanceArguments"
  3. Changed2 schema fields changedv2.2.1
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-08-19"New value: +"2026-10-02"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-08-20"New value: +"2021-10-03"
  4. Changed12 schema fields changedv2.2.0
    • addedInput schema / properties / alpha
      Added value: +{
      +  "default": 0.05,
      +  "description": "Value for alpha.",
      +  "title": "Alpha",
      +  "type": "number"
      +}
    • addedInput schema / properties / benchmark_sharpe_ratio
      Added value: +{
      +  "default": 0,
      +  "description": "Value for benchmark_sharpe_ratio.",
      +  "title": "Benchmark Sharpe Ratio",
      +  "type": "number"
      +}
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-14"New value: +"2026-08-19"
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_alpha",
      -  "get_beta",
      -  "get_burke_ratio",
      -  "get_calmar_ratio",
      -  "get_capital_asset_pricing_model",
      -  "get_compound_growth_rate",
      -  "get_correlation_matrix",
      -  "get_covariance_matrix",
      -  "get_downside_capture_ratio",
      -  "get_excess_return",
      -  "get_factor_asset_correlations",
      -  "get_factor_correlations",
      -  "get_fama_and_french_model",
      -  "get_gain_to_pain_ratio",
      -  "get_information_ratio",
      -  "get_jensens_alpha",
      -  "get_kappa_ratio",
      -  "get_m2_ratio",
      -  "get_omega_ratio",
      -  "get_returns",
      -  "get_sharpe_ratio",
      -  "get_sortino_ratio",
      -  "get_sterling_ratio",
      -  "get_tracking_error",
      -  "get_treynor_ratio",
      -  "get_ulcer_performance_index",
      -  "get_upside_capture_ratio",
      -  "get_win_rate"
      -]New value: +[
      +  "get_alpha",
      +  "get_appraisal_ratio",
      +  "get_beta",
      +  "get_burke_ratio",
      +  "get_calmar_ratio",
      +  "get_capital_asset_pricing_model",
      +  "get_carhart_four_factor_model",
      +  "get_compound_growth_rate",
      +  "get_correlation_matrix",
      +  "get_covariance_matrix",
      +  "get_downside_capture_ratio",
      +  "get_excess_return",
      +  "get_factor_asset_correlations",
      +  "get_factor_correlations",
      +  "get_fama_and_french_model",
      +  "get_fama_decomposition",
      +  "get_gain_to_pain_ratio",
      +  "get_henriksson_merton_model",
      +  "get_information_ratio",
      +  "get_jensens_alpha",
      +  "get_kappa_ratio",
      +  "get_m2_ratio",
      +  "get_omega_ratio",
      +  "get_rachev_ratio",
      +  "get_returns",
      +  "get_sharpe_ratio",
      +  "get_sortino_ratio",
      +  "get_starr_ratio",
      +  "get_sterling_ratio",
      +  "get_tracking_error",
      +  "get_treynor_mazuy_model",
      +  "get_treynor_ratio",
      +  "get_ulcer_performance_index",
      +  "get_upside_capture_ratio",
      +  "get_win_rate"
      +]
    • addedInput schema / properties / method / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / method / default
      Previous value: -"multi"New value: +null
    • changedInput schema / properties / method / description
      Previous value: -"Value for method."New value: +"Value for method. Leave unset to use the default of the indicator you selected. Defaults are 'multi' for get_fama_and_french_model; 'standard' for get_sharpe_ratio."
    • removedInput schema / properties / method / type
      Removed value: -"string"
    • addedInput schema / properties / n_trials
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for n_trials.",
      +  "title": "N Trials"
      +}
    • changedInput schema / properties / rolling / description
      Previous value: -"Rolling window size in number of periods. When set, the metric is computed over a smoothly overlapping trailing window across the full history (e.g. period='monthly' and rolling=6 gives a rolling 6-month value) instead of one value per period, or (for economics indicators) a simple moving average used to smooth the raw series."New value: +"Rolling window size in number of periods. When set, the metric is computed over a smoothly overlapping trailing window across the full history (e.g. period='monthly' and rolling=6 gives a rolling 6-month value) instead of one value per period, or (for economics indicators) a simple moving average used to smooth the raw series. Leave unset to use the default of the indicator you selected. Defaults are None for get_alpha, get_appraisal_ratio, get_beta, get_capital_asset_pricing_model, get_fama_decomposition, get_information_ratio, get_jensens_alpha, get_m2_ratio, get_omega_ratio, get_sharpe_ratio, get_sortino_ratio, get_tracking_error, get_treynor_ratio; 14 for get_ulcer_performance_index."
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-15"New value: +"2021-08-20"
    • addedInput schema / properties / trials_window
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Value for trials_window.",
      +  "title": "Trials Window"
      +}
  5. Changed10 schema fields changed
    • addedInput schema / properties / adjustment
      Added value: +{
      +  "default": 0.1,
      +  "description": "Value for adjustment.",
      +  "title": "Adjustment",
      +  "type": "number"
      +}
    • addedInput schema / properties / cumulative
      Added value: +{
      +  "default": false,
      +  "description": "Return the cumulative value compounded over time instead of the discrete value per period. Always rebased to start at 1 at the beginning of the selected date range.",
      +  "title": "Cumulative",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-07-09"New value: +"2026-07-14"
    • changedInput schema / properties / indicator / enum
      Previous value: -[
      -  "get_alpha",
      -  "get_beta",
      -  "get_capital_asset_pricing_model",
      -  "get_compound_growth_rate",
      -  "get_factor_asset_correlations",
      -  "get_factor_correlations",
      -  "get_fama_and_french_model",
      -  "get_information_ratio",
      -  "get_jensens_alpha",
      -  "get_m2_ratio",
      -  "get_sharpe_ratio",
      -  "get_sortino_ratio",
      -  "get_tracking_error",
      -  "get_treynor_ratio",
      -  "get_ulcer_performance_index"
      -]New value: +[
      +  "get_alpha",
      +  "get_beta",
      +  "get_burke_ratio",
      +  "get_calmar_ratio",
      +  "get_capital_asset_pricing_model",
      +  "get_compound_growth_rate",
      +  "get_correlation_matrix",
      +  "get_covariance_matrix",
      +  "get_downside_capture_ratio",
      +  "get_excess_return",
      +  "get_factor_asset_correlations",
      +  "get_factor_correlations",
      +  "get_fama_and_french_model",
      +  "get_gain_to_pain_ratio",
      +  "get_information_ratio",
      +  "get_jensens_alpha",
      +  "get_kappa_ratio",
      +  "get_m2_ratio",
      +  "get_omega_ratio",
      +  "get_returns",
      +  "get_sharpe_ratio",
      +  "get_sortino_ratio",
      +  "get_sterling_ratio",
      +  "get_tracking_error",
      +  "get_treynor_ratio",
      +  "get_ulcer_performance_index",
      +  "get_upside_capture_ratio",
      +  "get_win_rate"
      +]
    • addedInput schema / properties / minimum_acceptable_return
      Added value: +{
      +  "default": 0,
      +  "description": "The minimum acceptable return (MAR) threshold below which returns are considered downside, e.g. 0.0 for downside relative to a zero return.",
      +  "title": "Minimum Acceptable Return",
      +  "type": "number"
      +}
    • addedInput schema / properties / order
      Added value: +{
      +  "default": 3,
      +  "description": "Value for order.",
      +  "title": "Order",
      +  "type": "integer"
      +}
    • changedInput schema / properties / rolling / description
      Previous value: -"Value for rolling."New value: +"Rolling window size in number of periods. When set, the metric is computed over a smoothly overlapping trailing window across the full history (e.g. period='monthly' and rolling=6 gives a rolling 6-month value) instead of one value per period, or (for economics indicators) a simple moving average used to smooth the raw series."
    • addedInput schema / properties / standardize
      Added value: +{
      +  "default": false,
      +  "description": "Return the Z-Score (standard score) instead of the raw values, i.e. how many standard deviations each value is from the mean of its own series. When combined with growth=True, the growth values are standardized instead of the raw values.",
      +  "title": "Standardize",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-07-10"New value: +"2021-07-15"
    • addedInput schema / properties / within_period
      Added value: +{
      +  "default": true,
      +  "description": "Value for within_period.",
      +  "title": "Within Period",
      +  "type": "boolean"
      +}
  6. Changed2 schema fields changedv2.1.4
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-27"New value: +"2026-07-09"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-28"New value: +"2021-07-10"
  7. Changed2 schema fields changedv2.1.3
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-23"New value: +"2026-06-27"
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-24"New value: +"2021-06-28"
  8. Changed4 schema fields changedv0.1.2
    • changedInput schema / properties / end_date / default
      Previous value: -"2026-06-22"New value: +"2026-06-23"
    • removedInput schema / properties / rounding
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "integer"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Number of decimal places to round results to.",
      -  "title": "Rounding"
      -}
    • addedInput schema / properties / show_columns
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Comma-separated names to filter the output. For historical data use the key names visible in any response record (e.g. 'Close,Volume,Return'). For financial statements use the 'metric' field values from the response (e.g. 'Revenue,Net Income,EBITDA'). Call the tool once without this parameter to see all available names, then repeat with show_columns to reduce response size and token usage.",
      +  "title": "Show Columns"
      +}
    • changedInput schema / properties / start_date / default
      Previous value: -"2021-06-23"New value: +"2021-06-24"
  9. Addedv0.1.1

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, openWorld, so the safety profile is covered. The description then adds genuine behavioral detail beyond the annotations: Sharpe ratios are per observation unless annualize=true, rolling=N produces a trailing window across full history rather than one value per period, cumulative=true rebases returns to 1 at the range start, and daily period is only legal with rolling. The juggling of default-differences per indicator is disclosed in the schema rather than here, which is a small residual gap but not a serious one.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single undifferentiated block that lists the same indicator names twice (the first clause lists Beta/CAPM/Alpha/Treynor/Sortino/M2/Tracking Error/Information Ratio, then the second sentence repeats the same set to introduce rolling). Structural markers like quotes or line breaks around the period/daily, rolling, annualize and style-analysis rules would let an agent skim; instead the constraints are buried mid-paragraph. Front-loading the metric list is good, but the repetition and lack of chunking cost real readability for a 31-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full per-parameter schema coverage, the description only needs to supply the cross-cutting rules, and it does: required tickers, the daily-with-rolling constraint, per-observation vs annualized Sharpe, cumulative rebasing, factor-model regions, and style-analysis semantics. It stays silent on several indicator-specific parameters (minimum_acceptable_return, order, adjustment, within_period, exclude_risk_free), but those are documented in the schema, so the residual gap is small rather than blocking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a 3 is the baseline for the schema merely repeating itself. The description earns above baseline by supplying cross-parameter semantics the schema does not: tickers accepts comma-separated values, rolling=6 plus period='monthly' means a 6-month figure, style_tickers must name a subset of tickers, and region only applies to the four factor-model indicators. Those combination rules are the main thing an agent cannot infer from the per-property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-adjacent statement of the resource: pre-computed risk-adjusted performance metrics, then names the concrete metrics (Sharpe variants, Sortino, Beta, CAPM, Treynor, M2, Tracking Error, Information Ratio, Fama-French). That is far more specific than a label. What it never does is distinguish this tool from overlapping siblings such as risk, volatility, efficiency or models, so an agent still has to guess whether Sharpe/Sortino belongs here or in risk.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real in-tool usage rules — requires tickers, period='daily' only with rolling=N, annualize=false yields per-observation figures, get_style_analysis takes style_tickers and optionally daily. But all of these are rules about invoking it once selected; there is no guidance on when to choose this tool over the sibling tools (risk, volatility, models, portfolio), which is where the real routing ambiguity lives given 36 indicators with overlapping names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.