jcc_hyper_tool 0.1.5 → 0.1.7

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 (138) hide show
  1. package/README.md +160 -17
  2. package/dist/advisor/actionRunner.d.ts +6 -0
  3. package/dist/advisor/actionRunner.d.ts.map +1 -1
  4. package/dist/advisor/actionRunner.js +38 -7
  5. package/dist/advisor/actionRunner.js.map +1 -1
  6. package/dist/advisor/actionSchema.d.ts +1209 -75
  7. package/dist/advisor/actionSchema.d.ts.map +1 -1
  8. package/dist/advisor/actionSchema.js +117 -5
  9. package/dist/advisor/actionSchema.js.map +1 -1
  10. package/dist/advisor/adviseDisplay.d.ts +26 -0
  11. package/dist/advisor/adviseDisplay.d.ts.map +1 -0
  12. package/dist/advisor/adviseDisplay.js +174 -0
  13. package/dist/advisor/adviseDisplay.js.map +1 -0
  14. package/dist/advisor/adviseEngine.d.ts +12 -2
  15. package/dist/advisor/adviseEngine.d.ts.map +1 -1
  16. package/dist/advisor/adviseEngine.js +88 -7
  17. package/dist/advisor/adviseEngine.js.map +1 -1
  18. package/dist/advisor/ambushPolicy.d.ts +47 -0
  19. package/dist/advisor/ambushPolicy.d.ts.map +1 -0
  20. package/dist/advisor/ambushPolicy.js +161 -0
  21. package/dist/advisor/ambushPolicy.js.map +1 -0
  22. package/dist/advisor/contextBuilder.d.ts +17 -0
  23. package/dist/advisor/contextBuilder.d.ts.map +1 -1
  24. package/dist/advisor/contextBuilder.js +25 -6
  25. package/dist/advisor/contextBuilder.js.map +1 -1
  26. package/dist/advisor/executionPolicy.d.ts +92 -0
  27. package/dist/advisor/executionPolicy.d.ts.map +1 -0
  28. package/dist/advisor/executionPolicy.js +273 -0
  29. package/dist/advisor/executionPolicy.js.map +1 -0
  30. package/dist/advisor/guards.d.ts +14 -0
  31. package/dist/advisor/guards.d.ts.map +1 -1
  32. package/dist/advisor/guards.js +143 -16
  33. package/dist/advisor/guards.js.map +1 -1
  34. package/dist/advisor/indicatorCompute.d.ts +45 -0
  35. package/dist/advisor/indicatorCompute.d.ts.map +1 -0
  36. package/dist/advisor/indicatorCompute.js +259 -0
  37. package/dist/advisor/indicatorCompute.js.map +1 -0
  38. package/dist/advisor/positionPlan.d.ts +33 -0
  39. package/dist/advisor/positionPlan.d.ts.map +1 -0
  40. package/dist/advisor/positionPlan.js +118 -0
  41. package/dist/advisor/positionPlan.js.map +1 -0
  42. package/dist/advisor/promptTemplate.d.ts +8 -2
  43. package/dist/advisor/promptTemplate.d.ts.map +1 -1
  44. package/dist/advisor/promptTemplate.js +175 -23
  45. package/dist/advisor/promptTemplate.js.map +1 -1
  46. package/dist/advisor/touchProbability.d.ts +54 -0
  47. package/dist/advisor/touchProbability.d.ts.map +1 -0
  48. package/dist/advisor/touchProbability.js +215 -0
  49. package/dist/advisor/touchProbability.js.map +1 -0
  50. package/dist/advisor/tpslPolicy.d.ts +22 -0
  51. package/dist/advisor/tpslPolicy.d.ts.map +1 -0
  52. package/dist/advisor/tpslPolicy.js +120 -0
  53. package/dist/advisor/tpslPolicy.js.map +1 -0
  54. package/dist/cli/advisorCli.d.ts.map +1 -1
  55. package/dist/cli/advisorCli.js +478 -126
  56. package/dist/cli/advisorCli.js.map +1 -1
  57. package/dist/cli/index.js +2 -0
  58. package/dist/cli/index.js.map +1 -1
  59. package/dist/cli/riskCli.d.ts +3 -0
  60. package/dist/cli/riskCli.d.ts.map +1 -0
  61. package/dist/cli/riskCli.js +120 -0
  62. package/dist/cli/riskCli.js.map +1 -0
  63. package/dist/cli/strategyCli.d.ts.map +1 -1
  64. package/dist/cli/strategyCli.js +3 -1
  65. package/dist/cli/strategyCli.js.map +1 -1
  66. package/dist/cli/tradingCli.d.ts.map +1 -1
  67. package/dist/cli/tradingCli.js +31 -1
  68. package/dist/cli/tradingCli.js.map +1 -1
  69. package/dist/core/hyperliquid/asset.d.ts +2 -0
  70. package/dist/core/hyperliquid/asset.d.ts.map +1 -1
  71. package/dist/core/hyperliquid/asset.js +25 -0
  72. package/dist/core/hyperliquid/asset.js.map +1 -1
  73. package/dist/core/hyperliquid/orders.d.ts +5 -0
  74. package/dist/core/hyperliquid/orders.d.ts.map +1 -1
  75. package/dist/core/hyperliquid/orders.js +15 -5
  76. package/dist/core/hyperliquid/orders.js.map +1 -1
  77. package/dist/core/hyperliquid/rounding.d.ts +23 -0
  78. package/dist/core/hyperliquid/rounding.d.ts.map +1 -0
  79. package/dist/core/hyperliquid/rounding.js +53 -0
  80. package/dist/core/hyperliquid/rounding.js.map +1 -0
  81. package/dist/core/risk/isolatedTopUp.d.ts +112 -0
  82. package/dist/core/risk/isolatedTopUp.d.ts.map +1 -0
  83. package/dist/core/risk/isolatedTopUp.js +209 -0
  84. package/dist/core/risk/isolatedTopUp.js.map +1 -0
  85. package/dist/core/risk/isolatedTopUpHistory.d.ts +7 -0
  86. package/dist/core/risk/isolatedTopUpHistory.d.ts.map +1 -0
  87. package/dist/core/risk/isolatedTopUpHistory.js +26 -0
  88. package/dist/core/risk/isolatedTopUpHistory.js.map +1 -0
  89. package/dist/core/risk/isolatedTopUpParse.d.ts +16 -0
  90. package/dist/core/risk/isolatedTopUpParse.d.ts.map +1 -0
  91. package/dist/core/risk/isolatedTopUpParse.js +78 -0
  92. package/dist/core/risk/isolatedTopUpParse.js.map +1 -0
  93. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts +28 -0
  94. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts.map +1 -0
  95. package/dist/core/risk/runIsolatedTopUpReconcile.js +184 -0
  96. package/dist/core/risk/runIsolatedTopUpReconcile.js.map +1 -0
  97. package/dist/core/state/bracketReconcile.d.ts.map +1 -1
  98. package/dist/core/state/bracketReconcile.js +6 -2
  99. package/dist/core/state/bracketReconcile.js.map +1 -1
  100. package/dist/core/state/gridReconcile.d.ts +2 -0
  101. package/dist/core/state/gridReconcile.d.ts.map +1 -1
  102. package/dist/core/state/gridReconcile.js +42 -2
  103. package/dist/core/state/gridReconcile.js.map +1 -1
  104. package/dist/core/state/intentFactory.d.ts +1 -0
  105. package/dist/core/state/intentFactory.d.ts.map +1 -1
  106. package/dist/core/state/intentFactory.js +1 -0
  107. package/dist/core/state/intentFactory.js.map +1 -1
  108. package/dist/core/state/profileStore.d.ts.map +1 -1
  109. package/dist/core/state/profileStore.js +12 -16
  110. package/dist/core/state/profileStore.js.map +1 -1
  111. package/dist/core/state/runReconcile.d.ts.map +1 -1
  112. package/dist/core/state/runReconcile.js +53 -18
  113. package/dist/core/state/runReconcile.js.map +1 -1
  114. package/dist/core/state/schema.d.ts +439 -68
  115. package/dist/core/state/schema.d.ts.map +1 -1
  116. package/dist/core/state/schema.js +51 -0
  117. package/dist/core/state/schema.js.map +1 -1
  118. package/dist/core/state/snapshot.d.ts +13 -0
  119. package/dist/core/state/snapshot.d.ts.map +1 -1
  120. package/dist/core/state/snapshot.js +36 -0
  121. package/dist/core/state/snapshot.js.map +1 -1
  122. package/dist/core/state/store.d.ts +21 -3
  123. package/dist/core/state/store.d.ts.map +1 -1
  124. package/dist/core/state/store.js +122 -13
  125. package/dist/core/state/store.js.map +1 -1
  126. package/dist/core/state/types.d.ts +13 -0
  127. package/dist/core/state/types.d.ts.map +1 -1
  128. package/dist/daemon/index.js +47 -2
  129. package/dist/daemon/index.js.map +1 -1
  130. package/dist/daemon/validateChild.d.ts +13 -0
  131. package/dist/daemon/validateChild.d.ts.map +1 -0
  132. package/dist/daemon/validateChild.js +77 -0
  133. package/dist/daemon/validateChild.js.map +1 -0
  134. package/dist/strategies/grid.d.ts +1 -0
  135. package/dist/strategies/grid.d.ts.map +1 -1
  136. package/dist/strategies/grid.js +1 -0
  137. package/dist/strategies/grid.js.map +1 -1
  138. package/package.json +3 -1
