desic-okx-agent 0.2.1 → 0.3.0

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.
Files changed (236) hide show
  1. package/README.en.md +90 -10
  2. package/README.md +76 -10
  3. package/dist/account/private-websocket.js +4 -4
  4. package/dist/account/private-websocket.js.map +1 -1
  5. package/dist/account/service.d.ts +12 -1
  6. package/dist/account/service.js +18 -0
  7. package/dist/account/service.js.map +1 -1
  8. package/dist/bars/rate-limiter.d.ts +18 -0
  9. package/dist/bars/rate-limiter.js +84 -0
  10. package/dist/bars/rate-limiter.js.map +1 -0
  11. package/dist/bars/schema.d.ts +36 -0
  12. package/dist/bars/schema.js +134 -0
  13. package/dist/bars/schema.js.map +1 -0
  14. package/dist/bars/service.d.ts +60 -0
  15. package/dist/bars/service.js +120 -0
  16. package/dist/bars/service.js.map +1 -0
  17. package/dist/bars/store.d.ts +105 -0
  18. package/dist/bars/store.js +415 -0
  19. package/dist/bars/store.js.map +1 -0
  20. package/dist/bars/timeframe.d.ts +40 -0
  21. package/dist/bars/timeframe.js +146 -0
  22. package/dist/bars/timeframe.js.map +1 -0
  23. package/dist/bars/types.d.ts +68 -0
  24. package/dist/bars/types.js +13 -0
  25. package/dist/bars/types.js.map +1 -0
  26. package/dist/cli/data-render.d.ts +37 -0
  27. package/dist/cli/data-render.js +143 -0
  28. package/dist/cli/data-render.js.map +1 -0
  29. package/dist/cli/doctor.js +7 -3
  30. package/dist/cli/doctor.js.map +1 -1
  31. package/dist/cli/index.js +757 -26
  32. package/dist/cli/index.js.map +1 -1
  33. package/dist/cli/live-render.d.ts +24 -0
  34. package/dist/cli/live-render.js +85 -0
  35. package/dist/cli/live-render.js.map +1 -0
  36. package/dist/cli/range.d.ts +28 -0
  37. package/dist/cli/range.js +63 -0
  38. package/dist/cli/range.js.map +1 -0
  39. package/dist/cli/render.js +3 -0
  40. package/dist/cli/render.js.map +1 -1
  41. package/dist/cli/strategy-render.d.ts +36 -0
  42. package/dist/cli/strategy-render.js +391 -0
  43. package/dist/cli/strategy-render.js.map +1 -0
  44. package/dist/cli/width.d.ts +18 -0
  45. package/dist/cli/width.js +71 -0
  46. package/dist/cli/width.js.map +1 -0
  47. package/dist/config/loader.js +1 -1
  48. package/dist/config/schema.d.ts +7 -0
  49. package/dist/config/schema.js +24 -0
  50. package/dist/config/schema.js.map +1 -1
  51. package/dist/core/okx-client.d.ts +9 -1
  52. package/dist/core/okx-client.js +14 -5
  53. package/dist/core/okx-client.js.map +1 -1
  54. package/dist/i18n/locale.d.ts +24 -0
  55. package/dist/i18n/locale.js +65 -0
  56. package/dist/i18n/locale.js.map +1 -0
  57. package/dist/i18n/messages.d.ts +333 -0
  58. package/dist/i18n/messages.js +660 -0
  59. package/dist/i18n/messages.js.map +1 -0
  60. package/dist/live/account-snapshot.d.ts +30 -0
  61. package/dist/live/account-snapshot.js +130 -0
  62. package/dist/live/account-snapshot.js.map +1 -0
  63. package/dist/live/cutoff-queue.d.ts +42 -0
  64. package/dist/live/cutoff-queue.js +69 -0
  65. package/dist/live/cutoff-queue.js.map +1 -0
  66. package/dist/live/execution-key.d.ts +23 -0
  67. package/dist/live/execution-key.js +31 -0
  68. package/dist/live/execution-key.js.map +1 -0
  69. package/dist/live/failures.d.ts +37 -0
  70. package/dist/live/failures.js +57 -0
  71. package/dist/live/failures.js.map +1 -0
  72. package/dist/live/gates.d.ts +65 -0
  73. package/dist/live/gates.js +136 -0
  74. package/dist/live/gates.js.map +1 -0
  75. package/dist/live/loop.d.ts +56 -0
  76. package/dist/live/loop.js +197 -0
  77. package/dist/live/loop.js.map +1 -0
  78. package/dist/live/preconditions.d.ts +48 -0
  79. package/dist/live/preconditions.js +69 -0
  80. package/dist/live/preconditions.js.map +1 -0
  81. package/dist/live/reconcile.d.ts +46 -0
  82. package/dist/live/reconcile.js +104 -0
  83. package/dist/live/reconcile.js.map +1 -0
  84. package/dist/live/runner.d.ts +57 -0
  85. package/dist/live/runner.js +160 -0
  86. package/dist/live/runner.js.map +1 -0
  87. package/dist/live/schema.d.ts +18 -0
  88. package/dist/live/schema.js +91 -0
  89. package/dist/live/schema.js.map +1 -0
  90. package/dist/live/service.d.ts +144 -0
  91. package/dist/live/service.js +303 -0
  92. package/dist/live/service.js.map +1 -0
  93. package/dist/live/session.d.ts +85 -0
  94. package/dist/live/session.js +234 -0
  95. package/dist/live/session.js.map +1 -0
  96. package/dist/live/sizing.d.ts +62 -0
  97. package/dist/live/sizing.js +79 -0
  98. package/dist/live/sizing.js.map +1 -0
  99. package/dist/live/store.d.ts +123 -0
  100. package/dist/live/store.js +350 -0
  101. package/dist/live/store.js.map +1 -0
  102. package/dist/live/types.d.ts +82 -0
  103. package/dist/live/types.js +2 -0
  104. package/dist/live/types.js.map +1 -0
  105. package/dist/market/websocket.d.ts +16 -1
  106. package/dist/market/websocket.js +60 -5
  107. package/dist/market/websocket.js.map +1 -1
  108. package/dist/mcp/server.d.ts +1 -0
  109. package/dist/mcp/server.js +15 -1
  110. package/dist/mcp/server.js.map +1 -1
  111. package/dist/network/connectivity.d.ts +9 -1
  112. package/dist/network/connectivity.js +28 -1
  113. package/dist/network/connectivity.js.map +1 -1
  114. package/dist/report/chart-script.d.ts +12 -0
  115. package/dist/report/chart-script.js +146 -0
  116. package/dist/report/chart-script.js.map +1 -0
  117. package/dist/report/compare-html.d.ts +8 -0
  118. package/dist/report/compare-html.js +254 -0
  119. package/dist/report/compare-html.js.map +1 -0
  120. package/dist/report/compare-script.d.ts +12 -0
  121. package/dist/report/compare-script.js +109 -0
  122. package/dist/report/compare-script.js.map +1 -0
  123. package/dist/report/compare.d.ts +61 -0
  124. package/dist/report/compare.js +205 -0
  125. package/dist/report/compare.js.map +1 -0
  126. package/dist/report/fetch.d.ts +20 -0
  127. package/dist/report/fetch.js +56 -0
  128. package/dist/report/fetch.js.map +1 -0
  129. package/dist/report/html.d.ts +54 -0
  130. package/dist/report/html.js +641 -0
  131. package/dist/report/html.js.map +1 -0
  132. package/dist/report/open.d.ts +42 -0
  133. package/dist/report/open.js +114 -0
  134. package/dist/report/open.js.map +1 -0
  135. package/dist/runtime/server.d.ts +16 -1
  136. package/dist/runtime/server.js +112 -9
  137. package/dist/runtime/server.js.map +1 -1
  138. package/dist/setup/installer.d.ts +1 -0
  139. package/dist/setup/installer.js +8 -0
  140. package/dist/setup/installer.js.map +1 -1
  141. package/dist/setup/wizard.js +19 -22
  142. package/dist/setup/wizard.js.map +1 -1
  143. package/dist/strategy/constants.d.ts +23 -0
  144. package/dist/strategy/constants.js +24 -0
  145. package/dist/strategy/constants.js.map +1 -0
  146. package/dist/strategy/environment.d.ts +52 -0
  147. package/dist/strategy/environment.js +187 -0
  148. package/dist/strategy/environment.js.map +1 -0
  149. package/dist/strategy/instrument.d.ts +29 -0
  150. package/dist/strategy/instrument.js +39 -0
  151. package/dist/strategy/instrument.js.map +1 -0
  152. package/dist/strategy/optimize.d.ts +73 -0
  153. package/dist/strategy/optimize.js +113 -0
  154. package/dist/strategy/optimize.js.map +1 -0
  155. package/dist/strategy/parameter-space.d.ts +59 -0
  156. package/dist/strategy/parameter-space.js +221 -0
  157. package/dist/strategy/parameter-space.js.map +1 -0
  158. package/dist/strategy/python-bridge.d.ts +24 -0
  159. package/dist/strategy/python-bridge.js +114 -0
  160. package/dist/strategy/python-bridge.js.map +1 -0
  161. package/dist/strategy/schema.d.ts +9 -0
  162. package/dist/strategy/schema.js +91 -0
  163. package/dist/strategy/schema.js.map +1 -0
  164. package/dist/strategy/service.d.ts +138 -0
  165. package/dist/strategy/service.js +745 -0
  166. package/dist/strategy/service.js.map +1 -0
  167. package/dist/strategy/settings.d.ts +162 -0
  168. package/dist/strategy/settings.js +243 -0
  169. package/dist/strategy/settings.js.map +1 -0
  170. package/dist/strategy/store.d.ts +96 -0
  171. package/dist/strategy/store.js +367 -0
  172. package/dist/strategy/store.js.map +1 -0
  173. package/dist/strategy/templates.d.ts +11 -0
  174. package/dist/strategy/templates.js +134 -0
  175. package/dist/strategy/templates.js.map +1 -0
  176. package/dist/strategy/types.d.ts +111 -0
  177. package/dist/strategy/types.js +2 -0
  178. package/dist/strategy/types.js.map +1 -0
  179. package/dist/tools/catalog.d.ts +16 -0
  180. package/dist/tools/catalog.js +118 -17
  181. package/dist/tools/catalog.js.map +1 -1
  182. package/dist/trade/service.d.ts +12 -0
  183. package/dist/trade/service.js +24 -7
  184. package/dist/trade/service.js.map +1 -1
  185. package/dist/tui/app.d.ts +23 -0
  186. package/dist/tui/app.js +322 -0
  187. package/dist/tui/app.js.map +1 -0
  188. package/dist/tui/commands.d.ts +70 -0
  189. package/dist/tui/commands.js +313 -0
  190. package/dist/tui/commands.js.map +1 -0
  191. package/dist/tui/entries.d.ts +17 -0
  192. package/dist/tui/entries.js +24 -0
  193. package/dist/tui/entries.js.map +1 -0
  194. package/dist/tui/execute.d.ts +26 -0
  195. package/dist/tui/execute.js +664 -0
  196. package/dist/tui/execute.js.map +1 -0
  197. package/dist/tui/history.d.ts +17 -0
  198. package/dist/tui/history.js +48 -0
  199. package/dist/tui/history.js.map +1 -0
  200. package/dist/tui/index.d.ts +8 -0
  201. package/dist/tui/index.js +48 -0
  202. package/dist/tui/index.js.map +1 -0
  203. package/dist/tui/line-editor.d.ts +44 -0
  204. package/dist/tui/line-editor.js +98 -0
  205. package/dist/tui/line-editor.js.map +1 -0
  206. package/dist/tui/progress.d.ts +23 -0
  207. package/dist/tui/progress.js +46 -0
  208. package/dist/tui/progress.js.map +1 -0
  209. package/dist/tui/settings-editor.d.ts +18 -0
  210. package/dist/tui/settings-editor.js +115 -0
  211. package/dist/tui/settings-editor.js.map +1 -0
  212. package/docs/live-trading.md +455 -0
  213. package/docs/strategy-research.md +597 -0
  214. package/package.json +10 -1
  215. package/python/desic_strategy/__init__.py +34 -0
  216. package/python/desic_strategy/actions.py +158 -0
  217. package/python/desic_strategy/context.py +164 -0
  218. package/python/desic_strategy/engine.py +614 -0
  219. package/python/desic_strategy/indicators.py +159 -0
  220. package/python/desic_strategy/live.py +253 -0
  221. package/python/desic_strategy/policy.py +193 -0
  222. package/python/desic_strategy/portfolio.py +152 -0
  223. package/python/desic_strategy/report.py +319 -0
  224. package/python/desic_strategy/runner.py +574 -0
  225. package/python/desic_strategy/timeframe.py +150 -0
  226. package/python/main.py +18 -0
  227. package/skills/okx-live-trading/SKILL.md +117 -0
  228. package/skills/okx-live-trading/agents/openai.yaml +9 -0
  229. package/skills/okx-live-trading/references/lifecycle.md +128 -0
  230. package/skills/okx-strategy-research/SKILL.md +113 -0
  231. package/skills/okx-strategy-research/agents/openai.yaml +9 -0
  232. package/skills/okx-strategy-research/references/execution-semantics.md +107 -0
  233. package/skills/okx-strategy-research/references/field-traps.md +142 -0
  234. package/skills/okx-strategy-research/references/python-api.md +121 -0
  235. package/skills/okx-strategy-research/references/tools-and-data.md +192 -0
  236. package/skills/okx-trading/SKILL.md +11 -10
