@continuumdao/continuum-node-sdk 1.3.37 → 1.3.38

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 (196) hide show
  1. package/dist/agent-host-catalog.json +9 -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 +33 -4
  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 +47 -1
  7. package/dist/core/chart/analysis/analysis-catalog.js.map +1 -1
  8. package/dist/core/chart/analysis/analyze-tools.d.ts +167 -11
  9. package/dist/core/chart/analysis/analyze-tools.d.ts.map +1 -1
  10. package/dist/core/chart/analysis/analyze-tools.js +47 -55
  11. package/dist/core/chart/analysis/analyze-tools.js.map +1 -1
  12. package/dist/core/chart/analysis/divergence/detect.d.ts +21 -0
  13. package/dist/core/chart/analysis/divergence/detect.d.ts.map +1 -0
  14. package/dist/core/chart/analysis/divergence/detect.js +223 -0
  15. package/dist/core/chart/analysis/divergence/detect.js.map +1 -0
  16. package/dist/core/chart/analysis/divergence/index.d.ts +4 -0
  17. package/dist/core/chart/analysis/divergence/index.d.ts.map +1 -0
  18. package/dist/core/chart/analysis/divergence/index.js +4 -0
  19. package/dist/core/chart/analysis/divergence/index.js.map +1 -0
  20. package/dist/core/chart/analysis/divergence/peaks.d.ts +11 -0
  21. package/dist/core/chart/analysis/divergence/peaks.d.ts.map +1 -0
  22. package/dist/core/chart/analysis/divergence/peaks.js +108 -0
  23. package/dist/core/chart/analysis/divergence/peaks.js.map +1 -0
  24. package/dist/core/chart/analysis/divergence/types.d.ts +30 -0
  25. package/dist/core/chart/analysis/divergence/types.d.ts.map +1 -0
  26. package/dist/core/chart/analysis/divergence/types.js +2 -0
  27. package/dist/core/chart/analysis/divergence/types.js.map +1 -0
  28. package/dist/core/chart/analysis/divergence-analyze-tools.d.ts +239 -0
  29. package/dist/core/chart/analysis/divergence-analyze-tools.d.ts.map +1 -0
  30. package/dist/core/chart/analysis/divergence-analyze-tools.js +283 -0
  31. package/dist/core/chart/analysis/divergence-analyze-tools.js.map +1 -0
  32. package/dist/core/chart/analysis/divergence-drawings-tools.d.ts +457 -0
  33. package/dist/core/chart/analysis/divergence-drawings-tools.d.ts.map +1 -0
  34. package/dist/core/chart/analysis/divergence-drawings-tools.js +380 -0
  35. package/dist/core/chart/analysis/divergence-drawings-tools.js.map +1 -0
  36. package/dist/core/chart/analysis/divergence-highlight.d.ts +19 -0
  37. package/dist/core/chart/analysis/divergence-highlight.d.ts.map +1 -0
  38. package/dist/core/chart/analysis/divergence-highlight.js +39 -0
  39. package/dist/core/chart/analysis/divergence-highlight.js.map +1 -0
  40. package/dist/core/chart/analysis/donchian-analyze-tools.d.ts +113 -0
  41. package/dist/core/chart/analysis/donchian-analyze-tools.d.ts.map +1 -0
  42. package/dist/core/chart/analysis/donchian-analyze-tools.js +218 -0
  43. package/dist/core/chart/analysis/donchian-analyze-tools.js.map +1 -0
  44. package/dist/core/chart/analysis/donchian-highlight.d.ts +31 -0
  45. package/dist/core/chart/analysis/donchian-highlight.d.ts.map +1 -0
  46. package/dist/core/chart/analysis/donchian-highlight.js +41 -0
  47. package/dist/core/chart/analysis/donchian-highlight.js.map +1 -0
  48. package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts +33 -0
  49. package/dist/core/chart/analysis/elliott-waves-analyze-tools.d.ts.map +1 -1
  50. package/dist/core/chart/analysis/ichimoku-analyze-tools.d.ts +124 -0
  51. package/dist/core/chart/analysis/ichimoku-analyze-tools.d.ts.map +1 -0
  52. package/dist/core/chart/analysis/ichimoku-analyze-tools.js +243 -0
  53. package/dist/core/chart/analysis/ichimoku-analyze-tools.js.map +1 -0
  54. package/dist/core/chart/analysis/ichimoku-highlight.d.ts +36 -0
  55. package/dist/core/chart/analysis/ichimoku-highlight.d.ts.map +1 -0
  56. package/dist/core/chart/analysis/ichimoku-highlight.js +40 -0
  57. package/dist/core/chart/analysis/ichimoku-highlight.js.map +1 -0
  58. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts +2 -6
  59. package/dist/core/chart/analysis/key-fib-drawings-tools.d.ts.map +1 -1
  60. package/dist/core/chart/analysis/key-fib-drawings-tools.js +5 -17
  61. package/dist/core/chart/analysis/key-fib-drawings-tools.js.map +1 -1
  62. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts +3 -12
  63. package/dist/core/chart/analysis/key-level-drawings-shared.d.ts.map +1 -1
  64. package/dist/core/chart/analysis/key-level-drawings-shared.js +6 -36
  65. package/dist/core/chart/analysis/key-level-drawings-shared.js.map +1 -1
  66. package/dist/core/chart/analysis/key-level-menu-summary.d.ts +15 -22
  67. package/dist/core/chart/analysis/key-level-menu-summary.d.ts.map +1 -1
  68. package/dist/core/chart/analysis/key-level-menu-summary.js +63 -124
  69. package/dist/core/chart/analysis/key-level-menu-summary.js.map +1 -1
  70. package/dist/core/chart/analysis/key-levels-dataset.d.ts +1 -0
  71. package/dist/core/chart/analysis/key-levels-dataset.d.ts.map +1 -1
  72. package/dist/core/chart/analysis/key-levels-dataset.js +4 -7
  73. package/dist/core/chart/analysis/key-levels-dataset.js.map +1 -1
  74. package/dist/core/chart/analysis/supertrend-analyze-tools.d.ts +112 -0
  75. package/dist/core/chart/analysis/supertrend-analyze-tools.d.ts.map +1 -0
  76. package/dist/core/chart/analysis/supertrend-analyze-tools.js +214 -0
  77. package/dist/core/chart/analysis/supertrend-analyze-tools.js.map +1 -0
  78. package/dist/core/chart/analysis/supertrend-highlight.d.ts +25 -0
  79. package/dist/core/chart/analysis/supertrend-highlight.d.ts.map +1 -0
  80. package/dist/core/chart/analysis/supertrend-highlight.js +37 -0
  81. package/dist/core/chart/analysis/supertrend-highlight.js.map +1 -0
  82. package/dist/core/chart/analysis/trade-setups/build-trade.d.ts.map +1 -1
  83. package/dist/core/chart/analysis/trade-setups/build-trade.js +23 -5
  84. package/dist/core/chart/analysis/trade-setups/build-trade.js.map +1 -1
  85. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.d.ts +78 -0
  86. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.d.ts.map +1 -0
  87. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.js +184 -0
  88. package/dist/core/chart/analysis/trade-setups/divergence-trade-setup.js.map +1 -0
  89. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.d.ts +133 -0
  90. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.d.ts.map +1 -0
  91. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.js +419 -0
  92. package/dist/core/chart/analysis/trade-setups/donchian-trade-setup.js.map +1 -0
  93. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.d.ts +154 -0
  94. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.d.ts.map +1 -0
  95. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.js +396 -0
  96. package/dist/core/chart/analysis/trade-setups/ichimoku-trade-setup.js.map +1 -0
  97. package/dist/core/chart/analysis/trade-setups/index.d.ts +5 -0
  98. package/dist/core/chart/analysis/trade-setups/index.d.ts.map +1 -1
  99. package/dist/core/chart/analysis/trade-setups/index.js +5 -0
  100. package/dist/core/chart/analysis/trade-setups/index.js.map +1 -1
  101. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts +7 -41
  102. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.d.ts.map +1 -1
  103. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js +33 -235
  104. package/dist/core/chart/analysis/trade-setups/key-level-fib-retrace-trade-setup.js.map +1 -1
  105. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts +2 -8
  106. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.d.ts.map +1 -1
  107. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js +0 -27
  108. package/dist/core/chart/analysis/trade-setups/key-levels-trade-setup.js.map +1 -1
  109. package/dist/core/chart/analysis/trade-setups/shared.d.ts +1 -1
  110. package/dist/core/chart/analysis/trade-setups/shared.d.ts.map +1 -1
  111. package/dist/core/chart/analysis/trade-setups/shared.js +10 -0
  112. package/dist/core/chart/analysis/trade-setups/shared.js.map +1 -1
  113. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.d.ts +119 -0
  114. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.d.ts.map +1 -0
  115. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.js +301 -0
  116. package/dist/core/chart/analysis/trade-setups/supertrend-trade-setup.js.map +1 -0
  117. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.d.ts +34 -0
  118. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.d.ts.map +1 -1
  119. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.js +43 -0
  120. package/dist/core/chart/analysis/trade-setups/trade-desk-universal-input.js.map +1 -1
  121. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts +15 -0
  122. package/dist/core/chart/analysis/trade-setups/trade-idea-list.d.ts.map +1 -1
  123. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js +89 -0
  124. package/dist/core/chart/analysis/trade-setups/trade-idea-list.js.map +1 -1
  125. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts +32 -0
  126. package/dist/core/chart/analysis/trade-setups/trade-idea.d.ts.map +1 -1
  127. package/dist/core/chart/analysis/trade-setups/trade-idea.js +32 -0
  128. package/dist/core/chart/analysis/trade-setups/trade-idea.js.map +1 -1
  129. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts +2 -2
  130. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.d.ts.map +1 -1
  131. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js +2 -6
  132. package/dist/core/chart/analysis/trade-setups/trade-purpose-format.js.map +1 -1
  133. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.d.ts +42 -8
  134. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.d.ts.map +1 -1
  135. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.js +72 -17
  136. package/dist/core/chart/analysis/trade-setups/trade-setup-selection.js.map +1 -1
  137. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.d.ts +89 -0
  138. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.d.ts.map +1 -0
  139. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.js +195 -0
  140. package/dist/core/chart/analysis/trade-setups/z-score-trade-setup.js.map +1 -0
  141. package/dist/core/chart/analysis/z-score-analyze-tools.d.ts +111 -0
  142. package/dist/core/chart/analysis/z-score-analyze-tools.d.ts.map +1 -0
  143. package/dist/core/chart/analysis/z-score-analyze-tools.js +240 -0
  144. package/dist/core/chart/analysis/z-score-analyze-tools.js.map +1 -0
  145. package/dist/core/chart/analysis/z-score-highlight.d.ts +29 -0
  146. package/dist/core/chart/analysis/z-score-highlight.d.ts.map +1 -0
  147. package/dist/core/chart/analysis/z-score-highlight.js +39 -0
  148. package/dist/core/chart/analysis/z-score-highlight.js.map +1 -0
  149. package/dist/core/chart/customization-catalog.d.ts.map +1 -1
  150. package/dist/core/chart/customization-catalog.js +36 -0
  151. package/dist/core/chart/customization-catalog.js.map +1 -1
  152. package/dist/core/chart/display-downsample.d.ts.map +1 -1
  153. package/dist/core/chart/display-downsample.js +4 -14
  154. package/dist/core/chart/display-downsample.js.map +1 -1
  155. package/dist/core/chart/overlay-schemas.d.ts +496 -0
  156. package/dist/core/chart/overlay-schemas.d.ts.map +1 -1
  157. package/dist/core/chart/overlay-schemas.js +137 -0
  158. package/dist/core/chart/overlay-schemas.js.map +1 -1
  159. package/dist/core/chart/overlays.d.ts +2 -0
  160. package/dist/core/chart/overlays.d.ts.map +1 -1
  161. package/dist/core/chart/overlays.js +620 -2
  162. package/dist/core/chart/overlays.js.map +1 -1
  163. package/dist/core/chart/prepare-from-rows.d.ts +143 -0
  164. package/dist/core/chart/prepare-from-rows.d.ts.map +1 -1
  165. package/dist/core/chart/schemas.d.ts +491 -0
  166. package/dist/core/chart/schemas.d.ts.map +1 -1
  167. package/dist/core/coinmarketcap/schemas.d.ts +5 -5
  168. package/dist/mcp/agent-host-catalog.d.ts +1 -1
  169. package/dist/mcp/agent-host-catalog.d.ts.map +1 -1
  170. package/dist/mcp/agent-host-catalog.js +1 -0
  171. package/dist/mcp/agent-host-catalog.js.map +1 -1
  172. package/dist/mcp/chart.d.ts.map +1 -1
  173. package/dist/mcp/chart.js +61 -2
  174. package/dist/mcp/chart.js.map +1 -1
  175. package/dist/mcp/deferred/tool-group-map.d.ts.map +1 -1
  176. package/dist/mcp/deferred/tool-group-map.js +8 -0
  177. package/dist/mcp/deferred/tool-group-map.js.map +1 -1
  178. package/dist/mcp/ohlcv-session-wrapper.d.ts.map +1 -1
  179. package/dist/mcp/ohlcv-session-wrapper.js +8 -0
  180. package/dist/mcp/ohlcv-session-wrapper.js.map +1 -1
  181. package/dist/mcp/resources/chart-analysis.md +9 -0
  182. package/dist/mcp/resources/chart.md +3 -0
  183. package/dist/mcp/trade-tools.d.ts.map +1 -1
  184. package/dist/mcp/trade-tools.js +2 -0
  185. package/dist/mcp/trade-tools.js.map +1 -1
  186. package/package.json +1 -1
  187. package/dist/core/agent/mcp-servers-catalog.d.ts +0 -15
  188. package/dist/core/agent/mcp-servers-catalog.d.ts.map +0 -1
  189. package/dist/core/agent/mcp-servers-catalog.js +0 -125
  190. package/dist/core/agent/mcp-servers-catalog.js.map +0 -1
  191. package/dist/core/agent/webhooks-catalog.d.ts +0 -10
  192. package/dist/core/agent/webhooks-catalog.d.ts.map +0 -1
  193. package/dist/core/agent/webhooks-catalog.js +0 -19
  194. package/dist/core/agent/webhooks-catalog.js.map +0 -1
  195. package/dist/mcp/resources/trade-defaults-skill.md +0 -69
  196. package/dist/mcp/ta/resources/indicators.md +0 -86