package/README.md CHANGED
@@ -6,6 +6,7 @@
6
6
  - **签名 `/exchange`**:限价 / 触发单 / bracket 等下单与撤单,以及 HTTP 轮询 **`watch orders`**
7
7
  - **网格策略(`strategy grid`)**:在价格区间内批量铺限价
8
8
  - **本地 JSON 状态**(默认 **`~/.jcc_hyper_tool/trade-state.json`**;根或子命令 **`--state-file`** 可改路径;根 **`--no-state`** 可关闭挂单类命令的读写):**`state reconcile`** / **`state cancel-open`**,跟踪 bracket / grid 意图,并在入场视为成交后再推进 TP/SL
9
+ - **逐仓自动加保证金(`risk isolated-top-up`)**:在 **`state reconcile`** 每轮开头评估逐仓持仓强平距离,必要时 **`updateIsolatedMargin`**;配置写入 **`userProfile.isolatedTopUp`**(默认关闭)
9
10
  - **LLM 顾问(`advise`)**:DeepSeek 推理接口 + K 线与持仓上下文 → 结构化动作(`wait` / `open_with_bracket` / `close_position` / `cancel_all`);默认 **dry-run**,真下单时经子命令既有 **`YES`** / **`--assume-yes`** 流程;用户偏好写入同文件 **`userProfile`**(**`advisor profile`**)
