@continuumdao/continuum-node-sdk 1.3.27 → 1.3.29

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 (130) hide show
  1. package/dist/agent-host-catalog.json +1 -0
  2. package/dist/core/chart/analysis/analysis-agent-view.d.ts.map +1 -1
  3. package/dist/core/chart/analysis/analysis-agent-view.js +44 -0
  4. package/dist/core/chart/analysis/analysis-agent-view.js.map +1 -1
  5. package/dist/core/chart/analysis/analysis-catalog.d.ts.map +1 -1
  6. package/dist/core/chart/analysis/analysis-catalog.js +9 -1
  7. package/dist/core/chart/analysis/analysis-catalog.js.map +1 -1
  8. package/dist/core/chart/analysis/analyze-tools.d.ts +34 -0
  9. package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -1
  10. package/dist/core/chart/analysis/analyze-tools.js +74 -0
  11. package/dist/core/chart/analysis/analyze-tools.js.map +1 -1
  12. package/dist/core/chart/analysis/bollinger-analyze-tools.d.ts +101 -0
  13. package/dist/core/chart/analysis/bollinger-analyze-tools.d.ts.map +1 -0
  14. package/dist/core/chart/analysis/bollinger-analyze-tools.js +289 -0
  15. package/dist/core/chart/analysis/bollinger-analyze-tools.js.map +1 -0
  16. package/dist/core/chart/analysis/bollinger-highlight.d.ts +29 -0
  17. package/dist/core/chart/analysis/bollinger-highlight.d.ts.map +1 -0
  18. package/dist/core/chart/analysis/bollinger-highlight.js +39 -0
  19. package/dist/core/chart/analysis/bollinger-highlight.js.map +1 -0
  20. package/dist/core/chart/analysis/candlestick-highlight.d.ts +55 -0
  21. package/dist/core/chart/analysis/candlestick-highlight.d.ts.map +1 -0
  22. package/dist/core/chart/analysis/candlestick-highlight.js +71 -0
  23. package/dist/core/chart/analysis/candlestick-highlight.js.map +1 -0
  24. package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts +39 -0
  25. package/dist/core/chart/analysis/candlestick-patterns-tools.d.ts.map +1 -1
  26. package/dist/core/chart/analysis/candlestick-patterns-tools.js +46 -0
  27. package/dist/core/chart/analysis/candlestick-patterns-tools.js.map +1 -1
  28. package/dist/core/chart/analysis/momentum-highlight.d.ts +31 -0
  29. package/dist/core/chart/analysis/momentum-highlight.d.ts.map +1 -0
  30. package/dist/core/chart/analysis/momentum-highlight.js +59 -0
  31. package/dist/core/chart/analysis/momentum-highlight.js.map +1 -0
  32. package/dist/core/chart/analysis/range-volatility-highlight.d.ts +31 -0
  33. package/dist/core/chart/analysis/range-volatility-highlight.d.ts.map +1 -0
  34. package/dist/core/chart/analysis/range-volatility-highlight.js +53 -0
  35. package/dist/core/chart/analysis/range-volatility-highlight.js.map +1 -0
  36. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.d.ts +77 -0
  37. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.d.ts.map +1 -0
  38. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.js +163 -0
  39. package/dist/core/chart/analysis/trade-setups/bollinger-trade-setup.js.map +1 -0
  40. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts +2 -1
  41. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -1
  42. package/dist/core/chart/analysis/trade-setups/build-trade.js +29 -3
  43. package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -1
  44. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.d.ts +4 -6
  45. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.d.ts.map +1 -1
  46. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.js +29 -35
  47. package/dist/core/chart/analysis/trade-setups/candlestick-trade-setup.js.map +1 -1
  48. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts +7 -1
  49. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.d.ts.map +1 -1
  50. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js +24 -2
  51. package/dist/core/chart/analysis/trade-setups/chart-pattern-trade-setup.js.map +1 -1
  52. package/dist/core/chart/analysis/trade-setups/entry-proximity-atr.d.ts +3 -0
  53. package/dist/core/chart/analysis/trade-setups/entry-proximity-atr.d.ts.map +1 -0
  54. package/dist/core/chart/analysis/trade-setups/entry-proximity-atr.js +32 -0
  55. package/dist/core/chart/analysis/trade-setups/entry-proximity-atr.js.map +1 -0
  56. package/dist/core/chart/analysis/trade-setups/index.d.ts +1 -0
  57. package/dist/core/chart/analysis/trade-setups/index.d.ts.map +1 -1
  58. package/dist/core/chart/analysis/trade-setups/index.js +1 -0
  59. package/dist/core/chart/analysis/trade-setups/index.js.map +1 -1
  60. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts +7 -0
  61. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts.map +1 -1
  62. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js +30 -4
  63. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js.map +1 -1
  64. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts +5 -0
  65. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts.map +1 -1
  66. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js +14 -2
  67. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js.map +1 -1
  68. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.d.ts +2 -2
  69. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.d.ts.map +1 -1
  70. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.js +8 -4
  71. package/dist/core/chart/analysis/trade-setups/momentum-trade-setup.js.map +1 -1
  72. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts +10 -1
  73. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.d.ts.map +1 -1
  74. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js +75 -34
  75. package/dist/core/chart/analysis/trade-setups/pattern-limit-entry.js.map +1 -1
  76. package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.d.ts +52 -0
  77. package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.d.ts.map +1 -0
  78. package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.js +119 -0
  79. package/dist/core/chart/analysis/trade-setups/range-volatility-trade-setup.js.map +1 -0
  80. package/dist/core/chart/analysis/trade-setups/shared.d.ts +1 -1
  81. package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -1
  82. package/dist/core/chart/analysis/trade-setups/shared.js +2 -0
  83. package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -1
  84. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts +8 -0
  85. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.d.ts.map +1 -1
  86. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js +9 -1
  87. package/dist/core/chart/analysis/trade-setups/trade-desk-defaults.js.map +1 -1
  88. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.d.ts +9 -5
  89. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.d.ts.map +1 -1
  90. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.js +24 -8
  91. package/dist/core/chart/analysis/trade-setups/trade-entry-gates.js.map +1 -1
  92. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +11 -1
  93. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -1
  94. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +32 -5
  95. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -1
  96. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +12 -1
  97. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -1
  98. package/dist/core/chart/analysis/trade-setups/trade-idea.js +16 -3
  99. package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -1
  100. package/dist/core/chart/display-downsample.d.ts +1 -1
  101. package/dist/core/chart/display-downsample.d.ts.map +1 -1
  102. package/dist/core/chart/display-downsample.js +21 -0
  103. package/dist/core/chart/display-downsample.js.map +1 -1
  104. package/dist/core/chart/overlay-schemas.d.ts +3 -0
  105. package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
  106. package/dist/core/chart/overlay-schemas.js +2 -0
  107. package/dist/core/chart/overlay-schemas.js.map +1 -1
  108. package/dist/core/chart/overlays.d.ts.map +1 -1
  109. package/dist/core/chart/overlays.js +21 -0
  110. package/dist/core/chart/overlays.js.map +1 -1
  111. package/dist/core/chart/prepare-core.d.ts.map +1 -1
  112. package/dist/core/chart/prepare-core.js +20 -1
  113. package/dist/core/chart/prepare-core.js.map +1 -1
  114. package/dist/core/chart/prepare-from-rows.d.ts +2 -0
  115. package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
  116. package/dist/core/chart/schemas.d.ts +9 -0
  117. package/dist/core/chart/schemas.d.ts.map +1 -1
  118. package/dist/core/chart/schemas.js +1 -1
  119. package/dist/core/chart/schemas.js.map +1 -1
  120. package/dist/mcp/chart.d.ts.map +1 -1
  121. package/dist/mcp/chart.js +7 -0
  122. package/dist/mcp/chart.js.map +1 -1
  123. package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -1
  124. package/dist/mcp/deferred/tool-group-map.js +1 -0
  125. package/dist/mcp/deferred/tool-group-map.js.map +1 -1
  126. package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -1
  127. package/dist/mcp/ohlcv-session-wrapper.js +1 -0
  128. package/dist/mcp/ohlcv-session-wrapper.js.map +1 -1
  129. package/dist/mcp/resources/chart-analysis.md +4 -1
  130. package/package.json +2 -2
