jcc_hyper_tool 0.1.4 → 0.1.6

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 (179) hide show
  1. package/README.md +159 -21
  2. package/dist/advisor/actionRunner.d.ts +35 -0
  3. package/dist/advisor/actionRunner.d.ts.map +1 -0
  4. package/dist/advisor/actionRunner.js +194 -0
  5. package/dist/advisor/actionRunner.js.map +1 -0
  6. package/dist/advisor/actionSchema.d.ts +1551 -0
  7. package/dist/advisor/actionSchema.d.ts.map +1 -0
  8. package/dist/advisor/actionSchema.js +202 -0
  9. package/dist/advisor/actionSchema.js.map +1 -0
  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 +53 -0
  15. package/dist/advisor/adviseEngine.d.ts.map +1 -0
  16. package/dist/advisor/adviseEngine.js +172 -0
  17. package/dist/advisor/adviseEngine.js.map +1 -0
  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 +51 -0
  23. package/dist/advisor/contextBuilder.d.ts.map +1 -0
  24. package/dist/advisor/contextBuilder.js +153 -0
  25. package/dist/advisor/contextBuilder.js.map +1 -0
  26. package/dist/advisor/deepseekClient.d.ts +26 -0
  27. package/dist/advisor/deepseekClient.d.ts.map +1 -0
  28. package/dist/advisor/deepseekClient.js +96 -0
  29. package/dist/advisor/deepseekClient.js.map +1 -0
  30. package/dist/advisor/executionPolicy.d.ts +92 -0
  31. package/dist/advisor/executionPolicy.d.ts.map +1 -0
  32. package/dist/advisor/executionPolicy.js +273 -0
  33. package/dist/advisor/executionPolicy.js.map +1 -0
  34. package/dist/advisor/guards.d.ts +31 -0
  35. package/dist/advisor/guards.d.ts.map +1 -0
  36. package/dist/advisor/guards.js +198 -0
  37. package/dist/advisor/guards.js.map +1 -0
  38. package/dist/advisor/indicatorCompute.d.ts +45 -0
  39. package/dist/advisor/indicatorCompute.d.ts.map +1 -0
  40. package/dist/advisor/indicatorCompute.js +259 -0
  41. package/dist/advisor/indicatorCompute.js.map +1 -0
  42. package/dist/advisor/positionPlan.d.ts +33 -0
  43. package/dist/advisor/positionPlan.d.ts.map +1 -0
  44. package/dist/advisor/positionPlan.js +118 -0
  45. package/dist/advisor/positionPlan.js.map +1 -0
  46. package/dist/advisor/promptTemplate.d.ts +11 -0
  47. package/dist/advisor/promptTemplate.d.ts.map +1 -0
  48. package/dist/advisor/promptTemplate.js +230 -0
  49. package/dist/advisor/promptTemplate.js.map +1 -0
  50. package/dist/advisor/sessionLog.d.ts +41 -0
  51. package/dist/advisor/sessionLog.d.ts.map +1 -0
  52. package/dist/advisor/sessionLog.js +7 -0
  53. package/dist/advisor/sessionLog.js.map +1 -0
  54. package/dist/advisor/touchProbability.d.ts +54 -0
  55. package/dist/advisor/touchProbability.d.ts.map +1 -0
  56. package/dist/advisor/touchProbability.js +215 -0
  57. package/dist/advisor/touchProbability.js.map +1 -0
  58. package/dist/advisor/tpslPolicy.d.ts +22 -0
  59. package/dist/advisor/tpslPolicy.d.ts.map +1 -0
  60. package/dist/advisor/tpslPolicy.js +120 -0
  61. package/dist/advisor/tpslPolicy.js.map +1 -0
  62. package/dist/cli/advisorCli.d.ts +3 -0
  63. package/dist/cli/advisorCli.d.ts.map +1 -0
  64. package/dist/cli/advisorCli.js +706 -0
  65. package/dist/cli/advisorCli.js.map +1 -0
  66. package/dist/cli/index.js +6 -2
  67. package/dist/cli/index.js.map +1 -1
  68. package/dist/cli/riskCli.d.ts +3 -0
  69. package/dist/cli/riskCli.d.ts.map +1 -0
  70. package/dist/cli/riskCli.js +120 -0
  71. package/dist/cli/riskCli.js.map +1 -0
  72. package/dist/cli/strategyCli.d.ts.map +1 -1
  73. package/dist/cli/strategyCli.js +4 -2
  74. package/dist/cli/strategyCli.js.map +1 -1
  75. package/dist/cli/tradingCli.d.ts.map +1 -1
  76. package/dist/cli/tradingCli.js +34 -2
  77. package/dist/cli/tradingCli.js.map +1 -1
  78. package/dist/core/cliBin.d.ts +8 -0
  79. package/dist/core/cliBin.d.ts.map +1 -0
  80. package/dist/core/cliBin.js +15 -0
  81. package/dist/core/cliBin.js.map +1 -0
  82. package/dist/core/errorFormat.d.ts +7 -0
  83. package/dist/core/errorFormat.d.ts.map +1 -0
  84. package/dist/core/errorFormat.js +59 -0
  85. package/dist/core/errorFormat.js.map +1 -0
  86. package/dist/core/errors.d.ts +2 -1
  87. package/dist/core/errors.d.ts.map +1 -1
  88. package/dist/core/errors.js +3 -1
  89. package/dist/core/errors.js.map +1 -1
  90. package/dist/core/hyperliquid/asset.d.ts +2 -0
  91. package/dist/core/hyperliquid/asset.d.ts.map +1 -1
  92. package/dist/core/hyperliquid/asset.js +25 -0
  93. package/dist/core/hyperliquid/asset.js.map +1 -1
  94. package/dist/core/hyperliquid/client.d.ts +3 -0
  95. package/dist/core/hyperliquid/client.d.ts.map +1 -1
  96. package/dist/core/hyperliquid/client.js +31 -21
  97. package/dist/core/hyperliquid/client.js.map +1 -1
  98. package/dist/core/hyperliquid/exchange.d.ts +3 -0
  99. package/dist/core/hyperliquid/exchange.d.ts.map +1 -1
  100. package/dist/core/hyperliquid/exchange.js +31 -21
  101. package/dist/core/hyperliquid/exchange.js.map +1 -1
  102. package/dist/core/hyperliquid/exchangeParse.d.ts +3 -0
  103. package/dist/core/hyperliquid/exchangeParse.d.ts.map +1 -1
  104. package/dist/core/hyperliquid/exchangeParse.js +62 -0
  105. package/dist/core/hyperliquid/exchangeParse.js.map +1 -1
  106. package/dist/core/hyperliquid/httpRequest.d.ts +36 -0
  107. package/dist/core/hyperliquid/httpRequest.d.ts.map +1 -0
  108. package/dist/core/hyperliquid/httpRequest.js +171 -0
  109. package/dist/core/hyperliquid/httpRequest.js.map +1 -0
  110. package/dist/core/hyperliquid/orders.d.ts +5 -0
  111. package/dist/core/hyperliquid/orders.d.ts.map +1 -1
  112. package/dist/core/hyperliquid/orders.js +15 -5
  113. package/dist/core/hyperliquid/orders.js.map +1 -1
  114. package/dist/core/hyperliquid/rounding.d.ts +23 -0
  115. package/dist/core/hyperliquid/rounding.d.ts.map +1 -0
  116. package/dist/core/hyperliquid/rounding.js +53 -0
  117. package/dist/core/hyperliquid/rounding.js.map +1 -0
  118. package/dist/core/risk/isolatedTopUp.d.ts +112 -0
  119. package/dist/core/risk/isolatedTopUp.d.ts.map +1 -0
  120. package/dist/core/risk/isolatedTopUp.js +209 -0
  121. package/dist/core/risk/isolatedTopUp.js.map +1 -0
  122. package/dist/core/risk/isolatedTopUpHistory.d.ts +7 -0
  123. package/dist/core/risk/isolatedTopUpHistory.d.ts.map +1 -0
  124. package/dist/core/risk/isolatedTopUpHistory.js +26 -0
  125. package/dist/core/risk/isolatedTopUpHistory.js.map +1 -0
  126. package/dist/core/risk/isolatedTopUpParse.d.ts +16 -0
  127. package/dist/core/risk/isolatedTopUpParse.d.ts.map +1 -0
  128. package/dist/core/risk/isolatedTopUpParse.js +78 -0
  129. package/dist/core/risk/isolatedTopUpParse.js.map +1 -0
  130. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts +28 -0
  131. package/dist/core/risk/runIsolatedTopUpReconcile.d.ts.map +1 -0
  132. package/dist/core/risk/runIsolatedTopUpReconcile.js +184 -0
  133. package/dist/core/risk/runIsolatedTopUpReconcile.js.map +1 -0
  134. package/dist/core/state/gcTradeState.js +1 -1
  135. package/dist/core/state/gcTradeState.js.map +1 -1
  136. package/dist/core/state/gridReconcile.d.ts +2 -0
  137. package/dist/core/state/gridReconcile.d.ts.map +1 -1
  138. package/dist/core/state/gridReconcile.js +42 -2
  139. package/dist/core/state/gridReconcile.js.map +1 -1
  140. package/dist/core/state/intentFactory.d.ts +1 -0
  141. package/dist/core/state/intentFactory.d.ts.map +1 -1
  142. package/dist/core/state/intentFactory.js +1 -0
  143. package/dist/core/state/intentFactory.js.map +1 -1
  144. package/dist/core/state/profileStore.d.ts +6 -0
  145. package/dist/core/state/profileStore.d.ts.map +1 -0
  146. package/dist/core/state/profileStore.js +26 -0
  147. package/dist/core/state/profileStore.js.map +1 -0
  148. package/dist/core/state/runReconcile.d.ts.map +1 -1
  149. package/dist/core/state/runReconcile.js +92 -30
  150. package/dist/core/state/runReconcile.js.map +1 -1
  151. package/dist/core/state/schema.d.ts +565 -124
  152. package/dist/core/state/schema.d.ts.map +1 -1
  153. package/dist/core/state/schema.js +62 -0
  154. package/dist/core/state/schema.js.map +1 -1
  155. package/dist/core/state/snapshot.d.ts +13 -0
  156. package/dist/core/state/snapshot.d.ts.map +1 -1
  157. package/dist/core/state/snapshot.js +36 -0
  158. package/dist/core/state/snapshot.js.map +1 -1
  159. package/dist/core/state/statePaths.d.ts +1 -0
  160. package/dist/core/state/statePaths.d.ts.map +1 -1
  161. package/dist/core/state/statePaths.js +4 -0
  162. package/dist/core/state/statePaths.js.map +1 -1
  163. package/dist/core/state/store.d.ts +21 -3
  164. package/dist/core/state/store.d.ts.map +1 -1
  165. package/dist/core/state/store.js +123 -14
  166. package/dist/core/state/store.js.map +1 -1
  167. package/dist/core/state/types.d.ts +13 -0
  168. package/dist/core/state/types.d.ts.map +1 -1
  169. package/dist/daemon/index.js +50 -5
  170. package/dist/daemon/index.js.map +1 -1
  171. package/dist/daemon/validateChild.d.ts +13 -0
  172. package/dist/daemon/validateChild.d.ts.map +1 -0
  173. package/dist/daemon/validateChild.js +77 -0
  174. package/dist/daemon/validateChild.js.map +1 -0
  175. package/dist/strategies/grid.d.ts +1 -0
  176. package/dist/strategies/grid.d.ts.map +1 -1
  177. package/dist/strategies/grid.js +1 -0
  178. package/dist/strategies/grid.js.map +1 -1
  179. package/package.json +3 -1