10
11
 
11
12
  私钥**仅**通过**环境变量**提供,请勿写入仓库或配置文件;变量名、何时必填与安全注意见 **[环境变量](#环境变量)**。
@@ -20,20 +21,33 @@
20
21
 
21
22
  ## 守护进程(定时循环)
22
23
 
23
- **`jcc_hyper_daemon`** 按固定间隔反复 **`spawn`** 一次 **`jcc_hyper_tool`**:每次子进程退出后等待 **`--interval`** 秒再运行下一轮。子命令与参数必须写在 **`--`** 之后(与 `git` 等工具的 pass-through 习惯一致)。
24
+ **网格**与 **LLM 自动交易(advise)** 应各跑一个 **`jcc_hyper_daemon`**,**不要混在同一进程**(分开 state 文件,避免持仓/挂单互相撤改)。**若 advise 使用 `open_with_bracket`,还需另起一个 `state reconcile` daemon 指向同一份 advise state**(入场成交后挂 TP/SL;仅跑 advise 不会自动挂保护腿)。详见 **[Manual.md → 定时循环](./Manual.md#定时循环)**。
25
+
26
+ **`jcc_hyper_daemon`** 按固定间隔 **`spawn`** 一次 **`jcc_hyper_tool`**;子命令写在 **`--`** 之后。
24
27
 
25
28
  ```bash
26
- jcc_hyper_daemon --interval 60 -- state reconcile --state-file ~/.jcc_hyper_tool/trade-state.json
29
+ # 网格:对账 / 补单 / 逐仓加保证金(可 30–120s)
30
+ jcc_hyper_daemon --mode grid --interval 60 --state-file ~/.jcc_hyper_tool/grid-state.json -- \
31
+ state reconcile --live --assume-yes
32
+
33
+ # 自动交易:advise 单轮 + 自动执行(间隔 ≥ 300s,建议 900s+)
34
+ jcc_hyper_daemon --mode advise --interval 900 --state-file ~/.jcc_hyper_tool/advise-state.json -- \
35
+ advise --coin xyz:CL --max-sz 2 --once --auto --live --assume-yes
36
+
27
37
  jcc_hyper_daemon --once -- config print
28
38
  ```
29
39
 
30
40
  选项摘要:
31
41
 
32
- - **`-i, --interval <seconds>`**:周期间隔,默认 `60`。
33
- - **`--once`**:只跑一轮子命令后退出(便于脚本自检)。
34
- - **`--jcc-bin <path>`**:显式指定 `jcc_hyper_tool` 可执行文件;否则读取环境变量 **`JCC_HYPER_TOOL_BIN`**,若也未设置,则用**当前 Node** 调起与本包一同发布的 **`cli/index.js`**(与是否把 `jcc_hyper_tool` 装入 PATH 无关)。
42
+ - **`-i, --interval <seconds>`**:周期间隔,默认 `60`;**`advise` 子命令至少 300 秒**。
43
+ - **`--mode grid|advise`**:约束子命令类型,防止 grid 与 advise 混用。
44
+ - **`--once`(daemon 层)**:守护进程**只跑一轮**子命令后退出;**长期 advise 循环不要加此项**。
45
+ - **`advise --once`(子命令层)**:每次 spawn 的 advise **只问模型一次**后退出;与 daemon 循环配合使用(见 **[Manual.md → 自动交易守护进程](./Manual.md#自动交易守护进程-mode-advise)**)。
46
+ - **`--jcc-bin <path>`**:显式指定 `jcc_hyper_tool` 可执行文件。
35
47
 
36
- 收到 **`SIGINT` / `SIGTERM`** 时守护进程会立即退出。更详细的示例见 **[Manual.md jcc_hyper_daemon](./Manual.md#jcc_hyper_daemon)**。
48
+ **`userProfile` / `advisor profile`**:偏好写在 **`trade-state.json` 同一文件**的 `userProfile` 字段里,**不是**单独配置文件;网格与 advise 可各用不同 state 路径,但 profile 须写入**该 daemon 使用的 `--state-file`**。审计日志在 **`advisor-log/`**,与 profile 无关。
49
+
50
+ 收到 **`SIGINT` / `SIGTERM`** 时守护进程会立即退出。
37
51
 
38
52
  ## 从源码参与开发
39
53
 
@@ -212,11 +226,21 @@ Dry-run 示例:
212
226
 
213
227
  ### LLM 顾问(`advise`)
214
228
 
215
- 使用 **DeepSeek** OpenAI 兼容接口(环境变量 **`DEEPSEEK_API_KEY`**,可选 **`DEEPSEEK_MODEL`**,默认模型 **`deepseek-v4-pro`**)。拉取当前 **`coin`** 的 **5m / 1h / 1d** K 线与 **clearinghouse 持仓**,拼成结构化上下文;模型只允许输出 **JSON** 动作(经 Zod 校验,失败会自动重试最多 2 次)。**`--max-sz`** 为强制硬顶;价格相对 **mid** 偏离超过 profile / 默认 **3%** 的限价会被拒绝。
229
+ 使用 **DeepSeek** OpenAI 兼容接口(环境变量 **`DEEPSEEK_API_KEY`**,可选 **`DEEPSEEK_MODEL`**,默认模型 **`deepseek-v4-pro`**)。拉取当前 **`coin`** 的 **5m / 1h / 1d** K 线与 **clearinghouse 持仓**,拼成结构化上下文;模型只允许输出 **JSON** 动作(经 Zod 校验,失败会自动重试最多 2 次)。**`--max-sz`** 为强制硬顶;价格相对 **mid** 偏离超过 profile / 默认 **3%** 的限价会被拒绝;**`open_with_bracket` / `order bracket` 还须满足 Hyperliquid 最低名义价值 **$10**(`limit_px × sz`,上下文含 **`min_order_sz`** 参考)。
230
+
231
+ **动作枚举**:`wait` | `open_with_bracket` | `close_position` | `cancel_all`。执行时通过 **`spawnSync`** 调本包 **`jcc_hyper_tool`** 子命令,**继承**现有 **`--live` / `--assume-yes` / `YES`** 与 dry-run 语义。**`open_with_bracket`**、**`cancel_all`** 需要可写 **`trade-state.json`**(勿与根 **`--no-state`** 同用)。**`close_position`** 的 **market** 在实现上为 **IOC** + 相对 mid 的激进限价(近似市价减仓);持仓大于 **`--max-sz`** 时**按 cap 部分平仓**,不再整单拒绝。
216
232
 
217
- **动作枚举**:`wait` | `open_with_bracket` | `close_position` | `cancel_all`。执行时通过 **`spawnSync`** 调本包 **`jcc_hyper_tool`** 子命令,**继承**现有 **`--live` / `--assume-yes` / `YES`** dry-run 语义。**`open_with_bracket`**、**`cancel_all`** 需要可写 **`trade-state.json`**(勿与根 **`--no-state`** 同用)。**`close_position`** 的 **market** 在实现上为 **IOC** + 相对 mid 的激进限价(近似市价减仓)。
233
+ **一轮 advise** = **一次模型调用 一个动作**;模型返回 **`wait`** 则不下单。**`--auto`** 会在通过护栏后自动执行该动作(仍可用不加 **`--live`** dry-run)。
218
234
 
219
- 会话留痕目录(默认 **`~/.jcc_hyper_tool/advisor-log/<uuid>.json`**)包含 **`reasoning_content`**(仅落盘;按 DeepSeek 要求**不会**回传到下一轮的 `messages`)。
235
+ **反同质化护栏**(CLI **`userProfile`**,详见 Manual):
236
+
237
+ - **`--min-confidence`** / **`minConfidenceToExecute`**:低于阈值不执行;**`--auto`** 且未配置时默认 **0.55**。
238
+ - **`--limit-jitter-pct`** / **`limitPriceJitterPct`**:限价随机微偏移(仍须在 mid 偏离带宽内)。
239
+ - **`--sl-entry-shift <0-1>`** / **`bracketSlEntryShift`**:bracket 入场向模型止损平移(**1** = 以原 SL 价挂限价单,TP/SL 等量平移;未成交无仓)。
240
+ - **`--execute-cooldown-sec`** / **`executeCooldownSec`**:同 coin + 同动作类型冷却;**`open_with_bracket` 另按 `side`(buy/sell)区分**;记录写在 state 的 **`adviseExecuteHistory`**(**`--live` 成功**后更新,键如 **`${coin}:open_with_bracket:sell`**)。
241
+ - **`defaultMinSz` / `minSzByCoin`**(`advisor profile set --min-sz` / `--coin-min COIN=size`):开仓数量下限,与 HL $10 名义价值检查叠加(例如 `xyz:CL` 设 `--coin-min xyz:CL=1` 可禁止 0.15 等小 fractional 仓)。
242
+
243
+ 会话留痕目录(默认 **`~/.jcc_hyper_tool/advisor-log/<uuid>.json`**)包含 **`reasoning_content`**(仅落盘;按 DeepSeek 要求**不会**回传到下一轮的 `messages`)。**这不是 profile 文件**——偏好仍在 **`trade-state.json` → `userProfile`**。
220
244
 
221
245
  ```bash
222
246
  export DEEPSEEK_API_KEY='sk-…'
@@ -227,16 +251,29 @@ jcc_hyper_tool advise --coin BTC --max-sz 0.002
227
251
  jcc_hyper_tool advise --coin BTC --max-sz 0.002 --note "manual note" --once
228
252
 
229
253
  # 单轮后立刻走执行分支(仍可 dry-run,不加 --live 则子命令亦 dry-run)
230
- jcc_hyper_tool advise --coin BTC --max-sz 0.002 --auto
254
+ jcc_hyper_tool advise --coin BTC --max-sz 0.002 --once --auto
255
+
256
+ # v2 提示词:预计算指标模式(节省 token,指标值精确)
257
+ jcc_hyper_tool advise --coin BTC --max-sz 0.002 --context-version precomputed_indicators --once
231
258
 
232
- # 用户风险偏好写入 trade-state(与 intents 并存;reconcile / cancel-open 不改此块)
233
- jcc_hyper_tool advisor profile set --risk conservative --max-sz 0.005 --notes "short swing"
234
- jcc_hyper_tool advisor profile show
235
- jcc_hyper_tool advisor profile clear
259
+ # 用户风险偏好写入 trade-state 的 userProfile(与 intents 同文件;reconcile / cancel-open 不改此块)
260
+ jcc_hyper_tool advisor profile set --state-file ~/.jcc_hyper_tool/advise-state.json \
261
+ --min-confidence 0.6 --limit-jitter-pct 0.002 --sl-entry-shift 1 --execute-cooldown-sec 1800
262
+ jcc_hyper_tool advisor profile show --state-file ~/.jcc_hyper_tool/advise-state.json
263
+ jcc_hyper_tool advisor profile clear --state-file ~/.jcc_hyper_tool/advise-state.json
236
264
  ```
237
265
 
238
266
  K 线条数默认 **48 / 48 / 30**,可用 **`--bars5m` / `--bars1h` / `--bars1d`** 覆盖。
239
267
 
268
+ **Prompt 上下文版本**(`--context-version`):控制发送给模型的 K 线和技术指标格式。
269
+
270
+ | 版本 | 说明 |
271
+ |------|------|
272
+ | **`raw_kline`**(默认,v1) | 原始 K 线 OHLCV 全量数据;模型自行分析 EMA/MACD/RSI/布林带等指标。**兼容旧版行为。** |
273
+ | **`precomputed_indicators`**(v2) | 服务端使用 `trading-signals` 库预计算技术指标(EMA 排列、MACD、RSI、布林带、ATR、量价),输出结构化中文摘要替代大部分 K 线数据;仅保留精简 5m/1h/1d K 线(与 v1 相同根数,仅 h/l/o/c/v 五字段)供波浪/缠论多周期联立、K 线形态和量价配合分析。**大幅节省 token(约 75%)且指标值精确。** |
274
+
275
+ v2 模式下,模型 §1 分析框架会从「从裸 K 线计算指标」变为「解读预计算指标摘要并做综合判断」。相比 v1 额外提供的对数收益率衍生指标(ATR%、历史波动率、价格 Z-Score)让模型可以从跨价格量级可比的角度判断波动率环境和价格极端程度。
276
+
240
277
  ---
241
278
 
242
279
  ## 实战:单边 / 双边网格、定时补单、一键撤销
@@ -334,6 +371,42 @@ jcc_hyper_tool state cancel-open --state-file ./trade-state.json --intent <意
334
371
 
335
372
  撤单成功后同样会做一次 **GC**,终态 intent 会从文件里删掉,事件一并收缩,避免 state 无限长大。
336
373
 
374
+ ### 运行中调整网格间距(修改 state 文件)
375
+
376
+ 网格运行期间,可以**直接编辑 state 文件**调整间距、范围或档数,无需重新运行 `strategy grid` 命令。
377
+
378
+ 找到 state 文件中对应 grid intent,修改以下字段并**新增 `"regenerateGrid": true`**:
379
+
380
+ ```json
381
+ {
382
+ "kind": "grid",
383
+ "id": "xxx-xxx-xxx",
384
+ "lower": 87.0,
385
+ "upper": 93.0,
386
+ "grids": 12,
387
+ "bias": "symmetric",
388
+ "orderSz": 0.01,
389
+ "regenerateGrid": true,
390
+ "legs": [...]
391
+ }
392
+ ```
393
+
394
+ | 可改字段 | 含义 |
395
+ |---------|------|
396
+ | `lower` | 网格下界价格 |
397
+ | `upper` | 网格上界价格 |
398
+ | `grids` | 档位数(正整数) |
399
+ | `bias` | `symmetric`(双边)/ `long`(只做多)/ `short`(只做空) |
400
+ | `orderSz` | 每档挂单数量 |
401
+
402
+ 保存后,下一次 reconcile 检测到 `regenerateGrid: true` 会:
403
+ 1. 用新的 `lower`/`upper`/`grids`/`bias` 重新计算每条腿的价格
404
+ 2. 保留已成交(`filled`)腿的历史记录
405
+ 3. 自动撤销价格不在新网格中的活单(OID 仍在簿上的)
406
+ 4. 新 pending 腿在下一次 reconcile 时挂单
407
+
408
+ **注意**:不要手动编辑 `legs[].px` 或 `legs[].oid`——让 `regenerateGrid` 自动重建更安全。修改前建议备份 state 文件。
409
+
337
410
  ---
338
411
 
339
412
  ## 本地状态与对账
@@ -348,8 +421,10 @@ jcc_hyper_tool state cancel-open --state-file ./trade-state.json --intent <意
348
421
  - **`grid`**:网格参数 + 每一档 **leg**(含 oid、阶段等)。
349
422
  - **`single_limit`**:单笔限价(配合 `order place --state-file`)。
350
423
  - **`standalone_tpsl`**:独立触发单(配合 `order tpsl --state-file`)。
351
- - **`events`**:与该意图相关的事件日志。
352
- - **写入**:先写同目录临时文件再 **`rename`**,尽量原子化;重复对账依赖 **`dedupeKeys`**(`plan:*` / `done:*`),避免在同一模式下重复生成同一类「拟执行动作」。
424
+ - **`events`**:与该意图相关的事件日志(逐仓加保证金事件使用虚拟 intentId **`_risk`**)。
425
+ - **`userProfile`**(可选):顾问偏好 + **`isolatedTopUp`** 风控参数;**reconcile / cancel-open 不删此块**。
426
+ - **`adviseExecuteHistory`**(可选):advise **`--live` 成功执行**后的冷却记录(键为 **`${coin}:${action}`**;**`open_with_bracket` 为 `${coin}:open_with_bracket:${side}`**)。
427
+ - **写入**:先写同目录临时文件再 **`rename`**,尽量原子化;**跨进程**(例如 advise + reconcile 两个 daemon 共用 `--state-file`)通过 **`${stateFile}.lock`** 互斥,默认最多等待 **30s**、每 **50ms** 重试;reconcile 写回时会保留 advise 刚更新的 **`adviseExecuteHistory`** / **`userProfile`**。重复对账依赖 **`dedupeKeys`**(`plan:*` / `done:*`),避免在同一模式下重复生成同一类「拟执行动作」。
353
428
 
354
429
  未使用根 **`--no-state`** 时,**`order place` / `order tpsl` / `strategy grid`** 会默认写入默认 state 文件(或根 / 子命令 **`--state-file`** 指定路径)。**`--no-state`** 则完全不写、不读。
355
430
 
@@ -357,7 +432,7 @@ jcc_hyper_tool state cancel-open --state-file ./trade-state.json --intent <意
357
432
 
358
433
  | 子命令 | 作用 |
359
434
  | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
360
- | **`state reconcile`** | 读状态 → 拉 **合并后的 openOrders**(默认 perp + 各 builder dex)与 **clearinghouseState(仓位)** → 推进 bracket/grid 状态机 → **默认只输出 dry-run 计划**;加 **`--live`** 则在确认后真实下单 / 撤单(需私钥;可用 **`--assume-yes`** 跳过交互)。**`--intent <id>`** 可只处理一条意图。写回前会 **GC** 终态意图。 |
435
+ | **`state reconcile`** | 读状态 → 拉 **合并后的 openOrders**(默认 perp + 各 builder dex)与 **clearinghouseState(仓位)** → **(可选)逐仓自动加保证金** → 推进 bracket/grid 状态机 → **默认只输出 dry-run 计划**;加 **`--live`** 则在确认后真实下单 / 撤单 / 加保证金(需私钥;可用 **`--assume-yes`** 跳过交互)。**`--intent <id>`** 可只处理一条意图(逐仓评估也仅针对该 intent 的 coin)。写回前会 **GC** 终态意图。 |
361
436
  | **`state cancel-open`** | 从 state 收集 oid,与 **合并后的 openOrders**(默认 perp + 各 builder dex)求交后按 **coin / assetIndex** 批量撤单;默认 **dry** 只出计划;**`--live`** 真实撤单(**`--assume-yes`** 可非交互)。结束后 **GC** 本地 state。 |
362
437
  | **`state list`** | 以任务可读方式列出全部意图摘要(阶段、下一步提示等)。 |
363
438
  | **`state show <intentId>`** | 单条意图的结构化详情 + 最近相关事件。 |
@@ -407,6 +482,74 @@ jcc_hyper_tool state reconcile --state-file ./trade-state.json --live --assume-y
407
482
 
408
483
  ---
409
484
 
485
+ ## 逐仓自动加保证金(`risk isolated-top-up`)
486
+
487
+ 当网格或 bracket 产生**逐仓持仓**且 mark 与强平价距离偏紧时,可在 **`state reconcile`** 每轮**开头**(grid/bracket 动作之前)自动调用 Hyperliquid **`updateIsolatedMargin`** 追加 USDC 保证金。
488
+
489
+ **适用范围(代码硬约束)**
490
+
491
+ | 场景 | 行为 |
492
+ |------|------|
493
+ | 全仓(`leverage.type === "cross"`) | 跳过 |
494
+ | 无持仓(`\|szi\| === 0`) | 跳过 |
495
+ | 逐仓 + 有持仓 | 评估是否加仓 |
496
+
497
+ **加多少(目标驱动)**
498
+
499
+ 1. 计算当前安全距离:`distancePct = |mark − liq| / mark × 100`
500
+ 2. 若 `distancePct >= safeDistancePct`(默认 **8%**)→ 不加
501
+ 3. 否则算拉到安全距离所需 USDC:`neededUsd ≈ gapPx × |szi| × safetyFactor`(默认 **`safetyFactor = 1.10`**)
502
+ 4. 可加仓池:`withdrawable − reserveUsd`(默认 **`reserveUsd = 100`**,留给网格挂单)
503
+ 5. 钱够 → 加 `neededUsd`;不够 → 加 `availableToAdd`(partial);若 partial 后不足 **`minPartialUsd`(默认 20)** → 只记日志、不加
504
+
505
+ **配置**(写入 **`trade-state.json` → `userProfile.isolatedTopUp`**,默认 **`enabled: false`**):
506
+
507
+ ```json
508
+ {
509
+ "userProfile": {
510
+ "isolatedTopUp": {
511
+ "enabled": true,
512
+ "safeDistancePct": 8,
513
+ "safetyFactor": 1.1,
514
+ "reserveUsd": 100,
515
+ "minTopUpUsd": 5,
516
+ "minPartialUsd": 20,
517
+ "maxSingleTopUpUsd": 5000,
518
+ "maxDailyTopUpUsd": 20000,
519
+ "cooldownSec": 300
520
+ }
521
+ }
522
+ }
523
+ ```
524
+
525
+ **CLI**
526
+
527
+ ```bash
528
+ # 启用并设置保留金(写入 state 文件 userProfile)
529
+ jcc_hyper_tool risk isolated-top-up configure --enable --reserve-usd 100 --state-file ./trade-state.json
530
+
531
+ # 仅预览本轮评估(不 POST /exchange)
532
+ jcc_hyper_tool risk isolated-top-up plan --state-file ./trade-state.json
533
+
534
+ # 与 grid 对账一起跑(dry 会在 dryPlan 里列出 isolated_top_up / isolated_top_up_skip)
535
+ jcc_hyper_tool state reconcile --state-file ./trade-state.json
536
+
537
+ # 真实加保证金(与 grid live 共用一次 YES / --assume-yes)
538
+ jcc_hyper_tool state reconcile --state-file ./trade-state.json --live --assume-yes
539
+ ```
540
+
541
+ **daemon 示例**(仅 **grid** daemon;与 advise 分开进程,见 **[守护进程](#守护进程定时循环)**):
542
+
543
+ ```bash
544
+ jcc_hyper_daemon --mode grid --interval 60 -- state reconcile --state-file ~/.jcc_hyper_tool/grid-state.json --live --assume-yes
545
+ ```
546
+
547
+ **输出**:`state reconcile` JSON 的 **`dryPlan` / `actionsExecuted`** 含 **`isolated_top_up`** 或 **`isolated_top_up_skip`**;事件类型 **`isolated_margin_top_up_executed`** / **`_skipped`** / **`_failed`** 写入 **`events`**。
548
+
549
+ **注意**:`withdrawable` 为**账户级**;同地址多 coin 多 daemon 会共享可加仓池。加保证金成功后**不会**立刻 refetch 全量仓位;下轮 reconcile 用新 `liquidationPx` 验证效果。
550
+
551
+ ---
552
+
410
553
  ## 校验与测试
411
554
 
412
555
  仓库内跑静态检查与单元测试:
@@ -16,6 +16,12 @@ export declare function advisorActionToCliArgs(action: AdvisorAction, params: {
16
16
  globals: string[];
17
17
  live: boolean;
18
18
  assumeYes: boolean;
19
+ /** Hard cap for close size (partial close when position exceeds cap). */
20
+ szCap?: number;
21
+ /** Optional jitter on aggressive market-close limit. */
22
+ limitJitterPct?: number;
23
+ maxDevPct?: number;
24
+ szDecimals?: number;
19
25
  }): string[];
20
26
  export declare function formatCliInvocation(args: string[]): string;
21
27
  export type SpawnCapture = {
@@ -1 +1 @@
1
- {"version":3,"file":"actionRunner.d.ts","sourceRoot":"","sources":["../../src/advisor/actionRunner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAcvE;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,IAAI,CASN;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IACN,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;CACpB,GACA,MAAM,EAAE,CAkGV;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAS1D;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GACpC,YAAY,CAmBd"}
1
+ {"version":3,"file":"actionRunner.d.ts","sourceRoot":"","sources":["../../src/advisor/actionRunner.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAQvD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAcvE;AAED,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhF;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,IAAI,CAaN;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE;IACN,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACA,MAAM,EAAE,CAwIV;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAS1D;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,GACpC,YAAY,CAmBd"}
@@ -2,6 +2,8 @@ import { ConfigError } from "../core/errors.js";
2
2
  import { inferHlDexFromPrefixedPerpCoin } from "../core/hyperliquid/prefixedPerpCoin.js";
3
3
  import { resolveJccHyperToolSpawn } from "../core/cliBin.js";
4
4
  import { spawnSync } from "node:child_process";
5
+ import { isAdvisorBracketOpenAction } from "./actionSchema.js";
6
+ import { applyLimitJitterWithinBand, roundAdvisorLimitPx, resolveCloseSz, } from "./executionPolicy.js";
5
7
  export function buildGlobalPrefix(opts) {
6
8
  const out = [];
7
9
  if (opts.network) {
@@ -26,7 +28,9 @@ export function aggressiveCloseLimitPx(side, mid) {
26
28
  return mid * 1.08;
27
29
  }
28
30
  export function assertAdviseActionNeedsState(action, noState, stateFile) {
29
- if (action.action !== "open_with_bracket" && action.action !== "cancel_all") {
31
+ if (action.action !== "open_with_bracket" &&
32
+ action.action !== "place_limit_ambush" &&
33
+ action.action !== "cancel_all") {
30
34
  return;
31
35
  }
32
36
  if (noState || !stateFile) {
@@ -36,7 +40,7 @@ export function assertAdviseActionNeedsState(action, noState, stateFile) {
36
40
  export function advisorActionToCliArgs(action, params) {
37
41
  const g = [...params.globals];
38
42
  const dex = inferHlDexFromPrefixedPerpCoin(params.coin);
39
- if (action.action === "open_with_bracket") {
43
+ if (isAdvisorBracketOpenAction(action)) {
40
44
  const args = [
41
45
  ...g,
42
46
  "order",
@@ -63,6 +67,13 @@ export function advisorActionToCliArgs(action, params) {
63
67
  else if (action.protection_limit_px !== undefined) {
64
68
  args.push("--protection-limit-px", String(action.protection_limit_px));
65
69
  }
70
+ if (action.action === "place_limit_ambush") {
71
+ args.push("--expires-in-ms", String(Math.round(action.expires_in_min * 60_000)));
72
+ args.push("--strategy", "ambush");
73
+ }
74
+ else {
75
+ args.push("--strategy", "scalp");
76
+ }
66
77
  if (params.live) {
67
78
  args.push("--live");
68
79
  }
@@ -72,24 +83,44 @@ export function advisorActionToCliArgs(action, params) {
72
83
  return args;
73
84
  }
74
85
  if (action.action === "close_position") {
75
- const pos = params.positionSignedSz;
76
- if (pos === undefined || !Number.isFinite(pos) || pos === 0) {
77
- throw new ConfigError("close_position: no open position for this coin.");
86
+ const cap = params.szCap;
87
+ const { sz, capped, positionAbs } = cap !== undefined && Number.isFinite(cap) && cap > 0
88
+ ? resolveCloseSz(params.positionSignedSz, cap)
89
+ : (() => {
90
+ const pos = params.positionSignedSz;
91
+ if (pos === undefined || !Number.isFinite(pos) || pos === 0) {
92
+ throw new ConfigError("close_position: no open position for this coin.");
93
+ }
94
+ const positionAbs = Math.abs(pos);
95
+ return { sz: positionAbs, capped: false, positionAbs };
96
+ })();
97
+ if (capped) {
98
+ process.stderr.write(`advise: close_position size capped to ${sz} (position ${positionAbs}, cap ${cap}).\n`);
78
99
  }
100
+ const pos = params.positionSignedSz;
79
101
  const closeSide = pos > 0 ? "sell" : "buy";
80
- const sz = Math.abs(pos);
81
102
  let limitPx;
82
103
  if (action.method === "market") {
83
104
  if (params.mid === null || params.mid <= 0) {
84
105
  throw new ConfigError("close_position: market close needs mid price.");
85
106
  }
86
107
  limitPx = aggressiveCloseLimitPx(closeSide, params.mid);
108
+ limitPx = roundAdvisorLimitPx(limitPx, params.szDecimals);
109
+ const jitterPct = params.limitJitterPct ?? 0;
110
+ const maxDev = params.maxDevPct ?? 1;
111
+ if (jitterPct > 0) {
112
+ const jittered = applyLimitJitterWithinBand(limitPx, params.mid, jitterPct, maxDev, Math.random, params.szDecimals);
113
+ if (jittered.applied) {
114
+ process.stderr.write(`advise: market close limit jitter ${limitPx} → ${jittered.px}.\n`);
115
+ }
116
+ limitPx = jittered.px;
117
+ }
87
118
  }
88
119
  else {
89
120
  if (action.limit_px === undefined || !Number.isFinite(action.limit_px)) {
90
121
  throw new ConfigError("close_position: limit method needs limit_px.");
91
122
  }
92
- limitPx = action.limit_px;
123
+ limitPx = roundAdvisorLimitPx(action.limit_px, params.szDecimals);
93
124
  }
94
125
  const args = [
95
126
  ...g,
@@ -1 +1 @@
1
- {"version":3,"file":"actionRunner.js","sourceRoot":"","sources":["../../src/advisor/actionRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actionRunner.js","sourceRoot":"","sources":["../../src/advisor/actionRunner.ts"],"names":[],"mappings":"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"}