@@ -0,0 +1,289 @@
1
+ import { z } from 'zod';
2
+ import { calculateTechnicalIndicator } from '../../ta/calculate.js';
3
+ import { coerceFiniteNumber } from '../point-normalize.js';
4
+ import { extractOhlcvBarsFromUnknown } from '../fetch-result.js';
5
+ import { ChartLiveTickSchema } from '../live/schemas.js';
6
+ import { validateTimeSeriesPointsFromToolResult } from '../chart-data-validation.js';
7
+ import { buildOhlcvAnalysisMeta, OhlcvAnalysisMetaSchema } from './analysis-meta.js';
8
+ import { prepareOhlcvBarsForAnalysis } from './ohlcv-live-merge.js';
9
+ import { preprocessOhlcvToolInput, missingOhlcvBarsReason } from './ohlcv-input.js';
10
+ import { buildBollingerHighlight } from './bollinger-highlight.js';
11
+ import { buildBollingerTradeSetup, DEFAULT_BOLLINGER_ENTRY_PROXIMITY_PCT, } from './trade-setups/bollinger-trade-setup.js';
12
+ import { extractTimeSeriesFromUnknown } from './time-series-input.js';
13
+ const DEFAULT_BOLLINGER_PERIOD = 20;
14
+ const DEFAULT_BOLLINGER_STD_DEV = 2;
15
+ const bollingerInputSchema = z
16
+ .object({
17
+ toolResult: z.unknown().optional(),
18
+ rows: z.array(z.unknown()).min(1).optional(),
19
+ title: z.string().trim().min(1).max(256).optional(),
20
+ label: z.string().trim().min(1).max(128).optional(),
21
+ ohlcvDigest: z.string().trim().min(1).max(512).optional(),
22
+ mergeLive: z.boolean().optional(),
23
+ liveTick: ChartLiveTickSchema.optional(),
24
+ allowRowsOnly: z.boolean().optional(),
25
+ period: z.number().int().min(2).max(500).optional(),
26
+ stdDev: z.number().positive().max(10).optional(),
27
+ entryProximityPct: z.number().min(0).max(50).optional(),
28
+ })
29
+ .strict();
30
+ export const AnalyzeBollingerBandsInputSchema = z.preprocess(preprocessOhlcvToolInput, bollingerInputSchema);
31
+ export const AnalyzeBollingerBandsOutputSchema = z
32
+ .object({
33
+ analysis: z
34
+ .object({
35
+ summary: z.string(),
36
+ interpretation: z.string(),
37
+ upper: z.number(),
38
+ middle: z.number(),
39
+ lower: z.number(),
40
+ bandWidth: z.number(),
41
+ percentB: z.number(),
42
+ period: z.number().int(),
43
+ stdDev: z.number(),
44
+ dataKind: z.enum(['ohlcv', 'time_series']),
45
+ bollingerTradeSetup: z.object({}).catchall(z.unknown()).nullable(),
46
+ bollingerHighlight: z.object({}).catchall(z.unknown()),
47
+ })
48
+ .strict(),
49
+ meta: z.union([OhlcvAnalysisMetaSchema, z.record(z.string(), z.unknown())]),
50
+ })
51
+ .strict();
52
+ function pointsFromToolInput(input) {
53
+ if (input.rows?.length) {
54
+ return extractTimeSeriesFromUnknown(input.rows) ?? [];
55
+ }
56
+ if (input.toolResult != null) {
57
+ return extractTimeSeriesFromUnknown(input.toolResult) ?? [];
58
+ }
59
+ return [];
60
+ }
61
+ function timeSeriesPointRows(points) {
62
+ return points.map(point => ({ time: point.timeSec, value: point.value }));
63
+ }
64
+ function lastBandValues(closes, period, stdDev) {
65
+ const result = calculateTechnicalIndicator({
66
+ indicator: 'bollingerbands',
67
+ params: { period, stdDev },
68
+ input: { values: closes },
69
+ options: { maxPoints: closes.length },
70
+ });
71
+ if (!result.ok) {
72
+ return result;
73
+ }
74
+ const rows = result.data.result;
75
+ if (!Array.isArray(rows) || rows.length === 0) {
76
+ return { ok: false, reason: 'Bollinger bands returned no data.' };
77
+ }
78
+ const lastRow = rows[rows.length - 1];
79
+ const upper = coerceFiniteNumber(lastRow.upper ?? lastRow.Upper);
80
+ const middle = coerceFiniteNumber(lastRow.middle ?? lastRow.Middle);
81
+ const lower = coerceFiniteNumber(lastRow.lower ?? lastRow.Lower);
82
+ const lastClose = closes.at(-1);
83
+ if (upper == null ||
84
+ middle == null ||
85
+ lower == null ||
86
+ lastClose == null ||
87
+ upper <= lower) {
88
+ return { ok: false, reason: 'Bollinger bands have no valid last values after warmup.' };
89
+ }
90
+ const bandWidth = upper - lower;
91
+ const percentB = bandWidth > 0 ? (lastClose - lower) / bandWidth : 0.5;
92
+ return { ok: true, data: { upper, middle, lower, percentB, bandWidth } };
93
+ }
94
+ function seriesMeta(points, title) {
95
+ return {
96
+ pointCount: points.length,
97
+ ...(title ? { title } : {}),
98
+ };
99
+ }
100
+ function lastCloseFromBars(bars) {
101
+ for (let i = bars.length - 1; i >= 0; i--) {
102
+ const close = coerceFiniteNumber(bars[i].close);
103
+ if (close != null) {
104
+ return close;
105
+ }
106
+ }
107
+ return null;
108
+ }
109
+ export async function analyzeBollingerBands(input) {
110
+ const parsed = AnalyzeBollingerBandsInputSchema.safeParse(input);
111
+ if (!parsed.success) {
112
+ return { ok: false, reason: parsed.error.message };
113
+ }
114
+ const period = parsed.data.period ?? DEFAULT_BOLLINGER_PERIOD;
115
+ const stdDev = parsed.data.stdDev ?? DEFAULT_BOLLINGER_STD_DEV;
116
+ const entryProximityPct = parsed.data.entryProximityPct ?? DEFAULT_BOLLINGER_ENTRY_PROXIMITY_PCT;
117
+ const minPoints = period + 1;
118
+ const ohlcvBars = parsed.data.rows?.length
119
+ ? extractOhlcvBarsFromUnknown(parsed.data.rows)
120
+ : parsed.data.toolResult != null
121
+ ? extractOhlcvBarsFromUnknown(parsed.data.toolResult)
122
+ : null;
123
+ if (ohlcvBars?.length) {
124
+ const prepared = await prepareOhlcvBarsForAnalysis(parsed.data);
125
+ if (!prepared.ok) {
126
+ return prepared;
127
+ }
128
+ const { bars, liveMerge, fingerprint } = prepared.data;
129
+ if (bars.length < minPoints) {
130
+ return {
131
+ ok: false,
132
+ reason: `Need at least ${minPoints} OHLCV bars for Bollinger analysis (period ${period}).`,
133
+ };
134
+ }
135
+ const closes = [];
136
+ for (const bar of bars) {
137
+ const close = coerceFiniteNumber(bar.close);
138
+ if (close != null) {
139
+ closes.push(close);
140
+ }
141
+ }
142
+ if (closes.length < minPoints) {
143
+ return { ok: false, reason: 'Insufficient valid close prices for Bollinger analysis.' };
144
+ }
145
+ const bands = lastBandValues(closes, period, stdDev);
146
+ if (!bands.ok) {
147
+ return bands;
148
+ }
149
+ const lastClose = lastCloseFromBars(bars) ?? closes.at(-1);
150
+ const { upper, middle, lower, percentB, bandWidth } = bands.data;
151
+ const bollingerTradeSetup = buildBollingerTradeSetup({
152
+ lastClose,
153
+ upper,
154
+ middle,
155
+ lower,
156
+ period,
157
+ stdDev,
158
+ entryProximityPct,
159
+ });
160
+ const bollingerHighlight = buildBollingerHighlight({
161
+ upper,
162
+ middle,
163
+ lower,
164
+ bandWidth,
165
+ percentB,
166
+ period,
167
+ stdDev,
168
+ setup: bollingerTradeSetup,
169
+ });
170
+ const summary = bollingerHighlight.summary;
171
+ const interpretation = (() => {
172
+ let msg = `Bollinger bands (${period}, ${stdDev}σ): upper ${upper.toFixed(2)}, middle ${middle.toFixed(2)}, lower ${lower.toFixed(2)}. Last close ${lastClose.toFixed(2)} (%B ${(percentB * 100).toFixed(1)}). `;
173
+ if (bollingerTradeSetup?.invalidated) {
174
+ msg += bollingerTradeSetup.unclearReason ?? 'Setup invalidated by band breach.';
175
+ }
176
+ else if (bollingerTradeSetup?.status === 'clear' && bollingerTradeSetup.side !== 'neutral') {
177
+ msg += `Trade setup: ${bollingerTradeSetup.side} fade at ${bollingerTradeSetup.entryLabel} toward ${bollingerTradeSetup.targetLabel}.`;
178
+ }
179
+ else {
180
+ msg += bollingerTradeSetup?.conditionalNote ?? 'No clear band fade — wait for proximity to outer band.';
181
+ }
182
+ return msg;
183
+ })();
184
+ return {
185
+ ok: true,
186
+ data: {
187
+ analysis: {
188
+ summary,
189
+ interpretation,
190
+ upper,
191
+ middle,
192
+ lower,
193
+ bandWidth,
194
+ percentB,
195
+ period,
196
+ stdDev,
197
+ dataKind: 'ohlcv',
198
+ bollingerTradeSetup,
199
+ bollingerHighlight,
200
+ },
201
+ meta: buildOhlcvAnalysisMeta(bars, {
202
+ title: parsed.data.title,
203
+ toolResult: parsed.data.toolResult,
204
+ liveMerge,
205
+ ohlcvFingerprint: fingerprint,
206
+ }),
207
+ },
208
+ };
209
+ }
210
+ const points = pointsFromToolInput(parsed.data);
211
+ if (points.length === 0) {
212
+ return { ok: false, reason: missingOhlcvBarsReason(parsed.data) };
213
+ }
214
+ const sorted = [...points].sort((a, b) => a.timeSec - b.timeSec);
215
+ const pointRows = timeSeriesPointRows(sorted);
216
+ if (parsed.data.toolResult != null) {
217
+ const check = validateTimeSeriesPointsFromToolResult(pointRows, parsed.data.toolResult, parsed.data.title);
218
+ if (!check.ok) {
219
+ return { ok: false, reason: check.reason };
220
+ }
221
+ }
222
+ if (sorted.length < minPoints) {
223
+ return {
224
+ ok: false,
225
+ reason: `Need at least ${minPoints} time-series points for Bollinger analysis (period ${period}).`,
226
+ };
227
+ }
228
+ const closes = sorted.map(p => p.value);
229
+ const bands = lastBandValues(closes, period, stdDev);
230
+ if (!bands.ok) {
231
+ return bands;
232
+ }
233
+ const lastClose = closes.at(-1);
234
+ const { upper, middle, lower, percentB, bandWidth } = bands.data;
235
+ const bollingerTradeSetup = buildBollingerTradeSetup({
236
+ lastClose,
237
+ upper,
238
+ middle,
239
+ lower,
240
+ period,
241
+ stdDev,
242
+ entryProximityPct,
243
+ });
244
+ const bollingerHighlight = buildBollingerHighlight({
245
+ upper,
246
+ middle,
247
+ lower,
248
+ bandWidth,
249
+ percentB,
250
+ period,
251
+ stdDev,
252
+ setup: bollingerTradeSetup,
253
+ });
254
+ const summary = bollingerHighlight.summary;
255
+ const interpretation = (() => {
256
+ let msg = `Bollinger bands on time series (${period}, ${stdDev}σ): upper ${upper.toFixed(2)}, middle ${middle.toFixed(2)}, lower ${lower.toFixed(2)}. Last value ${lastClose.toFixed(2)} (%B ${(percentB * 100).toFixed(1)}). `;
257
+ if (bollingerTradeSetup?.invalidated) {
258
+ msg += bollingerTradeSetup.unclearReason ?? 'Setup invalidated by band breach.';
259
+ }
260
+ else if (bollingerTradeSetup?.status === 'clear' && bollingerTradeSetup.side !== 'neutral') {
261
+ msg += `Trade setup: ${bollingerTradeSetup.side} fade at ${bollingerTradeSetup.entryLabel} toward ${bollingerTradeSetup.targetLabel}.`;
262
+ }
263
+ else {
264
+ msg += bollingerTradeSetup?.conditionalNote ?? 'No clear band fade — wait for proximity to outer band.';
265
+ }
266
+ return msg;
267
+ })();
268
+ return {
269
+ ok: true,
270
+ data: {
271
+ analysis: {
272
+ summary,
273
+ interpretation,
274
+ upper,
275
+ middle,
276
+ lower,
277
+ bandWidth,
278
+ percentB,
279
+ period,
280
+ stdDev,
281
+ dataKind: 'time_series',
282
+ bollingerTradeSetup,
283
+ bollingerHighlight,
284
+ },
285
+ meta: seriesMeta(sorted, parsed.data.title),
286
+ },
287
+ };
288
+ }
289
+ //# sourceMappingURL=bollinger-analyze-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bollinger-analyze-tools.js","sourceRoot":"","sources":["../../../../src/core/chart/analysis/bollinger-analyze-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { BollingerTradeSetup } from './trade-setups/bollinger-trade-setup.js';
2
+ export type BollingerHighlight = {
3
+ summary: string;
4
+ upper: number;
5
+ middle: number;
6
+ lower: number;
7
+ bandWidth: number;
8
+ percentB: number;
9
+ period: number;
10
+ stdDev: number;
11
+ side: 'long' | 'short' | 'neutral';
12
+ status: 'clear' | 'unclear';
13
+ invalidated: boolean;
14
+ confidence: number;
15
+ conditionalNote: string;
16
+ chartDrawingHint?: string;
17
+ unclearReason?: string;
18
+ };
19
+ export declare function buildBollingerHighlight(input: {
20
+ upper: number;
21
+ middle: number;
22
+ lower: number;
23
+ bandWidth: number;
24
+ percentB: number;
25
+ period: number;
26
+ stdDev: number;
27
+ setup: BollingerTradeSetup | null;
28
+ }): BollingerHighlight;
29
+ //# sourceMappingURL=bollinger-highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bollinger-highlight.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/analysis/bollinger-highlight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,yCAAyC,CAAC;AAEjF,MAAM,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACnC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAYF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAAC;CAClC,GAAG,kBAAkB,CA+BrB"}
@@ -0,0 +1,39 @@
1
+ function sideLabel(side) {
2
+ if (side === 'long') {
3
+ return 'Long';
4
+ }
5
+ if (side === 'short') {
6
+ return 'Short';
7
+ }
8
+ return 'Neutral';
9
+ }
10
+ export function buildBollingerHighlight(input) {
11
+ const setup = input.setup;
12
+ const side = setup?.side ?? 'neutral';
13
+ const status = setup?.status ?? 'unclear';
14
+ const invalidated = setup?.invalidated ?? false;
15
+ const confidence = setup?.confidence ?? 0.4;
16
+ const conditionalNote = setup?.conditionalNote ??
17
+ 'Bollinger bands — wait for price to reach an outer band for a fade entry.';
18
+ const statusPart = invalidated ? 'Invalid' : status === 'clear' ? 'Clear' : 'Unclear';
19
+ const summary = `BB(${input.period}, ${input.stdDev}) · ${input.lower.toFixed(2)}–${input.upper.toFixed(2)} · %B ${(input.percentB * 100).toFixed(1)}. ${sideLabel(side)} — ${statusPart}. ${conditionalNote}`;
20
+ const chartDrawingHint = 'When a chart is already prepared, merge `{ type: "bollinger", sourceSeriesId, period, stdDev }` into prepareReplay.overlays and call prepare_chart_from_rows with the same OHLCV session.';
21
+ return {
22
+ summary,
23
+ upper: input.upper,
24
+ middle: input.middle,
25
+ lower: input.lower,
26
+ bandWidth: input.bandWidth,
27
+ percentB: input.percentB,
28
+ period: input.period,
29
+ stdDev: input.stdDev,
30
+ side,
31
+ status,
32
+ invalidated,
33
+ confidence,
34
+ conditionalNote,
35
+ chartDrawingHint,
36
+ ...(setup?.unclearReason ? { unclearReason: setup.unclearReason } : {}),
37
+ };
38
+ }
39
+ //# sourceMappingURL=bollinger-highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bollinger-highlight.js","sourceRoot":"","sources":["../../../../src/core/chart/analysis/bollinger-highlight.ts"],"names":[],"mappings":"AAoBA,SAAS,SAAS,CAAC,IAAgC;IAClD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KASvC;IACA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,IAAI,GAAG,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,SAAS,CAAC;IAC1C,MAAM,WAAW,GAAG,KAAK,EAAE,WAAW,IAAI,KAAK,CAAC;IAChD,MAAM,UAAU,GAAG,KAAK,EAAE,UAAU,IAAI,GAAG,CAAC;IAC5C,MAAM,eAAe,GACpB,KAAK,EAAE,eAAe;QACtB,2EAA2E,CAAC;IAC7E,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,MAAM,UAAU,KAAK,eAAe,EAAE,CAAC;IAC/M,MAAM,gBAAgB,GACrB,2LAA2L,CAAC;IAE7L,OAAO;QACN,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI;QACJ,MAAM;QACN,WAAW;QACX,UAAU;QACV,eAAe;QACf,gBAAgB;QAChB,GAAG,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EAAC,aAAa,EAAE,KAAK,CAAC,aAAa,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,55 @@
1
+ export type CandlestickPreviewBar = {
2
+ index: number;
3
+ open: number;
4
+ high: number;
5
+ low: number;
6
+ close: number;
7
+ isFocus: boolean;
8
+ };
9
+ export type CandlestickPatternFound = {
10
+ id: string;
11
+ name: string;
12
+ direction: 'bullish' | 'bearish' | 'neutral';
13
+ confidence: number;
14
+ };
15
+ export type CandlestickHighlight = {
16
+ summary: string;
17
+ recommendation: 'buy' | 'sell' | 'hold';
18
+ recommendationConfidence: number;
19
+ primaryPattern: {
20
+ id: string;
21
+ name: string;
22
+ description: string;
23
+ direction?: 'bullish' | 'bearish' | 'neutral';
24
+ } | null;
25
+ patternsFound: CandlestickPatternFound[];
26
+ focusBarIndex: number;
27
+ previewBars: CandlestickPreviewBar[];
28
+ previewBarCount: number;
29
+ };
30
+ type OhlcBar = {
31
+ open: number;
32
+ high: number;
33
+ low: number;
34
+ close: number;
35
+ };
36
+ export declare function buildCandlestickHighlight(input: {
37
+ bars: OhlcBar[];
38
+ focusBarIndex: number;
39
+ primaryPattern: {
40
+ id: string;
41
+ name: string;
42
+ description: string;
43
+ } | null;
44
+ patterns: Array<{
45
+ id: string;
46
+ name: string;
47
+ direction: 'bullish' | 'bearish' | 'neutral';
48
+ confidence: number;
49
+ }>;
50
+ recommendation: 'buy' | 'sell' | 'hold';
51
+ recommendationConfidence: number;
52
+ previewCount?: number;
53
+ }): CandlestickHighlight;
54
+ export {};
55
+ //# sourceMappingURL=candlestick-highlight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candlestick-highlight.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/analysis/candlestick-highlight.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IAC7C,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,wBAAwB,EAAE,MAAM,CAAC;IACjC,cAAc,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;KAC9C,GAAG,IAAI,CAAC;IACT,aAAa,EAAE,uBAAuB,EAAE,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC;CACxB,CAAC;AAIF,KAAK,OAAO,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AA4BF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAChD,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,QAAQ,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;QAC7C,UAAU,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,oBAAoB,CAiDvB"}
@@ -0,0 +1,71 @@
1
+ const PREVIEW_BAR_COUNT = 5;
2
+ function recommendationLabel(recommendation) {
3
+ if (recommendation === 'buy') {
4
+ return 'bullish';
5
+ }
6
+ if (recommendation === 'sell') {
7
+ return 'bearish';
8
+ }
9
+ return 'neutral';
10
+ }
11
+ function buildHighlightSummary(input) {
12
+ if (!input.primaryPattern) {
13
+ return 'No candlestick pattern detected on the focus bar — neutral / indecision.';
14
+ }
15
+ const bias = recommendationLabel(input.recommendation);
16
+ const extra = input.patternsFound.length > 1
17
+ ? ` (${input.patternsFound.length} patterns on focus bar)`
18
+ : '';
19
+ return `${input.primaryPattern.name} — ${bias} signal${extra}.`;
20
+ }
21
+ export function buildCandlestickHighlight(input) {
22
+ const previewCount = Math.max(1, Math.min(input.previewCount ?? PREVIEW_BAR_COUNT, 8));
23
+ const startIndex = Math.max(0, input.focusBarIndex - previewCount + 1);
24
+ const previewBars = [];
25
+ for (let i = startIndex; i <= input.focusBarIndex; i++) {
26
+ const bar = input.bars[i];
27
+ if (!bar) {
28
+ continue;
29
+ }
30
+ previewBars.push({
31
+ index: i,
32
+ open: bar.open,
33
+ high: bar.high,
34
+ low: bar.low,
35
+ close: bar.close,
36
+ isFocus: i === input.focusBarIndex,
37
+ });
38
+ }
39
+ const patternsFound = input.patterns.map(hit => ({
40
+ id: hit.id,
41
+ name: hit.name,
42
+ direction: hit.direction,
43
+ confidence: hit.confidence,
44
+ }));
45
+ const primaryHit = input.primaryPattern
46
+ ? input.patterns.find(p => p.id === input.primaryPattern.id)
47
+ : undefined;
48
+ const primaryPattern = input.primaryPattern
49
+ ? {
50
+ id: input.primaryPattern.id,
51
+ name: input.primaryPattern.name,
52
+ description: input.primaryPattern.description,
53
+ ...(primaryHit ? { direction: primaryHit.direction } : {}),
54
+ }
55
+ : null;
56
+ return {
57
+ summary: buildHighlightSummary({
58
+ primaryPattern,
59
+ recommendation: input.recommendation,
60
+ patternsFound,
61
+ }),
62
+ recommendation: input.recommendation,
63
+ recommendationConfidence: input.recommendationConfidence,
64
+ primaryPattern,
65
+ patternsFound,
66
+ focusBarIndex: input.focusBarIndex,
67
+ previewBars,
68
+ previewBarCount: previewBars.length,
69
+ };
70
+ }
71
+ //# sourceMappingURL=candlestick-highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candlestick-highlight.js","sourceRoot":"","sources":["../../../../src/core/chart/analysis/candlestick-highlight.ts"],"names":[],"mappings":"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"}
@@ -58,6 +58,45 @@ export declare const AnalyzeCandlestickPatternsOutputSchema: z.ZodObject<{
58
58
  recommendationConfidence: z.ZodNumber;
59
59
  rationale: z.ZodString;
60
60
  candlestickTradeSetup: z.ZodNullable<z.ZodObject<{}, z.core.$catchall<z.ZodUnknown>>>;
61
+ candlestickHighlight: z.ZodObject<{
62
+ summary: z.ZodString;
63
+ recommendation: z.ZodEnum<{
64
+ buy: "buy";
65
+ sell: "sell";
66
+ hold: "hold";
67
+ }>;
68
+ recommendationConfidence: z.ZodNumber;
69
+ primaryPattern: z.ZodNullable<z.ZodObject<{
70
+ id: z.ZodString;
71
+ name: z.ZodString;
72
+ description: z.ZodString;
73
+ direction: z.ZodOptional<z.ZodEnum<{
74
+ neutral: "neutral";
75
+ bullish: "bullish";
76
+ bearish: "bearish";
77
+ }>>;
78
+ }, z.core.$strict>>;
79
+ patternsFound: z.ZodArray<z.ZodObject<{
80
+ id: z.ZodString;
81
+ name: z.ZodString;
82
+ direction: z.ZodEnum<{
83
+ neutral: "neutral";
84
+ bullish: "bullish";
85
+ bearish: "bearish";
86
+ }>;
87
+ confidence: z.ZodNumber;
88
+ }, z.core.$strict>>;
89
+ focusBarIndex: z.ZodNumber;
90
+ previewBars: z.ZodArray<z.ZodObject<{
91
+ index: z.ZodNumber;
92
+ open: z.ZodNumber;
93
+ high: z.ZodNumber;
94
+ low: z.ZodNumber;
95
+ close: z.ZodNumber;
96
+ isFocus: z.ZodBoolean;
97
+ }, z.core.$strict>>;
98
+ previewBarCount: z.ZodNumber;
99
+ }, z.core.$strict>;
61
100
  }, z.core.$strict>;