@@ -0,0 +1,419 @@
1
+ import { isFiniteTradePrice } from './shared.js';
2
+ import { tradeDeskConfig, tradeDeskDefaultPcts } from './trade-desk-defaults.js';
3
+ export const DEFAULT_DONCHIAN_PERIOD = 20;
4
+ export const DEFAULT_DONCHIAN_ENTRY_MODE = 'retest';
5
+ export const DEFAULT_DONCHIAN_BREAK_LOOKBACK = 30;
6
+ /** Target = entry ± (multiple × ATR). Desk: universal.donchianTargetAtrMultiple. */
7
+ export const DEFAULT_DONCHIAN_TARGET_ATR_MULTIPLE = 3;
8
+ function withinPriceProximity(lastClose, entryPrice, proximityPct) {
9
+ if (!isFiniteTradePrice(lastClose) || !isFiniteTradePrice(entryPrice) || entryPrice === 0) {
10
+ return false;
11
+ }
12
+ return (Math.abs(lastClose - entryPrice) / Math.abs(entryPrice)) * 100 <= proximityPct;
13
+ }
14
+ function resolveTargetAtrMultiple(raw) {
15
+ if (raw != null && Number.isFinite(raw) && raw > 0) {
16
+ return raw;
17
+ }
18
+ return DEFAULT_DONCHIAN_TARGET_ATR_MULTIPLE;
19
+ }
20
+ /** Target = breakout entry ± (multiple × ATR); invalidation = Donchian mid. */
21
+ function donchianTargetAndInvalidation(input) {
22
+ if (input.status !== 'clear' || (input.side !== 'long' && input.side !== 'short')) {
23
+ return {};
24
+ }
25
+ const invalidationPrice = isFiniteTradePrice(input.middle) ? input.middle : undefined;
26
+ const invalidationLabel = invalidationPrice != null ? 'Donchian mid-channel' : undefined;
27
+ const atr = input.atr;
28
+ const multiple = input.targetAtrMultiple;
29
+ let targetPrice;
30
+ let targetLabel;
31
+ if (input.entryPrice != null &&
32
+ isFiniteTradePrice(input.entryPrice) &&
33
+ atr != null &&
34
+ Number.isFinite(atr) &&
35
+ atr > 0) {
36
+ const distance = multiple * atr;
37
+ targetPrice =
38
+ input.side === 'long' ? input.entryPrice + distance : input.entryPrice - distance;
39
+ targetLabel = `${multiple}× ATR from entry`;
40
+ }
41
+ return {
42
+ ...(targetPrice != null && targetLabel ? { targetPrice, targetLabel } : {}),
43
+ ...(invalidationPrice != null && invalidationLabel
44
+ ? { invalidationPrice, invalidationLabel }
45
+ : {}),
46
+ };
47
+ }
48
+ function baseSetupFields(input) {
49
+ const channelWidth = input.upper - input.lower;
50
+ return {
51
+ source: 'donchian_breakout',
52
+ entryMode: input.entryMode,
53
+ lastClose: input.lastClose,
54
+ upper: input.upper,
55
+ middle: input.middle,
56
+ lower: input.lower,
57
+ priorUpper: input.priorUpper,
58
+ priorLower: input.priorLower,
59
+ channelWidth,
60
+ period: input.period,
61
+ entryProximityPct: input.entryProximityPct,
62
+ entryOffsetPct: input.entryOffsetPct,
63
+ invalidationOffsetPct: input.invalidationOffsetPct,
64
+ targetAtrMultiple: input.targetAtrMultiple,
65
+ ...(input.atrAtLastBar != null && Number.isFinite(input.atrAtLastBar) && input.atrAtLastBar > 0
66
+ ? { atrAtLastBar: input.atrAtLastBar }
67
+ : {}),
68
+ };
69
+ }
70
+ export function buildImmediateDonchianSetup(input) {
71
+ const { lastClose, prevClose, upper, middle, lower, priorUpper, priorLower, period, } = input;
72
+ if (![lastClose, prevClose, upper, middle, lower, priorUpper, priorLower].every(isFiniteTradePrice) ||
73
+ upper <= lower ||
74
+ priorUpper <= priorLower) {
75
+ return null;
76
+ }
77
+ const desk = tradeDeskConfig({
78
+ entryProximityPct: input.entryProximityPct,
79
+ entryOffsetPct: input.entryOffsetPct,
80
+ invalidationOffsetPct: input.invalidationOffsetPct,
81
+ });
82
+ const targetAtrMultiple = resolveTargetAtrMultiple(input.targetAtrMultiple);
83
+ const atr = input.atr != null && Number.isFinite(input.atr) && input.atr > 0 ? input.atr : undefined;
84
+ const base = baseSetupFields({
85
+ lastClose,
86
+ upper,
87
+ middle,
88
+ lower,
89
+ priorUpper,
90
+ priorLower,
91
+ period,
92
+ entryMode: 'immediate',
93
+ entryProximityPct: desk.entryProximityPct,
94
+ entryOffsetPct: desk.entryOffsetPct,
95
+ invalidationOffsetPct: desk.invalidationOffsetPct,
96
+ atrAtLastBar: atr,
97
+ targetAtrMultiple,
98
+ });
99
+ const brokeLong = prevClose <= priorUpper && lastClose > priorUpper;
100
+ const brokeShort = prevClose >= priorLower && lastClose < priorLower;
101
+ const holdingLong = lastClose > priorUpper;
102
+ const holdingShort = lastClose < priorLower;
103
+ let side = 'neutral';
104
+ let brokeOnLastBar = false;
105
+ let status = 'unclear';
106
+ let confidence = 0.4;
107
+ let conditionalNote = 'No Donchian channel breakout — price inside prior channel.';
108
+ let unclearReason = 'No immediate Donchian breakout on the latest bar.';
109
+ if (brokeLong || (holdingLong && !holdingShort)) {
110
+ side = 'long';
111
+ brokeOnLastBar = brokeLong;
112
+ conditionalNote = brokeLong
113
+ ? 'Fresh bullish Donchian breakout above prior channel high.'
114
+ : 'Price holding above prior Donchian high — continuation long.';
115
+ const nearEntry = withinPriceProximity(lastClose, priorUpper, desk.entryProximityPct);
116
+ if (brokeLong || nearEntry) {
117
+ status = 'clear';
118
+ unclearReason = '';
119
+ confidence = brokeLong ? 0.58 : 0.5;
120
+ }
121
+ else {
122
+ unclearReason = `Price extended beyond prior high — not within ${desk.entryProximityPct}% of breakout entry.`;
123
+ }
124
+ }
125
+ else if (brokeShort || holdingShort) {
126
+ side = 'short';
127
+ brokeOnLastBar = brokeShort;
128
+ conditionalNote = brokeShort
129
+ ? 'Fresh bearish Donchian breakout below prior channel low.'
130
+ : 'Price holding below prior Donchian low — continuation short.';
131
+ const nearEntry = withinPriceProximity(lastClose, priorLower, desk.entryProximityPct);
132
+ if (brokeShort || nearEntry) {
133
+ status = 'clear';
134
+ unclearReason = '';
135
+ confidence = brokeShort ? 0.58 : 0.5;
136
+ }
137
+ else {
138
+ unclearReason = `Price extended beyond prior low — not within ${desk.entryProximityPct}% of breakout entry.`;
139
+ }
140
+ }
141
+ const entryPrice = status === 'clear' && side === 'long'
142
+ ? priorUpper
143
+ : status === 'clear' && side === 'short'
144
+ ? priorLower
145
+ : undefined;
146
+ const entryLabel = side === 'long' ? 'prior Donchian high' : side === 'short' ? 'prior Donchian low' : undefined;
147
+ const levels = donchianTargetAndInvalidation({
148
+ side,
149
+ status,
150
+ entryPrice,
151
+ middle,
152
+ atr,
153
+ targetAtrMultiple,
154
+ });
155
+ return {
156
+ ...base,
157
+ status,
158
+ setupPurposeCode: 'dc-brk',
159
+ invalidated: false,
160
+ side,
161
+ brokeOnLastBar,
162
+ entryOffsetMode: 'bounce',
163
+ conditionalNote,
164
+ confidence,
165
+ ...(entryPrice != null && entryLabel ? { entryPrice, entryLabel } : {}),
166
+ ...levels,
167
+ ...(unclearReason ? { unclearReason } : {}),
168
+ };
169
+ }
170
+ export function buildRetestDonchianSetup(input) {
171
+ const { closes, channels, lastClose, upper, middle, lower, priorUpper, priorLower, period } = input;
172
+ if (![lastClose, upper, middle, lower, priorUpper, priorLower].every(isFiniteTradePrice) ||
173
+ closes.length < 3 ||
174
+ channels.length !== closes.length) {
175
+ return null;
176
+ }
177
+ const desk = tradeDeskConfig({
178
+ entryProximityPct: input.entryProximityPct,
179
+ entryOffsetPct: input.entryOffsetPct,
180
+ invalidationOffsetPct: input.invalidationOffsetPct,
181
+ });
182
+ const targetAtrMultiple = resolveTargetAtrMultiple(input.targetAtrMultiple);
183
+ const atr = input.atr != null && Number.isFinite(input.atr) && input.atr > 0 ? input.atr : undefined;
184
+ const lookback = input.lookback ?? DEFAULT_DONCHIAN_BREAK_LOOKBACK;
185
+ const lastIndex = closes.length - 1;
186
+ const start = Math.max(period, lastIndex - lookback + 1);
187
+ let breakIndex = -1;
188
+ let side = 'neutral';
189
+ let brokenBand = 0;
190
+ for (let i = start; i <= lastIndex; i++) {
191
+ const prior = channels[i - 1];
192
+ const prevClose = closes[i - 1];
193
+ const curClose = closes[i];
194
+ if (prior == null ||
195
+ prevClose == null ||
196
+ curClose == null ||
197
+ !isFiniteTradePrice(prior.upper) ||
198
+ !isFiniteTradePrice(prior.lower)) {
199
+ continue;
200
+ }
201
+ if (prevClose <= prior.upper && curClose > prior.upper) {
202
+ breakIndex = i;
203
+ side = 'long';
204
+ brokenBand = prior.upper;
205
+ }
206
+ else if (prevClose >= prior.lower && curClose < prior.lower) {
207
+ breakIndex = i;
208
+ side = 'short';
209
+ brokenBand = prior.lower;
210
+ }
211
+ }
212
+ const base = baseSetupFields({
213
+ lastClose,
214
+ upper,
215
+ middle,
216
+ lower,
217
+ priorUpper,
218
+ priorLower,
219
+ period,
220
+ entryMode: 'retest',
221
+ entryProximityPct: desk.entryProximityPct,
222
+ entryOffsetPct: desk.entryOffsetPct,
223
+ invalidationOffsetPct: desk.invalidationOffsetPct,
224
+ atrAtLastBar: atr,
225
+ targetAtrMultiple,
226
+ });
227
+ if (breakIndex < 0 || side === 'neutral') {
228
+ return {
229
+ ...base,
230
+ status: 'unclear',
231
+ setupPurposeCode: 'dc-ret',
232
+ invalidated: false,
233
+ side: 'neutral',
234
+ brokeOnLastBar: false,
235
+ entryOffsetMode: 'retest',
236
+ conditionalNote: 'No recent Donchian breakout to retest.',
237
+ confidence: 0.35,
238
+ unclearReason: 'No channel break found in lookback — wait for breakout then retest.',
239
+ };
240
+ }
241
+ const brokeOnLastBar = breakIndex === lastIndex;
242
+ const nearBand = withinPriceProximity(lastClose, brokenBand, desk.entryProximityPct);
243
+ let invalidated = false;
244
+ if (side === 'long' && lastClose < brokenBand) {
245
+ invalidated = true;
246
+ }
247
+ else if (side === 'short' && lastClose > brokenBand) {
248
+ invalidated = true;
249
+ }
250
+ let status = 'unclear';
251
+ let confidence = 0.42;
252
+ let conditionalNote = side === 'long'
253
+ ? 'Bullish Donchian break occurred — wait for retest of broken high.'
254
+ : 'Bearish Donchian break occurred — wait for retest of broken low.';
255
+ let unclearReason = conditionalNote;
256
+ if (invalidated) {
257
+ status = 'unclear';
258
+ conditionalNote =
259
+ side === 'long'
260
+ ? 'Retest failed — price closed back below broken Donchian high.'
261
+ : 'Retest failed — price closed back above broken Donchian low.';
262
+ unclearReason = conditionalNote;
263
+ }
264
+ else if (!brokeOnLastBar && nearBand) {
265
+ status = 'clear';
266
+ unclearReason = '';
267
+ confidence = 0.56;
268
+ conditionalNote =
269
+ side === 'long'
270
+ ? 'Post-breakout retest of Donchian high — long entry.'
271
+ : 'Post-breakout retest of Donchian low — short entry.';
272
+ }
273
+ else if (brokeOnLastBar) {
274
+ unclearReason = 'Fresh breakout on last bar — wait for pullback retest of the broken band.';
275
+ conditionalNote = unclearReason;
276
+ }
277
+ else {
278
+ unclearReason = `Price not within ${desk.entryProximityPct}% of broken band for retest entry.`;
279
+ conditionalNote = unclearReason;
280
+ }
281
+ const entryPrice = status === 'clear' ? brokenBand : undefined;
282
+ const entryLabel = side === 'long' ? 'broken Donchian high' : side === 'short' ? 'broken Donchian low' : undefined;
283
+ const levels = donchianTargetAndInvalidation({
284
+ side,
285
+ status,
286
+ entryPrice,
287
+ middle,
288
+ atr,
289
+ targetAtrMultiple,
290
+ });
291
+ return {
292
+ ...base,
293
+ status,
294
+ setupPurposeCode: 'dc-ret',
295
+ invalidated,
296
+ side,
297
+ brokeOnLastBar,
298
+ breakBarIndex: breakIndex,
299
+ entryOffsetMode: 'retest',
300
+ conditionalNote,
301
+ confidence,
302
+ ...(entryPrice != null && entryLabel ? { entryPrice, entryLabel } : {}),
303
+ ...levels,
304
+ ...(unclearReason ? { unclearReason } : {}),
305
+ };
306
+ }
307
+ export function buildDonchianTradeSetup(input) {
308
+ const { closes, channels, period } = input;
309
+ if (closes.length < period + 1 || channels.length !== closes.length) {
310
+ return null;
311
+ }
312
+ const lastIndex = closes.length - 1;
313
+ const lastClose = closes[lastIndex];
314
+ const prevClose = closes[lastIndex - 1];
315
+ const current = channels[lastIndex];
316
+ const prior = channels[lastIndex - 1];
317
+ if (current == null || prior == null) {
318
+ return null;
319
+ }
320
+ const entryMode = input.entryMode ?? DEFAULT_DONCHIAN_ENTRY_MODE;
321
+ const deskPcts = tradeDeskDefaultPcts({
322
+ entryProximityPct: input.entryProximityPct,
323
+ entryOffsetPct: input.entryOffsetPct,
324
+ invalidationOffsetPct: input.invalidationOffsetPct,
325
+ });
326
+ const atrLevels = {
327
+ atr: input.atr,
328
+ targetAtrMultiple: resolveTargetAtrMultiple(input.targetAtrMultiple),
329
+ };
330
+ const immediate = buildImmediateDonchianSetup({
331
+ lastClose,
332
+ prevClose,
333
+ upper: current.upper,
334
+ middle: current.middle,
335
+ lower: current.lower,
336
+ priorUpper: prior.upper,
337
+ priorLower: prior.lower,
338
+ period,
339
+ ...deskPcts,
340
+ ...atrLevels,
341
+ });
342
+ const retest = buildRetestDonchianSetup({
343
+ closes,
344
+ channels,
345
+ lastClose,
346
+ upper: current.upper,
347
+ middle: current.middle,
348
+ lower: current.lower,
349
+ priorUpper: prior.upper,
350
+ priorLower: prior.lower,
351
+ period,
352
+ ...deskPcts,
353
+ ...atrLevels,
354
+ });
355
+ if (entryMode === 'immediate') {
356
+ if (!immediate) {
357
+ return retest;
358
+ }
359
+ return {
360
+ ...immediate,
361
+ breakRetestAlternative: retest,
362
+ immediateAlternative: null,
363
+ };
364
+ }
365
+ if (!retest) {
366
+ return immediate;
367
+ }
368
+ return {
369
+ ...retest,
370
+ immediateAlternative: immediate,
371
+ breakRetestAlternative: null,
372
+ };
373
+ }
374
+ export function donchianTradeIdeaContextFromSetup(setup) {
375
+ return {
376
+ period: setup.period,
377
+ entryMode: setup.entryMode,
378
+ setupPurposeCode: setup.setupPurposeCode,
379
+ channelWidth: setup.channelWidth,
380
+ upper: setup.upper,
381
+ middle: setup.middle,
382
+ lower: setup.lower,
383
+ priorUpper: setup.priorUpper,
384
+ priorLower: setup.priorLower,
385
+ invalidated: setup.invalidated,
386
+ entryProximityPct: setup.entryProximityPct,
387
+ entryOffsetPct: setup.entryOffsetPct,
388
+ invalidationOffsetPct: setup.invalidationOffsetPct,
389
+ targetAtrMultiple: setup.targetAtrMultiple,
390
+ ...(setup.atrAtLastBar != null ? { atrAtLastBar: setup.atrAtLastBar } : {}),
391
+ };
392
+ }
393
+ export function normalizeDonchianTradeSetup(setup) {
394
+ return {
395
+ status: setup.status,
396
+ side: setup.side,
397
+ confidence: setup.confidence,
398
+ lastClose: setup.lastClose,
399
+ entry: setup.status === 'clear' &&
400
+ setup.side !== 'neutral' &&
401
+ setup.entryPrice != null &&
402
+ isFiniteTradePrice(setup.entryPrice)
403
+ ? { price: setup.entryPrice, label: setup.entryLabel ?? 'Donchian entry' }
404
+ : undefined,
405
+ ...(setup.targetPrice != null && isFiniteTradePrice(setup.targetPrice)
406
+ ? { target: { price: setup.targetPrice, label: setup.targetLabel ?? 'Donchian target' } }
407
+ : {}),
408
+ ...(setup.invalidationPrice != null && isFiniteTradePrice(setup.invalidationPrice)
409
+ ? {
410
+ invalidation: {
411
+ price: setup.invalidationPrice,
412
+ label: setup.invalidationLabel ?? 'Donchian invalidation',
413
+ },
414
+ }
415
+ : {}),
416
+ unclearReason: setup.unclearReason,
417
+ };
418
+ }
419
+ //# sourceMappingURL=donchian-trade-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"donchian-trade-setup.js","sourceRoot":"","sources":["../../../../../src/core/chart/analysis/trade-setups/donchian-trade-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ import type { EntryOffsetMode } from './pattern-limit-entry.js';
2
+ import type { TradeSetupSide, TradeSetupStatus } from './shared.js';
3
+ export declare const DEFAULT_ICHIMOKU_CONVERSION_PERIOD = 9;
4
+ export declare const DEFAULT_ICHIMOKU_BASE_PERIOD = 26;
5
+ export declare const DEFAULT_ICHIMOKU_SPAN_PERIOD = 52;
6
+ export declare const DEFAULT_ICHIMOKU_DISPLACEMENT = 26;
7
+ export declare const DEFAULT_ICHIMOKU_TARGET_ATR_MULTIPLE = 3;
8
+ export declare const DEFAULT_ICHIMOKU_CROSS_LOOKBACK = 5;
9
+ export type IchimokuStrategy = 'tk_cross' | 'cloud';
10
+ export type IchimokuPoint = {
11
+ conversion: number;
12
+ base: number;
13
+ spanA: number;
14
+ spanB: number;
15
+ };
16
+ export type IchimokuTradeSetup = {
17
+ status: TradeSetupStatus;
18
+ source: 'ichimoku';
19
+ strategy: IchimokuStrategy;
20
+ lastClose: number;
21
+ conversion: number;
22
+ base: number;
23
+ /** Cloud at current bar (spans computed displacement bars ago). */
24
+ cloudTop: number;
25
+ cloudBottom: number;
26
+ spanA: number;
27
+ spanB: number;
28
+ conversionPeriod: number;
29
+ basePeriod: number;
30
+ spanPeriod: number;
31
+ displacement: number;
32
+ tkState: 'bullish' | 'bearish' | 'flat';
33
+ cloudPosition: 'above' | 'below' | 'inside';
34
+ entryProximityPct: number;
35
+ entryOffsetMode: EntryOffsetMode;
36
+ entryOffsetPct: number;
37
+ invalidationOffsetPct: number;
38
+ atrAtLastBar?: number;
39
+ targetAtrMultiple: number;
40
+ setupPurposeCode: string;
41
+ invalidated: boolean;
42
+ side: TradeSetupSide;
43
+ barsSinceTkCross: number | null;
44
+ entryPrice?: number;
45
+ entryLabel?: string;
46
+ targetPrice?: number;
47
+ targetLabel?: string;
48
+ invalidationPrice?: number;
49
+ invalidationLabel?: string;
50
+ conditionalNote: string;
51
+ confidence: number;
52
+ unclearReason?: string;
53
+ tkCrossAlternative?: IchimokuTradeSetup | null;
54
+ cloudAlternative?: IchimokuTradeSetup | null;
55
+ };
56
+ /** Current-bar cloud uses spans from barIndex - displacement (classic plot alignment). */
57
+ export declare function currentCloudFromPoints(points: Array<IchimokuPoint | null>, displacement: number): {
58
+ spanA: number;
59
+ spanB: number;
60
+ top: number;
61
+ bottom: number;
62
+ } | null;
63
+ export declare function buildTkCrossIchimokuSetup(input: {
64
+ lastClose: number;
65
+ conversion: number;
66
+ base: number;
67
+ cloudTop: number;
68
+ cloudBottom: number;
69
+ spanA: number;
70
+ spanB: number;
71
+ barsSinceTkCross: number | null;
72
+ conversionPeriod: number;
73
+ basePeriod: number;
74
+ spanPeriod: number;
75
+ displacement: number;
76
+ entryProximityPct?: number;
77
+ entryOffsetPct?: number;
78
+ invalidationOffsetPct?: number;
79
+ atr?: number | null;
80
+ targetAtrMultiple?: number;
81
+ crossLookback?: number;
82
+ }): IchimokuTradeSetup | null;
83
+ export declare function buildCloudIchimokuSetup(input: {
84
+ lastClose: number;
85
+ conversion: number;
86
+ base: number;
87
+ cloudTop: number;
88
+ cloudBottom: number;
89
+ spanA: number;
90
+ spanB: number;
91
+ barsSinceTkCross: number | null;
92
+ conversionPeriod: number;
93
+ basePeriod: number;
94
+ spanPeriod: number;
95
+ displacement: number;
96
+ entryProximityPct?: number;
97
+ entryOffsetPct?: number;
98
+ invalidationOffsetPct?: number;
99
+ atr?: number | null;
100
+ targetAtrMultiple?: number;
101
+ }): IchimokuTradeSetup | null;
102
+ export declare function buildIchimokuTradeSetup(input: {
103
+ closes: number[];
104
+ points: Array<IchimokuPoint | null>;
105
+ conversionPeriod: number;
106
+ basePeriod: number;
107
+ spanPeriod: number;
108
+ displacement: number;
109
+ /** Prefer tk_cross as primary (default); cloud as alternate. */
110
+ primaryStrategy?: IchimokuStrategy;
111
+ entryProximityPct?: number;
112
+ entryOffsetPct?: number;
113
+ invalidationOffsetPct?: number;
114
+ atr?: number | null;
115
+ targetAtrMultiple?: number;
116
+ }): IchimokuTradeSetup | null;
117
+ export type IchimokuTradeIdeaContext = {
118
+ conversionPeriod: number;
119
+ basePeriod: number;
120
+ spanPeriod: number;
121
+ displacement: number;
122
+ strategy: IchimokuStrategy;
123
+ setupPurposeCode: string;
124
+ tkState: 'bullish' | 'bearish' | 'flat';
125
+ cloudPosition: 'above' | 'below' | 'inside';
126
+ cloudTop: number;
127
+ cloudBottom: number;
128
+ entryProximityPct: number;
129
+ entryOffsetPct: number;
130
+ invalidationOffsetPct: number;
131
+ atrAtLastBar?: number;
132
+ targetAtrMultiple: number;
133
+ };
134
+ export declare function ichimokuTradeIdeaContextFromSetup(setup: IchimokuTradeSetup): IchimokuTradeIdeaContext;
135
+ export declare function normalizeIchimokuTradeSetup(setup: IchimokuTradeSetup): {
136
+ unclearReason: string | undefined;
137
+ invalidation?: {
138
+ price: number;
139
+ label: string;
140
+ } | undefined;
141
+ target?: {
142
+ price: number;
143
+ label: string;
144
+ } | undefined;
145
+ status: TradeSetupStatus;
146
+ side: TradeSetupSide;
147
+ confidence: number;
148
+ lastClose: number;
149
+ entry: {
150
+ price: number;
151
+ label: string;
152
+ } | undefined;
153
+ };
154
+ //# sourceMappingURL=ichimoku-trade-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ichimoku-trade-setup.d.ts","sourceRoot":"","sources":["../../../../../src/core/chart/analysis/trade-setups/ichimoku-trade-setup.ts"],"names":[],"mappings":"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"}