1use crate::indicators::moving_averages::param_schema::{ma_param_schema, MaParamKind};
2use crate::indicators::moving_averages::registry::list_moving_averages;
3use once_cell::sync::Lazy;
4use serde::Serialize;
5use std::collections::HashMap;
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
8#[serde(rename_all = "snake_case")]
9pub enum IndicatorParamKind {
10 Int,
11 Float,
12 Bool,
13 EnumString,
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Serialize)]
17#[serde(rename_all = "snake_case")]
18pub enum ParamValueStatic {
19 Int(i64),
20 Float(f64),
21 Bool(bool),
22 EnumString(&'static str),
23}
24
25#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
26#[serde(rename_all = "snake_case")]
27pub enum IndicatorValueType {
28 F64,
29 F32,
30 I32,
31 Bool,
32}
33
34#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
35#[serde(rename_all = "snake_case")]
36pub enum IndicatorInputKind {
37 Slice,
38 Candles,
39 Ohlc,
40 Ohlcv,
41 HighLow,
42 CloseVolume,
43}
44
45#[derive(Debug, Clone, Serialize)]
46pub struct IndicatorParamInfo {
47 pub key: &'static str,
48 pub label: &'static str,
49 pub kind: IndicatorParamKind,
50 pub required: bool,
51 pub default: Option<ParamValueStatic>,
52 pub min: Option<f64>,
53 pub max: Option<f64>,
54 pub step: Option<f64>,
55 pub enum_values: &'static [&'static str],
56 pub notes: Option<&'static str>,
57}
58
59#[derive(Debug, Clone, Copy, Serialize)]
60pub struct IndicatorOutputInfo {
61 pub id: &'static str,
62 pub label: &'static str,
63 pub value_type: IndicatorValueType,
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize)]
67pub struct IndicatorCapabilities {
68 pub supports_cpu_single: bool,
69 pub supports_cpu_batch: bool,
70 pub supports_cuda_single: bool,
71 pub supports_cuda_batch: bool,
72 pub supports_cuda_vram: bool,
73}
74
75#[derive(Debug, Clone, Serialize)]
76pub struct IndicatorInfo {
77 pub id: &'static str,
78 pub label: &'static str,
79 pub category: &'static str,
80 pub dynamic_strategy_eligible: bool,
81 pub input_kind: IndicatorInputKind,
82 pub outputs: Vec<IndicatorOutputInfo>,
83 pub params: Vec<IndicatorParamInfo>,
84 pub capabilities: IndicatorCapabilities,
85 pub notes: Option<&'static str>,
86}
87
88const BUCKET_B_INDICATORS: &[&str] = &[
89 "acosc",
90 "alligator",
91 "alphatrend",
92 "aroon",
93 "aso",
94 "bandpass",
95 "bollinger_bands_width",
96 "chande",
97 "chandelier_exit",
98 "cksp",
99 "correlation_cycle",
100 "damiani_volatmeter",
101 "di",
102 "dm",
103 "donchian",
104 "dvdiqqe",
105 "emd",
106 "eri",
107 "fisher",
108 "fvg_trailing_stop",
109 "gatorosc",
110 "halftrend",
111 "kdj",
112 "keltner",
113 "kst",
114 "lpc",
115 "mab",
116 "macz",
117 "mama",
118 "minmax",
119 "msw",
120 "nadaraya_watson_envelope",
121 "otto",
122 "pma",
123 "prb",
124 "qqe",
125 "range_filter",
126 "rsmk",
127 "squeeze_momentum",
128 "srsi",
129 "supertrend",
130 "vi",
131 "voss",
132 "wavetrend",
133 "wto",
134 "ehlers_pma",
135 "buff_averages",
136 "vwap",
137 "pivot",
138];
139
140const EMPTY_ENUM_VALUES: &[&str] = &[];
141const ENUM_VALUES_TRUE_FALSE: &[&str] = &["true", "false"];
142const ENUM_VALUES_MA_OUTPUT: &[&str] = &["mama", "fama"];
143const ENUM_VALUES_PMA_OUTPUT: &[&str] = &["predict", "trigger"];
144const ENUM_VALUES_BUFF_OUTPUT: &[&str] = &["fast", "slow"];
145
146const OUTPUT_VALUE_F64: IndicatorOutputInfo = IndicatorOutputInfo {
147 id: "value",
148 label: "Value",
149 value_type: IndicatorValueType::F64,
150};
151
152const OUTPUT_VALUE_BOOL: IndicatorOutputInfo = IndicatorOutputInfo {
153 id: "value",
154 label: "Value",
155 value_type: IndicatorValueType::Bool,
156};
157
158const OUTPUT_MATRIX: IndicatorOutputInfo = IndicatorOutputInfo {
159 id: "matrix",
160 label: "Matrix",
161 value_type: IndicatorValueType::Bool,
162};
163
164const OUTPUT_MACD: IndicatorOutputInfo = IndicatorOutputInfo {
165 id: "macd",
166 label: "MACD",
167 value_type: IndicatorValueType::F64,
168};
169const OUTPUT_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
170 id: "signal",
171 label: "Signal",
172 value_type: IndicatorValueType::F64,
173};
174const OUTPUT_HIST: IndicatorOutputInfo = IndicatorOutputInfo {
175 id: "hist",
176 label: "Histogram",
177 value_type: IndicatorValueType::F64,
178};
179const OUTPUT_UPPER: IndicatorOutputInfo = IndicatorOutputInfo {
180 id: "upper",
181 label: "Upper",
182 value_type: IndicatorValueType::F64,
183};
184const OUTPUT_MIDDLE: IndicatorOutputInfo = IndicatorOutputInfo {
185 id: "middle",
186 label: "Middle",
187 value_type: IndicatorValueType::F64,
188};
189const OUTPUT_LOWER: IndicatorOutputInfo = IndicatorOutputInfo {
190 id: "lower",
191 label: "Lower",
192 value_type: IndicatorValueType::F64,
193};
194const OUTPUT_K: IndicatorOutputInfo = IndicatorOutputInfo {
195 id: "k",
196 label: "K",
197 value_type: IndicatorValueType::F64,
198};
199const OUTPUT_D: IndicatorOutputInfo = IndicatorOutputInfo {
200 id: "d",
201 label: "D",
202 value_type: IndicatorValueType::F64,
203};
204const OUTPUT_VPCI: IndicatorOutputInfo = IndicatorOutputInfo {
205 id: "vpci",
206 label: "VPCI",
207 value_type: IndicatorValueType::F64,
208};
209const OUTPUT_VPCIS: IndicatorOutputInfo = IndicatorOutputInfo {
210 id: "vpcis",
211 label: "VPCIS",
212 value_type: IndicatorValueType::F64,
213};
214const OUTPUT_MOMENTUM: IndicatorOutputInfo = IndicatorOutputInfo {
215 id: "momentum",
216 label: "Momentum",
217 value_type: IndicatorValueType::F64,
218};
219const OUTPUT_SQUEEZE: IndicatorOutputInfo = IndicatorOutputInfo {
220 id: "squeeze",
221 label: "Squeeze",
222 value_type: IndicatorValueType::F64,
223};
224const OUTPUT_MAMA: IndicatorOutputInfo = IndicatorOutputInfo {
225 id: "mama",
226 label: "MAMA",
227 value_type: IndicatorValueType::F64,
228};
229const OUTPUT_FAMA: IndicatorOutputInfo = IndicatorOutputInfo {
230 id: "fama",
231 label: "FAMA",
232 value_type: IndicatorValueType::F64,
233};
234const OUTPUT_PREDICT: IndicatorOutputInfo = IndicatorOutputInfo {
235 id: "predict",
236 label: "Predict",
237 value_type: IndicatorValueType::F64,
238};
239const OUTPUT_TRIGGER: IndicatorOutputInfo = IndicatorOutputInfo {
240 id: "trigger",
241 label: "Trigger",
242 value_type: IndicatorValueType::F64,
243};
244const OUTPUT_FAST: IndicatorOutputInfo = IndicatorOutputInfo {
245 id: "fast",
246 label: "Fast",
247 value_type: IndicatorValueType::F64,
248};
249const OUTPUT_SLOW: IndicatorOutputInfo = IndicatorOutputInfo {
250 id: "slow",
251 label: "Slow",
252 value_type: IndicatorValueType::F64,
253};
254const OUTPUT_PLUS: IndicatorOutputInfo = IndicatorOutputInfo {
255 id: "plus",
256 label: "Plus",
257 value_type: IndicatorValueType::F64,
258};
259const OUTPUT_MINUS: IndicatorOutputInfo = IndicatorOutputInfo {
260 id: "minus",
261 label: "Minus",
262 value_type: IndicatorValueType::F64,
263};
264const OUTPUT_UP: IndicatorOutputInfo = IndicatorOutputInfo {
265 id: "up",
266 label: "Up",
267 value_type: IndicatorValueType::F64,
268};
269const OUTPUT_DOWN: IndicatorOutputInfo = IndicatorOutputInfo {
270 id: "down",
271 label: "Down",
272 value_type: IndicatorValueType::F64,
273};
274const OUTPUT_TREND: IndicatorOutputInfo = IndicatorOutputInfo {
275 id: "trend",
276 label: "Trend",
277 value_type: IndicatorValueType::F64,
278};
279const OUTPUT_CHANGED: IndicatorOutputInfo = IndicatorOutputInfo {
280 id: "changed",
281 label: "Changed",
282 value_type: IndicatorValueType::F64,
283};
284const OUTPUT_J: IndicatorOutputInfo = IndicatorOutputInfo {
285 id: "j",
286 label: "J",
287 value_type: IndicatorValueType::F64,
288};
289const OUTPUT_MOMENTUM_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
290 id: "signal",
291 label: "Signal",
292 value_type: IndicatorValueType::F64,
293};
294const OUTPUT_WT1: IndicatorOutputInfo = IndicatorOutputInfo {
295 id: "wt1",
296 label: "WT1",
297 value_type: IndicatorValueType::F64,
298};
299const OUTPUT_WT2: IndicatorOutputInfo = IndicatorOutputInfo {
300 id: "wt2",
301 label: "WT2",
302 value_type: IndicatorValueType::F64,
303};
304const OUTPUT_WT_DIFF: IndicatorOutputInfo = IndicatorOutputInfo {
305 id: "wt_diff",
306 label: "WT Diff",
307 value_type: IndicatorValueType::F64,
308};
309const OUTPUT_WAVETREND1: IndicatorOutputInfo = IndicatorOutputInfo {
310 id: "wavetrend1",
311 label: "WaveTrend 1",
312 value_type: IndicatorValueType::F64,
313};
314const OUTPUT_WAVETREND2: IndicatorOutputInfo = IndicatorOutputInfo {
315 id: "wavetrend2",
316 label: "WaveTrend 2",
317 value_type: IndicatorValueType::F64,
318};
319const OUTPUT_WAVETREND: IndicatorOutputInfo = IndicatorOutputInfo {
320 id: "wavetrend",
321 label: "WaveTrend",
322 value_type: IndicatorValueType::F64,
323};
324const OUTPUT_HISTOGRAM: IndicatorOutputInfo = IndicatorOutputInfo {
325 id: "histogram",
326 label: "Histogram",
327 value_type: IndicatorValueType::F64,
328};
329const OUTPUT_YZ: IndicatorOutputInfo = IndicatorOutputInfo {
330 id: "yz",
331 label: "YZ",
332 value_type: IndicatorValueType::F64,
333};
334const OUTPUT_RS: IndicatorOutputInfo = IndicatorOutputInfo {
335 id: "rs",
336 label: "RS",
337 value_type: IndicatorValueType::F64,
338};
339
340const OUTPUTS_VALUE_F64: &[IndicatorOutputInfo] = &[OUTPUT_VALUE_F64];
341const OUTPUTS_VALUE_BOOL: &[IndicatorOutputInfo] = &[OUTPUT_VALUE_BOOL];
342const OUTPUTS_MATRIX_BOOL: &[IndicatorOutputInfo] = &[OUTPUT_MATRIX];
343const OUTPUTS_MACD: &[IndicatorOutputInfo] = &[OUTPUT_MACD, OUTPUT_SIGNAL, OUTPUT_HIST];
344const OUTPUTS_BOLLINGER: &[IndicatorOutputInfo] = &[OUTPUT_UPPER, OUTPUT_MIDDLE, OUTPUT_LOWER];
345const OUTPUTS_STOCH: &[IndicatorOutputInfo] = &[OUTPUT_K, OUTPUT_D];
346const OUTPUTS_VPCI: &[IndicatorOutputInfo] = &[OUTPUT_VPCI, OUTPUT_VPCIS];
347const OUTPUTS_TTM_SQUEEZE: &[IndicatorOutputInfo] = &[OUTPUT_MOMENTUM, OUTPUT_SQUEEZE];
348const OUTPUTS_MAMA: &[IndicatorOutputInfo] = &[OUTPUT_MAMA, OUTPUT_FAMA];
349const OUTPUTS_EHLERS_PMA: &[IndicatorOutputInfo] = &[OUTPUT_PREDICT, OUTPUT_TRIGGER];
350const OUTPUTS_BUFF_AVERAGES: &[IndicatorOutputInfo] = &[OUTPUT_FAST, OUTPUT_SLOW];
351const OUTPUTS_PLUS_MINUS: &[IndicatorOutputInfo] = &[OUTPUT_PLUS, OUTPUT_MINUS];
352const OUTPUTS_UP_DOWN: &[IndicatorOutputInfo] = &[OUTPUT_UP, OUTPUT_DOWN];
353const OUTPUTS_TREND_CHANGED: &[IndicatorOutputInfo] = &[OUTPUT_TREND, OUTPUT_CHANGED];
354const OUTPUTS_KDJ: &[IndicatorOutputInfo] = &[OUTPUT_K, OUTPUT_D, OUTPUT_J];
355const OUTPUTS_SQUEEZE_MOMENTUM: &[IndicatorOutputInfo] =
356 &[OUTPUT_MOMENTUM, OUTPUT_SQUEEZE, OUTPUT_MOMENTUM_SIGNAL];
357const OUTPUTS_WTO: &[IndicatorOutputInfo] =
358 &[OUTPUT_WAVETREND1, OUTPUT_WAVETREND2, OUTPUT_HISTOGRAM];
359const OUTPUTS_WAVETREND: &[IndicatorOutputInfo] = &[OUTPUT_WT1, OUTPUT_WT2, OUTPUT_WT_DIFF];
360const OUTPUTS_MOD_GOD_MODE: &[IndicatorOutputInfo] =
361 &[OUTPUT_WAVETREND, OUTPUT_SIGNAL, OUTPUT_HISTOGRAM];
362const OUTPUTS_YANG_ZHANG: &[IndicatorOutputInfo] = &[OUTPUT_YZ, OUTPUT_RS];
363const OUTPUTS_ACOSC: &[IndicatorOutputInfo] = &[
364 IndicatorOutputInfo {
365 id: "osc",
366 label: "Oscillator",
367 value_type: IndicatorValueType::F64,
368 },
369 IndicatorOutputInfo {
370 id: "change",
371 label: "Change",
372 value_type: IndicatorValueType::F64,
373 },
374];
375const OUTPUTS_ALLIGATOR: &[IndicatorOutputInfo] = &[
376 IndicatorOutputInfo {
377 id: "jaw",
378 label: "Jaw",
379 value_type: IndicatorValueType::F64,
380 },
381 IndicatorOutputInfo {
382 id: "teeth",
383 label: "Teeth",
384 value_type: IndicatorValueType::F64,
385 },
386 IndicatorOutputInfo {
387 id: "lips",
388 label: "Lips",
389 value_type: IndicatorValueType::F64,
390 },
391];
392const OUTPUTS_K1_K2: &[IndicatorOutputInfo] = &[
393 IndicatorOutputInfo {
394 id: "k1",
395 label: "K1",
396 value_type: IndicatorValueType::F64,
397 },
398 IndicatorOutputInfo {
399 id: "k2",
400 label: "K2",
401 value_type: IndicatorValueType::F64,
402 },
403];
404const OUTPUTS_BULLS_BEARS: &[IndicatorOutputInfo] = &[
405 IndicatorOutputInfo {
406 id: "bulls",
407 label: "Bulls",
408 value_type: IndicatorValueType::F64,
409 },
410 IndicatorOutputInfo {
411 id: "bears",
412 label: "Bears",
413 value_type: IndicatorValueType::F64,
414 },
415];
416const OUTPUTS_BANDPASS: &[IndicatorOutputInfo] = &[
417 IndicatorOutputInfo {
418 id: "bp",
419 label: "BandPass",
420 value_type: IndicatorValueType::F64,
421 },
422 IndicatorOutputInfo {
423 id: "bp_normalized",
424 label: "Normalized",
425 value_type: IndicatorValueType::F64,
426 },
427 OUTPUT_SIGNAL,
428 OUTPUT_TRIGGER,
429];
430const OUTPUTS_LONG_SHORT_STOP: &[IndicatorOutputInfo] = &[
431 IndicatorOutputInfo {
432 id: "long_stop",
433 label: "Long Stop",
434 value_type: IndicatorValueType::F64,
435 },
436 IndicatorOutputInfo {
437 id: "short_stop",
438 label: "Short Stop",
439 value_type: IndicatorValueType::F64,
440 },
441];
442const OUTPUTS_LONG_SHORT_VALUES: &[IndicatorOutputInfo] = &[
443 IndicatorOutputInfo {
444 id: "long_values",
445 label: "Long",
446 value_type: IndicatorValueType::F64,
447 },
448 IndicatorOutputInfo {
449 id: "short_values",
450 label: "Short",
451 value_type: IndicatorValueType::F64,
452 },
453];
454const OUTPUTS_CORRELATION_CYCLE: &[IndicatorOutputInfo] = &[
455 IndicatorOutputInfo {
456 id: "real",
457 label: "Real",
458 value_type: IndicatorValueType::F64,
459 },
460 IndicatorOutputInfo {
461 id: "imag",
462 label: "Imag",
463 value_type: IndicatorValueType::F64,
464 },
465 IndicatorOutputInfo {
466 id: "angle",
467 label: "Angle",
468 value_type: IndicatorValueType::F64,
469 },
470 IndicatorOutputInfo {
471 id: "state",
472 label: "State",
473 value_type: IndicatorValueType::F64,
474 },
475];
476const OUTPUTS_VOL_ANTI: &[IndicatorOutputInfo] = &[
477 IndicatorOutputInfo {
478 id: "vol",
479 label: "Vol",
480 value_type: IndicatorValueType::F64,
481 },
482 IndicatorOutputInfo {
483 id: "anti",
484 label: "Anti",
485 value_type: IndicatorValueType::F64,
486 },
487];
488const OUTPUTS_DVDIQQE: &[IndicatorOutputInfo] = &[
489 IndicatorOutputInfo {
490 id: "dvdi",
491 label: "DVDI",
492 value_type: IndicatorValueType::F64,
493 },
494 IndicatorOutputInfo {
495 id: "fast_tl",
496 label: "Fast TL",
497 value_type: IndicatorValueType::F64,
498 },
499 IndicatorOutputInfo {
500 id: "slow_tl",
501 label: "Slow TL",
502 value_type: IndicatorValueType::F64,
503 },
504 IndicatorOutputInfo {
505 id: "center_line",
506 label: "Center Line",
507 value_type: IndicatorValueType::F64,
508 },
509];
510const OUTPUTS_UPPER_MIDDLE_LOWER_BAND: &[IndicatorOutputInfo] = &[
511 IndicatorOutputInfo {
512 id: "upperband",
513 label: "Upper",
514 value_type: IndicatorValueType::F64,
515 },
516 IndicatorOutputInfo {
517 id: "middleband",
518 label: "Middle",
519 value_type: IndicatorValueType::F64,
520 },
521 IndicatorOutputInfo {
522 id: "lowerband",
523 label: "Lower",
524 value_type: IndicatorValueType::F64,
525 },
526];
527const OUTPUTS_BULL_BEAR: &[IndicatorOutputInfo] = &[
528 IndicatorOutputInfo {
529 id: "bull",
530 label: "Bull",
531 value_type: IndicatorValueType::F64,
532 },
533 IndicatorOutputInfo {
534 id: "bear",
535 label: "Bear",
536 value_type: IndicatorValueType::F64,
537 },
538];
539const OUTPUTS_FVG_TS: &[IndicatorOutputInfo] = &[
540 OUTPUT_UPPER,
541 OUTPUT_LOWER,
542 IndicatorOutputInfo {
543 id: "upper_ts",
544 label: "Upper TS",
545 value_type: IndicatorValueType::F64,
546 },
547 IndicatorOutputInfo {
548 id: "lower_ts",
549 label: "Lower TS",
550 value_type: IndicatorValueType::F64,
551 },
552];
553const OUTPUTS_GATOROSC: &[IndicatorOutputInfo] = &[
554 OUTPUT_UPPER,
555 OUTPUT_LOWER,
556 IndicatorOutputInfo {
557 id: "upper_change",
558 label: "Upper Change",
559 value_type: IndicatorValueType::F64,
560 },
561 IndicatorOutputInfo {
562 id: "lower_change",
563 label: "Lower Change",
564 value_type: IndicatorValueType::F64,
565 },
566];
567const OUTPUTS_HALFTREND: &[IndicatorOutputInfo] = &[
568 IndicatorOutputInfo {
569 id: "halftrend",
570 label: "HalfTrend",
571 value_type: IndicatorValueType::F64,
572 },
573 OUTPUT_TREND,
574 IndicatorOutputInfo {
575 id: "atr_high",
576 label: "ATR High",
577 value_type: IndicatorValueType::F64,
578 },
579 IndicatorOutputInfo {
580 id: "atr_low",
581 label: "ATR Low",
582 value_type: IndicatorValueType::F64,
583 },
584 IndicatorOutputInfo {
585 id: "buy_signal",
586 label: "Buy",
587 value_type: IndicatorValueType::F64,
588 },
589 IndicatorOutputInfo {
590 id: "sell_signal",
591 label: "Sell",
592 value_type: IndicatorValueType::F64,
593 },
594];
595const OUTPUTS_LINE_SIGNAL: &[IndicatorOutputInfo] = &[
596 IndicatorOutputInfo {
597 id: "line",
598 label: "Line",
599 value_type: IndicatorValueType::F64,
600 },
601 OUTPUT_SIGNAL,
602];
603const OUTPUTS_FISHER: &[IndicatorOutputInfo] = &[
604 IndicatorOutputInfo {
605 id: "fisher",
606 label: "Fisher",
607 value_type: IndicatorValueType::F64,
608 },
609 OUTPUT_SIGNAL,
610];
611const OUTPUTS_UPPER_LOWER: &[IndicatorOutputInfo] = &[OUTPUT_UPPER, OUTPUT_LOWER];
612const OUTPUTS_FILTER_BANDS: &[IndicatorOutputInfo] = &[
613 IndicatorOutputInfo {
614 id: "filter",
615 label: "Filter",
616 value_type: IndicatorValueType::F64,
617 },
618 IndicatorOutputInfo {
619 id: "high_band",
620 label: "High Band",
621 value_type: IndicatorValueType::F64,
622 },
623 IndicatorOutputInfo {
624 id: "low_band",
625 label: "Low Band",
626 value_type: IndicatorValueType::F64,
627 },
628];
629const OUTPUTS_MINMAX: &[IndicatorOutputInfo] = &[
630 IndicatorOutputInfo {
631 id: "is_min",
632 label: "Is Min",
633 value_type: IndicatorValueType::F64,
634 },
635 IndicatorOutputInfo {
636 id: "is_max",
637 label: "Is Max",
638 value_type: IndicatorValueType::F64,
639 },
640 IndicatorOutputInfo {
641 id: "last_min",
642 label: "Last Min",
643 value_type: IndicatorValueType::F64,
644 },
645 IndicatorOutputInfo {
646 id: "last_max",
647 label: "Last Max",
648 value_type: IndicatorValueType::F64,
649 },
650];
651const OUTPUTS_SINE_LEAD: &[IndicatorOutputInfo] = &[
652 IndicatorOutputInfo {
653 id: "sine",
654 label: "Sine",
655 value_type: IndicatorValueType::F64,
656 },
657 IndicatorOutputInfo {
658 id: "lead",
659 label: "Lead",
660 value_type: IndicatorValueType::F64,
661 },
662];
663const OUTPUTS_HOTT_LOTT: &[IndicatorOutputInfo] = &[
664 IndicatorOutputInfo {
665 id: "hott",
666 label: "HOTT",
667 value_type: IndicatorValueType::F64,
668 },
669 IndicatorOutputInfo {
670 id: "lott",
671 label: "LOTT",
672 value_type: IndicatorValueType::F64,
673 },
674];
675const OUTPUTS_PRB: &[IndicatorOutputInfo] = &[
676 IndicatorOutputInfo {
677 id: "values",
678 label: "Value",
679 value_type: IndicatorValueType::F64,
680 },
681 IndicatorOutputInfo {
682 id: "upper_band",
683 label: "Upper",
684 value_type: IndicatorValueType::F64,
685 },
686 IndicatorOutputInfo {
687 id: "lower_band",
688 label: "Lower",
689 value_type: IndicatorValueType::F64,
690 },
691];
692const OUTPUTS_INDICATOR_SIGNAL: &[IndicatorOutputInfo] = &[
693 IndicatorOutputInfo {
694 id: "indicator",
695 label: "Indicator",
696 value_type: IndicatorValueType::F64,
697 },
698 OUTPUT_SIGNAL,
699];
700const OUTPUTS_VOSS: &[IndicatorOutputInfo] = &[
701 IndicatorOutputInfo {
702 id: "voss",
703 label: "Voss",
704 value_type: IndicatorValueType::F64,
705 },
706 IndicatorOutputInfo {
707 id: "filt",
708 label: "Filter",
709 value_type: IndicatorValueType::F64,
710 },
711];
712const OUTPUTS_PIVOT: &[IndicatorOutputInfo] = &[
713 IndicatorOutputInfo {
714 id: "pp",
715 label: "PP",
716 value_type: IndicatorValueType::F64,
717 },
718 IndicatorOutputInfo {
719 id: "r1",
720 label: "R1",
721 value_type: IndicatorValueType::F64,
722 },
723 IndicatorOutputInfo {
724 id: "r2",
725 label: "R2",
726 value_type: IndicatorValueType::F64,
727 },
728 IndicatorOutputInfo {
729 id: "r3",
730 label: "R3",
731 value_type: IndicatorValueType::F64,
732 },
733 IndicatorOutputInfo {
734 id: "r4",
735 label: "R4",
736 value_type: IndicatorValueType::F64,
737 },
738 IndicatorOutputInfo {
739 id: "s1",
740 label: "S1",
741 value_type: IndicatorValueType::F64,
742 },
743 IndicatorOutputInfo {
744 id: "s2",
745 label: "S2",
746 value_type: IndicatorValueType::F64,
747 },
748 IndicatorOutputInfo {
749 id: "s3",
750 label: "S3",
751 value_type: IndicatorValueType::F64,
752 },
753 IndicatorOutputInfo {
754 id: "s4",
755 label: "S4",
756 value_type: IndicatorValueType::F64,
757 },
758];
759
760const PARAM_PERIOD: IndicatorParamInfo = IndicatorParamInfo {
761 key: "period",
762 label: "Period",
763 kind: IndicatorParamKind::Int,
764 required: true,
765 default: Some(ParamValueStatic::Int(14)),
766 min: Some(1.0),
767 max: None,
768 step: Some(1.0),
769 enum_values: EMPTY_ENUM_VALUES,
770 notes: None,
771};
772
773const PARAMS_PERIOD_ONLY: &[IndicatorParamInfo] = &[PARAM_PERIOD];
774
775const PARAM_OUTPUT_MAMA: IndicatorParamInfo = IndicatorParamInfo {
776 key: "output",
777 label: "Output",
778 kind: IndicatorParamKind::EnumString,
779 required: false,
780 default: Some(ParamValueStatic::EnumString("mama")),
781 min: None,
782 max: None,
783 step: None,
784 enum_values: ENUM_VALUES_MA_OUTPUT,
785 notes: None,
786};
787
788const PARAM_OUTPUT_EHLERS_PMA: IndicatorParamInfo = IndicatorParamInfo {
789 key: "output",
790 label: "Output",
791 kind: IndicatorParamKind::EnumString,
792 required: false,
793 default: Some(ParamValueStatic::EnumString("predict")),
794 min: None,
795 max: None,
796 step: None,
797 enum_values: ENUM_VALUES_PMA_OUTPUT,
798 notes: None,
799};
800
801const PARAM_OUTPUT_BUFF_AVERAGES: IndicatorParamInfo = IndicatorParamInfo {
802 key: "output",
803 label: "Output",
804 kind: IndicatorParamKind::EnumString,
805 required: false,
806 default: Some(ParamValueStatic::EnumString("fast")),
807 min: None,
808 max: None,
809 step: None,
810 enum_values: ENUM_VALUES_BUFF_OUTPUT,
811 notes: None,
812};
813
814const PARAM_ANCHOR: IndicatorParamInfo = IndicatorParamInfo {
815 key: "anchor",
816 label: "Anchor",
817 kind: IndicatorParamKind::EnumString,
818 required: false,
819 default: Some(ParamValueStatic::EnumString("1d")),
820 min: None,
821 max: None,
822 step: None,
823 enum_values: EMPTY_ENUM_VALUES,
824 notes: Some("Anchor string for session boundary"),
825};
826
827const PARAM_STRICT: IndicatorParamInfo = IndicatorParamInfo {
828 key: "strict",
829 label: "Strict",
830 kind: IndicatorParamKind::Bool,
831 required: false,
832 default: Some(ParamValueStatic::Bool(false)),
833 min: None,
834 max: None,
835 step: None,
836 enum_values: ENUM_VALUES_TRUE_FALSE,
837 notes: None,
838};
839
840const PARAM_NONE: &[IndicatorParamInfo] = &[];
841
842const PARAM_RSI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
843 key: "period",
844 label: "Period",
845 kind: IndicatorParamKind::Int,
846 required: false,
847 default: Some(ParamValueStatic::Int(14)),
848 min: Some(1.0),
849 max: None,
850 step: Some(1.0),
851 enum_values: EMPTY_ENUM_VALUES,
852 notes: None,
853}];
854
855const PARAM_ROC_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
856 key: "period",
857 label: "Period",
858 kind: IndicatorParamKind::Int,
859 required: false,
860 default: Some(ParamValueStatic::Int(9)),
861 min: Some(1.0),
862 max: None,
863 step: Some(1.0),
864 enum_values: EMPTY_ENUM_VALUES,
865 notes: None,
866}];
867
868const PARAM_ADOSC: &[IndicatorParamInfo] = &[
869 IndicatorParamInfo {
870 key: "short_period",
871 label: "Short Period",
872 kind: IndicatorParamKind::Int,
873 required: false,
874 default: Some(ParamValueStatic::Int(3)),
875 min: Some(1.0),
876 max: None,
877 step: Some(1.0),
878 enum_values: EMPTY_ENUM_VALUES,
879 notes: None,
880 },
881 IndicatorParamInfo {
882 key: "long_period",
883 label: "Long Period",
884 kind: IndicatorParamKind::Int,
885 required: false,
886 default: Some(ParamValueStatic::Int(10)),
887 min: Some(1.0),
888 max: None,
889 step: Some(1.0),
890 enum_values: EMPTY_ENUM_VALUES,
891 notes: None,
892 },
893];
894
895const PARAM_AO: &[IndicatorParamInfo] = &[
896 IndicatorParamInfo {
897 key: "short_period",
898 label: "Short Period",
899 kind: IndicatorParamKind::Int,
900 required: false,
901 default: Some(ParamValueStatic::Int(5)),
902 min: Some(1.0),
903 max: None,
904 step: Some(1.0),
905 enum_values: EMPTY_ENUM_VALUES,
906 notes: None,
907 },
908 IndicatorParamInfo {
909 key: "long_period",
910 label: "Long Period",
911 kind: IndicatorParamKind::Int,
912 required: false,
913 default: Some(ParamValueStatic::Int(34)),
914 min: Some(1.0),
915 max: None,
916 step: Some(1.0),
917 enum_values: EMPTY_ENUM_VALUES,
918 notes: None,
919 },
920];
921
922const PARAM_EFI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
923 key: "period",
924 label: "Period",
925 kind: IndicatorParamKind::Int,
926 required: false,
927 default: Some(ParamValueStatic::Int(13)),
928 min: Some(1.0),
929 max: None,
930 step: Some(1.0),
931 enum_values: EMPTY_ENUM_VALUES,
932 notes: None,
933}];
934
935const PARAM_MFI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
936 key: "period",
937 label: "Period",
938 kind: IndicatorParamKind::Int,
939 required: false,
940 default: Some(ParamValueStatic::Int(14)),
941 min: Some(1.0),
942 max: None,
943 step: Some(1.0),
944 enum_values: EMPTY_ENUM_VALUES,
945 notes: None,
946}];
947
948const PARAM_MASS_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
949 key: "period",
950 label: "Period",
951 kind: IndicatorParamKind::Int,
952 required: false,
953 default: Some(ParamValueStatic::Int(5)),
954 min: Some(1.0),
955 max: None,
956 step: Some(1.0),
957 enum_values: EMPTY_ENUM_VALUES,
958 notes: None,
959}];
960
961const PARAM_KVO: &[IndicatorParamInfo] = &[
962 IndicatorParamInfo {
963 key: "short_period",
964 label: "Short Period",
965 kind: IndicatorParamKind::Int,
966 required: false,
967 default: Some(ParamValueStatic::Int(2)),
968 min: Some(1.0),
969 max: None,
970 step: Some(1.0),
971 enum_values: EMPTY_ENUM_VALUES,
972 notes: None,
973 },
974 IndicatorParamInfo {
975 key: "long_period",
976 label: "Long Period",
977 kind: IndicatorParamKind::Int,
978 required: false,
979 default: Some(ParamValueStatic::Int(5)),
980 min: Some(1.0),
981 max: None,
982 step: Some(1.0),
983 enum_values: EMPTY_ENUM_VALUES,
984 notes: None,
985 },
986];
987
988const PARAM_VOSC: &[IndicatorParamInfo] = &[
989 IndicatorParamInfo {
990 key: "short_period",
991 label: "Short Period",
992 kind: IndicatorParamKind::Int,
993 required: false,
994 default: Some(ParamValueStatic::Int(2)),
995 min: Some(1.0),
996 max: None,
997 step: Some(1.0),
998 enum_values: EMPTY_ENUM_VALUES,
999 notes: None,
1000 },
1001 IndicatorParamInfo {
1002 key: "long_period",
1003 label: "Long Period",
1004 kind: IndicatorParamKind::Int,
1005 required: false,
1006 default: Some(ParamValueStatic::Int(5)),
1007 min: Some(1.0),
1008 max: None,
1009 step: Some(1.0),
1010 enum_values: EMPTY_ENUM_VALUES,
1011 notes: None,
1012 },
1013];
1014
1015const PARAM_MOM_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1016 key: "period",
1017 label: "Period",
1018 kind: IndicatorParamKind::Int,
1019 required: false,
1020 default: Some(ParamValueStatic::Int(10)),
1021 min: Some(1.0),
1022 max: None,
1023 step: Some(1.0),
1024 enum_values: EMPTY_ENUM_VALUES,
1025 notes: None,
1026}];
1027
1028const PARAM_CMO_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1029 key: "period",
1030 label: "Period",
1031 kind: IndicatorParamKind::Int,
1032 required: false,
1033 default: Some(ParamValueStatic::Int(14)),
1034 min: Some(1.0),
1035 max: None,
1036 step: Some(1.0),
1037 enum_values: EMPTY_ENUM_VALUES,
1038 notes: None,
1039}];
1040
1041const PARAM_ROCP_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1042 key: "period",
1043 label: "Period",
1044 kind: IndicatorParamKind::Int,
1045 required: false,
1046 default: Some(ParamValueStatic::Int(10)),
1047 min: Some(1.0),
1048 max: None,
1049 step: Some(1.0),
1050 enum_values: EMPTY_ENUM_VALUES,
1051 notes: None,
1052}];
1053
1054const PARAM_ROCR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1055 key: "period",
1056 label: "Period",
1057 kind: IndicatorParamKind::Int,
1058 required: false,
1059 default: Some(ParamValueStatic::Int(10)),
1060 min: Some(1.0),
1061 max: None,
1062 step: Some(1.0),
1063 enum_values: EMPTY_ENUM_VALUES,
1064 notes: None,
1065}];
1066
1067const PARAM_PPO: &[IndicatorParamInfo] = &[
1068 IndicatorParamInfo {
1069 key: "fast_period",
1070 label: "Fast Period",
1071 kind: IndicatorParamKind::Int,
1072 required: false,
1073 default: Some(ParamValueStatic::Int(12)),
1074 min: Some(1.0),
1075 max: None,
1076 step: Some(1.0),
1077 enum_values: EMPTY_ENUM_VALUES,
1078 notes: None,
1079 },
1080 IndicatorParamInfo {
1081 key: "slow_period",
1082 label: "Slow Period",
1083 kind: IndicatorParamKind::Int,
1084 required: false,
1085 default: Some(ParamValueStatic::Int(26)),
1086 min: Some(1.0),
1087 max: None,
1088 step: Some(1.0),
1089 enum_values: EMPTY_ENUM_VALUES,
1090 notes: None,
1091 },
1092 IndicatorParamInfo {
1093 key: "ma_type",
1094 label: "MA Type",
1095 kind: IndicatorParamKind::EnumString,
1096 required: false,
1097 default: Some(ParamValueStatic::EnumString("sma")),
1098 min: None,
1099 max: None,
1100 step: None,
1101 enum_values: EMPTY_ENUM_VALUES,
1102 notes: None,
1103 },
1104];
1105
1106const PARAM_TRIX_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1107 key: "period",
1108 label: "Period",
1109 kind: IndicatorParamKind::Int,
1110 required: false,
1111 default: Some(ParamValueStatic::Int(18)),
1112 min: Some(1.0),
1113 max: None,
1114 step: Some(1.0),
1115 enum_values: EMPTY_ENUM_VALUES,
1116 notes: None,
1117}];
1118
1119const PARAM_TSI: &[IndicatorParamInfo] = &[
1120 IndicatorParamInfo {
1121 key: "long_period",
1122 label: "Long Period",
1123 kind: IndicatorParamKind::Int,
1124 required: false,
1125 default: Some(ParamValueStatic::Int(25)),
1126 min: Some(1.0),
1127 max: None,
1128 step: Some(1.0),
1129 enum_values: EMPTY_ENUM_VALUES,
1130 notes: None,
1131 },
1132 IndicatorParamInfo {
1133 key: "short_period",
1134 label: "Short Period",
1135 kind: IndicatorParamKind::Int,
1136 required: false,
1137 default: Some(ParamValueStatic::Int(13)),
1138 min: Some(1.0),
1139 max: None,
1140 step: Some(1.0),
1141 enum_values: EMPTY_ENUM_VALUES,
1142 notes: None,
1143 },
1144];
1145
1146const PARAM_STDDEV: &[IndicatorParamInfo] = &[
1147 IndicatorParamInfo {
1148 key: "period",
1149 label: "Period",
1150 kind: IndicatorParamKind::Int,
1151 required: false,
1152 default: Some(ParamValueStatic::Int(5)),
1153 min: Some(1.0),
1154 max: None,
1155 step: Some(1.0),
1156 enum_values: EMPTY_ENUM_VALUES,
1157 notes: None,
1158 },
1159 IndicatorParamInfo {
1160 key: "nbdev",
1161 label: "NB Dev",
1162 kind: IndicatorParamKind::Float,
1163 required: false,
1164 default: Some(ParamValueStatic::Float(1.0)),
1165 min: None,
1166 max: None,
1167 step: None,
1168 enum_values: EMPTY_ENUM_VALUES,
1169 notes: None,
1170 },
1171];
1172
1173const PARAM_WILLR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1174 key: "period",
1175 label: "Period",
1176 kind: IndicatorParamKind::Int,
1177 required: false,
1178 default: Some(ParamValueStatic::Int(14)),
1179 min: Some(1.0),
1180 max: None,
1181 step: Some(1.0),
1182 enum_values: EMPTY_ENUM_VALUES,
1183 notes: None,
1184}];
1185
1186const PARAM_ULTOSC: &[IndicatorParamInfo] = &[
1187 IndicatorParamInfo {
1188 key: "timeperiod1",
1189 label: "Time Period 1",
1190 kind: IndicatorParamKind::Int,
1191 required: false,
1192 default: Some(ParamValueStatic::Int(7)),
1193 min: Some(1.0),
1194 max: None,
1195 step: Some(1.0),
1196 enum_values: EMPTY_ENUM_VALUES,
1197 notes: None,
1198 },
1199 IndicatorParamInfo {
1200 key: "timeperiod2",
1201 label: "Time Period 2",
1202 kind: IndicatorParamKind::Int,
1203 required: false,
1204 default: Some(ParamValueStatic::Int(14)),
1205 min: Some(1.0),
1206 max: None,
1207 step: Some(1.0),
1208 enum_values: EMPTY_ENUM_VALUES,
1209 notes: None,
1210 },
1211 IndicatorParamInfo {
1212 key: "timeperiod3",
1213 label: "Time Period 3",
1214 kind: IndicatorParamKind::Int,
1215 required: false,
1216 default: Some(ParamValueStatic::Int(28)),
1217 min: Some(1.0),
1218 max: None,
1219 step: Some(1.0),
1220 enum_values: EMPTY_ENUM_VALUES,
1221 notes: None,
1222 },
1223];
1224
1225const PARAM_APO: &[IndicatorParamInfo] = &[
1226 IndicatorParamInfo {
1227 key: "short_period",
1228 label: "Short Period",
1229 kind: IndicatorParamKind::Int,
1230 required: false,
1231 default: Some(ParamValueStatic::Int(10)),
1232 min: Some(1.0),
1233 max: None,
1234 step: Some(1.0),
1235 enum_values: EMPTY_ENUM_VALUES,
1236 notes: None,
1237 },
1238 IndicatorParamInfo {
1239 key: "long_period",
1240 label: "Long Period",
1241 kind: IndicatorParamKind::Int,
1242 required: false,
1243 default: Some(ParamValueStatic::Int(20)),
1244 min: Some(1.0),
1245 max: None,
1246 step: Some(1.0),
1247 enum_values: EMPTY_ENUM_VALUES,
1248 notes: None,
1249 },
1250];
1251
1252const PARAM_CCI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1253 key: "period",
1254 label: "Period",
1255 kind: IndicatorParamKind::Int,
1256 required: false,
1257 default: Some(ParamValueStatic::Int(14)),
1258 min: Some(1.0),
1259 max: None,
1260 step: Some(1.0),
1261 enum_values: EMPTY_ENUM_VALUES,
1262 notes: None,
1263}];
1264
1265const PARAM_CCI_CYCLE: &[IndicatorParamInfo] = &[
1266 IndicatorParamInfo {
1267 key: "length",
1268 label: "Length",
1269 kind: IndicatorParamKind::Int,
1270 required: false,
1271 default: Some(ParamValueStatic::Int(10)),
1272 min: Some(1.0),
1273 max: None,
1274 step: Some(1.0),
1275 enum_values: EMPTY_ENUM_VALUES,
1276 notes: None,
1277 },
1278 IndicatorParamInfo {
1279 key: "factor",
1280 label: "Factor",
1281 kind: IndicatorParamKind::Float,
1282 required: false,
1283 default: Some(ParamValueStatic::Float(0.5)),
1284 min: Some(0.0),
1285 max: Some(1.0),
1286 step: None,
1287 enum_values: EMPTY_ENUM_VALUES,
1288 notes: None,
1289 },
1290];
1291
1292const PARAM_CFO: &[IndicatorParamInfo] = &[
1293 IndicatorParamInfo {
1294 key: "period",
1295 label: "Period",
1296 kind: IndicatorParamKind::Int,
1297 required: false,
1298 default: Some(ParamValueStatic::Int(14)),
1299 min: Some(1.0),
1300 max: None,
1301 step: Some(1.0),
1302 enum_values: EMPTY_ENUM_VALUES,
1303 notes: None,
1304 },
1305 IndicatorParamInfo {
1306 key: "scalar",
1307 label: "Scalar",
1308 kind: IndicatorParamKind::Float,
1309 required: false,
1310 default: Some(ParamValueStatic::Float(100.0)),
1311 min: None,
1312 max: None,
1313 step: None,
1314 enum_values: EMPTY_ENUM_VALUES,
1315 notes: None,
1316 },
1317];
1318
1319const PARAM_ER_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1320 key: "period",
1321 label: "Period",
1322 kind: IndicatorParamKind::Int,
1323 required: false,
1324 default: Some(ParamValueStatic::Int(5)),
1325 min: Some(1.0),
1326 max: None,
1327 step: Some(1.0),
1328 enum_values: EMPTY_ENUM_VALUES,
1329 notes: None,
1330}];
1331
1332const PARAM_KURTOSIS_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1333 key: "period",
1334 label: "Period",
1335 kind: IndicatorParamKind::Int,
1336 required: false,
1337 default: Some(ParamValueStatic::Int(5)),
1338 min: Some(1.0),
1339 max: None,
1340 step: Some(1.0),
1341 enum_values: EMPTY_ENUM_VALUES,
1342 notes: None,
1343}];
1344
1345const PARAM_NATR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1346 key: "period",
1347 label: "Period",
1348 kind: IndicatorParamKind::Int,
1349 required: false,
1350 default: Some(ParamValueStatic::Int(14)),
1351 min: Some(1.0),
1352 max: None,
1353 step: Some(1.0),
1354 enum_values: EMPTY_ENUM_VALUES,
1355 notes: None,
1356}];
1357
1358const PARAM_REVERSE_RSI: &[IndicatorParamInfo] = &[
1359 IndicatorParamInfo {
1360 key: "rsi_length",
1361 label: "RSI Length",
1362 kind: IndicatorParamKind::Int,
1363 required: false,
1364 default: Some(ParamValueStatic::Int(14)),
1365 min: Some(1.0),
1366 max: None,
1367 step: Some(1.0),
1368 enum_values: EMPTY_ENUM_VALUES,
1369 notes: None,
1370 },
1371 IndicatorParamInfo {
1372 key: "rsi_level",
1373 label: "RSI Level",
1374 kind: IndicatorParamKind::Float,
1375 required: false,
1376 default: Some(ParamValueStatic::Float(50.0)),
1377 min: Some(0.0),
1378 max: Some(100.0),
1379 step: None,
1380 enum_values: EMPTY_ENUM_VALUES,
1381 notes: None,
1382 },
1383];
1384
1385const PARAM_QSTICK: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1386 key: "period",
1387 label: "Period",
1388 kind: IndicatorParamKind::Int,
1389 required: false,
1390 default: Some(ParamValueStatic::Int(5)),
1391 min: Some(1.0),
1392 max: None,
1393 step: Some(1.0),
1394 enum_values: EMPTY_ENUM_VALUES,
1395 notes: None,
1396}];
1397
1398const PARAM_MEAN_AD_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1399 key: "period",
1400 label: "Period",
1401 kind: IndicatorParamKind::Int,
1402 required: false,
1403 default: Some(ParamValueStatic::Int(5)),
1404 min: Some(1.0),
1405 max: None,
1406 step: Some(1.0),
1407 enum_values: EMPTY_ENUM_VALUES,
1408 notes: None,
1409}];
1410
1411const PARAM_MEDIUM_AD_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1412 key: "period",
1413 label: "Period",
1414 kind: IndicatorParamKind::Int,
1415 required: false,
1416 default: Some(ParamValueStatic::Int(5)),
1417 min: Some(1.0),
1418 max: None,
1419 step: Some(1.0),
1420 enum_values: EMPTY_ENUM_VALUES,
1421 notes: None,
1422}];
1423
1424const PARAM_DEVIATION: &[IndicatorParamInfo] = &[
1425 IndicatorParamInfo {
1426 key: "period",
1427 label: "Period",
1428 kind: IndicatorParamKind::Int,
1429 required: false,
1430 default: Some(ParamValueStatic::Int(9)),
1431 min: Some(1.0),
1432 max: None,
1433 step: Some(1.0),
1434 enum_values: EMPTY_ENUM_VALUES,
1435 notes: None,
1436 },
1437 IndicatorParamInfo {
1438 key: "devtype",
1439 label: "Dev Type",
1440 kind: IndicatorParamKind::Int,
1441 required: false,
1442 default: Some(ParamValueStatic::Int(0)),
1443 min: Some(0.0),
1444 max: Some(2.0),
1445 step: Some(1.0),
1446 enum_values: EMPTY_ENUM_VALUES,
1447 notes: None,
1448 },
1449];
1450
1451const PARAM_DPO_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1452 key: "period",
1453 label: "Period",
1454 kind: IndicatorParamKind::Int,
1455 required: false,
1456 default: Some(ParamValueStatic::Int(5)),
1457 min: Some(1.0),
1458 max: None,
1459 step: Some(1.0),
1460 enum_values: EMPTY_ENUM_VALUES,
1461 notes: None,
1462}];
1463
1464const PARAM_LRSI_ALPHA: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1465 key: "alpha",
1466 label: "Alpha",
1467 kind: IndicatorParamKind::Float,
1468 required: false,
1469 default: Some(ParamValueStatic::Float(0.2)),
1470 min: Some(0.0),
1471 max: Some(1.0),
1472 step: None,
1473 enum_values: EMPTY_ENUM_VALUES,
1474 notes: None,
1475}];
1476
1477const PARAM_PVI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1478 key: "initial_value",
1479 label: "Initial Value",
1480 kind: IndicatorParamKind::Float,
1481 required: false,
1482 default: Some(ParamValueStatic::Float(1000.0)),
1483 min: None,
1484 max: None,
1485 step: None,
1486 enum_values: EMPTY_ENUM_VALUES,
1487 notes: None,
1488}];
1489
1490const PARAM_PFE: &[IndicatorParamInfo] = &[
1491 IndicatorParamInfo {
1492 key: "period",
1493 label: "Period",
1494 kind: IndicatorParamKind::Int,
1495 required: false,
1496 default: Some(ParamValueStatic::Int(10)),
1497 min: Some(1.0),
1498 max: None,
1499 step: Some(1.0),
1500 enum_values: EMPTY_ENUM_VALUES,
1501 notes: None,
1502 },
1503 IndicatorParamInfo {
1504 key: "smoothing",
1505 label: "Smoothing",
1506 kind: IndicatorParamKind::Int,
1507 required: false,
1508 default: Some(ParamValueStatic::Int(5)),
1509 min: Some(1.0),
1510 max: None,
1511 step: Some(1.0),
1512 enum_values: EMPTY_ENUM_VALUES,
1513 notes: None,
1514 },
1515];
1516
1517const PARAM_PERCENTILE_NEAREST_RANK: &[IndicatorParamInfo] = &[
1518 IndicatorParamInfo {
1519 key: "length",
1520 label: "Length",
1521 kind: IndicatorParamKind::Int,
1522 required: false,
1523 default: Some(ParamValueStatic::Int(15)),
1524 min: Some(1.0),
1525 max: None,
1526 step: Some(1.0),
1527 enum_values: EMPTY_ENUM_VALUES,
1528 notes: None,
1529 },
1530 IndicatorParamInfo {
1531 key: "percentage",
1532 label: "Percentage",
1533 kind: IndicatorParamKind::Float,
1534 required: false,
1535 default: Some(ParamValueStatic::Float(50.0)),
1536 min: Some(0.0),
1537 max: Some(100.0),
1538 step: None,
1539 enum_values: EMPTY_ENUM_VALUES,
1540 notes: None,
1541 },
1542];
1543
1544const PARAM_UI: &[IndicatorParamInfo] = &[
1545 IndicatorParamInfo {
1546 key: "period",
1547 label: "Period",
1548 kind: IndicatorParamKind::Int,
1549 required: false,
1550 default: Some(ParamValueStatic::Int(14)),
1551 min: Some(1.0),
1552 max: None,
1553 step: Some(1.0),
1554 enum_values: EMPTY_ENUM_VALUES,
1555 notes: None,
1556 },
1557 IndicatorParamInfo {
1558 key: "scalar",
1559 label: "Scalar",
1560 kind: IndicatorParamKind::Float,
1561 required: false,
1562 default: Some(ParamValueStatic::Float(100.0)),
1563 min: None,
1564 max: None,
1565 step: None,
1566 enum_values: EMPTY_ENUM_VALUES,
1567 notes: None,
1568 },
1569];
1570
1571const PARAM_ZSCORE: &[IndicatorParamInfo] = &[
1572 IndicatorParamInfo {
1573 key: "period",
1574 label: "Period",
1575 kind: IndicatorParamKind::Int,
1576 required: false,
1577 default: Some(ParamValueStatic::Int(14)),
1578 min: Some(1.0),
1579 max: None,
1580 step: Some(1.0),
1581 enum_values: EMPTY_ENUM_VALUES,
1582 notes: None,
1583 },
1584 IndicatorParamInfo {
1585 key: "ma_type",
1586 label: "MA Type",
1587 kind: IndicatorParamKind::EnumString,
1588 required: false,
1589 default: Some(ParamValueStatic::EnumString("sma")),
1590 min: None,
1591 max: None,
1592 step: None,
1593 enum_values: EMPTY_ENUM_VALUES,
1594 notes: None,
1595 },
1596 IndicatorParamInfo {
1597 key: "nbdev",
1598 label: "NB Dev",
1599 kind: IndicatorParamKind::Float,
1600 required: false,
1601 default: Some(ParamValueStatic::Float(1.0)),
1602 min: None,
1603 max: None,
1604 step: None,
1605 enum_values: EMPTY_ENUM_VALUES,
1606 notes: None,
1607 },
1608 IndicatorParamInfo {
1609 key: "devtype",
1610 label: "Dev Type",
1611 kind: IndicatorParamKind::Int,
1612 required: false,
1613 default: Some(ParamValueStatic::Int(0)),
1614 min: Some(0.0),
1615 max: Some(2.0),
1616 step: Some(1.0),
1617 enum_values: EMPTY_ENUM_VALUES,
1618 notes: None,
1619 },
1620];
1621
1622const PARAM_MIDPOINT_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1623 key: "period",
1624 label: "Period",
1625 kind: IndicatorParamKind::Int,
1626 required: false,
1627 default: Some(ParamValueStatic::Int(14)),
1628 min: Some(1.0),
1629 max: None,
1630 step: Some(1.0),
1631 enum_values: EMPTY_ENUM_VALUES,
1632 notes: None,
1633}];
1634
1635const PARAM_MIDPRICE_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1636 key: "period",
1637 label: "Period",
1638 kind: IndicatorParamKind::Int,
1639 required: false,
1640 default: Some(ParamValueStatic::Int(14)),
1641 min: Some(1.0),
1642 max: None,
1643 step: Some(1.0),
1644 enum_values: EMPTY_ENUM_VALUES,
1645 notes: None,
1646}];
1647
1648const PARAM_TSF_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1649 key: "period",
1650 label: "Period",
1651 kind: IndicatorParamKind::Int,
1652 required: false,
1653 default: Some(ParamValueStatic::Int(14)),
1654 min: Some(2.0),
1655 max: None,
1656 step: Some(1.0),
1657 enum_values: EMPTY_ENUM_VALUES,
1658 notes: None,
1659}];
1660
1661const PARAM_VAR: &[IndicatorParamInfo] = &[
1662 IndicatorParamInfo {
1663 key: "period",
1664 label: "Period",
1665 kind: IndicatorParamKind::Int,
1666 required: false,
1667 default: Some(ParamValueStatic::Int(14)),
1668 min: Some(1.0),
1669 max: None,
1670 step: Some(1.0),
1671 enum_values: EMPTY_ENUM_VALUES,
1672 notes: None,
1673 },
1674 IndicatorParamInfo {
1675 key: "nbdev",
1676 label: "NB Dev",
1677 kind: IndicatorParamKind::Float,
1678 required: false,
1679 default: Some(ParamValueStatic::Float(1.0)),
1680 min: None,
1681 max: None,
1682 step: None,
1683 enum_values: EMPTY_ENUM_VALUES,
1684 notes: None,
1685 },
1686];
1687
1688const PARAM_ADX_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1689 key: "period",
1690 label: "Period",
1691 kind: IndicatorParamKind::Int,
1692 required: false,
1693 default: Some(ParamValueStatic::Int(14)),
1694 min: Some(1.0),
1695 max: None,
1696 step: Some(1.0),
1697 enum_values: EMPTY_ENUM_VALUES,
1698 notes: None,
1699}];
1700
1701const PARAM_DX_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1702 key: "period",
1703 label: "Period",
1704 kind: IndicatorParamKind::Int,
1705 required: false,
1706 default: Some(ParamValueStatic::Int(14)),
1707 min: Some(1.0),
1708 max: None,
1709 step: Some(1.0),
1710 enum_values: EMPTY_ENUM_VALUES,
1711 notes: None,
1712}];
1713
1714const PARAM_ATR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1715 key: "length",
1716 label: "Length",
1717 kind: IndicatorParamKind::Int,
1718 required: false,
1719 default: Some(ParamValueStatic::Int(14)),
1720 min: Some(1.0),
1721 max: None,
1722 step: Some(1.0),
1723 enum_values: EMPTY_ENUM_VALUES,
1724 notes: None,
1725}];
1726
1727const PARAM_FOSC_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1728 key: "period",
1729 label: "Period",
1730 kind: IndicatorParamKind::Int,
1731 required: false,
1732 default: Some(ParamValueStatic::Int(5)),
1733 min: Some(1.0),
1734 max: None,
1735 step: Some(1.0),
1736 enum_values: EMPTY_ENUM_VALUES,
1737 notes: None,
1738}];
1739
1740const PARAM_IFT_RSI: &[IndicatorParamInfo] = &[
1741 IndicatorParamInfo {
1742 key: "rsi_period",
1743 label: "RSI Period",
1744 kind: IndicatorParamKind::Int,
1745 required: false,
1746 default: Some(ParamValueStatic::Int(5)),
1747 min: Some(1.0),
1748 max: None,
1749 step: Some(1.0),
1750 enum_values: EMPTY_ENUM_VALUES,
1751 notes: None,
1752 },
1753 IndicatorParamInfo {
1754 key: "wma_period",
1755 label: "WMA Period",
1756 kind: IndicatorParamKind::Int,
1757 required: false,
1758 default: Some(ParamValueStatic::Int(9)),
1759 min: Some(1.0),
1760 max: None,
1761 step: Some(1.0),
1762 enum_values: EMPTY_ENUM_VALUES,
1763 notes: None,
1764 },
1765];
1766
1767const PARAM_DEC_OSC: &[IndicatorParamInfo] = &[
1768 IndicatorParamInfo {
1769 key: "hp_period",
1770 label: "HP Period",
1771 kind: IndicatorParamKind::Int,
1772 required: false,
1773 default: Some(ParamValueStatic::Int(125)),
1774 min: Some(3.0),
1775 max: None,
1776 step: Some(1.0),
1777 enum_values: EMPTY_ENUM_VALUES,
1778 notes: None,
1779 },
1780 IndicatorParamInfo {
1781 key: "k",
1782 label: "K",
1783 kind: IndicatorParamKind::Float,
1784 required: false,
1785 default: Some(ParamValueStatic::Float(1.0)),
1786 min: Some(0.0),
1787 max: None,
1788 step: None,
1789 enum_values: EMPTY_ENUM_VALUES,
1790 notes: Some("Must be positive"),
1791 },
1792];
1793
1794const PARAM_DECYCLER: &[IndicatorParamInfo] = &[
1795 IndicatorParamInfo {
1796 key: "hp_period",
1797 label: "HP Period",
1798 kind: IndicatorParamKind::Int,
1799 required: false,
1800 default: Some(ParamValueStatic::Int(125)),
1801 min: Some(2.0),
1802 max: None,
1803 step: Some(1.0),
1804 enum_values: EMPTY_ENUM_VALUES,
1805 notes: None,
1806 },
1807 IndicatorParamInfo {
1808 key: "k",
1809 label: "K",
1810 kind: IndicatorParamKind::Float,
1811 required: false,
1812 default: Some(ParamValueStatic::Float(0.707)),
1813 min: Some(0.0),
1814 max: None,
1815 step: None,
1816 enum_values: EMPTY_ENUM_VALUES,
1817 notes: Some("Must be positive"),
1818 },
1819];
1820
1821const PARAM_VIDYA: &[IndicatorParamInfo] = &[
1822 IndicatorParamInfo {
1823 key: "short_period",
1824 label: "Short Period",
1825 kind: IndicatorParamKind::Int,
1826 required: false,
1827 default: Some(ParamValueStatic::Int(2)),
1828 min: Some(2.0),
1829 max: None,
1830 step: Some(1.0),
1831 enum_values: EMPTY_ENUM_VALUES,
1832 notes: None,
1833 },
1834 IndicatorParamInfo {
1835 key: "long_period",
1836 label: "Long Period",
1837 kind: IndicatorParamKind::Int,
1838 required: false,
1839 default: Some(ParamValueStatic::Int(5)),
1840 min: Some(2.0),
1841 max: None,
1842 step: Some(1.0),
1843 enum_values: EMPTY_ENUM_VALUES,
1844 notes: None,
1845 },
1846 IndicatorParamInfo {
1847 key: "alpha",
1848 label: "Alpha",
1849 kind: IndicatorParamKind::Float,
1850 required: false,
1851 default: Some(ParamValueStatic::Float(0.2)),
1852 min: Some(0.0),
1853 max: Some(1.0),
1854 step: None,
1855 enum_values: EMPTY_ENUM_VALUES,
1856 notes: None,
1857 },
1858];
1859
1860const PARAM_VLMA: &[IndicatorParamInfo] = &[
1861 IndicatorParamInfo {
1862 key: "min_period",
1863 label: "Min Period",
1864 kind: IndicatorParamKind::Int,
1865 required: false,
1866 default: Some(ParamValueStatic::Int(5)),
1867 min: Some(1.0),
1868 max: None,
1869 step: Some(1.0),
1870 enum_values: EMPTY_ENUM_VALUES,
1871 notes: None,
1872 },
1873 IndicatorParamInfo {
1874 key: "max_period",
1875 label: "Max Period",
1876 kind: IndicatorParamKind::Int,
1877 required: false,
1878 default: Some(ParamValueStatic::Int(50)),
1879 min: Some(1.0),
1880 max: None,
1881 step: Some(1.0),
1882 enum_values: EMPTY_ENUM_VALUES,
1883 notes: None,
1884 },
1885 IndicatorParamInfo {
1886 key: "matype",
1887 label: "MA Type",
1888 kind: IndicatorParamKind::EnumString,
1889 required: false,
1890 default: Some(ParamValueStatic::EnumString("sma")),
1891 min: None,
1892 max: None,
1893 step: None,
1894 enum_values: EMPTY_ENUM_VALUES,
1895 notes: None,
1896 },
1897 IndicatorParamInfo {
1898 key: "devtype",
1899 label: "Deviation Type",
1900 kind: IndicatorParamKind::Int,
1901 required: false,
1902 default: Some(ParamValueStatic::Int(0)),
1903 min: Some(0.0),
1904 max: None,
1905 step: Some(1.0),
1906 enum_values: EMPTY_ENUM_VALUES,
1907 notes: None,
1908 },
1909];
1910
1911const PARAM_LINEARREG_ANGLE_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1912 key: "period",
1913 label: "Period",
1914 kind: IndicatorParamKind::Int,
1915 required: false,
1916 default: Some(ParamValueStatic::Int(14)),
1917 min: Some(2.0),
1918 max: None,
1919 step: Some(1.0),
1920 enum_values: EMPTY_ENUM_VALUES,
1921 notes: None,
1922}];
1923
1924const PARAM_LINEARREG_INTERCEPT_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1925 key: "period",
1926 label: "Period",
1927 kind: IndicatorParamKind::Int,
1928 required: false,
1929 default: Some(ParamValueStatic::Int(14)),
1930 min: Some(1.0),
1931 max: None,
1932 step: Some(1.0),
1933 enum_values: EMPTY_ENUM_VALUES,
1934 notes: None,
1935}];
1936
1937const PARAM_LINEARREG_SLOPE_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1938 key: "period",
1939 label: "Period",
1940 kind: IndicatorParamKind::Int,
1941 required: false,
1942 default: Some(ParamValueStatic::Int(14)),
1943 min: Some(2.0),
1944 max: None,
1945 step: Some(1.0),
1946 enum_values: EMPTY_ENUM_VALUES,
1947 notes: None,
1948}];
1949
1950const PARAM_CG_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
1951 key: "period",
1952 label: "Period",
1953 kind: IndicatorParamKind::Int,
1954 required: false,
1955 default: Some(ParamValueStatic::Int(10)),
1956 min: Some(1.0),
1957 max: None,
1958 step: Some(1.0),
1959 enum_values: EMPTY_ENUM_VALUES,
1960 notes: None,
1961}];
1962
1963const PARAM_MACD: &[IndicatorParamInfo] = &[
1964 IndicatorParamInfo {
1965 key: "fast_period",
1966 label: "Fast Period",
1967 kind: IndicatorParamKind::Int,
1968 required: false,
1969 default: Some(ParamValueStatic::Int(12)),
1970 min: Some(1.0),
1971 max: None,
1972 step: Some(1.0),
1973 enum_values: EMPTY_ENUM_VALUES,
1974 notes: None,
1975 },
1976 IndicatorParamInfo {
1977 key: "slow_period",
1978 label: "Slow Period",
1979 kind: IndicatorParamKind::Int,
1980 required: false,
1981 default: Some(ParamValueStatic::Int(26)),
1982 min: Some(1.0),
1983 max: None,
1984 step: Some(1.0),
1985 enum_values: EMPTY_ENUM_VALUES,
1986 notes: None,
1987 },
1988 IndicatorParamInfo {
1989 key: "signal_period",
1990 label: "Signal Period",
1991 kind: IndicatorParamKind::Int,
1992 required: false,
1993 default: Some(ParamValueStatic::Int(9)),
1994 min: Some(1.0),
1995 max: None,
1996 step: Some(1.0),
1997 enum_values: EMPTY_ENUM_VALUES,
1998 notes: None,
1999 },
2000];
2001
2002const PARAM_BOLLINGER: &[IndicatorParamInfo] = &[
2003 IndicatorParamInfo {
2004 key: "period",
2005 label: "Period",
2006 kind: IndicatorParamKind::Int,
2007 required: false,
2008 default: Some(ParamValueStatic::Int(20)),
2009 min: Some(1.0),
2010 max: None,
2011 step: Some(1.0),
2012 enum_values: EMPTY_ENUM_VALUES,
2013 notes: None,
2014 },
2015 IndicatorParamInfo {
2016 key: "devup",
2017 label: "Dev Up",
2018 kind: IndicatorParamKind::Float,
2019 required: false,
2020 default: Some(ParamValueStatic::Float(2.0)),
2021 min: None,
2022 max: None,
2023 step: None,
2024 enum_values: EMPTY_ENUM_VALUES,
2025 notes: None,
2026 },
2027 IndicatorParamInfo {
2028 key: "devdn",
2029 label: "Dev Down",
2030 kind: IndicatorParamKind::Float,
2031 required: false,
2032 default: Some(ParamValueStatic::Float(2.0)),
2033 min: None,
2034 max: None,
2035 step: None,
2036 enum_values: EMPTY_ENUM_VALUES,
2037 notes: None,
2038 },
2039];
2040
2041const PARAM_STOCH: &[IndicatorParamInfo] = &[
2042 IndicatorParamInfo {
2043 key: "fastk_period",
2044 label: "Fast K Period",
2045 kind: IndicatorParamKind::Int,
2046 required: false,
2047 default: Some(ParamValueStatic::Int(14)),
2048 min: Some(1.0),
2049 max: None,
2050 step: Some(1.0),
2051 enum_values: EMPTY_ENUM_VALUES,
2052 notes: None,
2053 },
2054 IndicatorParamInfo {
2055 key: "slowk_period",
2056 label: "Slow K Period",
2057 kind: IndicatorParamKind::Int,
2058 required: false,
2059 default: Some(ParamValueStatic::Int(3)),
2060 min: Some(1.0),
2061 max: None,
2062 step: Some(1.0),
2063 enum_values: EMPTY_ENUM_VALUES,
2064 notes: None,
2065 },
2066 IndicatorParamInfo {
2067 key: "slowd_period",
2068 label: "Slow D Period",
2069 kind: IndicatorParamKind::Int,
2070 required: false,
2071 default: Some(ParamValueStatic::Int(3)),
2072 min: Some(1.0),
2073 max: None,
2074 step: Some(1.0),
2075 enum_values: EMPTY_ENUM_VALUES,
2076 notes: None,
2077 },
2078];
2079
2080const PARAM_STOCHF: &[IndicatorParamInfo] = &[
2081 IndicatorParamInfo {
2082 key: "fastk_period",
2083 label: "Fast K Period",
2084 kind: IndicatorParamKind::Int,
2085 required: false,
2086 default: Some(ParamValueStatic::Int(5)),
2087 min: Some(1.0),
2088 max: None,
2089 step: Some(1.0),
2090 enum_values: EMPTY_ENUM_VALUES,
2091 notes: None,
2092 },
2093 IndicatorParamInfo {
2094 key: "fastd_period",
2095 label: "Fast D Period",
2096 kind: IndicatorParamKind::Int,
2097 required: false,
2098 default: Some(ParamValueStatic::Int(3)),
2099 min: Some(1.0),
2100 max: None,
2101 step: Some(1.0),
2102 enum_values: EMPTY_ENUM_VALUES,
2103 notes: None,
2104 },
2105];
2106
2107const PARAM_VW_MACD: &[IndicatorParamInfo] = &[
2108 IndicatorParamInfo {
2109 key: "fast",
2110 label: "Fast",
2111 kind: IndicatorParamKind::Int,
2112 required: false,
2113 default: Some(ParamValueStatic::Int(12)),
2114 min: Some(1.0),
2115 max: None,
2116 step: Some(1.0),
2117 enum_values: EMPTY_ENUM_VALUES,
2118 notes: None,
2119 },
2120 IndicatorParamInfo {
2121 key: "slow",
2122 label: "Slow",
2123 kind: IndicatorParamKind::Int,
2124 required: false,
2125 default: Some(ParamValueStatic::Int(26)),
2126 min: Some(1.0),
2127 max: None,
2128 step: Some(1.0),
2129 enum_values: EMPTY_ENUM_VALUES,
2130 notes: None,
2131 },
2132 IndicatorParamInfo {
2133 key: "signal",
2134 label: "Signal",
2135 kind: IndicatorParamKind::Int,
2136 required: false,
2137 default: Some(ParamValueStatic::Int(9)),
2138 min: Some(1.0),
2139 max: None,
2140 step: Some(1.0),
2141 enum_values: EMPTY_ENUM_VALUES,
2142 notes: None,
2143 },
2144];
2145
2146const PARAM_VPCI: &[IndicatorParamInfo] = &[
2147 IndicatorParamInfo {
2148 key: "short_range",
2149 label: "Short Range",
2150 kind: IndicatorParamKind::Int,
2151 required: false,
2152 default: Some(ParamValueStatic::Int(5)),
2153 min: Some(1.0),
2154 max: None,
2155 step: Some(1.0),
2156 enum_values: EMPTY_ENUM_VALUES,
2157 notes: None,
2158 },
2159 IndicatorParamInfo {
2160 key: "long_range",
2161 label: "Long Range",
2162 kind: IndicatorParamKind::Int,
2163 required: false,
2164 default: Some(ParamValueStatic::Int(20)),
2165 min: Some(1.0),
2166 max: None,
2167 step: Some(1.0),
2168 enum_values: EMPTY_ENUM_VALUES,
2169 notes: None,
2170 },
2171];
2172
2173const PARAM_TTM_TREND: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2174 key: "period",
2175 label: "Period",
2176 kind: IndicatorParamKind::Int,
2177 required: false,
2178 default: Some(ParamValueStatic::Int(6)),
2179 min: Some(1.0),
2180 max: None,
2181 step: Some(1.0),
2182 enum_values: EMPTY_ENUM_VALUES,
2183 notes: None,
2184}];
2185
2186const PARAM_TTM_SQUEEZE: &[IndicatorParamInfo] = &[
2187 IndicatorParamInfo {
2188 key: "length",
2189 label: "Length",
2190 kind: IndicatorParamKind::Int,
2191 required: false,
2192 default: Some(ParamValueStatic::Int(20)),
2193 min: Some(1.0),
2194 max: None,
2195 step: Some(1.0),
2196 enum_values: EMPTY_ENUM_VALUES,
2197 notes: None,
2198 },
2199 IndicatorParamInfo {
2200 key: "bb_mult",
2201 label: "BB Mult",
2202 kind: IndicatorParamKind::Float,
2203 required: false,
2204 default: Some(ParamValueStatic::Float(2.0)),
2205 min: None,
2206 max: None,
2207 step: None,
2208 enum_values: EMPTY_ENUM_VALUES,
2209 notes: None,
2210 },
2211 IndicatorParamInfo {
2212 key: "kc_high",
2213 label: "KC High",
2214 kind: IndicatorParamKind::Float,
2215 required: false,
2216 default: Some(ParamValueStatic::Float(1.0)),
2217 min: None,
2218 max: None,
2219 step: None,
2220 enum_values: EMPTY_ENUM_VALUES,
2221 notes: None,
2222 },
2223 IndicatorParamInfo {
2224 key: "kc_mid",
2225 label: "KC Mid",
2226 kind: IndicatorParamKind::Float,
2227 required: false,
2228 default: Some(ParamValueStatic::Float(1.5)),
2229 min: None,
2230 max: None,
2231 step: None,
2232 enum_values: EMPTY_ENUM_VALUES,
2233 notes: None,
2234 },
2235 IndicatorParamInfo {
2236 key: "kc_low",
2237 label: "KC Low",
2238 kind: IndicatorParamKind::Float,
2239 required: false,
2240 default: Some(ParamValueStatic::Float(2.0)),
2241 min: None,
2242 max: None,
2243 step: None,
2244 enum_values: EMPTY_ENUM_VALUES,
2245 notes: None,
2246 },
2247];
2248
2249const PARAM_DI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2250 key: "period",
2251 label: "Period",
2252 kind: IndicatorParamKind::Int,
2253 required: false,
2254 default: Some(ParamValueStatic::Int(14)),
2255 min: Some(1.0),
2256 max: None,
2257 step: Some(1.0),
2258 enum_values: EMPTY_ENUM_VALUES,
2259 notes: None,
2260}];
2261
2262const PARAM_DTI: &[IndicatorParamInfo] = &[
2263 IndicatorParamInfo {
2264 key: "r",
2265 label: "R",
2266 kind: IndicatorParamKind::Int,
2267 required: false,
2268 default: Some(ParamValueStatic::Int(14)),
2269 min: Some(1.0),
2270 max: None,
2271 step: Some(1.0),
2272 enum_values: EMPTY_ENUM_VALUES,
2273 notes: None,
2274 },
2275 IndicatorParamInfo {
2276 key: "s",
2277 label: "S",
2278 kind: IndicatorParamKind::Int,
2279 required: false,
2280 default: Some(ParamValueStatic::Int(10)),
2281 min: Some(1.0),
2282 max: None,
2283 step: Some(1.0),
2284 enum_values: EMPTY_ENUM_VALUES,
2285 notes: None,
2286 },
2287 IndicatorParamInfo {
2288 key: "u",
2289 label: "U",
2290 kind: IndicatorParamKind::Int,
2291 required: false,
2292 default: Some(ParamValueStatic::Int(5)),
2293 min: Some(1.0),
2294 max: None,
2295 step: Some(1.0),
2296 enum_values: EMPTY_ENUM_VALUES,
2297 notes: None,
2298 },
2299];
2300
2301const PARAM_DM: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2302 key: "period",
2303 label: "Period",
2304 kind: IndicatorParamKind::Int,
2305 required: false,
2306 default: Some(ParamValueStatic::Int(14)),
2307 min: Some(1.0),
2308 max: None,
2309 step: Some(1.0),
2310 enum_values: EMPTY_ENUM_VALUES,
2311 notes: None,
2312}];
2313
2314const PARAM_DONCHIAN: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2315 key: "period",
2316 label: "Period",
2317 kind: IndicatorParamKind::Int,
2318 required: false,
2319 default: Some(ParamValueStatic::Int(20)),
2320 min: Some(1.0),
2321 max: None,
2322 step: Some(1.0),
2323 enum_values: EMPTY_ENUM_VALUES,
2324 notes: None,
2325}];
2326
2327const PARAM_SUPERTREND: &[IndicatorParamInfo] = &[
2328 IndicatorParamInfo {
2329 key: "period",
2330 label: "Period",
2331 kind: IndicatorParamKind::Int,
2332 required: false,
2333 default: Some(ParamValueStatic::Int(10)),
2334 min: Some(1.0),
2335 max: None,
2336 step: Some(1.0),
2337 enum_values: EMPTY_ENUM_VALUES,
2338 notes: None,
2339 },
2340 IndicatorParamInfo {
2341 key: "factor",
2342 label: "Factor",
2343 kind: IndicatorParamKind::Float,
2344 required: false,
2345 default: Some(ParamValueStatic::Float(3.0)),
2346 min: Some(0.0),
2347 max: None,
2348 step: None,
2349 enum_values: EMPTY_ENUM_VALUES,
2350 notes: None,
2351 },
2352];
2353
2354const PARAM_KELTNER: &[IndicatorParamInfo] = &[
2355 IndicatorParamInfo {
2356 key: "period",
2357 label: "Period",
2358 kind: IndicatorParamKind::Int,
2359 required: false,
2360 default: Some(ParamValueStatic::Int(20)),
2361 min: Some(1.0),
2362 max: None,
2363 step: Some(1.0),
2364 enum_values: EMPTY_ENUM_VALUES,
2365 notes: None,
2366 },
2367 IndicatorParamInfo {
2368 key: "multiplier",
2369 label: "Multiplier",
2370 kind: IndicatorParamKind::Float,
2371 required: false,
2372 default: Some(ParamValueStatic::Float(2.0)),
2373 min: Some(0.0),
2374 max: None,
2375 step: None,
2376 enum_values: EMPTY_ENUM_VALUES,
2377 notes: None,
2378 },
2379 IndicatorParamInfo {
2380 key: "ma_type",
2381 label: "MA Type",
2382 kind: IndicatorParamKind::EnumString,
2383 required: false,
2384 default: Some(ParamValueStatic::EnumString("ema")),
2385 min: None,
2386 max: None,
2387 step: None,
2388 enum_values: EMPTY_ENUM_VALUES,
2389 notes: None,
2390 },
2391];
2392
2393const PARAM_AROON: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2394 key: "length",
2395 label: "Length",
2396 kind: IndicatorParamKind::Int,
2397 required: false,
2398 default: Some(ParamValueStatic::Int(14)),
2399 min: Some(1.0),
2400 max: None,
2401 step: Some(1.0),
2402 enum_values: EMPTY_ENUM_VALUES,
2403 notes: None,
2404}];
2405
2406const PARAM_SRSI: &[IndicatorParamInfo] = &[
2407 IndicatorParamInfo {
2408 key: "rsi_period",
2409 label: "RSI Period",
2410 kind: IndicatorParamKind::Int,
2411 required: false,
2412 default: Some(ParamValueStatic::Int(14)),
2413 min: Some(1.0),
2414 max: None,
2415 step: Some(1.0),
2416 enum_values: EMPTY_ENUM_VALUES,
2417 notes: None,
2418 },
2419 IndicatorParamInfo {
2420 key: "stoch_period",
2421 label: "Stoch Period",
2422 kind: IndicatorParamKind::Int,
2423 required: false,
2424 default: Some(ParamValueStatic::Int(14)),
2425 min: Some(1.0),
2426 max: None,
2427 step: Some(1.0),
2428 enum_values: EMPTY_ENUM_VALUES,
2429 notes: None,
2430 },
2431 IndicatorParamInfo {
2432 key: "k",
2433 label: "K",
2434 kind: IndicatorParamKind::Int,
2435 required: false,
2436 default: Some(ParamValueStatic::Int(3)),
2437 min: Some(1.0),
2438 max: None,
2439 step: Some(1.0),
2440 enum_values: EMPTY_ENUM_VALUES,
2441 notes: None,
2442 },
2443 IndicatorParamInfo {
2444 key: "d",
2445 label: "D",
2446 kind: IndicatorParamKind::Int,
2447 required: false,
2448 default: Some(ParamValueStatic::Int(3)),
2449 min: Some(1.0),
2450 max: None,
2451 step: Some(1.0),
2452 enum_values: EMPTY_ENUM_VALUES,
2453 notes: None,
2454 },
2455 IndicatorParamInfo {
2456 key: "source",
2457 label: "Source",
2458 kind: IndicatorParamKind::EnumString,
2459 required: false,
2460 default: Some(ParamValueStatic::EnumString("close")),
2461 min: None,
2462 max: None,
2463 step: None,
2464 enum_values: EMPTY_ENUM_VALUES,
2465 notes: None,
2466 },
2467];
2468
2469const PARAM_CHOP: &[IndicatorParamInfo] = &[
2470 IndicatorParamInfo {
2471 key: "period",
2472 label: "Period",
2473 kind: IndicatorParamKind::Int,
2474 required: false,
2475 default: Some(ParamValueStatic::Int(14)),
2476 min: Some(1.0),
2477 max: None,
2478 step: Some(1.0),
2479 enum_values: EMPTY_ENUM_VALUES,
2480 notes: None,
2481 },
2482 IndicatorParamInfo {
2483 key: "scalar",
2484 label: "Scalar",
2485 kind: IndicatorParamKind::Float,
2486 required: false,
2487 default: Some(ParamValueStatic::Float(100.0)),
2488 min: Some(0.0),
2489 max: None,
2490 step: None,
2491 enum_values: EMPTY_ENUM_VALUES,
2492 notes: None,
2493 },
2494 IndicatorParamInfo {
2495 key: "drift",
2496 label: "Drift",
2497 kind: IndicatorParamKind::Int,
2498 required: false,
2499 default: Some(ParamValueStatic::Int(1)),
2500 min: Some(1.0),
2501 max: None,
2502 step: Some(1.0),
2503 enum_values: EMPTY_ENUM_VALUES,
2504 notes: None,
2505 },
2506];
2507
2508const PARAM_SQUEEZE_MOMENTUM: &[IndicatorParamInfo] = &[
2509 IndicatorParamInfo {
2510 key: "length_bb",
2511 label: "BB Length",
2512 kind: IndicatorParamKind::Int,
2513 required: false,
2514 default: Some(ParamValueStatic::Int(20)),
2515 min: Some(1.0),
2516 max: None,
2517 step: Some(1.0),
2518 enum_values: EMPTY_ENUM_VALUES,
2519 notes: None,
2520 },
2521 IndicatorParamInfo {
2522 key: "mult_bb",
2523 label: "BB Mult",
2524 kind: IndicatorParamKind::Float,
2525 required: false,
2526 default: Some(ParamValueStatic::Float(2.0)),
2527 min: Some(0.0),
2528 max: None,
2529 step: None,
2530 enum_values: EMPTY_ENUM_VALUES,
2531 notes: None,
2532 },
2533 IndicatorParamInfo {
2534 key: "length_kc",
2535 label: "KC Length",
2536 kind: IndicatorParamKind::Int,
2537 required: false,
2538 default: Some(ParamValueStatic::Int(20)),
2539 min: Some(1.0),
2540 max: None,
2541 step: Some(1.0),
2542 enum_values: EMPTY_ENUM_VALUES,
2543 notes: None,
2544 },
2545 IndicatorParamInfo {
2546 key: "mult_kc",
2547 label: "KC Mult",
2548 kind: IndicatorParamKind::Float,
2549 required: false,
2550 default: Some(ParamValueStatic::Float(1.5)),
2551 min: Some(0.0),
2552 max: None,
2553 step: None,
2554 enum_values: EMPTY_ENUM_VALUES,
2555 notes: None,
2556 },
2557];
2558
2559const PARAM_WTO: &[IndicatorParamInfo] = &[
2560 IndicatorParamInfo {
2561 key: "channel_length",
2562 label: "Channel Length",
2563 kind: IndicatorParamKind::Int,
2564 required: false,
2565 default: Some(ParamValueStatic::Int(10)),
2566 min: Some(1.0),
2567 max: None,
2568 step: Some(1.0),
2569 enum_values: EMPTY_ENUM_VALUES,
2570 notes: None,
2571 },
2572 IndicatorParamInfo {
2573 key: "average_length",
2574 label: "Average Length",
2575 kind: IndicatorParamKind::Int,
2576 required: false,
2577 default: Some(ParamValueStatic::Int(21)),
2578 min: Some(1.0),
2579 max: None,
2580 step: Some(1.0),
2581 enum_values: EMPTY_ENUM_VALUES,
2582 notes: None,
2583 },
2584];
2585
2586const PARAM_WAVETREND: &[IndicatorParamInfo] = &[
2587 IndicatorParamInfo {
2588 key: "channel_length",
2589 label: "Channel Length",
2590 kind: IndicatorParamKind::Int,
2591 required: false,
2592 default: Some(ParamValueStatic::Int(9)),
2593 min: Some(1.0),
2594 max: None,
2595 step: Some(1.0),
2596 enum_values: EMPTY_ENUM_VALUES,
2597 notes: None,
2598 },
2599 IndicatorParamInfo {
2600 key: "average_length",
2601 label: "Average Length",
2602 kind: IndicatorParamKind::Int,
2603 required: false,
2604 default: Some(ParamValueStatic::Int(12)),
2605 min: Some(1.0),
2606 max: None,
2607 step: Some(1.0),
2608 enum_values: EMPTY_ENUM_VALUES,
2609 notes: None,
2610 },
2611 IndicatorParamInfo {
2612 key: "ma_length",
2613 label: "MA Length",
2614 kind: IndicatorParamKind::Int,
2615 required: false,
2616 default: Some(ParamValueStatic::Int(3)),
2617 min: Some(1.0),
2618 max: None,
2619 step: Some(1.0),
2620 enum_values: EMPTY_ENUM_VALUES,
2621 notes: None,
2622 },
2623 IndicatorParamInfo {
2624 key: "factor",
2625 label: "Factor",
2626 kind: IndicatorParamKind::Float,
2627 required: false,
2628 default: Some(ParamValueStatic::Float(0.015)),
2629 min: Some(0.0),
2630 max: None,
2631 step: None,
2632 enum_values: EMPTY_ENUM_VALUES,
2633 notes: None,
2634 },
2635];
2636
2637const PARAM_YANG_ZHANG: &[IndicatorParamInfo] = &[
2638 IndicatorParamInfo {
2639 key: "lookback",
2640 label: "Lookback",
2641 kind: IndicatorParamKind::Int,
2642 required: false,
2643 default: Some(ParamValueStatic::Int(14)),
2644 min: Some(1.0),
2645 max: None,
2646 step: Some(1.0),
2647 enum_values: EMPTY_ENUM_VALUES,
2648 notes: None,
2649 },
2650 IndicatorParamInfo {
2651 key: "k_override",
2652 label: "K Override",
2653 kind: IndicatorParamKind::Bool,
2654 required: false,
2655 default: Some(ParamValueStatic::Bool(false)),
2656 min: None,
2657 max: None,
2658 step: None,
2659 enum_values: ENUM_VALUES_TRUE_FALSE,
2660 notes: None,
2661 },
2662 IndicatorParamInfo {
2663 key: "k",
2664 label: "K",
2665 kind: IndicatorParamKind::Float,
2666 required: false,
2667 default: Some(ParamValueStatic::Float(0.34)),
2668 min: Some(0.0),
2669 max: None,
2670 step: None,
2671 enum_values: EMPTY_ENUM_VALUES,
2672 notes: None,
2673 },
2674];
2675
2676const PARAM_VI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2677 key: "period",
2678 label: "Period",
2679 kind: IndicatorParamKind::Int,
2680 required: false,
2681 default: Some(ParamValueStatic::Int(14)),
2682 min: Some(1.0),
2683 max: None,
2684 step: Some(1.0),
2685 enum_values: EMPTY_ENUM_VALUES,
2686 notes: None,
2687}];
2688
2689const PARAM_KDJ: &[IndicatorParamInfo] = &[
2690 IndicatorParamInfo {
2691 key: "fast_k_period",
2692 label: "Fast K Period",
2693 kind: IndicatorParamKind::Int,
2694 required: false,
2695 default: Some(ParamValueStatic::Int(9)),
2696 min: Some(1.0),
2697 max: None,
2698 step: Some(1.0),
2699 enum_values: EMPTY_ENUM_VALUES,
2700 notes: None,
2701 },
2702 IndicatorParamInfo {
2703 key: "slow_k_period",
2704 label: "Slow K Period",
2705 kind: IndicatorParamKind::Int,
2706 required: false,
2707 default: Some(ParamValueStatic::Int(3)),
2708 min: Some(1.0),
2709 max: None,
2710 step: Some(1.0),
2711 enum_values: EMPTY_ENUM_VALUES,
2712 notes: None,
2713 },
2714 IndicatorParamInfo {
2715 key: "slow_k_ma_type",
2716 label: "Slow K MA Type",
2717 kind: IndicatorParamKind::EnumString,
2718 required: false,
2719 default: Some(ParamValueStatic::EnumString("sma")),
2720 min: None,
2721 max: None,
2722 step: None,
2723 enum_values: EMPTY_ENUM_VALUES,
2724 notes: None,
2725 },
2726 IndicatorParamInfo {
2727 key: "slow_d_period",
2728 label: "Slow D Period",
2729 kind: IndicatorParamKind::Int,
2730 required: false,
2731 default: Some(ParamValueStatic::Int(3)),
2732 min: Some(1.0),
2733 max: None,
2734 step: Some(1.0),
2735 enum_values: EMPTY_ENUM_VALUES,
2736 notes: None,
2737 },
2738 IndicatorParamInfo {
2739 key: "slow_d_ma_type",
2740 label: "Slow D MA Type",
2741 kind: IndicatorParamKind::EnumString,
2742 required: false,
2743 default: Some(ParamValueStatic::EnumString("sma")),
2744 min: None,
2745 max: None,
2746 step: None,
2747 enum_values: EMPTY_ENUM_VALUES,
2748 notes: None,
2749 },
2750];
2751
2752const PARAM_ACOSC: &[IndicatorParamInfo] = PARAM_NONE;
2753
2754const PARAM_ALLIGATOR: &[IndicatorParamInfo] = &[
2755 IndicatorParamInfo {
2756 key: "jaw_period",
2757 label: "Jaw Period",
2758 kind: IndicatorParamKind::Int,
2759 required: false,
2760 default: Some(ParamValueStatic::Int(13)),
2761 min: Some(1.0),
2762 max: None,
2763 step: Some(1.0),
2764 enum_values: EMPTY_ENUM_VALUES,
2765 notes: None,
2766 },
2767 IndicatorParamInfo {
2768 key: "jaw_offset",
2769 label: "Jaw Offset",
2770 kind: IndicatorParamKind::Int,
2771 required: false,
2772 default: Some(ParamValueStatic::Int(8)),
2773 min: Some(0.0),
2774 max: None,
2775 step: Some(1.0),
2776 enum_values: EMPTY_ENUM_VALUES,
2777 notes: None,
2778 },
2779 IndicatorParamInfo {
2780 key: "teeth_period",
2781 label: "Teeth Period",
2782 kind: IndicatorParamKind::Int,
2783 required: false,
2784 default: Some(ParamValueStatic::Int(8)),
2785 min: Some(1.0),
2786 max: None,
2787 step: Some(1.0),
2788 enum_values: EMPTY_ENUM_VALUES,
2789 notes: None,
2790 },
2791 IndicatorParamInfo {
2792 key: "teeth_offset",
2793 label: "Teeth Offset",
2794 kind: IndicatorParamKind::Int,
2795 required: false,
2796 default: Some(ParamValueStatic::Int(5)),
2797 min: Some(0.0),
2798 max: None,
2799 step: Some(1.0),
2800 enum_values: EMPTY_ENUM_VALUES,
2801 notes: None,
2802 },
2803 IndicatorParamInfo {
2804 key: "lips_period",
2805 label: "Lips Period",
2806 kind: IndicatorParamKind::Int,
2807 required: false,
2808 default: Some(ParamValueStatic::Int(5)),
2809 min: Some(1.0),
2810 max: None,
2811 step: Some(1.0),
2812 enum_values: EMPTY_ENUM_VALUES,
2813 notes: None,
2814 },
2815 IndicatorParamInfo {
2816 key: "lips_offset",
2817 label: "Lips Offset",
2818 kind: IndicatorParamKind::Int,
2819 required: false,
2820 default: Some(ParamValueStatic::Int(3)),
2821 min: Some(0.0),
2822 max: None,
2823 step: Some(1.0),
2824 enum_values: EMPTY_ENUM_VALUES,
2825 notes: None,
2826 },
2827];
2828
2829const PARAM_ALPHATREND: &[IndicatorParamInfo] = &[
2830 IndicatorParamInfo {
2831 key: "coeff",
2832 label: "Coeff",
2833 kind: IndicatorParamKind::Float,
2834 required: false,
2835 default: Some(ParamValueStatic::Float(1.0)),
2836 min: Some(0.0),
2837 max: None,
2838 step: None,
2839 enum_values: EMPTY_ENUM_VALUES,
2840 notes: None,
2841 },
2842 IndicatorParamInfo {
2843 key: "period",
2844 label: "Period",
2845 kind: IndicatorParamKind::Int,
2846 required: false,
2847 default: Some(ParamValueStatic::Int(14)),
2848 min: Some(1.0),
2849 max: None,
2850 step: Some(1.0),
2851 enum_values: EMPTY_ENUM_VALUES,
2852 notes: None,
2853 },
2854 IndicatorParamInfo {
2855 key: "no_volume",
2856 label: "No Volume",
2857 kind: IndicatorParamKind::Bool,
2858 required: false,
2859 default: Some(ParamValueStatic::Bool(false)),
2860 min: None,
2861 max: None,
2862 step: None,
2863 enum_values: ENUM_VALUES_TRUE_FALSE,
2864 notes: None,
2865 },
2866];
2867
2868const PARAM_ASO: &[IndicatorParamInfo] = &[
2869 IndicatorParamInfo {
2870 key: "period",
2871 label: "Period",
2872 kind: IndicatorParamKind::Int,
2873 required: false,
2874 default: Some(ParamValueStatic::Int(10)),
2875 min: Some(1.0),
2876 max: None,
2877 step: Some(1.0),
2878 enum_values: EMPTY_ENUM_VALUES,
2879 notes: None,
2880 },
2881 IndicatorParamInfo {
2882 key: "mode",
2883 label: "Mode",
2884 kind: IndicatorParamKind::Int,
2885 required: false,
2886 default: Some(ParamValueStatic::Int(0)),
2887 min: Some(0.0),
2888 max: None,
2889 step: Some(1.0),
2890 enum_values: EMPTY_ENUM_VALUES,
2891 notes: None,
2892 },
2893];
2894
2895const PARAM_AVSL: &[IndicatorParamInfo] = &[
2896 IndicatorParamInfo {
2897 key: "fast_period",
2898 label: "Fast Period",
2899 kind: IndicatorParamKind::Int,
2900 required: false,
2901 default: Some(ParamValueStatic::Int(12)),
2902 min: Some(1.0),
2903 max: None,
2904 step: Some(1.0),
2905 enum_values: EMPTY_ENUM_VALUES,
2906 notes: None,
2907 },
2908 IndicatorParamInfo {
2909 key: "slow_period",
2910 label: "Slow Period",
2911 kind: IndicatorParamKind::Int,
2912 required: false,
2913 default: Some(ParamValueStatic::Int(26)),
2914 min: Some(1.0),
2915 max: None,
2916 step: Some(1.0),
2917 enum_values: EMPTY_ENUM_VALUES,
2918 notes: None,
2919 },
2920 IndicatorParamInfo {
2921 key: "multiplier",
2922 label: "Multiplier",
2923 kind: IndicatorParamKind::Float,
2924 required: false,
2925 default: Some(ParamValueStatic::Float(2.0)),
2926 min: Some(0.0),
2927 max: None,
2928 step: Some(0.1),
2929 enum_values: EMPTY_ENUM_VALUES,
2930 notes: None,
2931 },
2932];
2933
2934const PARAM_BANDPASS: &[IndicatorParamInfo] = &[
2935 IndicatorParamInfo {
2936 key: "period",
2937 label: "Period",
2938 kind: IndicatorParamKind::Int,
2939 required: false,
2940 default: Some(ParamValueStatic::Int(20)),
2941 min: Some(1.0),
2942 max: None,
2943 step: Some(1.0),
2944 enum_values: EMPTY_ENUM_VALUES,
2945 notes: None,
2946 },
2947 IndicatorParamInfo {
2948 key: "bandwidth",
2949 label: "Bandwidth",
2950 kind: IndicatorParamKind::Float,
2951 required: false,
2952 default: Some(ParamValueStatic::Float(0.3)),
2953 min: Some(0.0),
2954 max: None,
2955 step: None,
2956 enum_values: EMPTY_ENUM_VALUES,
2957 notes: None,
2958 },
2959];
2960
2961const PARAM_CHANDE: &[IndicatorParamInfo] = &[
2962 IndicatorParamInfo {
2963 key: "period",
2964 label: "Period",
2965 kind: IndicatorParamKind::Int,
2966 required: false,
2967 default: Some(ParamValueStatic::Int(22)),
2968 min: Some(1.0),
2969 max: None,
2970 step: Some(1.0),
2971 enum_values: EMPTY_ENUM_VALUES,
2972 notes: None,
2973 },
2974 IndicatorParamInfo {
2975 key: "mult",
2976 label: "Multiplier",
2977 kind: IndicatorParamKind::Float,
2978 required: false,
2979 default: Some(ParamValueStatic::Float(3.0)),
2980 min: Some(0.0),
2981 max: None,
2982 step: Some(0.1),
2983 enum_values: EMPTY_ENUM_VALUES,
2984 notes: None,
2985 },
2986 IndicatorParamInfo {
2987 key: "direction",
2988 label: "Direction",
2989 kind: IndicatorParamKind::EnumString,
2990 required: false,
2991 default: Some(ParamValueStatic::EnumString("long")),
2992 min: None,
2993 max: None,
2994 step: None,
2995 enum_values: &["long", "short"],
2996 notes: None,
2997 },
2998];
2999
3000const PARAM_CHANDELIER_EXIT: &[IndicatorParamInfo] = &[
3001 IndicatorParamInfo {
3002 key: "period",
3003 label: "Period",
3004 kind: IndicatorParamKind::Int,
3005 required: false,
3006 default: Some(ParamValueStatic::Int(22)),
3007 min: Some(1.0),
3008 max: None,
3009 step: Some(1.0),
3010 enum_values: EMPTY_ENUM_VALUES,
3011 notes: None,
3012 },
3013 IndicatorParamInfo {
3014 key: "mult",
3015 label: "Multiplier",
3016 kind: IndicatorParamKind::Float,
3017 required: false,
3018 default: Some(ParamValueStatic::Float(3.0)),
3019 min: Some(0.0),
3020 max: None,
3021 step: None,
3022 enum_values: EMPTY_ENUM_VALUES,
3023 notes: None,
3024 },
3025 IndicatorParamInfo {
3026 key: "use_close",
3027 label: "Use Close",
3028 kind: IndicatorParamKind::Bool,
3029 required: false,
3030 default: Some(ParamValueStatic::Bool(true)),
3031 min: None,
3032 max: None,
3033 step: None,
3034 enum_values: ENUM_VALUES_TRUE_FALSE,
3035 notes: None,
3036 },
3037];
3038
3039const PARAM_CKSP: &[IndicatorParamInfo] = &[
3040 IndicatorParamInfo {
3041 key: "p",
3042 label: "P",
3043 kind: IndicatorParamKind::Int,
3044 required: false,
3045 default: Some(ParamValueStatic::Int(10)),
3046 min: Some(1.0),
3047 max: None,
3048 step: Some(1.0),
3049 enum_values: EMPTY_ENUM_VALUES,
3050 notes: None,
3051 },
3052 IndicatorParamInfo {
3053 key: "x",
3054 label: "X",
3055 kind: IndicatorParamKind::Float,
3056 required: false,
3057 default: Some(ParamValueStatic::Float(1.0)),
3058 min: Some(0.0),
3059 max: None,
3060 step: None,
3061 enum_values: EMPTY_ENUM_VALUES,
3062 notes: None,
3063 },
3064 IndicatorParamInfo {
3065 key: "q",
3066 label: "Q",
3067 kind: IndicatorParamKind::Int,
3068 required: false,
3069 default: Some(ParamValueStatic::Int(9)),
3070 min: Some(1.0),
3071 max: None,
3072 step: Some(1.0),
3073 enum_values: EMPTY_ENUM_VALUES,
3074 notes: None,
3075 },
3076];
3077
3078const PARAM_CORRELATION_CYCLE: &[IndicatorParamInfo] = &[
3079 IndicatorParamInfo {
3080 key: "period",
3081 label: "Period",
3082 kind: IndicatorParamKind::Int,
3083 required: false,
3084 default: Some(ParamValueStatic::Int(20)),
3085 min: Some(1.0),
3086 max: None,
3087 step: Some(1.0),
3088 enum_values: EMPTY_ENUM_VALUES,
3089 notes: None,
3090 },
3091 IndicatorParamInfo {
3092 key: "threshold",
3093 label: "Threshold",
3094 kind: IndicatorParamKind::Float,
3095 required: false,
3096 default: Some(ParamValueStatic::Float(9.0)),
3097 min: None,
3098 max: None,
3099 step: None,
3100 enum_values: EMPTY_ENUM_VALUES,
3101 notes: None,
3102 },
3103];
3104
3105const PARAM_CORREL_HL: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3106 key: "period",
3107 label: "Period",
3108 kind: IndicatorParamKind::Int,
3109 required: false,
3110 default: Some(ParamValueStatic::Int(9)),
3111 min: Some(1.0),
3112 max: None,
3113 step: Some(1.0),
3114 enum_values: EMPTY_ENUM_VALUES,
3115 notes: None,
3116}];
3117
3118const PARAM_DAMIANI_VOLATMETER: &[IndicatorParamInfo] = &[
3119 IndicatorParamInfo {
3120 key: "vis_atr",
3121 label: "Vis ATR",
3122 kind: IndicatorParamKind::Int,
3123 required: false,
3124 default: Some(ParamValueStatic::Int(13)),
3125 min: Some(1.0),
3126 max: None,
3127 step: Some(1.0),
3128 enum_values: EMPTY_ENUM_VALUES,
3129 notes: None,
3130 },
3131 IndicatorParamInfo {
3132 key: "vis_std",
3133 label: "Vis STD",
3134 kind: IndicatorParamKind::Int,
3135 required: false,
3136 default: Some(ParamValueStatic::Int(20)),
3137 min: Some(1.0),
3138 max: None,
3139 step: Some(1.0),
3140 enum_values: EMPTY_ENUM_VALUES,
3141 notes: None,
3142 },
3143 IndicatorParamInfo {
3144 key: "sed_atr",
3145 label: "Sed ATR",
3146 kind: IndicatorParamKind::Int,
3147 required: false,
3148 default: Some(ParamValueStatic::Int(40)),
3149 min: Some(1.0),
3150 max: None,
3151 step: Some(1.0),
3152 enum_values: EMPTY_ENUM_VALUES,
3153 notes: None,
3154 },
3155 IndicatorParamInfo {
3156 key: "sed_std",
3157 label: "Sed STD",
3158 kind: IndicatorParamKind::Int,
3159 required: false,
3160 default: Some(ParamValueStatic::Int(100)),
3161 min: Some(1.0),
3162 max: None,
3163 step: Some(1.0),
3164 enum_values: EMPTY_ENUM_VALUES,
3165 notes: None,
3166 },
3167 IndicatorParamInfo {
3168 key: "threshold",
3169 label: "Threshold",
3170 kind: IndicatorParamKind::Float,
3171 required: false,
3172 default: Some(ParamValueStatic::Float(1.4)),
3173 min: None,
3174 max: None,
3175 step: None,
3176 enum_values: EMPTY_ENUM_VALUES,
3177 notes: None,
3178 },
3179];
3180
3181const PARAM_DVDIQQE: &[IndicatorParamInfo] = &[
3182 IndicatorParamInfo {
3183 key: "period",
3184 label: "Period",
3185 kind: IndicatorParamKind::Int,
3186 required: false,
3187 default: Some(ParamValueStatic::Int(13)),
3188 min: Some(1.0),
3189 max: None,
3190 step: Some(1.0),
3191 enum_values: EMPTY_ENUM_VALUES,
3192 notes: None,
3193 },
3194 IndicatorParamInfo {
3195 key: "smoothing_period",
3196 label: "Smoothing Period",
3197 kind: IndicatorParamKind::Int,
3198 required: false,
3199 default: Some(ParamValueStatic::Int(6)),
3200 min: Some(1.0),
3201 max: None,
3202 step: Some(1.0),
3203 enum_values: EMPTY_ENUM_VALUES,
3204 notes: None,
3205 },
3206 IndicatorParamInfo {
3207 key: "fast_multiplier",
3208 label: "Fast Multiplier",
3209 kind: IndicatorParamKind::Float,
3210 required: false,
3211 default: Some(ParamValueStatic::Float(2.618)),
3212 min: Some(0.0),
3213 max: None,
3214 step: None,
3215 enum_values: EMPTY_ENUM_VALUES,
3216 notes: None,
3217 },
3218 IndicatorParamInfo {
3219 key: "slow_multiplier",
3220 label: "Slow Multiplier",
3221 kind: IndicatorParamKind::Float,
3222 required: false,
3223 default: Some(ParamValueStatic::Float(4.236)),
3224 min: Some(0.0),
3225 max: None,
3226 step: None,
3227 enum_values: EMPTY_ENUM_VALUES,
3228 notes: None,
3229 },
3230 IndicatorParamInfo {
3231 key: "volume_type",
3232 label: "Volume Type",
3233 kind: IndicatorParamKind::EnumString,
3234 required: false,
3235 default: Some(ParamValueStatic::EnumString("default")),
3236 min: None,
3237 max: None,
3238 step: None,
3239 enum_values: EMPTY_ENUM_VALUES,
3240 notes: None,
3241 },
3242 IndicatorParamInfo {
3243 key: "center_type",
3244 label: "Center Type",
3245 kind: IndicatorParamKind::EnumString,
3246 required: false,
3247 default: Some(ParamValueStatic::EnumString("dynamic")),
3248 min: None,
3249 max: None,
3250 step: None,
3251 enum_values: EMPTY_ENUM_VALUES,
3252 notes: None,
3253 },
3254 IndicatorParamInfo {
3255 key: "tick_size",
3256 label: "Tick Size",
3257 kind: IndicatorParamKind::Float,
3258 required: false,
3259 default: Some(ParamValueStatic::Float(0.01)),
3260 min: Some(0.0),
3261 max: None,
3262 step: None,
3263 enum_values: EMPTY_ENUM_VALUES,
3264 notes: None,
3265 },
3266];
3267
3268const PARAM_EMD: &[IndicatorParamInfo] = &[
3269 IndicatorParamInfo {
3270 key: "period",
3271 label: "Period",
3272 kind: IndicatorParamKind::Int,
3273 required: false,
3274 default: Some(ParamValueStatic::Int(20)),
3275 min: Some(1.0),
3276 max: None,
3277 step: Some(1.0),
3278 enum_values: EMPTY_ENUM_VALUES,
3279 notes: None,
3280 },
3281 IndicatorParamInfo {
3282 key: "delta",
3283 label: "Delta",
3284 kind: IndicatorParamKind::Float,
3285 required: false,
3286 default: Some(ParamValueStatic::Float(0.5)),
3287 min: Some(0.0),
3288 max: None,
3289 step: None,
3290 enum_values: EMPTY_ENUM_VALUES,
3291 notes: None,
3292 },
3293 IndicatorParamInfo {
3294 key: "fraction",
3295 label: "Fraction",
3296 kind: IndicatorParamKind::Float,
3297 required: false,
3298 default: Some(ParamValueStatic::Float(0.1)),
3299 min: Some(0.0),
3300 max: None,
3301 step: None,
3302 enum_values: EMPTY_ENUM_VALUES,
3303 notes: None,
3304 },
3305];
3306
3307const PARAM_ERI: &[IndicatorParamInfo] = &[
3308 IndicatorParamInfo {
3309 key: "period",
3310 label: "Period",
3311 kind: IndicatorParamKind::Int,
3312 required: false,
3313 default: Some(ParamValueStatic::Int(13)),
3314 min: Some(1.0),
3315 max: None,
3316 step: Some(1.0),
3317 enum_values: EMPTY_ENUM_VALUES,
3318 notes: None,
3319 },
3320 IndicatorParamInfo {
3321 key: "ma_type",
3322 label: "MA Type",
3323 kind: IndicatorParamKind::EnumString,
3324 required: false,
3325 default: Some(ParamValueStatic::EnumString("ema")),
3326 min: None,
3327 max: None,
3328 step: None,
3329 enum_values: EMPTY_ENUM_VALUES,
3330 notes: None,
3331 },
3332];
3333
3334const PARAM_FISHER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3335 key: "period",
3336 label: "Period",
3337 kind: IndicatorParamKind::Int,
3338 required: false,
3339 default: Some(ParamValueStatic::Int(9)),
3340 min: Some(1.0),
3341 max: None,
3342 step: Some(1.0),
3343 enum_values: EMPTY_ENUM_VALUES,
3344 notes: None,
3345}];
3346
3347const PARAM_FVG_TRAILING_STOP: &[IndicatorParamInfo] = &[
3348 IndicatorParamInfo {
3349 key: "unmitigated_fvg_lookback",
3350 label: "FVG Lookback",
3351 kind: IndicatorParamKind::Int,
3352 required: false,
3353 default: Some(ParamValueStatic::Int(5)),
3354 min: Some(1.0),
3355 max: None,
3356 step: Some(1.0),
3357 enum_values: EMPTY_ENUM_VALUES,
3358 notes: None,
3359 },
3360 IndicatorParamInfo {
3361 key: "smoothing_length",
3362 label: "Smoothing Length",
3363 kind: IndicatorParamKind::Int,
3364 required: false,
3365 default: Some(ParamValueStatic::Int(9)),
3366 min: Some(1.0),
3367 max: None,
3368 step: Some(1.0),
3369 enum_values: EMPTY_ENUM_VALUES,
3370 notes: None,
3371 },
3372 IndicatorParamInfo {
3373 key: "reset_on_cross",
3374 label: "Reset On Cross",
3375 kind: IndicatorParamKind::Bool,
3376 required: false,
3377 default: Some(ParamValueStatic::Bool(false)),
3378 min: None,
3379 max: None,
3380 step: None,
3381 enum_values: ENUM_VALUES_TRUE_FALSE,
3382 notes: None,
3383 },
3384];
3385
3386const PARAM_GATOROSC: &[IndicatorParamInfo] = &[
3387 IndicatorParamInfo {
3388 key: "jaws_length",
3389 label: "Jaws Length",
3390 kind: IndicatorParamKind::Int,
3391 required: false,
3392 default: Some(ParamValueStatic::Int(13)),
3393 min: Some(1.0),
3394 max: None,
3395 step: Some(1.0),
3396 enum_values: EMPTY_ENUM_VALUES,
3397 notes: None,
3398 },
3399 IndicatorParamInfo {
3400 key: "jaws_shift",
3401 label: "Jaws Shift",
3402 kind: IndicatorParamKind::Int,
3403 required: false,
3404 default: Some(ParamValueStatic::Int(8)),
3405 min: Some(0.0),
3406 max: None,
3407 step: Some(1.0),
3408 enum_values: EMPTY_ENUM_VALUES,
3409 notes: None,
3410 },
3411 IndicatorParamInfo {
3412 key: "teeth_length",
3413 label: "Teeth Length",
3414 kind: IndicatorParamKind::Int,
3415 required: false,
3416 default: Some(ParamValueStatic::Int(8)),
3417 min: Some(1.0),
3418 max: None,
3419 step: Some(1.0),
3420 enum_values: EMPTY_ENUM_VALUES,
3421 notes: None,
3422 },
3423 IndicatorParamInfo {
3424 key: "teeth_shift",
3425 label: "Teeth Shift",
3426 kind: IndicatorParamKind::Int,
3427 required: false,
3428 default: Some(ParamValueStatic::Int(5)),
3429 min: Some(0.0),
3430 max: None,
3431 step: Some(1.0),
3432 enum_values: EMPTY_ENUM_VALUES,
3433 notes: None,
3434 },
3435 IndicatorParamInfo {
3436 key: "lips_length",
3437 label: "Lips Length",
3438 kind: IndicatorParamKind::Int,
3439 required: false,
3440 default: Some(ParamValueStatic::Int(5)),
3441 min: Some(1.0),
3442 max: None,
3443 step: Some(1.0),
3444 enum_values: EMPTY_ENUM_VALUES,
3445 notes: None,
3446 },
3447 IndicatorParamInfo {
3448 key: "lips_shift",
3449 label: "Lips Shift",
3450 kind: IndicatorParamKind::Int,
3451 required: false,
3452 default: Some(ParamValueStatic::Int(3)),
3453 min: Some(0.0),
3454 max: None,
3455 step: Some(1.0),
3456 enum_values: EMPTY_ENUM_VALUES,
3457 notes: None,
3458 },
3459];
3460
3461const PARAM_HALFTREND: &[IndicatorParamInfo] = &[
3462 IndicatorParamInfo {
3463 key: "amplitude",
3464 label: "Amplitude",
3465 kind: IndicatorParamKind::Int,
3466 required: false,
3467 default: Some(ParamValueStatic::Int(2)),
3468 min: Some(1.0),
3469 max: None,
3470 step: Some(1.0),
3471 enum_values: EMPTY_ENUM_VALUES,
3472 notes: None,
3473 },
3474 IndicatorParamInfo {
3475 key: "channel_deviation",
3476 label: "Channel Deviation",
3477 kind: IndicatorParamKind::Float,
3478 required: false,
3479 default: Some(ParamValueStatic::Float(2.0)),
3480 min: Some(0.0),
3481 max: None,
3482 step: None,
3483 enum_values: EMPTY_ENUM_VALUES,
3484 notes: None,
3485 },
3486 IndicatorParamInfo {
3487 key: "atr_period",
3488 label: "ATR Period",
3489 kind: IndicatorParamKind::Int,
3490 required: false,
3491 default: Some(ParamValueStatic::Int(100)),
3492 min: Some(1.0),
3493 max: None,
3494 step: Some(1.0),
3495 enum_values: EMPTY_ENUM_VALUES,
3496 notes: None,
3497 },
3498];
3499
3500const PARAM_SAFEZONESTOP: &[IndicatorParamInfo] = &[
3501 IndicatorParamInfo {
3502 key: "period",
3503 label: "Period",
3504 kind: IndicatorParamKind::Int,
3505 required: false,
3506 default: Some(ParamValueStatic::Int(22)),
3507 min: Some(1.0),
3508 max: None,
3509 step: Some(1.0),
3510 enum_values: EMPTY_ENUM_VALUES,
3511 notes: None,
3512 },
3513 IndicatorParamInfo {
3514 key: "mult",
3515 label: "Multiplier",
3516 kind: IndicatorParamKind::Float,
3517 required: false,
3518 default: Some(ParamValueStatic::Float(2.5)),
3519 min: Some(0.0),
3520 max: None,
3521 step: None,
3522 enum_values: EMPTY_ENUM_VALUES,
3523 notes: None,
3524 },
3525 IndicatorParamInfo {
3526 key: "max_lookback",
3527 label: "Max Lookback",
3528 kind: IndicatorParamKind::Int,
3529 required: false,
3530 default: Some(ParamValueStatic::Int(3)),
3531 min: Some(1.0),
3532 max: None,
3533 step: Some(1.0),
3534 enum_values: EMPTY_ENUM_VALUES,
3535 notes: None,
3536 },
3537 IndicatorParamInfo {
3538 key: "direction",
3539 label: "Direction",
3540 kind: IndicatorParamKind::EnumString,
3541 required: false,
3542 default: Some(ParamValueStatic::EnumString("long")),
3543 min: None,
3544 max: None,
3545 step: None,
3546 enum_values: EMPTY_ENUM_VALUES,
3547 notes: None,
3548 },
3549];
3550
3551const PARAM_DEVSTOP: &[IndicatorParamInfo] = &[
3552 IndicatorParamInfo {
3553 key: "period",
3554 label: "Period",
3555 kind: IndicatorParamKind::Int,
3556 required: false,
3557 default: Some(ParamValueStatic::Int(20)),
3558 min: Some(1.0),
3559 max: None,
3560 step: Some(1.0),
3561 enum_values: EMPTY_ENUM_VALUES,
3562 notes: None,
3563 },
3564 IndicatorParamInfo {
3565 key: "mult",
3566 label: "Multiplier",
3567 kind: IndicatorParamKind::Float,
3568 required: false,
3569 default: Some(ParamValueStatic::Float(0.0)),
3570 min: Some(0.0),
3571 max: None,
3572 step: None,
3573 enum_values: EMPTY_ENUM_VALUES,
3574 notes: None,
3575 },
3576 IndicatorParamInfo {
3577 key: "devtype",
3578 label: "Dev Type",
3579 kind: IndicatorParamKind::Int,
3580 required: false,
3581 default: Some(ParamValueStatic::Int(0)),
3582 min: Some(0.0),
3583 max: None,
3584 step: Some(1.0),
3585 enum_values: EMPTY_ENUM_VALUES,
3586 notes: None,
3587 },
3588 IndicatorParamInfo {
3589 key: "direction",
3590 label: "Direction",
3591 kind: IndicatorParamKind::EnumString,
3592 required: false,
3593 default: Some(ParamValueStatic::EnumString("long")),
3594 min: None,
3595 max: None,
3596 step: None,
3597 enum_values: EMPTY_ENUM_VALUES,
3598 notes: None,
3599 },
3600 IndicatorParamInfo {
3601 key: "ma_type",
3602 label: "MA Type",
3603 kind: IndicatorParamKind::EnumString,
3604 required: false,
3605 default: Some(ParamValueStatic::EnumString("sma")),
3606 min: None,
3607 max: None,
3608 step: None,
3609 enum_values: EMPTY_ENUM_VALUES,
3610 notes: None,
3611 },
3612];
3613
3614const PARAM_MOD_GOD_MODE: &[IndicatorParamInfo] = &[
3615 IndicatorParamInfo {
3616 key: "n1",
3617 label: "N1",
3618 kind: IndicatorParamKind::Int,
3619 required: false,
3620 default: Some(ParamValueStatic::Int(17)),
3621 min: Some(1.0),
3622 max: None,
3623 step: Some(1.0),
3624 enum_values: EMPTY_ENUM_VALUES,
3625 notes: None,
3626 },
3627 IndicatorParamInfo {
3628 key: "n2",
3629 label: "N2",
3630 kind: IndicatorParamKind::Int,
3631 required: false,
3632 default: Some(ParamValueStatic::Int(6)),
3633 min: Some(1.0),
3634 max: None,
3635 step: Some(1.0),
3636 enum_values: EMPTY_ENUM_VALUES,
3637 notes: None,
3638 },
3639 IndicatorParamInfo {
3640 key: "n3",
3641 label: "N3",
3642 kind: IndicatorParamKind::Int,
3643 required: false,
3644 default: Some(ParamValueStatic::Int(4)),
3645 min: Some(1.0),
3646 max: None,
3647 step: Some(1.0),
3648 enum_values: EMPTY_ENUM_VALUES,
3649 notes: None,
3650 },
3651 IndicatorParamInfo {
3652 key: "mode",
3653 label: "Mode",
3654 kind: IndicatorParamKind::EnumString,
3655 required: false,
3656 default: Some(ParamValueStatic::EnumString("tradition_mg")),
3657 min: None,
3658 max: None,
3659 step: None,
3660 enum_values: EMPTY_ENUM_VALUES,
3661 notes: None,
3662 },
3663 IndicatorParamInfo {
3664 key: "use_volume",
3665 label: "Use Volume",
3666 kind: IndicatorParamKind::Bool,
3667 required: false,
3668 default: Some(ParamValueStatic::Bool(true)),
3669 min: None,
3670 max: None,
3671 step: None,
3672 enum_values: ENUM_VALUES_TRUE_FALSE,
3673 notes: None,
3674 },
3675];
3676
3677const PARAM_KST: &[IndicatorParamInfo] = &[
3678 IndicatorParamInfo {
3679 key: "sma_period1",
3680 label: "SMA 1",
3681 kind: IndicatorParamKind::Int,
3682 required: false,
3683 default: Some(ParamValueStatic::Int(10)),
3684 min: Some(1.0),
3685 max: None,
3686 step: Some(1.0),
3687 enum_values: EMPTY_ENUM_VALUES,
3688 notes: None,
3689 },
3690 IndicatorParamInfo {
3691 key: "sma_period2",
3692 label: "SMA 2",
3693 kind: IndicatorParamKind::Int,
3694 required: false,
3695 default: Some(ParamValueStatic::Int(10)),
3696 min: Some(1.0),
3697 max: None,
3698 step: Some(1.0),
3699 enum_values: EMPTY_ENUM_VALUES,
3700 notes: None,
3701 },
3702 IndicatorParamInfo {
3703 key: "sma_period3",
3704 label: "SMA 3",
3705 kind: IndicatorParamKind::Int,
3706 required: false,
3707 default: Some(ParamValueStatic::Int(10)),
3708 min: Some(1.0),
3709 max: None,
3710 step: Some(1.0),
3711 enum_values: EMPTY_ENUM_VALUES,
3712 notes: None,
3713 },
3714 IndicatorParamInfo {
3715 key: "sma_period4",
3716 label: "SMA 4",
3717 kind: IndicatorParamKind::Int,
3718 required: false,
3719 default: Some(ParamValueStatic::Int(15)),
3720 min: Some(1.0),
3721 max: None,
3722 step: Some(1.0),
3723 enum_values: EMPTY_ENUM_VALUES,
3724 notes: None,
3725 },
3726 IndicatorParamInfo {
3727 key: "roc_period1",
3728 label: "ROC 1",
3729 kind: IndicatorParamKind::Int,
3730 required: false,
3731 default: Some(ParamValueStatic::Int(10)),
3732 min: Some(1.0),
3733 max: None,
3734 step: Some(1.0),
3735 enum_values: EMPTY_ENUM_VALUES,
3736 notes: None,
3737 },
3738 IndicatorParamInfo {
3739 key: "roc_period2",
3740 label: "ROC 2",
3741 kind: IndicatorParamKind::Int,
3742 required: false,
3743 default: Some(ParamValueStatic::Int(15)),
3744 min: Some(1.0),
3745 max: None,
3746 step: Some(1.0),
3747 enum_values: EMPTY_ENUM_VALUES,
3748 notes: None,
3749 },
3750 IndicatorParamInfo {
3751 key: "roc_period3",
3752 label: "ROC 3",
3753 kind: IndicatorParamKind::Int,
3754 required: false,
3755 default: Some(ParamValueStatic::Int(20)),
3756 min: Some(1.0),
3757 max: None,
3758 step: Some(1.0),
3759 enum_values: EMPTY_ENUM_VALUES,
3760 notes: None,
3761 },
3762 IndicatorParamInfo {
3763 key: "roc_period4",
3764 label: "ROC 4",
3765 kind: IndicatorParamKind::Int,
3766 required: false,
3767 default: Some(ParamValueStatic::Int(30)),
3768 min: Some(1.0),
3769 max: None,
3770 step: Some(1.0),
3771 enum_values: EMPTY_ENUM_VALUES,
3772 notes: None,
3773 },
3774 IndicatorParamInfo {
3775 key: "signal_period",
3776 label: "Signal Period",
3777 kind: IndicatorParamKind::Int,
3778 required: false,
3779 default: Some(ParamValueStatic::Int(9)),
3780 min: Some(1.0),
3781 max: None,
3782 step: Some(1.0),
3783 enum_values: EMPTY_ENUM_VALUES,
3784 notes: None,
3785 },
3786];
3787
3788const PARAM_KAUFMANSTOP: &[IndicatorParamInfo] = &[
3789 IndicatorParamInfo {
3790 key: "period",
3791 label: "Period",
3792 kind: IndicatorParamKind::Int,
3793 required: false,
3794 default: Some(ParamValueStatic::Int(22)),
3795 min: Some(1.0),
3796 max: None,
3797 step: Some(1.0),
3798 enum_values: EMPTY_ENUM_VALUES,
3799 notes: None,
3800 },
3801 IndicatorParamInfo {
3802 key: "mult",
3803 label: "Multiplier",
3804 kind: IndicatorParamKind::Float,
3805 required: false,
3806 default: Some(ParamValueStatic::Float(2.0)),
3807 min: Some(0.0),
3808 max: None,
3809 step: None,
3810 enum_values: EMPTY_ENUM_VALUES,
3811 notes: None,
3812 },
3813 IndicatorParamInfo {
3814 key: "direction",
3815 label: "Direction",
3816 kind: IndicatorParamKind::EnumString,
3817 required: false,
3818 default: Some(ParamValueStatic::EnumString("long")),
3819 min: None,
3820 max: None,
3821 step: None,
3822 enum_values: EMPTY_ENUM_VALUES,
3823 notes: None,
3824 },
3825 IndicatorParamInfo {
3826 key: "ma_type",
3827 label: "MA Type",
3828 kind: IndicatorParamKind::EnumString,
3829 required: false,
3830 default: Some(ParamValueStatic::EnumString("sma")),
3831 min: None,
3832 max: None,
3833 step: None,
3834 enum_values: EMPTY_ENUM_VALUES,
3835 notes: None,
3836 },
3837];
3838
3839const PARAM_LPC: &[IndicatorParamInfo] = &[
3840 IndicatorParamInfo {
3841 key: "cutoff_type",
3842 label: "Cutoff Type",
3843 kind: IndicatorParamKind::EnumString,
3844 required: false,
3845 default: Some(ParamValueStatic::EnumString("adaptive")),
3846 min: None,
3847 max: None,
3848 step: None,
3849 enum_values: EMPTY_ENUM_VALUES,
3850 notes: None,
3851 },
3852 IndicatorParamInfo {
3853 key: "fixed_period",
3854 label: "Fixed Period",
3855 kind: IndicatorParamKind::Int,
3856 required: false,
3857 default: Some(ParamValueStatic::Int(20)),
3858 min: Some(1.0),
3859 max: None,
3860 step: Some(1.0),
3861 enum_values: EMPTY_ENUM_VALUES,
3862 notes: None,
3863 },
3864 IndicatorParamInfo {
3865 key: "max_cycle_limit",
3866 label: "Max Cycle Limit",
3867 kind: IndicatorParamKind::Int,
3868 required: false,
3869 default: Some(ParamValueStatic::Int(60)),
3870 min: Some(1.0),
3871 max: None,
3872 step: Some(1.0),
3873 enum_values: EMPTY_ENUM_VALUES,
3874 notes: None,
3875 },
3876 IndicatorParamInfo {
3877 key: "cycle_mult",
3878 label: "Cycle Mult",
3879 kind: IndicatorParamKind::Float,
3880 required: false,
3881 default: Some(ParamValueStatic::Float(1.0)),
3882 min: Some(0.0),
3883 max: None,
3884 step: None,
3885 enum_values: EMPTY_ENUM_VALUES,
3886 notes: None,
3887 },
3888 IndicatorParamInfo {
3889 key: "tr_mult",
3890 label: "TR Mult",
3891 kind: IndicatorParamKind::Float,
3892 required: false,
3893 default: Some(ParamValueStatic::Float(1.0)),
3894 min: Some(0.0),
3895 max: None,
3896 step: None,
3897 enum_values: EMPTY_ENUM_VALUES,
3898 notes: None,
3899 },
3900];
3901
3902const PARAM_MAB: &[IndicatorParamInfo] = &[
3903 IndicatorParamInfo {
3904 key: "fast_period",
3905 label: "Fast Period",
3906 kind: IndicatorParamKind::Int,
3907 required: false,
3908 default: Some(ParamValueStatic::Int(10)),
3909 min: Some(1.0),
3910 max: None,
3911 step: Some(1.0),
3912 enum_values: EMPTY_ENUM_VALUES,
3913 notes: None,
3914 },
3915 IndicatorParamInfo {
3916 key: "slow_period",
3917 label: "Slow Period",
3918 kind: IndicatorParamKind::Int,
3919 required: false,
3920 default: Some(ParamValueStatic::Int(50)),
3921 min: Some(1.0),
3922 max: None,
3923 step: Some(1.0),
3924 enum_values: EMPTY_ENUM_VALUES,
3925 notes: None,
3926 },
3927 IndicatorParamInfo {
3928 key: "devup",
3929 label: "Dev Up",
3930 kind: IndicatorParamKind::Float,
3931 required: false,
3932 default: Some(ParamValueStatic::Float(1.0)),
3933 min: Some(0.0),
3934 max: None,
3935 step: None,
3936 enum_values: EMPTY_ENUM_VALUES,
3937 notes: None,
3938 },
3939 IndicatorParamInfo {
3940 key: "devdn",
3941 label: "Dev Down",
3942 kind: IndicatorParamKind::Float,
3943 required: false,
3944 default: Some(ParamValueStatic::Float(1.0)),
3945 min: Some(0.0),
3946 max: None,
3947 step: None,
3948 enum_values: EMPTY_ENUM_VALUES,
3949 notes: None,
3950 },
3951 IndicatorParamInfo {
3952 key: "fast_ma_type",
3953 label: "Fast MA Type",
3954 kind: IndicatorParamKind::EnumString,
3955 required: false,
3956 default: Some(ParamValueStatic::EnumString("sma")),
3957 min: None,
3958 max: None,
3959 step: None,
3960 enum_values: EMPTY_ENUM_VALUES,
3961 notes: None,
3962 },
3963 IndicatorParamInfo {
3964 key: "slow_ma_type",
3965 label: "Slow MA Type",
3966 kind: IndicatorParamKind::EnumString,
3967 required: false,
3968 default: Some(ParamValueStatic::EnumString("sma")),
3969 min: None,
3970 max: None,
3971 step: None,
3972 enum_values: EMPTY_ENUM_VALUES,
3973 notes: None,
3974 },
3975];
3976
3977const PARAM_MACZ: &[IndicatorParamInfo] = &[
3978 IndicatorParamInfo {
3979 key: "fast_length",
3980 label: "Fast Length",
3981 kind: IndicatorParamKind::Int,
3982 required: false,
3983 default: Some(ParamValueStatic::Int(12)),
3984 min: Some(1.0),
3985 max: None,
3986 step: Some(1.0),
3987 enum_values: EMPTY_ENUM_VALUES,
3988 notes: None,
3989 },
3990 IndicatorParamInfo {
3991 key: "slow_length",
3992 label: "Slow Length",
3993 kind: IndicatorParamKind::Int,
3994 required: false,
3995 default: Some(ParamValueStatic::Int(25)),
3996 min: Some(1.0),
3997 max: None,
3998 step: Some(1.0),
3999 enum_values: EMPTY_ENUM_VALUES,
4000 notes: None,
4001 },
4002 IndicatorParamInfo {
4003 key: "signal_length",
4004 label: "Signal Length",
4005 kind: IndicatorParamKind::Int,
4006 required: false,
4007 default: Some(ParamValueStatic::Int(9)),
4008 min: Some(1.0),
4009 max: None,
4010 step: Some(1.0),
4011 enum_values: EMPTY_ENUM_VALUES,
4012 notes: None,
4013 },
4014 IndicatorParamInfo {
4015 key: "lengthz",
4016 label: "Length Z",
4017 kind: IndicatorParamKind::Int,
4018 required: false,
4019 default: Some(ParamValueStatic::Int(20)),
4020 min: Some(1.0),
4021 max: None,
4022 step: Some(1.0),
4023 enum_values: EMPTY_ENUM_VALUES,
4024 notes: None,
4025 },
4026 IndicatorParamInfo {
4027 key: "length_stdev",
4028 label: "Length StdDev",
4029 kind: IndicatorParamKind::Int,
4030 required: false,
4031 default: Some(ParamValueStatic::Int(25)),
4032 min: Some(1.0),
4033 max: None,
4034 step: Some(1.0),
4035 enum_values: EMPTY_ENUM_VALUES,
4036 notes: None,
4037 },
4038 IndicatorParamInfo {
4039 key: "a",
4040 label: "A",
4041 kind: IndicatorParamKind::Float,
4042 required: false,
4043 default: Some(ParamValueStatic::Float(1.0)),
4044 min: None,
4045 max: None,
4046 step: None,
4047 enum_values: EMPTY_ENUM_VALUES,
4048 notes: None,
4049 },
4050 IndicatorParamInfo {
4051 key: "b",
4052 label: "B",
4053 kind: IndicatorParamKind::Float,
4054 required: false,
4055 default: Some(ParamValueStatic::Float(1.0)),
4056 min: None,
4057 max: None,
4058 step: None,
4059 enum_values: EMPTY_ENUM_VALUES,
4060 notes: None,
4061 },
4062 IndicatorParamInfo {
4063 key: "use_lag",
4064 label: "Use Lag",
4065 kind: IndicatorParamKind::Bool,
4066 required: false,
4067 default: Some(ParamValueStatic::Bool(false)),
4068 min: None,
4069 max: None,
4070 step: None,
4071 enum_values: ENUM_VALUES_TRUE_FALSE,
4072 notes: None,
4073 },
4074 IndicatorParamInfo {
4075 key: "gamma",
4076 label: "Gamma",
4077 kind: IndicatorParamKind::Float,
4078 required: false,
4079 default: Some(ParamValueStatic::Float(0.02)),
4080 min: None,
4081 max: None,
4082 step: None,
4083 enum_values: EMPTY_ENUM_VALUES,
4084 notes: None,
4085 },
4086];
4087
4088const PARAM_MINMAX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4089 key: "order",
4090 label: "Order",
4091 kind: IndicatorParamKind::Int,
4092 required: false,
4093 default: Some(ParamValueStatic::Int(3)),
4094 min: Some(1.0),
4095 max: None,
4096 step: Some(1.0),
4097 enum_values: EMPTY_ENUM_VALUES,
4098 notes: None,
4099}];
4100
4101const PARAM_MSW: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4102 key: "period",
4103 label: "Period",
4104 kind: IndicatorParamKind::Int,
4105 required: false,
4106 default: Some(ParamValueStatic::Int(5)),
4107 min: Some(1.0),
4108 max: None,
4109 step: Some(1.0),
4110 enum_values: EMPTY_ENUM_VALUES,
4111 notes: None,
4112}];
4113
4114const PARAM_NWE: &[IndicatorParamInfo] = &[
4115 IndicatorParamInfo {
4116 key: "bandwidth",
4117 label: "Bandwidth",
4118 kind: IndicatorParamKind::Float,
4119 required: false,
4120 default: Some(ParamValueStatic::Float(8.0)),
4121 min: Some(0.0),
4122 max: None,
4123 step: None,
4124 enum_values: EMPTY_ENUM_VALUES,
4125 notes: None,
4126 },
4127 IndicatorParamInfo {
4128 key: "multiplier",
4129 label: "Multiplier",
4130 kind: IndicatorParamKind::Float,
4131 required: false,
4132 default: Some(ParamValueStatic::Float(3.0)),
4133 min: Some(0.0),
4134 max: None,
4135 step: None,
4136 enum_values: EMPTY_ENUM_VALUES,
4137 notes: None,
4138 },
4139 IndicatorParamInfo {
4140 key: "lookback",
4141 label: "Lookback",
4142 kind: IndicatorParamKind::Int,
4143 required: false,
4144 default: Some(ParamValueStatic::Int(500)),
4145 min: Some(1.0),
4146 max: None,
4147 step: Some(1.0),
4148 enum_values: EMPTY_ENUM_VALUES,
4149 notes: None,
4150 },
4151];
4152
4153const PARAM_OTT: &[IndicatorParamInfo] = &[
4154 IndicatorParamInfo {
4155 key: "period",
4156 label: "Period",
4157 kind: IndicatorParamKind::Int,
4158 required: false,
4159 default: Some(ParamValueStatic::Int(2)),
4160 min: Some(1.0),
4161 max: None,
4162 step: Some(1.0),
4163 enum_values: EMPTY_ENUM_VALUES,
4164 notes: None,
4165 },
4166 IndicatorParamInfo {
4167 key: "percent",
4168 label: "Percent",
4169 kind: IndicatorParamKind::Float,
4170 required: false,
4171 default: Some(ParamValueStatic::Float(1.4)),
4172 min: Some(0.0),
4173 max: None,
4174 step: None,
4175 enum_values: EMPTY_ENUM_VALUES,
4176 notes: None,
4177 },
4178 IndicatorParamInfo {
4179 key: "ma_type",
4180 label: "MA Type",
4181 kind: IndicatorParamKind::EnumString,
4182 required: false,
4183 default: Some(ParamValueStatic::EnumString("VAR")),
4184 min: None,
4185 max: None,
4186 step: None,
4187 enum_values: EMPTY_ENUM_VALUES,
4188 notes: None,
4189 },
4190];
4191
4192const PARAM_OTTO: &[IndicatorParamInfo] = &[
4193 IndicatorParamInfo {
4194 key: "ott_period",
4195 label: "OTT Period",
4196 kind: IndicatorParamKind::Int,
4197 required: false,
4198 default: Some(ParamValueStatic::Int(2)),
4199 min: Some(1.0),
4200 max: None,
4201 step: Some(1.0),
4202 enum_values: EMPTY_ENUM_VALUES,
4203 notes: None,
4204 },
4205 IndicatorParamInfo {
4206 key: "ott_percent",
4207 label: "OTT Percent",
4208 kind: IndicatorParamKind::Float,
4209 required: false,
4210 default: Some(ParamValueStatic::Float(0.6)),
4211 min: Some(0.0),
4212 max: None,
4213 step: None,
4214 enum_values: EMPTY_ENUM_VALUES,
4215 notes: None,
4216 },
4217 IndicatorParamInfo {
4218 key: "fast_vidya_length",
4219 label: "Fast VIDYA Length",
4220 kind: IndicatorParamKind::Int,
4221 required: false,
4222 default: Some(ParamValueStatic::Int(10)),
4223 min: Some(1.0),
4224 max: None,
4225 step: Some(1.0),
4226 enum_values: EMPTY_ENUM_VALUES,
4227 notes: None,
4228 },
4229 IndicatorParamInfo {
4230 key: "slow_vidya_length",
4231 label: "Slow VIDYA Length",
4232 kind: IndicatorParamKind::Int,
4233 required: false,
4234 default: Some(ParamValueStatic::Int(25)),
4235 min: Some(1.0),
4236 max: None,
4237 step: Some(1.0),
4238 enum_values: EMPTY_ENUM_VALUES,
4239 notes: None,
4240 },
4241 IndicatorParamInfo {
4242 key: "correcting_constant",
4243 label: "Correcting Constant",
4244 kind: IndicatorParamKind::Float,
4245 required: false,
4246 default: Some(ParamValueStatic::Float(100000.0)),
4247 min: Some(0.0),
4248 max: None,
4249 step: None,
4250 enum_values: EMPTY_ENUM_VALUES,
4251 notes: None,
4252 },
4253 IndicatorParamInfo {
4254 key: "ma_type",
4255 label: "MA Type",
4256 kind: IndicatorParamKind::EnumString,
4257 required: false,
4258 default: Some(ParamValueStatic::EnumString("VAR")),
4259 min: None,
4260 max: None,
4261 step: None,
4262 enum_values: EMPTY_ENUM_VALUES,
4263 notes: None,
4264 },
4265];
4266
4267const PARAM_PMA: &[IndicatorParamInfo] = PARAM_NONE;
4268
4269const PARAM_PRB: &[IndicatorParamInfo] = &[
4270 IndicatorParamInfo {
4271 key: "smooth_data",
4272 label: "Smooth Data",
4273 kind: IndicatorParamKind::Bool,
4274 required: false,
4275 default: Some(ParamValueStatic::Bool(true)),
4276 min: None,
4277 max: None,
4278 step: None,
4279 enum_values: ENUM_VALUES_TRUE_FALSE,
4280 notes: None,
4281 },
4282 IndicatorParamInfo {
4283 key: "smooth_period",
4284 label: "Smooth Period",
4285 kind: IndicatorParamKind::Int,
4286 required: false,
4287 default: Some(ParamValueStatic::Int(10)),
4288 min: Some(1.0),
4289 max: None,
4290 step: Some(1.0),
4291 enum_values: EMPTY_ENUM_VALUES,
4292 notes: None,
4293 },
4294 IndicatorParamInfo {
4295 key: "regression_period",
4296 label: "Regression Period",
4297 kind: IndicatorParamKind::Int,
4298 required: false,
4299 default: Some(ParamValueStatic::Int(100)),
4300 min: Some(1.0),
4301 max: None,
4302 step: Some(1.0),
4303 enum_values: EMPTY_ENUM_VALUES,
4304 notes: None,
4305 },
4306 IndicatorParamInfo {
4307 key: "polynomial_order",
4308 label: "Polynomial Order",
4309 kind: IndicatorParamKind::Int,
4310 required: false,
4311 default: Some(ParamValueStatic::Int(2)),
4312 min: Some(1.0),
4313 max: None,
4314 step: Some(1.0),
4315 enum_values: EMPTY_ENUM_VALUES,
4316 notes: None,
4317 },
4318 IndicatorParamInfo {
4319 key: "regression_offset",
4320 label: "Regression Offset",
4321 kind: IndicatorParamKind::Int,
4322 required: false,
4323 default: Some(ParamValueStatic::Int(0)),
4324 min: None,
4325 max: None,
4326 step: Some(1.0),
4327 enum_values: EMPTY_ENUM_VALUES,
4328 notes: None,
4329 },
4330 IndicatorParamInfo {
4331 key: "ndev",
4332 label: "NDev",
4333 kind: IndicatorParamKind::Float,
4334 required: false,
4335 default: Some(ParamValueStatic::Float(2.0)),
4336 min: Some(0.0),
4337 max: None,
4338 step: None,
4339 enum_values: EMPTY_ENUM_VALUES,
4340 notes: None,
4341 },
4342 IndicatorParamInfo {
4343 key: "equ_from",
4344 label: "Equ From",
4345 kind: IndicatorParamKind::Int,
4346 required: false,
4347 default: Some(ParamValueStatic::Int(0)),
4348 min: Some(0.0),
4349 max: None,
4350 step: Some(1.0),
4351 enum_values: EMPTY_ENUM_VALUES,
4352 notes: None,
4353 },
4354];
4355
4356const PARAM_QQE: &[IndicatorParamInfo] = &[
4357 IndicatorParamInfo {
4358 key: "rsi_period",
4359 label: "RSI Period",
4360 kind: IndicatorParamKind::Int,
4361 required: false,
4362 default: Some(ParamValueStatic::Int(14)),
4363 min: Some(1.0),
4364 max: None,
4365 step: Some(1.0),
4366 enum_values: EMPTY_ENUM_VALUES,
4367 notes: None,
4368 },
4369 IndicatorParamInfo {
4370 key: "smoothing_factor",
4371 label: "Smoothing Factor",
4372 kind: IndicatorParamKind::Int,
4373 required: false,
4374 default: Some(ParamValueStatic::Int(5)),
4375 min: Some(1.0),
4376 max: None,
4377 step: Some(1.0),
4378 enum_values: EMPTY_ENUM_VALUES,
4379 notes: None,
4380 },
4381 IndicatorParamInfo {
4382 key: "fast_factor",
4383 label: "Fast Factor",
4384 kind: IndicatorParamKind::Float,
4385 required: false,
4386 default: Some(ParamValueStatic::Float(4.236)),
4387 min: Some(0.0),
4388 max: None,
4389 step: None,
4390 enum_values: EMPTY_ENUM_VALUES,
4391 notes: None,
4392 },
4393];
4394
4395const PARAM_RANGE_FILTER: &[IndicatorParamInfo] = &[
4396 IndicatorParamInfo {
4397 key: "range_size",
4398 label: "Range Size",
4399 kind: IndicatorParamKind::Float,
4400 required: false,
4401 default: Some(ParamValueStatic::Float(2.618)),
4402 min: Some(0.0),
4403 max: None,
4404 step: None,
4405 enum_values: EMPTY_ENUM_VALUES,
4406 notes: None,
4407 },
4408 IndicatorParamInfo {
4409 key: "range_period",
4410 label: "Range Period",
4411 kind: IndicatorParamKind::Int,
4412 required: false,
4413 default: Some(ParamValueStatic::Int(14)),
4414 min: Some(1.0),
4415 max: None,
4416 step: Some(1.0),
4417 enum_values: EMPTY_ENUM_VALUES,
4418 notes: None,
4419 },
4420 IndicatorParamInfo {
4421 key: "smooth_range",
4422 label: "Smooth Range",
4423 kind: IndicatorParamKind::Bool,
4424 required: false,
4425 default: Some(ParamValueStatic::Bool(true)),
4426 min: None,
4427 max: None,
4428 step: None,
4429 enum_values: ENUM_VALUES_TRUE_FALSE,
4430 notes: None,
4431 },
4432 IndicatorParamInfo {
4433 key: "smooth_period",
4434 label: "Smooth Period",
4435 kind: IndicatorParamKind::Int,
4436 required: false,
4437 default: Some(ParamValueStatic::Int(27)),
4438 min: Some(1.0),
4439 max: None,
4440 step: Some(1.0),
4441 enum_values: EMPTY_ENUM_VALUES,
4442 notes: None,
4443 },
4444];
4445
4446const PARAM_RSMK: &[IndicatorParamInfo] = &[
4447 IndicatorParamInfo {
4448 key: "lookback",
4449 label: "Lookback",
4450 kind: IndicatorParamKind::Int,
4451 required: false,
4452 default: Some(ParamValueStatic::Int(90)),
4453 min: Some(1.0),
4454 max: None,
4455 step: Some(1.0),
4456 enum_values: EMPTY_ENUM_VALUES,
4457 notes: None,
4458 },
4459 IndicatorParamInfo {
4460 key: "period",
4461 label: "Period",
4462 kind: IndicatorParamKind::Int,
4463 required: false,
4464 default: Some(ParamValueStatic::Int(3)),
4465 min: Some(1.0),
4466 max: None,
4467 step: Some(1.0),
4468 enum_values: EMPTY_ENUM_VALUES,
4469 notes: None,
4470 },
4471 IndicatorParamInfo {
4472 key: "signal_period",
4473 label: "Signal Period",
4474 kind: IndicatorParamKind::Int,
4475 required: false,
4476 default: Some(ParamValueStatic::Int(20)),
4477 min: Some(1.0),
4478 max: None,
4479 step: Some(1.0),
4480 enum_values: EMPTY_ENUM_VALUES,
4481 notes: None,
4482 },
4483 IndicatorParamInfo {
4484 key: "matype",
4485 label: "MA Type",
4486 kind: IndicatorParamKind::EnumString,
4487 required: false,
4488 default: Some(ParamValueStatic::EnumString("ema")),
4489 min: None,
4490 max: None,
4491 step: None,
4492 enum_values: EMPTY_ENUM_VALUES,
4493 notes: None,
4494 },
4495 IndicatorParamInfo {
4496 key: "signal_matype",
4497 label: "Signal MA Type",
4498 kind: IndicatorParamKind::EnumString,
4499 required: false,
4500 default: Some(ParamValueStatic::EnumString("ema")),
4501 min: None,
4502 max: None,
4503 step: None,
4504 enum_values: EMPTY_ENUM_VALUES,
4505 notes: None,
4506 },
4507];
4508
4509const PARAM_VOSS: &[IndicatorParamInfo] = &[
4510 IndicatorParamInfo {
4511 key: "period",
4512 label: "Period",
4513 kind: IndicatorParamKind::Int,
4514 required: false,
4515 default: Some(ParamValueStatic::Int(20)),
4516 min: Some(1.0),
4517 max: None,
4518 step: Some(1.0),
4519 enum_values: EMPTY_ENUM_VALUES,
4520 notes: None,
4521 },
4522 IndicatorParamInfo {
4523 key: "predict",
4524 label: "Predict",
4525 kind: IndicatorParamKind::Int,
4526 required: false,
4527 default: Some(ParamValueStatic::Int(3)),
4528 min: Some(1.0),
4529 max: None,
4530 step: Some(1.0),
4531 enum_values: EMPTY_ENUM_VALUES,
4532 notes: None,
4533 },
4534 IndicatorParamInfo {
4535 key: "bandwidth",
4536 label: "Bandwidth",
4537 kind: IndicatorParamKind::Float,
4538 required: false,
4539 default: Some(ParamValueStatic::Float(0.25)),
4540 min: Some(0.0),
4541 max: None,
4542 step: None,
4543 enum_values: EMPTY_ENUM_VALUES,
4544 notes: None,
4545 },
4546];
4547
4548const PARAM_STC: &[IndicatorParamInfo] = &[
4549 IndicatorParamInfo {
4550 key: "fast_period",
4551 label: "Fast Period",
4552 kind: IndicatorParamKind::Int,
4553 required: false,
4554 default: Some(ParamValueStatic::Int(23)),
4555 min: Some(1.0),
4556 max: None,
4557 step: Some(1.0),
4558 enum_values: EMPTY_ENUM_VALUES,
4559 notes: None,
4560 },
4561 IndicatorParamInfo {
4562 key: "slow_period",
4563 label: "Slow Period",
4564 kind: IndicatorParamKind::Int,
4565 required: false,
4566 default: Some(ParamValueStatic::Int(50)),
4567 min: Some(1.0),
4568 max: None,
4569 step: Some(1.0),
4570 enum_values: EMPTY_ENUM_VALUES,
4571 notes: None,
4572 },
4573 IndicatorParamInfo {
4574 key: "k_period",
4575 label: "K Period",
4576 kind: IndicatorParamKind::Int,
4577 required: false,
4578 default: Some(ParamValueStatic::Int(10)),
4579 min: Some(1.0),
4580 max: None,
4581 step: Some(1.0),
4582 enum_values: EMPTY_ENUM_VALUES,
4583 notes: None,
4584 },
4585 IndicatorParamInfo {
4586 key: "d_period",
4587 label: "D Period",
4588 kind: IndicatorParamKind::Int,
4589 required: false,
4590 default: Some(ParamValueStatic::Int(3)),
4591 min: Some(1.0),
4592 max: None,
4593 step: Some(1.0),
4594 enum_values: EMPTY_ENUM_VALUES,
4595 notes: None,
4596 },
4597];
4598
4599const PARAM_RVI: &[IndicatorParamInfo] = &[
4600 IndicatorParamInfo {
4601 key: "period",
4602 label: "Period",
4603 kind: IndicatorParamKind::Int,
4604 required: false,
4605 default: Some(ParamValueStatic::Int(10)),
4606 min: Some(1.0),
4607 max: None,
4608 step: Some(1.0),
4609 enum_values: EMPTY_ENUM_VALUES,
4610 notes: None,
4611 },
4612 IndicatorParamInfo {
4613 key: "ma_len",
4614 label: "MA Length",
4615 kind: IndicatorParamKind::Int,
4616 required: false,
4617 default: Some(ParamValueStatic::Int(14)),
4618 min: Some(1.0),
4619 max: None,
4620 step: Some(1.0),
4621 enum_values: EMPTY_ENUM_VALUES,
4622 notes: None,
4623 },
4624 IndicatorParamInfo {
4625 key: "matype",
4626 label: "MA Type",
4627 kind: IndicatorParamKind::Int,
4628 required: false,
4629 default: Some(ParamValueStatic::Int(1)),
4630 min: Some(0.0),
4631 max: None,
4632 step: Some(1.0),
4633 enum_values: EMPTY_ENUM_VALUES,
4634 notes: None,
4635 },
4636 IndicatorParamInfo {
4637 key: "devtype",
4638 label: "Deviation Type",
4639 kind: IndicatorParamKind::Int,
4640 required: false,
4641 default: Some(ParamValueStatic::Int(0)),
4642 min: Some(0.0),
4643 max: None,
4644 step: Some(1.0),
4645 enum_values: EMPTY_ENUM_VALUES,
4646 notes: None,
4647 },
4648];
4649
4650const PARAM_COPPOCK: &[IndicatorParamInfo] = &[
4651 IndicatorParamInfo {
4652 key: "short_roc_period",
4653 label: "Short ROC Period",
4654 kind: IndicatorParamKind::Int,
4655 required: false,
4656 default: Some(ParamValueStatic::Int(11)),
4657 min: Some(1.0),
4658 max: None,
4659 step: Some(1.0),
4660 enum_values: EMPTY_ENUM_VALUES,
4661 notes: None,
4662 },
4663 IndicatorParamInfo {
4664 key: "long_roc_period",
4665 label: "Long ROC Period",
4666 kind: IndicatorParamKind::Int,
4667 required: false,
4668 default: Some(ParamValueStatic::Int(14)),
4669 min: Some(1.0),
4670 max: None,
4671 step: Some(1.0),
4672 enum_values: EMPTY_ENUM_VALUES,
4673 notes: None,
4674 },
4675 IndicatorParamInfo {
4676 key: "ma_period",
4677 label: "MA Period",
4678 kind: IndicatorParamKind::Int,
4679 required: false,
4680 default: Some(ParamValueStatic::Int(10)),
4681 min: Some(1.0),
4682 max: None,
4683 step: Some(1.0),
4684 enum_values: EMPTY_ENUM_VALUES,
4685 notes: None,
4686 },
4687];
4688
4689const PARAM_PIVOT: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4690 key: "mode",
4691 label: "Mode",
4692 kind: IndicatorParamKind::Int,
4693 required: false,
4694 default: Some(ParamValueStatic::Int(3)),
4695 min: Some(0.0),
4696 max: None,
4697 step: Some(1.0),
4698 enum_values: EMPTY_ENUM_VALUES,
4699 notes: None,
4700}];
4701
4702const SUPPLEMENTAL_SEED_NOTE: &str =
4703 "Phase 1 seed metadata; parameter and capability metadata will expand.";
4704
4705struct SupplementalIndicatorSeed {
4706 id: &'static str,
4707 label: &'static str,
4708 category: &'static str,
4709 input_kind: IndicatorInputKind,
4710 outputs: &'static [IndicatorOutputInfo],
4711 params: &'static [IndicatorParamInfo],
4712}
4713
4714const SUPPLEMENTAL_INDICATORS: &[SupplementalIndicatorSeed] = &[
4715 SupplementalIndicatorSeed {
4716 id: "adx",
4717 label: "ADX",
4718 category: "trend",
4719 input_kind: IndicatorInputKind::Ohlc,
4720 outputs: OUTPUTS_VALUE_F64,
4721 params: PARAM_ADX_PERIOD,
4722 },
4723 SupplementalIndicatorSeed {
4724 id: "adxr",
4725 label: "ADXR",
4726 category: "trend",
4727 input_kind: IndicatorInputKind::Ohlc,
4728 outputs: OUTPUTS_VALUE_F64,
4729 params: PARAM_ADX_PERIOD,
4730 },
4731 SupplementalIndicatorSeed {
4732 id: "dx",
4733 label: "DX",
4734 category: "trend",
4735 input_kind: IndicatorInputKind::Ohlc,
4736 outputs: OUTPUTS_VALUE_F64,
4737 params: PARAM_DX_PERIOD,
4738 },
4739 SupplementalIndicatorSeed {
4740 id: "di",
4741 label: "DI",
4742 category: "trend",
4743 input_kind: IndicatorInputKind::Ohlc,
4744 outputs: OUTPUTS_PLUS_MINUS,
4745 params: PARAM_DI,
4746 },
4747 SupplementalIndicatorSeed {
4748 id: "dm",
4749 label: "DM",
4750 category: "trend",
4751 input_kind: IndicatorInputKind::HighLow,
4752 outputs: OUTPUTS_PLUS_MINUS,
4753 params: PARAM_DM,
4754 },
4755 SupplementalIndicatorSeed {
4756 id: "vi",
4757 label: "VI",
4758 category: "trend",
4759 input_kind: IndicatorInputKind::Ohlc,
4760 outputs: OUTPUTS_PLUS_MINUS,
4761 params: PARAM_VI,
4762 },
4763 SupplementalIndicatorSeed {
4764 id: "donchian",
4765 label: "Donchian",
4766 category: "volatility",
4767 input_kind: IndicatorInputKind::HighLow,
4768 outputs: OUTPUTS_BOLLINGER,
4769 params: PARAM_DONCHIAN,
4770 },
4771 SupplementalIndicatorSeed {
4772 id: "supertrend",
4773 label: "SuperTrend",
4774 category: "trend",
4775 input_kind: IndicatorInputKind::Ohlc,
4776 outputs: OUTPUTS_TREND_CHANGED,
4777 params: PARAM_SUPERTREND,
4778 },
4779 SupplementalIndicatorSeed {
4780 id: "keltner",
4781 label: "Keltner",
4782 category: "volatility",
4783 input_kind: IndicatorInputKind::Ohlc,
4784 outputs: OUTPUTS_BOLLINGER,
4785 params: PARAM_KELTNER,
4786 },
4787 SupplementalIndicatorSeed {
4788 id: "aroon",
4789 label: "Aroon",
4790 category: "trend",
4791 input_kind: IndicatorInputKind::HighLow,
4792 outputs: OUTPUTS_UP_DOWN,
4793 params: PARAM_AROON,
4794 },
4795 SupplementalIndicatorSeed {
4796 id: "aroonosc",
4797 label: "Aroon Oscillator",
4798 category: "momentum",
4799 input_kind: IndicatorInputKind::HighLow,
4800 outputs: OUTPUTS_VALUE_F64,
4801 params: PARAM_AROON,
4802 },
4803 SupplementalIndicatorSeed {
4804 id: "srsi",
4805 label: "Stochastic RSI",
4806 category: "momentum",
4807 input_kind: IndicatorInputKind::Slice,
4808 outputs: OUTPUTS_STOCH,
4809 params: PARAM_SRSI,
4810 },
4811 SupplementalIndicatorSeed {
4812 id: "kdj",
4813 label: "KDJ",
4814 category: "momentum",
4815 input_kind: IndicatorInputKind::Ohlc,
4816 outputs: OUTPUTS_KDJ,
4817 params: PARAM_KDJ,
4818 },
4819 SupplementalIndicatorSeed {
4820 id: "squeeze_momentum",
4821 label: "Squeeze Momentum",
4822 category: "momentum",
4823 input_kind: IndicatorInputKind::Ohlc,
4824 outputs: OUTPUTS_SQUEEZE_MOMENTUM,
4825 params: PARAM_SQUEEZE_MOMENTUM,
4826 },
4827 SupplementalIndicatorSeed {
4828 id: "wavetrend",
4829 label: "WaveTrend",
4830 category: "momentum",
4831 input_kind: IndicatorInputKind::Slice,
4832 outputs: OUTPUTS_WAVETREND,
4833 params: PARAM_WAVETREND,
4834 },
4835 SupplementalIndicatorSeed {
4836 id: "wto",
4837 label: "WTO",
4838 category: "momentum",
4839 input_kind: IndicatorInputKind::Slice,
4840 outputs: OUTPUTS_WTO,
4841 params: PARAM_WTO,
4842 },
4843 SupplementalIndicatorSeed {
4844 id: "yang_zhang_volatility",
4845 label: "Yang-Zhang Volatility",
4846 category: "volatility",
4847 input_kind: IndicatorInputKind::Ohlc,
4848 outputs: OUTPUTS_YANG_ZHANG,
4849 params: PARAM_YANG_ZHANG,
4850 },
4851 SupplementalIndicatorSeed {
4852 id: "atr",
4853 label: "ATR",
4854 category: "volatility",
4855 input_kind: IndicatorInputKind::Ohlc,
4856 outputs: OUTPUTS_VALUE_F64,
4857 params: PARAM_ATR_PERIOD,
4858 },
4859 SupplementalIndicatorSeed {
4860 id: "ad",
4861 label: "AD",
4862 category: "volume",
4863 input_kind: IndicatorInputKind::Ohlcv,
4864 outputs: OUTPUTS_VALUE_F64,
4865 params: PARAM_NONE,
4866 },
4867 SupplementalIndicatorSeed {
4868 id: "adosc",
4869 label: "ADOSC",
4870 category: "volume",
4871 input_kind: IndicatorInputKind::Ohlcv,
4872 outputs: OUTPUTS_VALUE_F64,
4873 params: PARAM_ADOSC,
4874 },
4875 SupplementalIndicatorSeed {
4876 id: "ao",
4877 label: "AO",
4878 category: "momentum",
4879 input_kind: IndicatorInputKind::HighLow,
4880 outputs: OUTPUTS_VALUE_F64,
4881 params: PARAM_AO,
4882 },
4883 SupplementalIndicatorSeed {
4884 id: "bop",
4885 label: "BOP",
4886 category: "momentum",
4887 input_kind: IndicatorInputKind::Ohlc,
4888 outputs: OUTPUTS_VALUE_F64,
4889 params: PARAM_NONE,
4890 },
4891 SupplementalIndicatorSeed {
4892 id: "emv",
4893 label: "EMV",
4894 category: "volume",
4895 input_kind: IndicatorInputKind::Ohlcv,
4896 outputs: OUTPUTS_VALUE_F64,
4897 params: PARAM_NONE,
4898 },
4899 SupplementalIndicatorSeed {
4900 id: "efi",
4901 label: "EFI",
4902 category: "volume",
4903 input_kind: IndicatorInputKind::CloseVolume,
4904 outputs: OUTPUTS_VALUE_F64,
4905 params: PARAM_EFI_PERIOD,
4906 },
4907 SupplementalIndicatorSeed {
4908 id: "dti",
4909 label: "DTI",
4910 category: "momentum",
4911 input_kind: IndicatorInputKind::HighLow,
4912 outputs: OUTPUTS_VALUE_F64,
4913 params: PARAM_DTI,
4914 },
4915 SupplementalIndicatorSeed {
4916 id: "mfi",
4917 label: "MFI",
4918 category: "volume",
4919 input_kind: IndicatorInputKind::CloseVolume,
4920 outputs: OUTPUTS_VALUE_F64,
4921 params: PARAM_MFI_PERIOD,
4922 },
4923 SupplementalIndicatorSeed {
4924 id: "mass",
4925 label: "MASS",
4926 category: "volatility",
4927 input_kind: IndicatorInputKind::HighLow,
4928 outputs: OUTPUTS_VALUE_F64,
4929 params: PARAM_MASS_PERIOD,
4930 },
4931 SupplementalIndicatorSeed {
4932 id: "kvo",
4933 label: "KVO",
4934 category: "volume",
4935 input_kind: IndicatorInputKind::Ohlcv,
4936 outputs: OUTPUTS_VALUE_F64,
4937 params: PARAM_KVO,
4938 },
4939 SupplementalIndicatorSeed {
4940 id: "vosc",
4941 label: "VOSC",
4942 category: "volume",
4943 input_kind: IndicatorInputKind::Slice,
4944 outputs: OUTPUTS_VALUE_F64,
4945 params: PARAM_VOSC,
4946 },
4947 SupplementalIndicatorSeed {
4948 id: "rsi",
4949 label: "RSI",
4950 category: "momentum",
4951 input_kind: IndicatorInputKind::Slice,
4952 outputs: OUTPUTS_VALUE_F64,
4953 params: PARAM_RSI_PERIOD,
4954 },
4955 SupplementalIndicatorSeed {
4956 id: "rsx",
4957 label: "RSX",
4958 category: "momentum",
4959 input_kind: IndicatorInputKind::Slice,
4960 outputs: OUTPUTS_VALUE_F64,
4961 params: PARAM_RSI_PERIOD,
4962 },
4963 SupplementalIndicatorSeed {
4964 id: "roc",
4965 label: "ROC",
4966 category: "momentum",
4967 input_kind: IndicatorInputKind::Slice,
4968 outputs: OUTPUTS_VALUE_F64,
4969 params: PARAM_ROC_PERIOD,
4970 },
4971 SupplementalIndicatorSeed {
4972 id: "apo",
4973 label: "APO",
4974 category: "momentum",
4975 input_kind: IndicatorInputKind::Slice,
4976 outputs: OUTPUTS_VALUE_F64,
4977 params: PARAM_APO,
4978 },
4979 SupplementalIndicatorSeed {
4980 id: "cci",
4981 label: "CCI",
4982 category: "momentum",
4983 input_kind: IndicatorInputKind::Slice,
4984 outputs: OUTPUTS_VALUE_F64,
4985 params: PARAM_CCI_PERIOD,
4986 },
4987 SupplementalIndicatorSeed {
4988 id: "cci_cycle",
4989 label: "CCI Cycle",
4990 category: "momentum",
4991 input_kind: IndicatorInputKind::Slice,
4992 outputs: OUTPUTS_VALUE_F64,
4993 params: PARAM_CCI_CYCLE,
4994 },
4995 SupplementalIndicatorSeed {
4996 id: "cfo",
4997 label: "CFO",
4998 category: "momentum",
4999 input_kind: IndicatorInputKind::Slice,
5000 outputs: OUTPUTS_VALUE_F64,
5001 params: PARAM_CFO,
5002 },
5003 SupplementalIndicatorSeed {
5004 id: "cg",
5005 label: "CG",
5006 category: "momentum",
5007 input_kind: IndicatorInputKind::Slice,
5008 outputs: OUTPUTS_VALUE_F64,
5009 params: PARAM_CG_PERIOD,
5010 },
5011 SupplementalIndicatorSeed {
5012 id: "er",
5013 label: "ER",
5014 category: "momentum",
5015 input_kind: IndicatorInputKind::Slice,
5016 outputs: OUTPUTS_VALUE_F64,
5017 params: PARAM_ER_PERIOD,
5018 },
5019 SupplementalIndicatorSeed {
5020 id: "kurtosis",
5021 label: "Kurtosis",
5022 category: "statistics",
5023 input_kind: IndicatorInputKind::Slice,
5024 outputs: OUTPUTS_VALUE_F64,
5025 params: PARAM_KURTOSIS_PERIOD,
5026 },
5027 SupplementalIndicatorSeed {
5028 id: "natr",
5029 label: "NATR",
5030 category: "volatility",
5031 input_kind: IndicatorInputKind::Ohlc,
5032 outputs: OUTPUTS_VALUE_F64,
5033 params: PARAM_NATR_PERIOD,
5034 },
5035 SupplementalIndicatorSeed {
5036 id: "mean_ad",
5037 label: "Mean AD",
5038 category: "statistics",
5039 input_kind: IndicatorInputKind::Slice,
5040 outputs: OUTPUTS_VALUE_F64,
5041 params: PARAM_MEAN_AD_PERIOD,
5042 },
5043 SupplementalIndicatorSeed {
5044 id: "medium_ad",
5045 label: "Medium AD",
5046 category: "statistics",
5047 input_kind: IndicatorInputKind::Slice,
5048 outputs: OUTPUTS_VALUE_F64,
5049 params: PARAM_MEDIUM_AD_PERIOD,
5050 },
5051 SupplementalIndicatorSeed {
5052 id: "deviation",
5053 label: "Deviation",
5054 category: "statistics",
5055 input_kind: IndicatorInputKind::Slice,
5056 outputs: OUTPUTS_VALUE_F64,
5057 params: PARAM_DEVIATION,
5058 },
5059 SupplementalIndicatorSeed {
5060 id: "dpo",
5061 label: "DPO",
5062 category: "trend",
5063 input_kind: IndicatorInputKind::Slice,
5064 outputs: OUTPUTS_VALUE_F64,
5065 params: PARAM_DPO_PERIOD,
5066 },
5067 SupplementalIndicatorSeed {
5068 id: "fosc",
5069 label: "FOSC",
5070 category: "momentum",
5071 input_kind: IndicatorInputKind::Slice,
5072 outputs: OUTPUTS_VALUE_F64,
5073 params: PARAM_FOSC_PERIOD,
5074 },
5075 SupplementalIndicatorSeed {
5076 id: "ift_rsi",
5077 label: "IFT RSI",
5078 category: "momentum",
5079 input_kind: IndicatorInputKind::Slice,
5080 outputs: OUTPUTS_VALUE_F64,
5081 params: PARAM_IFT_RSI,
5082 },
5083 SupplementalIndicatorSeed {
5084 id: "linearreg_angle",
5085 label: "Linear Regression Angle",
5086 category: "trend",
5087 input_kind: IndicatorInputKind::Slice,
5088 outputs: OUTPUTS_VALUE_F64,
5089 params: PARAM_LINEARREG_ANGLE_PERIOD,
5090 },
5091 SupplementalIndicatorSeed {
5092 id: "linearreg_intercept",
5093 label: "Linear Regression Intercept",
5094 category: "trend",
5095 input_kind: IndicatorInputKind::Slice,
5096 outputs: OUTPUTS_VALUE_F64,
5097 params: PARAM_LINEARREG_INTERCEPT_PERIOD,
5098 },
5099 SupplementalIndicatorSeed {
5100 id: "linearreg_slope",
5101 label: "Linear Regression Slope",
5102 category: "trend",
5103 input_kind: IndicatorInputKind::Slice,
5104 outputs: OUTPUTS_VALUE_F64,
5105 params: PARAM_LINEARREG_SLOPE_PERIOD,
5106 },
5107 SupplementalIndicatorSeed {
5108 id: "pfe",
5109 label: "PFE",
5110 category: "trend",
5111 input_kind: IndicatorInputKind::Slice,
5112 outputs: OUTPUTS_VALUE_F64,
5113 params: PARAM_PFE,
5114 },
5115 SupplementalIndicatorSeed {
5116 id: "qstick",
5117 label: "QStick",
5118 category: "trend",
5119 input_kind: IndicatorInputKind::Ohlc,
5120 outputs: OUTPUTS_VALUE_F64,
5121 params: PARAM_QSTICK,
5122 },
5123 SupplementalIndicatorSeed {
5124 id: "reverse_rsi",
5125 label: "Reverse RSI",
5126 category: "momentum",
5127 input_kind: IndicatorInputKind::Slice,
5128 outputs: OUTPUTS_VALUE_F64,
5129 params: PARAM_REVERSE_RSI,
5130 },
5131 SupplementalIndicatorSeed {
5132 id: "percentile_nearest_rank",
5133 label: "Percentile Nearest Rank",
5134 category: "statistics",
5135 input_kind: IndicatorInputKind::Slice,
5136 outputs: OUTPUTS_VALUE_F64,
5137 params: PARAM_PERCENTILE_NEAREST_RANK,
5138 },
5139 SupplementalIndicatorSeed {
5140 id: "ui",
5141 label: "UI",
5142 category: "volatility",
5143 input_kind: IndicatorInputKind::Slice,
5144 outputs: OUTPUTS_VALUE_F64,
5145 params: PARAM_UI,
5146 },
5147 SupplementalIndicatorSeed {
5148 id: "zscore",
5149 label: "Zscore",
5150 category: "statistics",
5151 input_kind: IndicatorInputKind::Slice,
5152 outputs: OUTPUTS_VALUE_F64,
5153 params: PARAM_ZSCORE,
5154 },
5155 SupplementalIndicatorSeed {
5156 id: "medprice",
5157 label: "Medprice",
5158 category: "price",
5159 input_kind: IndicatorInputKind::HighLow,
5160 outputs: OUTPUTS_VALUE_F64,
5161 params: PARAM_NONE,
5162 },
5163 SupplementalIndicatorSeed {
5164 id: "midpoint",
5165 label: "Midpoint",
5166 category: "price",
5167 input_kind: IndicatorInputKind::Slice,
5168 outputs: OUTPUTS_VALUE_F64,
5169 params: PARAM_MIDPOINT_PERIOD,
5170 },
5171 SupplementalIndicatorSeed {
5172 id: "midprice",
5173 label: "Midprice",
5174 category: "price",
5175 input_kind: IndicatorInputKind::HighLow,
5176 outputs: OUTPUTS_VALUE_F64,
5177 params: PARAM_MIDPRICE_PERIOD,
5178 },
5179 SupplementalIndicatorSeed {
5180 id: "wclprice",
5181 label: "WCLPRICE",
5182 category: "price",
5183 input_kind: IndicatorInputKind::Ohlc,
5184 outputs: OUTPUTS_VALUE_F64,
5185 params: PARAM_NONE,
5186 },
5187 SupplementalIndicatorSeed {
5188 id: "obv",
5189 label: "OBV",
5190 category: "volume",
5191 input_kind: IndicatorInputKind::CloseVolume,
5192 outputs: OUTPUTS_VALUE_F64,
5193 params: PARAM_NONE,
5194 },
5195 SupplementalIndicatorSeed {
5196 id: "vpt",
5197 label: "VPT",
5198 category: "volume",
5199 input_kind: IndicatorInputKind::CloseVolume,
5200 outputs: OUTPUTS_VALUE_F64,
5201 params: PARAM_NONE,
5202 },
5203 SupplementalIndicatorSeed {
5204 id: "nvi",
5205 label: "NVI",
5206 category: "volume",
5207 input_kind: IndicatorInputKind::CloseVolume,
5208 outputs: OUTPUTS_VALUE_F64,
5209 params: PARAM_NONE,
5210 },
5211 SupplementalIndicatorSeed {
5212 id: "pvi",
5213 label: "PVI",
5214 category: "volume",
5215 input_kind: IndicatorInputKind::CloseVolume,
5216 outputs: OUTPUTS_VALUE_F64,
5217 params: PARAM_PVI,
5218 },
5219 SupplementalIndicatorSeed {
5220 id: "mom",
5221 label: "MOM",
5222 category: "momentum",
5223 input_kind: IndicatorInputKind::Slice,
5224 outputs: OUTPUTS_VALUE_F64,
5225 params: PARAM_MOM_PERIOD,
5226 },
5227 SupplementalIndicatorSeed {
5228 id: "cmo",
5229 label: "CMO",
5230 category: "momentum",
5231 input_kind: IndicatorInputKind::Slice,
5232 outputs: OUTPUTS_VALUE_F64,
5233 params: PARAM_CMO_PERIOD,
5234 },
5235 SupplementalIndicatorSeed {
5236 id: "dec_osc",
5237 label: "Dec Osc",
5238 category: "momentum",
5239 input_kind: IndicatorInputKind::Slice,
5240 outputs: OUTPUTS_VALUE_F64,
5241 params: PARAM_DEC_OSC,
5242 },
5243 SupplementalIndicatorSeed {
5244 id: "lrsi",
5245 label: "LRSI",
5246 category: "momentum",
5247 input_kind: IndicatorInputKind::HighLow,
5248 outputs: OUTPUTS_VALUE_F64,
5249 params: PARAM_LRSI_ALPHA,
5250 },
5251 SupplementalIndicatorSeed {
5252 id: "rocp",
5253 label: "ROCP",
5254 category: "momentum",
5255 input_kind: IndicatorInputKind::Slice,
5256 outputs: OUTPUTS_VALUE_F64,
5257 params: PARAM_ROCP_PERIOD,
5258 },
5259 SupplementalIndicatorSeed {
5260 id: "rocr",
5261 label: "ROCR",
5262 category: "momentum",
5263 input_kind: IndicatorInputKind::Slice,
5264 outputs: OUTPUTS_VALUE_F64,
5265 params: PARAM_ROCR_PERIOD,
5266 },
5267 SupplementalIndicatorSeed {
5268 id: "tsf",
5269 label: "TSF",
5270 category: "trend",
5271 input_kind: IndicatorInputKind::Slice,
5272 outputs: OUTPUTS_VALUE_F64,
5273 params: PARAM_TSF_PERIOD,
5274 },
5275 SupplementalIndicatorSeed {
5276 id: "ppo",
5277 label: "PPO",
5278 category: "momentum",
5279 input_kind: IndicatorInputKind::Slice,
5280 outputs: OUTPUTS_VALUE_F64,
5281 params: PARAM_PPO,
5282 },
5283 SupplementalIndicatorSeed {
5284 id: "trix",
5285 label: "TRIX",
5286 category: "momentum",
5287 input_kind: IndicatorInputKind::Slice,
5288 outputs: OUTPUTS_VALUE_F64,
5289 params: PARAM_TRIX_PERIOD,
5290 },
5291 SupplementalIndicatorSeed {
5292 id: "tsi",
5293 label: "TSI",
5294 category: "momentum",
5295 input_kind: IndicatorInputKind::Slice,
5296 outputs: OUTPUTS_VALUE_F64,
5297 params: PARAM_TSI,
5298 },
5299 SupplementalIndicatorSeed {
5300 id: "stddev",
5301 label: "StdDev",
5302 category: "volatility",
5303 input_kind: IndicatorInputKind::Slice,
5304 outputs: OUTPUTS_VALUE_F64,
5305 params: PARAM_STDDEV,
5306 },
5307 SupplementalIndicatorSeed {
5308 id: "var",
5309 label: "VAR",
5310 category: "volatility",
5311 input_kind: IndicatorInputKind::Slice,
5312 outputs: OUTPUTS_VALUE_F64,
5313 params: PARAM_VAR,
5314 },
5315 SupplementalIndicatorSeed {
5316 id: "willr",
5317 label: "WILLR",
5318 category: "momentum",
5319 input_kind: IndicatorInputKind::Ohlc,
5320 outputs: OUTPUTS_VALUE_F64,
5321 params: PARAM_WILLR_PERIOD,
5322 },
5323 SupplementalIndicatorSeed {
5324 id: "ultosc",
5325 label: "ULTOSC",
5326 category: "momentum",
5327 input_kind: IndicatorInputKind::Ohlc,
5328 outputs: OUTPUTS_VALUE_F64,
5329 params: PARAM_ULTOSC,
5330 },
5331 SupplementalIndicatorSeed {
5332 id: "macd",
5333 label: "MACD",
5334 category: "momentum",
5335 input_kind: IndicatorInputKind::Slice,
5336 outputs: OUTPUTS_MACD,
5337 params: PARAM_MACD,
5338 },
5339 SupplementalIndicatorSeed {
5340 id: "bollinger_bands",
5341 label: "Bollinger Bands",
5342 category: "volatility",
5343 input_kind: IndicatorInputKind::Slice,
5344 outputs: OUTPUTS_BOLLINGER,
5345 params: PARAM_BOLLINGER,
5346 },
5347 SupplementalIndicatorSeed {
5348 id: "bollinger_bands_width",
5349 label: "Bollinger Bands Width",
5350 category: "volatility",
5351 input_kind: IndicatorInputKind::Slice,
5352 outputs: OUTPUTS_VALUE_F64,
5353 params: PARAM_BOLLINGER,
5354 },
5355 SupplementalIndicatorSeed {
5356 id: "stoch",
5357 label: "Stochastic",
5358 category: "momentum",
5359 input_kind: IndicatorInputKind::Ohlc,
5360 outputs: OUTPUTS_STOCH,
5361 params: PARAM_STOCH,
5362 },
5363 SupplementalIndicatorSeed {
5364 id: "stochf",
5365 label: "Fast Stochastic",
5366 category: "momentum",
5367 input_kind: IndicatorInputKind::Ohlc,
5368 outputs: OUTPUTS_STOCH,
5369 params: PARAM_STOCHF,
5370 },
5371 SupplementalIndicatorSeed {
5372 id: "vwmacd",
5373 label: "VWMACD",
5374 category: "volume",
5375 input_kind: IndicatorInputKind::CloseVolume,
5376 outputs: OUTPUTS_MACD,
5377 params: PARAM_VW_MACD,
5378 },
5379 SupplementalIndicatorSeed {
5380 id: "vpci",
5381 label: "VPCI",
5382 category: "volume",
5383 input_kind: IndicatorInputKind::CloseVolume,
5384 outputs: OUTPUTS_VPCI,
5385 params: PARAM_VPCI,
5386 },
5387 SupplementalIndicatorSeed {
5388 id: "ttm_trend",
5389 label: "TTM Trend",
5390 category: "trend",
5391 input_kind: IndicatorInputKind::Ohlc,
5392 outputs: OUTPUTS_VALUE_BOOL,
5393 params: PARAM_TTM_TREND,
5394 },
5395 SupplementalIndicatorSeed {
5396 id: "ttm_squeeze",
5397 label: "TTM Squeeze",
5398 category: "momentum",
5399 input_kind: IndicatorInputKind::Ohlc,
5400 outputs: OUTPUTS_TTM_SQUEEZE,
5401 params: PARAM_TTM_SQUEEZE,
5402 },
5403 SupplementalIndicatorSeed {
5404 id: "acosc",
5405 label: "Acosc",
5406 category: "momentum",
5407 input_kind: IndicatorInputKind::HighLow,
5408 outputs: OUTPUTS_ACOSC,
5409 params: PARAM_ACOSC,
5410 },
5411 SupplementalIndicatorSeed {
5412 id: "alligator",
5413 label: "Alligator",
5414 category: "trend",
5415 input_kind: IndicatorInputKind::Slice,
5416 outputs: OUTPUTS_ALLIGATOR,
5417 params: PARAM_ALLIGATOR,
5418 },
5419 SupplementalIndicatorSeed {
5420 id: "alphatrend",
5421 label: "AlphaTrend",
5422 category: "trend",
5423 input_kind: IndicatorInputKind::Ohlcv,
5424 outputs: OUTPUTS_K1_K2,
5425 params: PARAM_ALPHATREND,
5426 },
5427 SupplementalIndicatorSeed {
5428 id: "aso",
5429 label: "ASO",
5430 category: "momentum",
5431 input_kind: IndicatorInputKind::Ohlc,
5432 outputs: OUTPUTS_BULLS_BEARS,
5433 params: PARAM_ASO,
5434 },
5435 SupplementalIndicatorSeed {
5436 id: "avsl",
5437 label: "AVSL",
5438 category: "trend",
5439 input_kind: IndicatorInputKind::Ohlcv,
5440 outputs: OUTPUTS_VALUE_F64,
5441 params: PARAM_AVSL,
5442 },
5443 SupplementalIndicatorSeed {
5444 id: "bandpass",
5445 label: "BandPass",
5446 category: "cycle",
5447 input_kind: IndicatorInputKind::Slice,
5448 outputs: OUTPUTS_BANDPASS,
5449 params: PARAM_BANDPASS,
5450 },
5451 SupplementalIndicatorSeed {
5452 id: "chande",
5453 label: "Chande",
5454 category: "trend",
5455 input_kind: IndicatorInputKind::Ohlc,
5456 outputs: OUTPUTS_VALUE_F64,
5457 params: PARAM_CHANDE,
5458 },
5459 SupplementalIndicatorSeed {
5460 id: "chandelier_exit",
5461 label: "Chandelier Exit",
5462 category: "trend",
5463 input_kind: IndicatorInputKind::Ohlc,
5464 outputs: OUTPUTS_LONG_SHORT_STOP,
5465 params: PARAM_CHANDELIER_EXIT,
5466 },
5467 SupplementalIndicatorSeed {
5468 id: "cksp",
5469 label: "CKSP",
5470 category: "trend",
5471 input_kind: IndicatorInputKind::Ohlc,
5472 outputs: OUTPUTS_LONG_SHORT_VALUES,
5473 params: PARAM_CKSP,
5474 },
5475 SupplementalIndicatorSeed {
5476 id: "correlation_cycle",
5477 label: "Correlation Cycle",
5478 category: "cycle",
5479 input_kind: IndicatorInputKind::Slice,
5480 outputs: OUTPUTS_CORRELATION_CYCLE,
5481 params: PARAM_CORRELATION_CYCLE,
5482 },
5483 SupplementalIndicatorSeed {
5484 id: "correl_hl",
5485 label: "Correl HL",
5486 category: "statistics",
5487 input_kind: IndicatorInputKind::HighLow,
5488 outputs: OUTPUTS_VALUE_F64,
5489 params: PARAM_CORREL_HL,
5490 },
5491 SupplementalIndicatorSeed {
5492 id: "decycler",
5493 label: "Decycler",
5494 category: "trend",
5495 input_kind: IndicatorInputKind::Slice,
5496 outputs: OUTPUTS_VALUE_F64,
5497 params: PARAM_DECYCLER,
5498 },
5499 SupplementalIndicatorSeed {
5500 id: "damiani_volatmeter",
5501 label: "Damiani Volatmeter",
5502 category: "volatility",
5503 input_kind: IndicatorInputKind::Slice,
5504 outputs: OUTPUTS_VOL_ANTI,
5505 params: PARAM_DAMIANI_VOLATMETER,
5506 },
5507 SupplementalIndicatorSeed {
5508 id: "dvdiqqe",
5509 label: "DVDIQQE",
5510 category: "volume",
5511 input_kind: IndicatorInputKind::Ohlc,
5512 outputs: OUTPUTS_DVDIQQE,
5513 params: PARAM_DVDIQQE,
5514 },
5515 SupplementalIndicatorSeed {
5516 id: "emd",
5517 label: "EMD",
5518 category: "volatility",
5519 input_kind: IndicatorInputKind::Ohlcv,
5520 outputs: OUTPUTS_UPPER_MIDDLE_LOWER_BAND,
5521 params: PARAM_EMD,
5522 },
5523 SupplementalIndicatorSeed {
5524 id: "eri",
5525 label: "ERI",
5526 category: "trend",
5527 input_kind: IndicatorInputKind::Ohlc,
5528 outputs: OUTPUTS_BULL_BEAR,
5529 params: PARAM_ERI,
5530 },
5531 SupplementalIndicatorSeed {
5532 id: "fisher",
5533 label: "Fisher",
5534 category: "momentum",
5535 input_kind: IndicatorInputKind::HighLow,
5536 outputs: OUTPUTS_FISHER,
5537 params: PARAM_FISHER,
5538 },
5539 SupplementalIndicatorSeed {
5540 id: "fvg_trailing_stop",
5541 label: "FVG Trailing Stop",
5542 category: "trend",
5543 input_kind: IndicatorInputKind::Ohlc,
5544 outputs: OUTPUTS_FVG_TS,
5545 params: PARAM_FVG_TRAILING_STOP,
5546 },
5547 SupplementalIndicatorSeed {
5548 id: "gatorosc",
5549 label: "Gator Oscillator",
5550 category: "trend",
5551 input_kind: IndicatorInputKind::Slice,
5552 outputs: OUTPUTS_GATOROSC,
5553 params: PARAM_GATOROSC,
5554 },
5555 SupplementalIndicatorSeed {
5556 id: "halftrend",
5557 label: "HalfTrend",
5558 category: "trend",
5559 input_kind: IndicatorInputKind::Ohlc,
5560 outputs: OUTPUTS_HALFTREND,
5561 params: PARAM_HALFTREND,
5562 },
5563 SupplementalIndicatorSeed {
5564 id: "kst",
5565 label: "KST",
5566 category: "momentum",
5567 input_kind: IndicatorInputKind::Slice,
5568 outputs: OUTPUTS_LINE_SIGNAL,
5569 params: PARAM_KST,
5570 },
5571 SupplementalIndicatorSeed {
5572 id: "kaufmanstop",
5573 label: "Kaufmanstop",
5574 category: "trend",
5575 input_kind: IndicatorInputKind::HighLow,
5576 outputs: OUTPUTS_VALUE_F64,
5577 params: PARAM_KAUFMANSTOP,
5578 },
5579 SupplementalIndicatorSeed {
5580 id: "lpc",
5581 label: "LPC",
5582 category: "cycle",
5583 input_kind: IndicatorInputKind::Ohlc,
5584 outputs: OUTPUTS_FILTER_BANDS,
5585 params: PARAM_LPC,
5586 },
5587 SupplementalIndicatorSeed {
5588 id: "mab",
5589 label: "MAB",
5590 category: "volatility",
5591 input_kind: IndicatorInputKind::Slice,
5592 outputs: OUTPUTS_UPPER_MIDDLE_LOWER_BAND,
5593 params: PARAM_MAB,
5594 },
5595 SupplementalIndicatorSeed {
5596 id: "macz",
5597 label: "MACZ",
5598 category: "momentum",
5599 input_kind: IndicatorInputKind::Slice,
5600 outputs: OUTPUTS_VALUE_F64,
5601 params: PARAM_MACZ,
5602 },
5603 SupplementalIndicatorSeed {
5604 id: "minmax",
5605 label: "MinMax",
5606 category: "pattern",
5607 input_kind: IndicatorInputKind::HighLow,
5608 outputs: OUTPUTS_MINMAX,
5609 params: PARAM_MINMAX,
5610 },
5611 SupplementalIndicatorSeed {
5612 id: "mod_god_mode",
5613 label: "Mod God Mode",
5614 category: "momentum",
5615 input_kind: IndicatorInputKind::Ohlc,
5616 outputs: OUTPUTS_MOD_GOD_MODE,
5617 params: PARAM_MOD_GOD_MODE,
5618 },
5619 SupplementalIndicatorSeed {
5620 id: "pattern_recognition",
5621 label: "Pattern Recognition",
5622 category: "pattern",
5623 input_kind: IndicatorInputKind::Ohlc,
5624 outputs: OUTPUTS_MATRIX_BOOL,
5625 params: PARAM_NONE,
5626 },
5627 SupplementalIndicatorSeed {
5628 id: "msw",
5629 label: "MSW",
5630 category: "cycle",
5631 input_kind: IndicatorInputKind::Slice,
5632 outputs: OUTPUTS_SINE_LEAD,
5633 params: PARAM_MSW,
5634 },
5635 SupplementalIndicatorSeed {
5636 id: "nadaraya_watson_envelope",
5637 label: "Nadaraya Watson Envelope",
5638 category: "volatility",
5639 input_kind: IndicatorInputKind::Slice,
5640 outputs: OUTPUTS_UPPER_LOWER,
5641 params: PARAM_NWE,
5642 },
5643 SupplementalIndicatorSeed {
5644 id: "ott",
5645 label: "OTT",
5646 category: "trend",
5647 input_kind: IndicatorInputKind::Slice,
5648 outputs: OUTPUTS_VALUE_F64,
5649 params: PARAM_OTT,
5650 },
5651 SupplementalIndicatorSeed {
5652 id: "otto",
5653 label: "OTTO",
5654 category: "trend",
5655 input_kind: IndicatorInputKind::Slice,
5656 outputs: OUTPUTS_HOTT_LOTT,
5657 params: PARAM_OTTO,
5658 },
5659 SupplementalIndicatorSeed {
5660 id: "vidya",
5661 label: "VIDYA",
5662 category: "trend",
5663 input_kind: IndicatorInputKind::Slice,
5664 outputs: OUTPUTS_VALUE_F64,
5665 params: PARAM_VIDYA,
5666 },
5667 SupplementalIndicatorSeed {
5668 id: "vlma",
5669 label: "VLMA",
5670 category: "trend",
5671 input_kind: IndicatorInputKind::Slice,
5672 outputs: OUTPUTS_VALUE_F64,
5673 params: PARAM_VLMA,
5674 },
5675 SupplementalIndicatorSeed {
5676 id: "pma",
5677 label: "PMA",
5678 category: "trend",
5679 input_kind: IndicatorInputKind::Slice,
5680 outputs: OUTPUTS_EHLERS_PMA,
5681 params: PARAM_PMA,
5682 },
5683 SupplementalIndicatorSeed {
5684 id: "prb",
5685 label: "PRB",
5686 category: "statistics",
5687 input_kind: IndicatorInputKind::Slice,
5688 outputs: OUTPUTS_PRB,
5689 params: PARAM_PRB,
5690 },
5691 SupplementalIndicatorSeed {
5692 id: "qqe",
5693 label: "QQE",
5694 category: "momentum",
5695 input_kind: IndicatorInputKind::Slice,
5696 outputs: &[OUTPUT_FAST, OUTPUT_SLOW],
5697 params: PARAM_QQE,
5698 },
5699 SupplementalIndicatorSeed {
5700 id: "range_filter",
5701 label: "Range Filter",
5702 category: "volatility",
5703 input_kind: IndicatorInputKind::Slice,
5704 outputs: OUTPUTS_FILTER_BANDS,
5705 params: PARAM_RANGE_FILTER,
5706 },
5707 SupplementalIndicatorSeed {
5708 id: "coppock",
5709 label: "Coppock",
5710 category: "momentum",
5711 input_kind: IndicatorInputKind::Slice,
5712 outputs: OUTPUTS_VALUE_F64,
5713 params: PARAM_COPPOCK,
5714 },
5715 SupplementalIndicatorSeed {
5716 id: "rsmk",
5717 label: "RSMK",
5718 category: "relative_strength",
5719 input_kind: IndicatorInputKind::CloseVolume,
5720 outputs: OUTPUTS_INDICATOR_SIGNAL,
5721 params: PARAM_RSMK,
5722 },
5723 SupplementalIndicatorSeed {
5724 id: "voss",
5725 label: "Voss",
5726 category: "cycle",
5727 input_kind: IndicatorInputKind::Slice,
5728 outputs: OUTPUTS_VOSS,
5729 params: PARAM_VOSS,
5730 },
5731 SupplementalIndicatorSeed {
5732 id: "stc",
5733 label: "STC",
5734 category: "momentum",
5735 input_kind: IndicatorInputKind::Slice,
5736 outputs: OUTPUTS_VALUE_F64,
5737 params: PARAM_STC,
5738 },
5739 SupplementalIndicatorSeed {
5740 id: "rvi",
5741 label: "RVI",
5742 category: "volatility",
5743 input_kind: IndicatorInputKind::Slice,
5744 outputs: OUTPUTS_VALUE_F64,
5745 params: PARAM_RVI,
5746 },
5747 SupplementalIndicatorSeed {
5748 id: "safezonestop",
5749 label: "SafeZoneStop",
5750 category: "trend",
5751 input_kind: IndicatorInputKind::HighLow,
5752 outputs: OUTPUTS_VALUE_F64,
5753 params: PARAM_SAFEZONESTOP,
5754 },
5755 SupplementalIndicatorSeed {
5756 id: "chop",
5757 label: "CHOP",
5758 category: "trend",
5759 input_kind: IndicatorInputKind::Ohlc,
5760 outputs: OUTPUTS_VALUE_F64,
5761 params: PARAM_CHOP,
5762 },
5763 SupplementalIndicatorSeed {
5764 id: "devstop",
5765 label: "DevStop",
5766 category: "trend",
5767 input_kind: IndicatorInputKind::HighLow,
5768 outputs: OUTPUTS_VALUE_F64,
5769 params: PARAM_DEVSTOP,
5770 },
5771 SupplementalIndicatorSeed {
5772 id: "net_myrsi",
5773 label: "NET_MyRSI",
5774 category: "momentum",
5775 input_kind: IndicatorInputKind::Slice,
5776 outputs: OUTPUTS_VALUE_F64,
5777 params: PARAMS_PERIOD_ONLY,
5778 },
5779 SupplementalIndicatorSeed {
5780 id: "wad",
5781 label: "WAD",
5782 category: "volume",
5783 input_kind: IndicatorInputKind::Ohlc,
5784 outputs: OUTPUTS_VALUE_F64,
5785 params: PARAM_NONE,
5786 },
5787 SupplementalIndicatorSeed {
5788 id: "pivot",
5789 label: "Pivot",
5790 category: "price",
5791 input_kind: IndicatorInputKind::Ohlc,
5792 outputs: OUTPUTS_PIVOT,
5793 params: PARAM_PIVOT,
5794 },
5795];
5796
5797fn supplemental_supports_cpu_batch(id: &str) -> bool {
5798 matches!(
5799 id,
5800 "adx"
5801 | "adxr"
5802 | "atr"
5803 | "ad"
5804 | "adosc"
5805 | "ao"
5806 | "dti"
5807 | "dx"
5808 | "di"
5809 | "dm"
5810 | "vi"
5811 | "donchian"
5812 | "supertrend"
5813 | "keltner"
5814 | "aroon"
5815 | "srsi"
5816 | "kdj"
5817 | "squeeze_momentum"
5818 | "wavetrend"
5819 | "wto"
5820 | "yang_zhang_volatility"
5821 | "bop"
5822 | "emv"
5823 | "efi"
5824 | "mfi"
5825 | "mass"
5826 | "kvo"
5827 | "wad"
5828 | "vosc"
5829 | "rvi"
5830 | "coppock"
5831 | "rsi"
5832 | "roc"
5833 | "apo"
5834 | "cci"
5835 | "cci_cycle"
5836 | "cfo"
5837 | "cg"
5838 | "er"
5839 | "kurtosis"
5840 | "natr"
5841 | "net_myrsi"
5842 | "mean_ad"
5843 | "medium_ad"
5844 | "deviation"
5845 | "mod_god_mode"
5846 | "dpo"
5847 | "lrsi"
5848 | "fosc"
5849 | "ift_rsi"
5850 | "linearreg_angle"
5851 | "linearreg_intercept"
5852 | "linearreg_slope"
5853 | "pfe"
5854 | "percentile_nearest_rank"
5855 | "ui"
5856 | "zscore"
5857 | "medprice"
5858 | "midpoint"
5859 | "midprice"
5860 | "wclprice"
5861 | "obv"
5862 | "vpt"
5863 | "nvi"
5864 | "pvi"
5865 | "mom"
5866 | "cmo"
5867 | "rocp"
5868 | "rocr"
5869 | "tsf"
5870 | "ppo"
5871 | "trix"
5872 | "tsi"
5873 | "stddev"
5874 | "var"
5875 | "willr"
5876 | "ultosc"
5877 | "macd"
5878 | "bollinger_bands"
5879 | "bollinger_bands_width"
5880 | "stoch"
5881 | "stochf"
5882 | "vwmacd"
5883 | "stc"
5884 | "vpci"
5885 | "ttm_trend"
5886 | "ttm_squeeze"
5887 | "acosc"
5888 | "alligator"
5889 | "alphatrend"
5890 | "aso"
5891 | "bandpass"
5892 | "chande"
5893 | "chandelier_exit"
5894 | "cksp"
5895 | "coppock"
5896 | "correl_hl"
5897 | "correlation_cycle"
5898 | "chop"
5899 | "damiani_volatmeter"
5900 | "dvdiqqe"
5901 | "emd"
5902 | "eri"
5903 | "fisher"
5904 | "fvg_trailing_stop"
5905 | "gatorosc"
5906 | "halftrend"
5907 | "kst"
5908 | "lpc"
5909 | "mab"
5910 | "macz"
5911 | "minmax"
5912 | "msw"
5913 | "nadaraya_watson_envelope"
5914 | "otto"
5915 | "vidya"
5916 | "vlma"
5917 | "pma"
5918 | "prb"
5919 | "qqe"
5920 | "range_filter"
5921 | "rsmk"
5922 | "safezonestop"
5923 | "devstop"
5924 | "voss"
5925 | "pivot"
5926 )
5927}
5928
5929fn supplemental_supports_cuda_single(id: &str) -> bool {
5930 matches!(id, "pattern_recognition")
5931}
5932
5933fn supplemental_supports_cuda_batch(id: &str) -> bool {
5934 matches!(
5935 id,
5936 "acosc"
5937 | "adosc"
5938 | "adx"
5939 | "adxr"
5940 | "alligator"
5941 | "alphatrend"
5942 | "ao"
5943 | "apo"
5944 | "aroon"
5945 | "aroonosc"
5946 | "aso"
5947 | "atr"
5948 | "avsl"
5949 | "bandpass"
5950 | "bollinger_bands"
5951 | "bollinger_bands_width"
5952 | "bop"
5953 | "cci"
5954 | "cci_cycle"
5955 | "cfo"
5956 | "cg"
5957 | "chande"
5958 | "chandelier_exit"
5959 | "chop"
5960 | "cksp"
5961 | "cmo"
5962 | "coppock"
5963 | "correl_hl"
5964 | "correlation_cycle"
5965 | "cvi"
5966 | "damiani_volatmeter"
5967 | "dec_osc"
5968 | "decycler"
5969 | "deviation"
5970 | "devstop"
5971 | "di"
5972 | "dm"
5973 | "donchian"
5974 | "dpo"
5975 | "dti"
5976 | "dvdiqqe"
5977 | "dx"
5978 | "efi"
5979 | "emd"
5980 | "emv"
5981 | "er"
5982 | "eri"
5983 | "fisher"
5984 | "fosc"
5985 | "fvg_trailing_stop"
5986 | "gatorosc"
5987 | "halftrend"
5988 | "ift_rsi"
5989 | "kaufmanstop"
5990 | "kdj"
5991 | "keltner"
5992 | "kst"
5993 | "kurtosis"
5994 | "kvo"
5995 | "linearreg_angle"
5996 | "linearreg_intercept"
5997 | "linearreg_slope"
5998 | "lpc"
5999 | "lrsi"
6000 | "mab"
6001 | "macd"
6002 | "macz"
6003 | "marketefi"
6004 | "mass"
6005 | "mean_ad"
6006 | "medium_ad"
6007 | "medprice"
6008 | "mfi"
6009 | "minmax"
6010 | "mod_god_mode"
6011 | "mom"
6012 | "msw"
6013 | "nadaraya_watson_envelope"
6014 | "natr"
6015 | "net_myrsi"
6016 | "nvi"
6017 | "obv"
6018 | "ott"
6019 | "otto"
6020 | "percentile_nearest_rank"
6021 | "pfe"
6022 | "pivot"
6023 | "pma"
6024 | "ppo"
6025 | "prb"
6026 | "pvi"
6027 | "qqe"
6028 | "qstick"
6029 | "range_filter"
6030 | "reverse_rsi"
6031 | "roc"
6032 | "rocp"
6033 | "rocr"
6034 | "rsi"
6035 | "rsmk"
6036 | "rsx"
6037 | "rvi"
6038 | "safezonestop"
6039 | "sar"
6040 | "squeeze_momentum"
6041 | "srsi"
6042 | "stc"
6043 | "stddev"
6044 | "stoch"
6045 | "stochf"
6046 | "supertrend"
6047 | "trix"
6048 | "tsf"
6049 | "tsi"
6050 | "ttm_squeeze"
6051 | "ttm_trend"
6052 | "ui"
6053 | "ultosc"
6054 | "var"
6055 | "vi"
6056 | "vidya"
6057 | "vlma"
6058 | "vosc"
6059 | "voss"
6060 | "vpci"
6061 | "vpt"
6062 | "vwmacd"
6063 | "wad"
6064 | "wavetrend"
6065 | "wclprice"
6066 | "willr"
6067 | "wto"
6068 | "yang_zhang_volatility"
6069 | "zscore"
6070 )
6071}
6072
6073fn supplemental_supports_cuda_vram(id: &str) -> bool {
6074 matches!(id, "pattern_recognition") || supplemental_supports_cuda_batch(id)
6075}
6076
6077pub fn is_bucket_b_indicator(id: &str) -> bool {
6078 BUCKET_B_INDICATORS
6079 .iter()
6080 .any(|item| item.eq_ignore_ascii_case(id))
6081}
6082
6083static INDICATOR_REGISTRY: Lazy<Vec<IndicatorInfo>> = Lazy::new(build_registry);
6084static INDICATOR_EXACT_INDEX: Lazy<HashMap<&'static str, usize>> = Lazy::new(|| {
6085 let mut map = HashMap::with_capacity(INDICATOR_REGISTRY.len());
6086 for (idx, info) in INDICATOR_REGISTRY.iter().enumerate() {
6087 map.insert(info.id, idx);
6088 }
6089 map
6090});
6091
6092fn ma_outputs_for(ma_id: &str) -> Vec<IndicatorOutputInfo> {
6093 match ma_id {
6094 "mama" => OUTPUTS_MAMA.to_vec(),
6095 "ehlers_pma" => OUTPUTS_EHLERS_PMA.to_vec(),
6096 "buff_averages" => OUTPUTS_BUFF_AVERAGES.to_vec(),
6097 _ => OUTPUTS_VALUE_F64.to_vec(),
6098 }
6099}
6100
6101fn ma_params_for(ma_id: &str, period_based: bool) -> Vec<IndicatorParamInfo> {
6102 let mut params = Vec::new();
6103 if period_based {
6104 params.push(PARAM_PERIOD);
6105 }
6106 for item in ma_param_schema(ma_id).iter() {
6107 let kind = match item.kind {
6108 MaParamKind::Float => IndicatorParamKind::Float,
6109 MaParamKind::Int => IndicatorParamKind::Int,
6110 };
6111 let default = match kind {
6112 IndicatorParamKind::Float => Some(ParamValueStatic::Float(item.default)),
6113 IndicatorParamKind::Int => Some(ParamValueStatic::Int(item.default as i64)),
6114 IndicatorParamKind::Bool | IndicatorParamKind::EnumString => None,
6115 };
6116 params.push(IndicatorParamInfo {
6117 key: item.key,
6118 label: item.label,
6119 kind,
6120 required: false,
6121 default,
6122 min: item.min,
6123 max: item.max,
6124 step: item.step,
6125 enum_values: EMPTY_ENUM_VALUES,
6126 notes: item.notes,
6127 });
6128 }
6129 match ma_id {
6130 "mama" => params.push(PARAM_OUTPUT_MAMA),
6131 "ehlers_pma" => params.push(PARAM_OUTPUT_EHLERS_PMA),
6132 "buff_averages" => params.push(PARAM_OUTPUT_BUFF_AVERAGES),
6133 "vwap" => params.push(PARAM_ANCHOR),
6134 "volume_adjusted_ma" => params.push(PARAM_STRICT),
6135 _ => {}
6136 }
6137 params
6138}
6139
6140fn build_registry() -> Vec<IndicatorInfo> {
6141 let mut out = Vec::new();
6142
6143 for ma in list_moving_averages().iter() {
6144 out.push(IndicatorInfo {
6145 id: ma.id,
6146 label: ma.label,
6147 category: "moving_averages",
6148 dynamic_strategy_eligible: true,
6149 input_kind: if ma.requires_candles {
6150 IndicatorInputKind::Candles
6151 } else {
6152 IndicatorInputKind::Slice
6153 },
6154 outputs: ma_outputs_for(ma.id),
6155 params: ma_params_for(ma.id, ma.period_based),
6156 capabilities: IndicatorCapabilities {
6157 supports_cpu_single: ma.supports_cpu_single,
6158 supports_cpu_batch: ma.supports_cpu_batch,
6159 supports_cuda_single: ma.supports_cuda_single,
6160 supports_cuda_batch: ma.supports_cuda_sweep,
6161 supports_cuda_vram: ma.supports_cuda_sweep,
6162 },
6163 notes: ma.notes,
6164 });
6165 }
6166
6167 for seed in SUPPLEMENTAL_INDICATORS.iter() {
6168 let info = IndicatorInfo {
6169 id: seed.id,
6170 label: seed.label,
6171 category: seed.category,
6172 dynamic_strategy_eligible: true,
6173 input_kind: seed.input_kind,
6174 outputs: seed.outputs.to_vec(),
6175 params: seed.params.to_vec(),
6176 capabilities: IndicatorCapabilities {
6177 supports_cpu_single: true,
6178 supports_cpu_batch: supplemental_supports_cpu_batch(seed.id),
6179 supports_cuda_single: supplemental_supports_cuda_single(seed.id),
6180 supports_cuda_batch: supplemental_supports_cuda_batch(seed.id),
6181 supports_cuda_vram: supplemental_supports_cuda_vram(seed.id),
6182 },
6183 notes: Some(SUPPLEMENTAL_SEED_NOTE),
6184 };
6185
6186 if let Some(existing) = out
6187 .iter_mut()
6188 .find(|item| item.id.eq_ignore_ascii_case(seed.id))
6189 {
6190 *existing = info;
6191 } else {
6192 out.push(info);
6193 }
6194 }
6195
6196 out.sort_by(|a, b| a.id.cmp(b.id));
6197 out
6198}
6199
6200pub fn list_indicators() -> &'static [IndicatorInfo] {
6201 INDICATOR_REGISTRY.as_slice()
6202}
6203
6204pub fn get_indicator(id: &str) -> Option<&'static IndicatorInfo> {
6205 let indicators = list_indicators();
6206 if let Some(idx) = INDICATOR_EXACT_INDEX.get(id).copied() {
6207 return Some(&indicators[idx]);
6208 }
6209 if let Ok(idx) = indicators.binary_search_by(|info| info.id.cmp(id)) {
6210 return Some(&indicators[idx]);
6211 }
6212 indicators
6213 .iter()
6214 .find(|info| info.id.eq_ignore_ascii_case(id))
6215}
6216
6217pub fn indicator_param_schema(id: &str) -> Option<&'static [IndicatorParamInfo]> {
6218 get_indicator(id).map(|info| info.params.as_slice())
6219}
6220
6221pub fn indicator_output_schema(id: &str) -> Option<&'static [IndicatorOutputInfo]> {
6222 get_indicator(id).map(|info| info.outputs.as_slice())
6223}
6224
6225pub fn indicator_capabilities(id: &str) -> Option<IndicatorCapabilities> {
6226 get_indicator(id).map(|info| info.capabilities)
6227}
6228
6229#[cfg(test)]
6230mod tests {
6231 use super::*;
6232
6233 #[test]
6234 fn registry_is_non_empty() {
6235 assert!(!list_indicators().is_empty());
6236 }
6237
6238 #[test]
6239 fn ids_are_unique_case_insensitive() {
6240 use std::collections::HashSet;
6241 let mut seen = HashSet::new();
6242 for info in list_indicators().iter() {
6243 let lower = info.id.to_ascii_lowercase();
6244 assert!(seen.insert(lower), "duplicate id {}", info.id);
6245 }
6246 }
6247
6248 #[test]
6249 fn all_registered_entries_have_output_schema() {
6250 for info in list_indicators().iter() {
6251 assert!(
6252 !info.outputs.is_empty(),
6253 "indicator {} has no output schema",
6254 info.id
6255 );
6256 }
6257 }
6258
6259 #[test]
6260 fn ma_registry_is_mirrored() {
6261 for ma in list_moving_averages().iter() {
6262 assert!(
6263 get_indicator(ma.id).is_some(),
6264 "missing moving average {} in global registry",
6265 ma.id
6266 );
6267 }
6268 }
6269
6270 #[test]
6271 fn lookup_is_case_insensitive() {
6272 assert!(get_indicator("SMA").is_some());
6273 assert!(get_indicator("sma").is_some());
6274 }
6275
6276 #[test]
6277 fn schema_accessors_work() {
6278 assert!(indicator_output_schema("macd").is_some());
6279 assert!(indicator_param_schema("sma").is_some());
6280 assert!(indicator_capabilities("sma").is_some());
6281 assert!(indicator_output_schema("not_real").is_none());
6282 }
6283
6284 #[test]
6285 fn pattern_recognition_capability_is_registered_as_non_batch() {
6286 let info = get_indicator("pattern_recognition").unwrap();
6287 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
6288 assert_eq!(info.outputs.len(), 1);
6289 assert_eq!(info.outputs[0].id, "matrix");
6290 assert!(info.capabilities.supports_cpu_single);
6291 assert!(!info.capabilities.supports_cpu_batch);
6292 assert!(info.capabilities.supports_cuda_single);
6293 assert!(!info.capabilities.supports_cuda_batch);
6294 assert!(info.capabilities.supports_cuda_vram);
6295 }
6296
6297 #[test]
6298 fn dec_osc_and_rsx_are_registered_for_cuda_batch() {
6299 let dec_osc = get_indicator("dec_osc").unwrap();
6300 assert_eq!(dec_osc.input_kind, IndicatorInputKind::Slice);
6301 assert_eq!(dec_osc.outputs.len(), 1);
6302 assert_eq!(dec_osc.outputs[0].id, "value");
6303 assert!(dec_osc.capabilities.supports_cuda_batch);
6304 assert!(dec_osc.capabilities.supports_cuda_vram);
6305
6306 let rsx = get_indicator("rsx").unwrap();
6307 assert_eq!(rsx.input_kind, IndicatorInputKind::Slice);
6308 assert_eq!(rsx.outputs.len(), 1);
6309 assert_eq!(rsx.outputs[0].id, "value");
6310 assert!(rsx.capabilities.supports_cuda_batch);
6311 assert!(rsx.capabilities.supports_cuda_vram);
6312 }
6313
6314 #[test]
6315 fn chande_is_registered_for_cpu_and_cuda_batch() {
6316 assert!(supplemental_supports_cpu_batch("chande"));
6317 assert!(supplemental_supports_cuda_batch("chande"));
6318 let chande = get_indicator("chande").unwrap();
6319 assert_eq!(chande.input_kind, IndicatorInputKind::Ohlc);
6320 assert_eq!(chande.outputs.len(), 1);
6321 assert_eq!(chande.outputs[0].id, "value");
6322 assert!(chande.capabilities.supports_cpu_batch);
6323 assert!(chande.capabilities.supports_cuda_batch);
6324 assert!(chande.capabilities.supports_cuda_vram);
6325 }
6326
6327 #[test]
6328 fn bucket_b_ma_capabilities_follow_ma_registry() {
6329 let mama = indicator_capabilities("mama").unwrap();
6330 assert!(mama.supports_cpu_batch);
6331 assert!(mama.supports_cuda_batch);
6332 assert!(mama.supports_cuda_vram);
6333
6334 let vwap = indicator_capabilities("vwap").unwrap();
6335 assert!(vwap.supports_cpu_batch);
6336 assert!(vwap.supports_cuda_batch);
6337 assert!(vwap.supports_cuda_vram);
6338 }
6339
6340 #[test]
6341 fn bucket_membership_lookup_is_case_insensitive() {
6342 assert!(is_bucket_b_indicator("MAMA"));
6343 assert!(is_bucket_b_indicator("pivot"));
6344 assert!(!is_bucket_b_indicator("sma"));
6345 assert!(!is_bucket_b_indicator("adx"));
6346 }
6347
6348 #[test]
6349 fn lrsi_is_registered_for_cuda_batch() {
6350 let lrsi = get_indicator("lrsi").unwrap();
6351 assert_eq!(lrsi.input_kind, IndicatorInputKind::HighLow);
6352 assert_eq!(lrsi.outputs.len(), 1);
6353 assert_eq!(lrsi.outputs[0].id, "value");
6354 assert!(lrsi.capabilities.supports_cpu_batch);
6355 assert!(lrsi.capabilities.supports_cuda_batch);
6356 assert!(lrsi.capabilities.supports_cuda_vram);
6357 }
6358}