jcc_hyper_tool 0.1.5 → 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 (135) hide show
  1. package/README.md +124 -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/gridReconcile.d.ts +2 -0
  98. package/dist/core/state/gridReconcile.d.ts.map +1 -1
  99. package/dist/core/state/gridReconcile.js +42 -2
  100. package/dist/core/state/gridReconcile.js.map +1 -1
  101. package/dist/core/state/intentFactory.d.ts +1 -0
  102. package/dist/core/state/intentFactory.d.ts.map +1 -1
  103. package/dist/core/state/intentFactory.js +1 -0
  104. package/dist/core/state/intentFactory.js.map +1 -1
  105. package/dist/core/state/profileStore.d.ts.map +1 -1
  106. package/dist/core/state/profileStore.js +12 -16
  107. package/dist/core/state/profileStore.js.map +1 -1
  108. package/dist/core/state/runReconcile.d.ts.map +1 -1
  109. package/dist/core/state/runReconcile.js +53 -18
  110. package/dist/core/state/runReconcile.js.map +1 -1
  111. package/dist/core/state/schema.d.ts +439 -68
  112. package/dist/core/state/schema.d.ts.map +1 -1
  113. package/dist/core/state/schema.js +51 -0
  114. package/dist/core/state/schema.js.map +1 -1
  115. package/dist/core/state/snapshot.d.ts +13 -0
  116. package/dist/core/state/snapshot.d.ts.map +1 -1
  117. package/dist/core/state/snapshot.js +36 -0
  118. package/dist/core/state/snapshot.js.map +1 -1
  119. package/dist/core/state/store.d.ts +21 -3
  120. package/dist/core/state/store.d.ts.map +1 -1
  121. package/dist/core/state/store.js +122 -13
  122. package/dist/core/state/store.js.map +1 -1
  123. package/dist/core/state/types.d.ts +13 -0
  124. package/dist/core/state/types.d.ts.map +1 -1
  125. package/dist/daemon/index.js +47 -2
  126. package/dist/daemon/index.js.map +1 -1
  127. package/dist/daemon/validateChild.d.ts +13 -0
  128. package/dist/daemon/validateChild.d.ts.map +1 -0
  129. package/dist/daemon/validateChild.js +77 -0
  130. package/dist/daemon/validateChild.js.map +1 -0
  131. package/dist/strategies/grid.d.ts +1 -0
  132. package/dist/strategies/grid.d.ts.map +1 -1
  133. package/dist/strategies/grid.js +1 -0
  134. package/dist/strategies/grid.js.map +1 -1
  135. package/package.json +3 -1
