canli-backtest-mcp 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/diversifiers.mjs +2 -2
- package/src/exchange.mjs +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "canli-backtest-mcp",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"description": "MCP server for backtests that refuse lookahead: point-in-time factors from SEC filings, cross-sectional backtests of any signal on your own prices, costs on actual trades, and every variant counted in a trial ledger.",
|
|
5
5
|
"private": false,
|
|
6
6
|
"type": "module",
|
package/src/diversifiers.mjs
CHANGED
|
@@ -7,8 +7,8 @@ import { z } from "zod";
|
|
|
7
7
|
import { readPanel } from "./panel-io.mjs";
|
|
8
8
|
|
|
9
9
|
export const diversifiersInput = z.object({
|
|
10
|
-
book_file: z.string().min(1).max(1000).describe("A CSV of the book's daily returns: date, then one column per strategy or one for the whole book."),
|
|
11
|
-
candidates_file: z.string().min(1).max(1000).describe("A CSV of candidates' daily returns: date, then one column each."),
|
|
10
|
+
book_file: z.string().min(1).max(1000).regex(/^[^\0]+$/, "a file path").describe("A CSV of the book's daily returns: date, then one column per strategy or one for the whole book."),
|
|
11
|
+
candidates_file: z.string().min(1).max(1000).regex(/^[^\0]+$/, "a file path").describe("A CSV of candidates' daily returns: date, then one column each."),
|
|
12
12
|
limit: z.number().int().min(1).max(100).optional().describe("How many to return; default 10."),
|
|
13
13
|
min_days: z.number().int().min(60).max(100000).optional().describe("Days a candidate must share with the book; default 252."),
|
|
14
14
|
}).strict();
|
package/src/exchange.mjs
CHANGED
|
@@ -19,7 +19,7 @@ export const EXCHANGE_LIMITS_TEXT = Object.freeze([
|
|
|
19
19
|
"Personas are simple scripts with parameters someone chose. Different parameters give different cascades, so a result here is a question to ask of a real system, not an answer about it.",
|
|
20
20
|
]);
|
|
21
21
|
|
|
22
|
-
const file = z.string().min(1).max(1000);
|
|
22
|
+
const file = z.string().min(1).max(1000).regex(/^[^\0]+$/, "a file path");
|
|
23
23
|
const agentId = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]{1,39}$/).refine((n) => !(n in {}), "that name is reserved");
|
|
24
24
|
const assetId = z.string().regex(/^ART[0-9]{1,2}$/, "an exchange asset, such as ART1");
|
|
25
25
|
const PERSONAS = ["market_maker", "value", "momentum", "noise", "deleverager", "stop_loss", "levered_long"];
|