@quantbrasil/cli 0.1.0-beta.13 → 0.1.0-beta.15
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/README.md +5 -0
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +27 -1
- package/dist/cli/errors.d.ts +3 -0
- package/dist/cli/errors.d.ts.map +1 -1
- package/dist/cli/errors.js +8 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +16 -0
- package/dist/commands/backtests.d.ts +183 -0
- package/dist/commands/backtests.d.ts.map +1 -0
- package/dist/commands/backtests.js +525 -0
- package/dist/commands/news.d.ts +48 -0
- package/dist/commands/news.d.ts.map +1 -0
- package/dist/commands/news.js +85 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/vendor/core/capabilities/backtests.d.ts +207 -0
- package/dist/vendor/core/capabilities/backtests.d.ts.map +1 -0
- package/dist/vendor/core/capabilities/backtests.js +239 -0
- package/dist/vendor/core/capabilities/index.d.ts +2 -0
- package/dist/vendor/core/capabilities/index.d.ts.map +1 -1
- package/dist/vendor/core/capabilities/index.js +2 -0
- package/dist/vendor/core/capabilities/news.d.ts +54 -0
- package/dist/vendor/core/capabilities/news.d.ts.map +1 -0
- package/dist/vendor/core/capabilities/news.js +65 -0
- package/dist/vendor/core/capabilities/registry.d.ts +512 -0
- package/dist/vendor/core/capabilities/registry.d.ts.map +1 -1
- package/dist/vendor/core/capabilities/registry.js +4 -0
- package/dist/vendor/core/capabilities/types.d.ts +1 -1
- package/dist/vendor/core/capabilities/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/quantbrasil/SKILL.md +8 -4
- package/skills/quantbrasil/references/backtests.md +173 -0
- package/skills/quantbrasil/references/cli.md +45 -0
- package/skills/quantbrasil/references/costs.md +6 -1
- package/skills/quantbrasil/references/quality-eval-queries.json +30 -0
- package/skills/quantbrasil/references/unsupported.md +5 -0
- package/skills/quantbrasil/references/workflows.md +46 -0
package/README.md
CHANGED
|
@@ -84,6 +84,11 @@ quantbrasil screening indicators
|
|
|
84
84
|
quantbrasil screening run --system acoes-mais-liquidas --query-file ./screening.json
|
|
85
85
|
quantbrasil screening run --watchlist 93 --query-file ./screening.json --limit 25
|
|
86
86
|
cat ./screening.json | quantbrasil screening run --holding 182 --query-file -
|
|
87
|
+
quantbrasil backtests strategies
|
|
88
|
+
quantbrasil backtests info ifr2
|
|
89
|
+
quantbrasil backtests run ifr2 PETR4 --timeframe D1 --from 2025-01-01 --to 2026-01-01
|
|
90
|
+
quantbrasil backtests run ifr2 PRIO3 --timeframe D1 --param rsi=15
|
|
91
|
+
quantbrasil backtests run ifr2 PETR4 --timeframe D1 --param rsi=30 --param window=2 --json
|
|
87
92
|
```
|
|
88
93
|
|
|
89
94
|
Example `screening.json`:
|
package/dist/cli/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAEb,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAA8B,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,YAAY,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,eAAe,CAAC,CAU1B;AAED,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvE,OAAO,EAAE,8BAA8B,+DAyBxC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/cli/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,aAAa,EAEb,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAA8B,MAAM,aAAa,CAAC;AAEnE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,YAAY,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,OAAO,CAAC,eAAe,CAAC,CAU1B;AAED,wBAAsB,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,EACvE,OAAO,EAAE,8BAA8B,+DAyBxC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,CAmElE"}
|
package/dist/cli/client.js
CHANGED
|
@@ -50,7 +50,10 @@ export function mapCliDeskHttpError(error) {
|
|
|
50
50
|
return createHttpValidationError(error, detail);
|
|
51
51
|
}
|
|
52
52
|
if (error.status === 429) {
|
|
53
|
-
return new CliError("rate_limited", detail ?? "Rate limit exceeded. Wait before retrying.",
|
|
53
|
+
return new CliError("rate_limited", detail ?? "Rate limit exceeded. Wait before retrying.", {
|
|
54
|
+
...buildHttpErrorOptions(error, "backend"),
|
|
55
|
+
retryAfterSeconds: resolveRetryAfterSeconds(error.body),
|
|
56
|
+
});
|
|
54
57
|
}
|
|
55
58
|
if (detail) {
|
|
56
59
|
return new CliError(error.status >= 502 && error.status <= 504
|
|
@@ -115,6 +118,29 @@ function resolveObjectMessage(value) {
|
|
|
115
118
|
const message = value.message;
|
|
116
119
|
return typeof message === "string" && message.trim() ? message : null;
|
|
117
120
|
}
|
|
121
|
+
function resolveRetryAfterSeconds(payload) {
|
|
122
|
+
for (const candidate of resolveErrorObjects(payload)) {
|
|
123
|
+
const value = candidate.retry_after_seconds;
|
|
124
|
+
if (typeof value === "number" && Number.isFinite(value) && value > 0) {
|
|
125
|
+
return Math.ceil(value);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return undefined;
|
|
129
|
+
}
|
|
130
|
+
function resolveErrorObjects(payload) {
|
|
131
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) {
|
|
132
|
+
return [];
|
|
133
|
+
}
|
|
134
|
+
const root = payload;
|
|
135
|
+
const objects = [root];
|
|
136
|
+
for (const key of ["detail", "error"]) {
|
|
137
|
+
const value = root[key];
|
|
138
|
+
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
139
|
+
objects.push(value);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return objects;
|
|
143
|
+
}
|
|
118
144
|
function formatValidationDetail(value) {
|
|
119
145
|
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
120
146
|
return null;
|
package/dist/cli/errors.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface CliErrorOptions extends ErrorOptions {
|
|
|
7
7
|
status?: number;
|
|
8
8
|
path?: string;
|
|
9
9
|
requestId?: string;
|
|
10
|
+
retryAfterSeconds?: number;
|
|
10
11
|
}
|
|
11
12
|
export interface CliErrorPayload {
|
|
12
13
|
ok: false;
|
|
@@ -18,6 +19,7 @@ export interface CliErrorPayload {
|
|
|
18
19
|
status?: number;
|
|
19
20
|
path?: string;
|
|
20
21
|
request_id?: string;
|
|
22
|
+
retry_after_seconds?: number;
|
|
21
23
|
};
|
|
22
24
|
}
|
|
23
25
|
export declare class CliError extends Error {
|
|
@@ -27,6 +29,7 @@ export declare class CliError extends Error {
|
|
|
27
29
|
readonly status?: number;
|
|
28
30
|
readonly path?: string;
|
|
29
31
|
readonly requestId?: string;
|
|
32
|
+
readonly retryAfterSeconds?: number;
|
|
30
33
|
constructor(code: CliErrorCode, message: string, options: CliErrorOptions);
|
|
31
34
|
}
|
|
32
35
|
export declare function createCliValidationError(message: string): CliError;
|
package/dist/cli/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,4MAYlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/cli/errors.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,4MAYlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,SAAS,GACT,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,KAAK,CAAC;IACV,KAAK,EAAE;QACL,IAAI,EAAE,YAAY,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,gBAAgB,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,QAAQ,EAAE,gBAAgB,CAAC;IAC3C,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnC,SAAgB,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAE/B,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;CAW1E;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAIlE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAI9D;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAIpE;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAItE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAqC1D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEpE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,CAM7D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,GAAG,eAAe,CA4BrE"}
|
package/dist/cli/errors.js
CHANGED
|
@@ -18,6 +18,7 @@ export class CliError extends Error {
|
|
|
18
18
|
status;
|
|
19
19
|
path;
|
|
20
20
|
requestId;
|
|
21
|
+
retryAfterSeconds;
|
|
21
22
|
constructor(code, message, options) {
|
|
22
23
|
super(message, options);
|
|
23
24
|
this.name = "CliError";
|
|
@@ -27,6 +28,7 @@ export class CliError extends Error {
|
|
|
27
28
|
this.status = options.status;
|
|
28
29
|
this.path = options.path;
|
|
29
30
|
this.requestId = options.requestId;
|
|
31
|
+
this.retryAfterSeconds = options.retryAfterSeconds;
|
|
30
32
|
}
|
|
31
33
|
}
|
|
32
34
|
export function createCliValidationError(message) {
|
|
@@ -85,6 +87,9 @@ export function shouldEmitJsonError(argv) {
|
|
|
85
87
|
return argv.includes("--json");
|
|
86
88
|
}
|
|
87
89
|
export function formatCliErrorMessage(error) {
|
|
90
|
+
if (error.code === "rate_limited" && error.retryAfterSeconds !== undefined) {
|
|
91
|
+
return `[${error.code}] ${error.message} Tente novamente em ${error.retryAfterSeconds}s.`;
|
|
92
|
+
}
|
|
88
93
|
return `[${error.code}] ${error.message}`;
|
|
89
94
|
}
|
|
90
95
|
export function buildCliErrorPayload(error) {
|
|
@@ -106,6 +111,9 @@ export function buildCliErrorPayload(error) {
|
|
|
106
111
|
if (error.requestId !== undefined) {
|
|
107
112
|
payload.error.request_id = error.requestId;
|
|
108
113
|
}
|
|
114
|
+
if (error.retryAfterSeconds !== undefined) {
|
|
115
|
+
payload.error.retry_after_seconds = error.retryAfterSeconds;
|
|
116
|
+
}
|
|
109
117
|
return payload;
|
|
110
118
|
}
|
|
111
119
|
function isCommanderError(error) {
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
import { runBacktestsInfoCommand, runBacktestsRunCommand, runBacktestsStrategiesCommand } from "../commands/backtests.js";
|
|
2
3
|
import { type CapabilitiesCommandIO, runCapabilitiesCommand } from "../commands/capabilities.js";
|
|
3
4
|
import { runCointegrationPairCommand } from "../commands/cointegration.js";
|
|
4
5
|
import { runMarketAssetsCommand, runMarketPriceCommand } from "../commands/market.js";
|
|
6
|
+
import { runAssetNewsCommand } from "../commands/news.js";
|
|
5
7
|
import { runInitCommand } from "../commands/init.js";
|
|
6
8
|
import { runHoldingCreateCommand, runHoldingBetaCommand, runHoldingGetCommand, runHoldingHistoricalReturnCommand, runHoldingListCommand, runHoldingRenameCommand, runHoldingSetPositionsCommand, runHoldingSetTargetsCommand, runHoldingVarCommand, runWatchlistAddAssetsCommand, runWatchlistCreateCommand, runWatchlistGetCommand, runWatchlistListCommand, runWatchlistRemoveAssetsCommand, runWatchlistRenameCommand } from "../commands/portfolios.js";
|
|
7
9
|
import { runRankingsCurrentCommand, runRankingsListCommand, runRankingsReturnCommand } from "../commands/rankings.js";
|
|
@@ -28,9 +30,11 @@ export declare function createCliProgram(options?: CliProgramOptions): Command;
|
|
|
28
30
|
export declare function run(argv?: string[], options?: CliRunOptions): Promise<void>;
|
|
29
31
|
export { runAuthLoginCommand, runAuthLogoutCommand, runAuthWhoamiCommand, } from "../commands/auth.js";
|
|
30
32
|
export { runAssetOverviewCommand } from "../commands/assets.js";
|
|
33
|
+
export { runBacktestsInfoCommand, runBacktestsRunCommand, runBacktestsStrategiesCommand, };
|
|
31
34
|
export { runCapabilitiesCommand, runStatusCommand };
|
|
32
35
|
export { runInitCommand };
|
|
33
36
|
export { runMarketAssetsCommand, runMarketPriceCommand };
|
|
37
|
+
export { runAssetNewsCommand };
|
|
34
38
|
export { runRankingsCurrentCommand, runRankingsListCommand, runRankingsReturnCommand, };
|
|
35
39
|
export { runCointegrationPairCommand };
|
|
36
40
|
export { runScreeningIndicatorsCommand, runScreeningRunCommand, runScreeningUniversesCommand, };
|
package/dist/cli/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,OAAO,EACL,KAAK,qBAAqB,EAE1B,sBAAsB,EACvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAGL,2BAA2B,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAGL,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,EACpB,iCAAiC,EACjC,qBAAqB,EACrB,uBAAuB,EACvB,6BAA6B,EAC7B,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,+BAA+B,EAC/B,yBAAyB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAGL,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACzB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAGL,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,gBAAgB,EAEhB,KAAK,mBAAmB,EACzB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAQvE,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,qBAAqB,CAAC;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -2,9 +2,11 @@ import { createRequire } from "node:module";
|
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import { registerAssetsCommands, } from "../commands/assets.js";
|
|
4
4
|
import { registerAuthCommands, runAuthWhoamiCommand, } from "../commands/auth.js";
|
|
5
|
+
import { registerBacktestsCommands, runBacktestsInfoCommand, runBacktestsRunCommand, runBacktestsStrategiesCommand, } from "../commands/backtests.js";
|
|
5
6
|
import { registerCapabilitiesCommand, runCapabilitiesCommand, } from "../commands/capabilities.js";
|
|
6
7
|
import { registerCointegrationCommands, runCointegrationPairCommand, } from "../commands/cointegration.js";
|
|
7
8
|
import { registerMarketCommands, runMarketAssetsCommand, runMarketPriceCommand, } from "../commands/market.js";
|
|
9
|
+
import { registerNewsCommands, runAssetNewsCommand, } from "../commands/news.js";
|
|
8
10
|
import { registerInitCommand, runInitCommand, } from "../commands/init.js";
|
|
9
11
|
import { registerPortfoliosCommands, runHoldingCreateCommand, runHoldingBetaCommand, runHoldingGetCommand, runHoldingHistoricalReturnCommand, runHoldingListCommand, runHoldingRenameCommand, runHoldingSetPositionsCommand, runHoldingSetTargetsCommand, runHoldingVarCommand, runWatchlistAddAssetsCommand, runWatchlistCreateCommand, runWatchlistGetCommand, runWatchlistListCommand, runWatchlistRemoveAssetsCommand, runWatchlistRenameCommand, } from "../commands/portfolios.js";
|
|
10
12
|
import { registerRankingsCommands, runRankingsCurrentCommand, runRankingsListCommand, runRankingsReturnCommand, } from "../commands/rankings.js";
|
|
@@ -29,11 +31,21 @@ export function createCliProgram(options = {}) {
|
|
|
29
31
|
env: options.env,
|
|
30
32
|
fetch: options.fetch,
|
|
31
33
|
};
|
|
34
|
+
const backtestsContext = {
|
|
35
|
+
io: options.io,
|
|
36
|
+
env: options.env,
|
|
37
|
+
fetch: options.fetch,
|
|
38
|
+
};
|
|
32
39
|
const marketContext = {
|
|
33
40
|
io: options.io,
|
|
34
41
|
env: options.env,
|
|
35
42
|
fetch: options.fetch,
|
|
36
43
|
};
|
|
44
|
+
const newsContext = {
|
|
45
|
+
io: options.io,
|
|
46
|
+
env: options.env,
|
|
47
|
+
fetch: options.fetch,
|
|
48
|
+
};
|
|
37
49
|
const initContext = {
|
|
38
50
|
io: options.io,
|
|
39
51
|
env: options.env,
|
|
@@ -89,8 +101,10 @@ export function createCliProgram(options = {}) {
|
|
|
89
101
|
registerAuthCommands(program, authContext);
|
|
90
102
|
registerWhoamiCommand(program, authContext);
|
|
91
103
|
registerAssetsCommands(program, assetsContext);
|
|
104
|
+
registerBacktestsCommands(program, backtestsContext);
|
|
92
105
|
registerInitCommand(program, initContext);
|
|
93
106
|
registerMarketCommands(program, marketContext);
|
|
107
|
+
registerNewsCommands(program, newsContext);
|
|
94
108
|
registerPortfoliosCommands(program, portfoliosContext);
|
|
95
109
|
registerRankingsCommands(program, rankingsContext);
|
|
96
110
|
registerCointegrationCommands(program, cointegrationContext);
|
|
@@ -159,9 +173,11 @@ function isCommanderDisplayExit(error) {
|
|
|
159
173
|
}
|
|
160
174
|
export { runAuthLoginCommand, runAuthLogoutCommand, runAuthWhoamiCommand, } from "../commands/auth.js";
|
|
161
175
|
export { runAssetOverviewCommand } from "../commands/assets.js";
|
|
176
|
+
export { runBacktestsInfoCommand, runBacktestsRunCommand, runBacktestsStrategiesCommand, };
|
|
162
177
|
export { runCapabilitiesCommand, runStatusCommand };
|
|
163
178
|
export { runInitCommand };
|
|
164
179
|
export { runMarketAssetsCommand, runMarketPriceCommand };
|
|
180
|
+
export { runAssetNewsCommand };
|
|
165
181
|
export { runRankingsCurrentCommand, runRankingsListCommand, runRankingsReturnCommand, };
|
|
166
182
|
export { runCointegrationPairCommand };
|
|
167
183
|
export { runScreeningIndicatorsCommand, runScreeningRunCommand, runScreeningUniversesCommand, };
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import type { JsonValue } from "../vendor/core/index.js";
|
|
3
|
+
import { type CliInvokeContext } from "../cli/client.js";
|
|
4
|
+
import { type TerminalWriter } from "../cli/terminal.js";
|
|
5
|
+
export interface BacktestsCommandIO {
|
|
6
|
+
stdout: TerminalWriter;
|
|
7
|
+
}
|
|
8
|
+
export interface BacktestsStrategiesCommandOptions {
|
|
9
|
+
json?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface BacktestsInfoCommandOptions {
|
|
12
|
+
json?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface BacktestsGetCommandOptions {
|
|
15
|
+
json?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface BacktestsRunCommandOptions {
|
|
18
|
+
timeframe?: string;
|
|
19
|
+
from?: string;
|
|
20
|
+
to?: string;
|
|
21
|
+
param?: string[];
|
|
22
|
+
paramsJson?: string;
|
|
23
|
+
capital?: string;
|
|
24
|
+
maxRisk?: string;
|
|
25
|
+
contracts?: string;
|
|
26
|
+
json?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export type BacktestParameterValue = string | number | boolean;
|
|
29
|
+
export interface BacktestParameterOptionOut {
|
|
30
|
+
[key: string]: JsonValue;
|
|
31
|
+
value: string;
|
|
32
|
+
label: string;
|
|
33
|
+
}
|
|
34
|
+
export interface BacktestParameterOut {
|
|
35
|
+
[key: string]: JsonValue;
|
|
36
|
+
name: string;
|
|
37
|
+
label: string;
|
|
38
|
+
type: "boolean" | "enum" | "integer" | "number" | "string";
|
|
39
|
+
required: boolean;
|
|
40
|
+
default: BacktestParameterValue | null;
|
|
41
|
+
description: string;
|
|
42
|
+
format: "time" | null;
|
|
43
|
+
value_hint: string | null;
|
|
44
|
+
agent_guidance: string | null;
|
|
45
|
+
options: BacktestParameterOptionOut[] | null;
|
|
46
|
+
}
|
|
47
|
+
export interface BacktestStrategyOut {
|
|
48
|
+
[key: string]: JsonValue;
|
|
49
|
+
id: string;
|
|
50
|
+
label: string;
|
|
51
|
+
family: string;
|
|
52
|
+
description: string;
|
|
53
|
+
selection_guidance: string;
|
|
54
|
+
timeframe_guidance: string;
|
|
55
|
+
side: "long" | "short";
|
|
56
|
+
allowed_timeframes: string[];
|
|
57
|
+
requires_timeframe: boolean;
|
|
58
|
+
fixed_risk: boolean;
|
|
59
|
+
day_trade_only: boolean;
|
|
60
|
+
blocked_in_crypto: boolean;
|
|
61
|
+
default_parameters: Record<string, BacktestParameterValue>;
|
|
62
|
+
parameters: BacktestParameterOut[];
|
|
63
|
+
}
|
|
64
|
+
export interface BacktestStrategiesResponse {
|
|
65
|
+
[key: string]: JsonValue;
|
|
66
|
+
ok: boolean;
|
|
67
|
+
strategies: BacktestStrategyOut[];
|
|
68
|
+
total: number;
|
|
69
|
+
}
|
|
70
|
+
export interface BacktestStrategyResponse {
|
|
71
|
+
[key: string]: JsonValue;
|
|
72
|
+
ok: boolean;
|
|
73
|
+
strategy: BacktestStrategyOut;
|
|
74
|
+
}
|
|
75
|
+
export interface ScorePercentiles {
|
|
76
|
+
[key: string]: JsonValue;
|
|
77
|
+
percentile_5: number | null;
|
|
78
|
+
percentile_25: number | null;
|
|
79
|
+
percentile_50: number | null;
|
|
80
|
+
percentile_75: number | null;
|
|
81
|
+
percentile_95: number | null;
|
|
82
|
+
}
|
|
83
|
+
export interface BacktestDetailResponse {
|
|
84
|
+
[key: string]: JsonValue;
|
|
85
|
+
id: number;
|
|
86
|
+
origin: string | null;
|
|
87
|
+
asset_id: number;
|
|
88
|
+
timeframe_id: string;
|
|
89
|
+
batch_id: number | null;
|
|
90
|
+
start_date: string;
|
|
91
|
+
end_date: string;
|
|
92
|
+
initial_capital: number;
|
|
93
|
+
fixed_capital: boolean | null;
|
|
94
|
+
num_operations: number;
|
|
95
|
+
num_gains: number | null;
|
|
96
|
+
pct_gains: number;
|
|
97
|
+
avg_gains: number | null;
|
|
98
|
+
avg_losses: number | null;
|
|
99
|
+
avg_candles: number | null;
|
|
100
|
+
pct_profit: number;
|
|
101
|
+
profit_factor: number | null;
|
|
102
|
+
drawdown: number;
|
|
103
|
+
ev: number;
|
|
104
|
+
trade_history: JsonValue[];
|
|
105
|
+
best_win_streak: number | null;
|
|
106
|
+
worst_loss_streak: number | null;
|
|
107
|
+
created_at: string;
|
|
108
|
+
is_favorite: boolean;
|
|
109
|
+
max_risk: number | null;
|
|
110
|
+
ticker: string;
|
|
111
|
+
type: string;
|
|
112
|
+
strategy_id: string;
|
|
113
|
+
setup_id: number;
|
|
114
|
+
parameters: Record<string, JsonValue>;
|
|
115
|
+
alert_id: number | null;
|
|
116
|
+
alert_status: string | null;
|
|
117
|
+
can_monitor: boolean;
|
|
118
|
+
score: number | null;
|
|
119
|
+
score_percentiles: ScorePercentiles | null;
|
|
120
|
+
suspicious: boolean;
|
|
121
|
+
}
|
|
122
|
+
export interface BacktestGetResponse {
|
|
123
|
+
[key: string]: JsonValue;
|
|
124
|
+
ok: boolean;
|
|
125
|
+
backtest: BacktestDetailResponse;
|
|
126
|
+
}
|
|
127
|
+
export interface SaveBacktestResponse {
|
|
128
|
+
[key: string]: JsonValue;
|
|
129
|
+
id: number | null;
|
|
130
|
+
origin: string | null;
|
|
131
|
+
setup_id: number;
|
|
132
|
+
timeframe_id: string;
|
|
133
|
+
strategy_id: string;
|
|
134
|
+
ticker: string;
|
|
135
|
+
asset_type: string;
|
|
136
|
+
can_monitor: boolean;
|
|
137
|
+
start_date: string;
|
|
138
|
+
end_date: string;
|
|
139
|
+
initial_capital: number;
|
|
140
|
+
parameters: Record<string, JsonValue>;
|
|
141
|
+
score: number | null;
|
|
142
|
+
score_percentiles: ScorePercentiles | null;
|
|
143
|
+
suspicious: boolean;
|
|
144
|
+
num_operations: number;
|
|
145
|
+
num_gains: number | null;
|
|
146
|
+
pct_gains: number;
|
|
147
|
+
avg_gains: number | null;
|
|
148
|
+
avg_losses: number | null;
|
|
149
|
+
avg_candles: number | null;
|
|
150
|
+
profit_factor: number | null;
|
|
151
|
+
pct_profit: number;
|
|
152
|
+
drawdown: number;
|
|
153
|
+
ev: number;
|
|
154
|
+
trade_history: JsonValue[];
|
|
155
|
+
best_win_streak: number | null;
|
|
156
|
+
worst_loss_streak: number | null;
|
|
157
|
+
}
|
|
158
|
+
export interface BacktestRunResponse {
|
|
159
|
+
[key: string]: JsonValue;
|
|
160
|
+
ok: boolean;
|
|
161
|
+
summary_markdown: string;
|
|
162
|
+
backtest: SaveBacktestResponse;
|
|
163
|
+
}
|
|
164
|
+
export interface BacktestsCommandContext extends CliInvokeContext {
|
|
165
|
+
io?: BacktestsCommandIO;
|
|
166
|
+
}
|
|
167
|
+
type JsonRecord = {
|
|
168
|
+
[key: string]: JsonValue;
|
|
169
|
+
};
|
|
170
|
+
export declare function registerBacktestsCommands(program: Command, context?: BacktestsCommandContext): void;
|
|
171
|
+
export declare function runBacktestsStrategiesCommand(options: BacktestsStrategiesCommandOptions, context?: BacktestsCommandContext): Promise<void>;
|
|
172
|
+
export declare function runBacktestsInfoCommand(strategyId: string, options: BacktestsInfoCommandOptions, context?: BacktestsCommandContext): Promise<void>;
|
|
173
|
+
export declare function runBacktestsGetCommand(backtestId: string, options: BacktestsGetCommandOptions, context?: BacktestsCommandContext): Promise<void>;
|
|
174
|
+
export declare function runBacktestsRunCommand(strategyId: string, ticker: string, options: BacktestsRunCommandOptions, context?: BacktestsCommandContext): Promise<void>;
|
|
175
|
+
export declare function buildBacktestsInfoInput(strategyId: string): JsonRecord;
|
|
176
|
+
export declare function buildBacktestsGetInput(backtestId: string): JsonRecord;
|
|
177
|
+
export declare function buildBacktestsRunInput(strategyId: string, ticker: string, options: BacktestsRunCommandOptions): JsonRecord;
|
|
178
|
+
export declare function formatBacktestStrategiesHuman(data: BacktestStrategiesResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
179
|
+
export declare function formatBacktestStrategyHuman(data: BacktestStrategyResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
180
|
+
export declare function formatBacktestRunHuman(data: BacktestRunResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
181
|
+
export declare function formatBacktestGetHuman(data: BacktestGetResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
182
|
+
export {};
|
|
183
|
+
//# sourceMappingURL=backtests.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backtests.d.ts","sourceRoot":"","sources":["../../src/commands/backtests.ts"],"names":[],"mappings":"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"}
|