@@ -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"}
@@ -0,0 +1,118 @@
1
+ import { hasPriceHitTpOrSl, resolvePositionOpenAgeSec } from "./ambushPolicy.js";
2
+ function entryPxForPlan(bracket, positionEntryPx) {
3
+ if (positionEntryPx !== undefined && Number.isFinite(positionEntryPx) && positionEntryPx > 0) {
4
+ return positionEntryPx;
5
+ }
6
+ return bracket.entryLimitPx;
7
+ }
8
+ export function isTrendTowardTp(side, mid, entryPx, tp, sl) {
9
+ if (!Number.isFinite(mid) || !Number.isFinite(entryPx) || !Number.isFinite(tp) || !Number.isFinite(sl)) {
10
+ return false;
11
+ }
12
+ if (hasPriceHitTpOrSl(side, mid, tp, sl)) {
13
+ return false;
14
+ }
15
+ if (side === "buy") {
16
+ return mid >= entryPx && mid < tp && mid > sl;
17
+ }
18
+ return mid <= entryPx && mid > tp && mid < sl;
19
+ }
20
+ export function progressTowardTp(side, mid, entryPx, tp) {
21
+ const span = side === "buy" ? tp - entryPx : entryPx - tp;
22
+ if (!Number.isFinite(span) || span <= 0) {
23
+ return null;
24
+ }
25
+ const traveled = side === "buy" ? mid - entryPx : entryPx - mid;
26
+ return Math.max(0, Math.min(1, traveled / span));
27
+ }
28
+ export function findBestBracketPlanForPosition(state, coin, positionSignedSz) {
29
+ if (positionSignedSz === undefined || positionSignedSz === 0) {
30
+ return undefined;
31
+ }
32
+ const wantBuy = positionSignedSz > 0;
33
+ const candidates = [];
34
+ for (const intent of Object.values(state.intents)) {
35
+ if (intent.kind !== "bracket" || intent.coin !== coin) {
36
+ continue;
37
+ }
38
+ const sideOk = wantBuy ? intent.entrySide === "buy" : intent.entrySide === "sell";
39
+ if (!sideOk) {
40
+ continue;
41
+ }
42
+ if (intent.phase === "protection_active" ||
43
+ intent.phase === "entry_filled" ||
44
+ intent.phase === "entry_partial") {
45
+ candidates.push(intent);
46
+ }
47
+ }
48
+ if (candidates.length === 0) {
49
+ return undefined;
50
+ }
51
+ const rank = (p) => {
52
+ if (p === "protection_active") {
53
+ return 3;
54
+ }
55
+ if (p === "entry_filled") {
56
+ return 2;
57
+ }
58
+ if (p === "entry_partial") {
59
+ return 1;
60
+ }
61
+ return 0;
62
+ };
63
+ return candidates.sort((a, b) => {
64
+ const dr = rank(b.phase) - rank(a.phase);
65
+ if (dr !== 0) {
66
+ return dr;
67
+ }
68
+ return b.updatedAtMs - a.updatedAtMs;
69
+ })[0];
70
+ }
71
+ export function buildActivePositionPlan(params) {
72
+ const bracket = findBestBracketPlanForPosition(params.state, params.coin, params.positionSignedSz);
73
+ if (!bracket) {
74
+ return undefined;
75
+ }
76
+ const entryPx = entryPxForPlan(bracket, params.positionEntryPx);
77
+ const protectionActive = bracket.phase === "protection_active";
78
+ const protectionPending = bracket.phase === "entry_filled" ||
79
+ (bracket.phase === "entry_partial" && Boolean(params.positionSignedSz));
80
+ const openAge = resolvePositionOpenAgeSec({
81
+ state: params.state,
82
+ coin: params.coin,
83
+ nowMs: params.nowMs,
84
+ });
85
+ let trendTowardTp = false;
86
+ let tpSlHit = false;
87
+ let progress = null;
88
+ if (params.mid !== null && params.mid > 0) {
89
+ trendTowardTp = isTrendTowardTp(bracket.entrySide, params.mid, entryPx, bracket.tpTriggerPx, bracket.slTriggerPx);
90
+ tpSlHit = hasPriceHitTpOrSl(bracket.entrySide, params.mid, bracket.tpTriggerPx, bracket.slTriggerPx);
91
+ progress = progressTowardTp(bracket.entrySide, params.mid, entryPx, bracket.tpTriggerPx);
92
+ }
93
+ return {
94
+ intent_id: bracket.id,
95
+ phase: bracket.phase,
96
+ side: bracket.entrySide,
97
+ entry_limit_px: bracket.entryLimitPx,
98
+ tp_px: bracket.tpTriggerPx,
99
+ sl_px: bracket.slTriggerPx,
100
+ protection_pending: protectionPending && !protectionActive,
101
+ protection_active: protectionActive,
102
+ open_age_sec: openAge ?? null,
103
+ trend_toward_tp: trendTowardTp,
104
+ tp_sl_hit: tpSlHit,
105
+ progress_to_tp: progress,
106
+ strategy: bracket.strategy,
107
+ };
108
+ }
109
+ export function unrealizedPnlPct(positionSignedSz, entryPx, mid) {
110
+ if (!Number.isFinite(entryPx) || entryPx <= 0) {
111
+ return 0;
112
+ }
113
+ if (positionSignedSz > 0) {
114
+ return (mid - entryPx) / entryPx;
115
+ }
116
+ return (entryPx - mid) / entryPx;
117
+ }
118
+ //# sourceMappingURL=positionPlan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positionPlan.js","sourceRoot":"","sources":["../../src/advisor/positionPlan.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  import type { UserProfile } from "../core/state/schema.js";
2
+ import type { PendingAmbushSummary } from "./ambushPolicy.js";
2
3
  import type { AdvisorMarketSnapshot } from "./contextBuilder.js";
3
- export declare function buildAdvisorSystemPrompt(profile: UserProfile | undefined): string;
4
- export declare function formatFirstUserPayload(snapshot: AdvisorMarketSnapshot): string;
4
+ import type { ActivePositionPlan } from "./positionPlan.js";
5
+ export type ContextVersion = "raw_kline" | "precomputed_indicators";
6
+ export declare function buildAdvisorSystemPrompt(profile: UserProfile | undefined, contextVersion?: ContextVersion): string;
7
+ export declare function formatFirstUserPayload(snapshot: AdvisorMarketSnapshot, extras?: {
8
+ pendingAmbushIntents?: PendingAmbushSummary[];
9
+ activePositionPlan?: ActivePositionPlan | null;
10
+ }): string;
5
11
  //# sourceMappingURL=promptTemplate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"promptTemplate.d.ts","sourceRoot":"","sources":["../../src/advisor/promptTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CA+DjF;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM,CAgB9E"}
1
+ {"version":3,"file":"promptTemplate.d.ts","sourceRoot":"","sources":["../../src/advisor/promptTemplate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAI3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,wBAAwB,CAAC;AAEpE,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,GAAG,SAAS,EAChC,cAAc,GAAE,cAA4B,GAC3C,MAAM,CAwMR;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,CAAC,EAAE;IACP,oBAAoB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC9C,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAChD,GACA,MAAM,CAiCR"}