@@ -0,0 +1,198 @@
1
+ import { ConfigError } from "../core/errors.js";
2
+ import { mergeUserProfileDefaults } from "../core/state/profileStore.js";
3
+ import { assertMinPerpOrderNotional } from "../core/hyperliquid/rounding.js";
4
+ import { isAdvisorBracketOpenAction } from "./actionSchema.js";
5
+ import { findActiveProtectionBracket, hasActiveUnexpiredAmbush, resolvePositionOpenAgeSec, } from "./ambushPolicy.js";
6
+ import { buildActivePositionPlan, unrealizedPnlPct } from "./positionPlan.js";
7
+ import { resolveAdvisorMinSz, resolveAdvisorSzCap } from "./executionPolicy.js";
8
+ import { assertBracketTpslGeometry, assertBracketTouchProbability } from "./tpslPolicy.js";
9
+ import { computeAtr, computeBracketTouchProbabilities, parseCandlesFromSnapshot, } from "./touchProbability.js";
10
+ function effectiveRequireTpsl(inputs) {
11
+ if (inputs.requireTpsl !== undefined) {
12
+ return inputs.requireTpsl;
13
+ }
14
+ return mergeUserProfileDefaults(inputs.profile).requireTpsl;
15
+ }
16
+ function defaultProtectionGraceSec(profile) {
17
+ return mergeUserProfileDefaults(profile).protectionGraceSec ?? 360;
18
+ }
19
+ function defaultMinClosePnlPct(profile) {
20
+ return mergeUserProfileDefaults(profile).minClosePnlPct ?? 0.01;
21
+ }
22
+ function assertClosePositionDiscipline(action, inputs) {
23
+ const pos = inputs.positionSignedSz;
24
+ const p = mergeUserProfileDefaults(inputs.profile);
25
+ const graceSec = defaultProtectionGraceSec(inputs.profile);
26
+ const minPnlPct = defaultMinClosePnlPct(inputs.profile);
27
+ const antiRushSec = p.antiRushCloseMinSec ?? 0;
28
+ const mid = inputs.mid;
29
+ const posRow = inputs.positionEntryPx;
30
+ const plan = inputs.tradeState && inputs.nowMs !== undefined
31
+ ? buildActivePositionPlan({
32
+ state: inputs.tradeState,
33
+ coin: inputs.coin,
34
+ nowMs: inputs.nowMs,
35
+ mid,
36
+ positionSignedSz: pos,
37
+ positionEntryPx: inputs.positionEntryPx,
38
+ })
39
+ : undefined;
40
+ const openAgeSec = plan?.open_age_sec ??
41
+ (inputs.tradeState && inputs.nowMs !== undefined
42
+ ? resolvePositionOpenAgeSec({
43
+ state: inputs.tradeState,
44
+ coin: inputs.coin,
45
+ nowMs: inputs.nowMs,
46
+ })
47
+ : undefined);
48
+ if (plan?.protection_pending && openAgeSec !== undefined && openAgeSec < graceSec) {
49
+ throw new ConfigError(`advise: close_position blocked (protection grace): bracket ${plan.intent_id} phase ${plan.phase}; TP/SL will be placed by reconcile (~${Math.ceil(graceSec - openAgeSec)}s grace left). Wait — do not treat as "裸仓".`);
50
+ }
51
+ if (!plan && openAgeSec !== undefined && openAgeSec < graceSec && inputs.tradeState) {
52
+ const maybeBracket = findActiveProtectionBracket(inputs.tradeState, inputs.coin);
53
+ if (maybeBracket) {
54
+ throw new ConfigError(`advise: close_position blocked (protection grace): wait for bracket ${maybeBracket.id} to finish reconcile before closing.`);
55
+ }
56
+ }
57
+ const tpUnreachable = action.tp_unreachable === true;
58
+ const refEntry = plan ? (posRow ?? plan.entry_limit_px) : posRow;
59
+ const pnlPct = plan && mid !== null && mid > 0 && refEntry !== undefined
60
+ ? unrealizedPnlPct(pos, refEntry, mid)
61
+ : undefined;
62
+ if (plan?.protection_active &&
63
+ !plan.tp_sl_hit &&
64
+ mid !== null &&
65
+ mid > 0 &&
66
+ pnlPct !== undefined &&
67
+ Math.abs(pnlPct) < minPnlPct) {
68
+ throw new ConfigError(`advise: close_position blocked (SL active): unrealized ${(pnlPct * 100).toFixed(2)}% below min ${(minPnlPct * 100).toFixed(2)}%; SL ${plan.sl_px} defines max loss — wait for TP/SL, do not close on small noise (tp_unreachable ignored).`);
69
+ }
70
+ if (plan && mid !== null && mid > 0 && !tpUnreachable) {
71
+ if (plan.tp_sl_hit) {
72
+ return;
73
+ }
74
+ if (antiRushSec > 0 && openAgeSec !== undefined && openAgeSec < antiRushSec) {
75
+ throw new ConfigError(`advise: close_position blocked (anti-rush): open ~${Math.floor(openAgeSec)}s < ${antiRushSec}s; TP ${plan.tp_px} / SL ${plan.sl_px} at mid ${mid}.`);
76
+ }
77
+ if (plan.trend_toward_tp) {
78
+ throw new ConfigError(`advise: close_position blocked: price trending toward TP ${plan.tp_px} (progress ${plan.progress_to_tp !== null ? (plan.progress_to_tp * 100).toFixed(0) : "?"}%); use wait, or set tp_unreachable=true with thesis that TP will not be reached.`);
79
+ }
80
+ if (pnlPct !== undefined &&
81
+ Math.abs(pnlPct) < minPnlPct &&
82
+ openAgeSec !== undefined &&
83
+ (antiRushSec <= 0 || openAgeSec < antiRushSec)) {
84
+ throw new ConfigError(`advise: close_position blocked: unrealized move ${(pnlPct * 100).toFixed(2)}% below min ${(minPnlPct * 100).toFixed(2)}%; wait for TP/SL or mark tp_unreachable=true if thesis broken.`);
85
+ }
86
+ }
87
+ if (plan && tpUnreachable && plan.trend_toward_tp && plan.progress_to_tp !== null && plan.progress_to_tp > 0.25) {
88
+ throw new ConfigError(`advise: close_position blocked: tp_unreachable contradicts plan (already ${(plan.progress_to_tp * 100).toFixed(0)}% toward TP ${plan.tp_px}); revise thesis or choose wait.`);
89
+ }
90
+ }
91
+ function effectiveDeviationMax(inputs) {
92
+ return mergeUserProfileDefaults(inputs.profile).priceDeviationPctMax;
93
+ }
94
+ /**
95
+ * Hard execution guards (do not rely on the model). Throws `ConfigError` when blocked.
96
+ */
97
+ export function assertAdvisorActionPassesGuards(action, inputs) {
98
+ const maxSz = inputs.maxSz;
99
+ if (!Number.isFinite(maxSz) || maxSz <= 0) {
100
+ throw new ConfigError("advise: --max-sz must be a positive finite number.");
101
+ }
102
+ const szCap = resolveAdvisorSzCap(inputs);
103
+ const minSz = resolveAdvisorMinSz(inputs);
104
+ if (isAdvisorBracketOpenAction(action)) {
105
+ if (effectiveRequireTpsl(inputs)) {
106
+ if (!Number.isFinite(action.tp_px) || !Number.isFinite(action.sl_px)) {
107
+ throw new ConfigError(`advise: ${action.action} blocked (--require-tpsl): missing tp/sl.`);
108
+ }
109
+ }
110
+ if (action.action === "place_limit_ambush") {
111
+ if (!Number.isFinite(action.expires_in_min) || action.expires_in_min <= 0) {
112
+ throw new ConfigError("advise: place_limit_ambush requires positive expires_in_min.");
113
+ }
114
+ if (action.expires_in_min < 5 || action.expires_in_min > 120) {
115
+ throw new ConfigError("advise: place_limit_ambush expires_in_min should be between 5 and 120 minutes.");
116
+ }
117
+ }
118
+ if (minSz !== undefined && minSz > szCap) {
119
+ throw new ConfigError(`advise: profile min sz ${minSz} for ${inputs.coin} exceeds cap ${szCap} (--max-sz / profile).`);
120
+ }
121
+ if (minSz !== undefined && action.sz < minSz) {
122
+ throw new ConfigError(`advise: bracket sz ${action.sz} below profile min ${minSz} for ${inputs.coin}.`);
123
+ }
124
+ if (action.sz > szCap) {
125
+ throw new ConfigError(`advise: bracket sz ${action.sz} exceeds cap ${szCap} ( --max-sz / profile ).`);
126
+ }
127
+ const atr1h = inputs.kline1h !== undefined
128
+ ? computeAtr(parseCandlesFromSnapshot(inputs.kline1h))
129
+ : null;
130
+ if (inputs.szDecimals !== undefined) {
131
+ assertMinPerpOrderNotional({
132
+ sz: action.sz,
133
+ px: action.limit_px,
134
+ szDecimals: inputs.szDecimals,
135
+ label: `advise: ${action.action}`,
136
+ });
137
+ }
138
+ if (!inputs.skipEntryMidDeviation && inputs.mid !== null && inputs.mid > 0) {
139
+ const dev = Math.abs(action.limit_px - inputs.mid) / inputs.mid;
140
+ if (dev > effectiveDeviationMax(inputs)) {
141
+ throw new ConfigError(`advise: limit_px ${action.limit_px} deviates ${(dev * 100).toFixed(2)}% from mid ${inputs.mid}; max ${(effectiveDeviationMax(inputs) * 100).toFixed(2)}%.`);
142
+ }
143
+ }
144
+ assertBracketTpslGeometry(action, inputs.profile, inputs.mid, atr1h);
145
+ if (!inputs.skipTouchProb &&
146
+ action.action !== "place_limit_ambush" &&
147
+ inputs.kline1h !== undefined &&
148
+ inputs.mid !== null) {
149
+ const probs = computeBracketTouchProbabilities({
150
+ action,
151
+ spot: inputs.mid,
152
+ kline1h: inputs.kline1h,
153
+ analysis: action.analysis,
154
+ profile: inputs.profile,
155
+ });
156
+ assertBracketTouchProbability(action, probs, inputs.profile);
157
+ }
158
+ }
159
+ if (action.action === "cancel_all") {
160
+ const p = mergeUserProfileDefaults(inputs.profile);
161
+ if (p.forbidCancelAllWithActiveAmbush && inputs.tradeState && inputs.nowMs !== undefined) {
162
+ if (hasActiveUnexpiredAmbush(inputs.tradeState, inputs.coin, inputs.nowMs)) {
163
+ throw new ConfigError("advise: cancel_all blocked while unexpired TTL ambush entry is pending; wait for TTL or let reconcile replace stale orders.");
164
+ }
165
+ }
166
+ }
167
+ if (action.action === "close_position") {
168
+ const pos = inputs.positionSignedSz;
169
+ if (pos === undefined || !Number.isFinite(pos) || pos === 0) {
170
+ throw new ConfigError("advise: close_position blocked: no open position for this coin.");
171
+ }
172
+ if (action.method === "limit") {
173
+ if (action.limit_px === undefined || !Number.isFinite(action.limit_px)) {
174
+ throw new ConfigError("advise: close_position limit method requires limit_px.");
175
+ }
176
+ if (inputs.mid !== null && inputs.mid > 0) {
177
+ const dev = Math.abs(action.limit_px - inputs.mid) / inputs.mid;
178
+ if (dev > effectiveDeviationMax(inputs)) {
179
+ throw new ConfigError(`advise: close limit_px deviates too far from mid (${(dev * 100).toFixed(2)}% > ${(effectiveDeviationMax(inputs) * 100).toFixed(2)}%).`);
180
+ }
181
+ }
182
+ }
183
+ if (action.method === "market" && inputs.mid === null) {
184
+ throw new ConfigError("advise: close_position market needs a valid mid price.");
185
+ }
186
+ assertClosePositionDiscipline(action, inputs);
187
+ if (inputs.szDecimals !== undefined && inputs.mid !== null && inputs.mid > 0) {
188
+ const closeSz = Math.min(Math.abs(pos), szCap);
189
+ assertMinPerpOrderNotional({
190
+ sz: closeSz,
191
+ px: inputs.mid,
192
+ szDecimals: inputs.szDecimals,
193
+ label: "advise: close_position",
194
+ });
195
+ }
196
+ }
197
+ }
198
+ //# sourceMappingURL=guards.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/advisor/guards.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { JsonValue } from "../core/hyperliquid/types.js";
2
+ export type IndicatorSummary = {
3
+ atr_5m: number | null;
4
+ atr_1h: number | null;
5
+ atr_1d: number | null;
6
+ /** ATR as % of current close (scale-invariant volatility). */
7
+ atr_pct_5m: string;
8
+ atr_pct_1h: string;
9
+ atr_pct_1d: string;
10
+ ema_5m: string;
11
+ ema_1h: string;
12
+ ema_1d: string;
13
+ macd_5m: string;
14
+ macd_1h: string;
15
+ macd_1d: string;
16
+ rsi_5m: number | null;
17
+ rsi_1h: number | null;
18
+ rsi_1d: number | null;
19
+ bollinger_5m: string;
20
+ bollinger_1h: string;
21
+ bollinger_1d: string;
22
+ /** Std of log-returns (per-candle), with per-period and annualised pct. */
23
+ log_return_vol_5m: string;
24
+ log_return_vol_1h: string;
25
+ log_return_vol_1d: string;
26
+ /** Price distance from SMA20 in standard deviations. */
27
+ zscore_5m: string;
28
+ zscore_1h: string;
29
+ zscore_1d: string;
30
+ volume_5m: string;
31
+ volume_1h: string;
32
+ volume_1d: string;
33
+ };
34
+ /** Compact candle for v2 prompt — h/l/o/c/v to support pattern + volume-price analysis. */
35
+ export type CompactCandle = {
36
+ h: number;
37
+ l: number;
38
+ o: number;
39
+ c: number;
40
+ v: number;
41
+ };
42
+ export declare function computeIndicatorSummary(raw5m: JsonValue, raw1h: JsonValue, raw1d: JsonValue): IndicatorSummary;
43
+ /** Build compact h/l/c candles for wave/Chan theory analysis in v2 mode. */
44
+ export declare function buildCompactKlines(raw: JsonValue, maxBars: number): CompactCandle[];
45
+ //# sourceMappingURL=indicatorCompute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorCompute.d.ts","sourceRoot":"","sources":["../../src/advisor/indicatorCompute.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAO9D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAsOtF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,gBAAgB,CA+ClB;AAYD,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,GACd,aAAa,EAAE,CAIjB"}
@@ -0,0 +1,259 @@
1
+ import { EMA, MACD, RSI, BollingerBands, ATR } from "trading-signals";
2
+ function parseCandlesWithVolume(raw) {
3
+ if (!Array.isArray(raw))
4
+ return [];
5
+ const out = [];
6
+ for (const row of raw) {
7
+ if (typeof row !== "object" || row === null)
8
+ continue;
9
+ const r = row;
10
+ const h = Number(r.h);
11
+ const l = Number(r.l);
12
+ const o = Number(r.o);
13
+ const c = Number(r.c);
14
+ const v = Number(r.v);
15
+ if (Number.isFinite(h) &&
16
+ Number.isFinite(l) &&
17
+ Number.isFinite(o) &&
18
+ Number.isFinite(c) &&
19
+ h >= l) {
20
+ out.push({ h, l, o, c, v: Number.isFinite(v) && v >= 0 ? v : 0 });
21
+ }
22
+ }
23
+ return out;
24
+ }
25
+ function emaLabel(candles, period) {
26
+ if (candles.length < period)
27
+ return null;
28
+ const ema = new EMA(period);
29
+ for (const c of candles)
30
+ ema.add(c.c);
31
+ return ema.isStable ? ema.getResultOrThrow().toFixed(4) : null;
32
+ }
33
+ function describeEmaAlignment(candles) {
34
+ // Pick the largest available period set based on candle count.
35
+ // EMA needs `period` candles to stabilise; pick the max set that fits.
36
+ const has60 = candles.length >= 61;
37
+ const has20 = candles.length >= 21;
38
+ const has5 = candles.length >= 6;
39
+ if (!has5)
40
+ return "数据不足无法计算EMA排列(需≥6根)";
41
+ const e5 = emaLabel(candles, 5);
42
+ const e20 = has20 ? emaLabel(candles, 20) : null;
43
+ const e60 = has60 ? emaLabel(candles, 60) : null;
44
+ const parts = [];
45
+ parts.push(`EMA5(${e5})`);
46
+ if (e20)
47
+ parts.push(`EMA20(${e20})`);
48
+ if (e60)
49
+ parts.push(`EMA60(${e60})`);
50
+ const v5 = Number(e5);
51
+ const v20 = e20 ? Number(e20) : null;
52
+ const v60 = e60 ? Number(e60) : null;
53
+ let alignment;
54
+ if (v60 !== null && v20 !== null) {
55
+ // Full three-line alignment
56
+ alignment =
57
+ v5 > v20 && v20 > v60 ? "多头排列"
58
+ : v5 < v20 && v20 < v60 ? "空头排列"
59
+ : v5 > v20 ? "短期偏多(EMA5>EMA20),长期EMA60待修复"
60
+ : v5 < v20 ? "短期偏空(EMA5<EMA20),长期EMA60支撑中"
61
+ : "均线缠绕,方向不明";
62
+ }
63
+ else if (v20 !== null) {
64
+ // Two-line alignment (EMA5 vs EMA20)
65
+ alignment =
66
+ v5 > v20 ? "短期偏多(EMA5>EMA20)"
67
+ : v5 < v20 ? "短期偏空(EMA5<EMA20)"
68
+ : "短期均线缠绕,方向不明";
69
+ }
70
+ else {
71
+ alignment = `仅EMA5可用(${e5}),数据不足以判断排列`;
72
+ }
73
+ const note = !has60 ? ` (仅${candles.length}根K线,EMA60不可用)`
74
+ : !has20 ? ` (仅${candles.length}根K线,EMA20/60不可用)`
75
+ : "";
76
+ return parts.join(" ") + ` — ${alignment}${note}`;
77
+ }
78
+ function describeMacd(candles) {
79
+ const shortEma = new EMA(12);
80
+ const longEma = new EMA(26);
81
+ const signalEma = new EMA(9);
82
+ const macd = new MACD(shortEma, longEma, signalEma);
83
+ for (const c of candles)
84
+ macd.add(c.c);
85
+ if (!macd.isStable)
86
+ return "数据不足无法计算MACD";
87
+ const r = macd.getResultOrThrow();
88
+ const dif = r.macd.toFixed(4);
89
+ const dea = r.signal.toFixed(4);
90
+ const hist = r.histogram.toFixed(4);
91
+ const histNum = Number(hist);
92
+ const difDeaRel = r.macd > r.signal ? `DIF(${dif})>DEA(${dea})` : `DIF(${dif})<DEA(${dea})`;
93
+ const histDir = histNum > 0.0001
94
+ ? "绿柱"
95
+ : histNum < -0.0001
96
+ ? "红柱"
97
+ : "柱近零";
98
+ const direction = histNum > 0 ? (r.macd > r.signal ? "多头动能增强" : "多头动能减弱") : "";
99
+ const parts = [difDeaRel, `柱${hist}`, histDir];
100
+ if (direction)
101
+ parts.push(direction);
102
+ // Simple divergence check: compare latest close direction vs MACD direction
103
+ // (We don't compare previous MACD values here — that's for the LLM to interpret)
104
+ return parts.join(",");
105
+ }
106
+ function computeRsi(candles, period = 14) {
107
+ if (candles.length < period + 1)
108
+ return null;
109
+ const rsi = new RSI(period);
110
+ for (const c of candles)
111
+ rsi.add(c.c);
112
+ return rsi.isStable ? Number(rsi.getResultOrThrow().toFixed(1)) : null;
113
+ }
114
+ function describeBollinger(candles) {
115
+ const bb = new BollingerBands(20, 2);
116
+ for (const c of candles)
117
+ bb.add(c.c);
118
+ if (!bb.isStable)
119
+ return "数据不足无法计算布林带";
120
+ const last = candles[candles.length - 1];
121
+ const { upper, middle, lower } = bb.getResultOrThrow();
122
+ const bandwidth = (upper - lower) / middle;
123
+ const posInBand = (last.c - lower) / (upper - lower);
124
+ const posLabel = posInBand > 0.9 ? "触及上轨" : posInBand > 0.65 ? "上轨区域" : posInBand < 0.1 ? "触及下轨" : posInBand < 0.35 ? "下轨区域" : "中轨附近";
125
+ const bwPct = (bandwidth * 100).toFixed(1);
126
+ const bwLabel = bandwidth > 0.08 ? "带宽较宽(高波动)" : bandwidth < 0.03 ? "带宽收窄(收缩待变)" : "带宽适中";
127
+ return `上轨${upper.toFixed(4)} 中轨${middle.toFixed(4)} 下轨${lower.toFixed(4)} — 价格在${posLabel},${bwLabel}(${bwPct}%)`;
128
+ }
129
+ function describeVolume(candles) {
130
+ if (candles.length < 6)
131
+ return "数据不足";
132
+ const vols = candles.map((c) => c.v);
133
+ const recent = vols.slice(-3);
134
+ const baseline = vols.slice(0, -3);
135
+ if (baseline.length === 0)
136
+ return "数据不足";
137
+ const avgBaseline = baseline.reduce((s, v) => s + v, 0) / baseline.length;
138
+ if (avgBaseline <= 0)
139
+ return "无成交量数据";
140
+ const avgRecent = recent.reduce((s, v) => s + v, 0) / recent.length;
141
+ const ratio = avgRecent / avgBaseline;
142
+ const label = ratio > 2.0
143
+ ? "放量"
144
+ : ratio > 1.2
145
+ ? "温和放量"
146
+ : ratio < 0.5
147
+ ? "极度缩量"
148
+ : ratio < 0.8
149
+ ? "缩量"
150
+ : "量平";
151
+ return `${ratio.toFixed(1)}x均量(${label})`;
152
+ }
153
+ // ---------------------------------------------------------------------------
154
+ // Log-return-based indicators
155
+ // ---------------------------------------------------------------------------
156
+ function logReturnVol(candles, window = 20) {
157
+ if (candles.length < window + 1)
158
+ return null;
159
+ const recent = candles.slice(-(window + 1));
160
+ const lr = [];
161
+ for (let i = 1; i < recent.length; i++) {
162
+ lr.push(Math.log(recent[i].c / recent[i - 1].c));
163
+ }
164
+ const mean = lr.reduce((s, r) => s + r, 0) / lr.length;
165
+ const variance = lr.reduce((s, r) => s + (r - mean) ** 2, 0) / (lr.length - 1 || 1);
166
+ return Math.sqrt(variance);
167
+ }
168
+ function describeLogReturnVol(candles, label, periodsPerYear) {
169
+ const perPeriod = logReturnVol(candles);
170
+ if (perPeriod === null)
171
+ return "数据不足无法计算波动率";
172
+ const periodPct = (perPeriod * 100).toFixed(2);
173
+ const annual = (perPeriod * Math.sqrt(periodsPerYear)) * 100;
174
+ const annualStr = Number.isFinite(annual) ? annual.toFixed(1) : "?";
175
+ const level = perPeriod > 0.03 ? "极高波动" : perPeriod > 0.015 ? "高波动" : perPeriod > 0.005 ? "中等波动" : "低波动";
176
+ return `${label}对数收益率 σ=${periodPct}%,年化≈${annualStr}% — ${level}`;
177
+ }
178
+ function computeZScore(candles, period = 20) {
179
+ if (candles.length < period)
180
+ return null;
181
+ const recent = candles.slice(-period);
182
+ const closes = recent.map((c) => c.c);
183
+ const mean = closes.reduce((s, v) => s + v, 0) / closes.length;
184
+ const variance = closes.reduce((s, v) => s + (v - mean) ** 2, 0) / (closes.length - 1 || 1);
185
+ const std = Math.sqrt(variance);
186
+ if (std === 0)
187
+ return 0;
188
+ return (closes[closes.length - 1] - mean) / std;
189
+ }
190
+ function describeZScore(candles, label) {
191
+ const z = computeZScore(candles);
192
+ if (z === null)
193
+ return "数据不足无法计算Z-Score";
194
+ const absZ = Math.abs(z);
195
+ const extreme = absZ > 2.5 ? "极端" : absZ > 1.5 ? "显著偏离" : absZ > 0.75 ? "略微偏离" : "在均值附近";
196
+ const dir = z > 0 ? "偏高" : z < 0 ? "偏低" : "等于均值";
197
+ return `${label} Z-Score(SMA20) ${z.toFixed(2)}σ — 价格${dir},${extreme}`;
198
+ }
199
+ // ---------------------------------------------------------------------------
200
+ // Public API
201
+ // ---------------------------------------------------------------------------
202
+ export function computeIndicatorSummary(raw5m, raw1h, raw1d) {
203
+ const c5m = parseCandlesWithVolume(raw5m);
204
+ const c1h = parseCandlesWithVolume(raw1h);
205
+ const c1d = parseCandlesWithVolume(raw1d);
206
+ const atr5m = computeAtrFromCandles(c5m);
207
+ const atr1h = computeAtrFromCandles(c1h);
208
+ const atr1d = computeAtrFromCandles(c1d);
209
+ const last5m = c5m.length > 0 ? c5m[c5m.length - 1].c : null;
210
+ const last1h = c1h.length > 0 ? c1h[c1h.length - 1].c : null;
211
+ const last1d = c1d.length > 0 ? c1d[c1d.length - 1].c : null;
212
+ const atrPct = (atr, close) => atr !== null && close !== null && close > 0
213
+ ? `ATR(${atr.toFixed(4)}) 占价格 ${((atr / close) * 100).toFixed(2)}%`
214
+ : "数据不足";
215
+ return {
216
+ atr_5m: atr5m,
217
+ atr_1h: atr1h,
218
+ atr_1d: atr1d,
219
+ atr_pct_5m: atrPct(atr5m, last5m),
220
+ atr_pct_1h: atrPct(atr1h, last1h),
221
+ atr_pct_1d: atrPct(atr1d, last1d),
222
+ ema_5m: describeEmaAlignment(c5m),
223
+ ema_1h: describeEmaAlignment(c1h),
224
+ ema_1d: describeEmaAlignment(c1d),
225
+ macd_5m: describeMacd(c5m),
226
+ macd_1h: describeMacd(c1h),
227
+ macd_1d: describeMacd(c1d),
228
+ rsi_5m: computeRsi(c5m),
229
+ rsi_1h: computeRsi(c1h),
230
+ rsi_1d: computeRsi(c1d),
231
+ bollinger_5m: describeBollinger(c5m),
232
+ bollinger_1h: describeBollinger(c1h),
233
+ bollinger_1d: describeBollinger(c1d),
234
+ log_return_vol_5m: describeLogReturnVol(c5m, "5m", 12 * 24 * 365),
235
+ log_return_vol_1h: describeLogReturnVol(c1h, "1h", 24 * 365),
236
+ log_return_vol_1d: describeLogReturnVol(c1d, "1d", 365),
237
+ zscore_5m: describeZScore(c5m, "5m"),
238
+ zscore_1h: describeZScore(c1h, "1h"),
239
+ zscore_1d: describeZScore(c1d, "1d"),
240
+ volume_5m: describeVolume(c5m),
241
+ volume_1h: describeVolume(c1h),
242
+ volume_1d: describeVolume(c1d),
243
+ };
244
+ }
245
+ function computeAtrFromCandles(candles, period = 14) {
246
+ if (candles.length < period + 1)
247
+ return null;
248
+ const atr = new ATR(period);
249
+ for (const c of candles)
250
+ atr.add({ high: c.h, low: c.l, close: c.c });
251
+ return atr.isStable ? Number(atr.getResultOrThrow().toFixed(4)) : null;
252
+ }
253
+ /** Build compact h/l/c candles for wave/Chan theory analysis in v2 mode. */
254
+ export function buildCompactKlines(raw, maxBars) {
255
+ const parsed = parseCandlesWithVolume(raw);
256
+ const trimmed = parsed.length <= maxBars ? parsed : parsed.slice(-maxBars);
257
+ return trimmed.map((c) => ({ h: c.h, l: c.l, o: c.o, c: c.c, v: c.v }));
258
+ }
259
+ //# sourceMappingURL=indicatorCompute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorCompute.js","sourceRoot":"","sources":["../../src/advisor/indicatorCompute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { BracketIntentRecord, TradeStateFile } from "../core/state/schema.js";
2
+ export type ActivePositionPlan = {
3
+ intent_id: string;
4
+ phase: string;
5
+ side: "buy" | "sell";
6
+ entry_limit_px: number;
7
+ tp_px: number;
8
+ sl_px: number;
9
+ /** Entry filled but reconcile has not placed TP/SL on book yet. */
10
+ protection_pending: boolean;
11
+ protection_active: boolean;
12
+ open_age_sec: number | null;
13
+ /** Mid is between entry and TP on the profitable side (thesis still working). */
14
+ trend_toward_tp: boolean;
15
+ tp_sl_hit: boolean;
16
+ /** Fraction of entry→TP distance covered (0 at entry, 1 at TP). */
17
+ progress_to_tp: number | null;
18
+ /** Trading strategy: scalp or ambush. */
19
+ strategy?: "scalp" | "ambush";
20
+ };
21
+ export declare function isTrendTowardTp(side: "buy" | "sell", mid: number, entryPx: number, tp: number, sl: number): boolean;
22
+ export declare function progressTowardTp(side: "buy" | "sell", mid: number, entryPx: number, tp: number): number | null;
23
+ export declare function findBestBracketPlanForPosition(state: TradeStateFile, coin: string, positionSignedSz: number | undefined): BracketIntentRecord | undefined;
24
+ export declare function buildActivePositionPlan(params: {
25
+ state: TradeStateFile;
26
+ coin: string;
27
+ nowMs: number;
28
+ mid: number | null;
29
+ positionSignedSz: number | undefined;
30
+ positionEntryPx: number | undefined;
31
+ }): ActivePositionPlan | undefined;
32
+ export declare function unrealizedPnlPct(positionSignedSz: number, entryPx: number, mid: number): number;
33
+ //# sourceMappingURL=positionPlan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positionPlan.d.ts","sourceRoot":"","sources":["../../src/advisor/positionPlan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAInF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iFAAiF;IACjF,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,mEAAmE;IACnE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC/B,CAAC;AAYF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,KAAK,GAAG,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,OAAO,CAWT;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,KAAK,GAAG,MAAM,EACpB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,cAAc,EACrB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,GAAG,SAAS,GACnC,mBAAmB,GAAG,SAAS,CA4CjC;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC,GAAG,kBAAkB,GAAG,SAAS,CA6DjC;AAED,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,MAAM,CAQR"}