62
101
  meta: z.ZodObject<{
63
102
  barCount: z.ZodNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"candlestick-patterns-tools.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/analysis/candlestick-patterns-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAmB/C,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;mBAOjD,CAAC;AAeF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmCzC,CAAC;AAmBX,wBAAsB,0BAA0B,CAC/C,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC,CAAC,CA4F5E"}
1
+ {"version":3,"file":"candlestick-patterns-tools.d.ts","sourceRoot":"","sources":["../../../../src/core/chart/analysis/candlestick-patterns-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAoB/C,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;;;mBAOjD,CAAC;AAeF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2EzC,CAAC;AAmBX,wBAAsB,0BAA0B,CAC/C,KAAK,EAAE,OAAO,GACZ,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC,CAAC,CAqG5E"}
@@ -1,6 +1,7 @@
1
1
  import { z } from 'zod';
2
2
  import { buildPatternRecommendation, filterPatternIds, maxLookback, scanCandlestickPatterns, } from '../../candlestick-patterns/index.js';
3
3
  import { normalizeCandleRow } from '../point-normalize.js';
4
+ import { buildCandlestickHighlight } from './candlestick-highlight.js';
4
5
  import { buildCandlestickTradeSetup } from './trade-setups/candlestick-trade-setup.js';
5
6
  import { buildOhlcvAnalysisMeta, OhlcvAnalysisMetaSchema } from './analysis-meta.js';
6
7
  import { prepareOhlcvBarsForAnalysis } from './ohlcv-live-merge.js';
@@ -54,6 +55,42 @@ export const AnalyzeCandlestickPatternsOutputSchema = z
54
55
  recommendationConfidence: z.number(),
55
56
  rationale: z.string(),
56
57
  candlestickTradeSetup: z.object({}).catchall(z.unknown()).nullable(),
58
+ candlestickHighlight: z
59
+ .object({
60
+ summary: z.string(),
61
+ recommendation: z.enum(['buy', 'sell', 'hold']),
62
+ recommendationConfidence: z.number(),
63
+ primaryPattern: z
64
+ .object({
65
+ id: z.string(),
66
+ name: z.string(),
67
+ description: z.string(),
68
+ direction: z.enum(['bullish', 'bearish', 'neutral']).optional(),
69
+ })
70
+ .strict()
71
+ .nullable(),
72
+ patternsFound: z.array(z
73
+ .object({
74
+ id: z.string(),
75
+ name: z.string(),
76
+ direction: z.enum(['bullish', 'bearish', 'neutral']),
77
+ confidence: z.number(),
78
+ })
79
+ .strict()),
80
+ focusBarIndex: z.number().int(),
81
+ previewBars: z.array(z
82
+ .object({
83
+ index: z.number().int(),
84
+ open: z.number(),
85
+ high: z.number(),
86
+ low: z.number(),
87
+ close: z.number(),
88
+ isFocus: z.boolean(),
89
+ })
90
+ .strict()),
91
+ previewBarCount: z.number().int(),
92
+ })
93
+ .strict(),
57
94
  })
58
95
  .strict(),
59
96
  meta: OhlcvAnalysisMetaSchema,
@@ -127,6 +164,14 @@ export async function analyzeCandlestickPatterns(input) {
127
164
  focusBarClose: focusBar.close,
128
165
  lastClose,
129
166
  });
167
+ const candlestickHighlight = buildCandlestickHighlight({
168
+ bars,
169
+ focusBarIndex,
170
+ primaryPattern,
171
+ patterns: hits,
172
+ recommendation,
173
+ recommendationConfidence,
174
+ });
130
175
  return {
131
176
  ok: true,
132
177
  data: {
@@ -145,6 +190,7 @@ export async function analyzeCandlestickPatterns(input) {
145
190
  recommendationConfidence,
146
191
  rationale,
147
192
  candlestickTradeSetup,
193
+ candlestickHighlight,
148
194
  },
149
195
  meta: buildOhlcvAnalysisMeta(rawBars, {
150
196
  title: parsed.data.title,