@363045841yyt/klinechart-core 0.7.3 → 0.7.5

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 (247) hide show
  1. package/README.md +201 -201
  2. package/README.zh-CN.md +201 -201
  3. package/dist/controllers/index.d.ts +1 -0
  4. package/dist/controllers/index.d.ts.map +1 -1
  5. package/dist/controllers/index.js +1 -0
  6. package/dist/controllers/index.js.map +1 -1
  7. package/dist/engine/chart.d.ts +11 -19
  8. package/dist/engine/chart.d.ts.map +1 -1
  9. package/dist/engine/chart.js +92 -109
  10. package/dist/engine/chart.js.map +1 -1
  11. package/dist/engine/renderers/Indicator/indicatorData.d.ts +1 -0
  12. package/dist/engine/renderers/Indicator/indicatorData.d.ts.map +1 -1
  13. package/dist/engine/renderers/Indicator/indicatorData.js +1 -1
  14. package/dist/engine/renderers/Indicator/indicatorData.js.map +1 -1
  15. package/dist/engine/renderers/webgl/candleSurface.js +47 -47
  16. package/dist/engine/subPaneManager.d.ts +4 -0
  17. package/dist/engine/subPaneManager.d.ts.map +1 -1
  18. package/dist/engine/subPaneManager.js +13 -0
  19. package/dist/engine/subPaneManager.js.map +1 -1
  20. package/dist/version.d.ts +1 -1
  21. package/dist/version.d.ts.map +1 -1
  22. package/dist/version.js +1 -2
  23. package/dist/version.js.map +1 -1
  24. package/package.json +129 -122
  25. package/src/__tests__/signal.test.ts +124 -124
  26. package/src/config/chartSettings.ts +66 -66
  27. package/src/controllers/__tests__/drawing.test.ts +214 -214
  28. package/src/controllers/__tests__/indicatorSelector.test.ts +481 -481
  29. package/src/controllers/__tests__/toolbar.test.ts +225 -225
  30. package/src/controllers/createChartController.ts +665 -665
  31. package/src/controllers/createDrawingController.ts +96 -96
  32. package/src/controllers/createIndicatorSelectorController.ts +307 -307
  33. package/src/controllers/createToolbarController.ts +146 -146
  34. package/src/controllers/index.ts +20 -19
  35. package/src/controllers/types.ts +284 -284
  36. package/src/engine/__tests__/chart.dpr.test.ts +401 -401
  37. package/src/engine/__tests__/paneRenderer.resize.test.ts +92 -92
  38. package/src/engine/chart-store.ts +121 -121
  39. package/src/engine/chart.d.ts +617 -617
  40. package/src/engine/chart.ts +2803 -2815
  41. package/src/engine/controller/__tests__/interaction.dpr.test.ts +259 -259
  42. package/src/engine/controller/interaction.ts +722 -722
  43. package/src/engine/controller/markerInteraction.ts +130 -130
  44. package/src/engine/controller/pinchTracker.ts +82 -82
  45. package/src/engine/controller/tooltipPosition.ts +48 -48
  46. package/src/engine/draw/__tests__/pixelAlign.spec.ts +176 -176
  47. package/src/engine/draw/pixelAlign.ts +259 -259
  48. package/src/engine/drawing/index.ts +655 -655
  49. package/src/engine/drawing/interaction.ts +842 -842
  50. package/src/engine/drawing/plugin.ts +343 -343
  51. package/src/engine/indicators/__tests__/__fixtures__/golden/atr.json +38 -38
  52. package/src/engine/indicators/__tests__/__fixtures__/golden/dema.json +14 -14
  53. package/src/engine/indicators/__tests__/__fixtures__/golden/hma.json +14 -14
  54. package/src/engine/indicators/__tests__/__fixtures__/golden/index.ts +55 -55
  55. package/src/engine/indicators/__tests__/__fixtures__/golden/kama.json +14 -14
  56. package/src/engine/indicators/__tests__/__fixtures__/golden/tema.json +14 -14
  57. package/src/engine/indicators/__tests__/__fixtures__/golden/wma.json +40 -40
  58. package/src/engine/indicators/__tests__/__fixtures__/synthetic.ts +65 -65
  59. package/src/engine/indicators/__tests__/_propertyAssertions.ts +76 -76
  60. package/src/engine/indicators/__tests__/atr.test.ts +153 -153
  61. package/src/engine/indicators/__tests__/calculators.test.ts +614 -614
  62. package/src/engine/indicators/__tests__/cmf-mfi.test.ts +100 -100
  63. package/src/engine/indicators/__tests__/dema.test.ts +73 -73
  64. package/src/engine/indicators/__tests__/donchian.test.ts +70 -70
  65. package/src/engine/indicators/__tests__/hma.test.ts +73 -73
  66. package/src/engine/indicators/__tests__/ichimoku.test.ts +105 -105
  67. package/src/engine/indicators/__tests__/kama.test.ts +80 -80
  68. package/src/engine/indicators/__tests__/keltner.test.ts +65 -65
  69. package/src/engine/indicators/__tests__/pivot-fib.test.ts +110 -110
  70. package/src/engine/indicators/__tests__/roc.test.ts +68 -68
  71. package/src/engine/indicators/__tests__/sar.test.ts +86 -86
  72. package/src/engine/indicators/__tests__/scheduler.test.ts +831 -831
  73. package/src/engine/indicators/__tests__/soa.test.ts +533 -533
  74. package/src/engine/indicators/__tests__/structure.test.ts +110 -110
  75. package/src/engine/indicators/__tests__/supertrend.test.ts +65 -65
  76. package/src/engine/indicators/__tests__/tema.test.ts +68 -68
  77. package/src/engine/indicators/__tests__/trix.test.ts +70 -70
  78. package/src/engine/indicators/__tests__/volatility.test.ts +117 -117
  79. package/src/engine/indicators/__tests__/volume.test.ts +115 -115
  80. package/src/engine/indicators/__tests__/volumeProfile.test.ts +74 -74
  81. package/src/engine/indicators/__tests__/vwap.test.ts +69 -69
  82. package/src/engine/indicators/__tests__/wma.test.ts +112 -112
  83. package/src/engine/indicators/__tests__/zones.test.ts +95 -95
  84. package/src/engine/indicators/atrState.ts +27 -27
  85. package/src/engine/indicators/bollState.ts +51 -51
  86. package/src/engine/indicators/calculators.ts +2593 -2593
  87. package/src/engine/indicators/cciState.ts +25 -25
  88. package/src/engine/indicators/chaikinVolState.ts +32 -32
  89. package/src/engine/indicators/cmfState.ts +27 -27
  90. package/src/engine/indicators/demaState.ts +27 -27
  91. package/src/engine/indicators/donchianState.ts +43 -43
  92. package/src/engine/indicators/eneState.ts +43 -43
  93. package/src/engine/indicators/expmaState.ts +43 -43
  94. package/src/engine/indicators/fastkState.ts +25 -25
  95. package/src/engine/indicators/fibState.ts +41 -41
  96. package/src/engine/indicators/hmaState.ts +27 -27
  97. package/src/engine/indicators/hvState.ts +28 -28
  98. package/src/engine/indicators/ichimokuState.ts +70 -70
  99. package/src/engine/indicators/indicator.worker.ts +169 -169
  100. package/src/engine/indicators/indicatorDefinitionRegistry.ts +62 -62
  101. package/src/engine/indicators/indicatorMetadata.ts +110 -110
  102. package/src/engine/indicators/indicatorRegistry.ts +106 -106
  103. package/src/engine/indicators/indicatorRuntime.ts +1548 -1548
  104. package/src/engine/indicators/kamaState.ts +34 -34
  105. package/src/engine/indicators/keltnerState.ts +49 -49
  106. package/src/engine/indicators/kstState.ts +42 -42
  107. package/src/engine/indicators/maState.ts +36 -36
  108. package/src/engine/indicators/macdState.ts +76 -76
  109. package/src/engine/indicators/mfiState.ts +27 -27
  110. package/src/engine/indicators/momState.ts +25 -25
  111. package/src/engine/indicators/obvState.ts +25 -25
  112. package/src/engine/indicators/parkinsonState.ts +28 -28
  113. package/src/engine/indicators/pivotState.ts +51 -51
  114. package/src/engine/indicators/pvtState.ts +25 -25
  115. package/src/engine/indicators/rocState.ts +27 -27
  116. package/src/engine/indicators/rsiState.ts +65 -65
  117. package/src/engine/indicators/sarState.ts +41 -41
  118. package/src/engine/indicators/scheduler.ts +1205 -1205
  119. package/src/engine/indicators/soa.ts +352 -352
  120. package/src/engine/indicators/stateComposer.ts +1262 -1262
  121. package/src/engine/indicators/stochState.ts +26 -26
  122. package/src/engine/indicators/structureState.ts +69 -69
  123. package/src/engine/indicators/supertrendState.ts +37 -37
  124. package/src/engine/indicators/temaState.ts +27 -27
  125. package/src/engine/indicators/trixState.ts +35 -35
  126. package/src/engine/indicators/vmaState.ts +27 -27
  127. package/src/engine/indicators/volumeProfileState.ts +63 -63
  128. package/src/engine/indicators/vwapState.ts +29 -29
  129. package/src/engine/indicators/wmaState.ts +27 -27
  130. package/src/engine/indicators/wmsrState.ts +25 -25
  131. package/src/engine/indicators/workerProtocol.ts +613 -613
  132. package/src/engine/indicators/zonesState.ts +47 -47
  133. package/src/engine/layout/pane.ts +161 -161
  134. package/src/engine/marker/registry.ts +265 -265
  135. package/src/engine/paneRenderer.ts +169 -169
  136. package/src/engine/renderers/Indicator/atr.ts +237 -237
  137. package/src/engine/renderers/Indicator/boll.ts +317 -317
  138. package/src/engine/renderers/Indicator/cci.ts +275 -275
  139. package/src/engine/renderers/Indicator/chaikinVol.ts +138 -138
  140. package/src/engine/renderers/Indicator/cmf.ts +137 -137
  141. package/src/engine/renderers/Indicator/dema.ts +136 -136
  142. package/src/engine/renderers/Indicator/donchian.ts +137 -137
  143. package/src/engine/renderers/Indicator/ene.ts +271 -271
  144. package/src/engine/renderers/Indicator/expma.ts +197 -197
  145. package/src/engine/renderers/Indicator/fastk.ts +316 -316
  146. package/src/engine/renderers/Indicator/fib.ts +141 -141
  147. package/src/engine/renderers/Indicator/hma.ts +136 -136
  148. package/src/engine/renderers/Indicator/hv.ts +124 -124
  149. package/src/engine/renderers/Indicator/ichimoku.ts +181 -181
  150. package/src/engine/renderers/Indicator/index.ts +241 -241
  151. package/src/engine/renderers/Indicator/indicatorData.ts +650 -650
  152. package/src/engine/renderers/Indicator/kama.ts +136 -136
  153. package/src/engine/renderers/Indicator/keltner.ts +137 -137
  154. package/src/engine/renderers/Indicator/kst.ts +302 -302
  155. package/src/engine/renderers/Indicator/ma.ts +200 -200
  156. package/src/engine/renderers/Indicator/macd.ts +477 -477
  157. package/src/engine/renderers/Indicator/macdLegend.ts +141 -141
  158. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +272 -272
  159. package/src/engine/renderers/Indicator/mfi.ts +142 -142
  160. package/src/engine/renderers/Indicator/mom.ts +311 -311
  161. package/src/engine/renderers/Indicator/obv.ts +123 -123
  162. package/src/engine/renderers/Indicator/parkinson.ts +124 -124
  163. package/src/engine/renderers/Indicator/pivot.ts +131 -131
  164. package/src/engine/renderers/Indicator/pvt.ts +123 -123
  165. package/src/engine/renderers/Indicator/roc.ts +143 -143
  166. package/src/engine/renderers/Indicator/rsi.ts +390 -390
  167. package/src/engine/renderers/Indicator/sar.ts +113 -113
  168. package/src/engine/renderers/Indicator/scale/atr_scale.ts +19 -19
  169. package/src/engine/renderers/Indicator/scale/cci_scale.ts +19 -19
  170. package/src/engine/renderers/Indicator/scale/fastk_scale.ts +19 -19
  171. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +204 -204
  172. package/src/engine/renderers/Indicator/scale/kst_scale.ts +19 -19
  173. package/src/engine/renderers/Indicator/scale/macd_scale.ts +22 -22
  174. package/src/engine/renderers/Indicator/scale/mom_scale.ts +19 -19
  175. package/src/engine/renderers/Indicator/scale/rsi_scale.ts +19 -19
  176. package/src/engine/renderers/Indicator/scale/stoch_scale.ts +19 -19
  177. package/src/engine/renderers/Indicator/scale/volume_scale.ts +26 -26
  178. package/src/engine/renderers/Indicator/scale/wmsr_scale.ts +19 -19
  179. package/src/engine/renderers/Indicator/stoch.ts +359 -359
  180. package/src/engine/renderers/Indicator/structure.ts +126 -126
  181. package/src/engine/renderers/Indicator/subPaneConfig.ts +265 -265
  182. package/src/engine/renderers/Indicator/supertrend.ts +115 -115
  183. package/src/engine/renderers/Indicator/tema.ts +136 -136
  184. package/src/engine/renderers/Indicator/trix.ts +158 -158
  185. package/src/engine/renderers/Indicator/vma.ts +124 -124
  186. package/src/engine/renderers/Indicator/volumeProfile.ts +125 -125
  187. package/src/engine/renderers/Indicator/vwap.ts +123 -123
  188. package/src/engine/renderers/Indicator/wma.ts +136 -136
  189. package/src/engine/renderers/Indicator/wmsr.ts +328 -328
  190. package/src/engine/renderers/Indicator/zones.ts +104 -104
  191. package/src/engine/renderers/__tests__/boll.renderer.test.ts +314 -314
  192. package/src/engine/renderers/__tests__/ene.renderer.test.ts +305 -305
  193. package/src/engine/renderers/__tests__/expma.renderer.test.ts +279 -279
  194. package/src/engine/renderers/__tests__/ma.renderer.test.ts +426 -426
  195. package/src/engine/renderers/__tests__/mainIndicatorLegend.renderer.test.ts +502 -502
  196. package/src/engine/renderers/__tests__/yAxis.renderer.test.ts +173 -173
  197. package/src/engine/renderers/candle.ts +459 -459
  198. package/src/engine/renderers/crosshair.ts +69 -69
  199. package/src/engine/renderers/customMarkers.ts +162 -162
  200. package/src/engine/renderers/extremaMarkers.ts +246 -246
  201. package/src/engine/renderers/gridLines.ts +90 -90
  202. package/src/engine/renderers/lastPrice.ts +97 -97
  203. package/src/engine/renderers/paneTitle.ts +136 -136
  204. package/src/engine/renderers/subVolume.ts +236 -236
  205. package/src/engine/renderers/timeAxis.ts +121 -121
  206. package/src/engine/renderers/webgl/candleSurface.ts +955 -955
  207. package/src/engine/renderers/webgl/sharedWebGLSurface.ts +146 -146
  208. package/src/engine/renderers/yAxis.ts +105 -105
  209. package/src/engine/scale/__tests__/logFormula.spec.ts +148 -148
  210. package/src/engine/scale/logFormula.ts +130 -130
  211. package/src/engine/scale/price.ts +39 -39
  212. package/src/engine/scale/priceScale.ts +264 -264
  213. package/src/engine/subPaneManager.ts +442 -427
  214. package/src/engine/theme/colors.ts +642 -642
  215. package/src/engine/theme/fonts.ts +20 -20
  216. package/src/engine/utils/klineConfig.ts +49 -49
  217. package/src/engine/utils/tickCount.ts +11 -11
  218. package/src/engine/utils/tickPosition.ts +214 -214
  219. package/src/engine/utils/zoom.ts +83 -83
  220. package/src/engine/viewport/viewport.ts +67 -67
  221. package/src/index.ts +3 -3
  222. package/src/plugin/ConfigManager.ts +93 -93
  223. package/src/plugin/EventBus.ts +77 -77
  224. package/src/plugin/HookSystem.ts +106 -106
  225. package/src/plugin/PluginHost.ts +243 -243
  226. package/src/plugin/PluginRegistry.ts +92 -92
  227. package/src/plugin/StateStore.ts +73 -73
  228. package/src/plugin/index.ts +19 -19
  229. package/src/plugin/rendererPluginManager.ts +368 -368
  230. package/src/plugin/stateKeys.ts +8 -8
  231. package/src/plugin/types.ts +526 -526
  232. package/src/reactivity/index.ts +2 -2
  233. package/src/reactivity/signal.ts +119 -119
  234. package/src/semantic/controller.ts +251 -251
  235. package/src/semantic/drawShape.ts +260 -260
  236. package/src/semantic/index.ts +28 -28
  237. package/src/semantic/schema.json +256 -256
  238. package/src/semantic/types.ts +251 -251
  239. package/src/semantic/validator.ts +349 -349
  240. package/src/types/kLine.ts +13 -13
  241. package/src/types/price.ts +56 -56
  242. package/src/types/volumePrice.ts +33 -33
  243. package/src/utils/dateFormat.ts +208 -208
  244. package/src/utils/kLineDraw/axis.ts +562 -562
  245. package/src/utils/priceToY.ts +34 -34
  246. package/src/utils/volumePrice.ts +202 -202
  247. package/src/version.ts +1 -1