@@ -1,12 +1,12 @@
1
1
  import * as prompts from "@clack/prompts";
2
- import { AccountService } from "../account/service.js";
2
+ import { detectAccountEnvironment } from "../account/service.js";
3
3
  import { loadStoredConfig, saveConfig } from "../config/loader.js";
4
4
  import { CONFIG_PATH } from "../config/paths.js";
5
5
  import { publicError } from "../core/errors.js";
6
6
  import { OkxClient } from "../core/okx-client.js";
7
7
  import { checkOkxConnectivity, OKX_REST_BASE_URL } from "../network/connectivity.js";
8
8
  import { displayProxy, normalizeProxyUrl, resolveProxy } from "../network/proxy.js";
9
- import { SETUP_TARGETS, SetupCancelledError, setupSucceeded, setupTargets } from "./installer.js";
9
+ import { bundledSkillCount, SETUP_TARGETS, SetupCancelledError, setupSucceeded, setupTargets } from "./installer.js";
10
10
  const TARGET_LABELS = {
11
11
  codex: "Codex",
12
12
  "claude-code": "Claude Code",
@@ -16,12 +16,13 @@ const TARGET_LABELS = {
16
16
  };
17
17
  export async function runSetupWizard(options = {}) {
18
18
  prompts.intro("Desic OKX Agent setup");
19
+ const skillHint = `MCP + ${bundledSkillCount()} Skills`;
19
20
  const selection = await prompts.multiselect({
20
21
  message: "Choose AI clients to configure",
21
22
  options: [
22
23
  { value: "all", label: "All supported clients", hint: "MCP for all clients; Skills where supported" },
23
- { value: "codex", label: "Codex", hint: "MCP + 7 Skills" },
24
- { value: "claude-code", label: "Claude Code", hint: "MCP + 7 Skills" },
24
+ { value: "codex", label: "Codex", hint: skillHint },
25
+ { value: "claude-code", label: "Claude Code", hint: skillHint },
25
26
  { value: "cursor", label: "Cursor", hint: "MCP" },
26
27
  { value: "vscode", label: "VS Code / GitHub Copilot", hint: "MCP" },
27
28
  { value: "cline", label: "Cline", hint: "MCP" }
@@ -165,29 +166,25 @@ async function configureAccount(networkAvailable, proxy) {
165
166
  });
166
167
  cancelIfNeeded(nameValue);
167
168
  const name = nameValue.trim();
168
- const environmentValue = await prompts.select({
169
- message: "OKX environment",
170
- options: [
171
- { value: "live", label: "Live", hint: "Required for remote News and Smart Money" },
172
- { value: "demo", label: "Demo", hint: "Recommended for testing trading operations" }
173
- ]
174
- });
175
- cancelIfNeeded(environmentValue);
176
- const environment = environmentValue;
177
169
  const apiKey = await requiredPassword("API Key");
178
170
  const secretKey = await requiredPassword("Secret Key");
179
171
  const passphrase = await requiredPassword("Passphrase");
180
- const candidate = loadStoredConfig();
181
- candidate.accounts[name] = { environment, apiKey, secretKey, passphrase };
182
- candidate.defaultAccount ??= name;
183
172
  const spinner = prompts.spinner();
184
- spinner.start(`Verifying '${name}' with OKX`);
173
+ spinner.start(`Verifying '${name}' and detecting its OKX environment`);
185
174
  try {
186
175
  const client = new OkxClient(OKX_REST_BASE_URL, proxy.url);
187
- const verified = await new AccountService(candidate, client).verify(name);
176
+ const detected = await detectAccountEnvironment(client, { name, apiKey, secretKey, passphrase });
177
+ const candidate = loadStoredConfig();
178
+ candidate.accounts[name] = {
179
+ environment: detected.account.environment,
180
+ apiKey,
181
+ secretKey,
182
+ passphrase
183
+ };
184
+ candidate.defaultAccount ??= name;
188
185
  saveConfig(candidate);
189
- spinner.stop(`Account '${name}' verified and saved`);
190
- prompts.note(formatAccountPermissions(verified.data), "OKX account");
186
+ spinner.stop(`Account '${name}' verified as ${detected.account.environment} and saved`);
187
+ prompts.note(formatAccountPermissions(detected.account.environment, detected.config), "OKX account");
191
188
  return { changed: true, skipped: false, name };
192
189
  }
193
190
  catch (error) {
@@ -217,9 +214,9 @@ async function requiredPassword(message) {
217
214
  cancelIfNeeded(value);
218
215
  return value.trim();
219
216
  }
220
- function formatAccountPermissions(data) {
217
+ function formatAccountPermissions(environment, data) {
221
218
  const permission = String(data.perm ?? data.permissions ?? "reported by OKX");
222
- return `Saved to ${CONFIG_PATH}\nEnvironment and API permissions: ${permission}`;
219
+ return `Saved to ${CONFIG_PATH}\nDetected environment: ${environment}\nAPI permissions: ${permission}`;
223
220
  }
224
221
  function formatSetupComplete(account) {
225
222
  const accountMessage = account.changed
@@ -1 +1 @@
1
- {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/setup/wizard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wizard.js","sourceRoot":"","sources":["../../src/setup/wizard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAA2B,MAAM,4BAA4B,CAAC;AAC9G,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAsB,MAAM,qBAAqB,CAAC;AACxG,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,YAAY,EAGb,MAAM,gBAAgB,CAAC;AAcxB,MAAM,aAAa,GAAgC;IACjD,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,aAAa;IAC5B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,0BAA0B;IAClC,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAA0C,EAAE;IAC/E,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,SAAS,iBAAiB,EAAE,SAAS,CAAC;IACxD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;QAC1C,OAAO,EAAE,gCAAgC;QACzC,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,EAAE,IAAI,EAAE,6CAA6C,EAAE;YACrG,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE;YACnD,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;YAC/D,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;YACjD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,KAAK,EAAE;YACnE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE;SAChD;QACD,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;IACH,cAAc,CAAC,SAAS,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,SAAqB,CAAC;IACvC,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,QAAyB,CAAC;IAE1F,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACvC,YAAY,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;IAC3G,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,CAAC;IAE3D,IAAI,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAChC,IAAI,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,cAAc,GAAG,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC;IAEvD,OAAO,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;YAClC,OAAO,EAAE,kDAAkD;YAC3D,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,yBAAyB,EAAE,IAAI,EAAE,oBAAoB,EAAE;gBAChF,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,qCAAqC,EAAE;gBAC7F,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,iBAAiB,EAAE;aAC9E;SACF,CAAC,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,cAAc,GAAG,IAAI,CAAC;YACtB,MAAM;QACR,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACxC,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACjC,OAAO,EAAE,WAAW;YACpB,WAAW,EAAE,uBAAuB;YACpC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;YAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,CAAC;oBACH,iBAAiB,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBAC/B,OAAO,SAAS,CAAC;gBACnB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;gBACtE,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAiB,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAA0B,CAAC;QAC9E,MAAM,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACzB,KAAK,GAAG,SAAS,CAAC;YAClB,OAAO,GAAG,gBAAgB,CAAC;YAC3B,SAAS;QACX,CAAC;QAED,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC;QAC5B,UAAU,CAAC,MAAM,CAAC,CAAC;QACnB,KAAK,GAAG,SAAS,CAAC;QAClB,OAAO,GAAG,gBAAgB,CAAC;QAC3B,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,+BAA+B,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,IAAI,OAAO,EAAE,EAAE;QAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3E,IAAI,cAAc;QAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAC5G,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI,EAAE,KAAK,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,cAAc,CAAC,CAAC;IAC7E,OAAO,CAAC,KAAK,CAAC,SAAS;QACrB,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAC9B,CAAC,CAAC,8DAA8D,CAAC,CAAC;IACpE,OAAO;QACL,OAAO;QACP,OAAO;QACP,OAAO;QACP,KAAK;QACL,YAAY;QACZ,cAAc;QACd,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,WAAW,EAAE,OAAO,CAAC,IAAI;KAC1B,CAAC;AACJ,CAAC;AAQD,KAAK,UAAU,gBAAgB,CAAC,gBAAyB,EAAE,KAAoB;IAC7E,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC;QACX,8DAA8D;QAC9D,uDAAuD;QACvD,sGAAsG;QACtG,kHAAkH;KACnH,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,4BAA4B,CAAC,CAAC;IAE5C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mHAAmH,CAAC,CAAC;QACtI,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;QAClC,OAAO,EAAE,aAAa,CAAC,MAAM;YAC3B,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,gEAAgE;YACzF,CAAC,CAAC,qDAAqD;QACzD,OAAO,EAAE,aAAa,CAAC,MAAM;YAC3B,CAAC,CAAC;gBACE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,EAAE,IAAI,EAAE,oCAAoC,EAAE;gBAC9F,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,IAAI,EAAE,sBAAsB,EAAE;aAC7E;YACH,CAAC,CAAC;gBACE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,EAAE,IAAI,EAAE,sBAAsB,EAAE;gBACjF,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,+BAA+B,EAAE;aAChF;KACN,CAAC,CAAC;IACH,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM;YACnC,CAAC,CAAC,sCAAsC;YACxC,CAAC,CAAC,yFAAyF,CAAC,CAAC;QAC/F,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;YACnC,OAAO,EAAE,eAAe;YACxB,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;gBACvC,IAAI,CAAC,UAAU;oBAAE,OAAO,2BAA2B,CAAC;gBACpD,IAAI,UAAU,CAAC,MAAM,GAAG,EAAE;oBAAE,OAAO,8CAA8C,CAAC;gBAClF,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAAE,OAAO,YAAY,UAAU,uEAAuE,CAAC;gBAC7I,OAAO,SAAS,CAAC;YACnB,CAAC;SACF,CAAC,CAAC;QACH,cAAc,CAAC,SAAS,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAI,SAAoB,CAAC,IAAI,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,cAAc,IAAI,qCAAqC,CAAC,CAAC;QACvE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,iBAAiB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;YACjG,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAC;YACrC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG;gBACzB,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,WAAW;gBACzC,MAAM;gBACN,SAAS;gBACT,UAAU;aACX,CAAC;YACF,SAAS,CAAC,cAAc,KAAK,IAAI,CAAC;YAClC,UAAU,CAAC,SAAS,CAAC,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,iBAAiB,QAAQ,CAAC,OAAO,CAAC,WAAW,YAAY,CAAC,CAAC;YACxF,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;YACrG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,GAAG,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC;gBAChC,OAAO,EAAE,oCAAoC;gBAC7C,OAAO,EAAE;oBACP,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,sCAAsC,EAAE;oBACpF,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,8BAA8B,EAAE;iBAC/E;aACF,CAAC,CAAC;YACH,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;gBACtF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC;QACnC,OAAO;QACP,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,cAAc;KAC1E,CAAC,CAAC;IACH,cAAc,CAAC,KAAK,CAAC,CAAC;IACtB,OAAQ,KAAgB,CAAC,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,wBAAwB,CAAC,WAA4B,EAAE,IAA6B;IAC3F,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,iBAAiB,CAAC,CAAC;IAC9E,OAAO,YAAY,WAAW,2BAA2B,WAAW,sBAAsB,UAAU,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,mBAAmB,CAAC,OAA2B;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO;QACpC,CAAC,CAAC,gBAAgB,OAAO,CAAC,IAAI,aAAa;QAC3C,CAAC,CAAC,uFAAuF,CAAC;IAC5F,OAAO,mBAAmB,cAAc,kEAAkE,CAAC;AAC7G,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAoB;IAClD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAClC,OAAO,CAAC,KAAK,CAAC,uCAAuC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;IAClF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAsB;IACjD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,GAAG,YAAY,MAAM,CAAC,MAAM,EAAE;QAC7E,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;KACjD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA0B,EAAE,KAAoB;IAC5E,OAAO,qBAAqB,YAAY,CAAC,KAAK,CAAC,KAAK,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;AAC3J,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA0B,EAAE,KAAoB;IAC5E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE;QACzB,CAAC,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC,QAAQ,cAAc,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;IAChG,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE;QACnC,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC;QACrD,CAAC,CAAC,0BAA0B,MAAM,CAAC,SAAS,CAAC,QAAQ,cAAc,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,aAAa,EAAE,CAAC;IAC/G,OAAO,2BAA2B,YAAY,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,SAAS,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY,EAAE,IAAgC;IAC1E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IACrC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAClC,MAAM,IAAI,mBAAmB,EAAE,CAAC;AAClC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Values shared with the Python engine.
3
+ *
4
+ * These must stay in step with `python/desic_strategy/report.py`; a test asserts
5
+ * the Python module still declares the same number.
6
+ */
7
+ /**
8
+ * Annualized return and Calmar are withheld below this window length.
9
+ *
10
+ * A five-day run extrapolates to five-digit percentages that read as precision
11
+ * but carry none, and any ratio built on them inherits that noise.
12
+ */
13
+ export declare const MINIMUM_ANNUALIZATION_DAYS = 30;
14
+ /**
15
+ * Largest page a paged read will return, and therefore the largest `limit` the
16
+ * tools accept.
17
+ *
18
+ * One value shared by the tool schema, the store, and the paginating reader.
19
+ * When these drifted apart, a caller asking for 200,000 was rejected by the
20
+ * schema while a caller asking for exactly the store's cap silently received a
21
+ * prefix — two failure modes for the same mistake.
22
+ */
23
+ export declare const MAX_PAGE_ROWS = 20000;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Values shared with the Python engine.
3
+ *
4
+ * These must stay in step with `python/desic_strategy/report.py`; a test asserts
5
+ * the Python module still declares the same number.
6
+ */
7
+ /**
8
+ * Annualized return and Calmar are withheld below this window length.
9
+ *
10
+ * A five-day run extrapolates to five-digit percentages that read as precision
11
+ * but carry none, and any ratio built on them inherits that noise.
12
+ */
13
+ export const MINIMUM_ANNUALIZATION_DAYS = 30;
14
+ /**
15
+ * Largest page a paged read will return, and therefore the largest `limit` the
16
+ * tools accept.
17
+ *
18
+ * One value shared by the tool schema, the store, and the paginating reader.
19
+ * When these drifted apart, a caller asking for 200,000 was rejected by the
20
+ * schema while a caller asking for exactly the store's cap silently received a
21
+ * prefix — two failure modes for the same mistake.
22
+ */
23
+ export const MAX_PAGE_ROWS = 20_000;
24
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/strategy/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC"}
@@ -0,0 +1,52 @@
1
+ export declare const PYTHON_ROOT: string;
2
+ export declare const VENV_DIR: string;
3
+ export declare const MINIMUM_PYTHON: readonly [3, 11];
4
+ export declare const REQUIRED_PACKAGES: readonly ["numpy", "pandas"];
5
+ /**
6
+ * Package index fallback chain.
7
+ *
8
+ * A single index is not enough in practice: a mirror that starts returning 403
9
+ * stalls setup completely, so each is tried in turn before failing.
10
+ */
11
+ export declare const PACKAGE_INDEXES: readonly [{
12
+ readonly name: "tsinghua";
13
+ readonly url: "https://pypi.tuna.tsinghua.edu.cn/simple";
14
+ readonly host: "pypi.tuna.tsinghua.edu.cn";
15
+ }, {
16
+ readonly name: "aliyun";
17
+ readonly url: "https://mirrors.aliyun.com/pypi/simple";
18
+ readonly host: "mirrors.aliyun.com";
19
+ }, {
20
+ readonly name: "pypi";
21
+ readonly url: "https://pypi.org/simple";
22
+ readonly host: "pypi.org";
23
+ }];
24
+ export interface PythonStatus {
25
+ ready: boolean;
26
+ interpreter: string | null;
27
+ version: string | null;
28
+ venvPath: string;
29
+ packages: Record<string, boolean>;
30
+ engineRoot: string;
31
+ problems: string[];
32
+ }
33
+ /** Root of the bundled `desic_strategy` package and its `main.py` entry point. */
34
+ export declare function engineRoot(): string;
35
+ export declare function venvInterpreter(venvPath?: string): string;
36
+ /**
37
+ * Reports whether a usable interpreter exists, preferring the managed venv.
38
+ *
39
+ * The engine itself needs only the standard library, so a run is possible even
40
+ * when numpy and pandas are absent; they are reported so a strategy that
41
+ * imports them fails with a clear message instead of a traceback.
42
+ */
43
+ export declare function pythonStatus(): Promise<PythonStatus>;
44
+ export interface SetupResult {
45
+ interpreter: string;
46
+ venvPath: string;
47
+ index: string | null;
48
+ installed: string[];
49
+ log: string[];
50
+ }
51
+ /** Creates the managed venv when absent and installs the pinned packages. */
52
+ export declare function setupPythonEnvironment(onLog?: (line: string) => void): Promise<SetupResult>;
@@ -0,0 +1,187 @@
1
+ import { execFile } from "node:child_process";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { promisify } from "node:util";
5
+ import { RuntimeError } from "../core/errors.js";
6
+ import { DATA_DIR } from "../config/paths.js";
7
+ const run = promisify(execFile);
8
+ export const PYTHON_ROOT = path.join(DATA_DIR, "python");
9
+ export const VENV_DIR = path.join(PYTHON_ROOT, "venv");
10
+ export const MINIMUM_PYTHON = [3, 11];
11
+ export const REQUIRED_PACKAGES = ["numpy", "pandas"];
12
+ /**
13
+ * Package index fallback chain.
14
+ *
15
+ * A single index is not enough in practice: a mirror that starts returning 403
16
+ * stalls setup completely, so each is tried in turn before failing.
17
+ */
18
+ export const PACKAGE_INDEXES = [
19
+ { name: "tsinghua", url: "https://pypi.tuna.tsinghua.edu.cn/simple", host: "pypi.tuna.tsinghua.edu.cn" },
20
+ { name: "aliyun", url: "https://mirrors.aliyun.com/pypi/simple", host: "mirrors.aliyun.com" },
21
+ { name: "pypi", url: "https://pypi.org/simple", host: "pypi.org" }
22
+ ];
23
+ /** Root of the bundled `desic_strategy` package and its `main.py` entry point. */
24
+ export function engineRoot() {
25
+ // Resolved relative to this module so it works from `src` and from `dist`.
26
+ const fromDist = path.resolve(import.meta.dirname, "../../python");
27
+ if (fs.existsSync(path.join(fromDist, "main.py")))
28
+ return fromDist;
29
+ const fromSrc = path.resolve(import.meta.dirname, "../../../python");
30
+ if (fs.existsSync(path.join(fromSrc, "main.py")))
31
+ return fromSrc;
32
+ return fromDist;
33
+ }
34
+ export function venvInterpreter(venvPath = VENV_DIR) {
35
+ return process.platform === "win32"
36
+ ? path.join(venvPath, "Scripts", "python.exe")
37
+ : path.join(venvPath, "bin", "python3");
38
+ }
39
+ /** Interpreters to consider, most specific first. */
40
+ function candidateInterpreters() {
41
+ const candidates = [venvInterpreter()];
42
+ for (let minor = 13; minor >= MINIMUM_PYTHON[1]; minor -= 1) {
43
+ candidates.push(`python3.${minor}`);
44
+ }
45
+ candidates.push("python3");
46
+ return candidates;
47
+ }
48
+ async function interpreterVersion(interpreter) {
49
+ try {
50
+ const { stdout } = await run(interpreter, ["-c", "import sys;print('%d.%d.%d' % sys.version_info[:3])"], {
51
+ timeout: 10_000
52
+ });
53
+ return stdout.trim() || null;
54
+ }
55
+ catch {
56
+ return null;
57
+ }
58
+ }
59
+ function versionIsSupported(version) {
60
+ const [major = 0, minor = 0] = version.split(".").map((part) => Number(part));
61
+ if (major !== MINIMUM_PYTHON[0])
62
+ return false;
63
+ return minor >= MINIMUM_PYTHON[1];
64
+ }
65
+ async function packagePresence(interpreter) {
66
+ const presence = {};
67
+ for (const name of REQUIRED_PACKAGES) {
68
+ try {
69
+ await run(interpreter, ["-c", `import ${name}`], { timeout: 20_000 });
70
+ presence[name] = true;
71
+ }
72
+ catch {
73
+ presence[name] = false;
74
+ }
75
+ }
76
+ return presence;
77
+ }
78
+ /**
79
+ * Reports whether a usable interpreter exists, preferring the managed venv.
80
+ *
81
+ * The engine itself needs only the standard library, so a run is possible even
82
+ * when numpy and pandas are absent; they are reported so a strategy that
83
+ * imports them fails with a clear message instead of a traceback.
84
+ */
85
+ export async function pythonStatus() {
86
+ const root = engineRoot();
87
+ const problems = [];
88
+ if (!fs.existsSync(path.join(root, "main.py"))) {
89
+ problems.push(`The bundled strategy engine is missing from ${root}`);
90
+ }
91
+ for (const candidate of candidateInterpreters()) {
92
+ const version = await interpreterVersion(candidate);
93
+ if (!version)
94
+ continue;
95
+ if (!versionIsSupported(version)) {
96
+ problems.push(`${candidate} is Python ${version}; ${MINIMUM_PYTHON.join(".")}+ is required`);
97
+ continue;
98
+ }
99
+ const packages = await packagePresence(candidate);
100
+ const missing = Object.entries(packages)
101
+ .filter(([, present]) => !present)
102
+ .map(([name]) => name);
103
+ if (missing.length) {
104
+ problems.push(`Missing Python packages: ${missing.join(", ")}. Run 'desic-okx strategy env --setup' to install them.`);
105
+ }
106
+ return {
107
+ ready: problems.length === 0,
108
+ interpreter: candidate,
109
+ version,
110
+ venvPath: VENV_DIR,
111
+ packages,
112
+ engineRoot: root,
113
+ problems
114
+ };
115
+ }
116
+ problems.push(`No Python ${MINIMUM_PYTHON.join(".")}+ interpreter was found. Install Python, then run 'desic-okx strategy env --setup'.`);
117
+ return {
118
+ ready: false,
119
+ interpreter: null,
120
+ version: null,
121
+ venvPath: VENV_DIR,
122
+ packages: {},
123
+ engineRoot: root,
124
+ problems
125
+ };
126
+ }
127
+ /** Creates the managed venv when absent and installs the pinned packages. */
128
+ export async function setupPythonEnvironment(onLog) {
129
+ const log = [];
130
+ const note = (line) => {
131
+ log.push(line);
132
+ onLog?.(line);
133
+ };
134
+ let base = null;
135
+ for (const candidate of candidateInterpreters().slice(1)) {
136
+ const version = await interpreterVersion(candidate);
137
+ if (version && versionIsSupported(version)) {
138
+ base = candidate;
139
+ note(`Using ${candidate} (Python ${version}) to create the environment`);
140
+ break;
141
+ }
142
+ }
143
+ if (!base) {
144
+ throw new RuntimeError("CAPABILITY_UNAVAILABLE", `No Python ${MINIMUM_PYTHON.join(".")}+ interpreter was found on PATH`);
145
+ }
146
+ fs.mkdirSync(PYTHON_ROOT, { recursive: true, mode: 0o700 });
147
+ const interpreter = venvInterpreter();
148
+ if (!fs.existsSync(interpreter)) {
149
+ note(`Creating a virtual environment at ${VENV_DIR}`);
150
+ await run(base, ["-m", "venv", VENV_DIR], { timeout: 180_000 });
151
+ }
152
+ else {
153
+ note("Reusing the existing virtual environment");
154
+ }
155
+ let usedIndex = null;
156
+ let lastError;
157
+ for (const index of PACKAGE_INDEXES) {
158
+ try {
159
+ note(`Installing ${REQUIRED_PACKAGES.join(", ")} from ${index.name}`);
160
+ await run(interpreter, [
161
+ "-m",
162
+ "pip",
163
+ "install",
164
+ "--disable-pip-version-check",
165
+ "--no-input",
166
+ "--index-url",
167
+ index.url,
168
+ "--trusted-host",
169
+ index.host,
170
+ ...REQUIRED_PACKAGES
171
+ ], { timeout: 600_000 });
172
+ usedIndex = index.name;
173
+ break;
174
+ }
175
+ catch (error) {
176
+ lastError = error;
177
+ note(`${index.name} failed; trying the next index`);
178
+ }
179
+ }
180
+ if (!usedIndex) {
181
+ const detail = lastError instanceof Error ? lastError.message : "unknown error";
182
+ throw new RuntimeError("NETWORK", `Could not install Python packages from any index (${PACKAGE_INDEXES.map((item) => item.name).join(", ")}): ${detail}`, true);
183
+ }
184
+ note("Environment ready");
185
+ return { interpreter, venvPath: VENV_DIR, index: usedIndex, installed: [...REQUIRED_PACKAGES], log };
186
+ }
187
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/strategy/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { MarketService } from "../market/service.js";
2
+ /**
3
+ * Contract specification a backtest needs, as the exchange reports it.
4
+ *
5
+ * Sizing depends entirely on these: `contractValue * contractMultiplier` is how
6
+ * many base-currency units one contract represents, and `lotSize` / `minSize`
7
+ * decide what quantities are legal. Guessing them produces a run whose position
8
+ * sizes are wrong by whatever factor the guess was off, while every reported
9
+ * metric still looks plausible.
10
+ */
11
+ export interface ContractSpec {
12
+ instId: string;
13
+ contractValue: number;
14
+ contractMultiplier: number;
15
+ lotSize: number;
16
+ minSize: number;
17
+ tickSize: number;
18
+ /** Base currency one contract is denominated in, for display. */
19
+ contractValueCurrency: string | null;
20
+ }
21
+ /**
22
+ * Reads an instrument's specification from the market service.
23
+ *
24
+ * The values are cached by that service, so a repeated backtest on one
25
+ * instrument does not re-fetch. Every field is validated: a specification that
26
+ * arrived incomplete must stop the run rather than fall back to a default that
27
+ * silently changes what was simulated.
28
+ */
29
+ export declare function loadContractSpec(market: MarketService, instId: string): Promise<ContractSpec>;
@@ -0,0 +1,39 @@
1
+ import { RuntimeError } from "../core/errors.js";
2
+ /**
3
+ * Reads an instrument's specification from the market service.
4
+ *
5
+ * The values are cached by that service, so a repeated backtest on one
6
+ * instrument does not re-fetch. Every field is validated: a specification that
7
+ * arrived incomplete must stop the run rather than fall back to a default that
8
+ * silently changes what was simulated.
9
+ */
10
+ export async function loadContractSpec(market, instId) {
11
+ const result = await market.getInstrument(instId);
12
+ const row = result.data;
13
+ const contractValue = positive(row.ctVal, "ctVal", instId);
14
+ // OKX omits ctMult on some instruments; absent means one, but a present value
15
+ // that is unparseable is an error rather than something to assume away.
16
+ const contractMultiplier = row.ctMult === undefined || row.ctMult === null || row.ctMult === ""
17
+ ? 1
18
+ : positive(row.ctMult, "ctMult", instId);
19
+ const lotSize = positive(row.lotSz, "lotSz", instId);
20
+ const minSize = positive(row.minSz, "minSz", instId);
21
+ const tickSize = positive(row.tickSz, "tickSz", instId);
22
+ return {
23
+ instId,
24
+ contractValue,
25
+ contractMultiplier,
26
+ lotSize,
27
+ minSize,
28
+ tickSize,
29
+ contractValueCurrency: typeof row.ctValCcy === "string" && row.ctValCcy ? row.ctValCcy : null
30
+ };
31
+ }
32
+ function positive(value, field, instId) {
33
+ const parsed = Number(value);
34
+ if (!Number.isFinite(parsed) || parsed <= 0) {
35
+ throw new RuntimeError("STALE_DATA", `OKX did not report a usable ${field} for ${instId}; a backtest cannot size positions without it`, true, { instId, field, received: value === undefined ? null : String(value) });
36
+ }
37
+ return parsed;
38
+ }
39
+ //# sourceMappingURL=instrument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrument.js","sourceRoot":"","sources":["../../src/strategy/instrument.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAuBjD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAqB,EAAE,MAAc;IAC1E,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,CAAC,IAA+B,CAAC;IAEnD,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3D,8EAA8E;IAC9E,wEAAwE;IACxE,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE;QAC7F,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAExD,OAAO;QACL,MAAM;QACN,aAAa;QACb,kBAAkB;QAClB,OAAO;QACP,OAAO;QACP,QAAQ;QACR,qBAAqB,EAAE,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI;KAC9F,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc,EAAE,KAAa,EAAE,MAAc;IAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,+BAA+B,KAAK,QAAQ,MAAM,+CAA+C,EACjG,IAAI,EACJ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACxE,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Share of the window used to search. The rest is held back.
3
+ *
4
+ * Splitting is the whole point of the exercise rather than a refinement: the
5
+ * best parameters over any window are partly fitted to its noise, so a figure
6
+ * measured on the same bars that chose them is not evidence. 7:3 keeps enough
7
+ * bars to search over while leaving a segment long enough to disagree.
8
+ */
9
+ export declare const TRAIN_FRACTION = 0.7;
10
+ /**
11
+ * Smallest segment worth evaluating, in bars.
12
+ *
13
+ * A one-day validation segment produces a return that a single trade decides,
14
+ * and ranking on that is ranking on coincidence.
15
+ */
16
+ export declare const MINIMUM_SEGMENT_BARS = 1440;
17
+ export interface WindowSplit {
18
+ /** Inclusive first evaluation open of the training segment. */
19
+ trainStart: number;
20
+ /** Inclusive last evaluation open of the training segment. */
21
+ trainEnd: number;
22
+ validationStart: number;
23
+ validationEnd: number;
24
+ trainBars: number;
25
+ validationBars: number;
26
+ }
27
+ /**
28
+ * Splits an evaluation window into a training and a validation segment.
29
+ *
30
+ * The two are contiguous and disjoint: the validation segment begins on the
31
+ * minute after the training segment ends. Overlapping them by even one bar would
32
+ * let a candidate be credited for a bar it was chosen on.
33
+ */
34
+ export declare function splitWindow(evaluationStart: number, evaluationEnd: number): WindowSplit;
35
+ /** Which ranking formula a score came from. Reported, never inferred. */
36
+ export type RankBasis = "calmar" | "return_over_drawdown" | "return";
37
+ export interface RankScore {
38
+ score: number;
39
+ basis: RankBasis;
40
+ }
41
+ /**
42
+ * Scores one candidate from its validation-segment metrics.
43
+ *
44
+ * Calmar is the intended measure, but it divides an annualized return by
45
+ * drawdown, and the engine withholds annualized figures below
46
+ * `MINIMUM_ANNUALIZATION_DAYS` because extrapolating a short window produces
47
+ * five-digit percentages that read as precision and carry none. Rather than fall
48
+ * back silently, the basis used travels with the score and is printed beside the
49
+ * table: a column headed "calmar" that is sometimes a different quantity is worse
50
+ * than an honest label.
51
+ *
52
+ * Every basis keeps the sign of the return, so a losing candidate can never
53
+ * outrank a profitable one through a small denominator.
54
+ */
55
+ export declare function rankCandidate(metrics: Record<string, unknown> | null | undefined): RankScore;
56
+ /** Message-bundle-free description of a basis, for the report footer. */
57
+ export declare function describeRankBasis(basis: RankBasis, validationDays: number): string;
58
+ /**
59
+ * How a candidate's training result survived the held-back segment.
60
+ *
61
+ * `overfit` is the one worth reading: profitable while being chosen, unprofitable
62
+ * once it could no longer see the answer.
63
+ *
64
+ * `unexplained` is the mirror image and just as important. A candidate that lost
65
+ * money while being chosen and made money afterwards did not carry an edge across
66
+ * the split — there was none to carry. The validation profit came from what those
67
+ * particular bars did, which is exactly the reasoning the split exists to prevent.
68
+ * Calling that `holds` would credit a candidate for a segment it happened to land
69
+ * in. It stays rankable, because the score is the score, but it is not evidence
70
+ * that the parameters work.
71
+ */
72
+ export type Verdict = "holds" | "overfit" | "weak" | "unexplained" | "failed";
73
+ export declare function verdictFor(train: Record<string, unknown> | null | undefined, validation: Record<string, unknown> | null | undefined): Verdict;