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
@@ -0,0 +1,273 @@
1
+ import { ConfigError } from "../core/errors.js";
2
+ import { roundHyperliquidPerpPrice } from "../core/hyperliquid/rounding.js";
3
+ import { mergeUserProfileDefaults } from "../core/state/profileStore.js";
4
+ import { updateTradeStateFileAtomic } from "../core/state/store.js";
5
+ import { isAdvisorBracketOpenAction } from "./actionSchema.js";
6
+ import { applyAntiSweepSlOffset, computeAtr, computeBracketTouchProbabilities, formatTouchProbNote, parseCandlesFromSnapshot, resolveSlAntiSweepAtrFactor, } from "./touchProbability.js";
7
+ const AUTO_DEFAULT_MIN_CONFIDENCE = 0.55;
8
+ /** Shared size cap for bracket open and partial close. */
9
+ export function resolveAdvisorSzCap(inputs) {
10
+ const maxSz = inputs.maxSz;
11
+ if (!Number.isFinite(maxSz) || maxSz <= 0) {
12
+ throw new ConfigError("advise: --max-sz must be a positive finite number.");
13
+ }
14
+ const p = mergeUserProfileDefaults(inputs.profile);
15
+ const by = p.maxSzByCoin?.[inputs.coin];
16
+ const coinCap = typeof by === "number" && Number.isFinite(by) ? by : p.defaultMaxSz;
17
+ return coinCap !== undefined ? Math.min(maxSz, coinCap) : maxSz;
18
+ }
19
+ /** Profile minimum sz for bracket open (`minSzByCoin` overrides `defaultMinSz`). */
20
+ export function resolveAdvisorMinSz(inputs) {
21
+ const p = mergeUserProfileDefaults(inputs.profile);
22
+ const by = p.minSzByCoin?.[inputs.coin];
23
+ if (typeof by === "number" && Number.isFinite(by) && by > 0) {
24
+ return by;
25
+ }
26
+ if (p.defaultMinSz !== undefined && Number.isFinite(p.defaultMinSz) && p.defaultMinSz > 0) {
27
+ return p.defaultMinSz;
28
+ }
29
+ return undefined;
30
+ }
31
+ export function resolveAdvisorExecutionPolicy(profile, cli) {
32
+ const p = mergeUserProfileDefaults(profile);
33
+ let minConfidence = cli.minConfidence ?? p.minConfidenceToExecute ?? 0;
34
+ if (cli.auto &&
35
+ cli.minConfidence === undefined &&
36
+ p.minConfidenceToExecute === undefined) {
37
+ minConfidence = AUTO_DEFAULT_MIN_CONFIDENCE;
38
+ }
39
+ return {
40
+ minConfidence,
41
+ limitJitterPct: cli.limitJitterPct ?? p.limitPriceJitterPct ?? 0,
42
+ executeCooldownSec: cli.executeCooldownSec ?? p.executeCooldownSec ?? 0,
43
+ bracketSlEntryShift: cli.slEntryShift ?? p.bracketSlEntryShift ?? 0,
44
+ ambushReplaceDeviationPct: cli.ambushReplaceDeviationPct ??
45
+ p.ambushReplaceDeviationPct ??
46
+ p.priceDeviationPctMax,
47
+ antiRushCloseMinSec: cli.antiRushCloseMinSec ?? p.antiRushCloseMinSec ?? 0,
48
+ defaultAmbushExpiresMin: cli.defaultAmbushExpiresMin ?? p.defaultAmbushExpiresMin ?? 20,
49
+ };
50
+ }
51
+ export function assertAdvisorConfidenceGate(action, minConfidence) {
52
+ if (minConfidence <= 0 || action.action === "cancel_all") {
53
+ return;
54
+ }
55
+ if (action.confidence < minConfidence) {
56
+ throw new ConfigError(`advise: confidence ${(action.confidence * 100).toFixed(0)}% below min ${(minConfidence * 100).toFixed(0)}%.`);
57
+ }
58
+ }
59
+ export function adviseExecuteCooldownKey(coin, action) {
60
+ if (action.action === "wait") {
61
+ return null;
62
+ }
63
+ if (action.action === "open_with_bracket") {
64
+ return `${coin}:${action.action}:${action.side}`;
65
+ }
66
+ if (action.action === "place_limit_ambush") {
67
+ return `${coin}:${action.action}:${action.side}`;
68
+ }
69
+ return `${coin}:${action.action}`;
70
+ }
71
+ export function assertAdviseExecuteCooldown(params) {
72
+ const { history, coin, action, cooldownSec, nowMs } = params;
73
+ if (cooldownSec <= 0) {
74
+ return;
75
+ }
76
+ const key = adviseExecuteCooldownKey(coin, action);
77
+ if (!key) {
78
+ return;
79
+ }
80
+ const prev = history?.[key];
81
+ if (!prev) {
82
+ return;
83
+ }
84
+ const elapsedSec = (nowMs - prev.atMs) / 1000;
85
+ if (elapsedSec < cooldownSec) {
86
+ const remain = Math.ceil(cooldownSec - elapsedSec);
87
+ const sideHint = action.action === "open_with_bracket" || action.action === "place_limit_ambush"
88
+ ? ` (${action.side})`
89
+ : "";
90
+ throw new ConfigError(`advise: execute cooldown: ${action.action}${sideHint} on ${coin} ran ${Math.floor(elapsedSec)}s ago; wait ${remain}s more.`);
91
+ }
92
+ }
93
+ export async function recordAdviseExecuteCooldown(params) {
94
+ const key = adviseExecuteCooldownKey(params.coin, params.action);
95
+ if (!key) {
96
+ return;
97
+ }
98
+ await updateTradeStateFileAtomic(params.statePath, (cur) => {
99
+ const history = {
100
+ ...(cur.adviseExecuteHistory ?? {}),
101
+ [key]: { action: params.action.action, atMs: params.nowMs },
102
+ };
103
+ return {
104
+ ...cur,
105
+ updatedAtMs: params.nowMs,
106
+ adviseExecuteHistory: history,
107
+ };
108
+ }, params.nowMs);
109
+ }
110
+ /**
111
+ * Round advisor limit/trigger prices for exchange submission.
112
+ * When `szDecimals` is set, uses Hyperliquid per-asset rules (5 sig figs, 6 - szDecimals decimals).
113
+ */
114
+ export function roundAdvisorLimitPx(px, szDecimals) {
115
+ if (!Number.isFinite(px) || px <= 0) {
116
+ return px;
117
+ }
118
+ if (szDecimals !== undefined) {
119
+ return roundHyperliquidPerpPrice(px, szDecimals);
120
+ }
121
+ if (px >= 10_000) {
122
+ return Math.round(px * 10) / 10;
123
+ }
124
+ if (px >= 1_000) {
125
+ return Math.round(px * 100) / 100;
126
+ }
127
+ if (px >= 10) {
128
+ return Math.round(px * 1_000) / 1_000;
129
+ }
130
+ return Math.round(px * 1_000_000) / 1_000_000;
131
+ }
132
+ export function jitterLimitPrice(px, jitterPct, rng = Math.random, szDecimals) {
133
+ if (!Number.isFinite(jitterPct) || jitterPct <= 0) {
134
+ return px;
135
+ }
136
+ const sign = rng() < 0.5 ? -1 : 1;
137
+ const magnitude = jitterPct * (0.5 + rng() * 0.5);
138
+ return roundAdvisorLimitPx(px * (1 + sign * magnitude), szDecimals);
139
+ }
140
+ export function applyLimitJitterWithinBand(px, mid, jitterPct, maxDevPct, rng = Math.random, szDecimals) {
141
+ if (!Number.isFinite(jitterPct) || jitterPct <= 0) {
142
+ return { px, applied: false };
143
+ }
144
+ if (mid === null || mid <= 0) {
145
+ const jittered = jitterLimitPrice(px, jitterPct, rng, szDecimals);
146
+ return { px: jittered, applied: jittered !== px };
147
+ }
148
+ for (let attempt = 0; attempt < 6; attempt++) {
149
+ const candidate = jitterLimitPrice(px, jitterPct, rng, szDecimals);
150
+ const dev = Math.abs(candidate - mid) / mid;
151
+ if (dev <= maxDevPct) {
152
+ return { px: candidate, applied: candidate !== px };
153
+ }
154
+ }
155
+ return { px, applied: false };
156
+ }
157
+ /**
158
+ * Shift bracket entry toward the model stop: delta = factor × (sl_px − limit_px).
159
+ * factor=1 → entry at SL; TP/SL and optional protection_limit_px move by the same delta.
160
+ */
161
+ export function applyBracketSlEntryShift(action, factor, szDecimals) {
162
+ if (!Number.isFinite(factor) || factor <= 0 || !isAdvisorBracketOpenAction(action)) {
163
+ return { action, notes: [] };
164
+ }
165
+ const f = Math.min(1, Math.max(0, factor));
166
+ if (!Number.isFinite(action.tp_px) || !Number.isFinite(action.sl_px)) {
167
+ return { action, notes: [] };
168
+ }
169
+ const fullDelta = action.sl_px - action.limit_px;
170
+ if (fullDelta === 0) {
171
+ return { action, notes: [] };
172
+ }
173
+ const delta = fullDelta * f;
174
+ const newLimit = roundAdvisorLimitPx(action.limit_px + delta, szDecimals);
175
+ const newTp = roundAdvisorLimitPx(action.tp_px + delta, szDecimals);
176
+ const newSl = roundAdvisorLimitPx(action.sl_px + delta, szDecimals);
177
+ let protection_limit_px = action.protection_limit_px;
178
+ if (protection_limit_px !== undefined) {
179
+ protection_limit_px = roundAdvisorLimitPx(protection_limit_px + delta, szDecimals);
180
+ }
181
+ if (action.side === "buy") {
182
+ if (!(newSl < newLimit && newLimit < newTp)) {
183
+ throw new ConfigError(`advise: sl-entry-shift produced invalid buy bracket (sl ${newSl}, entry ${newLimit}, tp ${newTp}).`);
184
+ }
185
+ }
186
+ else if (!(newTp < newLimit && newLimit < newSl)) {
187
+ throw new ConfigError(`advise: sl-entry-shift produced invalid sell bracket (tp ${newTp}, entry ${newLimit}, sl ${newSl}).`);
188
+ }
189
+ const notes = [
190
+ `sl-entry-shift ×${f}: limit ${action.limit_px}→${newLimit}, tp ${action.tp_px}→${newTp}, sl ${action.sl_px}→${newSl}`,
191
+ ];
192
+ return {
193
+ action: {
194
+ ...action,
195
+ limit_px: newLimit,
196
+ tp_px: newTp,
197
+ sl_px: newSl,
198
+ protection_limit_px,
199
+ },
200
+ notes,
201
+ };
202
+ }
203
+ export function prepareAdvisorActionForExecution(action, options) {
204
+ const notes = [];
205
+ let working = action;
206
+ if (isAdvisorBracketOpenAction(working) && options.kline1h !== undefined) {
207
+ const atr1h = computeAtr(parseCandlesFromSnapshot(options.kline1h));
208
+ const antiSweep = applyAntiSweepSlOffset(working, atr1h, resolveSlAntiSweepAtrFactor(options.profile), options.szDecimals);
209
+ notes.push(...antiSweep.notes);
210
+ working = antiSweep.action;
211
+ }
212
+ const shifted = applyBracketSlEntryShift(working, options.slEntryShift, options.szDecimals);
213
+ notes.push(...shifted.notes);
214
+ const jittered = applyAdvisorExecutionJitter(shifted.action, options.mid, options.limitJitterPct, options.maxDevPct, options.rng, options.szDecimals);
215
+ notes.push(...jittered.notes);
216
+ let touchProbs;
217
+ if (isAdvisorBracketOpenAction(jittered.action) && options.kline1h !== undefined) {
218
+ touchProbs = computeBracketTouchProbabilities({
219
+ action: jittered.action,
220
+ spot: options.mid,
221
+ kline1h: options.kline1h,
222
+ analysis: jittered.action.analysis,
223
+ profile: options.profile,
224
+ });
225
+ notes.push(formatTouchProbNote(touchProbs));
226
+ }
227
+ return { action: jittered.action, notes, touchProbs };
228
+ }
229
+ export function applyAdvisorExecutionJitter(action, mid, jitterPct, maxDevPct, rng = Math.random, szDecimals) {
230
+ if (jitterPct <= 0 || action.action === "wait" || action.action === "cancel_all") {
231
+ return { action, notes: [] };
232
+ }
233
+ const notes = [];
234
+ if (isAdvisorBracketOpenAction(action)) {
235
+ const lim = applyLimitJitterWithinBand(action.limit_px, mid, jitterPct, maxDevPct, rng, szDecimals);
236
+ if (lim.applied) {
237
+ notes.push(`limit_px ${action.limit_px} → ${lim.px}`);
238
+ }
239
+ let protection_limit_px = action.protection_limit_px;
240
+ if (protection_limit_px !== undefined) {
241
+ const prot = applyLimitJitterWithinBand(protection_limit_px, mid, jitterPct, maxDevPct, rng, szDecimals);
242
+ protection_limit_px = prot.px;
243
+ if (prot.applied) {
244
+ notes.push(`protection_limit_px ${action.protection_limit_px} → ${prot.px}`);
245
+ }
246
+ }
247
+ return {
248
+ action: { ...action, limit_px: lim.px, protection_limit_px },
249
+ notes,
250
+ };
251
+ }
252
+ if (action.action === "close_position" && action.method === "limit" && action.limit_px !== undefined) {
253
+ const lim = applyLimitJitterWithinBand(action.limit_px, mid, jitterPct, maxDevPct, rng, szDecimals);
254
+ if (lim.applied) {
255
+ notes.push(`close limit_px ${action.limit_px} → ${lim.px}`);
256
+ }
257
+ return { action: { ...action, limit_px: lim.px }, notes };
258
+ }
259
+ return { action, notes };
260
+ }
261
+ export function resolveCloseSz(positionSignedSz, szCap) {
262
+ const pos = positionSignedSz;
263
+ if (pos === undefined || !Number.isFinite(pos) || pos === 0) {
264
+ throw new ConfigError("close_position: no open position for this coin.");
265
+ }
266
+ const positionAbs = Math.abs(pos);
267
+ const sz = Math.min(positionAbs, szCap);
268
+ return { sz, capped: positionAbs > szCap, positionAbs };
269
+ }
270
+ export function readAdviseExecuteHistory(state) {
271
+ return state?.adviseExecuteHistory;
272
+ }
273
+ //# sourceMappingURL=executionPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executionPolicy.js","sourceRoot":"","sources":["../../src/advisor/executionPolicy.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { UserProfile } from "../core/state/schema.js";
2
+ import type { JsonValue } from "../core/hyperliquid/types.js";
2
3
  import type { AdvisorAction } from "./actionSchema.js";
