@quantbrasil/cli 0.1.0-beta.3 → 0.1.0-beta.4
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 +14 -11
- package/dist/cli/index.d.ts +2 -3
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -10
- package/dist/commands/portfolios.d.ts +133 -8
- package/dist/commands/portfolios.d.ts.map +1 -1
- package/dist/commands/portfolios.js +434 -55
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/vendor/core/capabilities/index.d.ts +0 -1
- package/dist/vendor/core/capabilities/index.d.ts.map +1 -1
- package/dist/vendor/core/capabilities/index.js +0 -1
- package/dist/vendor/core/capabilities/portfolios.d.ts +401 -56
- package/dist/vendor/core/capabilities/portfolios.d.ts.map +1 -1
- package/dist/vendor/core/capabilities/portfolios.js +383 -115
- package/dist/vendor/core/capabilities/registry.d.ts +586 -266
- package/dist/vendor/core/capabilities/registry.d.ts.map +1 -1
- package/dist/vendor/core/capabilities/registry.js +0 -2
- package/dist/vendor/core/capabilities/types.d.ts +1 -1
- package/dist/vendor/core/capabilities/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/skills/quantbrasil/SKILL.md +8 -6
- package/skills/quantbrasil/references/cli.md +20 -25
- package/skills/quantbrasil/references/costs.md +4 -4
- package/skills/quantbrasil/references/errors.md +6 -5
- package/skills/quantbrasil/references/portfolios.md +92 -0
- package/skills/quantbrasil/references/unsupported.md +2 -2
- package/skills/quantbrasil/references/workflows.md +32 -25
- package/dist/commands/analytics.d.ts +0 -131
- package/dist/commands/analytics.d.ts.map +0 -1
- package/dist/commands/analytics.js +0 -291
- package/dist/vendor/core/capabilities/analytics.d.ts +0 -187
- package/dist/vendor/core/capabilities/analytics.d.ts.map +0 -1
- package/dist/vendor/core/capabilities/analytics.js +0 -214
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/capabilities/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/capabilities/registry.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAIrB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAErE,eAAO,MAAM,sBAAsB,EAE9B,MAAM,CAAC,YAAY,EAAE,CAAC,OAAO,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE/D,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEjD"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { analyticsCapabilities } from "./analytics.js";
|
|
2
1
|
import { assetCapabilities } from "./assets.js";
|
|
3
2
|
import { marketCapabilities } from "./market.js";
|
|
4
3
|
import { portfolioCapabilities } from "./portfolios.js";
|
|
@@ -6,7 +5,6 @@ export const capabilityRegistry = [
|
|
|
6
5
|
...marketCapabilities,
|
|
7
6
|
...assetCapabilities,
|
|
8
7
|
...portfolioCapabilities,
|
|
9
|
-
...analyticsCapabilities,
|
|
10
8
|
];
|
|
11
9
|
export const capabilityRegistryById = Object.fromEntries(capabilityRegistry.map(capability => [capability.id, capability]));
|
|
12
10
|
export function getCapabilityById(id) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type CapabilityVisibility = "cli" | "opencode";
|
|
2
2
|
export type CapabilityKind = "read" | "mutation";
|
|
3
|
-
export type CapabilityGroup = "market" | "assets" | "
|
|
3
|
+
export type CapabilityGroup = "market" | "assets" | "watchlists" | "holdings";
|
|
4
4
|
export type CapabilityHttpMethod = "GET" | "POST";
|
|
5
5
|
export type CapabilityInputMode = "none" | "query" | "json_body";
|
|
6
6
|
export type CapabilityOutputMode = "json" | "human";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,UAAU,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAC;AACjD,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/capabilities/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quantbrasil/cli",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.4",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Public QuantBrasil CLI for deterministic operations",
|
|
6
6
|
"repository": {
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"typescript": "^5.3.3",
|
|
42
42
|
"vitest": "^3.2.4",
|
|
43
43
|
"@repo/core": "0.0.0",
|
|
44
|
-
"@repo/
|
|
45
|
-
"@repo/
|
|
44
|
+
"@repo/eslint-config": "0.0.0",
|
|
45
|
+
"@repo/typescript-config": "0.0.0"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "pnpm --filter @repo/core build && pnpm run clean && tsc && node scripts/vendor-core.mjs",
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: quantbrasil
|
|
3
|
-
description: Go-to QuantBrasil market and investing skill. Use for supported asset lookup, prices, asset analysis,
|
|
3
|
+
description: Go-to QuantBrasil market and investing skill. Use for supported asset lookup, prices, asset analysis, watchlists, holdings, and risk/return metrics through the QuantBrasil CLI.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# QuantBrasil CLI
|
|
7
7
|
|
|
8
|
-
Use this skill when the user asks for market or investing data/actions that QuantBrasil supports, including asset lookup, prices, asset analysis,
|
|
8
|
+
Use this skill when the user asks for market or investing data/actions that QuantBrasil supports, including asset lookup, prices, asset analysis, watchlists, holdings, and holding metrics.
|
|
9
9
|
|
|
10
10
|
## Routing
|
|
11
11
|
|
|
12
12
|
- Use this skill even when the user does not say "QuantBrasil" if the request fits the supported market or investing surface.
|
|
13
|
-
- For QuantBrasil-supported market, asset,
|
|
13
|
+
- For QuantBrasil-supported market, asset, watchlist, holding, or holding metric data, use the CLI before generic web or finance search.
|
|
14
|
+
- When the request mentions portfolios, carteiras, watchlists, holdings, target weights, positions, historical return, beta, VaR, or saved compositions, load [`references/portfolios.md`](./references/portfolios.md) before choosing commands.
|
|
14
15
|
- Use `quantbrasil` when available on PATH.
|
|
15
16
|
- If `quantbrasil` is not found, report that the CLI binary is not on PATH and ask the user to install it or fix PATH.
|
|
16
17
|
- Check readiness first: `quantbrasil --status`
|
|
@@ -19,15 +20,16 @@ Use this skill when the user asks for market or investing data/actions that Quan
|
|
|
19
20
|
- asset discovery: `quantbrasil market assets`
|
|
20
21
|
- price lookup: `quantbrasil market price <ticker>`
|
|
21
22
|
- richer asset analysis: `quantbrasil assets overview <ticker> --sections ...`
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
23
|
+
- watchlist details and changes: `quantbrasil watchlists ...`
|
|
24
|
+
- holding details and historical return: `quantbrasil holdings ...`
|
|
25
|
+
- holding metrics: `quantbrasil holdings historical-return|beta|var ...`
|
|
25
26
|
- Use `--json` when output will be parsed by agent or script
|
|
26
27
|
- Use generic web or finance search only if the CLI is unavailable, the requested data is outside the QuantBrasil-supported surface, or the user explicitly asks for an external source.
|
|
27
28
|
- Do not inspect the local repo, package source, or `~/.config/quantbrasil/config.json` for normal data queries. Use CLI status/errors instead.
|
|
28
29
|
|
|
29
30
|
## References
|
|
30
31
|
|
|
32
|
+
- Portfolio, watchlist, and holding semantics: [`references/portfolios.md`](./references/portfolios.md)
|
|
31
33
|
- CLI surface: [`references/cli.md`](./references/cli.md)
|
|
32
34
|
- Common workflows: [`references/workflows.md`](./references/workflows.md)
|
|
33
35
|
- Cost-aware behavior: [`references/costs.md`](./references/costs.md)
|
|
@@ -43,37 +43,32 @@ Valid `--sections`:
|
|
|
43
43
|
- `fundamentals`
|
|
44
44
|
- `rankings`
|
|
45
45
|
|
|
46
|
-
##
|
|
46
|
+
## Watchlists and holdings
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
quantbrasil portfolios list
|
|
50
|
-
quantbrasil portfolios list --json
|
|
51
|
-
|
|
52
|
-
quantbrasil portfolios get 93
|
|
53
|
-
quantbrasil portfolios get 93 --json
|
|
54
|
-
|
|
55
|
-
quantbrasil portfolios create "Dividendos"
|
|
56
|
-
quantbrasil portfolios rename 93 "Longo Prazo"
|
|
57
|
-
quantbrasil portfolios add-assets 93 PETR4 VALE3
|
|
58
|
-
quantbrasil portfolios remove-assets 93 PETR4
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Analytics
|
|
62
|
-
|
|
63
|
-
Saved portfolio:
|
|
48
|
+
Watchlists:
|
|
64
49
|
|
|
65
50
|
```bash
|
|
66
|
-
quantbrasil
|
|
67
|
-
quantbrasil
|
|
68
|
-
quantbrasil
|
|
51
|
+
quantbrasil watchlists list
|
|
52
|
+
quantbrasil watchlists get 93
|
|
53
|
+
quantbrasil watchlists create "Dividendos"
|
|
54
|
+
quantbrasil watchlists rename 93 "Longo Prazo"
|
|
55
|
+
quantbrasil watchlists add-assets 93 PETR4 VALE3
|
|
56
|
+
quantbrasil watchlists remove-assets 93 PETR4
|
|
69
57
|
```
|
|
70
58
|
|
|
71
|
-
|
|
59
|
+
Holdings:
|
|
72
60
|
|
|
73
61
|
```bash
|
|
74
|
-
quantbrasil
|
|
75
|
-
quantbrasil
|
|
76
|
-
quantbrasil
|
|
62
|
+
quantbrasil holdings list
|
|
63
|
+
quantbrasil holdings get 182
|
|
64
|
+
quantbrasil holdings create "Longo Prazo"
|
|
65
|
+
quantbrasil holdings create "Longo Prazo" --target PETR4:50 --target VALE3:50
|
|
66
|
+
quantbrasil holdings create "Carteira Real" --mode position
|
|
67
|
+
quantbrasil holdings rename 182 "Longo Prazo"
|
|
68
|
+
quantbrasil holdings set-targets 182 PETR4:50 VALE3:50
|
|
69
|
+
quantbrasil holdings historical-return 182 --from 2025-01-01 --to 2026-01-01
|
|
70
|
+
quantbrasil holdings beta 182 --years 1
|
|
71
|
+
quantbrasil holdings var 182 --years 1 --confidence 95
|
|
77
72
|
```
|
|
78
73
|
|
|
79
|
-
Use `--json` on any
|
|
74
|
+
Use `--json` on any holding metric command when machine parsing needed.
|
|
@@ -13,18 +13,18 @@ Current guidance uses backend qualitative classes only:
|
|
|
13
13
|
- `market assets` is lowest-cost discovery path
|
|
14
14
|
- `market price` is narrow read path
|
|
15
15
|
- `assets overview` is richer and should use minimal `--sections`
|
|
16
|
-
-
|
|
16
|
+
- holding metrics (`historical-return`, `beta`, `var`) are heaviest current public reads
|
|
17
17
|
|
|
18
18
|
## Agent rules
|
|
19
19
|
|
|
20
20
|
- prefer narrow command that answers question
|
|
21
21
|
- prefer `market price` over `assets overview` for quote-only requests
|
|
22
|
-
- prefer one
|
|
23
|
-
- do not chain multiple heavy
|
|
22
|
+
- prefer one holding metric call targeted to actual question
|
|
23
|
+
- do not chain multiple heavy holding metric calls unless user asked for them
|
|
24
24
|
- use `--json` only when structured output needed
|
|
25
25
|
|
|
26
26
|
## Safe defaults
|
|
27
27
|
|
|
28
|
-
- discover
|
|
28
|
+
- discover the holding id once, then reuse it
|
|
29
29
|
- avoid full-report behavior when user asked only one metric
|
|
30
30
|
- keep `assets overview --sections` minimal and relevant
|
|
@@ -36,9 +36,9 @@ Treat CLI validation as user-input error.
|
|
|
36
36
|
|
|
37
37
|
Examples:
|
|
38
38
|
|
|
39
|
-
- invalid
|
|
39
|
+
- invalid watchlist or holding id
|
|
40
40
|
- invalid `--sections`
|
|
41
|
-
- invalid `--
|
|
41
|
+
- invalid `--target TICKER:WEIGHT_PCT`
|
|
42
42
|
- invalid `--years`
|
|
43
43
|
|
|
44
44
|
Fix input. Do not retry same bad command.
|
|
@@ -70,14 +70,15 @@ Stable codes:
|
|
|
70
70
|
|
|
71
71
|
Possible causes:
|
|
72
72
|
|
|
73
|
-
-
|
|
73
|
+
- watchlist or holding id does not exist
|
|
74
74
|
- ticker not tracked
|
|
75
75
|
- requested history unavailable for period
|
|
76
76
|
|
|
77
77
|
Recovery:
|
|
78
78
|
|
|
79
79
|
- use `market assets` for discovery
|
|
80
|
-
- use `
|
|
80
|
+
- use `watchlists list` before `watchlists get`
|
|
81
|
+
- use `holdings list` before holding metrics
|
|
81
82
|
- narrow period or pick another ticker
|
|
82
83
|
|
|
83
84
|
Stable code:
|
|
@@ -106,7 +107,7 @@ when a requested ticker is invalid for the operation.
|
|
|
106
107
|
Recovery:
|
|
107
108
|
|
|
108
109
|
- read the error message
|
|
109
|
-
- fix the requested
|
|
110
|
+
- fix the requested watchlist/holding id, name, ticker list, or operation
|
|
110
111
|
- do not retry unchanged mutation input
|
|
111
112
|
|
|
112
113
|
Stable code:
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Portfolio Reference
|
|
2
|
+
|
|
3
|
+
Use this reference whenever the user mentions portfolios, carteiras, holdings,
|
|
4
|
+
watchlists, target weights, positions, historical return, beta, VaR, risk, or a
|
|
5
|
+
saved composition.
|
|
6
|
+
|
|
7
|
+
## Domain model
|
|
8
|
+
|
|
9
|
+
- `Portfolio` is the umbrella domain term for a user-owned saved asset set.
|
|
10
|
+
- `Watchlist` is a portfolio used for monitoring assets. It has assets, but it
|
|
11
|
+
is not an investable composition and does not define weights or positions.
|
|
12
|
+
- `Holding` is a portfolio used as an investable composition. It can be based on
|
|
13
|
+
target weights or positions.
|
|
14
|
+
- A theoretical portfolio is a holding with target weights. Save it first, then
|
|
15
|
+
run metrics on the returned holding id.
|
|
16
|
+
|
|
17
|
+
## Command routing
|
|
18
|
+
|
|
19
|
+
- Use `quantbrasil watchlists ...` for monitoring lists, ticker groups, and
|
|
20
|
+
non-investable saved lists.
|
|
21
|
+
- Use `quantbrasil holdings ...` for investable compositions, target weights,
|
|
22
|
+
positions, historical return, beta, VaR, and risk/return checks.
|
|
23
|
+
- Use `quantbrasil holdings list` when the user names a saved holding but does
|
|
24
|
+
not provide an id.
|
|
25
|
+
- Use `quantbrasil watchlists list` when the user names a saved watchlist but
|
|
26
|
+
does not provide an id.
|
|
27
|
+
- If the user asks for portfolio analytics without specifying an object, resolve
|
|
28
|
+
or create a holding first.
|
|
29
|
+
|
|
30
|
+
Do not use these patterns:
|
|
31
|
+
|
|
32
|
+
- `quantbrasil portfolios ...`
|
|
33
|
+
- `quantbrasil analytics ...`
|
|
34
|
+
- ad-hoc asset lists passed directly into metric commands
|
|
35
|
+
- running holding metrics on a watchlist
|
|
36
|
+
|
|
37
|
+
## Holdings
|
|
38
|
+
|
|
39
|
+
Create target-weight holdings when the user wants to analyze a hypothetical or
|
|
40
|
+
model composition.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
quantbrasil holdings create "Teórica energia" --target VALE3:50 --target PRIO3:50
|
|
44
|
+
quantbrasil holdings historical-return 93 --from 2025-01-01 --to 2026-01-01
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
`holdings create` returns the holding id. Reuse that id for follow-up commands.
|
|
48
|
+
|
|
49
|
+
Use `set-targets` to replace a holding target allocation.
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
quantbrasil holdings set-targets 93 VALE3:40 PRIO3:35 PETR4:25
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Use position mode only when the user is creating or managing a real position
|
|
56
|
+
holding.
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
quantbrasil holdings create "Carteira Real" --mode position
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Watchlists
|
|
63
|
+
|
|
64
|
+
Use watchlists for saved sets of assets that the user wants to monitor, screen,
|
|
65
|
+
or revisit later.
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
quantbrasil watchlists create "Dividendos"
|
|
69
|
+
quantbrasil watchlists add-assets 93 PETR4 VALE3
|
|
70
|
+
quantbrasil watchlists get 93
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
If the user asks for return, beta, VaR, or risk on a watchlist, explain that a
|
|
74
|
+
watchlist has no investable composition. Create a target-weight holding or use
|
|
75
|
+
an existing holding instead.
|
|
76
|
+
|
|
77
|
+
## Metrics
|
|
78
|
+
|
|
79
|
+
Holding metrics always run through `holdings`.
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
quantbrasil holdings historical-return 93 --from 2025-01-01 --to 2026-01-01
|
|
83
|
+
quantbrasil holdings beta 93 --years 1
|
|
84
|
+
quantbrasil holdings var 93 --years 1 --confidence 95
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Rules:
|
|
88
|
+
|
|
89
|
+
- `historical-return` requires absolute ISO dates.
|
|
90
|
+
- `beta` accepts `--years 1|3|5`.
|
|
91
|
+
- `var --confidence` takes percentages such as `95` or `99`.
|
|
92
|
+
- Use `--json` for machine parsing.
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
- asset price, quote, or daily move → `market price`
|
|
6
6
|
- supported assets, tickers, or market universe → `market assets`
|
|
7
7
|
- asset performance, technicals, risk, fundamentals, or ranking → `assets overview`
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
8
|
+
- watchlist details or changes → `watchlists ...`
|
|
9
|
+
- holding details or changes → `holdings ...`
|
|
10
|
+
- holding return, beta, risk, VaR, or comparison → `holdings historical-return|beta|var`
|
|
11
11
|
|
|
12
12
|
## Find supported ticker, then get price
|
|
13
13
|
|
|
@@ -60,52 +60,59 @@ Guidance:
|
|
|
60
60
|
|
|
61
61
|
Avoid asking for every section unless user clearly wants full report.
|
|
62
62
|
|
|
63
|
-
## Analyze saved
|
|
63
|
+
## Analyze saved holding
|
|
64
64
|
|
|
65
|
-
1. Discover
|
|
66
|
-
2. Inspect
|
|
67
|
-
3. Run
|
|
65
|
+
1. Discover holding id.
|
|
66
|
+
2. Inspect the holding if needed.
|
|
67
|
+
3. Run the holding metric.
|
|
68
68
|
|
|
69
69
|
```bash
|
|
70
|
-
quantbrasil
|
|
71
|
-
quantbrasil
|
|
72
|
-
quantbrasil
|
|
73
|
-
quantbrasil
|
|
74
|
-
quantbrasil
|
|
70
|
+
quantbrasil holdings list
|
|
71
|
+
quantbrasil holdings get 93
|
|
72
|
+
quantbrasil holdings historical-return 93 --from 2025-01-01 --to 2026-01-01
|
|
73
|
+
quantbrasil holdings beta 93 --years 1
|
|
74
|
+
quantbrasil holdings var 93 --years 1 --confidence 95
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
## Analyze
|
|
77
|
+
## Analyze a theoretical composition
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
Create a holding with target weights, then run holding metrics on its id.
|
|
80
80
|
|
|
81
81
|
Rules:
|
|
82
82
|
|
|
83
|
-
-
|
|
84
|
-
-
|
|
83
|
+
- `holdings create` returns the holding id
|
|
84
|
+
- use `holdings set-targets` to replace target weights later
|
|
85
85
|
- `beta` only accepts `--years 1|3|5`
|
|
86
86
|
- `var --confidence` takes percent like `95` or `99`
|
|
87
87
|
|
|
88
88
|
Example:
|
|
89
89
|
|
|
90
90
|
```bash
|
|
91
|
-
quantbrasil
|
|
92
|
-
quantbrasil
|
|
93
|
-
quantbrasil
|
|
91
|
+
quantbrasil holdings create "Teórica energia" --target VALE3:50 --target PRIO3:50
|
|
92
|
+
quantbrasil holdings historical-return 93 --from 2025-01-01 --to 2026-01-01
|
|
93
|
+
quantbrasil holdings beta 93 --years 1
|
|
94
|
+
quantbrasil holdings var 93 --years 1 --confidence 99
|
|
94
95
|
```
|
|
95
96
|
|
|
96
|
-
## Modify
|
|
97
|
+
## Modify watchlists and holdings
|
|
97
98
|
|
|
98
99
|
Use explicit mutation commands. Do not retry failed mutations automatically.
|
|
99
100
|
|
|
100
101
|
```bash
|
|
101
|
-
quantbrasil
|
|
102
|
-
quantbrasil
|
|
103
|
-
quantbrasil
|
|
104
|
-
quantbrasil
|
|
102
|
+
quantbrasil watchlists create "Dividendos"
|
|
103
|
+
quantbrasil watchlists rename 93 "Longo Prazo"
|
|
104
|
+
quantbrasil watchlists add-assets 93 PETR4 VALE3
|
|
105
|
+
quantbrasil watchlists remove-assets 93 PETR4
|
|
106
|
+
|
|
107
|
+
quantbrasil holdings create "Longo Prazo"
|
|
108
|
+
quantbrasil holdings create "Longo Prazo" --target PETR4:50 --target VALE3:50
|
|
109
|
+
quantbrasil holdings create "Carteira Real" --mode position
|
|
110
|
+
quantbrasil holdings rename 182 "Carteira Real"
|
|
111
|
+
quantbrasil holdings set-targets 182 PETR4:50 VALE3:50
|
|
105
112
|
```
|
|
106
113
|
|
|
107
114
|
Rules:
|
|
108
115
|
|
|
109
|
-
- use `
|
|
116
|
+
- use `watchlists list` or `holdings list` first if the user names a saved object instead of giving id
|
|
110
117
|
- confirm destructive intent before removing assets when user request is ambiguous
|
|
111
118
|
- use `--json` only when structured output is needed
|
|
@@ -1,131 +0,0 @@
|
|
|
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 AnalyticsCommandIO {
|
|
6
|
-
stdout: TerminalWriter;
|
|
7
|
-
}
|
|
8
|
-
export interface AnalyticsCommandContext extends CliInvokeContext {
|
|
9
|
-
io?: AnalyticsCommandIO;
|
|
10
|
-
}
|
|
11
|
-
export interface HistoricalReturnCommandOptions {
|
|
12
|
-
portfolio?: number;
|
|
13
|
-
asset?: string[];
|
|
14
|
-
from: string;
|
|
15
|
-
to: string;
|
|
16
|
-
json?: boolean;
|
|
17
|
-
}
|
|
18
|
-
export interface BetaCommandOptions {
|
|
19
|
-
portfolio?: number;
|
|
20
|
-
asset?: string[];
|
|
21
|
-
years?: string;
|
|
22
|
-
json?: boolean;
|
|
23
|
-
}
|
|
24
|
-
export interface VarCommandOptions {
|
|
25
|
-
portfolio?: number;
|
|
26
|
-
asset?: string[];
|
|
27
|
-
years?: string;
|
|
28
|
-
confidence?: string;
|
|
29
|
-
json?: boolean;
|
|
30
|
-
}
|
|
31
|
-
export interface HistoricalReturnHolding {
|
|
32
|
-
[key: string]: JsonValue;
|
|
33
|
-
ticker: string;
|
|
34
|
-
weight_pct: number;
|
|
35
|
-
total_return: number;
|
|
36
|
-
contribution: number;
|
|
37
|
-
}
|
|
38
|
-
export interface HistoricalReturnResponse {
|
|
39
|
-
[key: string]: JsonValue;
|
|
40
|
-
source_type: "saved_portfolio" | "ad_hoc";
|
|
41
|
-
portfolio_id: number | null;
|
|
42
|
-
portfolio_name: string | null;
|
|
43
|
-
requested_start_date: string;
|
|
44
|
-
requested_end_date: string;
|
|
45
|
-
effective_start_date: string;
|
|
46
|
-
effective_end_date: string;
|
|
47
|
-
total_return: number;
|
|
48
|
-
annualized_return: number;
|
|
49
|
-
max_drawdown: number;
|
|
50
|
-
daily_volatility: number;
|
|
51
|
-
annualized_volatility: number;
|
|
52
|
-
sharpe_ratio: number;
|
|
53
|
-
ibov_return: number;
|
|
54
|
-
cdi_return: number;
|
|
55
|
-
ipca_return: number;
|
|
56
|
-
holdings: HistoricalReturnHolding[];
|
|
57
|
-
summary_markdown: string;
|
|
58
|
-
assumptions: string[];
|
|
59
|
-
warnings: string[];
|
|
60
|
-
}
|
|
61
|
-
export interface BetaHolding {
|
|
62
|
-
[key: string]: JsonValue;
|
|
63
|
-
ticker: string;
|
|
64
|
-
weight_pct: number;
|
|
65
|
-
beta: number | null;
|
|
66
|
-
weighted_beta: number | null;
|
|
67
|
-
correlation: number | null;
|
|
68
|
-
asset_daily_volatility: number | null;
|
|
69
|
-
benchmark_daily_volatility: number | null;
|
|
70
|
-
last_updated: string | null;
|
|
71
|
-
}
|
|
72
|
-
export interface BetaResponse {
|
|
73
|
-
[key: string]: JsonValue;
|
|
74
|
-
source_type: "saved_portfolio" | "ad_hoc";
|
|
75
|
-
portfolio_id: number | null;
|
|
76
|
-
portfolio_name: string | null;
|
|
77
|
-
benchmark: "IBOV";
|
|
78
|
-
lookback_years: number;
|
|
79
|
-
beta: number;
|
|
80
|
-
correlation: number;
|
|
81
|
-
daily_volatility: number;
|
|
82
|
-
annualized_volatility: number;
|
|
83
|
-
long_exposure_pct: number;
|
|
84
|
-
short_exposure_pct: number;
|
|
85
|
-
total_weight_pct: number;
|
|
86
|
-
holdings: BetaHolding[];
|
|
87
|
-
summary_markdown: string;
|
|
88
|
-
assumptions: string[];
|
|
89
|
-
warnings: string[];
|
|
90
|
-
}
|
|
91
|
-
export interface VarHolding {
|
|
92
|
-
[key: string]: JsonValue;
|
|
93
|
-
ticker: string;
|
|
94
|
-
weight_pct: number;
|
|
95
|
-
}
|
|
96
|
-
export interface VarResponse {
|
|
97
|
-
[key: string]: JsonValue;
|
|
98
|
-
source_type: "saved_portfolio" | "ad_hoc";
|
|
99
|
-
portfolio_id: number | null;
|
|
100
|
-
portfolio_name: string | null;
|
|
101
|
-
lookback_years: number;
|
|
102
|
-
confidence_pct: number;
|
|
103
|
-
time_horizon: "1d";
|
|
104
|
-
var: number;
|
|
105
|
-
long_exposure_pct: number;
|
|
106
|
-
short_exposure_pct: number;
|
|
107
|
-
total_weight_pct: number;
|
|
108
|
-
holdings: VarHolding[];
|
|
109
|
-
histogram_data: JsonValue[];
|
|
110
|
-
summary_markdown: string;
|
|
111
|
-
assumptions: string[];
|
|
112
|
-
warnings: string[];
|
|
113
|
-
}
|
|
114
|
-
interface ParsedAssetInput {
|
|
115
|
-
[key: string]: JsonValue;
|
|
116
|
-
ticker: string;
|
|
117
|
-
weight_pct: number | null;
|
|
118
|
-
}
|
|
119
|
-
export declare function registerAnalyticsCommands(program: Command, context?: AnalyticsCommandContext): void;
|
|
120
|
-
export declare function runHistoricalReturnCommand(options: HistoricalReturnCommandOptions, context?: AnalyticsCommandContext): Promise<void>;
|
|
121
|
-
export declare function runBetaCommand(options: BetaCommandOptions, context?: AnalyticsCommandContext): Promise<void>;
|
|
122
|
-
export declare function runVarCommand(options: VarCommandOptions, context?: AnalyticsCommandContext): Promise<void>;
|
|
123
|
-
export declare function buildHistoricalReturnInput(options: HistoricalReturnCommandOptions): JsonValue;
|
|
124
|
-
export declare function buildBetaInput(options: BetaCommandOptions): JsonValue;
|
|
125
|
-
export declare function buildVarInput(options: VarCommandOptions): JsonValue;
|
|
126
|
-
export declare function formatHistoricalReturnHuman(data: HistoricalReturnResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
127
|
-
export declare function formatBetaHuman(data: BetaResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
128
|
-
export declare function formatVarHuman(data: VarResponse, theme?: import("../cli/terminal.js").TerminalTheme): string;
|
|
129
|
-
export declare function parseAssetSpec(rawAsset: string): ParsedAssetInput;
|
|
130
|
-
export {};
|
|
131
|
-
//# sourceMappingURL=analytics.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/commands/analytics.ts"],"names":[],"mappings":"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"}
|