Canli Validation
Deflated Sharpe and PBO checks. A verdict is not admission to anything and is not a forecast.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (3)
- HIGH
- MEDIUMin get_receipt
- MEDIUMin verify_receipt
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"canli-validation-mcp": {
"command": "npx",
"args": [
"canli-validation-mcp"
]
}
}
}Ausführbare Pakete
0.10.1stdioRemote-Endpunkte
https://canlicapital.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (15)
🟢get_key(label)
Issue a free validation key for this session. Rarely needed: the first validation issues one itself unless CANLI_KEY or local mode is set, and the read tools need none. Quotas: 1000 validations per key per UTC day, 5 keys per client per UTC day, 1048576 bytes per validation request, 1024 bytes per key revocation request, 20000 observations per series, 200 variants per matrix.
Eingabe-Schema
{
"type": "object",
"properties": {
"label": {
"description": "Name for the key.",
"type": "string",
"maxLength": 64
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"note": {
"type": "string"
},
"key_source": {
"type": "string"
},
"key_present": {
"type": "boolean"
},
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "key_source says which key the session uses; data.key is set when a new key was issued."
}🟡validate_deflated_sharpe(observed_sharpe_annualized, observations, periods_per_year, skew, non_excess_kurtosis, ...)
Deflated Sharpe ratio: the probability (0 to 1) that the selected strategy's Sharpe beats the best that luck gives across the variants tried, with the probabilistic Sharpe and that luck benchmark. Send the seven statistics or a return series. With every variant's returns use validate_overfitting; luck as a trial count, validate_luck_trials; a multiple-testing haircut, validate_haircut_sharpe. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"observed_sharpe_annualized": {
"description": "Annualized Sharpe as observed.",
"type": "number",
"minimum": -10,
"maximum": 10
},
"observations": {
"description": "Number of return observations.",
"type": "integer",
"minimum": 2,
"maximum": 1000000
},
"periods_per_year": {
"description": "Periods per year: 252 daily, 365 crypto, 52 weekly, 12 monthly.",
"type": "number",
"minimum": 1,
"maximum": 10000
},
"skew": {
"description": "Skewness of returns; 0 if Normal.",
"type": "number",
"minimum": -20,
"maximum": 20
},
"non_excess_kurtosis": {
"description": "Kurtosis, not excess kurtosis; 3 if Normal.",
"type": "number",
"minimum": 1,
"maximum": 100
},
"effective_independent_trials": {
"description": "Independent variants tried before choosing this one.",
"type": "integer",
"minimum": 2,
"maximum": 10000000
},
"cross_trial_sharpe_sd_annualized": {
"description": "Standard deviation of annualized Sharpe across those trials.",
"type": "number",
"minimum": 0,
"maximum": 10
},
"returns": {
"description": "Periodic returns as fractions (0.01 = 1%), oldest first; replaces the Sharpe, observations, skew and kurtosis.",
"minItems": 2,
"maxItems": 20000,
"type": "array",
"items": {
"type": "number"
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪validate_overfitting(matrix, n_splits, max_combinations, seed)
Probability of backtest overfitting (0 to 1) by CSCV: how often the in-sample best variant falls below the out-of-sample median. Needs every variant's returns (periods by variants); with summary statistics only, use validate_deflated_sharpe. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"matrix": {
"minItems": 2,
"maxItems": 20000,
"type": "array",
"items": {
"maxItems": 200,
"type": "array",
"items": {
"type": "number"
}
},
"description": "Returns as fractions, one row per period, one column per variant."
},
"n_splits": {
"description": "Even number of blocks, at least 2; default 16.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"max_combinations": {
"description": "Most splits evaluated, up to 2000 (default).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 2000
},
"seed": {
"description": "Sampling seed; default 42.",
"type": "number"
}
},
"required": [
"matrix"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}🟡validate_reality_check(matrix, matrix_file, benchmark, block_length, reps, ...)
Data-snooping tests on every variant a search tried: Hansen's SPA p-value that the best beat the benchmark only by luck, White's Reality Check, and the variants Romano-Wolf StepM finds better. Send all variants tried, not only the winners. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"matrix": {
"description": "Returns of every variant the search tried, one row per period, one column per variant.",
"minItems": 30,
"maxItems": 20000,
"type": "array",
"items": {
"maxItems": 200,
"type": "array",
"items": {
"type": "number"
}
}
},
"matrix_file": {
"description": "Path to a CSV or JSON with one numeric column per variant, instead of matrix.",
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"benchmark": {
"description": "Benchmark return per period; default zero.",
"minItems": 30,
"maxItems": 20000,
"type": "array",
"items": {
"type": "number"
}
},
"block_length": {
"description": "Mean bootstrap block in periods; default round(n^(1/3)).",
"type": "integer",
"minimum": 1,
"maximum": 10000
},
"reps": {
"description": "Bootstrap draws; default 2000.",
"type": "integer",
"minimum": 500,
"maximum": 400000
},
"seed": {
"description": "Sampling seed; default 42.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"alpha": {
"description": "Familywise error for StepM; default 0.05.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 0.5
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪validate_paper_evidence(record)
Whether a paper or simulated performance record meets canli.paper-evidence.v0, with a JSON pointer per failure. Checks structure and required disclosures, not whether the returns are good. This verdict is about the series exactly as submitted. The service never saw the data source, its costs, survivorship, or any lookahead in how the series was built.
Eingabe-Schema
{
"type": "object",
"properties": {
"record": {
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {},
"description": "A canli.paper-evidence.v0 record."
}
},
"required": [
"record"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪validate_breadth(sleeve_sharpe, average_pairwise_correlation, sleeves, target)
Book Sharpe ceiling from adding sleeves of this quality and correlation, the Sharpe at a sleeve count, and the sleeves a target needs. For portfolio construction; it validates no single strategy. This verdict is about the series exactly as submitted. The service never saw the data source, its costs, survivorship, or any lookahead in how the series was built.
Eingabe-Schema
{
"type": "object",
"properties": {
"sleeve_sharpe": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Annualized Sharpe of one sleeve."
},
"average_pairwise_correlation": {
"type": "number",
"minimum": -1,
"maximum": 1,
"description": "Average correlation between sleeves, -1 to 1."
},
"sleeves": {
"description": "Sleeve count, for that book's Sharpe.",
"type": "integer",
"minimum": 1,
"maximum": 500
},
"target": {
"description": "Target book Sharpe, for the sleeves it needs.",
"type": "number",
"exclusiveMinimum": 0
}
},
"required": [
"sleeve_sharpe",
"average_pairwise_correlation"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪validate_track_record(observed_sharpe_annualized, periods_per_year, skew, non_excess_kurtosis, benchmark_sharpe_annualized, ...)
Minimum track record length (observations and years) for an observed Sharpe to beat a benchmark at a confidence level; with observations, the record's probabilistic Sharpe so far. For live or paper records; to size a backtest for its trials, use validate_backtest_length. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"observed_sharpe_annualized": {
"type": "number",
"minimum": -10,
"maximum": 10,
"description": "Annualized Sharpe as observed."
},
"periods_per_year": {
"type": "number",
"minimum": 1,
"maximum": 10000,
"description": "Periods per year: 252 daily, 365 crypto, 52 weekly, 12 monthly."
},
"skew": {
"type": "number",
"minimum": -20,
"maximum": 20,
"description": "Skewness of returns; 0 if Normal."
},
"non_excess_kurtosis": {
"type": "number",
"minimum": 1,
"maximum": 100,
"description": "Kurtosis, not excess kurtosis; 3 if Normal."
},
"benchmark_sharpe_annualized": {
"description": "Annualized Sharpe to beat; default 0.",
"type": "number",
"minimum": -10,
"maximum": 10
},
"confidence": {
"description": "Between 0 and 1; default 0.95.",
"type": "number",
"exclusiveMinimum": 0,
"exclusiveMaximum": 1
},
"observations": {
"description": "Record length so far, for its probabilistic Sharpe.",
"type": "integer",
"minimum": 2,
"maximum": 1000000
}
},
"required": [
"observed_sharpe_annualized",
"periods_per_year",
"skew",
"non_excess_kurtosis"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪validate_backtest_length(effective_independent_trials, backtest_years, target_sharpe_annualized)
Minimum backtest length (years) before the best of N independent trials is not expected to reach a target Sharpe by luck; with backtest_years, the most trials those years allow. For planning a search; once it has a result, use validate_deflated_sharpe. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"effective_independent_trials": {
"description": "Independent trials tried (backtests, parameter sets, ideas).",
"type": "integer",
"minimum": 2,
"maximum": 1000000000
},
"backtest_years": {
"description": "Backtest length in years, for the most trials it allows.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000
},
"target_sharpe_annualized": {
"description": "In-sample annualized Sharpe you would call a discovery; default 1.",
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪validate_haircut_sharpe(observed_sharpe_annualized, periods_per_year, observations, tests, autocorrelation, ...)
Haircut Sharpe for multiple testing (Harvey and Liu 2015): the Sharpe a single test would have needed, by Bonferroni and independent tests, and with the other tests' Sharpes, Holm and BHY. For the probability the Sharpe is real, use validate_deflated_sharpe. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"observed_sharpe_annualized": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 10,
"description": "Annualized Sharpe as observed."
},
"periods_per_year": {
"type": "number",
"minimum": 1,
"maximum": 10000,
"description": "Periods per year: 252 daily, 365 crypto, 52 weekly, 12 monthly."
},
"observations": {
"type": "integer",
"minimum": 3,
"maximum": 1000000,
"description": "Return observations behind the Sharpe."
},
"tests": {
"description": "Tests run, this one included; gives the Bonferroni and independent-test haircuts.",
"type": "integer",
"minimum": 1,
"maximum": 100000000
},
"autocorrelation": {
"description": "Lag-1 autocorrelation of returns, -1 to 1; default 0. Corrects the annualized Sharpe (Lo 2002).",
"type": "number",
"exclusiveMinimum": -1,
"exclusiveMaximum": 1
},
"other_sharpe_ratios_annualized": {
"description": "Annualized Sharpes of the other tests over the same observations; adds Holm and BHY.",
"minItems": 1,
"maxItems": 10000,
"type": "array",
"items": {
"type": "number",
"minimum": -10,
"maximum": 10
}
}
},
"required": [
"observed_sharpe_annualized",
"periods_per_year",
"observations"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}🟢validate_luck_trials(observed_sharpe_annualized, periods_per_year, observations, effective_independent_trials, skew, ...)
How many skill-less strategies a search would need for its best to reach this Sharpe by luck (Monte Carlo), and with a trial count, the chance it did. States luck as the best of N random tries; for the probability the Sharpe is real, use validate_deflated_sharpe. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"observed_sharpe_annualized": {
"type": "number",
"minimum": -20,
"maximum": 20,
"description": "Annualized Sharpe as observed."
},
"periods_per_year": {
"type": "number",
"minimum": 1,
"maximum": 10000,
"description": "Periods per year: 252 daily, 365 crypto, 52 weekly, 12 monthly."
},
"observations": {
"type": "integer",
"minimum": 3,
"maximum": 1000000,
"description": "Return observations behind the Sharpe."
},
"effective_independent_trials": {
"description": "Independent trials tried; adds the chance the best reached this Sharpe by luck.",
"type": "integer",
"minimum": 1,
"maximum": 1000000000
},
"skew": {
"description": "Skewness; below -0.5 the reading warns the counts are too generous.",
"type": "number",
"minimum": -100,
"maximum": 100
},
"autocorrelation": {
"description": "Lag-1 autocorrelation of returns, -1 to 1; default 0. Corrects the annualized Sharpe (Lo 2002).",
"type": "number",
"exclusiveMinimum": -1,
"exclusiveMaximum": 1
}
},
"required": [
"observed_sharpe_annualized",
"periods_per_year",
"observations"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"receipt": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"computed": {
"type": "string"
},
"note": {
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.result holds the statistics (data.plain_reading states them); limits say what the result does not establish; receipt ({id, url}) is the signed record, null when none was stored; error ({code, message}) is set only on refusal."
}⚪audit_backtest(returns, returns_file, returns_column, periods_per_year, effective_independent_trials, ...)
One-call audit of a strategy's returns: deflated Sharpe, minimum track record and, with every variant's returns, the probability of backtest overfitting, each the matching validator's result with its own receipt. Point returns_file at the backtest's CSV or JSON instead of pasting long series. Prefer it to calling the validators one by one; one validation per check. A deflated Sharpe or overfitting probability above or below any threshold is not admission to anything and is not a forecast.
Eingabe-Schema
{
"type": "object",
"properties": {
"returns": {
"description": "Periodic returns as fractions (0.01 = 1%), oldest first; replaces the Sharpe, observations, skew and kurtosis.",
"minItems": 2,
"maxItems": 20000,
"type": "array",
"items": {
"type": "number"
}
},
"returns_file": {
"description": "Path to a CSV or JSON of the returns on this machine (not on the hosted endpoint), instead of returns.",
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"returns_column": {
"description": "Column name or 1-based position, when returns_file has several numeric columns.",
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200
},
{
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
}
]
},
"periods_per_year": {
"type": "number",
"minimum": 1,
"maximum": 10000,
"description": "Periods per year: 252 daily, 365 crypto, 52 weekly, 12 monthly."
},
"effective_independent_trials": {
"type": "integer",
"minimum": 2,
"maximum": 10000000,
"description": "Independent variants tried before choosing this one."
},
"cross_trial_sharpe_sd_annualized": {
"type": "number",
"minimum": 0,
"maximum": 10,
"description": "Standard deviation of annualized Sharpe across those trials."
},
"benchmark_sharpe_annualized": {
"description": "Annualized Sharpe to beat; default 0.",
"type": "number",
"minimum": -10,
"maximum": 10
},
"confidence": {
"description": "Between 0 and 1; default 0.95.",
"type": "number",
"exclusiveMinimum": 0,
"exclusiveMaximum": 1
},
"variants": {
"description": "Optional returns of every variant tried (this one included), one row per period, one column per variant; adds the overfitting check.",
"minItems": 2,
"maxItems": 20000,
"type": "array",
"items": {
"maxItems": 200,
"type": "array",
"items": {
"type": "number"
}
}
},
"variants_file": {
"description": "Path to a CSV or JSON with one numeric column per variant, instead of variants.",
"type": "string",
"minLength": 1,
"maxLength": 4096
},
"n_splits": {
"description": "Even number of blocks, at least 2; default 16.",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"periods_per_year",
"effective_independent_trials",
"cross_trial_sharpe_sd_annualized"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"readings": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"checks": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"not_run": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"note": {
"type": "string"
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "checks holds each check's full validate_ result by name; readings one sentence per check; not_run the checks skipped and why."
}🟢get_receipt(id)
Fetch a stored verdict by receipt id to re-read it. No key; verify_receipt checks it is genuine. The receipt is content-hashed, reproducible from the open-source core it names, and signed with Ed25519 by a key published at https://canlicapital.com/.well-known/canli-receipt-keys.json.
Eingabe-Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[0-9a-f]{24}$",
"description": "Receipt id from a validation result."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data is the stored receipt: validator, input, output, their hashes, source hashes and signature."
}🟢verify_receipt(id, receipt)
Verify a receipt offline: its Ed25519 signature against the bundled canlicapital.com key, its output hash and its id. Send an id to fetch it first, or the receipt itself. The receipt is content-hashed, reproducible from the open-source core it names, and signed with Ed25519 by a key published at https://canlicapital.com/.well-known/canli-receipt-keys.json.
Eingabe-Schema
{
"type": "object",
"properties": {
"id": {
"description": "Receipt id from a validation result.",
"type": "string",
"pattern": "^[0-9a-f]{24}$"
},
"receipt": {
"description": "A receipt as get_receipt returns it, to verify without fetching.",
"type": "object",
"propertyNames": {
"type": "string"
},
"additionalProperties": {}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"receipt_id": {
"type": [
"string",
"null"
]
},
"valid": {
"type": "boolean"
},
"checks": {},
"key_id": {
"type": [
"string",
"null"
]
},
"meaning": {
"type": "string"
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "valid is true only when the signature, output hash and content id all check out; checks lists each."
}🟢service_status
Whether the validation API is up, with its quotas; check after a timeout before resubmitting. No key. This verdict is about the series exactly as submitted. The service never saw the data source, its costs, survivorship, or any lookahead in how the series was built.
Eingabe-Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"limits": {
"type": "array",
"items": {
"type": "string"
}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "data.store_reachable, data.quotas and, when available, data.usage for this key."
}🟢company_financial_history(cik, ticker, concept, limit)
SEC-reported financial history for one company in the canlicapital.com reference, by cik or ticker: without a concept, the histories available; with one, observations newest first with accession, form, filed date and unit, plus the source's SHA-256. For point-in-time values use canli-fundamentals-mcp. Public company accounting reference, not market prices, returns, an investment recommendation, or ALPHAC performance. Validate a separately constructed return series with the validation API; accounting values are not returns.
Eingabe-Schema
{
"type": "object",
"properties": {
"cik": {
"description": "SEC CIK; send cik or ticker.",
"type": "string",
"pattern": "^\\d{1,10}$"
},
"ticker": {
"description": "Ticker such as AAPL; send ticker or cik.",
"type": "string",
"pattern": "^[A-Za-z0-9.\\-]{1,10}$"
},
"concept": {
"description": "us-gaap concept such as Assets; omit to list them.",
"type": "string",
"pattern": "^[A-Za-z][A-Za-z0-9]{0,99}$"
},
"limit": {
"description": "Most observations, newest first; default 40.",
"type": "integer",
"minimum": 1,
"maximum": 200
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"company": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"claim_boundary": {
"type": "string"
},
"source": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"histories": {
"type": "array",
"items": {}
},
"history": {
"type": "object",
"properties": {},
"additionalProperties": {}
},
"error": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": {}
},
{
"type": "null"
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": {},
"description": "Without a concept, histories lists what is available; with one, history holds the observations newest first as columns and rows, each with its filing. Values are as reported to the SEC."
}Community
Nachweis