3
4
  export type AdvisorGuardInputs = {
4
5
  coin: string;
@@ -9,6 +10,19 @@ export type AdvisorGuardInputs = {
9
10
  /** Signed position for `coin` (positive = long). */
10
11
  positionSignedSz: number | undefined;
11
12
  profile: UserProfile | undefined;
13
+ /** Per-asset size decimals from HL meta (enables min $10 notional check). */
14
+ szDecimals?: number;
15
+ /** When true, skip limit_px vs mid deviation (e.g. sl-entry-shift places entry at former SL). */
16
+ skipEntryMidDeviation?: boolean;
17
+ /** When true, skip SL touch/sweep probability guard (first pass before anti-sweep / shift). */
18
+ skipTouchProb?: boolean;
19
+ /** 1h candles for ATR-based touch probability (from market snapshot). */
20
+ kline1h?: JsonValue;
21
+ /** Trade state for ambush / anti-rush guards (optional when --no-state). */
22
+ tradeState?: import("../core/state/schema.js").TradeStateFile;
23
+ nowMs?: number;
24
+ /** Exchange-reported entry px for `coin` (from clearinghouse snapshot). */
25
+ positionEntryPx?: number;
12
26
  };
13
27
  /**
14
28
  * Hard execution guards (do not rely on the model). Throws `ConfigError` when blocked.
@@ -1 +1 @@
1
- {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/advisor/guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC,CAAC;AAsBF;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,GACzB,IAAI,CA0DN"}
1
+ {"version":3,"file":"guards.d.ts","sourceRoot":"","sources":["../../src/advisor/guards.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAI3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAgBvD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,oDAAoD;IACpD,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,+FAA+F;IAC/F,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,yEAAyE;IACzE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,OAAO,yBAAyB,EAAE,cAAc,CAAC;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AA8HF;;GAEG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,kBAAkB,GACzB,IAAI,CA2HN"}
@@ -1,21 +1,95 @@
1
1
  import { ConfigError } from "../core/errors.js";
2
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";
3
10
  function effectiveRequireTpsl(inputs) {
4
11
  if (inputs.requireTpsl !== undefined) {
5
12
  return inputs.requireTpsl;
6
13
  }
7
14
  return mergeUserProfileDefaults(inputs.profile).requireTpsl;
8
15
  }
9
- function effectiveDeviationMax(inputs) {
10
- return mergeUserProfileDefaults(inputs.profile).priceDeviationPctMax;
16
+ function defaultProtectionGraceSec(profile) {
17
+ return mergeUserProfileDefaults(profile).protectionGraceSec ?? 360;
11
18
  }
12
- function perCoinMaxSz(inputs) {
19
+ function defaultMinClosePnlPct(profile) {
20
+ return mergeUserProfileDefaults(profile).minClosePnlPct ?? 0.01;
21
+ }
22
+ function assertClosePositionDiscipline(action, inputs) {
23
+ const pos = inputs.positionSignedSz;
13
24
  const p = mergeUserProfileDefaults(inputs.profile);
14
- const by = p.maxSzByCoin?.[inputs.coin];
15
- if (typeof by === "number" && Number.isFinite(by)) {
16
- return by;
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.`);
17
89
  }
18
- return p.defaultMaxSz;
90
+ }
91
+ function effectiveDeviationMax(inputs) {
92
+ return mergeUserProfileDefaults(inputs.profile).priceDeviationPctMax;
19
93
  }
20
94
  /**
21
95
  * Hard execution guards (do not rely on the model). Throws `ConfigError` when blocked.
@@ -25,33 +99,76 @@ export function assertAdvisorActionPassesGuards(action, inputs) {
25
99
  if (!Number.isFinite(maxSz) || maxSz <= 0) {
26
100
  throw new ConfigError("advise: --max-sz must be a positive finite number.");
27
101
  }
28
- const coinCap = perCoinMaxSz(inputs);
29
- const szCap = coinCap !== undefined ? Math.min(maxSz, coinCap) : maxSz;
30
- if (action.action === "open_with_bracket") {
102
+ const szCap = resolveAdvisorSzCap(inputs);
103
+ const minSz = resolveAdvisorMinSz(inputs);
104
+ if (isAdvisorBracketOpenAction(action)) {
31
105
  if (effectiveRequireTpsl(inputs)) {
32
106
  if (!Number.isFinite(action.tp_px) || !Number.isFinite(action.sl_px)) {
33
- throw new ConfigError("advise: bracket action blocked (--require-tpsl): missing tp/sl.");
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.");
34
116
  }
35
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
+ }
36
124
  if (action.sz > szCap) {
37
125
  throw new ConfigError(`advise: bracket sz ${action.sz} exceeds cap ${szCap} ( --max-sz / profile ).`);
38
126
  }
39
- if (inputs.mid !== null && inputs.mid > 0) {
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) {
40
139
  const dev = Math.abs(action.limit_px - inputs.mid) / inputs.mid;
41
140
  if (dev > effectiveDeviationMax(inputs)) {
42
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)}%.`);
43
142
  }
44
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
+ }
45
166
  }
46
167
  if (action.action === "close_position") {
47
168
  const pos = inputs.positionSignedSz;
48
169
  if (pos === undefined || !Number.isFinite(pos) || pos === 0) {
49
170
  throw new ConfigError("advise: close_position blocked: no open position for this coin.");
50
171
  }
51
- const absz = Math.abs(pos);
52
- if (absz > szCap) {
53
- throw new ConfigError(`advise: close_position blocked: position size ${absz} exceeds cap ${szCap}.`);
54
- }
55
172
  if (action.method === "limit") {
56
173
  if (action.limit_px === undefined || !Number.isFinite(action.limit_px)) {
57
174
  throw new ConfigError("advise: close_position limit method requires limit_px.");
@@ -66,6 +183,16 @@ export function assertAdvisorActionPassesGuards(action, inputs) {
66
183
  if (action.method === "market" && inputs.mid === null) {
67
184
  throw new ConfigError("advise: close_position market needs a valid mid price.");
68
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
+ }
69
196
  }
70
197
  }
71
198
  //# sourceMappingURL=guards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"guards.js","sourceRoot":"","sources":["../../src/advisor/guards.ts"],"names":[],"mappings":"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"}
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"}