@@ -1,650 +1,650 @@
1
- export interface ParamConfig {
2
- key: string
3
- label: string
4
- type: 'number'
5
- min?: number
6
- max?: number
7
- step?: number
8
- default?: number
9
- description?: string
10
- }
11
-
12
- export interface Indicator {
13
- id: string
14
- label: string
15
- name: string
16
- pane: 'main' | 'sub'
17
- description?: string
18
- params?: ParamConfig[]
19
- }
20
-
21
- const allIndicators: Indicator[] = [
22
- { id: 'MA', label: 'MA', name: '均线', pane: 'main' },
23
- {
24
- id: 'VOLUME',
25
- label: 'VOL',
26
- name: '成交量',
27
- pane: 'sub',
28
- description:
29
- '成交量反映市场活跃度,柱状图显示每根K线的交易量。上涨时柱子为红色,下跌时为绿色。',
30
- },
31
- {
32
- id: 'BOLL',
33
- label: 'BOLL',
34
- name: '布林带',
35
- pane: 'main',
36
- description:
37
- '布林带由三条轨道线组成,用于判断价格的波动范围和趋势强度。价格触及上轨可能超买,触及下轨可能超卖。',
38
- params: [
39
- {
40
- key: 'period',
41
- label: '周期',
42
- type: 'number',
43
- min: 2,
44
- max: 100,
45
- step: 1,
46
- default: 20,
47
- description: '计算移动平均线的周期数,周期越长轨道越平滑',
48
- },
49
- {
50
- key: 'multiplier',
51
- label: '倍数',
52
- type: 'number',
53
- min: 0.1,
54
- max: 5,
55
- step: 0.1,
56
- default: 2,
57
- description: '标准差倍数,决定轨道宽度,通常为 2',
58
- },
59
- ],
60
- },
61
- {
62
- id: 'EXPMA',
63
- label: 'EXPMA',
64
- name: '指数平滑移动平均线',
65
- pane: 'main',
66
- description:
67
- 'EXPMA 对近期价格给予更高权重,比普通 MA 更敏感。快线上穿慢线为金叉看涨,下穿为死叉看跌。',
68
- params: [
69
- {
70
- key: 'fastPeriod',
71
- label: '快线',
72
- type: 'number',
73
- min: 2,
74
- max: 100,
75
- step: 1,
76
- default: 12,
77
- description: '快线周期,对价格变化更敏感',
78
- },
79
- {
80
- key: 'slowPeriod',
81
- label: '慢线',
82
- type: 'number',
83
- min: 2,
84
- max: 200,
85
- step: 1,
86
- default: 50,
87
- description: '慢线周期,用于判断趋势方向',
88
- },
89
- ],
90
- },
91
- {
92
- id: 'ENE',
93
- label: 'ENE',
94
- name: '轨道线',
95
- pane: 'main',
96
- description:
97
- 'ENE 轨道线由三条轨道组成,价格突破上轨可能超买,突破下轨可能超卖,适合判断震荡行情的买卖点。',
98
- params: [
99
- {
100
- key: 'period',
101
- label: '周期',
102
- type: 'number',
103
- min: 2,
104
- max: 100,
105
- step: 1,
106
- default: 10,
107
- description: '计算中轨的周期数',
108
- },
109
- {
110
- key: 'deviation',
111
- label: '偏离率',
112
- type: 'number',
113
- min: 1,
114
- max: 30,
115
- step: 0.5,
116
- default: 11,
117
- description: '轨道偏离率百分比,决定轨道宽度',
118
- },
119
- ],
120
- },
121
- {
122
- id: 'MACD',
123
- label: 'MACD',
124
- name: '指数平滑异同移动平均线',
125
- pane: 'sub',
126
- description:
127
- 'MACD 通过快慢均线的交叉判断趋势方向和动量。DIF 上穿 DEA 为金叉看涨,下穿为死叉看跌。',
128
- params: [
129
- {
130
- key: 'fastPeriod',
131
- label: '快线',
132
- type: 'number',
133
- min: 2,
134
- max: 50,
135
- step: 1,
136
- default: 12,
137
- description: '快线 EMA 周期,对价格变化更敏感',
138
- },
139
- {
140
- key: 'slowPeriod',
141
- label: '慢线',
142
- type: 'number',
143
- min: 2,
144
- max: 100,
145
- step: 1,
146
- default: 26,
147
- description: '慢线 EMA 周期,用于计算 DIF',
148
- },
149
- {
150
- key: 'signalPeriod',
151
- label: '信号',
152
- type: 'number',
153
- min: 2,
154
- max: 50,
155
- step: 1,
156
- default: 9,
157
- description: 'DEA 的 EMA 周期,用于生成买卖信号',
158
- },
159
- ],
160
- },
161
- {
162
- id: 'RSI',
163
- label: 'RSI',
164
- name: '相对强弱指标',
165
- pane: 'sub',
166
- description: 'RSI 衡量价格变动的速度和幅度,判断超买超卖状态。RSI > 70 超买,RSI < 30 超卖。',
167
- params: [
168
- {
169
- key: 'period1',
170
- label: '周期 1',
171
- type: 'number',
172
- min: 2,
173
- max: 100,
174
- step: 1,
175
- default: 6,
176
- description: '第一条 RSI 周期,通常为 6(快线)',
177
- },
178
- {
179
- key: 'period2',
180
- label: '周期 2',
181
- type: 'number',
182
- min: 2,
183
- max: 100,
184
- step: 1,
185
- default: 12,
186
- description: '第二条 RSI 周期,通常为 12(中线)',
187
- },
188
- {
189
- key: 'period3',
190
- label: '周期 3',
191
- type: 'number',
192
- min: 2,
193
- max: 100,
194
- step: 1,
195
- default: 24,
196
- description: '第三条 RSI 周期,通常为 24(慢线)',
197
- },
198
- ],
199
- },
200
- {
201
- id: 'CCI',
202
- label: 'CCI',
203
- name: '顺势指标',
204
- pane: 'sub',
205
- description:
206
- 'CCI 衡量价格与统计平均值的偏离程度。CCI > 100 超买,CCI < -100 超卖,适合捕捉趋势反转。',
207
- params: [
208
- {
209
- key: 'period',
210
- label: '周期',
211
- type: 'number',
212
- min: 2,
213
- max: 100,
214
- step: 1,
215
- default: 14,
216
- description: '计算周期,周期越短信号越灵敏',
217
- },
218
- ],
219
- },
220
- {
221
- id: 'STOCH',
222
- label: 'STOCH',
223
- name: '随机指标',
224
- pane: 'sub',
225
- description:
226
- 'KDJ 随机指标通过比较收盘价与价格区间判断超买超卖。K > 80 超买,K < 20 超卖,K 上穿 D 金叉。',
227
- params: [
228
- {
229
- key: 'n',
230
- label: 'K 周期',
231
- type: 'number',
232
- min: 2,
233
- max: 100,
234
- step: 1,
235
- default: 9,
236
- description: '计算 K 值的周期,统计 N 日内价格区间',
237
- },
238
- {
239
- key: 'm',
240
- label: 'D 周期',
241
- type: 'number',
242
- min: 1,
243
- max: 50,
244
- step: 1,
245
- default: 3,
246
- description: 'D 值是 K 的 M 日移动平均,使信号更平滑',
247
- },
248
- ],
249
- },
250
- {
251
- id: 'MOM',
252
- label: 'MOM',
253
- name: '动量指标',
254
- pane: 'sub',
255
- description:
256
- '动量指标衡量价格变化的速度,MOM > 0 表示上涨动能,MOM < 0 表示下跌动能。适合判断趋势强度。',
257
- params: [
258
- {
259
- key: 'period',
260
- label: '周期',
261
- type: 'number',
262
- min: 2,
263
- max: 100,
264
- step: 1,
265
- default: 10,
266
- description: '与多少日前价格比较,周期越短越灵敏',
267
- },
268
- ],
269
- },
270
- {
271
- id: 'WMSR',
272
- label: 'WMSR',
273
- name: '威廉指标',
274
- pane: 'sub',
275
- description: '威廉指标衡量超买超卖程度,范围为 -100 到 0。WMSR > -20 超买,WMSR < -80 超卖。',
276
- params: [
277
- {
278
- key: 'period',
279
- label: '周期',
280
- type: 'number',
281
- min: 2,
282
- max: 100,
283
- step: 1,
284
- default: 14,
285
- description: '回溯周期,统计周期内最高最低价',
286
- },
287
- ],
288
- },
289
- {
290
- id: 'KST',
291
- label: 'KST',
292
- name: '确然指标',
293
- pane: 'sub',
294
- description:
295
- 'KST 综合多个 ROC 判断长期趋势,KST 上穿信号线看涨,下穿看跌。适合捕捉主要趋势转换。',
296
- params: [
297
- {
298
- key: 'roc1',
299
- label: 'ROC1',
300
- type: 'number',
301
- min: 2,
302
- max: 100,
303
- step: 1,
304
- default: 10,
305
- description: '短期变化率周期',
306
- },
307
- {
308
- key: 'roc2',
309
- label: 'ROC2',
310
- type: 'number',
311
- min: 2,
312
- max: 100,
313
- step: 1,
314
- default: 15,
315
- description: '中短期变化率周期',
316
- },
317
- {
318
- key: 'roc3',
319
- label: 'ROC3',
320
- type: 'number',
321
- min: 2,
322
- max: 100,
323
- step: 1,
324
- default: 20,
325
- description: '中长期变化率周期',
326
- },
327
- {
328
- key: 'roc4',
329
- label: 'ROC4',
330
- type: 'number',
331
- min: 2,
332
- max: 100,
333
- step: 1,
334
- default: 30,
335
- description: '长期变化率周期',
336
- },
337
- {
338
- key: 'signalPeriod',
339
- label: '信号',
340
- type: 'number',
341
- min: 2,
342
- max: 50,
343
- step: 1,
344
- default: 9,
345
- description: '信号线的 SMA 周期',
346
- },
347
- ],
348
- },
349
- {
350
- id: 'FASTK',
351
- label: 'FASTK',
352
- name: '快速随机指标',
353
- pane: 'sub',
354
- description:
355
- 'FASTK 是未经过平滑处理的随机指标,比普通 KDJ 更敏感,能更快捕捉价格转折点,但假信号也更多。',
356
- params: [
357
- {
358
- key: 'period',
359
- label: '周期',
360
- type: 'number',
361
- min: 2,
362
- max: 100,
363
- step: 1,
364
- default: 9,
365
- description: '计算周期,周期越短越敏感',
366
- },
367
- ],
368
- },
369
- {
370
- id: 'ATR',
371
- label: 'ATR',
372
- name: '平均真实波幅',
373
- pane: 'sub',
374
- description:
375
- 'ATR(Average True Range)衡量市场波动性,值越大表示波动越剧烈。Wilder 平滑算法,常用于设置止损位和判断趋势强度。',
376
- params: [
377
- {
378
- key: 'period',
379
- label: '周期',
380
- type: 'number',
381
- min: 1,
382
- max: 100,
383
- step: 1,
384
- default: 14,
385
- description: 'ATR 计算周期,周期越长曲线越平滑',
386
- },
387
- ],
388
- },
389
- // === PR 合入的新指标 ===
390
- {
391
- id: 'WMA',
392
- label: 'WMA',
393
- name: '加权移动平均',
394
- pane: 'main',
395
- description: 'WMA 对近期价格赋予更高权重,比普通 MA 反应更快,适用于短期趋势跟踪。',
396
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: '计算周期' }],
397
- },
398
- {
399
- id: 'DEMA',
400
- label: 'DEMA',
401
- name: '双指数移动平均',
402
- pane: 'main',
403
- description: 'DEMA 通过双重平滑减少滞后,比传统 EMA 更贴近价格,适合快速趋势判断。',
404
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: '计算周期' }],
405
- },
406
- {
407
- id: 'TEMA',
408
- label: 'TEMA',
409
- name: '三指数移动平均',
410
- pane: 'main',
411
- description: 'TEMA 三重平滑,滞后最小,响应最快,适合敏锐捕捉价格变化。',
412
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: '计算周期' }],
413
- },
414
- {
415
- id: 'HMA',
416
- label: 'HMA',
417
- name: '赫尔移动平均',
418
- pane: 'main',
419
- description: 'HMA 通过加权移动平均和平方根计算,在平滑度和响应速度之间取得极佳平衡。',
420
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: '计算周期' }],
421
- },
422
- {
423
- id: 'KAMA',
424
- label: 'KAMA',
425
- name: '考夫曼自适应移动平均',
426
- pane: 'main',
427
- description: 'KAMA 根据市场噪音自适应调整平滑度,趋势强时快速跟随,震荡时平滑过滤。',
428
- params: [
429
- { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: 'ER 计算周期' },
430
- { key: 'fastPeriod', label: '快线', type: 'number', min: 2, max: 30, step: 1, default: 2, description: '最快平滑系数' },
431
- { key: 'slowPeriod', label: '慢线', type: 'number', min: 2, max: 60, step: 1, default: 30, description: '最慢平滑系数' },
432
- ],
433
- },
434
- {
435
- id: 'SAR',
436
- label: 'SAR',
437
- name: '抛物线转向',
438
- pane: 'main',
439
- description: 'SAR(Parabolic Stop and Reverse)通过抛物线轨迹跟踪趋势,提供动态止损和反转信号。',
440
- params: [
441
- { key: 'step', label: '步长', type: 'number', min: 0.001, max: 0.1, step: 0.001, default: 0.02, description: '加速度步长' },
442
- { key: 'maxStep', label: '最大步长', type: 'number', min: 0.01, max: 0.5, step: 0.01, default: 0.2, description: '最大加速度上限' },
443
- ],
444
- },
445
- {
446
- id: 'SUPERTREND',
447
- label: 'ST',
448
- name: '超级趋势',
449
- pane: 'main',
450
- description: 'SuperTrend 基于 ATR 的通道突破系统,价格在通道上方为多头趋势,下方为空头趋势。',
451
- params: [
452
- { key: 'atrPeriod', label: 'ATR 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: 'ATR 计算周期' },
453
- { key: 'multiplier', label: '倍数', type: 'number', min: 0.5, max: 10, step: 0.5, default: 3, description: 'ATR 倍数' },
454
- ],
455
- },
456
- {
457
- id: 'KELTNER',
458
- label: 'KC',
459
- name: '肯特纳通道',
460
- pane: 'main',
461
- description: 'Keltner Channel 以 EMA 为中轨,ATR 倍数确定通道宽度,适合判断突破与回归。',
462
- params: [
463
- { key: 'emaPeriod', label: 'EMA 周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: '中轨 EMA 周期' },
464
- { key: 'atrPeriod', label: 'ATR 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: 'ATR 计算周期' },
465
- { key: 'multiplier', label: '倍数', type: 'number', min: 0.5, max: 10, step: 0.5, default: 2, description: 'ATR 倍数' },
466
- ],
467
- },
468
- {
469
- id: 'DONCHIAN',
470
- label: 'DC',
471
- name: '唐奇安通道',
472
- pane: 'main',
473
- description: 'Donchian Channel 显示 N 日内最高价和最低价的通道,价格突破上下轨视为趋势信号。',
474
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 200, step: 1, default: 20, description: '通道周期' }],
475
- },
476
- {
477
- id: 'ICHIMOKU',
478
- label: 'IK',
479
- name: '一目均衡表',
480
- pane: 'main',
481
- description: 'Ichimoku Kinko Hyo(一目均衡表)综合显示支撑阻力、趋势方向和动量,云区变色提示趋势转换。',
482
- params: [
483
- { key: 'tenkanPeriod', label: '转折线', type: 'number', min: 2, max: 100, step: 1, default: 9, description: 'Tenkan-sen 周期' },
484
- { key: 'kijunPeriod', label: '基准线', type: 'number', min: 2, max: 100, step: 1, default: 26, description: 'Kijun-sen 周期' },
485
- { key: 'spanBPeriod', label: '领先线 B', type: 'number', min: 2, max: 200, step: 1, default: 52, description: 'Senkou Span B 周期' },
486
- { key: 'displacement', label: '偏移', type: 'number', min: 1, max: 52, step: 1, default: 26, description: '偏移量' },
487
- ],
488
- },
489
- {
490
- id: 'ROC',
491
- label: 'ROC',
492
- name: '变化率',
493
- pane: 'sub',
494
- description: 'ROC 衡量当前价格与 N 日前价格的百分比变化,正值表示上涨动能,负值表示下跌动能。',
495
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 12, description: 'ROC 周期' }],
496
- },
497
- {
498
- id: 'TRIX',
499
- label: 'TRIX',
500
- name: '三重指数平滑平均',
501
- pane: 'sub',
502
- description: 'TRIX 三平滑后取 ROC,过滤短期波动,上穿信号线为买入信号,下穿为卖出信号。',
503
- params: [
504
- { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 15, description: 'TRIX 周期' },
505
- { key: 'signalPeriod', label: '信号', type: 'number', min: 2, max: 50, step: 1, default: 9, description: '信号线周期' },
506
- ],
507
- },
508
- {
509
- id: 'HV',
510
- label: 'HV',
511
- name: '历史波动率',
512
- pane: 'sub',
513
- description: 'HV 衡量过去 N 日对数收益率的年化标准差,值越高表示市场波动越大。',
514
- params: [
515
- { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: '计算周期' },
516
- { key: 'annualizationFactor', label: '年化因子', type: 'number', min: 1, max: 365, step: 1, default: 252, description: '年化天数' },
517
- ],
518
- },
519
- {
520
- id: 'PARKINSON',
521
- label: 'PK',
522
- name: '帕金森波动率',
523
- pane: 'sub',
524
- description: 'Parkinson 利用最高最低价估算波动率,比 HV 更高效,捕捉日内波动范围。',
525
- params: [
526
- { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: '计算周期' },
527
- { key: 'annualizationFactor', label: '年化因子', type: 'number', min: 1, max: 365, step: 1, default: 252, description: '年化天数' },
528
- ],
529
- },
530
- {
531
- id: 'CHAIKIN_VOL',
532
- label: 'CV',
533
- name: '蔡金波动率',
534
- pane: 'sub',
535
- description: 'Chaikin Volatility 衡量价格区间的宽度变化,波动率扩张预示突破,收缩预示盘整。',
536
- params: [
537
- { key: 'emaPeriod', label: 'EMA 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: '平滑周期' },
538
- { key: 'rocPeriod', label: 'ROC 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: '变化率周期' },
539
- ],
540
- },
541
- {
542
- id: 'VMA',
543
- label: 'VMA',
544
- name: '成交量移动平均',
545
- pane: 'sub',
546
- description: 'VMA 对成交量做移动平均,量能上升确认趋势,量能萎缩预示反转。',
547
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 5, description: 'VMA 周期' }],
548
- },
549
- {
550
- id: 'OBV',
551
- label: 'OBV',
552
- name: '能量潮',
553
- pane: 'sub',
554
- description: 'OBV 累积量能,价格上涨时加量,下跌时减量。OBV 趋势与价格背离常预示反转。',
555
- params: [],
556
- },
557
- {
558
- id: 'PVT',
559
- label: 'PVT',
560
- name: '价量趋势',
561
- pane: 'sub',
562
- description: 'PVT 将成交量按价格变化率加权累计,比 OBV 更精细,反映资金流入流出力度。',
563
- params: [],
564
- },
565
- {
566
- id: 'VWAP',
567
- label: 'VWAP',
568
- name: '成交量加权均价',
569
- pane: 'sub',
570
- description: 'VWAP(Volume-Weighted Average Price)以成交量加权的均价线,机构常用作日内交易基准。',
571
- params: [{ key: 'sessionResetGapMs', label: '重置间隔', type: 'number', min: 0, max: 86400000, step: 3600000, default: 0, description: '0=不重置,>0=超过间隔毫秒重置' }],
572
- },
573
- {
574
- id: 'CMF',
575
- label: 'CMF',
576
- name: '蔡金资金流',
577
- pane: 'sub',
578
- description: 'CMF(Chaikin Money Flow)衡量资金流入流出强度,正值看涨,负值看跌。',
579
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: 'CMF 周期' }],
580
- },
581
- {
582
- id: 'MFI',
583
- label: 'MFI',
584
- name: '资金流量指数',
585
- pane: 'sub',
586
- description: 'MFI(Money Flow Index)类似 RSI 但用量能加权,判断超买超卖。MFI > 80 超买,MFI < 20 超卖。',
587
- params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: 'MFI 周期' }],
588
- },
589
- {
590
- id: 'PIVOT',
591
- label: 'PP',
592
- name: '枢轴点',
593
- pane: 'main',
594
- description: 'Pivot Points 根据前日最高/最低/收盘计算支撑阻力位,R1-R3 为阻力,S1-S3 为支撑。',
595
- params: [],
596
- },
597
- {
598
- id: 'FIB',
599
- label: 'FIB',
600
- name: '斐波那契',
601
- pane: 'main',
602
- description: 'Fibonacci 回调线标记关键回撤位(0.236/0.382/0.5/0.618/0.786),用于判断回调目标。',
603
- params: [{ key: 'period', label: '周期', type: 'number', min: 5, max: 500, step: 1, default: 50, description: '计算周期' }],
604
- },
605
- {
606
- id: 'STRUCTURE',
607
- label: 'SMC',
608
- name: 'SMC 结构',
609
- pane: 'main',
610
- description: 'Swing / BOS / CHOCH 识别市场结构转换,突破结构(BOS)确认趋势,趋势反转(CHOCH)提示反转。',
611
- params: [
612
- { key: 'leftWindow', label: '左窗口', type: 'number', min: 1, max: 20, step: 1, default: 2, description: '摆点左侧 K 线数' },
613
- { key: 'rightWindow', label: '右窗口', type: 'number', min: 1, max: 20, step: 1, default: 2, description: '摆点右侧 K 线数' },
614
- ],
615
- },
616
- {
617
- id: 'ZONES',
618
- label: 'ZONES',
619
- name: 'SMC 区域',
620
- pane: 'main',
621
- description: 'FVG(公允价值缺口)和 Order Block(订单块)识别机构交易行为中的关键流动性区域。',
622
- params: [
623
- { key: 'obLookback', label: 'OB 回溯', type: 'number', min: 1, max: 50, step: 1, default: 5, description: 'Order Block 回溯窗口' },
624
- ],
625
- },
626
- {
627
- id: 'VOLUME_PROFILE',
628
- label: 'VP',
629
- name: '成交量分布',
630
- pane: 'sub',
631
- description: 'Volume Profile 显示各价位成交量分布,识别高量区域(价值区)和低量区域(缺口),POC 为成交量最大价位。',
632
- params: [
633
- { key: 'bins', label: '分箱数', type: 'number', min: 5, max: 100, step: 1, default: 24, description: '价格分箱数' },
634
- { key: 'lookback', label: '回溯', type: 'number', min: 0, max: 500, step: 1, default: 0, description: '0=全部数据' },
635
- { key: 'valueAreaPercent', label: '价值区%', type: 'number', min: 0.1, max: 1, step: 0.05, default: 0.7, description: '价值区占比' },
636
- ],
637
- },
638
- ]
639
-
640
- export const mainIndicators = allIndicators.filter((i) => i.pane === 'main')
641
- export const subIndicators = allIndicators.filter((i) => i.pane === 'sub')
642
-
643
- export function findIndicator(id: string): Indicator | undefined {
644
- return allIndicators.find((i) => i.id === id)
645
- }
646
-
647
- export function isSubIndicatorId(id: string): boolean {
648
- const indicator = allIndicators.find((i) => i.id === id)
649
- return indicator?.pane === 'sub'
650
- }
1
+ export interface ParamConfig {
2
+ key: string
3
+ label: string
4
+ type: 'number'
5
+ min?: number
6
+ max?: number
7
+ step?: number
8
+ default?: number
9
+ description?: string
10
+ }
11
+
12
+ export interface Indicator {
13
+ id: string
14
+ label: string
15
+ name: string
16
+ pane: 'main' | 'sub'
17
+ description?: string
18
+ params?: ParamConfig[]
19
+ }
20
+
21
+ export const allIndicators: Indicator[] = [
22
+ { id: 'MA', label: 'MA', name: '均线', pane: 'main' },
23
+ {
24
+ id: 'VOLUME',
25
+ label: 'VOL',
26
+ name: '成交量',
27
+ pane: 'sub',
28
+ description:
29
+ '成交量反映市场活跃度,柱状图显示每根K线的交易量。上涨时柱子为红色,下跌时为绿色。',
30
+ },
31
+ {
32
+ id: 'BOLL',
33
+ label: 'BOLL',
34
+ name: '布林带',
35
+ pane: 'main',
36
+ description:
37
+ '布林带由三条轨道线组成,用于判断价格的波动范围和趋势强度。价格触及上轨可能超买,触及下轨可能超卖。',
38
+ params: [
39
+ {
40
+ key: 'period',
41
+ label: '周期',
42
+ type: 'number',
43
+ min: 2,
44
+ max: 100,
45
+ step: 1,
46
+ default: 20,
47
+ description: '计算移动平均线的周期数,周期越长轨道越平滑',
48
+ },
49
+ {
50
+ key: 'multiplier',
51
+ label: '倍数',
52
+ type: 'number',
53
+ min: 0.1,
54
+ max: 5,
55
+ step: 0.1,
56
+ default: 2,
57
+ description: '标准差倍数,决定轨道宽度,通常为 2',
58
+ },
59
+ ],
60
+ },
61
+ {
62
+ id: 'EXPMA',
63
+ label: 'EXPMA',
64
+ name: '指数平滑移动平均线',
65
+ pane: 'main',
66
+ description:
67
+ 'EXPMA 对近期价格给予更高权重,比普通 MA 更敏感。快线上穿慢线为金叉看涨,下穿为死叉看跌。',
68
+ params: [
69
+ {
70
+ key: 'fastPeriod',
71
+ label: '快线',
72
+ type: 'number',
73
+ min: 2,
74
+ max: 100,
75
+ step: 1,
76
+ default: 12,
77
+ description: '快线周期,对价格变化更敏感',
78
+ },
79
+ {
80
+ key: 'slowPeriod',
81
+ label: '慢线',
82
+ type: 'number',
83
+ min: 2,
84
+ max: 200,
85
+ step: 1,
86
+ default: 50,
87
+ description: '慢线周期,用于判断趋势方向',
88
+ },
89
+ ],
90
+ },
91
+ {
92
+ id: 'ENE',
93
+ label: 'ENE',
94
+ name: '轨道线',
95
+ pane: 'main',
96
+ description:
97
+ 'ENE 轨道线由三条轨道组成,价格突破上轨可能超买,突破下轨可能超卖,适合判断震荡行情的买卖点。',
98
+ params: [
99
+ {
100
+ key: 'period',
101
+ label: '周期',
102
+ type: 'number',
103
+ min: 2,
104
+ max: 100,
105
+ step: 1,
106
+ default: 10,
107
+ description: '计算中轨的周期数',
108
+ },
109
+ {
110
+ key: 'deviation',
111
+ label: '偏离率',
112
+ type: 'number',
113
+ min: 1,
114
+ max: 30,
115
+ step: 0.5,
116
+ default: 11,
117
+ description: '轨道偏离率百分比,决定轨道宽度',
118
+ },
119
+ ],
120
+ },
121
+ {
122
+ id: 'MACD',
123
+ label: 'MACD',
124
+ name: '指数平滑异同移动平均线',
125
+ pane: 'sub',
126
+ description:
127
+ 'MACD 通过快慢均线的交叉判断趋势方向和动量。DIF 上穿 DEA 为金叉看涨,下穿为死叉看跌。',
128
+ params: [
129
+ {
130
+ key: 'fastPeriod',
131
+ label: '快线',
132
+ type: 'number',
133
+ min: 2,
134
+ max: 50,
135
+ step: 1,
136
+ default: 12,
137
+ description: '快线 EMA 周期,对价格变化更敏感',
138
+ },
139
+ {
140
+ key: 'slowPeriod',
141
+ label: '慢线',
142
+ type: 'number',
143
+ min: 2,
144
+ max: 100,
145
+ step: 1,
146
+ default: 26,
147
+ description: '慢线 EMA 周期,用于计算 DIF',
148
+ },
149
+ {
150
+ key: 'signalPeriod',
151
+ label: '信号',
152
+ type: 'number',
153
+ min: 2,
154
+ max: 50,
155
+ step: 1,
156
+ default: 9,
157
+ description: 'DEA 的 EMA 周期,用于生成买卖信号',
158
+ },
159
+ ],
160
+ },
161
+ {
162
+ id: 'RSI',
163
+ label: 'RSI',
164
+ name: '相对强弱指标',
165
+ pane: 'sub',
166
+ description: 'RSI 衡量价格变动的速度和幅度,判断超买超卖状态。RSI > 70 超买,RSI < 30 超卖。',
167
+ params: [
168
+ {
169
+ key: 'period1',
170
+ label: '周期 1',
171
+ type: 'number',
172
+ min: 2,
173
+ max: 100,
174
+ step: 1,
175
+ default: 6,
176
+ description: '第一条 RSI 周期,通常为 6(快线)',
177
+ },
178
+ {
179
+ key: 'period2',
180
+ label: '周期 2',
181
+ type: 'number',
182
+ min: 2,
183
+ max: 100,
184
+ step: 1,
185
+ default: 12,
186
+ description: '第二条 RSI 周期,通常为 12(中线)',
187
+ },
188
+ {
189
+ key: 'period3',
190
+ label: '周期 3',
191
+ type: 'number',
192
+ min: 2,
193
+ max: 100,
194
+ step: 1,
195
+ default: 24,
196
+ description: '第三条 RSI 周期,通常为 24(慢线)',
197
+ },
198
+ ],
199
+ },
200
+ {
201
+ id: 'CCI',
202
+ label: 'CCI',
203
+ name: '顺势指标',
204
+ pane: 'sub',
205
+ description:
206
+ 'CCI 衡量价格与统计平均值的偏离程度。CCI > 100 超买,CCI < -100 超卖,适合捕捉趋势反转。',
207
+ params: [
208
+ {
209
+ key: 'period',
210
+ label: '周期',
211
+ type: 'number',
212
+ min: 2,
213
+ max: 100,
214
+ step: 1,
215
+ default: 14,
216
+ description: '计算周期,周期越短信号越灵敏',
217
+ },
218
+ ],
219
+ },
220
+ {
221
+ id: 'STOCH',
222
+ label: 'STOCH',
223
+ name: '随机指标',
224
+ pane: 'sub',
225
+ description:
226
+ 'KDJ 随机指标通过比较收盘价与价格区间判断超买超卖。K > 80 超买,K < 20 超卖,K 上穿 D 金叉。',
227
+ params: [
228
+ {
229
+ key: 'n',
230
+ label: 'K 周期',
231
+ type: 'number',
232
+ min: 2,
233
+ max: 100,
234
+ step: 1,
235
+ default: 9,
236
+ description: '计算 K 值的周期,统计 N 日内价格区间',
237
+ },
238
+ {
239
+ key: 'm',
240
+ label: 'D 周期',
241
+ type: 'number',
242
+ min: 1,
243
+ max: 50,
244
+ step: 1,
245
+ default: 3,
246
+ description: 'D 值是 K 的 M 日移动平均,使信号更平滑',
247
+ },
248
+ ],
249
+ },
250
+ {
251
+ id: 'MOM',
252
+ label: 'MOM',
253
+ name: '动量指标',
254
+ pane: 'sub',
255
+ description:
256
+ '动量指标衡量价格变化的速度,MOM > 0 表示上涨动能,MOM < 0 表示下跌动能。适合判断趋势强度。',
257
+ params: [
258
+ {
259
+ key: 'period',
260
+ label: '周期',
261
+ type: 'number',
262
+ min: 2,
263
+ max: 100,
264
+ step: 1,
265
+ default: 10,
266
+ description: '与多少日前价格比较,周期越短越灵敏',
267
+ },
268
+ ],
269
+ },
270
+ {
271
+ id: 'WMSR',
272
+ label: 'WMSR',
273
+ name: '威廉指标',
274
+ pane: 'sub',
275
+ description: '威廉指标衡量超买超卖程度,范围为 -100 到 0。WMSR > -20 超买,WMSR < -80 超卖。',
276
+ params: [
277
+ {
278
+ key: 'period',
279
+ label: '周期',
280
+ type: 'number',
281
+ min: 2,
282
+ max: 100,
283
+ step: 1,
284
+ default: 14,
285
+ description: '回溯周期,统计周期内最高最低价',
286
+ },
287
+ ],
288
+ },
289
+ {
290
+ id: 'KST',
291
+ label: 'KST',
292
+ name: '确然指标',
293
+ pane: 'sub',
294
+ description:
295
+ 'KST 综合多个 ROC 判断长期趋势,KST 上穿信号线看涨,下穿看跌。适合捕捉主要趋势转换。',
296
+ params: [
297
+ {
298
+ key: 'roc1',
299
+ label: 'ROC1',
300
+ type: 'number',
301
+ min: 2,
302
+ max: 100,
303
+ step: 1,
304
+ default: 10,
305
+ description: '短期变化率周期',
306
+ },
307
+ {
308
+ key: 'roc2',
309
+ label: 'ROC2',
310
+ type: 'number',
311
+ min: 2,
312
+ max: 100,
313
+ step: 1,
314
+ default: 15,
315
+ description: '中短期变化率周期',
316
+ },
317
+ {
318
+ key: 'roc3',
319
+ label: 'ROC3',
320
+ type: 'number',
321
+ min: 2,
322
+ max: 100,
323
+ step: 1,
324
+ default: 20,
325
+ description: '中长期变化率周期',
326
+ },
327
+ {
328
+ key: 'roc4',
329
+ label: 'ROC4',
330
+ type: 'number',
331
+ min: 2,
332
+ max: 100,
333
+ step: 1,
334
+ default: 30,
335
+ description: '长期变化率周期',
336
+ },
337
+ {
338
+ key: 'signalPeriod',
339
+ label: '信号',
340
+ type: 'number',
341
+ min: 2,
342
+ max: 50,
343
+ step: 1,
344
+ default: 9,
345
+ description: '信号线的 SMA 周期',
346
+ },
347
+ ],
348
+ },
349
+ {
350
+ id: 'FASTK',
351
+ label: 'FASTK',
352
+ name: '快速随机指标',
353
+ pane: 'sub',
354
+ description:
355
+ 'FASTK 是未经过平滑处理的随机指标,比普通 KDJ 更敏感,能更快捕捉价格转折点,但假信号也更多。',
356
+ params: [
357
+ {
358
+ key: 'period',
359
+ label: '周期',
360
+ type: 'number',
361
+ min: 2,
362
+ max: 100,
363
+ step: 1,
364
+ default: 9,
365
+ description: '计算周期,周期越短越敏感',
366
+ },
367
+ ],
368
+ },
369
+ {
370
+ id: 'ATR',
371
+ label: 'ATR',
372
+ name: '平均真实波幅',
373
+ pane: 'sub',
374
+ description:
375
+ 'ATR(Average True Range)衡量市场波动性,值越大表示波动越剧烈。Wilder 平滑算法,常用于设置止损位和判断趋势强度。',
376
+ params: [
377
+ {
378
+ key: 'period',
379
+ label: '周期',
380
+ type: 'number',
381
+ min: 1,
382
+ max: 100,
383
+ step: 1,
384
+ default: 14,
385
+ description: 'ATR 计算周期,周期越长曲线越平滑',
386
+ },
387
+ ],
388
+ },
389
+ // === PR 合入的新指标 ===
390
+ {
391
+ id: 'WMA',
392
+ label: 'WMA',
393
+ name: '加权移动平均',
394
+ pane: 'main',
395
+ description: 'WMA 对近期价格赋予更高权重,比普通 MA 反应更快,适用于短期趋势跟踪。',
396
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: '计算周期' }],
397
+ },
398
+ {
399
+ id: 'DEMA',
400
+ label: 'DEMA',
401
+ name: '双指数移动平均',
402
+ pane: 'main',
403
+ description: 'DEMA 通过双重平滑减少滞后,比传统 EMA 更贴近价格,适合快速趋势判断。',
404
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: '计算周期' }],
405
+ },
406
+ {
407
+ id: 'TEMA',
408
+ label: 'TEMA',
409
+ name: '三指数移动平均',
410
+ pane: 'main',
411
+ description: 'TEMA 三重平滑,滞后最小,响应最快,适合敏锐捕捉价格变化。',
412
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: '计算周期' }],
413
+ },
414
+ {
415
+ id: 'HMA',
416
+ label: 'HMA',
417
+ name: '赫尔移动平均',
418
+ pane: 'main',
419
+ description: 'HMA 通过加权移动平均和平方根计算,在平滑度和响应速度之间取得极佳平衡。',
420
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: '计算周期' }],
421
+ },
422
+ {
423
+ id: 'KAMA',
424
+ label: 'KAMA',
425
+ name: '考夫曼自适应移动平均',
426
+ pane: 'main',
427
+ description: 'KAMA 根据市场噪音自适应调整平滑度,趋势强时快速跟随,震荡时平滑过滤。',
428
+ params: [
429
+ { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: 'ER 计算周期' },
430
+ { key: 'fastPeriod', label: '快线', type: 'number', min: 2, max: 30, step: 1, default: 2, description: '最快平滑系数' },
431
+ { key: 'slowPeriod', label: '慢线', type: 'number', min: 2, max: 60, step: 1, default: 30, description: '最慢平滑系数' },
432
+ ],
433
+ },
434
+ {
435
+ id: 'SAR',
436
+ label: 'SAR',
437
+ name: '抛物线转向',
438
+ pane: 'main',
439
+ description: 'SAR(Parabolic Stop and Reverse)通过抛物线轨迹跟踪趋势,提供动态止损和反转信号。',
440
+ params: [
441
+ { key: 'step', label: '步长', type: 'number', min: 0.001, max: 0.1, step: 0.001, default: 0.02, description: '加速度步长' },
442
+ { key: 'maxStep', label: '最大步长', type: 'number', min: 0.01, max: 0.5, step: 0.01, default: 0.2, description: '最大加速度上限' },
443
+ ],
444
+ },
445
+ {
446
+ id: 'SUPERTREND',
447
+ label: 'ST',
448
+ name: '超级趋势',
449
+ pane: 'main',
450
+ description: 'SuperTrend 基于 ATR 的通道突破系统,价格在通道上方为多头趋势,下方为空头趋势。',
451
+ params: [
452
+ { key: 'atrPeriod', label: 'ATR 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: 'ATR 计算周期' },
453
+ { key: 'multiplier', label: '倍数', type: 'number', min: 0.5, max: 10, step: 0.5, default: 3, description: 'ATR 倍数' },
454
+ ],
455
+ },
456
+ {
457
+ id: 'KELTNER',
458
+ label: 'KC',
459
+ name: '肯特纳通道',
460
+ pane: 'main',
461
+ description: 'Keltner Channel 以 EMA 为中轨,ATR 倍数确定通道宽度,适合判断突破与回归。',
462
+ params: [
463
+ { key: 'emaPeriod', label: 'EMA 周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: '中轨 EMA 周期' },
464
+ { key: 'atrPeriod', label: 'ATR 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: 'ATR 计算周期' },
465
+ { key: 'multiplier', label: '倍数', type: 'number', min: 0.5, max: 10, step: 0.5, default: 2, description: 'ATR 倍数' },
466
+ ],
467
+ },
468
+ {
469
+ id: 'DONCHIAN',
470
+ label: 'DC',
471
+ name: '唐奇安通道',
472
+ pane: 'main',
473
+ description: 'Donchian Channel 显示 N 日内最高价和最低价的通道,价格突破上下轨视为趋势信号。',
474
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 200, step: 1, default: 20, description: '通道周期' }],
475
+ },
476
+ {
477
+ id: 'ICHIMOKU',
478
+ label: 'IK',
479
+ name: '一目均衡表',
480
+ pane: 'main',
481
+ description: 'Ichimoku Kinko Hyo(一目均衡表)综合显示支撑阻力、趋势方向和动量,云区变色提示趋势转换。',
482
+ params: [
483
+ { key: 'tenkanPeriod', label: '转折线', type: 'number', min: 2, max: 100, step: 1, default: 9, description: 'Tenkan-sen 周期' },
484
+ { key: 'kijunPeriod', label: '基准线', type: 'number', min: 2, max: 100, step: 1, default: 26, description: 'Kijun-sen 周期' },
485
+ { key: 'spanBPeriod', label: '领先线 B', type: 'number', min: 2, max: 200, step: 1, default: 52, description: 'Senkou Span B 周期' },
486
+ { key: 'displacement', label: '偏移', type: 'number', min: 1, max: 52, step: 1, default: 26, description: '偏移量' },
487
+ ],
488
+ },
489
+ {
490
+ id: 'ROC',
491
+ label: 'ROC',
492
+ name: '变化率',
493
+ pane: 'sub',
494
+ description: 'ROC 衡量当前价格与 N 日前价格的百分比变化,正值表示上涨动能,负值表示下跌动能。',
495
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 12, description: 'ROC 周期' }],
496
+ },
497
+ {
498
+ id: 'TRIX',
499
+ label: 'TRIX',
500
+ name: '三重指数平滑平均',
501
+ pane: 'sub',
502
+ description: 'TRIX 三平滑后取 ROC,过滤短期波动,上穿信号线为买入信号,下穿为卖出信号。',
503
+ params: [
504
+ { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 15, description: 'TRIX 周期' },
505
+ { key: 'signalPeriod', label: '信号', type: 'number', min: 2, max: 50, step: 1, default: 9, description: '信号线周期' },
506
+ ],
507
+ },
508
+ {
509
+ id: 'HV',
510
+ label: 'HV',
511
+ name: '历史波动率',
512
+ pane: 'sub',
513
+ description: 'HV 衡量过去 N 日对数收益率的年化标准差,值越高表示市场波动越大。',
514
+ params: [
515
+ { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: '计算周期' },
516
+ { key: 'annualizationFactor', label: '年化因子', type: 'number', min: 1, max: 365, step: 1, default: 252, description: '年化天数' },
517
+ ],
518
+ },
519
+ {
520
+ id: 'PARKINSON',
521
+ label: 'PK',
522
+ name: '帕金森波动率',
523
+ pane: 'sub',
524
+ description: 'Parkinson 利用最高最低价估算波动率,比 HV 更高效,捕捉日内波动范围。',
525
+ params: [
526
+ { key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: '计算周期' },
527
+ { key: 'annualizationFactor', label: '年化因子', type: 'number', min: 1, max: 365, step: 1, default: 252, description: '年化天数' },
528
+ ],
529
+ },
530
+ {
531
+ id: 'CHAIKIN_VOL',
532
+ label: 'CV',
533
+ name: '蔡金波动率',
534
+ pane: 'sub',
535
+ description: 'Chaikin Volatility 衡量价格区间的宽度变化,波动率扩张预示突破,收缩预示盘整。',
536
+ params: [
537
+ { key: 'emaPeriod', label: 'EMA 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: '平滑周期' },
538
+ { key: 'rocPeriod', label: 'ROC 周期', type: 'number', min: 2, max: 100, step: 1, default: 10, description: '变化率周期' },
539
+ ],
540
+ },
541
+ {
542
+ id: 'VMA',
543
+ label: 'VMA',
544
+ name: '成交量移动平均',
545
+ pane: 'sub',
546
+ description: 'VMA 对成交量做移动平均,量能上升确认趋势,量能萎缩预示反转。',
547
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 5, description: 'VMA 周期' }],
548
+ },
549
+ {
550
+ id: 'OBV',
551
+ label: 'OBV',
552
+ name: '能量潮',
553
+ pane: 'sub',
554
+ description: 'OBV 累积量能,价格上涨时加量,下跌时减量。OBV 趋势与价格背离常预示反转。',
555
+ params: [],
556
+ },
557
+ {
558
+ id: 'PVT',
559
+ label: 'PVT',
560
+ name: '价量趋势',
561
+ pane: 'sub',
562
+ description: 'PVT 将成交量按价格变化率加权累计,比 OBV 更精细,反映资金流入流出力度。',
563
+ params: [],
564
+ },
565
+ {
566
+ id: 'VWAP',
567
+ label: 'VWAP',
568
+ name: '成交量加权均价',
569
+ pane: 'sub',
570
+ description: 'VWAP(Volume-Weighted Average Price)以成交量加权的均价线,机构常用作日内交易基准。',
571
+ params: [{ key: 'sessionResetGapMs', label: '重置间隔', type: 'number', min: 0, max: 86400000, step: 3600000, default: 0, description: '0=不重置,>0=超过间隔毫秒重置' }],
572
+ },
573
+ {
574
+ id: 'CMF',
575
+ label: 'CMF',
576
+ name: '蔡金资金流',
577
+ pane: 'sub',
578
+ description: 'CMF(Chaikin Money Flow)衡量资金流入流出强度,正值看涨,负值看跌。',
579
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 20, description: 'CMF 周期' }],
580
+ },
581
+ {
582
+ id: 'MFI',
583
+ label: 'MFI',
584
+ name: '资金流量指数',
585
+ pane: 'sub',
586
+ description: 'MFI(Money Flow Index)类似 RSI 但用量能加权,判断超买超卖。MFI > 80 超买,MFI < 20 超卖。',
587
+ params: [{ key: 'period', label: '周期', type: 'number', min: 2, max: 100, step: 1, default: 14, description: 'MFI 周期' }],
588
+ },
589
+ {
590
+ id: 'PIVOT',
591
+ label: 'PP',
592
+ name: '枢轴点',
593
+ pane: 'main',
594
+ description: 'Pivot Points 根据前日最高/最低/收盘计算支撑阻力位,R1-R3 为阻力,S1-S3 为支撑。',
595
+ params: [],
596
+ },
597
+ {
598
+ id: 'FIB',
599
+ label: 'FIB',
600
+ name: '斐波那契',
601
+ pane: 'main',
602
+ description: 'Fibonacci 回调线标记关键回撤位(0.236/0.382/0.5/0.618/0.786),用于判断回调目标。',
603
+ params: [{ key: 'period', label: '周期', type: 'number', min: 5, max: 500, step: 1, default: 50, description: '计算周期' }],
604
+ },
605
+ {
606
+ id: 'STRUCTURE',
607
+ label: 'SMC',
608
+ name: 'SMC 结构',
609
+ pane: 'main',
610
+ description: 'Swing / BOS / CHOCH 识别市场结构转换,突破结构(BOS)确认趋势,趋势反转(CHOCH)提示反转。',
611
+ params: [
612
+ { key: 'leftWindow', label: '左窗口', type: 'number', min: 1, max: 20, step: 1, default: 2, description: '摆点左侧 K 线数' },
613
+ { key: 'rightWindow', label: '右窗口', type: 'number', min: 1, max: 20, step: 1, default: 2, description: '摆点右侧 K 线数' },
614
+ ],
615
+ },
616
+ {
617
+ id: 'ZONES',
618
+ label: 'ZONES',
619
+ name: 'SMC 区域',
620
+ pane: 'main',
621
+ description: 'FVG(公允价值缺口)和 Order Block(订单块)识别机构交易行为中的关键流动性区域。',
622
+ params: [
623
+ { key: 'obLookback', label: 'OB 回溯', type: 'number', min: 1, max: 50, step: 1, default: 5, description: 'Order Block 回溯窗口' },
624
+ ],
625
+ },
626
+ {
627
+ id: 'VOLUME_PROFILE',
628
+ label: 'VP',
629
+ name: '成交量分布',
630
+ pane: 'sub',
631
+ description: 'Volume Profile 显示各价位成交量分布,识别高量区域(价值区)和低量区域(缺口),POC 为成交量最大价位。',
632
+ params: [
633
+ { key: 'bins', label: '分箱数', type: 'number', min: 5, max: 100, step: 1, default: 24, description: '价格分箱数' },
634
+ { key: 'lookback', label: '回溯', type: 'number', min: 0, max: 500, step: 1, default: 0, description: '0=全部数据' },
635
+ { key: 'valueAreaPercent', label: '价值区%', type: 'number', min: 0.1, max: 1, step: 0.05, default: 0.7, description: '价值区占比' },
636
+ ],
637
+ },
638
+ ]
639
+
640
+ export const mainIndicators = allIndicators.filter((i) => i.pane === 'main')
641
+ export const subIndicators = allIndicators.filter((i) => i.pane === 'sub')
642
+
643
+ export function findIndicator(id: string): Indicator | undefined {
644
+ return allIndicators.find((i) => i.id === id)
645
+ }
646
+
647
+ export function isSubIndicatorId(id: string): boolean {
648
+ const indicator = allIndicators.find((i) => i.id === id)
649
+ return indicator?.pane === 'sub'
650
+ }