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 "adaptive_bounds_rsi",
91 "adjustable_ma_alternating_extremities",
92 "alligator",
93 "alphatrend",
94 "aroon",
95 "aso",
96 "bandpass",
97 "bollinger_bands_width",
98 "chande",
99 "chandelier_exit",
100 "cksp",
101 "correlation_cycle",
102 "cyberpunk_value_trend_analyzer",
103 "damiani_volatmeter",
104 "di",
105 "dm",
106 "donchian",
107 "ehlers_adaptive_cg",
108 "adaptive_momentum_oscillator",
109 "dvdiqqe",
110 "emd_trend",
111 "emd",
112 "eri",
113 "evasive_supertrend",
114 "reversal_signals",
115 "fisher",
116 "fvg_positioning_average",
117 "fvg_trailing_stop",
118 "market_structure_trailing_stop",
119 "gatorosc",
120 "halftrend",
121 "hypertrend",
122 "adaptive_schaff_trend_cycle",
123 "smoothed_gaussian_trend_filter",
124 "ict_propulsion_block",
125 "kdj",
126 "keltner",
127 "kst",
128 "lpc",
129 "mab",
130 "macz",
131 "mama",
132 "minmax",
133 "msw",
134 "nadaraya_watson_envelope",
135 "otto",
136 "pma",
137 "prb",
138 "qqe",
139 "qqe_weighted_oscillator",
140 "market_structure_confluence",
141 "range_filtered_trend_signals",
142 "range_oscillator",
143 "volume_weighted_relative_strength_index",
144 "range_filter",
145 "rsmk",
146 "squeeze_momentum",
147 "srsi",
148 "supertrend",
149 "supertrend_oscillator",
150 "vi",
151 "voss",
152 "wavetrend",
153 "wto",
154 "ehlers_pma",
155 "buff_averages",
156 "vwap",
157 "pivot",
158 "normalized_volume_true_range",
159];
160
161const EMPTY_ENUM_VALUES: &[&str] = &[];
162const ENUM_VALUES_TRUE_FALSE: &[&str] = &["true", "false"];
163const ENUM_VALUES_DEMAND_INDEX_MA_TYPE: &[&str] = &["ema", "sma", "wma", "rma"];
164const ENUM_VALUES_EHLERS_LINEAR_EXTRAPOLATION_SIGNAL_MODE: &[&str] = &[
165 "predict_filter_crosses",
166 "predict_middle_crosses",
167 "filter_middle_crosses",
168];
169const ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE: &[&str] = &[
170 "open", "high", "low", "close", "hl2", "hlc3", "ohlc4", "hlcc4",
171];
172const ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_SOURCE: &[&str] = &["volume", "tr", "change", "test"];
173const ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_KERNEL_TYPE: &[&str] =
174 &["gaussian", "epanechnikov", "triangular", "sinc"];
175const ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_CONFIDENCE_ADJUST: &[&str] =
176 &["symmetric", "linear", "none"];
177const ENUM_VALUES_FIBONACCI_TRAILING_STOP_TRIGGER: &[&str] = &["close", "wick"];
178const ENUM_VALUES_FIBONACCI_ENTRY_BANDS_SOURCE: &[&str] = &[
179 "open", "high", "low", "close", "hl2", "hlc3", "ohlc4", "hlcc4",
180];
181const ENUM_VALUES_FIBONACCI_ENTRY_BANDS_TP_AGGRESSIVENESS: &[&str] = &["low", "medium", "high"];
182const ENUM_VALUES_MULTI_LENGTH_STOCHASTIC_AVERAGE_METHOD: &[&str] = &["none", "sma", "tma", "lsma"];
183const ENUM_VALUES_MONOTONICITY_INDEX_MODE: &[&str] = &["complexity", "efficiency"];
184const ENUM_VALUES_MA_OUTPUT: &[&str] = &["mama", "fama"];
185const ENUM_VALUES_PMA_OUTPUT: &[&str] = &["predict", "trigger"];
186const ENUM_VALUES_EHLERS_ADAPTIVE_CG_OUTPUT: &[&str] = &["cg", "trigger"];
187const ENUM_VALUES_ADAPTIVE_MOMENTUM_OSCILLATOR_OUTPUT: &[&str] = &["amo", "ama"];
188const ENUM_VALUES_BUFF_OUTPUT: &[&str] = &["fast", "slow"];
189const ENUM_VALUES_GMMA_TYPE: &[&str] = &["guppy", "super_guppy"];
190const ENUM_VALUES_CANDLE_STRENGTH_OSCILLATOR_MODE: &[&str] = &["bollinger", "donchian"];
191const ENUM_VALUES_N_ORDER_EMA_STYLE: &[&str] = &["ema", "dema", "hema", "tema"];
192const ENUM_VALUES_N_ORDER_EMA_IIR_STYLE: &[&str] =
193 &["all_pole", "impulse_matched", "matched_z", "bilinear"];
194const ENUM_VALUES_FVG_POSITIONING_AVERAGE_LOOKBACK_TYPE: &[&str] = &["Bar Count", "FVG Count"];
195const ENUM_VALUES_MS_TS_RESET_ON: &[&str] = &["CHoCH", "All"];
196const ENUM_VALUES_PRICE_SOURCE: &[&str] = &[
197 "open", "high", "low", "close", "hl2", "hlc3", "ohlc4", "hlcc4",
198];
199const ENUM_VALUES_VDO_SESSION_MODE: &[&str] =
200 &["4_hours", "daily", "weekly", "rolling_bars", "rolling_days"];
201const ENUM_VALUES_VDO_DEVIATION_MODE: &[&str] = &["percent", "absolute", "zscore"];
202const ENUM_VALUES_ICHI_NORMALIZE_MODE: &[&str] = &["all", "window", "disabled"];
203const ENUM_VALUES_STATISTICAL_TRAILING_STOP_BASE_LEVEL: &[&str] =
204 &["level0", "level1", "level2", "level3"];
205const ENUM_VALUES_EDCT3_OUTPUT: &[&str] = &["corrected", "t3"];
206const ENUM_VALUES_NORMALIZED_VOLUME_TRUE_RANGE_OUTPUT: &[&str] = &[
207 "normalized_volume",
208 "normalized_true_range",
209 "baseline",
210 "atr",
211 "average_volume",
212];
213const ENUM_VALUES_MOVING_AVERAGE_CROSS_PROBABILITY_MA_TYPE: &[&str] = &["ema", "sma"];
214const ENUM_VALUES_BULLS_V_BEARS_MA_TYPE: &[&str] = &["ema", "sma", "wma"];
215const ENUM_VALUES_BULLS_V_BEARS_CALCULATION_METHOD: &[&str] = &["normalized", "raw"];
216const ENUM_VALUES_SMOOTH_THEIL_SEN_STAT_STYLE: &[&str] = &["mean", "smooth_median", "median"];
217const ENUM_VALUES_SMOOTH_THEIL_SEN_DEVIATION_STYLE: &[&str] = &["mad", "rmsd"];
218const ENUM_VALUES_PMARP_MA_TYPE: &[&str] = &["sma", "ema", "hma", "rma", "vwma"];
219const ENUM_VALUES_PMARP_LINE_MODE: &[&str] = &["pmar", "pmarp"];
220const ENUM_VALUES_EMD_TREND_SOURCE: &[&str] = &[
221 "open", "high", "low", "close", "oc2", "hl2", "occ3", "hlc3", "ohlc4", "hlcc4",
222];
223const ENUM_VALUES_EMD_TREND_AVG_TYPE: &[&str] =
224 &["SMA", "EMA", "HMA", "DEMA", "TEMA", "RMA", "FRAMA"];
225
226const OUTPUT_VALUE_F64: IndicatorOutputInfo = IndicatorOutputInfo {
227 id: "value",
228 label: "Value",
229 value_type: IndicatorValueType::F64,
230};
231
232const OUTPUT_VALUE_BOOL: IndicatorOutputInfo = IndicatorOutputInfo {
233 id: "value",
234 label: "Value",
235 value_type: IndicatorValueType::Bool,
236};
237
238const OUTPUT_MATRIX: IndicatorOutputInfo = IndicatorOutputInfo {
239 id: "matrix",
240 label: "Matrix",
241 value_type: IndicatorValueType::Bool,
242};
243
244const OUTPUT_MACD: IndicatorOutputInfo = IndicatorOutputInfo {
245 id: "macd",
246 label: "MACD",
247 value_type: IndicatorValueType::F64,
248};
249const OUTPUT_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
250 id: "signal",
251 label: "Signal",
252 value_type: IndicatorValueType::F64,
253};
254const OUTPUT_INDEX: IndicatorOutputInfo = IndicatorOutputInfo {
255 id: "index",
256 label: "Index",
257 value_type: IndicatorValueType::F64,
258};
259const OUTPUT_CUMULATIVE_MEAN: IndicatorOutputInfo = IndicatorOutputInfo {
260 id: "cumulative_mean",
261 label: "Cumulative Mean",
262 value_type: IndicatorValueType::F64,
263};
264const OUTPUT_TRAILING_STOP: IndicatorOutputInfo = IndicatorOutputInfo {
265 id: "trailing_stop",
266 label: "Trailing Stop",
267 value_type: IndicatorValueType::F64,
268};
269const OUTPUT_DIRECTION: IndicatorOutputInfo = IndicatorOutputInfo {
270 id: "direction",
271 label: "Direction",
272 value_type: IndicatorValueType::F64,
273};
274const OUTPUT_UPPER_BOUND: IndicatorOutputInfo = IndicatorOutputInfo {
275 id: "upper_bound",
276 label: "Upper Bound",
277 value_type: IndicatorValueType::F64,
278};
279const OUTPUT_IN_PHASE: IndicatorOutputInfo = IndicatorOutputInfo {
280 id: "in_phase",
281 label: "In Phase",
282 value_type: IndicatorValueType::F64,
283};
284const OUTPUT_LEAD_SERIES: IndicatorOutputInfo = IndicatorOutputInfo {
285 id: "lead",
286 label: "Lead",
287 value_type: IndicatorValueType::F64,
288};
289const OUTPUT_SHORT: IndicatorOutputInfo = IndicatorOutputInfo {
290 id: "short",
291 label: "Short",
292 value_type: IndicatorValueType::F64,
293};
294const OUTPUT_LONG: IndicatorOutputInfo = IndicatorOutputInfo {
295 id: "long",
296 label: "Long",
297 value_type: IndicatorValueType::F64,
298};
299const OUTPUT_CROSSOVER: IndicatorOutputInfo = IndicatorOutputInfo {
300 id: "crossover",
301 label: "Crossover",
302 value_type: IndicatorValueType::F64,
303};
304const OUTPUT_CROSSUNDER: IndicatorOutputInfo = IndicatorOutputInfo {
305 id: "crossunder",
306 label: "Crossunder",
307 value_type: IndicatorValueType::F64,
308};
309const OUTPUT_DEMAND_INDEX: IndicatorOutputInfo = IndicatorOutputInfo {
310 id: "demand_index",
311 label: "Demand Index",
312 value_type: IndicatorValueType::F64,
313};
314const OUTPUT_ZVWAP: IndicatorOutputInfo = IndicatorOutputInfo {
315 id: "zvwap",
316 label: "ZVWAP",
317 value_type: IndicatorValueType::F64,
318};
319const OUTPUT_SUPPORT_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
320 id: "support_signal",
321 label: "Support Signal",
322 value_type: IndicatorValueType::F64,
323};
324const OUTPUT_RESISTANCE_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
325 id: "resistance_signal",
326 label: "Resistance Signal",
327 value_type: IndicatorValueType::F64,
328};
329const OUTPUT_DIFF: IndicatorOutputInfo = IndicatorOutputInfo {
330 id: "diff",
331 label: "DIFF",
332 value_type: IndicatorValueType::F64,
333};
334const OUTPUT_DEA: IndicatorOutputInfo = IndicatorOutputInfo {
335 id: "dea",
336 label: "DEA",
337 value_type: IndicatorValueType::F64,
338};
339const OUTPUT_LINE_CONVERGENCE: IndicatorOutputInfo = IndicatorOutputInfo {
340 id: "line_convergence",
341 label: "Line Convergence",
342 value_type: IndicatorValueType::F64,
343};
344const OUTPUT_BUY_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
345 id: "buy_signal",
346 label: "Buy Signal",
347 value_type: IndicatorValueType::F64,
348};
349const OUTPUT_SELL_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
350 id: "sell_signal",
351 label: "Sell Signal",
352 value_type: IndicatorValueType::F64,
353};
354const OUTPUT_OSCILLATOR: IndicatorOutputInfo = IndicatorOutputInfo {
355 id: "oscillator",
356 label: "Oscillator",
357 value_type: IndicatorValueType::F64,
358};
359const OUTPUT_MAX_PEAK_VALUE: IndicatorOutputInfo = IndicatorOutputInfo {
360 id: "max_peak_value",
361 label: "Max Peak Value",
362 value_type: IndicatorValueType::F64,
363};
364const OUTPUT_MIN_PEAK_VALUE: IndicatorOutputInfo = IndicatorOutputInfo {
365 id: "min_peak_value",
366 label: "Min Peak Value",
367 value_type: IndicatorValueType::F64,
368};
369const OUTPUT_MARKET_EXTREME: IndicatorOutputInfo = IndicatorOutputInfo {
370 id: "market_extreme",
371 label: "Market Extreme",
372 value_type: IndicatorValueType::F64,
373};
374const OUTPUT_REGULAR_BULLISH: IndicatorOutputInfo = IndicatorOutputInfo {
375 id: "regular_bullish",
376 label: "Regular Bullish",
377 value_type: IndicatorValueType::F64,
378};
379const OUTPUT_HIDDEN_BULLISH: IndicatorOutputInfo = IndicatorOutputInfo {
380 id: "hidden_bullish",
381 label: "Hidden Bullish",
382 value_type: IndicatorValueType::F64,
383};
384const OUTPUT_REGULAR_BEARISH: IndicatorOutputInfo = IndicatorOutputInfo {
385 id: "regular_bearish",
386 label: "Regular Bearish",
387 value_type: IndicatorValueType::F64,
388};
389const OUTPUT_HIDDEN_BEARISH: IndicatorOutputInfo = IndicatorOutputInfo {
390 id: "hidden_bearish",
391 label: "Hidden Bearish",
392 value_type: IndicatorValueType::F64,
393};
394const OUTPUT_GO_LONG: IndicatorOutputInfo = IndicatorOutputInfo {
395 id: "go_long",
396 label: "Go Long",
397 value_type: IndicatorValueType::F64,
398};
399const OUTPUT_GO_SHORT: IndicatorOutputInfo = IndicatorOutputInfo {
400 id: "go_short",
401 label: "Go Short",
402 value_type: IndicatorValueType::F64,
403};
404const OUTPUT_DOMINANT_CYCLE: IndicatorOutputInfo = IndicatorOutputInfo {
405 id: "dominant_cycle",
406 label: "Dominant Cycle",
407 value_type: IndicatorValueType::F64,
408};
409const OUTPUT_NORMALIZED_POWER: IndicatorOutputInfo = IndicatorOutputInfo {
410 id: "normalized_power",
411 label: "Normalized Power",
412 value_type: IndicatorValueType::F64,
413};
414const OUTPUT_IMI: IndicatorOutputInfo = IndicatorOutputInfo {
415 id: "imi",
416 label: "IMI",
417 value_type: IndicatorValueType::F64,
418};
419const OUTPUT_UPPER_HIT: IndicatorOutputInfo = IndicatorOutputInfo {
420 id: "upper_hit",
421 label: "Upper Hit",
422 value_type: IndicatorValueType::F64,
423};
424const OUTPUT_LOWER_HIT: IndicatorOutputInfo = IndicatorOutputInfo {
425 id: "lower_hit",
426 label: "Lower Hit",
427 value_type: IndicatorValueType::F64,
428};
429const OUTPUT_HIST: IndicatorOutputInfo = IndicatorOutputInfo {
430 id: "hist",
431 label: "Histogram",
432 value_type: IndicatorValueType::F64,
433};
434const OUTPUT_UPPER: IndicatorOutputInfo = IndicatorOutputInfo {
435 id: "upper",
436 label: "Upper",
437 value_type: IndicatorValueType::F64,
438};
439const OUTPUT_MIDDLE: IndicatorOutputInfo = IndicatorOutputInfo {
440 id: "middle",
441 label: "Middle",
442 value_type: IndicatorValueType::F64,
443};
444const OUTPUT_AVERAGE: IndicatorOutputInfo = IndicatorOutputInfo {
445 id: "average",
446 label: "Average",
447 value_type: IndicatorValueType::F64,
448};
449const OUTPUT_LOWER: IndicatorOutputInfo = IndicatorOutputInfo {
450 id: "lower",
451 label: "Lower",
452 value_type: IndicatorValueType::F64,
453};
454const OUTPUT_K: IndicatorOutputInfo = IndicatorOutputInfo {
455 id: "k",
456 label: "K",
457 value_type: IndicatorValueType::F64,
458};
459const OUTPUT_D: IndicatorOutputInfo = IndicatorOutputInfo {
460 id: "d",
461 label: "D",
462 value_type: IndicatorValueType::F64,
463};
464const OUTPUT_VPCI: IndicatorOutputInfo = IndicatorOutputInfo {
465 id: "vpci",
466 label: "VPCI",
467 value_type: IndicatorValueType::F64,
468};
469const OUTPUT_VPCIS: IndicatorOutputInfo = IndicatorOutputInfo {
470 id: "vpcis",
471 label: "VPCIS",
472 value_type: IndicatorValueType::F64,
473};
474const OUTPUT_MOMENTUM: IndicatorOutputInfo = IndicatorOutputInfo {
475 id: "momentum",
476 label: "Momentum",
477 value_type: IndicatorValueType::F64,
478};
479const OUTPUT_RESERVOIR: IndicatorOutputInfo = IndicatorOutputInfo {
480 id: "reservoir",
481 label: "Reservoir",
482 value_type: IndicatorValueType::F64,
483};
484const OUTPUT_SQUEEZE_ACTIVE: IndicatorOutputInfo = IndicatorOutputInfo {
485 id: "squeeze_active",
486 label: "Squeeze Active",
487 value_type: IndicatorValueType::F64,
488};
489const OUTPUT_SQUEEZE_START: IndicatorOutputInfo = IndicatorOutputInfo {
490 id: "squeeze_start",
491 label: "Squeeze Start",
492 value_type: IndicatorValueType::F64,
493};
494const OUTPUT_RANGE_HIGH: IndicatorOutputInfo = IndicatorOutputInfo {
495 id: "range_high",
496 label: "Range High",
497 value_type: IndicatorValueType::F64,
498};
499const OUTPUT_RANGE_LOW: IndicatorOutputInfo = IndicatorOutputInfo {
500 id: "range_low",
501 label: "Range Low",
502 value_type: IndicatorValueType::F64,
503};
504const OUTPUT_SQUEEZE: IndicatorOutputInfo = IndicatorOutputInfo {
505 id: "squeeze",
506 label: "Squeeze",
507 value_type: IndicatorValueType::F64,
508};
509const OUTPUT_MAMA: IndicatorOutputInfo = IndicatorOutputInfo {
510 id: "mama",
511 label: "MAMA",
512 value_type: IndicatorValueType::F64,
513};
514const OUTPUT_MA: IndicatorOutputInfo = IndicatorOutputInfo {
515 id: "ma",
516 label: "MA",
517 value_type: IndicatorValueType::F64,
518};
519const OUTPUT_FAMA: IndicatorOutputInfo = IndicatorOutputInfo {
520 id: "fama",
521 label: "FAMA",
522 value_type: IndicatorValueType::F64,
523};
524const OUTPUT_PREDICTION: IndicatorOutputInfo = IndicatorOutputInfo {
525 id: "prediction",
526 label: "Prediction",
527 value_type: IndicatorValueType::F64,
528};
529const OUTPUT_PREDICT: IndicatorOutputInfo = IndicatorOutputInfo {
530 id: "predict",
531 label: "Predict",
532 value_type: IndicatorValueType::F64,
533};
534const OUTPUT_FILTER: IndicatorOutputInfo = IndicatorOutputInfo {
535 id: "filter",
536 label: "Filter",
537 value_type: IndicatorValueType::F64,
538};
539const OUTPUT_STATE: IndicatorOutputInfo = IndicatorOutputInfo {
540 id: "state",
541 label: "State",
542 value_type: IndicatorValueType::F64,
543};
544const OUTPUT_TRIGGER: IndicatorOutputInfo = IndicatorOutputInfo {
545 id: "trigger",
546 label: "Trigger",
547 value_type: IndicatorValueType::F64,
548};
549const OUTPUT_CORRECTED: IndicatorOutputInfo = IndicatorOutputInfo {
550 id: "corrected",
551 label: "Corrected",
552 value_type: IndicatorValueType::F64,
553};
554const OUTPUT_T3: IndicatorOutputInfo = IndicatorOutputInfo {
555 id: "t3",
556 label: "T3",
557 value_type: IndicatorValueType::F64,
558};
559const OUTPUT_CYCLE: IndicatorOutputInfo = IndicatorOutputInfo {
560 id: "cycle",
561 label: "Cycle",
562 value_type: IndicatorValueType::F64,
563};
564const OUTPUT_BULL: IndicatorOutputInfo = IndicatorOutputInfo {
565 id: "bull",
566 label: "Bull",
567 value_type: IndicatorValueType::F64,
568};
569const OUTPUT_BEAR: IndicatorOutputInfo = IndicatorOutputInfo {
570 id: "bear",
571 label: "Bear",
572 value_type: IndicatorValueType::F64,
573};
574const OUTPUT_FAST: IndicatorOutputInfo = IndicatorOutputInfo {
575 id: "fast",
576 label: "Fast",
577 value_type: IndicatorValueType::F64,
578};
579const OUTPUT_SLOW: IndicatorOutputInfo = IndicatorOutputInfo {
580 id: "slow",
581 label: "Slow",
582 value_type: IndicatorValueType::F64,
583};
584const OUTPUT_PLUS: IndicatorOutputInfo = IndicatorOutputInfo {
585 id: "plus",
586 label: "Plus",
587 value_type: IndicatorValueType::F64,
588};
589const OUTPUT_MINUS: IndicatorOutputInfo = IndicatorOutputInfo {
590 id: "minus",
591 label: "Minus",
592 value_type: IndicatorValueType::F64,
593};
594const OUTPUT_UP: IndicatorOutputInfo = IndicatorOutputInfo {
595 id: "up",
596 label: "Up",
597 value_type: IndicatorValueType::F64,
598};
599const OUTPUT_DOWN: IndicatorOutputInfo = IndicatorOutputInfo {
600 id: "down",
601 label: "Down",
602 value_type: IndicatorValueType::F64,
603};
604const OUTPUT_LEVEL: IndicatorOutputInfo = IndicatorOutputInfo {
605 id: "level",
606 label: "Level",
607 value_type: IndicatorValueType::F64,
608};
609const OUTPUT_BAND: IndicatorOutputInfo = IndicatorOutputInfo {
610 id: "band",
611 label: "Band",
612 value_type: IndicatorValueType::F64,
613};
614const OUTPUT_ANCHOR_LINE: IndicatorOutputInfo = IndicatorOutputInfo {
615 id: "anchor",
616 label: "Anchor",
617 value_type: IndicatorValueType::F64,
618};
619const OUTPUT_SWITCH_PRICE_LINE: IndicatorOutputInfo = IndicatorOutputInfo {
620 id: "switch_price",
621 label: "Switch Price",
622 value_type: IndicatorValueType::F64,
623};
624const OUTPUT_BIAS: IndicatorOutputInfo = IndicatorOutputInfo {
625 id: "bias",
626 label: "Bias",
627 value_type: IndicatorValueType::F64,
628};
629const OUTPUT_TREND: IndicatorOutputInfo = IndicatorOutputInfo {
630 id: "trend",
631 label: "Trend",
632 value_type: IndicatorValueType::F64,
633};
634const OUTPUT_CHANGED: IndicatorOutputInfo = IndicatorOutputInfo {
635 id: "changed",
636 label: "Changed",
637 value_type: IndicatorValueType::F64,
638};
639const OUTPUT_J: IndicatorOutputInfo = IndicatorOutputInfo {
640 id: "j",
641 label: "J",
642 value_type: IndicatorValueType::F64,
643};
644const OUTPUT_MOMENTUM_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
645 id: "signal",
646 label: "Signal",
647 value_type: IndicatorValueType::F64,
648};
649const OUTPUT_WT1: IndicatorOutputInfo = IndicatorOutputInfo {
650 id: "wt1",
651 label: "WT1",
652 value_type: IndicatorValueType::F64,
653};
654const OUTPUT_WT2: IndicatorOutputInfo = IndicatorOutputInfo {
655 id: "wt2",
656 label: "WT2",
657 value_type: IndicatorValueType::F64,
658};
659const OUTPUT_WT_DIFF: IndicatorOutputInfo = IndicatorOutputInfo {
660 id: "wt_diff",
661 label: "WT Diff",
662 value_type: IndicatorValueType::F64,
663};
664const OUTPUT_WAVETREND1: IndicatorOutputInfo = IndicatorOutputInfo {
665 id: "wavetrend1",
666 label: "WaveTrend 1",
667 value_type: IndicatorValueType::F64,
668};
669const OUTPUT_WAVETREND2: IndicatorOutputInfo = IndicatorOutputInfo {
670 id: "wavetrend2",
671 label: "WaveTrend 2",
672 value_type: IndicatorValueType::F64,
673};
674const OUTPUT_WAVETREND: IndicatorOutputInfo = IndicatorOutputInfo {
675 id: "wavetrend",
676 label: "WaveTrend",
677 value_type: IndicatorValueType::F64,
678};
679const OUTPUT_HISTOGRAM: IndicatorOutputInfo = IndicatorOutputInfo {
680 id: "histogram",
681 label: "Histogram",
682 value_type: IndicatorValueType::F64,
683};
684const OUTPUT_YZ: IndicatorOutputInfo = IndicatorOutputInfo {
685 id: "yz",
686 label: "YZ",
687 value_type: IndicatorValueType::F64,
688};
689const OUTPUT_HVR: IndicatorOutputInfo = IndicatorOutputInfo {
690 id: "hvr",
691 label: "HVR",
692 value_type: IndicatorValueType::F64,
693};
694const OUTPUT_HV: IndicatorOutputInfo = IndicatorOutputInfo {
695 id: "hv",
696 label: "HV",
697 value_type: IndicatorValueType::F64,
698};
699const OUTPUT_RS: IndicatorOutputInfo = IndicatorOutputInfo {
700 id: "rs",
701 label: "RS",
702 value_type: IndicatorValueType::F64,
703};
704const OUTPUT_ESTIMATE: IndicatorOutputInfo = IndicatorOutputInfo {
705 id: "estimate",
706 label: "Estimate",
707 value_type: IndicatorValueType::F64,
708};
709const OUTPUT_EXPECTED_VALUE: IndicatorOutputInfo = IndicatorOutputInfo {
710 id: "expected_value",
711 label: "Expected Value",
712 value_type: IndicatorValueType::F64,
713};
714const OUTPUT_ZERO_CROSS_UP: IndicatorOutputInfo = IndicatorOutputInfo {
715 id: "zero_cross_up",
716 label: "Zero Cross Up",
717 value_type: IndicatorValueType::F64,
718};
719const OUTPUT_ZERO_CROSS_DOWN: IndicatorOutputInfo = IndicatorOutputInfo {
720 id: "zero_cross_down",
721 label: "Zero Cross Down",
722 value_type: IndicatorValueType::F64,
723};
724const OUTPUT_EXTREMITY: IndicatorOutputInfo = IndicatorOutputInfo {
725 id: "extremity",
726 label: "Extremity",
727 value_type: IndicatorValueType::F64,
728};
729const OUTPUT_SMOOTHED_OPEN: IndicatorOutputInfo = IndicatorOutputInfo {
730 id: "smoothed_open",
731 label: "Smoothed Open",
732 value_type: IndicatorValueType::F64,
733};
734const OUTPUT_SMOOTHED_HIGH: IndicatorOutputInfo = IndicatorOutputInfo {
735 id: "smoothed_high",
736 label: "Smoothed High",
737 value_type: IndicatorValueType::F64,
738};
739const OUTPUT_SMOOTHED_LOW: IndicatorOutputInfo = IndicatorOutputInfo {
740 id: "smoothed_low",
741 label: "Smoothed Low",
742 value_type: IndicatorValueType::F64,
743};
744const OUTPUT_SMOOTHED_CLOSE: IndicatorOutputInfo = IndicatorOutputInfo {
745 id: "smoothed_close",
746 label: "Smoothed Close",
747 value_type: IndicatorValueType::F64,
748};
749const OUTPUT_RSI_LINE: IndicatorOutputInfo = IndicatorOutputInfo {
750 id: "rsi",
751 label: "RSI",
752 value_type: IndicatorValueType::F64,
753};
754const OUTPUT_LOWER_MID: IndicatorOutputInfo = IndicatorOutputInfo {
755 id: "lower_mid",
756 label: "Lower Mid",
757 value_type: IndicatorValueType::F64,
758};
759const OUTPUT_UPPER_MID: IndicatorOutputInfo = IndicatorOutputInfo {
760 id: "upper_mid",
761 label: "Upper Mid",
762 value_type: IndicatorValueType::F64,
763};
764const OUTPUT_REGIME: IndicatorOutputInfo = IndicatorOutputInfo {
765 id: "regime",
766 label: "Regime",
767 value_type: IndicatorValueType::F64,
768};
769const OUTPUT_REGIME_FLIP: IndicatorOutputInfo = IndicatorOutputInfo {
770 id: "regime_flip",
771 label: "Regime Flip",
772 value_type: IndicatorValueType::F64,
773};
774const OUTPUT_LOWER_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
775 id: "lower_signal",
776 label: "Lower Signal",
777 value_type: IndicatorValueType::F64,
778};
779const OUTPUT_UPPER_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
780 id: "upper_signal",
781 label: "Upper Signal",
782 value_type: IndicatorValueType::F64,
783};
784const OUTPUT_FORWARD_BACKWARD: IndicatorOutputInfo = IndicatorOutputInfo {
785 id: "forward_backward",
786 label: "Forward Backward",
787 value_type: IndicatorValueType::F64,
788};
789const OUTPUT_BACKWARD_LINE: IndicatorOutputInfo = IndicatorOutputInfo {
790 id: "backward",
791 label: "Backward",
792 value_type: IndicatorValueType::F64,
793};
794const OUTPUT_SLOPE: IndicatorOutputInfo = IndicatorOutputInfo {
795 id: "slope",
796 label: "Slope",
797 value_type: IndicatorValueType::F64,
798};
799const OUTPUT_INTERCEPT: IndicatorOutputInfo = IndicatorOutputInfo {
800 id: "intercept",
801 label: "Intercept",
802 value_type: IndicatorValueType::F64,
803};
804const OUTPUT_DEVIATION: IndicatorOutputInfo = IndicatorOutputInfo {
805 id: "deviation",
806 label: "Deviation",
807 value_type: IndicatorValueType::F64,
808};
809const OUTPUT_BULLISH_REVERSAL: IndicatorOutputInfo = IndicatorOutputInfo {
810 id: "bullish_reversal",
811 label: "Bullish Reversal",
812 value_type: IndicatorValueType::F64,
813};
814const OUTPUT_BEARISH_REVERSAL: IndicatorOutputInfo = IndicatorOutputInfo {
815 id: "bearish_reversal",
816 label: "Bearish Reversal",
817 value_type: IndicatorValueType::F64,
818};
819const OUTPUT_NORMALIZED_VOLUME: IndicatorOutputInfo = IndicatorOutputInfo {
820 id: "normalized_volume",
821 label: "Normalized Volume",
822 value_type: IndicatorValueType::F64,
823};
824const OUTPUT_NORMALIZED_TRUE_RANGE: IndicatorOutputInfo = IndicatorOutputInfo {
825 id: "normalized_true_range",
826 label: "Normalized True Range",
827 value_type: IndicatorValueType::F64,
828};
829const OUTPUT_BASELINE: IndicatorOutputInfo = IndicatorOutputInfo {
830 id: "baseline",
831 label: "Baseline",
832 value_type: IndicatorValueType::F64,
833};
834const OUTPUT_ATR_LINE: IndicatorOutputInfo = IndicatorOutputInfo {
835 id: "atr",
836 label: "ATR",
837 value_type: IndicatorValueType::F64,
838};
839const OUTPUT_AVERAGE_VOLUME: IndicatorOutputInfo = IndicatorOutputInfo {
840 id: "average_volume",
841 label: "Average Volume",
842 value_type: IndicatorValueType::F64,
843};
844const OUTPUT_CG: IndicatorOutputInfo = IndicatorOutputInfo {
845 id: "cg",
846 label: "CG",
847 value_type: IndicatorValueType::F64,
848};
849const OUTPUT_AMO: IndicatorOutputInfo = IndicatorOutputInfo {
850 id: "amo",
851 label: "AMO",
852 value_type: IndicatorValueType::F64,
853};
854const OUTPUT_AMA: IndicatorOutputInfo = IndicatorOutputInfo {
855 id: "ama",
856 label: "AMA",
857 value_type: IndicatorValueType::F64,
858};
859const OUTPUT_RANGE_TOP: IndicatorOutputInfo = IndicatorOutputInfo {
860 id: "range_top",
861 label: "Range Top",
862 value_type: IndicatorValueType::F64,
863};
864const OUTPUT_RANGE_BOTTOM: IndicatorOutputInfo = IndicatorOutputInfo {
865 id: "range_bottom",
866 label: "Range Bottom",
867 value_type: IndicatorValueType::F64,
868};
869const OUTPUT_BULLISH: IndicatorOutputInfo = IndicatorOutputInfo {
870 id: "bullish",
871 label: "Bullish",
872 value_type: IndicatorValueType::F64,
873};
874const OUTPUT_EXTRA_BULLISH: IndicatorOutputInfo = IndicatorOutputInfo {
875 id: "extra_bullish",
876 label: "Extra Bullish",
877 value_type: IndicatorValueType::F64,
878};
879const OUTPUT_BEARISH: IndicatorOutputInfo = IndicatorOutputInfo {
880 id: "bearish",
881 label: "Bearish",
882 value_type: IndicatorValueType::F64,
883};
884const OUTPUT_EXTRA_BEARISH: IndicatorOutputInfo = IndicatorOutputInfo {
885 id: "extra_bearish",
886 label: "Extra Bearish",
887 value_type: IndicatorValueType::F64,
888};
889const OUTPUT_UPTREND_BASE: IndicatorOutputInfo = IndicatorOutputInfo {
890 id: "uptrend_base",
891 label: "Uptrend Base",
892 value_type: IndicatorValueType::F64,
893};
894const OUTPUT_DOWNTREND_BASE: IndicatorOutputInfo = IndicatorOutputInfo {
895 id: "downtrend_base",
896 label: "Downtrend Base",
897 value_type: IndicatorValueType::F64,
898};
899const OUTPUT_UPTREND_EXTENSION: IndicatorOutputInfo = IndicatorOutputInfo {
900 id: "uptrend_extension",
901 label: "Uptrend Extension",
902 value_type: IndicatorValueType::F64,
903};
904const OUTPUT_DOWNTREND_EXTENSION: IndicatorOutputInfo = IndicatorOutputInfo {
905 id: "downtrend_extension",
906 label: "Downtrend Extension",
907 value_type: IndicatorValueType::F64,
908};
909const OUTPUT_BULLISH_CHANGE: IndicatorOutputInfo = IndicatorOutputInfo {
910 id: "bullish_change",
911 label: "Bullish Change",
912 value_type: IndicatorValueType::F64,
913};
914const OUTPUT_BEARISH_CHANGE: IndicatorOutputInfo = IndicatorOutputInfo {
915 id: "bearish_change",
916 label: "Bearish Change",
917 value_type: IndicatorValueType::F64,
918};
919const OUTPUT_VOLATILITY: IndicatorOutputInfo = IndicatorOutputInfo {
920 id: "volatility",
921 label: "Volatility",
922 value_type: IndicatorValueType::F64,
923};
924const OUTPUT_VARIANCE: IndicatorOutputInfo = IndicatorOutputInfo {
925 id: "variance",
926 label: "Variance",
927 value_type: IndicatorValueType::F64,
928};
929const OUTPUT_TMF: IndicatorOutputInfo = IndicatorOutputInfo {
930 id: "tmf",
931 label: "TMF",
932 value_type: IndicatorValueType::F64,
933};
934const OUTPUT_SMOOTHED: IndicatorOutputInfo = IndicatorOutputInfo {
935 id: "smoothed",
936 label: "Smoothed",
937 value_type: IndicatorValueType::F64,
938};
939const OUTPUT_HVP: IndicatorOutputInfo = IndicatorOutputInfo {
940 id: "hvp",
941 label: "HVP",
942 value_type: IndicatorValueType::F64,
943};
944const OUTPUT_HVP_SMA: IndicatorOutputInfo = IndicatorOutputInfo {
945 id: "hvp_sma",
946 label: "HVP SMA",
947 value_type: IndicatorValueType::F64,
948};
949const OUTPUT_EDF: IndicatorOutputInfo = IndicatorOutputInfo {
950 id: "edf",
951 label: "EDF",
952 value_type: IndicatorValueType::F64,
953};
954const OUTPUT_KBW: IndicatorOutputInfo = IndicatorOutputInfo {
955 id: "kbw",
956 label: "KBW",
957 value_type: IndicatorValueType::F64,
958};
959const OUTPUT_KBW_SMA: IndicatorOutputInfo = IndicatorOutputInfo {
960 id: "kbw_sma",
961 label: "KBW SMA",
962 value_type: IndicatorValueType::F64,
963};
964const OUTPUT_MMI: IndicatorOutputInfo = IndicatorOutputInfo {
965 id: "mmi",
966 label: "MMI",
967 value_type: IndicatorValueType::F64,
968};
969const OUTPUT_MMI_SMOOTHED: IndicatorOutputInfo = IndicatorOutputInfo {
970 id: "mmi_smoothed",
971 label: "MMI Smoothed",
972 value_type: IndicatorValueType::F64,
973};
974const OUTPUT_PRICE_DENSITY: IndicatorOutputInfo = IndicatorOutputInfo {
975 id: "price_density",
976 label: "Price Density",
977 value_type: IndicatorValueType::F64,
978};
979const OUTPUT_PRICE_DENSITY_PERCENT: IndicatorOutputInfo = IndicatorOutputInfo {
980 id: "price_density_percent",
981 label: "Price Density Percent",
982 value_type: IndicatorValueType::F64,
983};
984const OUTPUT_IMPULSE_MACD: IndicatorOutputInfo = IndicatorOutputInfo {
985 id: "impulse_macd",
986 label: "Impulse MACD",
987 value_type: IndicatorValueType::F64,
988};
989const OUTPUT_MOMENTUM_RATIO_OSCILLATOR: IndicatorOutputInfo = IndicatorOutputInfo {
990 id: "line",
991 label: "Line",
992 value_type: IndicatorValueType::F64,
993};
994const OUTPUT_SUPERTREND_OSCILLATOR: IndicatorOutputInfo = IndicatorOutputInfo {
995 id: "oscillator",
996 label: "Oscillator",
997 value_type: IndicatorValueType::F64,
998};
999const OUTPUT_CONV_ACCELERATION: IndicatorOutputInfo = IndicatorOutputInfo {
1000 id: "conv_acceleration",
1001 label: "Convolution Acceleration",
1002 value_type: IndicatorValueType::F64,
1003};
1004const OUTPUT_PLUS_TCF: IndicatorOutputInfo = IndicatorOutputInfo {
1005 id: "plus_tcf",
1006 label: "Plus TCF",
1007 value_type: IndicatorValueType::F64,
1008};
1009const OUTPUT_MINUS_TCF: IndicatorOutputInfo = IndicatorOutputInfo {
1010 id: "minus_tcf",
1011 label: "Minus TCF",
1012 value_type: IndicatorValueType::F64,
1013};
1014const OUTPUT_VQI_SUM: IndicatorOutputInfo = IndicatorOutputInfo {
1015 id: "vqi_sum",
1016 label: "VQI Sum",
1017 value_type: IndicatorValueType::F64,
1018};
1019const OUTPUT_FAST_SMA: IndicatorOutputInfo = IndicatorOutputInfo {
1020 id: "fast_sma",
1021 label: "Fast SMA",
1022 value_type: IndicatorValueType::F64,
1023};
1024const OUTPUT_SLOW_SMA: IndicatorOutputInfo = IndicatorOutputInfo {
1025 id: "slow_sma",
1026 label: "Slow SMA",
1027 value_type: IndicatorValueType::F64,
1028};
1029const OUTPUT_EMA: IndicatorOutputInfo = IndicatorOutputInfo {
1030 id: "ema",
1031 label: "EMA",
1032 value_type: IndicatorValueType::F64,
1033};
1034const OUTPUT_FORECAST: IndicatorOutputInfo = IndicatorOutputInfo {
1035 id: "forecast",
1036 label: "Forecast",
1037 value_type: IndicatorValueType::F64,
1038};
1039const OUTPUT_BULLISH_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
1040 id: "bullish_signal",
1041 label: "Bullish Signal",
1042 value_type: IndicatorValueType::F64,
1043};
1044const OUTPUT_BEARISH_SIGNAL: IndicatorOutputInfo = IndicatorOutputInfo {
1045 id: "bearish_signal",
1046 label: "Bearish Signal",
1047 value_type: IndicatorValueType::F64,
1048};
1049
1050const OUTPUTS_VALUE_F64: &[IndicatorOutputInfo] = &[OUTPUT_VALUE_F64];
1051const OUTPUTS_VALUE_BOOL: &[IndicatorOutputInfo] = &[OUTPUT_VALUE_BOOL];
1052const OUTPUTS_MATRIX_BOOL: &[IndicatorOutputInfo] = &[OUTPUT_MATRIX];
1053const OUTPUTS_MACD: &[IndicatorOutputInfo] = &[OUTPUT_MACD, OUTPUT_SIGNAL, OUTPUT_HIST];
1054const OUTPUTS_BOLLINGER: &[IndicatorOutputInfo] = &[OUTPUT_UPPER, OUTPUT_MIDDLE, OUTPUT_LOWER];
1055const OUTPUTS_STOCH: &[IndicatorOutputInfo] = &[OUTPUT_K, OUTPUT_D];
1056const OUTPUTS_VPCI: &[IndicatorOutputInfo] = &[OUTPUT_VPCI, OUTPUT_VPCIS];
1057const OUTPUTS_TTM_SQUEEZE: &[IndicatorOutputInfo] = &[OUTPUT_MOMENTUM, OUTPUT_SQUEEZE];
1058const OUTPUTS_MAMA: &[IndicatorOutputInfo] = &[OUTPUT_MAMA, OUTPUT_FAMA];
1059const OUTPUTS_EHLERS_PMA: &[IndicatorOutputInfo] = &[OUTPUT_PREDICT, OUTPUT_TRIGGER];
1060const OUTPUTS_EHLERS_ADAPTIVE_CG: &[IndicatorOutputInfo] = &[OUTPUT_CG, OUTPUT_TRIGGER];
1061const OUTPUTS_ADAPTIVE_MOMENTUM_OSCILLATOR: &[IndicatorOutputInfo] = &[OUTPUT_AMO, OUTPUT_AMA];
1062const OUTPUTS_BUFF_AVERAGES: &[IndicatorOutputInfo] = &[OUTPUT_FAST, OUTPUT_SLOW];
1063const OUTPUTS_EDCT3: &[IndicatorOutputInfo] = &[OUTPUT_CORRECTED, OUTPUT_T3];
1064const OUTPUTS_PLUS_MINUS: &[IndicatorOutputInfo] = &[OUTPUT_PLUS, OUTPUT_MINUS];
1065const OUTPUTS_UP_DOWN: &[IndicatorOutputInfo] = &[OUTPUT_UP, OUTPUT_DOWN];
1066const OUTPUTS_STATISTICAL_TRAILING_STOP: &[IndicatorOutputInfo] = &[
1067 OUTPUT_LEVEL,
1068 OUTPUT_ANCHOR_LINE,
1069 OUTPUT_BIAS,
1070 OUTPUT_CHANGED,
1071];
1072const OUTPUTS_SUPERTREND_RECOVERY: &[IndicatorOutputInfo] = &[
1073 OUTPUT_BAND,
1074 OUTPUT_SWITCH_PRICE_LINE,
1075 OUTPUT_TREND,
1076 OUTPUT_CHANGED,
1077];
1078const OUTPUTS_RANGE_BREAKOUT_SIGNALS: &[IndicatorOutputInfo] = &[
1079 OUTPUT_RANGE_TOP,
1080 OUTPUT_RANGE_BOTTOM,
1081 OUTPUT_BULLISH,
1082 OUTPUT_EXTRA_BULLISH,
1083 OUTPUT_BEARISH,
1084 OUTPUT_EXTRA_BEARISH,
1085];
1086const OUTPUTS_EXPONENTIAL_TREND: &[IndicatorOutputInfo] = &[
1087 OUTPUT_UPTREND_BASE,
1088 OUTPUT_DOWNTREND_BASE,
1089 OUTPUT_UPTREND_EXTENSION,
1090 OUTPUT_DOWNTREND_EXTENSION,
1091 OUTPUT_BULLISH_CHANGE,
1092 OUTPUT_BEARISH_CHANGE,
1093];
1094const OUTPUT_ALPHA_TRAIL: IndicatorOutputInfo = IndicatorOutputInfo {
1095 id: "alpha_trail",
1096 label: "AlphaTrail",
1097 value_type: IndicatorValueType::F64,
1098};
1099const OUTPUT_ALPHA_TRAIL_BULLISH: IndicatorOutputInfo = IndicatorOutputInfo {
1100 id: "alpha_trail_bullish",
1101 label: "AlphaTrail Bullish",
1102 value_type: IndicatorValueType::F64,
1103};
1104const OUTPUT_ALPHA_TRAIL_BEARISH: IndicatorOutputInfo = IndicatorOutputInfo {
1105 id: "alpha_trail_bearish",
1106 label: "AlphaTrail Bearish",
1107 value_type: IndicatorValueType::F64,
1108};
1109const OUTPUT_ALPHA_DIR: IndicatorOutputInfo = IndicatorOutputInfo {
1110 id: "alpha_dir",
1111 label: "AlphaTrail Direction",
1112 value_type: IndicatorValueType::F64,
1113};
1114const OUTPUT_MFI: IndicatorOutputInfo = IndicatorOutputInfo {
1115 id: "mfi",
1116 label: "Money Flow Index",
1117 value_type: IndicatorValueType::F64,
1118};
1119const OUTPUT_TP_UPPER: IndicatorOutputInfo = IndicatorOutputInfo {
1120 id: "tp_upper",
1121 label: "TP Upper",
1122 value_type: IndicatorValueType::F64,
1123};
1124const OUTPUT_TP_LOWER: IndicatorOutputInfo = IndicatorOutputInfo {
1125 id: "tp_lower",
1126 label: "TP Lower",
1127 value_type: IndicatorValueType::F64,
1128};
1129const OUTPUT_ALPHA_TRAIL_BULLISH_SWITCH: IndicatorOutputInfo = IndicatorOutputInfo {
1130 id: "alpha_trail_bullish_switch",
1131 label: "AlphaTrail Bullish Switch",
1132 value_type: IndicatorValueType::F64,
1133};
1134const OUTPUT_ALPHA_TRAIL_BEARISH_SWITCH: IndicatorOutputInfo = IndicatorOutputInfo {
1135 id: "alpha_trail_bearish_switch",
1136 label: "AlphaTrail Bearish Switch",
1137 value_type: IndicatorValueType::F64,
1138};
1139const OUTPUT_MFI_OVERBOUGHT: IndicatorOutputInfo = IndicatorOutputInfo {
1140 id: "mfi_overbought",
1141 label: "MFI Overbought",
1142 value_type: IndicatorValueType::F64,
1143};
1144const OUTPUT_MFI_OVERSOLD: IndicatorOutputInfo = IndicatorOutputInfo {
1145 id: "mfi_oversold",
1146 label: "MFI Oversold",
1147 value_type: IndicatorValueType::F64,
1148};
1149const OUTPUT_MFI_CROSS_UP_MID: IndicatorOutputInfo = IndicatorOutputInfo {
1150 id: "mfi_cross_up_mid",
1151 label: "MFI Cross Up Mid",
1152 value_type: IndicatorValueType::F64,
1153};
1154const OUTPUT_MFI_CROSS_DOWN_MID: IndicatorOutputInfo = IndicatorOutputInfo {
1155 id: "mfi_cross_down_mid",
1156 label: "MFI Cross Down Mid",
1157 value_type: IndicatorValueType::F64,
1158};
1159const OUTPUT_PRICE_CROSS_ALPHA_TRAIL_UP: IndicatorOutputInfo = IndicatorOutputInfo {
1160 id: "price_cross_alpha_trail_up",
1161 label: "Price Cross AlphaTrail Up",
1162 value_type: IndicatorValueType::F64,
1163};
1164const OUTPUT_PRICE_CROSS_ALPHA_TRAIL_DOWN: IndicatorOutputInfo = IndicatorOutputInfo {
1165 id: "price_cross_alpha_trail_down",
1166 label: "Price Cross AlphaTrail Down",
1167 value_type: IndicatorValueType::F64,
1168};
1169const OUTPUT_MFI_ABOVE_90: IndicatorOutputInfo = IndicatorOutputInfo {
1170 id: "mfi_above_90",
1171 label: "MFI Above 90",
1172 value_type: IndicatorValueType::F64,
1173};
1174const OUTPUT_MFI_BELOW_10: IndicatorOutputInfo = IndicatorOutputInfo {
1175 id: "mfi_below_10",
1176 label: "MFI Below 10",
1177 value_type: IndicatorValueType::F64,
1178};
1179const OUTPUTS_TREND_FLOW_TRAIL: &[IndicatorOutputInfo] = &[
1180 OUTPUT_ALPHA_TRAIL,
1181 OUTPUT_ALPHA_TRAIL_BULLISH,
1182 OUTPUT_ALPHA_TRAIL_BEARISH,
1183 OUTPUT_ALPHA_DIR,
1184 OUTPUT_MFI,
1185 OUTPUT_TP_UPPER,
1186 OUTPUT_TP_LOWER,
1187 OUTPUT_ALPHA_TRAIL_BULLISH_SWITCH,
1188 OUTPUT_ALPHA_TRAIL_BEARISH_SWITCH,
1189 OUTPUT_MFI_OVERBOUGHT,
1190 OUTPUT_MFI_OVERSOLD,
1191 OUTPUT_MFI_CROSS_UP_MID,
1192 OUTPUT_MFI_CROSS_DOWN_MID,
1193 OUTPUT_PRICE_CROSS_ALPHA_TRAIL_UP,
1194 OUTPUT_PRICE_CROSS_ALPHA_TRAIL_DOWN,
1195 OUTPUT_MFI_ABOVE_90,
1196 OUTPUT_MFI_BELOW_10,
1197];
1198const OUTPUTS_STANDARDIZED_PSAR_OSCILLATOR: &[IndicatorOutputInfo] = &[
1199 IndicatorOutputInfo {
1200 id: "oscillator",
1201 label: "Oscillator",
1202 value_type: IndicatorValueType::F64,
1203 },
1204 IndicatorOutputInfo {
1205 id: "ma",
1206 label: "MA",
1207 value_type: IndicatorValueType::F64,
1208 },
1209 IndicatorOutputInfo {
1210 id: "bullish_reversal",
1211 label: "Bullish Reversal",
1212 value_type: IndicatorValueType::F64,
1213 },
1214 IndicatorOutputInfo {
1215 id: "bearish_reversal",
1216 label: "Bearish Reversal",
1217 value_type: IndicatorValueType::F64,
1218 },
1219 IndicatorOutputInfo {
1220 id: "regular_bullish",
1221 label: "Regular Bullish",
1222 value_type: IndicatorValueType::F64,
1223 },
1224 IndicatorOutputInfo {
1225 id: "regular_bearish",
1226 label: "Regular Bearish",
1227 value_type: IndicatorValueType::F64,
1228 },
1229 IndicatorOutputInfo {
1230 id: "bullish_weakening",
1231 label: "Bullish Weakening",
1232 value_type: IndicatorValueType::F64,
1233 },
1234 IndicatorOutputInfo {
1235 id: "bearish_weakening",
1236 label: "Bearish Weakening",
1237 value_type: IndicatorValueType::F64,
1238 },
1239];
1240const OUTPUTS_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR: &[IndicatorOutputInfo] = &[
1241 IndicatorOutputInfo {
1242 id: "fast_standard",
1243 label: "Fast Standard",
1244 value_type: IndicatorValueType::F64,
1245 },
1246 IndicatorOutputInfo {
1247 id: "fast_climax",
1248 label: "Fast Climax",
1249 value_type: IndicatorValueType::F64,
1250 },
1251 IndicatorOutputInfo {
1252 id: "fast_rounded",
1253 label: "Fast Rounded",
1254 value_type: IndicatorValueType::F64,
1255 },
1256 IndicatorOutputInfo {
1257 id: "fast_predator",
1258 label: "Fast Predator",
1259 value_type: IndicatorValueType::F64,
1260 },
1261 IndicatorOutputInfo {
1262 id: "slow_standard",
1263 label: "Slow Standard",
1264 value_type: IndicatorValueType::F64,
1265 },
1266 IndicatorOutputInfo {
1267 id: "slow_climax",
1268 label: "Slow Climax",
1269 value_type: IndicatorValueType::F64,
1270 },
1271 IndicatorOutputInfo {
1272 id: "slow_rounded",
1273 label: "Slow Rounded",
1274 value_type: IndicatorValueType::F64,
1275 },
1276 IndicatorOutputInfo {
1277 id: "slow_predator",
1278 label: "Slow Predator",
1279 value_type: IndicatorValueType::F64,
1280 },
1281 IndicatorOutputInfo {
1282 id: "opposing_force",
1283 label: "Opposing Force",
1284 value_type: IndicatorValueType::F64,
1285 },
1286 OUTPUT_MACD,
1287 OUTPUT_SIGNAL,
1288 OUTPUT_HIST,
1289];
1290const OUTPUTS_TREND_CHANGED: &[IndicatorOutputInfo] = &[OUTPUT_TREND, OUTPUT_CHANGED];
1291const OUTPUTS_KDJ: &[IndicatorOutputInfo] = &[OUTPUT_K, OUTPUT_D, OUTPUT_J];
1292const OUTPUTS_SQUEEZE_MOMENTUM: &[IndicatorOutputInfo] =
1293 &[OUTPUT_MOMENTUM, OUTPUT_SQUEEZE, OUTPUT_MOMENTUM_SIGNAL];
1294const OUTPUTS_WTO: &[IndicatorOutputInfo] =
1295 &[OUTPUT_WAVETREND1, OUTPUT_WAVETREND2, OUTPUT_HISTOGRAM];
1296const OUTPUTS_WAVETREND: &[IndicatorOutputInfo] = &[OUTPUT_WT1, OUTPUT_WT2, OUTPUT_WT_DIFF];
1297const OUTPUTS_MOD_GOD_MODE: &[IndicatorOutputInfo] =
1298 &[OUTPUT_WAVETREND, OUTPUT_SIGNAL, OUTPUT_HISTOGRAM];
1299const OUTPUTS_HALF_CAUSAL_ESTIMATOR: &[IndicatorOutputInfo] =
1300 &[OUTPUT_ESTIMATE, OUTPUT_EXPECTED_VALUE];
1301const OUTPUTS_YANG_ZHANG: &[IndicatorOutputInfo] = &[OUTPUT_YZ, OUTPUT_RS];
1302const OUTPUTS_PARKINSON: &[IndicatorOutputInfo] = &[OUTPUT_VOLATILITY, OUTPUT_VARIANCE];
1303const OUTPUTS_TWIGGS_MONEY_FLOW: &[IndicatorOutputInfo] = &[OUTPUT_TMF, OUTPUT_SMOOTHED];
1304const OUTPUTS_HVP: &[IndicatorOutputInfo] = &[OUTPUT_HVP, OUTPUT_HVP_SMA];
1305const OUTPUTS_EHLERS_DETRENDING_FILTER: &[IndicatorOutputInfo] = &[OUTPUT_EDF, OUTPUT_SIGNAL];
1306const OUTPUTS_KELTNER_CHANNEL_WIDTH_OSCILLATOR: &[IndicatorOutputInfo] =
1307 &[OUTPUT_KBW, OUTPUT_KBW_SMA];
1308const OUTPUTS_MARKET_MEANNESS_INDEX: &[IndicatorOutputInfo] = &[OUTPUT_MMI, OUTPUT_MMI_SMOOTHED];
1309const OUTPUTS_PRICE_DENSITY_MARKET_NOISE: &[IndicatorOutputInfo] =
1310 &[OUTPUT_PRICE_DENSITY, OUTPUT_PRICE_DENSITY_PERCENT];
1311const OUTPUTS_IMPULSE_MACD: &[IndicatorOutputInfo] =
1312 &[OUTPUT_IMPULSE_MACD, OUTPUT_HISTOGRAM, OUTPUT_SIGNAL];
1313const OUTPUTS_MOMENTUM_RATIO_OSCILLATOR: &[IndicatorOutputInfo] =
1314 &[OUTPUT_MOMENTUM_RATIO_OSCILLATOR, OUTPUT_SIGNAL];
1315const OUTPUTS_SUPERTREND_OSCILLATOR: &[IndicatorOutputInfo] = &[
1316 OUTPUT_SUPERTREND_OSCILLATOR,
1317 OUTPUT_SIGNAL,
1318 OUTPUT_HISTOGRAM,
1319];
1320const OUTPUTS_HYPERTREND: &[IndicatorOutputInfo] = &[
1321 OUTPUT_AVERAGE,
1322 OUTPUT_UPPER,
1323 OUTPUT_LOWER,
1324 OUTPUT_TREND,
1325 OUTPUT_CHANGED,
1326];
1327const OUTPUTS_LOGARITHMIC_MOVING_AVERAGE: &[IndicatorOutputInfo] = &[
1328 IndicatorOutputInfo {
1329 id: "lma",
1330 label: "LMA",
1331 value_type: IndicatorValueType::F64,
1332 },
1333 OUTPUT_SIGNAL,
1334 IndicatorOutputInfo {
1335 id: "position",
1336 label: "Position",
1337 value_type: IndicatorValueType::F64,
1338 },
1339 IndicatorOutputInfo {
1340 id: "momentum_confirmed",
1341 label: "Momentum Confirmed",
1342 value_type: IndicatorValueType::F64,
1343 },
1344];
1345const OUTPUTS_ADAPTIVE_SCHAFF_TREND_CYCLE: &[IndicatorOutputInfo] = &[
1346 IndicatorOutputInfo {
1347 id: "stc",
1348 label: "STC",
1349 value_type: IndicatorValueType::F64,
1350 },
1351 OUTPUT_HISTOGRAM,
1352];
1353const OUTPUTS_SMOOTHED_GAUSSIAN_TREND_FILTER: &[IndicatorOutputInfo] = &[
1354 IndicatorOutputInfo {
1355 id: "filter",
1356 label: "Filter",
1357 value_type: IndicatorValueType::F64,
1358 },
1359 IndicatorOutputInfo {
1360 id: "supertrend",
1361 label: "SuperTrend",
1362 value_type: IndicatorValueType::F64,
1363 },
1364 OUTPUT_TREND,
1365 IndicatorOutputInfo {
1366 id: "ranging",
1367 label: "Ranging",
1368 value_type: IndicatorValueType::F64,
1369 },
1370];
1371const OUTPUTS_STOCHASTIC_ADAPTIVE_D: &[IndicatorOutputInfo] = &[
1372 IndicatorOutputInfo {
1373 id: "standard_d",
1374 label: "Standard %D",
1375 value_type: IndicatorValueType::F64,
1376 },
1377 IndicatorOutputInfo {
1378 id: "adaptive_d",
1379 label: "Adaptive %D",
1380 value_type: IndicatorValueType::F64,
1381 },
1382 IndicatorOutputInfo {
1383 id: "difference",
1384 label: "Difference",
1385 value_type: IndicatorValueType::F64,
1386 },
1387];
1388const OUTPUTS_ICT_PROPULSION_BLOCK: &[IndicatorOutputInfo] = &[
1389 IndicatorOutputInfo {
1390 id: "bullish_high",
1391 label: "Bullish High",
1392 value_type: IndicatorValueType::F64,
1393 },
1394 IndicatorOutputInfo {
1395 id: "bullish_low",
1396 label: "Bullish Low",
1397 value_type: IndicatorValueType::F64,
1398 },
1399 IndicatorOutputInfo {
1400 id: "bullish_kind",
1401 label: "Bullish Kind",
1402 value_type: IndicatorValueType::F64,
1403 },
1404 IndicatorOutputInfo {
1405 id: "bullish_active",
1406 label: "Bullish Active",
1407 value_type: IndicatorValueType::F64,
1408 },
1409 IndicatorOutputInfo {
1410 id: "bullish_mitigated",
1411 label: "Bullish Mitigated",
1412 value_type: IndicatorValueType::F64,
1413 },
1414 IndicatorOutputInfo {
1415 id: "bullish_new",
1416 label: "Bullish New",
1417 value_type: IndicatorValueType::F64,
1418 },
1419 IndicatorOutputInfo {
1420 id: "bearish_high",
1421 label: "Bearish High",
1422 value_type: IndicatorValueType::F64,
1423 },
1424 IndicatorOutputInfo {
1425 id: "bearish_low",
1426 label: "Bearish Low",
1427 value_type: IndicatorValueType::F64,
1428 },
1429 IndicatorOutputInfo {
1430 id: "bearish_kind",
1431 label: "Bearish Kind",
1432 value_type: IndicatorValueType::F64,
1433 },
1434 IndicatorOutputInfo {
1435 id: "bearish_active",
1436 label: "Bearish Active",
1437 value_type: IndicatorValueType::F64,
1438 },
1439 IndicatorOutputInfo {
1440 id: "bearish_mitigated",
1441 label: "Bearish Mitigated",
1442 value_type: IndicatorValueType::F64,
1443 },
1444 IndicatorOutputInfo {
1445 id: "bearish_new",
1446 label: "Bearish New",
1447 value_type: IndicatorValueType::F64,
1448 },
1449];
1450const OUTPUTS_LEAVITT_CONVOLUTION_ACCELERATION: &[IndicatorOutputInfo] =
1451 &[OUTPUT_CONV_ACCELERATION, OUTPUT_SIGNAL];
1452const OUTPUTS_TREND_CONTINUATION_FACTOR: &[IndicatorOutputInfo] =
1453 &[OUTPUT_PLUS_TCF, OUTPUT_MINUS_TCF];
1454const OUTPUTS_VOLUME_WEIGHTED_STOCHASTIC_RSI: &[IndicatorOutputInfo] = &[OUTPUT_K, OUTPUT_D];
1455const OUTPUTS_VOLATILITY_QUALITY_INDEX: &[IndicatorOutputInfo] =
1456 &[OUTPUT_VQI_SUM, OUTPUT_FAST_SMA, OUTPUT_SLOW_SMA];
1457const OUTPUTS_ANDEAN_OSCILLATOR: &[IndicatorOutputInfo] =
1458 &[OUTPUT_BULL, OUTPUT_BEAR, OUTPUT_SIGNAL];
1459const OUTPUTS_CYCLE_CHANNEL_OSCILLATOR: &[IndicatorOutputInfo] = &[OUTPUT_FAST, OUTPUT_SLOW];
1460const OUTPUTS_DAILY_FACTOR: &[IndicatorOutputInfo] = &[OUTPUT_VALUE_F64, OUTPUT_EMA, OUTPUT_SIGNAL];
1461const OUTPUTS_MOVING_AVERAGE_CROSS_PROBABILITY: &[IndicatorOutputInfo] = &[
1462 OUTPUT_VALUE_F64,
1463 IndicatorOutputInfo {
1464 id: "slow_ma",
1465 label: "Slow MA",
1466 value_type: IndicatorValueType::F64,
1467 },
1468 IndicatorOutputInfo {
1469 id: "fast_ma",
1470 label: "Fast MA",
1471 value_type: IndicatorValueType::F64,
1472 },
1473 OUTPUT_FORECAST,
1474 OUTPUT_UPPER,
1475 OUTPUT_LOWER,
1476 OUTPUT_DIRECTION,
1477];
1478const OUTPUTS_BULLS_V_BEARS: &[IndicatorOutputInfo] = &[
1479 OUTPUT_VALUE_F64,
1480 OUTPUT_BULL,
1481 OUTPUT_BEAR,
1482 OUTPUT_MA,
1483 OUTPUT_UPPER,
1484 OUTPUT_LOWER,
1485 OUTPUT_BULLISH_SIGNAL,
1486 OUTPUT_BEARISH_SIGNAL,
1487 OUTPUT_ZERO_CROSS_UP,
1488 OUTPUT_ZERO_CROSS_DOWN,
1489];
1490const OUTPUTS_ADJUSTABLE_MA_ALTERNATING_EXTREMITIES: &[IndicatorOutputInfo] = &[
1491 OUTPUT_MA,
1492 OUTPUT_UPPER,
1493 OUTPUT_LOWER,
1494 OUTPUT_EXTREMITY,
1495 OUTPUT_STATE,
1496 OUTPUT_CHANGED,
1497 OUTPUT_SMOOTHED_OPEN,
1498 OUTPUT_SMOOTHED_HIGH,
1499 OUTPUT_SMOOTHED_LOW,
1500 OUTPUT_SMOOTHED_CLOSE,
1501];
1502const OUTPUTS_QQE_WEIGHTED_OSCILLATOR: &[IndicatorOutputInfo] =
1503 &[OUTPUT_RSI_LINE, OUTPUT_TRAILING_STOP];
1504const OUTPUTS_ADAPTIVE_BOUNDS_RSI: &[IndicatorOutputInfo] = &[
1505 OUTPUT_RSI_LINE,
1506 OUTPUT_LOWER,
1507 OUTPUT_LOWER_MID,
1508 OUTPUT_MIDDLE,
1509 OUTPUT_UPPER_MID,
1510 OUTPUT_UPPER,
1511 OUTPUT_REGIME,
1512 OUTPUT_REGIME_FLIP,
1513 OUTPUT_LOWER_SIGNAL,
1514 OUTPUT_UPPER_SIGNAL,
1515];
1516const OUTPUTS_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR: &[IndicatorOutputInfo] = &[
1517 OUTPUT_FORWARD_BACKWARD,
1518 OUTPUT_BACKWARD_LINE,
1519 OUTPUT_HISTOGRAM,
1520];
1521const OUTPUTS_RANGE_OSCILLATOR: &[IndicatorOutputInfo] = &[
1522 IndicatorOutputInfo {
1523 id: "oscillator",
1524 label: "Oscillator",
1525 value_type: IndicatorValueType::F64,
1526 },
1527 IndicatorOutputInfo {
1528 id: "ma",
1529 label: "MA",
1530 value_type: IndicatorValueType::F64,
1531 },
1532 IndicatorOutputInfo {
1533 id: "upper_band",
1534 label: "Upper Band",
1535 value_type: IndicatorValueType::F64,
1536 },
1537 IndicatorOutputInfo {
1538 id: "lower_band",
1539 label: "Lower Band",
1540 value_type: IndicatorValueType::F64,
1541 },
1542 IndicatorOutputInfo {
1543 id: "range_width",
1544 label: "Range Width",
1545 value_type: IndicatorValueType::F64,
1546 },
1547 IndicatorOutputInfo {
1548 id: "in_range",
1549 label: "In Range",
1550 value_type: IndicatorValueType::F64,
1551 },
1552 OUTPUT_TREND,
1553 IndicatorOutputInfo {
1554 id: "break_up",
1555 label: "Break Up",
1556 value_type: IndicatorValueType::F64,
1557 },
1558 IndicatorOutputInfo {
1559 id: "break_down",
1560 label: "Break Down",
1561 value_type: IndicatorValueType::F64,
1562 },
1563];
1564const OUTPUTS_RANGE_FILTERED_TREND_SIGNALS: &[IndicatorOutputInfo] = &[
1565 IndicatorOutputInfo {
1566 id: "kalman",
1567 label: "Kalman",
1568 value_type: IndicatorValueType::F64,
1569 },
1570 IndicatorOutputInfo {
1571 id: "supertrend",
1572 label: "Supertrend",
1573 value_type: IndicatorValueType::F64,
1574 },
1575 IndicatorOutputInfo {
1576 id: "upper_band",
1577 label: "Upper Band",
1578 value_type: IndicatorValueType::F64,
1579 },
1580 IndicatorOutputInfo {
1581 id: "lower_band",
1582 label: "Lower Band",
1583 value_type: IndicatorValueType::F64,
1584 },
1585 OUTPUT_TREND,
1586 IndicatorOutputInfo {
1587 id: "kalman_trend",
1588 label: "Kalman Trend",
1589 value_type: IndicatorValueType::F64,
1590 },
1591 OUTPUT_STATE,
1592 IndicatorOutputInfo {
1593 id: "market_trending",
1594 label: "Market Trending",
1595 value_type: IndicatorValueType::F64,
1596 },
1597 IndicatorOutputInfo {
1598 id: "market_ranging",
1599 label: "Market Ranging",
1600 value_type: IndicatorValueType::F64,
1601 },
1602 IndicatorOutputInfo {
1603 id: "short_term_bullish",
1604 label: "Short Term Bullish",
1605 value_type: IndicatorValueType::F64,
1606 },
1607 IndicatorOutputInfo {
1608 id: "short_term_bearish",
1609 label: "Short Term Bearish",
1610 value_type: IndicatorValueType::F64,
1611 },
1612 IndicatorOutputInfo {
1613 id: "long_term_bullish",
1614 label: "Long Term Bullish",
1615 value_type: IndicatorValueType::F64,
1616 },
1617 IndicatorOutputInfo {
1618 id: "long_term_bearish",
1619 label: "Long Term Bearish",
1620 value_type: IndicatorValueType::F64,
1621 },
1622];
1623const OUTPUTS_MARKET_STRUCTURE_CONFLUENCE: &[IndicatorOutputInfo] = &[
1624 IndicatorOutputInfo {
1625 id: "basis",
1626 label: "Basis",
1627 value_type: IndicatorValueType::F64,
1628 },
1629 IndicatorOutputInfo {
1630 id: "upper_band",
1631 label: "Upper Band",
1632 value_type: IndicatorValueType::F64,
1633 },
1634 IndicatorOutputInfo {
1635 id: "lower_band",
1636 label: "Lower Band",
1637 value_type: IndicatorValueType::F64,
1638 },
1639 IndicatorOutputInfo {
1640 id: "structure_direction",
1641 label: "Structure Direction",
1642 value_type: IndicatorValueType::F64,
1643 },
1644 IndicatorOutputInfo {
1645 id: "bullish_arrow",
1646 label: "Bullish Arrow",
1647 value_type: IndicatorValueType::F64,
1648 },
1649 IndicatorOutputInfo {
1650 id: "bearish_arrow",
1651 label: "Bearish Arrow",
1652 value_type: IndicatorValueType::F64,
1653 },
1654 IndicatorOutputInfo {
1655 id: "bullish_change",
1656 label: "Bullish Change",
1657 value_type: IndicatorValueType::F64,
1658 },
1659 IndicatorOutputInfo {
1660 id: "bearish_change",
1661 label: "Bearish Change",
1662 value_type: IndicatorValueType::F64,
1663 },
1664 IndicatorOutputInfo {
1665 id: "hh",
1666 label: "HH",
1667 value_type: IndicatorValueType::F64,
1668 },
1669 IndicatorOutputInfo {
1670 id: "lh",
1671 label: "LH",
1672 value_type: IndicatorValueType::F64,
1673 },
1674 IndicatorOutputInfo {
1675 id: "hl",
1676 label: "HL",
1677 value_type: IndicatorValueType::F64,
1678 },
1679 IndicatorOutputInfo {
1680 id: "ll",
1681 label: "LL",
1682 value_type: IndicatorValueType::F64,
1683 },
1684 IndicatorOutputInfo {
1685 id: "bullish_bos",
1686 label: "Bullish BOS",
1687 value_type: IndicatorValueType::F64,
1688 },
1689 IndicatorOutputInfo {
1690 id: "bullish_choch",
1691 label: "Bullish CHoCH",
1692 value_type: IndicatorValueType::F64,
1693 },
1694 IndicatorOutputInfo {
1695 id: "bearish_bos",
1696 label: "Bearish BOS",
1697 value_type: IndicatorValueType::F64,
1698 },
1699 IndicatorOutputInfo {
1700 id: "bearish_choch",
1701 label: "Bearish CHoCH",
1702 value_type: IndicatorValueType::F64,
1703 },
1704];
1705const OUTPUTS_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX: &[IndicatorOutputInfo] = &[
1706 OUTPUT_RSI_LINE,
1707 IndicatorOutputInfo {
1708 id: "consolidation_strength",
1709 label: "Consolidation Strength",
1710 value_type: IndicatorValueType::F64,
1711 },
1712 IndicatorOutputInfo {
1713 id: "rsi_ma",
1714 label: "RSI MA",
1715 value_type: IndicatorValueType::F64,
1716 },
1717 IndicatorOutputInfo {
1718 id: "bearish_tp",
1719 label: "Bearish TP",
1720 value_type: IndicatorValueType::F64,
1721 },
1722 IndicatorOutputInfo {
1723 id: "bullish_tp",
1724 label: "Bullish TP",
1725 value_type: IndicatorValueType::F64,
1726 },
1727];
1728const OUTPUTS_SMOOTH_THEIL_SEN: &[IndicatorOutputInfo] = &[
1729 OUTPUT_VALUE_F64,
1730 OUTPUT_UPPER,
1731 OUTPUT_LOWER,
1732 OUTPUT_SLOPE,
1733 OUTPUT_INTERCEPT,
1734 OUTPUT_DEVIATION,
1735];
1736const OUTPUTS_REGRESSION_SLOPE_OSCILLATOR: &[IndicatorOutputInfo] = &[
1737 OUTPUT_VALUE_F64,
1738 OUTPUT_SIGNAL,
1739 OUTPUT_BULLISH_REVERSAL,
1740 OUTPUT_BEARISH_REVERSAL,
1741];
1742const OUTPUTS_EHLERS_SIMPLE_CYCLE_INDICATOR: &[IndicatorOutputInfo] =
1743 &[OUTPUT_CYCLE, OUTPUT_TRIGGER];
1744const OUTPUTS_RANDOM_WALK_INDEX: &[IndicatorOutputInfo] = &[
1745 IndicatorOutputInfo {
1746 id: "high",
1747 label: "High",
1748 value_type: IndicatorValueType::F64,
1749 },
1750 IndicatorOutputInfo {
1751 id: "low",
1752 label: "Low",
1753 value_type: IndicatorValueType::F64,
1754 },
1755];
1756const OUTPUTS_PRICE_MOVING_AVERAGE_RATIO_PERCENTILE: &[IndicatorOutputInfo] = &[
1757 IndicatorOutputInfo {
1758 id: "pmar",
1759 label: "PMAR",
1760 value_type: IndicatorValueType::F64,
1761 },
1762 IndicatorOutputInfo {
1763 id: "pmarp",
1764 label: "PMARP",
1765 value_type: IndicatorValueType::F64,
1766 },
1767 IndicatorOutputInfo {
1768 id: "plotline",
1769 label: "Plotline",
1770 value_type: IndicatorValueType::F64,
1771 },
1772 IndicatorOutputInfo {
1773 id: "signal",
1774 label: "Signal",
1775 value_type: IndicatorValueType::F64,
1776 },
1777 IndicatorOutputInfo {
1778 id: "pmar_high",
1779 label: "Historical PMAR High",
1780 value_type: IndicatorValueType::F64,
1781 },
1782 IndicatorOutputInfo {
1783 id: "pmar_low",
1784 label: "Historical PMAR Low",
1785 value_type: IndicatorValueType::F64,
1786 },
1787 IndicatorOutputInfo {
1788 id: "scaled_pmar",
1789 label: "Scaled PMAR",
1790 value_type: IndicatorValueType::F64,
1791 },
1792];
1793const OUTPUTS_RELATIVE_STRENGTH_INDEX_WAVE_INDICATOR: &[IndicatorOutputInfo] = &[
1794 IndicatorOutputInfo {
1795 id: "rsi_ma1",
1796 label: "RSI MA1",
1797 value_type: IndicatorValueType::F64,
1798 },
1799 IndicatorOutputInfo {
1800 id: "rsi_ma2",
1801 label: "RSI MA2",
1802 value_type: IndicatorValueType::F64,
1803 },
1804 IndicatorOutputInfo {
1805 id: "rsi_ma3",
1806 label: "RSI MA3",
1807 value_type: IndicatorValueType::F64,
1808 },
1809 IndicatorOutputInfo {
1810 id: "rsi_ma4",
1811 label: "RSI MA4",
1812 value_type: IndicatorValueType::F64,
1813 },
1814 IndicatorOutputInfo {
1815 id: "state",
1816 label: "State",
1817 value_type: IndicatorValueType::F64,
1818 },
1819];
1820const OUTPUTS_MESA_STOCHASTIC_MULTI_LENGTH: &[IndicatorOutputInfo] = &[
1821 IndicatorOutputInfo {
1822 id: "mesa_1",
1823 label: "MESA 1",
1824 value_type: IndicatorValueType::F64,
1825 },
1826 IndicatorOutputInfo {
1827 id: "mesa_2",
1828 label: "MESA 2",
1829 value_type: IndicatorValueType::F64,
1830 },
1831 IndicatorOutputInfo {
1832 id: "mesa_3",
1833 label: "MESA 3",
1834 value_type: IndicatorValueType::F64,
1835 },
1836 IndicatorOutputInfo {
1837 id: "mesa_4",
1838 label: "MESA 4",
1839 value_type: IndicatorValueType::F64,
1840 },
1841 IndicatorOutputInfo {
1842 id: "trigger_1",
1843 label: "Trigger 1",
1844 value_type: IndicatorValueType::F64,
1845 },
1846 IndicatorOutputInfo {
1847 id: "trigger_2",
1848 label: "Trigger 2",
1849 value_type: IndicatorValueType::F64,
1850 },
1851 IndicatorOutputInfo {
1852 id: "trigger_3",
1853 label: "Trigger 3",
1854 value_type: IndicatorValueType::F64,
1855 },
1856 IndicatorOutputInfo {
1857 id: "trigger_4",
1858 label: "Trigger 4",
1859 value_type: IndicatorValueType::F64,
1860 },
1861];
1862const OUTPUTS_SPEARMAN_CORRELATION: &[IndicatorOutputInfo] = &[
1863 IndicatorOutputInfo {
1864 id: "raw",
1865 label: "Raw",
1866 value_type: IndicatorValueType::F64,
1867 },
1868 IndicatorOutputInfo {
1869 id: "smoothed",
1870 label: "Smoothed",
1871 value_type: IndicatorValueType::F64,
1872 },
1873];
1874const OUTPUTS_VWAP_DEVIATION_OSCILLATOR: &[IndicatorOutputInfo] = &[
1875 IndicatorOutputInfo {
1876 id: "osc",
1877 label: "Oscillator",
1878 value_type: IndicatorValueType::F64,
1879 },
1880 IndicatorOutputInfo {
1881 id: "std1",
1882 label: "Std 1",
1883 value_type: IndicatorValueType::F64,
1884 },
1885 IndicatorOutputInfo {
1886 id: "std2",
1887 label: "Std 2",
1888 value_type: IndicatorValueType::F64,
1889 },
1890 IndicatorOutputInfo {
1891 id: "std3",
1892 label: "Std 3",
1893 value_type: IndicatorValueType::F64,
1894 },
1895];
1896const OUTPUTS_ICHIMOKU_OSCILLATOR: &[IndicatorOutputInfo] = &[
1897 IndicatorOutputInfo {
1898 id: "signal",
1899 label: "Signal",
1900 value_type: IndicatorValueType::F64,
1901 },
1902 IndicatorOutputInfo {
1903 id: "ma",
1904 label: "MA",
1905 value_type: IndicatorValueType::F64,
1906 },
1907 IndicatorOutputInfo {
1908 id: "conversion",
1909 label: "Conversion",
1910 value_type: IndicatorValueType::F64,
1911 },
1912 IndicatorOutputInfo {
1913 id: "base",
1914 label: "Base",
1915 value_type: IndicatorValueType::F64,
1916 },
1917 IndicatorOutputInfo {
1918 id: "chikou",
1919 label: "Chikou",
1920 value_type: IndicatorValueType::F64,
1921 },
1922 IndicatorOutputInfo {
1923 id: "current_kumo_a",
1924 label: "Current Kumo A",
1925 value_type: IndicatorValueType::F64,
1926 },
1927 IndicatorOutputInfo {
1928 id: "current_kumo_b",
1929 label: "Current Kumo B",
1930 value_type: IndicatorValueType::F64,
1931 },
1932 IndicatorOutputInfo {
1933 id: "future_kumo_a",
1934 label: "Future Kumo A",
1935 value_type: IndicatorValueType::F64,
1936 },
1937 IndicatorOutputInfo {
1938 id: "future_kumo_b",
1939 label: "Future Kumo B",
1940 value_type: IndicatorValueType::F64,
1941 },
1942 IndicatorOutputInfo {
1943 id: "max_level",
1944 label: "Max Level",
1945 value_type: IndicatorValueType::F64,
1946 },
1947 IndicatorOutputInfo {
1948 id: "high_level",
1949 label: "High Level",
1950 value_type: IndicatorValueType::F64,
1951 },
1952 IndicatorOutputInfo {
1953 id: "low_level",
1954 label: "Low Level",
1955 value_type: IndicatorValueType::F64,
1956 },
1957 IndicatorOutputInfo {
1958 id: "min_level",
1959 label: "Min Level",
1960 value_type: IndicatorValueType::F64,
1961 },
1962];
1963const OUTPUTS_NORMALIZED_VOLUME_TRUE_RANGE: &[IndicatorOutputInfo] = &[
1964 OUTPUT_NORMALIZED_VOLUME,
1965 OUTPUT_NORMALIZED_TRUE_RANGE,
1966 OUTPUT_BASELINE,
1967 OUTPUT_ATR_LINE,
1968 OUTPUT_AVERAGE_VOLUME,
1969];
1970const OUTPUTS_ACOSC: &[IndicatorOutputInfo] = &[
1971 IndicatorOutputInfo {
1972 id: "osc",
1973 label: "Oscillator",
1974 value_type: IndicatorValueType::F64,
1975 },
1976 IndicatorOutputInfo {
1977 id: "change",
1978 label: "Change",
1979 value_type: IndicatorValueType::F64,
1980 },
1981];
1982const OUTPUTS_ALLIGATOR: &[IndicatorOutputInfo] = &[
1983 IndicatorOutputInfo {
1984 id: "jaw",
1985 label: "Jaw",
1986 value_type: IndicatorValueType::F64,
1987 },
1988 IndicatorOutputInfo {
1989 id: "teeth",
1990 label: "Teeth",
1991 value_type: IndicatorValueType::F64,
1992 },
1993 IndicatorOutputInfo {
1994 id: "lips",
1995 label: "Lips",
1996 value_type: IndicatorValueType::F64,
1997 },
1998];
1999const OUTPUTS_K1_K2: &[IndicatorOutputInfo] = &[
2000 IndicatorOutputInfo {
2001 id: "k1",
2002 label: "K1",
2003 value_type: IndicatorValueType::F64,
2004 },
2005 IndicatorOutputInfo {
2006 id: "k2",
2007 label: "K2",
2008 value_type: IndicatorValueType::F64,
2009 },
2010];
2011const OUTPUTS_BULLS_BEARS: &[IndicatorOutputInfo] = &[
2012 IndicatorOutputInfo {
2013 id: "bulls",
2014 label: "Bulls",
2015 value_type: IndicatorValueType::F64,
2016 },
2017 IndicatorOutputInfo {
2018 id: "bears",
2019 label: "Bears",
2020 value_type: IndicatorValueType::F64,
2021 },
2022];
2023const OUTPUTS_BANDPASS: &[IndicatorOutputInfo] = &[
2024 IndicatorOutputInfo {
2025 id: "bp",
2026 label: "BandPass",
2027 value_type: IndicatorValueType::F64,
2028 },
2029 IndicatorOutputInfo {
2030 id: "bp_normalized",
2031 label: "Normalized",
2032 value_type: IndicatorValueType::F64,
2033 },
2034 OUTPUT_SIGNAL,
2035 OUTPUT_TRIGGER,
2036];
2037const OUTPUTS_LONG_SHORT_STOP: &[IndicatorOutputInfo] = &[
2038 IndicatorOutputInfo {
2039 id: "long_stop",
2040 label: "Long Stop",
2041 value_type: IndicatorValueType::F64,
2042 },
2043 IndicatorOutputInfo {
2044 id: "short_stop",
2045 label: "Short Stop",
2046 value_type: IndicatorValueType::F64,
2047 },
2048];
2049const OUTPUTS_LONG_SHORT_VALUES: &[IndicatorOutputInfo] = &[
2050 IndicatorOutputInfo {
2051 id: "long_values",
2052 label: "Long",
2053 value_type: IndicatorValueType::F64,
2054 },
2055 IndicatorOutputInfo {
2056 id: "short_values",
2057 label: "Short",
2058 value_type: IndicatorValueType::F64,
2059 },
2060];
2061const OUTPUTS_CORRELATION_CYCLE: &[IndicatorOutputInfo] = &[
2062 IndicatorOutputInfo {
2063 id: "real",
2064 label: "Real",
2065 value_type: IndicatorValueType::F64,
2066 },
2067 IndicatorOutputInfo {
2068 id: "imag",
2069 label: "Imag",
2070 value_type: IndicatorValueType::F64,
2071 },
2072 IndicatorOutputInfo {
2073 id: "angle",
2074 label: "Angle",
2075 value_type: IndicatorValueType::F64,
2076 },
2077 IndicatorOutputInfo {
2078 id: "state",
2079 label: "State",
2080 value_type: IndicatorValueType::F64,
2081 },
2082];
2083const OUTPUTS_VOL_ANTI: &[IndicatorOutputInfo] = &[
2084 IndicatorOutputInfo {
2085 id: "vol",
2086 label: "Vol",
2087 value_type: IndicatorValueType::F64,
2088 },
2089 IndicatorOutputInfo {
2090 id: "anti",
2091 label: "Anti",
2092 value_type: IndicatorValueType::F64,
2093 },
2094];
2095const OUTPUTS_DVDIQQE: &[IndicatorOutputInfo] = &[
2096 IndicatorOutputInfo {
2097 id: "dvdi",
2098 label: "DVDI",
2099 value_type: IndicatorValueType::F64,
2100 },
2101 IndicatorOutputInfo {
2102 id: "fast_tl",
2103 label: "Fast TL",
2104 value_type: IndicatorValueType::F64,
2105 },
2106 IndicatorOutputInfo {
2107 id: "slow_tl",
2108 label: "Slow TL",
2109 value_type: IndicatorValueType::F64,
2110 },
2111 IndicatorOutputInfo {
2112 id: "center_line",
2113 label: "Center Line",
2114 value_type: IndicatorValueType::F64,
2115 },
2116];
2117const OUTPUTS_UPPER_MIDDLE_LOWER_BAND: &[IndicatorOutputInfo] = &[
2118 IndicatorOutputInfo {
2119 id: "upperband",
2120 label: "Upper",
2121 value_type: IndicatorValueType::F64,
2122 },
2123 IndicatorOutputInfo {
2124 id: "middleband",
2125 label: "Middle",
2126 value_type: IndicatorValueType::F64,
2127 },
2128 IndicatorOutputInfo {
2129 id: "lowerband",
2130 label: "Lower",
2131 value_type: IndicatorValueType::F64,
2132 },
2133];
2134const OUTPUTS_BULL_BEAR: &[IndicatorOutputInfo] = &[
2135 IndicatorOutputInfo {
2136 id: "bull",
2137 label: "Bull",
2138 value_type: IndicatorValueType::F64,
2139 },
2140 IndicatorOutputInfo {
2141 id: "bear",
2142 label: "Bear",
2143 value_type: IndicatorValueType::F64,
2144 },
2145];
2146const OUTPUTS_FVG_TS: &[IndicatorOutputInfo] = &[
2147 OUTPUT_UPPER,
2148 OUTPUT_LOWER,
2149 IndicatorOutputInfo {
2150 id: "upper_ts",
2151 label: "Upper TS",
2152 value_type: IndicatorValueType::F64,
2153 },
2154 IndicatorOutputInfo {
2155 id: "lower_ts",
2156 label: "Lower TS",
2157 value_type: IndicatorValueType::F64,
2158 },
2159];
2160const OUTPUTS_GATOROSC: &[IndicatorOutputInfo] = &[
2161 OUTPUT_UPPER,
2162 OUTPUT_LOWER,
2163 IndicatorOutputInfo {
2164 id: "upper_change",
2165 label: "Upper Change",
2166 value_type: IndicatorValueType::F64,
2167 },
2168 IndicatorOutputInfo {
2169 id: "lower_change",
2170 label: "Lower Change",
2171 value_type: IndicatorValueType::F64,
2172 },
2173];
2174const OUTPUTS_HALFTREND: &[IndicatorOutputInfo] = &[
2175 IndicatorOutputInfo {
2176 id: "halftrend",
2177 label: "HalfTrend",
2178 value_type: IndicatorValueType::F64,
2179 },
2180 OUTPUT_TREND,
2181 IndicatorOutputInfo {
2182 id: "atr_high",
2183 label: "ATR High",
2184 value_type: IndicatorValueType::F64,
2185 },
2186 IndicatorOutputInfo {
2187 id: "atr_low",
2188 label: "ATR Low",
2189 value_type: IndicatorValueType::F64,
2190 },
2191 IndicatorOutputInfo {
2192 id: "buy_signal",
2193 label: "Buy",
2194 value_type: IndicatorValueType::F64,
2195 },
2196 IndicatorOutputInfo {
2197 id: "sell_signal",
2198 label: "Sell",
2199 value_type: IndicatorValueType::F64,
2200 },
2201];
2202const OUTPUTS_LINE_SIGNAL: &[IndicatorOutputInfo] = &[
2203 IndicatorOutputInfo {
2204 id: "line",
2205 label: "Line",
2206 value_type: IndicatorValueType::F64,
2207 },
2208 OUTPUT_SIGNAL,
2209];
2210const OUTPUTS_FISHER: &[IndicatorOutputInfo] = &[
2211 IndicatorOutputInfo {
2212 id: "fisher",
2213 label: "Fisher",
2214 value_type: IndicatorValueType::F64,
2215 },
2216 OUTPUT_SIGNAL,
2217];
2218const OUTPUTS_UPPER_LOWER: &[IndicatorOutputInfo] = &[OUTPUT_UPPER, OUTPUT_LOWER];
2219const OUTPUTS_FILTER_BANDS: &[IndicatorOutputInfo] = &[
2220 IndicatorOutputInfo {
2221 id: "filter",
2222 label: "Filter",
2223 value_type: IndicatorValueType::F64,
2224 },
2225 IndicatorOutputInfo {
2226 id: "high_band",
2227 label: "High Band",
2228 value_type: IndicatorValueType::F64,
2229 },
2230 IndicatorOutputInfo {
2231 id: "low_band",
2232 label: "Low Band",
2233 value_type: IndicatorValueType::F64,
2234 },
2235];
2236const OUTPUTS_MINMAX: &[IndicatorOutputInfo] = &[
2237 IndicatorOutputInfo {
2238 id: "is_min",
2239 label: "Is Min",
2240 value_type: IndicatorValueType::F64,
2241 },
2242 IndicatorOutputInfo {
2243 id: "is_max",
2244 label: "Is Max",
2245 value_type: IndicatorValueType::F64,
2246 },
2247 IndicatorOutputInfo {
2248 id: "last_min",
2249 label: "Last Min",
2250 value_type: IndicatorValueType::F64,
2251 },
2252 IndicatorOutputInfo {
2253 id: "last_max",
2254 label: "Last Max",
2255 value_type: IndicatorValueType::F64,
2256 },
2257];
2258const OUTPUTS_SINE_LEAD: &[IndicatorOutputInfo] = &[
2259 IndicatorOutputInfo {
2260 id: "sine",
2261 label: "Sine",
2262 value_type: IndicatorValueType::F64,
2263 },
2264 IndicatorOutputInfo {
2265 id: "lead",
2266 label: "Lead",
2267 value_type: IndicatorValueType::F64,
2268 },
2269];
2270const OUTPUTS_HOTT_LOTT: &[IndicatorOutputInfo] = &[
2271 IndicatorOutputInfo {
2272 id: "hott",
2273 label: "HOTT",
2274 value_type: IndicatorValueType::F64,
2275 },
2276 IndicatorOutputInfo {
2277 id: "lott",
2278 label: "LOTT",
2279 value_type: IndicatorValueType::F64,
2280 },
2281];
2282const OUTPUTS_PRB: &[IndicatorOutputInfo] = &[
2283 IndicatorOutputInfo {
2284 id: "values",
2285 label: "Value",
2286 value_type: IndicatorValueType::F64,
2287 },
2288 IndicatorOutputInfo {
2289 id: "upper_band",
2290 label: "Upper",
2291 value_type: IndicatorValueType::F64,
2292 },
2293 IndicatorOutputInfo {
2294 id: "lower_band",
2295 label: "Lower",
2296 value_type: IndicatorValueType::F64,
2297 },
2298];
2299const OUTPUTS_INDICATOR_SIGNAL: &[IndicatorOutputInfo] = &[
2300 IndicatorOutputInfo {
2301 id: "indicator",
2302 label: "Indicator",
2303 value_type: IndicatorValueType::F64,
2304 },
2305 OUTPUT_SIGNAL,
2306];
2307const OUTPUTS_OSCILLATOR_SIGNAL: &[IndicatorOutputInfo] = &[OUTPUT_OSCILLATOR, OUTPUT_SIGNAL];
2308const OUTPUTS_HULL_BUTTERFLY_OSCILLATOR: &[IndicatorOutputInfo] =
2309 &[OUTPUT_OSCILLATOR, OUTPUT_CUMULATIVE_MEAN, OUTPUT_SIGNAL];
2310const OUTPUTS_FIBONACCI_TRAILING_STOP: &[IndicatorOutputInfo] = &[
2311 OUTPUT_TRAILING_STOP,
2312 IndicatorOutputInfo {
2313 id: "long_stop",
2314 label: "Long Stop",
2315 value_type: IndicatorValueType::F64,
2316 },
2317 IndicatorOutputInfo {
2318 id: "short_stop",
2319 label: "Short Stop",
2320 value_type: IndicatorValueType::F64,
2321 },
2322 OUTPUT_DIRECTION,
2323];
2324const OUTPUTS_FIBONACCI_ENTRY_BANDS: &[IndicatorOutputInfo] = &[
2325 OUTPUT_MIDDLE,
2326 OUTPUT_TREND,
2327 IndicatorOutputInfo {
2328 id: "upper_0618",
2329 label: "Upper 0.618",
2330 value_type: IndicatorValueType::F64,
2331 },
2332 IndicatorOutputInfo {
2333 id: "upper_1000",
2334 label: "Upper 1.0",
2335 value_type: IndicatorValueType::F64,
2336 },
2337 IndicatorOutputInfo {
2338 id: "upper_1618",
2339 label: "Upper 1.618",
2340 value_type: IndicatorValueType::F64,
2341 },
2342 IndicatorOutputInfo {
2343 id: "upper_2618",
2344 label: "Upper 2.618",
2345 value_type: IndicatorValueType::F64,
2346 },
2347 IndicatorOutputInfo {
2348 id: "lower_0618",
2349 label: "Lower 0.618",
2350 value_type: IndicatorValueType::F64,
2351 },
2352 IndicatorOutputInfo {
2353 id: "lower_1000",
2354 label: "Lower 1.0",
2355 value_type: IndicatorValueType::F64,
2356 },
2357 IndicatorOutputInfo {
2358 id: "lower_1618",
2359 label: "Lower 1.618",
2360 value_type: IndicatorValueType::F64,
2361 },
2362 IndicatorOutputInfo {
2363 id: "lower_2618",
2364 label: "Lower 2.618",
2365 value_type: IndicatorValueType::F64,
2366 },
2367 IndicatorOutputInfo {
2368 id: "tp_long_band",
2369 label: "TP Long Band",
2370 value_type: IndicatorValueType::F64,
2371 },
2372 IndicatorOutputInfo {
2373 id: "tp_short_band",
2374 label: "TP Short Band",
2375 value_type: IndicatorValueType::F64,
2376 },
2377 OUTPUT_GO_LONG,
2378 OUTPUT_GO_SHORT,
2379 IndicatorOutputInfo {
2380 id: "rejection_long",
2381 label: "Rejection Long",
2382 value_type: IndicatorValueType::F64,
2383 },
2384 IndicatorOutputInfo {
2385 id: "rejection_short",
2386 label: "Rejection Short",
2387 value_type: IndicatorValueType::F64,
2388 },
2389 IndicatorOutputInfo {
2390 id: "long_bounce",
2391 label: "Long Bounce",
2392 value_type: IndicatorValueType::F64,
2393 },
2394 IndicatorOutputInfo {
2395 id: "short_bounce",
2396 label: "Short Bounce",
2397 value_type: IndicatorValueType::F64,
2398 },
2399];
2400const OUTPUTS_VOLUME_ENERGY_RESERVOIRS: &[IndicatorOutputInfo] = &[
2401 OUTPUT_MOMENTUM,
2402 OUTPUT_RESERVOIR,
2403 OUTPUT_SQUEEZE_ACTIVE,
2404 OUTPUT_SQUEEZE_START,
2405 OUTPUT_RANGE_HIGH,
2406 OUTPUT_RANGE_LOW,
2407];
2408const OUTPUTS_NEIGHBORING_TRAILING_STOP: &[IndicatorOutputInfo] = &[
2409 OUTPUT_TRAILING_STOP,
2410 IndicatorOutputInfo {
2411 id: "bullish_band",
2412 label: "Bullish Band",
2413 value_type: IndicatorValueType::F64,
2414 },
2415 IndicatorOutputInfo {
2416 id: "bearish_band",
2417 label: "Bearish Band",
2418 value_type: IndicatorValueType::F64,
2419 },
2420 OUTPUT_DIRECTION,
2421 IndicatorOutputInfo {
2422 id: "discovery_bull",
2423 label: "Discovery Bull",
2424 value_type: IndicatorValueType::F64,
2425 },
2426 IndicatorOutputInfo {
2427 id: "discovery_bear",
2428 label: "Discovery Bear",
2429 value_type: IndicatorValueType::F64,
2430 },
2431];
2432const OUTPUTS_MACD_WAVE_SIGNAL_PRO: &[IndicatorOutputInfo] = &[
2433 OUTPUT_DIFF,
2434 OUTPUT_DEA,
2435 IndicatorOutputInfo {
2436 id: "macd_histogram",
2437 label: "MACD Histogram",
2438 value_type: IndicatorValueType::F64,
2439 },
2440 OUTPUT_LINE_CONVERGENCE,
2441 OUTPUT_BUY_SIGNAL,
2442 OUTPUT_SELL_SIGNAL,
2443];
2444const OUTPUTS_HEMA_TREND_LEVELS: &[IndicatorOutputInfo] = &[
2445 IndicatorOutputInfo {
2446 id: "fast_hema",
2447 label: "Fast HEMA",
2448 value_type: IndicatorValueType::F64,
2449 },
2450 IndicatorOutputInfo {
2451 id: "slow_hema",
2452 label: "Slow HEMA",
2453 value_type: IndicatorValueType::F64,
2454 },
2455 IndicatorOutputInfo {
2456 id: "trend_direction",
2457 label: "Trend Direction",
2458 value_type: IndicatorValueType::F64,
2459 },
2460 IndicatorOutputInfo {
2461 id: "bar_state",
2462 label: "Bar State",
2463 value_type: IndicatorValueType::F64,
2464 },
2465 IndicatorOutputInfo {
2466 id: "bullish_crossover",
2467 label: "Bullish Crossover",
2468 value_type: IndicatorValueType::F64,
2469 },
2470 IndicatorOutputInfo {
2471 id: "bearish_crossunder",
2472 label: "Bearish Crossunder",
2473 value_type: IndicatorValueType::F64,
2474 },
2475 IndicatorOutputInfo {
2476 id: "box_offset",
2477 label: "Box Offset",
2478 value_type: IndicatorValueType::F64,
2479 },
2480 IndicatorOutputInfo {
2481 id: "bull_box_top",
2482 label: "Bull Box Top",
2483 value_type: IndicatorValueType::F64,
2484 },
2485 IndicatorOutputInfo {
2486 id: "bull_box_bottom",
2487 label: "Bull Box Bottom",
2488 value_type: IndicatorValueType::F64,
2489 },
2490 IndicatorOutputInfo {
2491 id: "bear_box_top",
2492 label: "Bear Box Top",
2493 value_type: IndicatorValueType::F64,
2494 },
2495 IndicatorOutputInfo {
2496 id: "bear_box_bottom",
2497 label: "Bear Box Bottom",
2498 value_type: IndicatorValueType::F64,
2499 },
2500 IndicatorOutputInfo {
2501 id: "bullish_test",
2502 label: "Bullish Test",
2503 value_type: IndicatorValueType::F64,
2504 },
2505 IndicatorOutputInfo {
2506 id: "bearish_test",
2507 label: "Bearish Test",
2508 value_type: IndicatorValueType::F64,
2509 },
2510 IndicatorOutputInfo {
2511 id: "bullish_test_level",
2512 label: "Bullish Test Level",
2513 value_type: IndicatorValueType::F64,
2514 },
2515 IndicatorOutputInfo {
2516 id: "bearish_test_level",
2517 label: "Bearish Test Level",
2518 value_type: IndicatorValueType::F64,
2519 },
2520];
2521const OUTPUTS_MONOTONICITY_INDEX: &[IndicatorOutputInfo] =
2522 &[OUTPUT_INDEX, OUTPUT_CUMULATIVE_MEAN, OUTPUT_UPPER_BOUND];
2523const OUTPUTS_IN_PHASE_LEAD: &[IndicatorOutputInfo] = &[OUTPUT_IN_PHASE, OUTPUT_LEAD_SERIES];
2524const OUTPUTS_OSCILLATOR_SIGNAL_HISTOGRAM: &[IndicatorOutputInfo] = &[
2525 IndicatorOutputInfo {
2526 id: "oscillator",
2527 label: "Oscillator",
2528 value_type: IndicatorValueType::F64,
2529 },
2530 OUTPUT_SIGNAL,
2531 OUTPUT_HISTOGRAM,
2532];
2533const OUTPUTS_VOSS: &[IndicatorOutputInfo] = &[
2534 IndicatorOutputInfo {
2535 id: "voss",
2536 label: "Voss",
2537 value_type: IndicatorValueType::F64,
2538 },
2539 IndicatorOutputInfo {
2540 id: "filt",
2541 label: "Filter",
2542 value_type: IndicatorValueType::F64,
2543 },
2544];
2545const OUTPUTS_PIVOT: &[IndicatorOutputInfo] = &[
2546 IndicatorOutputInfo {
2547 id: "pp",
2548 label: "PP",
2549 value_type: IndicatorValueType::F64,
2550 },
2551 IndicatorOutputInfo {
2552 id: "r1",
2553 label: "R1",
2554 value_type: IndicatorValueType::F64,
2555 },
2556 IndicatorOutputInfo {
2557 id: "r2",
2558 label: "R2",
2559 value_type: IndicatorValueType::F64,
2560 },
2561 IndicatorOutputInfo {
2562 id: "r3",
2563 label: "R3",
2564 value_type: IndicatorValueType::F64,
2565 },
2566 IndicatorOutputInfo {
2567 id: "r4",
2568 label: "R4",
2569 value_type: IndicatorValueType::F64,
2570 },
2571 IndicatorOutputInfo {
2572 id: "s1",
2573 label: "S1",
2574 value_type: IndicatorValueType::F64,
2575 },
2576 IndicatorOutputInfo {
2577 id: "s2",
2578 label: "S2",
2579 value_type: IndicatorValueType::F64,
2580 },
2581 IndicatorOutputInfo {
2582 id: "s3",
2583 label: "S3",
2584 value_type: IndicatorValueType::F64,
2585 },
2586 IndicatorOutputInfo {
2587 id: "s4",
2588 label: "S4",
2589 value_type: IndicatorValueType::F64,
2590 },
2591];
2592
2593const PARAM_PERIOD: IndicatorParamInfo = IndicatorParamInfo {
2594 key: "period",
2595 label: "Period",
2596 kind: IndicatorParamKind::Int,
2597 required: true,
2598 default: Some(ParamValueStatic::Int(14)),
2599 min: Some(1.0),
2600 max: None,
2601 step: Some(1.0),
2602 enum_values: EMPTY_ENUM_VALUES,
2603 notes: None,
2604};
2605
2606const PARAMS_PERIOD_ONLY: &[IndicatorParamInfo] = &[PARAM_PERIOD];
2607
2608const PARAM_OUTPUT_MAMA: IndicatorParamInfo = IndicatorParamInfo {
2609 key: "output",
2610 label: "Output",
2611 kind: IndicatorParamKind::EnumString,
2612 required: false,
2613 default: Some(ParamValueStatic::EnumString("mama")),
2614 min: None,
2615 max: None,
2616 step: None,
2617 enum_values: ENUM_VALUES_MA_OUTPUT,
2618 notes: None,
2619};
2620
2621const PARAM_OUTPUT_EHLERS_PMA: IndicatorParamInfo = IndicatorParamInfo {
2622 key: "output",
2623 label: "Output",
2624 kind: IndicatorParamKind::EnumString,
2625 required: false,
2626 default: Some(ParamValueStatic::EnumString("predict")),
2627 min: None,
2628 max: None,
2629 step: None,
2630 enum_values: ENUM_VALUES_PMA_OUTPUT,
2631 notes: None,
2632};
2633
2634const PARAM_OUTPUT_EHLERS_ADAPTIVE_CG: IndicatorParamInfo = IndicatorParamInfo {
2635 key: "output",
2636 label: "Output",
2637 kind: IndicatorParamKind::EnumString,
2638 required: false,
2639 default: Some(ParamValueStatic::EnumString("cg")),
2640 min: None,
2641 max: None,
2642 step: None,
2643 enum_values: ENUM_VALUES_EHLERS_ADAPTIVE_CG_OUTPUT,
2644 notes: None,
2645};
2646
2647const PARAM_OUTPUT_ADAPTIVE_MOMENTUM_OSCILLATOR: IndicatorParamInfo = IndicatorParamInfo {
2648 key: "output",
2649 label: "Output",
2650 kind: IndicatorParamKind::EnumString,
2651 required: false,
2652 default: Some(ParamValueStatic::EnumString("amo")),
2653 min: None,
2654 max: None,
2655 step: None,
2656 enum_values: ENUM_VALUES_ADAPTIVE_MOMENTUM_OSCILLATOR_OUTPUT,
2657 notes: None,
2658};
2659
2660const PARAM_OUTPUT_BUFF_AVERAGES: IndicatorParamInfo = IndicatorParamInfo {
2661 key: "output",
2662 label: "Output",
2663 kind: IndicatorParamKind::EnumString,
2664 required: false,
2665 default: Some(ParamValueStatic::EnumString("fast")),
2666 min: None,
2667 max: None,
2668 step: None,
2669 enum_values: ENUM_VALUES_BUFF_OUTPUT,
2670 notes: None,
2671};
2672
2673const PARAM_OUTPUT_EDCT3: IndicatorParamInfo = IndicatorParamInfo {
2674 key: "output",
2675 label: "Output",
2676 kind: IndicatorParamKind::EnumString,
2677 required: false,
2678 default: Some(ParamValueStatic::EnumString("corrected")),
2679 min: None,
2680 max: None,
2681 step: None,
2682 enum_values: ENUM_VALUES_EDCT3_OUTPUT,
2683 notes: None,
2684};
2685
2686const PARAM_OUTPUT_NORMALIZED_VOLUME_TRUE_RANGE: IndicatorParamInfo = IndicatorParamInfo {
2687 key: "output",
2688 label: "Output",
2689 kind: IndicatorParamKind::EnumString,
2690 required: false,
2691 default: Some(ParamValueStatic::EnumString("normalized_volume")),
2692 min: None,
2693 max: None,
2694 step: None,
2695 enum_values: ENUM_VALUES_NORMALIZED_VOLUME_TRUE_RANGE_OUTPUT,
2696 notes: None,
2697};
2698
2699const PARAM_ANCHOR: IndicatorParamInfo = IndicatorParamInfo {
2700 key: "anchor",
2701 label: "Anchor",
2702 kind: IndicatorParamKind::EnumString,
2703 required: false,
2704 default: Some(ParamValueStatic::EnumString("1d")),
2705 min: None,
2706 max: None,
2707 step: None,
2708 enum_values: EMPTY_ENUM_VALUES,
2709 notes: Some("Anchor string for session boundary"),
2710};
2711
2712const PARAM_STRICT: IndicatorParamInfo = IndicatorParamInfo {
2713 key: "strict",
2714 label: "Strict",
2715 kind: IndicatorParamKind::Bool,
2716 required: false,
2717 default: Some(ParamValueStatic::Bool(false)),
2718 min: None,
2719 max: None,
2720 step: None,
2721 enum_values: ENUM_VALUES_TRUE_FALSE,
2722 notes: None,
2723};
2724
2725const PARAM_NONE: &[IndicatorParamInfo] = &[];
2726
2727const PARAM_RSI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2728 key: "period",
2729 label: "Period",
2730 kind: IndicatorParamKind::Int,
2731 required: false,
2732 default: Some(ParamValueStatic::Int(14)),
2733 min: Some(1.0),
2734 max: None,
2735 step: Some(1.0),
2736 enum_values: EMPTY_ENUM_VALUES,
2737 notes: None,
2738}];
2739
2740const PARAM_ROC_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2741 key: "period",
2742 label: "Period",
2743 kind: IndicatorParamKind::Int,
2744 required: false,
2745 default: Some(ParamValueStatic::Int(9)),
2746 min: Some(1.0),
2747 max: None,
2748 step: Some(1.0),
2749 enum_values: EMPTY_ENUM_VALUES,
2750 notes: None,
2751}];
2752
2753const PARAM_LINEAR_CORRELATION_OSCILLATOR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2754 key: "period",
2755 label: "Period",
2756 kind: IndicatorParamKind::Int,
2757 required: false,
2758 default: Some(ParamValueStatic::Int(14)),
2759 min: Some(1.0),
2760 max: None,
2761 step: Some(1.0),
2762 enum_values: EMPTY_ENUM_VALUES,
2763 notes: None,
2764}];
2765
2766const PARAM_EHLERS_FM_DEMODULATOR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2767 key: "period",
2768 label: "Period",
2769 kind: IndicatorParamKind::Int,
2770 required: false,
2771 default: Some(ParamValueStatic::Int(30)),
2772 min: Some(1.0),
2773 max: None,
2774 step: Some(1.0),
2775 enum_values: EMPTY_ENUM_VALUES,
2776 notes: Some("Published default is 30."),
2777}];
2778
2779const PARAM_ADOSC: &[IndicatorParamInfo] = &[
2780 IndicatorParamInfo {
2781 key: "short_period",
2782 label: "Short Period",
2783 kind: IndicatorParamKind::Int,
2784 required: false,
2785 default: Some(ParamValueStatic::Int(3)),
2786 min: Some(1.0),
2787 max: None,
2788 step: Some(1.0),
2789 enum_values: EMPTY_ENUM_VALUES,
2790 notes: None,
2791 },
2792 IndicatorParamInfo {
2793 key: "long_period",
2794 label: "Long Period",
2795 kind: IndicatorParamKind::Int,
2796 required: false,
2797 default: Some(ParamValueStatic::Int(10)),
2798 min: Some(1.0),
2799 max: None,
2800 step: Some(1.0),
2801 enum_values: EMPTY_ENUM_VALUES,
2802 notes: None,
2803 },
2804];
2805
2806const PARAM_AO: &[IndicatorParamInfo] = &[
2807 IndicatorParamInfo {
2808 key: "short_period",
2809 label: "Short Period",
2810 kind: IndicatorParamKind::Int,
2811 required: false,
2812 default: Some(ParamValueStatic::Int(5)),
2813 min: Some(1.0),
2814 max: None,
2815 step: Some(1.0),
2816 enum_values: EMPTY_ENUM_VALUES,
2817 notes: None,
2818 },
2819 IndicatorParamInfo {
2820 key: "long_period",
2821 label: "Long Period",
2822 kind: IndicatorParamKind::Int,
2823 required: false,
2824 default: Some(ParamValueStatic::Int(34)),
2825 min: Some(1.0),
2826 max: None,
2827 step: Some(1.0),
2828 enum_values: EMPTY_ENUM_VALUES,
2829 notes: None,
2830 },
2831];
2832
2833const PARAM_EFI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2834 key: "period",
2835 label: "Period",
2836 kind: IndicatorParamKind::Int,
2837 required: false,
2838 default: Some(ParamValueStatic::Int(13)),
2839 min: Some(1.0),
2840 max: None,
2841 step: Some(1.0),
2842 enum_values: EMPTY_ENUM_VALUES,
2843 notes: None,
2844}];
2845
2846const PARAM_MFI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2847 key: "period",
2848 label: "Period",
2849 kind: IndicatorParamKind::Int,
2850 required: false,
2851 default: Some(ParamValueStatic::Int(14)),
2852 min: Some(1.0),
2853 max: None,
2854 step: Some(1.0),
2855 enum_values: EMPTY_ENUM_VALUES,
2856 notes: None,
2857}];
2858
2859const PARAM_MASS_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2860 key: "period",
2861 label: "Period",
2862 kind: IndicatorParamKind::Int,
2863 required: false,
2864 default: Some(ParamValueStatic::Int(5)),
2865 min: Some(1.0),
2866 max: None,
2867 step: Some(1.0),
2868 enum_values: EMPTY_ENUM_VALUES,
2869 notes: None,
2870}];
2871
2872const PARAM_KVO: &[IndicatorParamInfo] = &[
2873 IndicatorParamInfo {
2874 key: "short_period",
2875 label: "Short Period",
2876 kind: IndicatorParamKind::Int,
2877 required: false,
2878 default: Some(ParamValueStatic::Int(2)),
2879 min: Some(1.0),
2880 max: None,
2881 step: Some(1.0),
2882 enum_values: EMPTY_ENUM_VALUES,
2883 notes: None,
2884 },
2885 IndicatorParamInfo {
2886 key: "long_period",
2887 label: "Long Period",
2888 kind: IndicatorParamKind::Int,
2889 required: false,
2890 default: Some(ParamValueStatic::Int(5)),
2891 min: Some(1.0),
2892 max: None,
2893 step: Some(1.0),
2894 enum_values: EMPTY_ENUM_VALUES,
2895 notes: None,
2896 },
2897];
2898
2899const PARAM_VOSC: &[IndicatorParamInfo] = &[
2900 IndicatorParamInfo {
2901 key: "short_period",
2902 label: "Short Period",
2903 kind: IndicatorParamKind::Int,
2904 required: false,
2905 default: Some(ParamValueStatic::Int(2)),
2906 min: Some(1.0),
2907 max: None,
2908 step: Some(1.0),
2909 enum_values: EMPTY_ENUM_VALUES,
2910 notes: None,
2911 },
2912 IndicatorParamInfo {
2913 key: "long_period",
2914 label: "Long Period",
2915 kind: IndicatorParamKind::Int,
2916 required: false,
2917 default: Some(ParamValueStatic::Int(5)),
2918 min: Some(1.0),
2919 max: None,
2920 step: Some(1.0),
2921 enum_values: EMPTY_ENUM_VALUES,
2922 notes: None,
2923 },
2924];
2925
2926const PARAM_MOM_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2927 key: "period",
2928 label: "Period",
2929 kind: IndicatorParamKind::Int,
2930 required: false,
2931 default: Some(ParamValueStatic::Int(10)),
2932 min: Some(1.0),
2933 max: None,
2934 step: Some(1.0),
2935 enum_values: EMPTY_ENUM_VALUES,
2936 notes: None,
2937}];
2938
2939const PARAM_CMO_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2940 key: "period",
2941 label: "Period",
2942 kind: IndicatorParamKind::Int,
2943 required: false,
2944 default: Some(ParamValueStatic::Int(14)),
2945 min: Some(1.0),
2946 max: None,
2947 step: Some(1.0),
2948 enum_values: EMPTY_ENUM_VALUES,
2949 notes: None,
2950}];
2951
2952const PARAM_ROCP_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2953 key: "period",
2954 label: "Period",
2955 kind: IndicatorParamKind::Int,
2956 required: false,
2957 default: Some(ParamValueStatic::Int(10)),
2958 min: Some(1.0),
2959 max: None,
2960 step: Some(1.0),
2961 enum_values: EMPTY_ENUM_VALUES,
2962 notes: None,
2963}];
2964
2965const PARAM_ROCR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
2966 key: "period",
2967 label: "Period",
2968 kind: IndicatorParamKind::Int,
2969 required: false,
2970 default: Some(ParamValueStatic::Int(10)),
2971 min: Some(1.0),
2972 max: None,
2973 step: Some(1.0),
2974 enum_values: EMPTY_ENUM_VALUES,
2975 notes: None,
2976}];
2977
2978const PARAM_PPO: &[IndicatorParamInfo] = &[
2979 IndicatorParamInfo {
2980 key: "fast_period",
2981 label: "Fast Period",
2982 kind: IndicatorParamKind::Int,
2983 required: false,
2984 default: Some(ParamValueStatic::Int(12)),
2985 min: Some(1.0),
2986 max: None,
2987 step: Some(1.0),
2988 enum_values: EMPTY_ENUM_VALUES,
2989 notes: None,
2990 },
2991 IndicatorParamInfo {
2992 key: "slow_period",
2993 label: "Slow Period",
2994 kind: IndicatorParamKind::Int,
2995 required: false,
2996 default: Some(ParamValueStatic::Int(26)),
2997 min: Some(1.0),
2998 max: None,
2999 step: Some(1.0),
3000 enum_values: EMPTY_ENUM_VALUES,
3001 notes: None,
3002 },
3003 IndicatorParamInfo {
3004 key: "ma_type",
3005 label: "MA Type",
3006 kind: IndicatorParamKind::EnumString,
3007 required: false,
3008 default: Some(ParamValueStatic::EnumString("sma")),
3009 min: None,
3010 max: None,
3011 step: None,
3012 enum_values: EMPTY_ENUM_VALUES,
3013 notes: None,
3014 },
3015];
3016
3017const PARAM_TRIX_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3018 key: "period",
3019 label: "Period",
3020 kind: IndicatorParamKind::Int,
3021 required: false,
3022 default: Some(ParamValueStatic::Int(18)),
3023 min: Some(1.0),
3024 max: None,
3025 step: Some(1.0),
3026 enum_values: EMPTY_ENUM_VALUES,
3027 notes: None,
3028}];
3029
3030const PARAM_TSI: &[IndicatorParamInfo] = &[
3031 IndicatorParamInfo {
3032 key: "long_period",
3033 label: "Long Period",
3034 kind: IndicatorParamKind::Int,
3035 required: false,
3036 default: Some(ParamValueStatic::Int(25)),
3037 min: Some(1.0),
3038 max: None,
3039 step: Some(1.0),
3040 enum_values: EMPTY_ENUM_VALUES,
3041 notes: None,
3042 },
3043 IndicatorParamInfo {
3044 key: "short_period",
3045 label: "Short Period",
3046 kind: IndicatorParamKind::Int,
3047 required: false,
3048 default: Some(ParamValueStatic::Int(13)),
3049 min: Some(1.0),
3050 max: None,
3051 step: Some(1.0),
3052 enum_values: EMPTY_ENUM_VALUES,
3053 notes: None,
3054 },
3055];
3056
3057const PARAM_STDDEV: &[IndicatorParamInfo] = &[
3058 IndicatorParamInfo {
3059 key: "period",
3060 label: "Period",
3061 kind: IndicatorParamKind::Int,
3062 required: false,
3063 default: Some(ParamValueStatic::Int(5)),
3064 min: Some(1.0),
3065 max: None,
3066 step: Some(1.0),
3067 enum_values: EMPTY_ENUM_VALUES,
3068 notes: None,
3069 },
3070 IndicatorParamInfo {
3071 key: "nbdev",
3072 label: "NB Dev",
3073 kind: IndicatorParamKind::Float,
3074 required: false,
3075 default: Some(ParamValueStatic::Float(1.0)),
3076 min: None,
3077 max: None,
3078 step: None,
3079 enum_values: EMPTY_ENUM_VALUES,
3080 notes: None,
3081 },
3082];
3083
3084const PARAM_WILLR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3085 key: "period",
3086 label: "Period",
3087 kind: IndicatorParamKind::Int,
3088 required: false,
3089 default: Some(ParamValueStatic::Int(14)),
3090 min: Some(1.0),
3091 max: None,
3092 step: Some(1.0),
3093 enum_values: EMPTY_ENUM_VALUES,
3094 notes: None,
3095}];
3096
3097const PARAM_ULTOSC: &[IndicatorParamInfo] = &[
3098 IndicatorParamInfo {
3099 key: "timeperiod1",
3100 label: "Time Period 1",
3101 kind: IndicatorParamKind::Int,
3102 required: false,
3103 default: Some(ParamValueStatic::Int(7)),
3104 min: Some(1.0),
3105 max: None,
3106 step: Some(1.0),
3107 enum_values: EMPTY_ENUM_VALUES,
3108 notes: None,
3109 },
3110 IndicatorParamInfo {
3111 key: "timeperiod2",
3112 label: "Time Period 2",
3113 kind: IndicatorParamKind::Int,
3114 required: false,
3115 default: Some(ParamValueStatic::Int(14)),
3116 min: Some(1.0),
3117 max: None,
3118 step: Some(1.0),
3119 enum_values: EMPTY_ENUM_VALUES,
3120 notes: None,
3121 },
3122 IndicatorParamInfo {
3123 key: "timeperiod3",
3124 label: "Time Period 3",
3125 kind: IndicatorParamKind::Int,
3126 required: false,
3127 default: Some(ParamValueStatic::Int(28)),
3128 min: Some(1.0),
3129 max: None,
3130 step: Some(1.0),
3131 enum_values: EMPTY_ENUM_VALUES,
3132 notes: None,
3133 },
3134];
3135
3136const PARAM_RANGE_BREAKOUT_SIGNALS: &[IndicatorParamInfo] = &[
3137 IndicatorParamInfo {
3138 key: "range_length",
3139 label: "Range Length",
3140 kind: IndicatorParamKind::Int,
3141 required: false,
3142 default: Some(ParamValueStatic::Int(20)),
3143 min: Some(1.0),
3144 max: None,
3145 step: Some(1.0),
3146 enum_values: EMPTY_ENUM_VALUES,
3147 notes: None,
3148 },
3149 IndicatorParamInfo {
3150 key: "confirmation_length",
3151 label: "Confirmation Length",
3152 kind: IndicatorParamKind::Int,
3153 required: false,
3154 default: Some(ParamValueStatic::Int(5)),
3155 min: Some(1.0),
3156 max: None,
3157 step: Some(1.0),
3158 enum_values: EMPTY_ENUM_VALUES,
3159 notes: Some("Uses bar-direction volume as the up/down volume proxy because TradingView lower-timeframe volume requests are unavailable in vector-ta."),
3160 },
3161];
3162
3163const PARAM_EXPONENTIAL_TREND: &[IndicatorParamInfo] = &[
3164 IndicatorParamInfo {
3165 key: "exp_rate",
3166 label: "Exponential Rate",
3167 kind: IndicatorParamKind::Float,
3168 required: false,
3169 default: Some(ParamValueStatic::Float(0.00003)),
3170 min: Some(0.0),
3171 max: Some(0.5),
3172 step: Some(0.01),
3173 enum_values: EMPTY_ENUM_VALUES,
3174 notes: None,
3175 },
3176 IndicatorParamInfo {
3177 key: "initial_distance",
3178 label: "Initial Distance",
3179 kind: IndicatorParamKind::Float,
3180 required: false,
3181 default: Some(ParamValueStatic::Float(4.0)),
3182 min: Some(0.1),
3183 max: None,
3184 step: Some(0.1),
3185 enum_values: EMPTY_ENUM_VALUES,
3186 notes: Some("The supplied Pine source seeds trend state at bar index 100 after a fixed ATR(14)-based supertrend-style initialization."),
3187 },
3188 IndicatorParamInfo {
3189 key: "width_multiplier",
3190 label: "Width Multiplier",
3191 kind: IndicatorParamKind::Float,
3192 required: false,
3193 default: Some(ParamValueStatic::Float(1.0)),
3194 min: Some(0.1),
3195 max: None,
3196 step: Some(0.1),
3197 enum_values: EMPTY_ENUM_VALUES,
3198 notes: None,
3199 },
3200];
3201const PARAM_TREND_FLOW_TRAIL: &[IndicatorParamInfo] = &[
3202 IndicatorParamInfo {
3203 key: "alpha_length",
3204 label: "AlphaTrail Length",
3205 kind: IndicatorParamKind::Int,
3206 required: false,
3207 default: Some(ParamValueStatic::Int(33)),
3208 min: Some(1.0),
3209 max: None,
3210 step: Some(1.0),
3211 enum_values: &[],
3212 notes: None,
3213 },
3214 IndicatorParamInfo {
3215 key: "alpha_multiplier",
3216 label: "AlphaTrail Multiplier",
3217 kind: IndicatorParamKind::Float,
3218 required: false,
3219 default: Some(ParamValueStatic::Float(3.3)),
3220 min: Some(0.1),
3221 max: None,
3222 step: Some(0.1),
3223 enum_values: &[],
3224 notes: None,
3225 },
3226 IndicatorParamInfo {
3227 key: "mfi_length",
3228 label: "MFI Length",
3229 kind: IndicatorParamKind::Int,
3230 required: false,
3231 default: Some(ParamValueStatic::Int(14)),
3232 min: Some(1.0),
3233 max: Some(2000.0),
3234 step: Some(1.0),
3235 enum_values: &[],
3236 notes: None,
3237 },
3238];
3239
3240const PARAM_APO: &[IndicatorParamInfo] = &[
3241 IndicatorParamInfo {
3242 key: "short_period",
3243 label: "Short Period",
3244 kind: IndicatorParamKind::Int,
3245 required: false,
3246 default: Some(ParamValueStatic::Int(10)),
3247 min: Some(1.0),
3248 max: None,
3249 step: Some(1.0),
3250 enum_values: EMPTY_ENUM_VALUES,
3251 notes: None,
3252 },
3253 IndicatorParamInfo {
3254 key: "long_period",
3255 label: "Long Period",
3256 kind: IndicatorParamKind::Int,
3257 required: false,
3258 default: Some(ParamValueStatic::Int(20)),
3259 min: Some(1.0),
3260 max: None,
3261 step: Some(1.0),
3262 enum_values: EMPTY_ENUM_VALUES,
3263 notes: None,
3264 },
3265];
3266
3267const PARAM_CCI_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3268 key: "period",
3269 label: "Period",
3270 kind: IndicatorParamKind::Int,
3271 required: false,
3272 default: Some(ParamValueStatic::Int(14)),
3273 min: Some(1.0),
3274 max: None,
3275 step: Some(1.0),
3276 enum_values: EMPTY_ENUM_VALUES,
3277 notes: None,
3278}];
3279
3280const PARAM_CCI_CYCLE: &[IndicatorParamInfo] = &[
3281 IndicatorParamInfo {
3282 key: "length",
3283 label: "Length",
3284 kind: IndicatorParamKind::Int,
3285 required: false,
3286 default: Some(ParamValueStatic::Int(10)),
3287 min: Some(1.0),
3288 max: None,
3289 step: Some(1.0),
3290 enum_values: EMPTY_ENUM_VALUES,
3291 notes: None,
3292 },
3293 IndicatorParamInfo {
3294 key: "factor",
3295 label: "Factor",
3296 kind: IndicatorParamKind::Float,
3297 required: false,
3298 default: Some(ParamValueStatic::Float(0.5)),
3299 min: Some(0.0),
3300 max: Some(1.0),
3301 step: None,
3302 enum_values: EMPTY_ENUM_VALUES,
3303 notes: None,
3304 },
3305];
3306
3307const PARAM_CFO: &[IndicatorParamInfo] = &[
3308 IndicatorParamInfo {
3309 key: "period",
3310 label: "Period",
3311 kind: IndicatorParamKind::Int,
3312 required: false,
3313 default: Some(ParamValueStatic::Int(14)),
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: "scalar",
3322 label: "Scalar",
3323 kind: IndicatorParamKind::Float,
3324 required: false,
3325 default: Some(ParamValueStatic::Float(100.0)),
3326 min: None,
3327 max: None,
3328 step: None,
3329 enum_values: EMPTY_ENUM_VALUES,
3330 notes: None,
3331 },
3332];
3333
3334const PARAM_ER_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3335 key: "period",
3336 label: "Period",
3337 kind: IndicatorParamKind::Int,
3338 required: false,
3339 default: Some(ParamValueStatic::Int(5)),
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_KURTOSIS_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3348 key: "period",
3349 label: "Period",
3350 kind: IndicatorParamKind::Int,
3351 required: false,
3352 default: Some(ParamValueStatic::Int(5)),
3353 min: Some(1.0),
3354 max: None,
3355 step: Some(1.0),
3356 enum_values: EMPTY_ENUM_VALUES,
3357 notes: None,
3358}];
3359
3360const PARAM_NATR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3361 key: "period",
3362 label: "Period",
3363 kind: IndicatorParamKind::Int,
3364 required: false,
3365 default: Some(ParamValueStatic::Int(14)),
3366 min: Some(1.0),
3367 max: None,
3368 step: Some(1.0),
3369 enum_values: EMPTY_ENUM_VALUES,
3370 notes: None,
3371}];
3372
3373const PARAM_REVERSE_RSI: &[IndicatorParamInfo] = &[
3374 IndicatorParamInfo {
3375 key: "rsi_length",
3376 label: "RSI Length",
3377 kind: IndicatorParamKind::Int,
3378 required: false,
3379 default: Some(ParamValueStatic::Int(14)),
3380 min: Some(1.0),
3381 max: None,
3382 step: Some(1.0),
3383 enum_values: EMPTY_ENUM_VALUES,
3384 notes: None,
3385 },
3386 IndicatorParamInfo {
3387 key: "rsi_level",
3388 label: "RSI Level",
3389 kind: IndicatorParamKind::Float,
3390 required: false,
3391 default: Some(ParamValueStatic::Float(50.0)),
3392 min: Some(0.0),
3393 max: Some(100.0),
3394 step: None,
3395 enum_values: EMPTY_ENUM_VALUES,
3396 notes: None,
3397 },
3398];
3399
3400const PARAM_QSTICK: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3401 key: "period",
3402 label: "Period",
3403 kind: IndicatorParamKind::Int,
3404 required: false,
3405 default: Some(ParamValueStatic::Int(5)),
3406 min: Some(1.0),
3407 max: None,
3408 step: Some(1.0),
3409 enum_values: EMPTY_ENUM_VALUES,
3410 notes: None,
3411}];
3412
3413const PARAM_MEAN_AD_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3414 key: "period",
3415 label: "Period",
3416 kind: IndicatorParamKind::Int,
3417 required: false,
3418 default: Some(ParamValueStatic::Int(5)),
3419 min: Some(1.0),
3420 max: None,
3421 step: Some(1.0),
3422 enum_values: EMPTY_ENUM_VALUES,
3423 notes: None,
3424}];
3425
3426const PARAM_MEDIUM_AD_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3427 key: "period",
3428 label: "Period",
3429 kind: IndicatorParamKind::Int,
3430 required: false,
3431 default: Some(ParamValueStatic::Int(5)),
3432 min: Some(1.0),
3433 max: None,
3434 step: Some(1.0),
3435 enum_values: EMPTY_ENUM_VALUES,
3436 notes: None,
3437}];
3438
3439const PARAM_DEVIATION: &[IndicatorParamInfo] = &[
3440 IndicatorParamInfo {
3441 key: "period",
3442 label: "Period",
3443 kind: IndicatorParamKind::Int,
3444 required: false,
3445 default: Some(ParamValueStatic::Int(9)),
3446 min: Some(1.0),
3447 max: None,
3448 step: Some(1.0),
3449 enum_values: EMPTY_ENUM_VALUES,
3450 notes: None,
3451 },
3452 IndicatorParamInfo {
3453 key: "devtype",
3454 label: "Dev Type",
3455 kind: IndicatorParamKind::Int,
3456 required: false,
3457 default: Some(ParamValueStatic::Int(0)),
3458 min: Some(0.0),
3459 max: Some(2.0),
3460 step: Some(1.0),
3461 enum_values: EMPTY_ENUM_VALUES,
3462 notes: None,
3463 },
3464];
3465
3466const PARAM_DPO_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3467 key: "period",
3468 label: "Period",
3469 kind: IndicatorParamKind::Int,
3470 required: false,
3471 default: Some(ParamValueStatic::Int(5)),
3472 min: Some(1.0),
3473 max: None,
3474 step: Some(1.0),
3475 enum_values: EMPTY_ENUM_VALUES,
3476 notes: None,
3477}];
3478
3479const PARAM_LRSI_ALPHA: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3480 key: "alpha",
3481 label: "Alpha",
3482 kind: IndicatorParamKind::Float,
3483 required: false,
3484 default: Some(ParamValueStatic::Float(0.2)),
3485 min: Some(0.0),
3486 max: Some(1.0),
3487 step: None,
3488 enum_values: EMPTY_ENUM_VALUES,
3489 notes: None,
3490}];
3491
3492const PARAM_VELOCITY: &[IndicatorParamInfo] = &[
3493 IndicatorParamInfo {
3494 key: "length",
3495 label: "Length",
3496 kind: IndicatorParamKind::Int,
3497 required: false,
3498 default: Some(ParamValueStatic::Int(21)),
3499 min: Some(2.0),
3500 max: Some(60.0),
3501 step: Some(1.0),
3502 enum_values: EMPTY_ENUM_VALUES,
3503 notes: Some("TradingView script default source is HLCC4."),
3504 },
3505 IndicatorParamInfo {
3506 key: "smooth_length",
3507 label: "Smoothing Length",
3508 kind: IndicatorParamKind::Int,
3509 required: false,
3510 default: Some(ParamValueStatic::Int(5)),
3511 min: Some(1.0),
3512 max: Some(9.0),
3513 step: Some(1.0),
3514 enum_values: EMPTY_ENUM_VALUES,
3515 notes: None,
3516 },
3517];
3518
3519const PARAM_ADAPTIVE_MOMENTUM_OSCILLATOR: &[IndicatorParamInfo] = &[
3520 IndicatorParamInfo {
3521 key: "length",
3522 label: "Data Length",
3523 kind: IndicatorParamKind::Int,
3524 required: false,
3525 default: Some(ParamValueStatic::Int(14)),
3526 min: Some(1.0),
3527 max: None,
3528 step: Some(1.0),
3529 enum_values: EMPTY_ENUM_VALUES,
3530 notes: None,
3531 },
3532 IndicatorParamInfo {
3533 key: "smoothing_length",
3534 label: "Smoothing Length",
3535 kind: IndicatorParamKind::Int,
3536 required: false,
3537 default: Some(ParamValueStatic::Int(9)),
3538 min: Some(1.0),
3539 max: None,
3540 step: Some(1.0),
3541 enum_values: EMPTY_ENUM_VALUES,
3542 notes: None,
3543 },
3544 PARAM_OUTPUT_ADAPTIVE_MOMENTUM_OSCILLATOR,
3545];
3546
3547const PARAM_NORMALIZED_VOLUME_TRUE_RANGE: &[IndicatorParamInfo] = &[
3548 IndicatorParamInfo {
3549 key: "true_range_style",
3550 label: "True Range Style",
3551 kind: IndicatorParamKind::EnumString,
3552 required: false,
3553 default: Some(ParamValueStatic::EnumString("body")),
3554 min: None,
3555 max: None,
3556 step: None,
3557 enum_values: &["body", "hl", "delta"],
3558 notes: None,
3559 },
3560 IndicatorParamInfo {
3561 key: "outlier_range",
3562 label: "Outlier Range",
3563 kind: IndicatorParamKind::Float,
3564 required: false,
3565 default: Some(ParamValueStatic::Float(5.0)),
3566 min: Some(0.5),
3567 max: None,
3568 step: Some(0.25),
3569 enum_values: EMPTY_ENUM_VALUES,
3570 notes: None,
3571 },
3572 IndicatorParamInfo {
3573 key: "atr_length",
3574 label: "ATR Length",
3575 kind: IndicatorParamKind::Int,
3576 required: false,
3577 default: Some(ParamValueStatic::Int(14)),
3578 min: Some(2.0),
3579 max: None,
3580 step: Some(1.0),
3581 enum_values: EMPTY_ENUM_VALUES,
3582 notes: None,
3583 },
3584 IndicatorParamInfo {
3585 key: "volume_length",
3586 label: "Average Volume Length",
3587 kind: IndicatorParamKind::Int,
3588 required: false,
3589 default: Some(ParamValueStatic::Int(14)),
3590 min: Some(2.0),
3591 max: None,
3592 step: Some(1.0),
3593 enum_values: EMPTY_ENUM_VALUES,
3594 notes: None,
3595 },
3596 PARAM_OUTPUT_NORMALIZED_VOLUME_TRUE_RANGE,
3597];
3598
3599const PARAM_PVI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3600 key: "initial_value",
3601 label: "Initial Value",
3602 kind: IndicatorParamKind::Float,
3603 required: false,
3604 default: Some(ParamValueStatic::Float(1000.0)),
3605 min: None,
3606 max: None,
3607 step: None,
3608 enum_values: EMPTY_ENUM_VALUES,
3609 notes: None,
3610}];
3611
3612const PARAM_PFE: &[IndicatorParamInfo] = &[
3613 IndicatorParamInfo {
3614 key: "period",
3615 label: "Period",
3616 kind: IndicatorParamKind::Int,
3617 required: false,
3618 default: Some(ParamValueStatic::Int(10)),
3619 min: Some(1.0),
3620 max: None,
3621 step: Some(1.0),
3622 enum_values: EMPTY_ENUM_VALUES,
3623 notes: None,
3624 },
3625 IndicatorParamInfo {
3626 key: "smoothing",
3627 label: "Smoothing",
3628 kind: IndicatorParamKind::Int,
3629 required: false,
3630 default: Some(ParamValueStatic::Int(5)),
3631 min: Some(1.0),
3632 max: None,
3633 step: Some(1.0),
3634 enum_values: EMPTY_ENUM_VALUES,
3635 notes: None,
3636 },
3637];
3638
3639const PARAM_PERCENTILE_NEAREST_RANK: &[IndicatorParamInfo] = &[
3640 IndicatorParamInfo {
3641 key: "length",
3642 label: "Length",
3643 kind: IndicatorParamKind::Int,
3644 required: false,
3645 default: Some(ParamValueStatic::Int(15)),
3646 min: Some(1.0),
3647 max: None,
3648 step: Some(1.0),
3649 enum_values: EMPTY_ENUM_VALUES,
3650 notes: None,
3651 },
3652 IndicatorParamInfo {
3653 key: "percentage",
3654 label: "Percentage",
3655 kind: IndicatorParamKind::Float,
3656 required: false,
3657 default: Some(ParamValueStatic::Float(50.0)),
3658 min: Some(0.0),
3659 max: Some(100.0),
3660 step: None,
3661 enum_values: EMPTY_ENUM_VALUES,
3662 notes: None,
3663 },
3664];
3665
3666const PARAM_UI: &[IndicatorParamInfo] = &[
3667 IndicatorParamInfo {
3668 key: "period",
3669 label: "Period",
3670 kind: IndicatorParamKind::Int,
3671 required: false,
3672 default: Some(ParamValueStatic::Int(14)),
3673 min: Some(1.0),
3674 max: None,
3675 step: Some(1.0),
3676 enum_values: EMPTY_ENUM_VALUES,
3677 notes: None,
3678 },
3679 IndicatorParamInfo {
3680 key: "scalar",
3681 label: "Scalar",
3682 kind: IndicatorParamKind::Float,
3683 required: false,
3684 default: Some(ParamValueStatic::Float(100.0)),
3685 min: None,
3686 max: None,
3687 step: None,
3688 enum_values: EMPTY_ENUM_VALUES,
3689 notes: None,
3690 },
3691];
3692
3693const PARAM_ZSCORE: &[IndicatorParamInfo] = &[
3694 IndicatorParamInfo {
3695 key: "period",
3696 label: "Period",
3697 kind: IndicatorParamKind::Int,
3698 required: false,
3699 default: Some(ParamValueStatic::Int(14)),
3700 min: Some(1.0),
3701 max: None,
3702 step: Some(1.0),
3703 enum_values: EMPTY_ENUM_VALUES,
3704 notes: None,
3705 },
3706 IndicatorParamInfo {
3707 key: "ma_type",
3708 label: "MA Type",
3709 kind: IndicatorParamKind::EnumString,
3710 required: false,
3711 default: Some(ParamValueStatic::EnumString("sma")),
3712 min: None,
3713 max: None,
3714 step: None,
3715 enum_values: EMPTY_ENUM_VALUES,
3716 notes: None,
3717 },
3718 IndicatorParamInfo {
3719 key: "nbdev",
3720 label: "NB Dev",
3721 kind: IndicatorParamKind::Float,
3722 required: false,
3723 default: Some(ParamValueStatic::Float(1.0)),
3724 min: None,
3725 max: None,
3726 step: None,
3727 enum_values: EMPTY_ENUM_VALUES,
3728 notes: None,
3729 },
3730 IndicatorParamInfo {
3731 key: "devtype",
3732 label: "Dev Type",
3733 kind: IndicatorParamKind::Int,
3734 required: false,
3735 default: Some(ParamValueStatic::Int(0)),
3736 min: Some(0.0),
3737 max: Some(2.0),
3738 step: Some(1.0),
3739 enum_values: EMPTY_ENUM_VALUES,
3740 notes: None,
3741 },
3742];
3743
3744const PARAM_MIDPOINT_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3745 key: "period",
3746 label: "Period",
3747 kind: IndicatorParamKind::Int,
3748 required: false,
3749 default: Some(ParamValueStatic::Int(14)),
3750 min: Some(1.0),
3751 max: None,
3752 step: Some(1.0),
3753 enum_values: EMPTY_ENUM_VALUES,
3754 notes: None,
3755}];
3756
3757const PARAM_MIDPRICE_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3758 key: "period",
3759 label: "Period",
3760 kind: IndicatorParamKind::Int,
3761 required: false,
3762 default: Some(ParamValueStatic::Int(14)),
3763 min: Some(1.0),
3764 max: None,
3765 step: Some(1.0),
3766 enum_values: EMPTY_ENUM_VALUES,
3767 notes: None,
3768}];
3769
3770const PARAM_TSF_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3771 key: "period",
3772 label: "Period",
3773 kind: IndicatorParamKind::Int,
3774 required: false,
3775 default: Some(ParamValueStatic::Int(14)),
3776 min: Some(2.0),
3777 max: None,
3778 step: Some(1.0),
3779 enum_values: EMPTY_ENUM_VALUES,
3780 notes: None,
3781}];
3782
3783const PARAM_VAR: &[IndicatorParamInfo] = &[
3784 IndicatorParamInfo {
3785 key: "period",
3786 label: "Period",
3787 kind: IndicatorParamKind::Int,
3788 required: false,
3789 default: Some(ParamValueStatic::Int(14)),
3790 min: Some(1.0),
3791 max: None,
3792 step: Some(1.0),
3793 enum_values: EMPTY_ENUM_VALUES,
3794 notes: None,
3795 },
3796 IndicatorParamInfo {
3797 key: "nbdev",
3798 label: "NB Dev",
3799 kind: IndicatorParamKind::Float,
3800 required: false,
3801 default: Some(ParamValueStatic::Float(1.0)),
3802 min: None,
3803 max: None,
3804 step: None,
3805 enum_values: EMPTY_ENUM_VALUES,
3806 notes: None,
3807 },
3808];
3809
3810const PARAM_ADX_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3811 key: "period",
3812 label: "Period",
3813 kind: IndicatorParamKind::Int,
3814 required: false,
3815 default: Some(ParamValueStatic::Int(14)),
3816 min: Some(1.0),
3817 max: None,
3818 step: Some(1.0),
3819 enum_values: EMPTY_ENUM_VALUES,
3820 notes: None,
3821}];
3822
3823const PARAM_DX_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3824 key: "period",
3825 label: "Period",
3826 kind: IndicatorParamKind::Int,
3827 required: false,
3828 default: Some(ParamValueStatic::Int(14)),
3829 min: Some(1.0),
3830 max: None,
3831 step: Some(1.0),
3832 enum_values: EMPTY_ENUM_VALUES,
3833 notes: None,
3834}];
3835
3836const PARAM_ATR_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3837 key: "length",
3838 label: "Length",
3839 kind: IndicatorParamKind::Int,
3840 required: false,
3841 default: Some(ParamValueStatic::Int(14)),
3842 min: Some(1.0),
3843 max: None,
3844 step: Some(1.0),
3845 enum_values: EMPTY_ENUM_VALUES,
3846 notes: None,
3847}];
3848
3849const PARAM_PSYCHOLOGICAL_LINE: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3850 key: "length",
3851 label: "Length",
3852 kind: IndicatorParamKind::Int,
3853 required: false,
3854 default: Some(ParamValueStatic::Int(20)),
3855 min: Some(1.0),
3856 max: None,
3857 step: Some(1.0),
3858 enum_values: EMPTY_ENUM_VALUES,
3859 notes: None,
3860}];
3861
3862const PARAM_RANK_CORRELATION_INDEX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3863 key: "length",
3864 label: "Length",
3865 kind: IndicatorParamKind::Int,
3866 required: false,
3867 default: Some(ParamValueStatic::Int(12)),
3868 min: Some(2.0),
3869 max: None,
3870 step: Some(1.0),
3871 enum_values: EMPTY_ENUM_VALUES,
3872 notes: None,
3873}];
3874
3875const PARAM_LINEAR_REGRESSION_INTENSITY: &[IndicatorParamInfo] = &[
3876 IndicatorParamInfo {
3877 key: "lookback_period",
3878 label: "Lookback Period",
3879 kind: IndicatorParamKind::Int,
3880 required: false,
3881 default: Some(ParamValueStatic::Int(12)),
3882 min: Some(1.0),
3883 max: None,
3884 step: Some(1.0),
3885 enum_values: EMPTY_ENUM_VALUES,
3886 notes: None,
3887 },
3888 IndicatorParamInfo {
3889 key: "range_tolerance",
3890 label: "Range Tolerance",
3891 kind: IndicatorParamKind::Float,
3892 required: false,
3893 default: Some(ParamValueStatic::Float(90.0)),
3894 min: Some(0.0),
3895 max: Some(100.0),
3896 step: Some(1.0),
3897 enum_values: EMPTY_ENUM_VALUES,
3898 notes: None,
3899 },
3900 IndicatorParamInfo {
3901 key: "linreg_length",
3902 label: "Linear Regression Length",
3903 kind: IndicatorParamKind::Int,
3904 required: false,
3905 default: Some(ParamValueStatic::Int(90)),
3906 min: Some(1.0),
3907 max: None,
3908 step: Some(1.0),
3909 enum_values: EMPTY_ENUM_VALUES,
3910 notes: None,
3911 },
3912];
3913
3914const PARAM_TREND_FOLLOWER: &[IndicatorParamInfo] = &[
3915 IndicatorParamInfo {
3916 key: "matype",
3917 label: "MA Type",
3918 kind: IndicatorParamKind::EnumString,
3919 required: false,
3920 default: Some(ParamValueStatic::EnumString("ema")),
3921 min: None,
3922 max: None,
3923 step: None,
3924 enum_values: EMPTY_ENUM_VALUES,
3925 notes: None,
3926 },
3927 IndicatorParamInfo {
3928 key: "trend_period",
3929 label: "Trend Period",
3930 kind: IndicatorParamKind::Int,
3931 required: false,
3932 default: Some(ParamValueStatic::Int(20)),
3933 min: Some(1.0),
3934 max: None,
3935 step: Some(1.0),
3936 enum_values: EMPTY_ENUM_VALUES,
3937 notes: None,
3938 },
3939 IndicatorParamInfo {
3940 key: "ma_period",
3941 label: "MA Period",
3942 kind: IndicatorParamKind::Int,
3943 required: false,
3944 default: Some(ParamValueStatic::Int(20)),
3945 min: Some(1.0),
3946 max: None,
3947 step: Some(1.0),
3948 enum_values: EMPTY_ENUM_VALUES,
3949 notes: None,
3950 },
3951 IndicatorParamInfo {
3952 key: "channel_rate_percent",
3953 label: "Channel Rate %",
3954 kind: IndicatorParamKind::Float,
3955 required: false,
3956 default: Some(ParamValueStatic::Float(1.0)),
3957 min: Some(0.0000001),
3958 max: None,
3959 step: Some(0.1),
3960 enum_values: EMPTY_ENUM_VALUES,
3961 notes: None,
3962 },
3963 IndicatorParamInfo {
3964 key: "use_linear_regression",
3965 label: "Use Linear Regression",
3966 kind: IndicatorParamKind::Bool,
3967 required: false,
3968 default: Some(ParamValueStatic::Bool(true)),
3969 min: None,
3970 max: None,
3971 step: None,
3972 enum_values: ENUM_VALUES_TRUE_FALSE,
3973 notes: None,
3974 },
3975 IndicatorParamInfo {
3976 key: "linear_regression_period",
3977 label: "Linear Regression Period",
3978 kind: IndicatorParamKind::Int,
3979 required: false,
3980 default: Some(ParamValueStatic::Int(5)),
3981 min: Some(2.0),
3982 max: None,
3983 step: Some(1.0),
3984 enum_values: EMPTY_ENUM_VALUES,
3985 notes: None,
3986 },
3987];
3988
3989const PARAM_TREND_DIRECTION_FORCE_INDEX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
3990 key: "length",
3991 label: "Length",
3992 kind: IndicatorParamKind::Int,
3993 required: false,
3994 default: Some(ParamValueStatic::Int(10)),
3995 min: Some(1.0),
3996 max: None,
3997 step: Some(1.0),
3998 enum_values: EMPTY_ENUM_VALUES,
3999 notes: None,
4000}];
4001
4002const PARAM_TREND_CONTINUATION_FACTOR: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4003 key: "length",
4004 label: "Length",
4005 kind: IndicatorParamKind::Int,
4006 required: false,
4007 default: Some(ParamValueStatic::Int(35)),
4008 min: Some(1.0),
4009 max: None,
4010 step: Some(1.0),
4011 enum_values: EMPTY_ENUM_VALUES,
4012 notes: None,
4013}];
4014
4015const PARAM_EWMA_VOLATILITY: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4016 key: "lambda",
4017 label: "Lambda",
4018 kind: IndicatorParamKind::Float,
4019 required: false,
4020 default: Some(ParamValueStatic::Float(0.94)),
4021 min: Some(0.0),
4022 max: Some(0.999_999_999),
4023 step: Some(0.01),
4024 enum_values: EMPTY_ENUM_VALUES,
4025 notes: Some("Pine-faithful EMA mapping from lambda to rounded EMA length"),
4026}];
4027
4028const PARAM_ACCUMULATION_SWING_INDEX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4029 key: "daily_limit",
4030 label: "Daily Limit",
4031 kind: IndicatorParamKind::Float,
4032 required: false,
4033 default: Some(ParamValueStatic::Float(10_000.0)),
4034 min: Some(0.000_000_001),
4035 max: None,
4036 step: Some(1.0),
4037 enum_values: EMPTY_ENUM_VALUES,
4038 notes: Some("Pine-faithful Wilder ASI daily limit divisor"),
4039}];
4040
4041const PARAM_DAILY_FACTOR: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4042 key: "threshold_level",
4043 label: "Threshold Level",
4044 kind: IndicatorParamKind::Float,
4045 required: false,
4046 default: Some(ParamValueStatic::Float(0.35)),
4047 min: Some(0.0),
4048 max: Some(1.0),
4049 step: Some(0.01),
4050 enum_values: EMPTY_ENUM_VALUES,
4051 notes: Some(
4052 "Daily Factor threshold used for the strong signal state; EMA length is fixed at 14",
4053 ),
4054}];
4055
4056const PARAM_MOVING_AVERAGE_CROSS_PROBABILITY: &[IndicatorParamInfo] = &[
4057 IndicatorParamInfo {
4058 key: "ma_type",
4059 label: "MA Type",
4060 kind: IndicatorParamKind::EnumString,
4061 required: false,
4062 default: Some(ParamValueStatic::EnumString("ema")),
4063 min: None,
4064 max: None,
4065 step: None,
4066 enum_values: ENUM_VALUES_MOVING_AVERAGE_CROSS_PROBABILITY_MA_TYPE,
4067 notes: Some("Moving-average mode used for the fast and slow baseline pair"),
4068 },
4069 IndicatorParamInfo {
4070 key: "smoothing_window",
4071 label: "Smoothing Window",
4072 kind: IndicatorParamKind::Int,
4073 required: false,
4074 default: Some(ParamValueStatic::Int(7)),
4075 min: Some(2.0),
4076 max: None,
4077 step: Some(1.0),
4078 enum_values: EMPTY_ENUM_VALUES,
4079 notes: Some(
4080 "Hull moving-average and standard-deviation lookback used for the forecast envelope",
4081 ),
4082 },
4083 IndicatorParamInfo {
4084 key: "slow_length",
4085 label: "Slow Length",
4086 kind: IndicatorParamKind::Int,
4087 required: false,
4088 default: Some(ParamValueStatic::Int(30)),
4089 min: Some(2.0),
4090 max: None,
4091 step: Some(1.0),
4092 enum_values: EMPTY_ENUM_VALUES,
4093 notes: Some("Slow moving-average length; must remain greater than fast_length"),
4094 },
4095 IndicatorParamInfo {
4096 key: "fast_length",
4097 label: "Fast Length",
4098 kind: IndicatorParamKind::Int,
4099 required: false,
4100 default: Some(ParamValueStatic::Int(14)),
4101 min: Some(1.0),
4102 max: None,
4103 step: Some(1.0),
4104 enum_values: EMPTY_ENUM_VALUES,
4105 notes: Some("Fast moving-average length used by the crossover simulation"),
4106 },
4107 IndicatorParamInfo {
4108 key: "resolution",
4109 label: "Resolution",
4110 kind: IndicatorParamKind::Int,
4111 required: false,
4112 default: Some(ParamValueStatic::Int(50)),
4113 min: Some(2.0),
4114 max: None,
4115 step: Some(1.0),
4116 enum_values: EMPTY_ENUM_VALUES,
4117 notes: Some("Number of simulated future prices sampled across the forecast envelope"),
4118 },
4119];
4120
4121const PARAM_BULLS_V_BEARS: &[IndicatorParamInfo] = &[
4122 IndicatorParamInfo {
4123 key: "period",
4124 label: "Period",
4125 kind: IndicatorParamKind::Int,
4126 required: false,
4127 default: Some(ParamValueStatic::Int(14)),
4128 min: Some(1.0),
4129 max: None,
4130 step: Some(1.0),
4131 enum_values: EMPTY_ENUM_VALUES,
4132 notes: Some("Moving average period used for the Bulls and Bears pressure baseline"),
4133 },
4134 IndicatorParamInfo {
4135 key: "ma_type",
4136 label: "MA Type",
4137 kind: IndicatorParamKind::EnumString,
4138 required: false,
4139 default: Some(ParamValueStatic::EnumString("ema")),
4140 min: None,
4141 max: None,
4142 step: None,
4143 enum_values: ENUM_VALUES_BULLS_V_BEARS_MA_TYPE,
4144 notes: Some("Moving average type used for the baseline"),
4145 },
4146 IndicatorParamInfo {
4147 key: "calculation_method",
4148 label: "Calculation Method",
4149 kind: IndicatorParamKind::EnumString,
4150 required: false,
4151 default: Some(ParamValueStatic::EnumString("normalized")),
4152 min: None,
4153 max: None,
4154 step: None,
4155 enum_values: ENUM_VALUES_BULLS_V_BEARS_CALCULATION_METHOD,
4156 notes: Some(
4157 "Normalized mode reproduces the v4-style scaling; raw mode uses rolling raw thresholds",
4158 ),
4159 },
4160 IndicatorParamInfo {
4161 key: "normalized_bars_back",
4162 label: "Normalized Bars Back",
4163 kind: IndicatorParamKind::Int,
4164 required: false,
4165 default: Some(ParamValueStatic::Int(120)),
4166 min: Some(1.0),
4167 max: None,
4168 step: Some(1.0),
4169 enum_values: EMPTY_ENUM_VALUES,
4170 notes: Some("Lookback window used for bull and bear normalization"),
4171 },
4172 IndicatorParamInfo {
4173 key: "raw_rolling_period",
4174 label: "Raw Rolling Period",
4175 kind: IndicatorParamKind::Int,
4176 required: false,
4177 default: Some(ParamValueStatic::Int(50)),
4178 min: Some(1.0),
4179 max: None,
4180 step: Some(1.0),
4181 enum_values: EMPTY_ENUM_VALUES,
4182 notes: Some("Rolling window used to derive raw mode dynamic thresholds"),
4183 },
4184 IndicatorParamInfo {
4185 key: "raw_threshold_percentile",
4186 label: "Raw Threshold Percentile",
4187 kind: IndicatorParamKind::Float,
4188 required: false,
4189 default: Some(ParamValueStatic::Float(95.0)),
4190 min: Some(80.0),
4191 max: Some(99.0),
4192 step: Some(0.5),
4193 enum_values: EMPTY_ENUM_VALUES,
4194 notes: Some("Percentile used to map the raw rolling range into upper and lower thresholds"),
4195 },
4196 IndicatorParamInfo {
4197 key: "threshold_level",
4198 label: "Threshold Level",
4199 kind: IndicatorParamKind::Float,
4200 required: false,
4201 default: Some(ParamValueStatic::Float(80.0)),
4202 min: Some(0.0),
4203 max: Some(100.0),
4204 step: Some(1.0),
4205 enum_values: EMPTY_ENUM_VALUES,
4206 notes: Some("Fixed normalized-mode threshold level"),
4207 },
4208];
4209
4210const PARAM_REGRESSION_SLOPE_OSCILLATOR: &[IndicatorParamInfo] = &[
4211 IndicatorParamInfo {
4212 key: "min_range",
4213 label: "Min Range",
4214 kind: IndicatorParamKind::Int,
4215 required: false,
4216 default: Some(ParamValueStatic::Int(10)),
4217 min: Some(2.0),
4218 max: None,
4219 step: Some(1.0),
4220 enum_values: EMPTY_ENUM_VALUES,
4221 notes: Some("Shortest regression lookback sampled by the oscillator"),
4222 },
4223 IndicatorParamInfo {
4224 key: "max_range",
4225 label: "Max Range",
4226 kind: IndicatorParamKind::Int,
4227 required: false,
4228 default: Some(ParamValueStatic::Int(100)),
4229 min: Some(2.0),
4230 max: None,
4231 step: Some(1.0),
4232 enum_values: EMPTY_ENUM_VALUES,
4233 notes: Some("Longest regression lookback sampled by the oscillator"),
4234 },
4235 IndicatorParamInfo {
4236 key: "step",
4237 label: "Step",
4238 kind: IndicatorParamKind::Int,
4239 required: false,
4240 default: Some(ParamValueStatic::Int(5)),
4241 min: Some(1.0),
4242 max: None,
4243 step: Some(1.0),
4244 enum_values: EMPTY_ENUM_VALUES,
4245 notes: Some("Increment between sampled regression lookbacks"),
4246 },
4247 IndicatorParamInfo {
4248 key: "signal_line",
4249 label: "Signal Line",
4250 kind: IndicatorParamKind::Int,
4251 required: false,
4252 default: Some(ParamValueStatic::Int(7)),
4253 min: Some(1.0),
4254 max: None,
4255 step: Some(1.0),
4256 enum_values: EMPTY_ENUM_VALUES,
4257 notes: Some("SMA length applied to the oscillator"),
4258 },
4259];
4260
4261const PARAM_SMOOTH_THEIL_SEN: &[IndicatorParamInfo] = &[
4262 IndicatorParamInfo {
4263 key: "source",
4264 label: "Source",
4265 kind: IndicatorParamKind::EnumString,
4266 required: false,
4267 default: Some(ParamValueStatic::EnumString("close")),
4268 min: None,
4269 max: None,
4270 step: None,
4271 enum_values: ENUM_VALUES_PRICE_SOURCE,
4272 notes: Some("Source series used by the Theil-Sen regression"),
4273 },
4274 IndicatorParamInfo {
4275 key: "length",
4276 label: "Length",
4277 kind: IndicatorParamKind::Int,
4278 required: false,
4279 default: Some(ParamValueStatic::Int(25)),
4280 min: Some(2.0),
4281 max: None,
4282 step: Some(1.0),
4283 enum_values: EMPTY_ENUM_VALUES,
4284 notes: Some("Regression window length"),
4285 },
4286 IndicatorParamInfo {
4287 key: "offset",
4288 label: "Offset",
4289 kind: IndicatorParamKind::Int,
4290 required: false,
4291 default: Some(ParamValueStatic::Int(0)),
4292 min: Some(0.0),
4293 max: None,
4294 step: Some(1.0),
4295 enum_values: EMPTY_ENUM_VALUES,
4296 notes: Some("Lookback offset used for the regression anchor"),
4297 },
4298 IndicatorParamInfo {
4299 key: "multiplier",
4300 label: "Multiplier",
4301 kind: IndicatorParamKind::Float,
4302 required: false,
4303 default: Some(ParamValueStatic::Float(2.0)),
4304 min: Some(0.0),
4305 max: None,
4306 step: Some(0.125),
4307 enum_values: EMPTY_ENUM_VALUES,
4308 notes: Some("Deviation-band scale factor"),
4309 },
4310 IndicatorParamInfo {
4311 key: "slope_style",
4312 label: "Slope Style",
4313 kind: IndicatorParamKind::EnumString,
4314 required: false,
4315 default: Some(ParamValueStatic::EnumString("smooth_median")),
4316 min: None,
4317 max: None,
4318 step: None,
4319 enum_values: ENUM_VALUES_SMOOTH_THEIL_SEN_STAT_STYLE,
4320 notes: Some("Estimator used for pairwise slope aggregation"),
4321 },
4322 IndicatorParamInfo {
4323 key: "residual_style",
4324 label: "Residual Style",
4325 kind: IndicatorParamKind::EnumString,
4326 required: false,
4327 default: Some(ParamValueStatic::EnumString("smooth_median")),
4328 min: None,
4329 max: None,
4330 step: None,
4331 enum_values: ENUM_VALUES_SMOOTH_THEIL_SEN_STAT_STYLE,
4332 notes: Some("Estimator used for intercept aggregation"),
4333 },
4334 IndicatorParamInfo {
4335 key: "deviation_style",
4336 label: "Deviation Style",
4337 kind: IndicatorParamKind::EnumString,
4338 required: false,
4339 default: Some(ParamValueStatic::EnumString("mad")),
4340 min: None,
4341 max: None,
4342 step: None,
4343 enum_values: ENUM_VALUES_SMOOTH_THEIL_SEN_DEVIATION_STYLE,
4344 notes: Some("Deviation method used for the bands"),
4345 },
4346 IndicatorParamInfo {
4347 key: "mad_style",
4348 label: "MAD Style",
4349 kind: IndicatorParamKind::EnumString,
4350 required: false,
4351 default: Some(ParamValueStatic::EnumString("smooth_median")),
4352 min: None,
4353 max: None,
4354 step: None,
4355 enum_values: ENUM_VALUES_SMOOTH_THEIL_SEN_STAT_STYLE,
4356 notes: Some("Estimator used when deviation_style is mad"),
4357 },
4358 IndicatorParamInfo {
4359 key: "include_prediction_in_deviation",
4360 label: "Include Prediction In Deviation",
4361 kind: IndicatorParamKind::Bool,
4362 required: false,
4363 default: Some(ParamValueStatic::Bool(false)),
4364 min: None,
4365 max: None,
4366 step: None,
4367 enum_values: ENUM_VALUES_TRUE_FALSE,
4368 notes: Some("Include the extrapolated offset region in deviation estimation"),
4369 },
4370];
4371
4372const PARAM_L2_EHLERS_SIGNAL_TO_NOISE: &[IndicatorParamInfo] = &[
4373 IndicatorParamInfo {
4374 key: "source",
4375 label: "Source",
4376 kind: IndicatorParamKind::EnumString,
4377 required: false,
4378 default: Some(ParamValueStatic::EnumString("hl2")),
4379 min: None,
4380 max: None,
4381 step: None,
4382 enum_values: ENUM_VALUES_PRICE_SOURCE,
4383 notes: Some("Source used for the Hilbert-transform signal component"),
4384 },
4385 IndicatorParamInfo {
4386 key: "smooth_period",
4387 label: "Smooth Period",
4388 kind: IndicatorParamKind::Int,
4389 required: false,
4390 default: Some(ParamValueStatic::Int(10)),
4391 min: Some(1.0),
4392 max: None,
4393 step: Some(1.0),
4394 enum_values: EMPTY_ENUM_VALUES,
4395 notes: Some("Hilbert-transform scaling period used by the Ehlers SNR calculation"),
4396 },
4397];
4398
4399const PARAM_EHLERS_SMOOTHED_ADAPTIVE_MOMENTUM: &[IndicatorParamInfo] = &[
4400 IndicatorParamInfo {
4401 key: "source",
4402 label: "Source",
4403 kind: IndicatorParamKind::EnumString,
4404 required: false,
4405 default: Some(ParamValueStatic::EnumString("hl2")),
4406 min: None,
4407 max: None,
4408 step: None,
4409 enum_values: ENUM_VALUES_PRICE_SOURCE,
4410 notes: Some("Price source used by the Pine-faithful ESAM core"),
4411 },
4412 IndicatorParamInfo {
4413 key: "alpha",
4414 label: "Alpha",
4415 kind: IndicatorParamKind::Float,
4416 required: false,
4417 default: Some(ParamValueStatic::Float(0.07)),
4418 min: Some(0.0),
4419 max: None,
4420 step: Some(0.01),
4421 enum_values: EMPTY_ENUM_VALUES,
4422 notes: Some("Pine-faithful high-pass alpha term"),
4423 },
4424 IndicatorParamInfo {
4425 key: "cutoff",
4426 label: "Cutoff",
4427 kind: IndicatorParamKind::Float,
4428 required: false,
4429 default: Some(ParamValueStatic::Float(8.0)),
4430 min: Some(0.000_000_001),
4431 max: None,
4432 step: Some(0.1),
4433 enum_values: EMPTY_ENUM_VALUES,
4434 notes: Some("Pine-faithful smoothing cutoff used by the final 3-pole filter"),
4435 },
4436];
4437
4438const PARAM_EHLERS_ADAPTIVE_CYBER_CYCLE: &[IndicatorParamInfo] = &[
4439 IndicatorParamInfo {
4440 key: "source",
4441 label: "Source",
4442 kind: IndicatorParamKind::EnumString,
4443 required: false,
4444 default: Some(ParamValueStatic::EnumString("hl2")),
4445 min: None,
4446 max: None,
4447 step: None,
4448 enum_values: ENUM_VALUES_PRICE_SOURCE,
4449 notes: Some("Price source used by the Adaptive Cyber Cycle core"),
4450 },
4451 IndicatorParamInfo {
4452 key: "alpha",
4453 label: "Alpha",
4454 kind: IndicatorParamKind::Float,
4455 required: false,
4456 default: Some(ParamValueStatic::Float(0.07)),
4457 min: Some(0.0),
4458 max: Some(1.0),
4459 step: Some(0.01),
4460 enum_values: EMPTY_ENUM_VALUES,
4461 notes: Some("Fixed alpha term used by the recursive cycle-estimation stage"),
4462 },
4463];
4464
4465const PARAM_EHLERS_SIMPLE_CYCLE_INDICATOR: &[IndicatorParamInfo] = &[
4466 IndicatorParamInfo {
4467 key: "source",
4468 label: "Source",
4469 kind: IndicatorParamKind::EnumString,
4470 required: false,
4471 default: Some(ParamValueStatic::EnumString("hl2")),
4472 min: None,
4473 max: None,
4474 step: None,
4475 enum_values: ENUM_VALUES_PRICE_SOURCE,
4476 notes: Some("Price source used by the Pine-faithful simple cycle core"),
4477 },
4478 IndicatorParamInfo {
4479 key: "alpha",
4480 label: "Alpha",
4481 kind: IndicatorParamKind::Float,
4482 required: false,
4483 default: Some(ParamValueStatic::Float(0.07)),
4484 min: Some(0.0),
4485 max: Some(1.0),
4486 step: Some(0.01),
4487 enum_values: EMPTY_ENUM_VALUES,
4488 notes: Some("Pine-faithful recursive alpha term used by the cycle filter"),
4489 },
4490];
4491
4492const PARAM_L1_EHLERS_PHASOR: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4493 key: "domestic_cycle_length",
4494 label: "Domestic Cycle Length",
4495 kind: IndicatorParamKind::Int,
4496 required: false,
4497 default: Some(ParamValueStatic::Int(15)),
4498 min: Some(1.0),
4499 max: None,
4500 step: Some(1.0),
4501 enum_values: EMPTY_ENUM_VALUES,
4502 notes: Some("Sliding phasor window length used by the Pine-faithful blackcat phase-angle core"),
4503}];
4504
4505const PARAM_ANDEAN_OSCILLATOR: &[IndicatorParamInfo] = &[
4506 IndicatorParamInfo {
4507 key: "length",
4508 label: "Length",
4509 kind: IndicatorParamKind::Int,
4510 required: false,
4511 default: Some(ParamValueStatic::Int(50)),
4512 min: Some(1.0),
4513 max: None,
4514 step: Some(1.0),
4515 enum_values: EMPTY_ENUM_VALUES,
4516 notes: Some("Envelope EMA length used by the Pine-faithful Andean core"),
4517 },
4518 IndicatorParamInfo {
4519 key: "signal_length",
4520 label: "Signal Length",
4521 kind: IndicatorParamKind::Int,
4522 required: false,
4523 default: Some(ParamValueStatic::Int(9)),
4524 min: Some(1.0),
4525 max: None,
4526 step: Some(1.0),
4527 enum_values: EMPTY_ENUM_VALUES,
4528 notes: Some("EMA length applied to max(bull, bear) for the Pine-faithful signal line"),
4529 },
4530];
4531
4532const PARAM_RANDOM_WALK_INDEX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4533 key: "length",
4534 label: "Length",
4535 kind: IndicatorParamKind::Int,
4536 required: false,
4537 default: Some(ParamValueStatic::Int(14)),
4538 min: Some(1.0),
4539 max: None,
4540 step: Some(1.0),
4541 enum_values: EMPTY_ENUM_VALUES,
4542 notes: Some("Pine-faithful single ATR/history length used by the everget script"),
4543}];
4544
4545const PARAM_PRICE_MOVING_AVERAGE_RATIO_PERCENTILE: &[IndicatorParamInfo] = &[
4546 IndicatorParamInfo {
4547 key: "source",
4548 label: "Source",
4549 kind: IndicatorParamKind::EnumString,
4550 required: false,
4551 default: Some(ParamValueStatic::EnumString("close")),
4552 min: None,
4553 max: None,
4554 step: None,
4555 enum_values: ENUM_VALUES_PRICE_SOURCE,
4556 notes: Some("Price source used for PMAR and PMARP"),
4557 },
4558 IndicatorParamInfo {
4559 key: "ma_length",
4560 label: "PMAR Length",
4561 kind: IndicatorParamKind::Int,
4562 required: false,
4563 default: Some(ParamValueStatic::Int(20)),
4564 min: Some(1.0),
4565 max: None,
4566 step: Some(1.0),
4567 enum_values: EMPTY_ENUM_VALUES,
4568 notes: Some("Moving average length used for PMAR"),
4569 },
4570 IndicatorParamInfo {
4571 key: "ma_type",
4572 label: "PMAR MA Type",
4573 kind: IndicatorParamKind::EnumString,
4574 required: false,
4575 default: Some(ParamValueStatic::EnumString("vwma")),
4576 min: None,
4577 max: None,
4578 step: None,
4579 enum_values: ENUM_VALUES_PMARP_MA_TYPE,
4580 notes: Some("Moving average type used for PMAR"),
4581 },
4582 IndicatorParamInfo {
4583 key: "pmarp_lookback",
4584 label: "PMARP Lookback",
4585 kind: IndicatorParamKind::Int,
4586 required: false,
4587 default: Some(ParamValueStatic::Int(350)),
4588 min: Some(1.0),
4589 max: Some(1900.0),
4590 step: Some(1.0),
4591 enum_values: EMPTY_ENUM_VALUES,
4592 notes: Some("Lookback used by the PMARP percentile count"),
4593 },
4594 IndicatorParamInfo {
4595 key: "signal_ma_length",
4596 label: "Signal MA Length",
4597 kind: IndicatorParamKind::Int,
4598 required: false,
4599 default: Some(ParamValueStatic::Int(20)),
4600 min: Some(1.0),
4601 max: None,
4602 step: Some(1.0),
4603 enum_values: EMPTY_ENUM_VALUES,
4604 notes: Some("Signal moving average length"),
4605 },
4606 IndicatorParamInfo {
4607 key: "signal_ma_type",
4608 label: "Signal MA Type",
4609 kind: IndicatorParamKind::EnumString,
4610 required: false,
4611 default: Some(ParamValueStatic::EnumString("sma")),
4612 min: None,
4613 max: None,
4614 step: None,
4615 enum_values: ENUM_VALUES_PMARP_MA_TYPE,
4616 notes: Some("Moving average type used for the signal line"),
4617 },
4618 IndicatorParamInfo {
4619 key: "line_mode",
4620 label: "Line Mode",
4621 kind: IndicatorParamKind::EnumString,
4622 required: false,
4623 default: Some(ParamValueStatic::EnumString("pmarp")),
4624 min: None,
4625 max: None,
4626 step: None,
4627 enum_values: ENUM_VALUES_PMARP_LINE_MODE,
4628 notes: Some("Main plotted line: raw PMAR or PMARP percentile"),
4629 },
4630];
4631
4632const PARAM_RELATIVE_STRENGTH_INDEX_WAVE_INDICATOR: &[IndicatorParamInfo] = &[
4633 IndicatorParamInfo {
4634 key: "source",
4635 label: "Source",
4636 kind: IndicatorParamKind::EnumString,
4637 required: false,
4638 default: Some(ParamValueStatic::EnumString("hlcc4")),
4639 min: None,
4640 max: None,
4641 step: None,
4642 enum_values: ENUM_VALUES_PRICE_SOURCE,
4643 notes: Some("Price source used for the custom RSI leg"),
4644 },
4645 IndicatorParamInfo {
4646 key: "rsi_length",
4647 label: "RSI Length",
4648 kind: IndicatorParamKind::Int,
4649 required: false,
4650 default: Some(ParamValueStatic::Int(14)),
4651 min: Some(1.0),
4652 max: None,
4653 step: Some(1.0),
4654 enum_values: EMPTY_ENUM_VALUES,
4655 notes: Some("RSI length used for source, high, and low RSI series"),
4656 },
4657 IndicatorParamInfo {
4658 key: "length1",
4659 label: "Length 1",
4660 kind: IndicatorParamKind::Int,
4661 required: false,
4662 default: Some(ParamValueStatic::Int(2)),
4663 min: Some(1.0),
4664 max: None,
4665 step: Some(1.0),
4666 enum_values: EMPTY_ENUM_VALUES,
4667 notes: Some("WMA length used for the first RSI wave line"),
4668 },
4669 IndicatorParamInfo {
4670 key: "length2",
4671 label: "Length 2",
4672 kind: IndicatorParamKind::Int,
4673 required: false,
4674 default: Some(ParamValueStatic::Int(5)),
4675 min: Some(1.0),
4676 max: None,
4677 step: Some(1.0),
4678 enum_values: EMPTY_ENUM_VALUES,
4679 notes: Some("WMA length used for the second RSI wave line"),
4680 },
4681 IndicatorParamInfo {
4682 key: "length3",
4683 label: "Length 3",
4684 kind: IndicatorParamKind::Int,
4685 required: false,
4686 default: Some(ParamValueStatic::Int(9)),
4687 min: Some(1.0),
4688 max: None,
4689 step: Some(1.0),
4690 enum_values: EMPTY_ENUM_VALUES,
4691 notes: Some("WMA length used for the third RSI wave line"),
4692 },
4693 IndicatorParamInfo {
4694 key: "length4",
4695 label: "Length 4",
4696 kind: IndicatorParamKind::Int,
4697 required: false,
4698 default: Some(ParamValueStatic::Int(13)),
4699 min: Some(1.0),
4700 max: None,
4701 step: Some(1.0),
4702 enum_values: EMPTY_ENUM_VALUES,
4703 notes: Some("WMA length used for the fourth RSI wave line"),
4704 },
4705];
4706
4707const PARAM_MESA_STOCHASTIC_MULTI_LENGTH: &[IndicatorParamInfo] = &[
4708 IndicatorParamInfo {
4709 key: "source",
4710 label: "Source",
4711 kind: IndicatorParamKind::EnumString,
4712 required: false,
4713 default: Some(ParamValueStatic::EnumString("close")),
4714 min: None,
4715 max: None,
4716 step: None,
4717 enum_values: ENUM_VALUES_PRICE_SOURCE,
4718 notes: Some("Price source used by the shared MESA filter stage"),
4719 },
4720 IndicatorParamInfo {
4721 key: "length_1",
4722 label: "Length 1",
4723 kind: IndicatorParamKind::Int,
4724 required: false,
4725 default: Some(ParamValueStatic::Int(48)),
4726 min: Some(1.0),
4727 max: None,
4728 step: Some(1.0),
4729 enum_values: EMPTY_ENUM_VALUES,
4730 notes: Some("First Pine-faithful MESA stochastic lookback"),
4731 },
4732 IndicatorParamInfo {
4733 key: "length_2",
4734 label: "Length 2",
4735 kind: IndicatorParamKind::Int,
4736 required: false,
4737 default: Some(ParamValueStatic::Int(21)),
4738 min: Some(1.0),
4739 max: None,
4740 step: Some(1.0),
4741 enum_values: EMPTY_ENUM_VALUES,
4742 notes: Some("Second Pine-faithful MESA stochastic lookback"),
4743 },
4744 IndicatorParamInfo {
4745 key: "length_3",
4746 label: "Length 3",
4747 kind: IndicatorParamKind::Int,
4748 required: false,
4749 default: Some(ParamValueStatic::Int(9)),
4750 min: Some(1.0),
4751 max: None,
4752 step: Some(1.0),
4753 enum_values: EMPTY_ENUM_VALUES,
4754 notes: Some("Third Pine-faithful MESA stochastic lookback"),
4755 },
4756 IndicatorParamInfo {
4757 key: "length_4",
4758 label: "Length 4",
4759 kind: IndicatorParamKind::Int,
4760 required: false,
4761 default: Some(ParamValueStatic::Int(6)),
4762 min: Some(1.0),
4763 max: None,
4764 step: Some(1.0),
4765 enum_values: EMPTY_ENUM_VALUES,
4766 notes: Some("Fourth Pine-faithful MESA stochastic lookback"),
4767 },
4768 IndicatorParamInfo {
4769 key: "trigger_length",
4770 label: "Trigger Length",
4771 kind: IndicatorParamKind::Int,
4772 required: false,
4773 default: Some(ParamValueStatic::Int(2)),
4774 min: Some(1.0),
4775 max: None,
4776 step: Some(1.0),
4777 enum_values: EMPTY_ENUM_VALUES,
4778 notes: Some("SMA length used for all four trigger lines"),
4779 },
4780];
4781
4782const PARAM_SPEARMAN_CORRELATION: &[IndicatorParamInfo] = &[
4783 IndicatorParamInfo {
4784 key: "source",
4785 label: "Source",
4786 kind: IndicatorParamKind::EnumString,
4787 required: false,
4788 default: Some(ParamValueStatic::EnumString("close")),
4789 min: None,
4790 max: None,
4791 step: None,
4792 enum_values: ENUM_VALUES_PRICE_SOURCE,
4793 notes: Some("Primary candle source used for the return series"),
4794 },
4795 IndicatorParamInfo {
4796 key: "comparison_source",
4797 label: "Comparison Source",
4798 kind: IndicatorParamKind::EnumString,
4799 required: false,
4800 default: Some(ParamValueStatic::EnumString("open")),
4801 min: None,
4802 max: None,
4803 step: None,
4804 enum_values: ENUM_VALUES_PRICE_SOURCE,
4805 notes: Some("Secondary candle source used for the comparison return series"),
4806 },
4807 IndicatorParamInfo {
4808 key: "lookback",
4809 label: "Lookback",
4810 kind: IndicatorParamKind::Int,
4811 required: false,
4812 default: Some(ParamValueStatic::Int(30)),
4813 min: Some(1.0),
4814 max: None,
4815 step: Some(1.0),
4816 enum_values: EMPTY_ENUM_VALUES,
4817 notes: Some("Return-window length used for the Spearman rank correlation"),
4818 },
4819 IndicatorParamInfo {
4820 key: "smoothing_length",
4821 label: "Smoothing Length",
4822 kind: IndicatorParamKind::Int,
4823 required: false,
4824 default: Some(ParamValueStatic::Int(3)),
4825 min: Some(1.0),
4826 max: None,
4827 step: Some(1.0),
4828 enum_values: EMPTY_ENUM_VALUES,
4829 notes: Some("Simple moving average length applied to the raw Spearman series"),
4830 },
4831];
4832
4833const PARAM_TREND_TRIGGER_FACTOR: &[IndicatorParamInfo] = &[IndicatorParamInfo {
4834 key: "length",
4835 label: "Length",
4836 kind: IndicatorParamKind::Int,
4837 required: false,
4838 default: Some(ParamValueStatic::Int(15)),
4839 min: Some(1.0),
4840 max: None,
4841 step: Some(1.0),
4842 enum_values: EMPTY_ENUM_VALUES,
4843 notes: Some("Pine-faithful lookback length; the source input in the script is unused"),
4844}];
4845
4846const PARAM_CYCLE_CHANNEL_OSCILLATOR: &[IndicatorParamInfo] = &[
4847 IndicatorParamInfo {
4848 key: "source",
4849 label: "Source",
4850 kind: IndicatorParamKind::EnumString,
4851 required: false,
4852 default: Some(ParamValueStatic::EnumString("close")),
4853 min: None,
4854 max: None,
4855 step: None,
4856 enum_values: ENUM_VALUES_PRICE_SOURCE,
4857 notes: Some("Candle source used for the short and medium RMA center lines"),
4858 },
4859 IndicatorParamInfo {
4860 key: "short_cycle_length",
4861 label: "Short Cycle Length",
4862 kind: IndicatorParamKind::Int,
4863 required: false,
4864 default: Some(ParamValueStatic::Int(10)),
4865 min: Some(2.0),
4866 max: None,
4867 step: Some(1.0),
4868 enum_values: EMPTY_ENUM_VALUES,
4869 notes: Some("Pine-faithful raw short cycle length; the internal RMA period is floor(length / 2)"),
4870 },
4871 IndicatorParamInfo {
4872 key: "medium_cycle_length",
4873 label: "Medium Cycle Length",
4874 kind: IndicatorParamKind::Int,
4875 required: false,
4876 default: Some(ParamValueStatic::Int(30)),
4877 min: Some(2.0),
4878 max: None,
4879 step: Some(1.0),
4880 enum_values: EMPTY_ENUM_VALUES,
4881 notes: Some("Pine-faithful raw medium cycle length; the internal ATR and RMA period is floor(length / 2)"),
4882 },
4883 IndicatorParamInfo {
4884 key: "short_multiplier",
4885 label: "Short Multiplier",
4886 kind: IndicatorParamKind::Float,
4887 required: false,
4888 default: Some(ParamValueStatic::Float(1.0)),
4889 min: Some(0.0),
4890 max: None,
4891 step: Some(0.1),
4892 enum_values: EMPTY_ENUM_VALUES,
4893 notes: Some("Preserved for Pine parity; in the published oscillator script this multiplier cancels out of the fast/slow outputs"),
4894 },
4895 IndicatorParamInfo {
4896 key: "medium_multiplier",
4897 label: "Medium Multiplier",
4898 kind: IndicatorParamKind::Float,
4899 required: false,
4900 default: Some(ParamValueStatic::Float(3.0)),
4901 min: Some(0.0),
4902 max: None,
4903 step: Some(0.1),
4904 enum_values: EMPTY_ENUM_VALUES,
4905 notes: Some("ATR channel multiplier used by the medium cycle oscillator denominator"),
4906 },
4907];
4908
4909const PARAM_VOLATILITY_QUALITY_INDEX: &[IndicatorParamInfo] = &[
4910 IndicatorParamInfo {
4911 key: "fast_length",
4912 label: "Fast Length",
4913 kind: IndicatorParamKind::Int,
4914 required: false,
4915 default: Some(ParamValueStatic::Int(9)),
4916 min: Some(1.0),
4917 max: None,
4918 step: Some(1.0),
4919 enum_values: EMPTY_ENUM_VALUES,
4920 notes: Some("Pine-faithful fast SMA length over cumulative VQI"),
4921 },
4922 IndicatorParamInfo {
4923 key: "slow_length",
4924 label: "Slow Length",
4925 kind: IndicatorParamKind::Int,
4926 required: false,
4927 default: Some(ParamValueStatic::Int(200)),
4928 min: Some(1.0),
4929 max: None,
4930 step: Some(1.0),
4931 enum_values: EMPTY_ENUM_VALUES,
4932 notes: Some("Pine-faithful slow SMA length over cumulative VQI"),
4933 },
4934];
4935
4936const PARAM_VOLUME_ZONE_OSCILLATOR: &[IndicatorParamInfo] = &[
4937 IndicatorParamInfo {
4938 key: "length",
4939 label: "Length",
4940 kind: IndicatorParamKind::Int,
4941 required: false,
4942 default: Some(ParamValueStatic::Int(14)),
4943 min: Some(2.0),
4944 max: None,
4945 step: Some(1.0),
4946 enum_values: EMPTY_ENUM_VALUES,
4947 notes: Some("Pine-faithful EMA length for signed and total volume"),
4948 },
4949 IndicatorParamInfo {
4950 key: "intraday_smoothing",
4951 label: "Intraday Smoothing",
4952 kind: IndicatorParamKind::Bool,
4953 required: false,
4954 default: Some(ParamValueStatic::Bool(true)),
4955 min: None,
4956 max: None,
4957 step: None,
4958 enum_values: ENUM_VALUES_TRUE_FALSE,
4959 notes: Some("Applies the optional Pine intraday EMA smoothing pass"),
4960 },
4961 IndicatorParamInfo {
4962 key: "noise_filter",
4963 label: "Noise Filter",
4964 kind: IndicatorParamKind::Int,
4965 required: false,
4966 default: Some(ParamValueStatic::Int(4)),
4967 min: Some(2.0),
4968 max: None,
4969 step: Some(1.0),
4970 enum_values: EMPTY_ENUM_VALUES,
4971 notes: Some("EMA length used by the optional intraday smoothing pass"),
4972 },
4973];
4974
4975const PARAM_VWAP_DEVIATION_OSCILLATOR: &[IndicatorParamInfo] = &[
4976 IndicatorParamInfo {
4977 key: "session_mode",
4978 label: "Session Mode",
4979 kind: IndicatorParamKind::EnumString,
4980 required: false,
4981 default: Some(ParamValueStatic::EnumString("rolling_bars")),
4982 min: None,
4983 max: None,
4984 step: None,
4985 enum_values: ENUM_VALUES_VDO_SESSION_MODE,
4986 notes: None,
4987 },
4988 IndicatorParamInfo {
4989 key: "rolling_period",
4990 label: "Rolling Period",
4991 kind: IndicatorParamKind::Int,
4992 required: false,
4993 default: Some(ParamValueStatic::Int(20)),
4994 min: Some(1.0),
4995 max: None,
4996 step: Some(1.0),
4997 enum_values: EMPTY_ENUM_VALUES,
4998 notes: None,
4999 },
5000 IndicatorParamInfo {
5001 key: "rolling_days",
5002 label: "Rolling Days",
5003 kind: IndicatorParamKind::Int,
5004 required: false,
5005 default: Some(ParamValueStatic::Int(30)),
5006 min: Some(1.0),
5007 max: None,
5008 step: Some(1.0),
5009 enum_values: EMPTY_ENUM_VALUES,
5010 notes: None,
5011 },
5012 IndicatorParamInfo {
5013 key: "use_close",
5014 label: "Use Close",
5015 kind: IndicatorParamKind::Bool,
5016 required: false,
5017 default: Some(ParamValueStatic::Bool(false)),
5018 min: None,
5019 max: None,
5020 step: None,
5021 enum_values: ENUM_VALUES_TRUE_FALSE,
5022 notes: None,
5023 },
5024 IndicatorParamInfo {
5025 key: "deviation_mode",
5026 label: "Deviation Mode",
5027 kind: IndicatorParamKind::EnumString,
5028 required: false,
5029 default: Some(ParamValueStatic::EnumString("absolute")),
5030 min: None,
5031 max: None,
5032 step: None,
5033 enum_values: ENUM_VALUES_VDO_DEVIATION_MODE,
5034 notes: None,
5035 },
5036 IndicatorParamInfo {
5037 key: "z_window",
5038 label: "Z Window",
5039 kind: IndicatorParamKind::Int,
5040 required: false,
5041 default: Some(ParamValueStatic::Int(50)),
5042 min: Some(5.0),
5043 max: None,
5044 step: Some(1.0),
5045 enum_values: EMPTY_ENUM_VALUES,
5046 notes: None,
5047 },
5048 IndicatorParamInfo {
5049 key: "pct_vol_lookback",
5050 label: "Percent Volatility Lookback",
5051 kind: IndicatorParamKind::Int,
5052 required: false,
5053 default: Some(ParamValueStatic::Int(100)),
5054 min: Some(10.0),
5055 max: None,
5056 step: Some(1.0),
5057 enum_values: EMPTY_ENUM_VALUES,
5058 notes: None,
5059 },
5060 IndicatorParamInfo {
5061 key: "pct_min_sigma",
5062 label: "Percent Minimum Sigma",
5063 kind: IndicatorParamKind::Float,
5064 required: false,
5065 default: Some(ParamValueStatic::Float(0.1)),
5066 min: Some(0.01),
5067 max: None,
5068 step: Some(0.01),
5069 enum_values: EMPTY_ENUM_VALUES,
5070 notes: None,
5071 },
5072 IndicatorParamInfo {
5073 key: "abs_vol_lookback",
5074 label: "Absolute Volatility Lookback",
5075 kind: IndicatorParamKind::Int,
5076 required: false,
5077 default: Some(ParamValueStatic::Int(100)),
5078 min: Some(10.0),
5079 max: None,
5080 step: Some(1.0),
5081 enum_values: EMPTY_ENUM_VALUES,
5082 notes: None,
5083 },
5084];
5085
5086const PARAM_ICHIMOKU_OSCILLATOR: &[IndicatorParamInfo] = &[
5087 IndicatorParamInfo {
5088 key: "source",
5089 label: "Source",
5090 kind: IndicatorParamKind::EnumString,
5091 required: false,
5092 default: Some(ParamValueStatic::EnumString("close")),
5093 min: None,
5094 max: None,
5095 step: None,
5096 enum_values: EMPTY_ENUM_VALUES,
5097 notes: Some("Signal source used for the oscillator signal and chikou inputs"),
5098 },
5099 IndicatorParamInfo {
5100 key: "conversion_periods",
5101 label: "Conversion Length",
5102 kind: IndicatorParamKind::Int,
5103 required: false,
5104 default: Some(ParamValueStatic::Int(9)),
5105 min: Some(1.0),
5106 max: None,
5107 step: Some(1.0),
5108 enum_values: EMPTY_ENUM_VALUES,
5109 notes: None,
5110 },
5111 IndicatorParamInfo {
5112 key: "base_periods",
5113 label: "Base Length",
5114 kind: IndicatorParamKind::Int,
5115 required: false,
5116 default: Some(ParamValueStatic::Int(26)),
5117 min: Some(1.0),
5118 max: None,
5119 step: Some(1.0),
5120 enum_values: EMPTY_ENUM_VALUES,
5121 notes: None,
5122 },
5123 IndicatorParamInfo {
5124 key: "lagging_span_periods",
5125 label: "Leading Span B Length",
5126 kind: IndicatorParamKind::Int,
5127 required: false,
5128 default: Some(ParamValueStatic::Int(52)),
5129 min: Some(1.0),
5130 max: None,
5131 step: Some(1.0),
5132 enum_values: EMPTY_ENUM_VALUES,
5133 notes: None,
5134 },
5135 IndicatorParamInfo {
5136 key: "displacement",
5137 label: "Displacement",
5138 kind: IndicatorParamKind::Int,
5139 required: false,
5140 default: Some(ParamValueStatic::Int(26)),
5141 min: Some(1.0),
5142 max: None,
5143 step: Some(1.0),
5144 enum_values: EMPTY_ENUM_VALUES,
5145 notes: None,
5146 },
5147 IndicatorParamInfo {
5148 key: "ma_length",
5149 label: "MA Length",
5150 kind: IndicatorParamKind::Int,
5151 required: false,
5152 default: Some(ParamValueStatic::Int(12)),
5153 min: Some(1.0),
5154 max: None,
5155 step: Some(1.0),
5156 enum_values: EMPTY_ENUM_VALUES,
5157 notes: None,
5158 },
5159 IndicatorParamInfo {
5160 key: "smoothing_length",
5161 label: "Smoothing Length",
5162 kind: IndicatorParamKind::Int,
5163 required: false,
5164 default: Some(ParamValueStatic::Int(3)),
5165 min: Some(1.0),
5166 max: None,
5167 step: Some(1.0),
5168 enum_values: EMPTY_ENUM_VALUES,
5169 notes: None,
5170 },
5171 IndicatorParamInfo {
5172 key: "extra_smoothing",
5173 label: "Extra Smoothing",
5174 kind: IndicatorParamKind::Bool,
5175 required: false,
5176 default: Some(ParamValueStatic::Bool(true)),
5177 min: None,
5178 max: None,
5179 step: None,
5180 enum_values: ENUM_VALUES_TRUE_FALSE,
5181 notes: None,
5182 },
5183 IndicatorParamInfo {
5184 key: "normalize",
5185 label: "Normalize",
5186 kind: IndicatorParamKind::EnumString,
5187 required: false,
5188 default: Some(ParamValueStatic::EnumString("window")),
5189 min: None,
5190 max: None,
5191 step: None,
5192 enum_values: ENUM_VALUES_ICHI_NORMALIZE_MODE,
5193 notes: None,
5194 },
5195 IndicatorParamInfo {
5196 key: "window_size",
5197 label: "Window Size",
5198 kind: IndicatorParamKind::Int,
5199 required: false,
5200 default: Some(ParamValueStatic::Int(20)),
5201 min: Some(5.0),
5202 max: None,
5203 step: Some(1.0),
5204 enum_values: EMPTY_ENUM_VALUES,
5205 notes: None,
5206 },
5207 IndicatorParamInfo {
5208 key: "clamp",
5209 label: "Clamp",
5210 kind: IndicatorParamKind::Bool,
5211 required: false,
5212 default: Some(ParamValueStatic::Bool(true)),
5213 min: None,
5214 max: None,
5215 step: None,
5216 enum_values: ENUM_VALUES_TRUE_FALSE,
5217 notes: None,
5218 },
5219 IndicatorParamInfo {
5220 key: "top_band",
5221 label: "Top Band",
5222 kind: IndicatorParamKind::Float,
5223 required: false,
5224 default: Some(ParamValueStatic::Float(2.0)),
5225 min: Some(0.0),
5226 max: None,
5227 step: Some(0.25),
5228 enum_values: EMPTY_ENUM_VALUES,
5229 notes: None,
5230 },
5231 IndicatorParamInfo {
5232 key: "mid_band",
5233 label: "Mid Band",
5234 kind: IndicatorParamKind::Float,
5235 required: false,
5236 default: Some(ParamValueStatic::Float(1.5)),
5237 min: Some(0.0),
5238 max: None,
5239 step: Some(0.25),
5240 enum_values: EMPTY_ENUM_VALUES,
5241 notes: None,
5242 },
5243];
5244
5245const PARAM_FOSC_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5246 key: "period",
5247 label: "Period",
5248 kind: IndicatorParamKind::Int,
5249 required: false,
5250 default: Some(ParamValueStatic::Int(5)),
5251 min: Some(1.0),
5252 max: None,
5253 step: Some(1.0),
5254 enum_values: EMPTY_ENUM_VALUES,
5255 notes: None,
5256}];
5257
5258const PARAM_IFT_RSI: &[IndicatorParamInfo] = &[
5259 IndicatorParamInfo {
5260 key: "rsi_period",
5261 label: "RSI Period",
5262 kind: IndicatorParamKind::Int,
5263 required: false,
5264 default: Some(ParamValueStatic::Int(5)),
5265 min: Some(1.0),
5266 max: None,
5267 step: Some(1.0),
5268 enum_values: EMPTY_ENUM_VALUES,
5269 notes: None,
5270 },
5271 IndicatorParamInfo {
5272 key: "wma_period",
5273 label: "WMA Period",
5274 kind: IndicatorParamKind::Int,
5275 required: false,
5276 default: Some(ParamValueStatic::Int(9)),
5277 min: Some(1.0),
5278 max: None,
5279 step: Some(1.0),
5280 enum_values: EMPTY_ENUM_VALUES,
5281 notes: None,
5282 },
5283];
5284
5285const PARAM_DEC_OSC: &[IndicatorParamInfo] = &[
5286 IndicatorParamInfo {
5287 key: "hp_period",
5288 label: "HP Period",
5289 kind: IndicatorParamKind::Int,
5290 required: false,
5291 default: Some(ParamValueStatic::Int(125)),
5292 min: Some(3.0),
5293 max: None,
5294 step: Some(1.0),
5295 enum_values: EMPTY_ENUM_VALUES,
5296 notes: None,
5297 },
5298 IndicatorParamInfo {
5299 key: "k",
5300 label: "K",
5301 kind: IndicatorParamKind::Float,
5302 required: false,
5303 default: Some(ParamValueStatic::Float(1.0)),
5304 min: Some(0.0),
5305 max: None,
5306 step: None,
5307 enum_values: EMPTY_ENUM_VALUES,
5308 notes: Some("Must be positive"),
5309 },
5310];
5311
5312const PARAM_DECYCLER: &[IndicatorParamInfo] = &[
5313 IndicatorParamInfo {
5314 key: "hp_period",
5315 label: "HP Period",
5316 kind: IndicatorParamKind::Int,
5317 required: false,
5318 default: Some(ParamValueStatic::Int(125)),
5319 min: Some(2.0),
5320 max: None,
5321 step: Some(1.0),
5322 enum_values: EMPTY_ENUM_VALUES,
5323 notes: None,
5324 },
5325 IndicatorParamInfo {
5326 key: "k",
5327 label: "K",
5328 kind: IndicatorParamKind::Float,
5329 required: false,
5330 default: Some(ParamValueStatic::Float(0.707)),
5331 min: Some(0.0),
5332 max: None,
5333 step: None,
5334 enum_values: EMPTY_ENUM_VALUES,
5335 notes: Some("Must be positive"),
5336 },
5337];
5338
5339const PARAM_VIDYA: &[IndicatorParamInfo] = &[
5340 IndicatorParamInfo {
5341 key: "short_period",
5342 label: "Short Period",
5343 kind: IndicatorParamKind::Int,
5344 required: false,
5345 default: Some(ParamValueStatic::Int(2)),
5346 min: Some(2.0),
5347 max: None,
5348 step: Some(1.0),
5349 enum_values: EMPTY_ENUM_VALUES,
5350 notes: None,
5351 },
5352 IndicatorParamInfo {
5353 key: "long_period",
5354 label: "Long Period",
5355 kind: IndicatorParamKind::Int,
5356 required: false,
5357 default: Some(ParamValueStatic::Int(5)),
5358 min: Some(2.0),
5359 max: None,
5360 step: Some(1.0),
5361 enum_values: EMPTY_ENUM_VALUES,
5362 notes: None,
5363 },
5364 IndicatorParamInfo {
5365 key: "alpha",
5366 label: "Alpha",
5367 kind: IndicatorParamKind::Float,
5368 required: false,
5369 default: Some(ParamValueStatic::Float(0.2)),
5370 min: Some(0.0),
5371 max: Some(1.0),
5372 step: None,
5373 enum_values: EMPTY_ENUM_VALUES,
5374 notes: None,
5375 },
5376];
5377
5378const PARAM_VLMA: &[IndicatorParamInfo] = &[
5379 IndicatorParamInfo {
5380 key: "min_period",
5381 label: "Min Period",
5382 kind: IndicatorParamKind::Int,
5383 required: false,
5384 default: Some(ParamValueStatic::Int(5)),
5385 min: Some(1.0),
5386 max: None,
5387 step: Some(1.0),
5388 enum_values: EMPTY_ENUM_VALUES,
5389 notes: None,
5390 },
5391 IndicatorParamInfo {
5392 key: "max_period",
5393 label: "Max Period",
5394 kind: IndicatorParamKind::Int,
5395 required: false,
5396 default: Some(ParamValueStatic::Int(50)),
5397 min: Some(1.0),
5398 max: None,
5399 step: Some(1.0),
5400 enum_values: EMPTY_ENUM_VALUES,
5401 notes: None,
5402 },
5403 IndicatorParamInfo {
5404 key: "matype",
5405 label: "MA Type",
5406 kind: IndicatorParamKind::EnumString,
5407 required: false,
5408 default: Some(ParamValueStatic::EnumString("sma")),
5409 min: None,
5410 max: None,
5411 step: None,
5412 enum_values: EMPTY_ENUM_VALUES,
5413 notes: None,
5414 },
5415 IndicatorParamInfo {
5416 key: "devtype",
5417 label: "Deviation Type",
5418 kind: IndicatorParamKind::Int,
5419 required: false,
5420 default: Some(ParamValueStatic::Int(0)),
5421 min: Some(0.0),
5422 max: None,
5423 step: Some(1.0),
5424 enum_values: EMPTY_ENUM_VALUES,
5425 notes: None,
5426 },
5427];
5428
5429const PARAM_LINEARREG_ANGLE_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5430 key: "period",
5431 label: "Period",
5432 kind: IndicatorParamKind::Int,
5433 required: false,
5434 default: Some(ParamValueStatic::Int(14)),
5435 min: Some(2.0),
5436 max: None,
5437 step: Some(1.0),
5438 enum_values: EMPTY_ENUM_VALUES,
5439 notes: None,
5440}];
5441
5442const PARAM_LINEARREG_INTERCEPT_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5443 key: "period",
5444 label: "Period",
5445 kind: IndicatorParamKind::Int,
5446 required: false,
5447 default: Some(ParamValueStatic::Int(14)),
5448 min: Some(1.0),
5449 max: None,
5450 step: Some(1.0),
5451 enum_values: EMPTY_ENUM_VALUES,
5452 notes: None,
5453}];
5454
5455const PARAM_LINEARREG_SLOPE_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5456 key: "period",
5457 label: "Period",
5458 kind: IndicatorParamKind::Int,
5459 required: false,
5460 default: Some(ParamValueStatic::Int(14)),
5461 min: Some(2.0),
5462 max: None,
5463 step: Some(1.0),
5464 enum_values: EMPTY_ENUM_VALUES,
5465 notes: None,
5466}];
5467
5468const PARAM_CG_PERIOD: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5469 key: "period",
5470 label: "Period",
5471 kind: IndicatorParamKind::Int,
5472 required: false,
5473 default: Some(ParamValueStatic::Int(10)),
5474 min: Some(1.0),
5475 max: None,
5476 step: Some(1.0),
5477 enum_values: EMPTY_ENUM_VALUES,
5478 notes: None,
5479}];
5480
5481const PARAM_MACD: &[IndicatorParamInfo] = &[
5482 IndicatorParamInfo {
5483 key: "fast_period",
5484 label: "Fast Period",
5485 kind: IndicatorParamKind::Int,
5486 required: false,
5487 default: Some(ParamValueStatic::Int(12)),
5488 min: Some(1.0),
5489 max: None,
5490 step: Some(1.0),
5491 enum_values: EMPTY_ENUM_VALUES,
5492 notes: None,
5493 },
5494 IndicatorParamInfo {
5495 key: "slow_period",
5496 label: "Slow Period",
5497 kind: IndicatorParamKind::Int,
5498 required: false,
5499 default: Some(ParamValueStatic::Int(26)),
5500 min: Some(1.0),
5501 max: None,
5502 step: Some(1.0),
5503 enum_values: EMPTY_ENUM_VALUES,
5504 notes: None,
5505 },
5506 IndicatorParamInfo {
5507 key: "signal_period",
5508 label: "Signal Period",
5509 kind: IndicatorParamKind::Int,
5510 required: false,
5511 default: Some(ParamValueStatic::Int(9)),
5512 min: Some(1.0),
5513 max: None,
5514 step: Some(1.0),
5515 enum_values: EMPTY_ENUM_VALUES,
5516 notes: None,
5517 },
5518];
5519
5520const PARAM_ADAPTIVE_MACD: &[IndicatorParamInfo] = &[
5521 IndicatorParamInfo {
5522 key: "length",
5523 label: "R2 Period",
5524 kind: IndicatorParamKind::Int,
5525 required: false,
5526 default: Some(ParamValueStatic::Int(20)),
5527 min: Some(2.0),
5528 max: None,
5529 step: Some(1.0),
5530 enum_values: EMPTY_ENUM_VALUES,
5531 notes: None,
5532 },
5533 IndicatorParamInfo {
5534 key: "fast_period",
5535 label: "Fast Period",
5536 kind: IndicatorParamKind::Int,
5537 required: false,
5538 default: Some(ParamValueStatic::Int(10)),
5539 min: Some(2.0),
5540 max: None,
5541 step: Some(1.0),
5542 enum_values: EMPTY_ENUM_VALUES,
5543 notes: None,
5544 },
5545 IndicatorParamInfo {
5546 key: "slow_period",
5547 label: "Slow Period",
5548 kind: IndicatorParamKind::Int,
5549 required: false,
5550 default: Some(ParamValueStatic::Int(20)),
5551 min: Some(2.0),
5552 max: None,
5553 step: Some(1.0),
5554 enum_values: EMPTY_ENUM_VALUES,
5555 notes: None,
5556 },
5557 IndicatorParamInfo {
5558 key: "signal_period",
5559 label: "Signal Period",
5560 kind: IndicatorParamKind::Int,
5561 required: false,
5562 default: Some(ParamValueStatic::Int(9)),
5563 min: Some(2.0),
5564 max: None,
5565 step: Some(1.0),
5566 enum_values: EMPTY_ENUM_VALUES,
5567 notes: None,
5568 },
5569];
5570
5571const PARAM_BOLLINGER: &[IndicatorParamInfo] = &[
5572 IndicatorParamInfo {
5573 key: "period",
5574 label: "Period",
5575 kind: IndicatorParamKind::Int,
5576 required: false,
5577 default: Some(ParamValueStatic::Int(20)),
5578 min: Some(1.0),
5579 max: None,
5580 step: Some(1.0),
5581 enum_values: EMPTY_ENUM_VALUES,
5582 notes: None,
5583 },
5584 IndicatorParamInfo {
5585 key: "devup",
5586 label: "Dev Up",
5587 kind: IndicatorParamKind::Float,
5588 required: false,
5589 default: Some(ParamValueStatic::Float(2.0)),
5590 min: None,
5591 max: None,
5592 step: None,
5593 enum_values: EMPTY_ENUM_VALUES,
5594 notes: None,
5595 },
5596 IndicatorParamInfo {
5597 key: "devdn",
5598 label: "Dev Down",
5599 kind: IndicatorParamKind::Float,
5600 required: false,
5601 default: Some(ParamValueStatic::Float(2.0)),
5602 min: None,
5603 max: None,
5604 step: None,
5605 enum_values: EMPTY_ENUM_VALUES,
5606 notes: None,
5607 },
5608];
5609
5610const PARAM_STOCH: &[IndicatorParamInfo] = &[
5611 IndicatorParamInfo {
5612 key: "fastk_period",
5613 label: "Fast K Period",
5614 kind: IndicatorParamKind::Int,
5615 required: false,
5616 default: Some(ParamValueStatic::Int(14)),
5617 min: Some(1.0),
5618 max: None,
5619 step: Some(1.0),
5620 enum_values: EMPTY_ENUM_VALUES,
5621 notes: None,
5622 },
5623 IndicatorParamInfo {
5624 key: "slowk_period",
5625 label: "Slow K Period",
5626 kind: IndicatorParamKind::Int,
5627 required: false,
5628 default: Some(ParamValueStatic::Int(3)),
5629 min: Some(1.0),
5630 max: None,
5631 step: Some(1.0),
5632 enum_values: EMPTY_ENUM_VALUES,
5633 notes: None,
5634 },
5635 IndicatorParamInfo {
5636 key: "slowd_period",
5637 label: "Slow D Period",
5638 kind: IndicatorParamKind::Int,
5639 required: false,
5640 default: Some(ParamValueStatic::Int(3)),
5641 min: Some(1.0),
5642 max: None,
5643 step: Some(1.0),
5644 enum_values: EMPTY_ENUM_VALUES,
5645 notes: None,
5646 },
5647];
5648
5649const PARAM_STOCHF: &[IndicatorParamInfo] = &[
5650 IndicatorParamInfo {
5651 key: "fastk_period",
5652 label: "Fast K Period",
5653 kind: IndicatorParamKind::Int,
5654 required: false,
5655 default: Some(ParamValueStatic::Int(5)),
5656 min: Some(1.0),
5657 max: None,
5658 step: Some(1.0),
5659 enum_values: EMPTY_ENUM_VALUES,
5660 notes: None,
5661 },
5662 IndicatorParamInfo {
5663 key: "fastd_period",
5664 label: "Fast D Period",
5665 kind: IndicatorParamKind::Int,
5666 required: false,
5667 default: Some(ParamValueStatic::Int(3)),
5668 min: Some(1.0),
5669 max: None,
5670 step: Some(1.0),
5671 enum_values: EMPTY_ENUM_VALUES,
5672 notes: None,
5673 },
5674];
5675
5676const PARAM_VW_MACD: &[IndicatorParamInfo] = &[
5677 IndicatorParamInfo {
5678 key: "fast",
5679 label: "Fast",
5680 kind: IndicatorParamKind::Int,
5681 required: false,
5682 default: Some(ParamValueStatic::Int(12)),
5683 min: Some(1.0),
5684 max: None,
5685 step: Some(1.0),
5686 enum_values: EMPTY_ENUM_VALUES,
5687 notes: None,
5688 },
5689 IndicatorParamInfo {
5690 key: "slow",
5691 label: "Slow",
5692 kind: IndicatorParamKind::Int,
5693 required: false,
5694 default: Some(ParamValueStatic::Int(26)),
5695 min: Some(1.0),
5696 max: None,
5697 step: Some(1.0),
5698 enum_values: EMPTY_ENUM_VALUES,
5699 notes: None,
5700 },
5701 IndicatorParamInfo {
5702 key: "signal",
5703 label: "Signal",
5704 kind: IndicatorParamKind::Int,
5705 required: false,
5706 default: Some(ParamValueStatic::Int(9)),
5707 min: Some(1.0),
5708 max: None,
5709 step: Some(1.0),
5710 enum_values: EMPTY_ENUM_VALUES,
5711 notes: None,
5712 },
5713];
5714
5715const PARAM_VPCI: &[IndicatorParamInfo] = &[
5716 IndicatorParamInfo {
5717 key: "short_range",
5718 label: "Short Range",
5719 kind: IndicatorParamKind::Int,
5720 required: false,
5721 default: Some(ParamValueStatic::Int(5)),
5722 min: Some(1.0),
5723 max: None,
5724 step: Some(1.0),
5725 enum_values: EMPTY_ENUM_VALUES,
5726 notes: None,
5727 },
5728 IndicatorParamInfo {
5729 key: "long_range",
5730 label: "Long Range",
5731 kind: IndicatorParamKind::Int,
5732 required: false,
5733 default: Some(ParamValueStatic::Int(20)),
5734 min: Some(1.0),
5735 max: None,
5736 step: Some(1.0),
5737 enum_values: EMPTY_ENUM_VALUES,
5738 notes: None,
5739 },
5740];
5741
5742const PARAM_TTM_TREND: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5743 key: "period",
5744 label: "Period",
5745 kind: IndicatorParamKind::Int,
5746 required: false,
5747 default: Some(ParamValueStatic::Int(6)),
5748 min: Some(1.0),
5749 max: None,
5750 step: Some(1.0),
5751 enum_values: EMPTY_ENUM_VALUES,
5752 notes: None,
5753}];
5754
5755const PARAM_TTM_SQUEEZE: &[IndicatorParamInfo] = &[
5756 IndicatorParamInfo {
5757 key: "length",
5758 label: "Length",
5759 kind: IndicatorParamKind::Int,
5760 required: false,
5761 default: Some(ParamValueStatic::Int(20)),
5762 min: Some(1.0),
5763 max: None,
5764 step: Some(1.0),
5765 enum_values: EMPTY_ENUM_VALUES,
5766 notes: None,
5767 },
5768 IndicatorParamInfo {
5769 key: "bb_mult",
5770 label: "BB Mult",
5771 kind: IndicatorParamKind::Float,
5772 required: false,
5773 default: Some(ParamValueStatic::Float(2.0)),
5774 min: None,
5775 max: None,
5776 step: None,
5777 enum_values: EMPTY_ENUM_VALUES,
5778 notes: None,
5779 },
5780 IndicatorParamInfo {
5781 key: "kc_high",
5782 label: "KC High",
5783 kind: IndicatorParamKind::Float,
5784 required: false,
5785 default: Some(ParamValueStatic::Float(1.0)),
5786 min: None,
5787 max: None,
5788 step: None,
5789 enum_values: EMPTY_ENUM_VALUES,
5790 notes: None,
5791 },
5792 IndicatorParamInfo {
5793 key: "kc_mid",
5794 label: "KC Mid",
5795 kind: IndicatorParamKind::Float,
5796 required: false,
5797 default: Some(ParamValueStatic::Float(1.5)),
5798 min: None,
5799 max: None,
5800 step: None,
5801 enum_values: EMPTY_ENUM_VALUES,
5802 notes: None,
5803 },
5804 IndicatorParamInfo {
5805 key: "kc_low",
5806 label: "KC Low",
5807 kind: IndicatorParamKind::Float,
5808 required: false,
5809 default: Some(ParamValueStatic::Float(2.0)),
5810 min: None,
5811 max: None,
5812 step: None,
5813 enum_values: EMPTY_ENUM_VALUES,
5814 notes: None,
5815 },
5816];
5817
5818const PARAM_DI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5819 key: "period",
5820 label: "Period",
5821 kind: IndicatorParamKind::Int,
5822 required: false,
5823 default: Some(ParamValueStatic::Int(14)),
5824 min: Some(1.0),
5825 max: None,
5826 step: Some(1.0),
5827 enum_values: EMPTY_ENUM_VALUES,
5828 notes: None,
5829}];
5830
5831const PARAM_DTI: &[IndicatorParamInfo] = &[
5832 IndicatorParamInfo {
5833 key: "r",
5834 label: "R",
5835 kind: IndicatorParamKind::Int,
5836 required: false,
5837 default: Some(ParamValueStatic::Int(14)),
5838 min: Some(1.0),
5839 max: None,
5840 step: Some(1.0),
5841 enum_values: EMPTY_ENUM_VALUES,
5842 notes: None,
5843 },
5844 IndicatorParamInfo {
5845 key: "s",
5846 label: "S",
5847 kind: IndicatorParamKind::Int,
5848 required: false,
5849 default: Some(ParamValueStatic::Int(10)),
5850 min: Some(1.0),
5851 max: None,
5852 step: Some(1.0),
5853 enum_values: EMPTY_ENUM_VALUES,
5854 notes: None,
5855 },
5856 IndicatorParamInfo {
5857 key: "u",
5858 label: "U",
5859 kind: IndicatorParamKind::Int,
5860 required: false,
5861 default: Some(ParamValueStatic::Int(5)),
5862 min: Some(1.0),
5863 max: None,
5864 step: Some(1.0),
5865 enum_values: EMPTY_ENUM_VALUES,
5866 notes: None,
5867 },
5868];
5869
5870const PARAM_DM: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5871 key: "period",
5872 label: "Period",
5873 kind: IndicatorParamKind::Int,
5874 required: false,
5875 default: Some(ParamValueStatic::Int(14)),
5876 min: Some(1.0),
5877 max: None,
5878 step: Some(1.0),
5879 enum_values: EMPTY_ENUM_VALUES,
5880 notes: None,
5881}];
5882
5883const PARAM_DONCHIAN: &[IndicatorParamInfo] = &[IndicatorParamInfo {
5884 key: "period",
5885 label: "Period",
5886 kind: IndicatorParamKind::Int,
5887 required: false,
5888 default: Some(ParamValueStatic::Int(20)),
5889 min: Some(1.0),
5890 max: None,
5891 step: Some(1.0),
5892 enum_values: EMPTY_ENUM_VALUES,
5893 notes: None,
5894}];
5895
5896const PARAM_SUPERTREND: &[IndicatorParamInfo] = &[
5897 IndicatorParamInfo {
5898 key: "period",
5899 label: "Period",
5900 kind: IndicatorParamKind::Int,
5901 required: false,
5902 default: Some(ParamValueStatic::Int(10)),
5903 min: Some(1.0),
5904 max: None,
5905 step: Some(1.0),
5906 enum_values: EMPTY_ENUM_VALUES,
5907 notes: None,
5908 },
5909 IndicatorParamInfo {
5910 key: "factor",
5911 label: "Factor",
5912 kind: IndicatorParamKind::Float,
5913 required: false,
5914 default: Some(ParamValueStatic::Float(3.0)),
5915 min: Some(0.0),
5916 max: None,
5917 step: None,
5918 enum_values: EMPTY_ENUM_VALUES,
5919 notes: None,
5920 },
5921];
5922
5923const PARAM_ADJUSTABLE_MA_ALTERNATING_EXTREMITIES: &[IndicatorParamInfo] = &[
5924 IndicatorParamInfo {
5925 key: "length",
5926 label: "Length",
5927 kind: IndicatorParamKind::Int,
5928 required: false,
5929 default: Some(ParamValueStatic::Int(50)),
5930 min: Some(2.0),
5931 max: None,
5932 step: Some(1.0),
5933 enum_values: EMPTY_ENUM_VALUES,
5934 notes: None,
5935 },
5936 IndicatorParamInfo {
5937 key: "mult",
5938 label: "Multiplier",
5939 kind: IndicatorParamKind::Float,
5940 required: false,
5941 default: Some(ParamValueStatic::Float(2.0)),
5942 min: Some(1.0),
5943 max: None,
5944 step: Some(0.1),
5945 enum_values: EMPTY_ENUM_VALUES,
5946 notes: None,
5947 },
5948 IndicatorParamInfo {
5949 key: "alpha",
5950 label: "Lag",
5951 kind: IndicatorParamKind::Float,
5952 required: false,
5953 default: Some(ParamValueStatic::Float(1.0)),
5954 min: Some(0.0),
5955 max: None,
5956 step: Some(0.1),
5957 enum_values: EMPTY_ENUM_VALUES,
5958 notes: None,
5959 },
5960 IndicatorParamInfo {
5961 key: "beta",
5962 label: "Overshoot",
5963 kind: IndicatorParamKind::Float,
5964 required: false,
5965 default: Some(ParamValueStatic::Float(0.5)),
5966 min: Some(0.0),
5967 max: None,
5968 step: Some(0.1),
5969 enum_values: EMPTY_ENUM_VALUES,
5970 notes: None,
5971 },
5972];
5973
5974const PARAM_SUPERTREND_RECOVERY: &[IndicatorParamInfo] = &[
5975 IndicatorParamInfo {
5976 key: "atr_length",
5977 label: "ATR Length",
5978 kind: IndicatorParamKind::Int,
5979 required: false,
5980 default: Some(ParamValueStatic::Int(10)),
5981 min: Some(1.0),
5982 max: None,
5983 step: Some(1.0),
5984 enum_values: EMPTY_ENUM_VALUES,
5985 notes: None,
5986 },
5987 IndicatorParamInfo {
5988 key: "multiplier",
5989 label: "Base Multiplier",
5990 kind: IndicatorParamKind::Float,
5991 required: false,
5992 default: Some(ParamValueStatic::Float(3.0)),
5993 min: Some(0.1),
5994 max: None,
5995 step: Some(0.1),
5996 enum_values: EMPTY_ENUM_VALUES,
5997 notes: None,
5998 },
5999 IndicatorParamInfo {
6000 key: "alpha_percent",
6001 label: "Recovery Alpha (%)",
6002 kind: IndicatorParamKind::Float,
6003 required: false,
6004 default: Some(ParamValueStatic::Float(5.0)),
6005 min: Some(0.1),
6006 max: Some(100.0),
6007 step: Some(0.1),
6008 enum_values: EMPTY_ENUM_VALUES,
6009 notes: Some("Percentage weight applied to price when the active trend is at a loss relative to the latest switch price"),
6010 },
6011 IndicatorParamInfo {
6012 key: "threshold_atr",
6013 label: "Recovery Threshold (xATR)",
6014 kind: IndicatorParamKind::Float,
6015 required: false,
6016 default: Some(ParamValueStatic::Float(1.0)),
6017 min: Some(0.0),
6018 max: None,
6019 step: Some(0.1),
6020 enum_values: EMPTY_ENUM_VALUES,
6021 notes: Some("Recovery logic activates only when the loss exceeds this many ATRs from the switch price"),
6022 },
6023];
6024
6025const PARAM_STANDARDIZED_PSAR_OSCILLATOR: &[IndicatorParamInfo] = &[
6026 IndicatorParamInfo {
6027 key: "start",
6028 label: "Start",
6029 kind: IndicatorParamKind::Float,
6030 required: false,
6031 default: Some(ParamValueStatic::Float(0.02)),
6032 min: Some(0.0),
6033 max: None,
6034 step: Some(0.0001),
6035 enum_values: EMPTY_ENUM_VALUES,
6036 notes: None,
6037 },
6038 IndicatorParamInfo {
6039 key: "increment",
6040 label: "Increment",
6041 kind: IndicatorParamKind::Float,
6042 required: false,
6043 default: Some(ParamValueStatic::Float(0.0005)),
6044 min: Some(0.0),
6045 max: None,
6046 step: Some(0.0001),
6047 enum_values: EMPTY_ENUM_VALUES,
6048 notes: None,
6049 },
6050 IndicatorParamInfo {
6051 key: "maximum",
6052 label: "Max Value",
6053 kind: IndicatorParamKind::Float,
6054 required: false,
6055 default: Some(ParamValueStatic::Float(0.2)),
6056 min: Some(0.0),
6057 max: None,
6058 step: Some(0.0001),
6059 enum_values: EMPTY_ENUM_VALUES,
6060 notes: None,
6061 },
6062 IndicatorParamInfo {
6063 key: "standardization_length",
6064 label: "Standardization Length",
6065 kind: IndicatorParamKind::Int,
6066 required: false,
6067 default: Some(ParamValueStatic::Int(21)),
6068 min: Some(1.0),
6069 max: None,
6070 step: Some(1.0),
6071 enum_values: EMPTY_ENUM_VALUES,
6072 notes: None,
6073 },
6074 IndicatorParamInfo {
6075 key: "wma_length",
6076 label: "WMA Length",
6077 kind: IndicatorParamKind::Int,
6078 required: false,
6079 default: Some(ParamValueStatic::Int(40)),
6080 min: Some(1.0),
6081 max: None,
6082 step: Some(1.0),
6083 enum_values: EMPTY_ENUM_VALUES,
6084 notes: None,
6085 },
6086 IndicatorParamInfo {
6087 key: "wma_lag",
6088 label: "WMA Lag Length",
6089 kind: IndicatorParamKind::Int,
6090 required: false,
6091 default: Some(ParamValueStatic::Int(3)),
6092 min: Some(0.0),
6093 max: None,
6094 step: Some(1.0),
6095 enum_values: EMPTY_ENUM_VALUES,
6096 notes: None,
6097 },
6098 IndicatorParamInfo {
6099 key: "pivot_left",
6100 label: "Divergence Pivot Detection Length",
6101 kind: IndicatorParamKind::Int,
6102 required: false,
6103 default: Some(ParamValueStatic::Int(15)),
6104 min: Some(1.0),
6105 max: None,
6106 step: Some(1.0),
6107 enum_values: EMPTY_ENUM_VALUES,
6108 notes: None,
6109 },
6110 IndicatorParamInfo {
6111 key: "pivot_right",
6112 label: "Divergence Pivot Confirmation Length",
6113 kind: IndicatorParamKind::Int,
6114 required: false,
6115 default: Some(ParamValueStatic::Int(1)),
6116 min: Some(0.0),
6117 max: None,
6118 step: Some(1.0),
6119 enum_values: EMPTY_ENUM_VALUES,
6120 notes: None,
6121 },
6122 IndicatorParamInfo {
6123 key: "plot_bullish",
6124 label: "Plot Bullish Divergences",
6125 kind: IndicatorParamKind::Bool,
6126 required: false,
6127 default: Some(ParamValueStatic::Bool(true)),
6128 min: None,
6129 max: None,
6130 step: None,
6131 enum_values: ENUM_VALUES_TRUE_FALSE,
6132 notes: None,
6133 },
6134 IndicatorParamInfo {
6135 key: "plot_bearish",
6136 label: "Plot Bearish Divergences",
6137 kind: IndicatorParamKind::Bool,
6138 required: false,
6139 default: Some(ParamValueStatic::Bool(true)),
6140 min: None,
6141 max: None,
6142 step: None,
6143 enum_values: ENUM_VALUES_TRUE_FALSE,
6144 notes: None,
6145 },
6146];
6147
6148const PARAM_KELTNER: &[IndicatorParamInfo] = &[
6149 IndicatorParamInfo {
6150 key: "period",
6151 label: "Period",
6152 kind: IndicatorParamKind::Int,
6153 required: false,
6154 default: Some(ParamValueStatic::Int(20)),
6155 min: Some(1.0),
6156 max: None,
6157 step: Some(1.0),
6158 enum_values: EMPTY_ENUM_VALUES,
6159 notes: None,
6160 },
6161 IndicatorParamInfo {
6162 key: "multiplier",
6163 label: "Multiplier",
6164 kind: IndicatorParamKind::Float,
6165 required: false,
6166 default: Some(ParamValueStatic::Float(2.0)),
6167 min: Some(0.0),
6168 max: None,
6169 step: None,
6170 enum_values: EMPTY_ENUM_VALUES,
6171 notes: None,
6172 },
6173 IndicatorParamInfo {
6174 key: "ma_type",
6175 label: "MA Type",
6176 kind: IndicatorParamKind::EnumString,
6177 required: false,
6178 default: Some(ParamValueStatic::EnumString("ema")),
6179 min: None,
6180 max: None,
6181 step: None,
6182 enum_values: EMPTY_ENUM_VALUES,
6183 notes: None,
6184 },
6185];
6186
6187const PARAM_AROON: &[IndicatorParamInfo] = &[IndicatorParamInfo {
6188 key: "length",
6189 label: "Length",
6190 kind: IndicatorParamKind::Int,
6191 required: false,
6192 default: Some(ParamValueStatic::Int(14)),
6193 min: Some(1.0),
6194 max: None,
6195 step: Some(1.0),
6196 enum_values: EMPTY_ENUM_VALUES,
6197 notes: None,
6198}];
6199
6200const PARAM_SRSI: &[IndicatorParamInfo] = &[
6201 IndicatorParamInfo {
6202 key: "rsi_period",
6203 label: "RSI Period",
6204 kind: IndicatorParamKind::Int,
6205 required: false,
6206 default: Some(ParamValueStatic::Int(14)),
6207 min: Some(1.0),
6208 max: None,
6209 step: Some(1.0),
6210 enum_values: EMPTY_ENUM_VALUES,
6211 notes: None,
6212 },
6213 IndicatorParamInfo {
6214 key: "stoch_period",
6215 label: "Stoch Period",
6216 kind: IndicatorParamKind::Int,
6217 required: false,
6218 default: Some(ParamValueStatic::Int(14)),
6219 min: Some(1.0),
6220 max: None,
6221 step: Some(1.0),
6222 enum_values: EMPTY_ENUM_VALUES,
6223 notes: None,
6224 },
6225 IndicatorParamInfo {
6226 key: "k",
6227 label: "K",
6228 kind: IndicatorParamKind::Int,
6229 required: false,
6230 default: Some(ParamValueStatic::Int(3)),
6231 min: Some(1.0),
6232 max: None,
6233 step: Some(1.0),
6234 enum_values: EMPTY_ENUM_VALUES,
6235 notes: None,
6236 },
6237 IndicatorParamInfo {
6238 key: "d",
6239 label: "D",
6240 kind: IndicatorParamKind::Int,
6241 required: false,
6242 default: Some(ParamValueStatic::Int(3)),
6243 min: Some(1.0),
6244 max: None,
6245 step: Some(1.0),
6246 enum_values: EMPTY_ENUM_VALUES,
6247 notes: None,
6248 },
6249 IndicatorParamInfo {
6250 key: "source",
6251 label: "Source",
6252 kind: IndicatorParamKind::EnumString,
6253 required: false,
6254 default: Some(ParamValueStatic::EnumString("close")),
6255 min: None,
6256 max: None,
6257 step: None,
6258 enum_values: EMPTY_ENUM_VALUES,
6259 notes: None,
6260 },
6261];
6262
6263const PARAM_STOCHASTIC_CONNORS_RSI: &[IndicatorParamInfo] = &[
6264 IndicatorParamInfo {
6265 key: "stoch_length",
6266 label: "Stochastic Length",
6267 kind: IndicatorParamKind::Int,
6268 required: false,
6269 default: Some(ParamValueStatic::Int(3)),
6270 min: Some(1.0),
6271 max: None,
6272 step: Some(1.0),
6273 enum_values: EMPTY_ENUM_VALUES,
6274 notes: None,
6275 },
6276 IndicatorParamInfo {
6277 key: "smooth_k",
6278 label: "K",
6279 kind: IndicatorParamKind::Int,
6280 required: false,
6281 default: Some(ParamValueStatic::Int(3)),
6282 min: Some(1.0),
6283 max: None,
6284 step: Some(1.0),
6285 enum_values: EMPTY_ENUM_VALUES,
6286 notes: None,
6287 },
6288 IndicatorParamInfo {
6289 key: "smooth_d",
6290 label: "D",
6291 kind: IndicatorParamKind::Int,
6292 required: false,
6293 default: Some(ParamValueStatic::Int(3)),
6294 min: Some(1.0),
6295 max: None,
6296 step: Some(1.0),
6297 enum_values: EMPTY_ENUM_VALUES,
6298 notes: None,
6299 },
6300 IndicatorParamInfo {
6301 key: "rsi_length",
6302 label: "RSI Length",
6303 kind: IndicatorParamKind::Int,
6304 required: false,
6305 default: Some(ParamValueStatic::Int(3)),
6306 min: Some(1.0),
6307 max: None,
6308 step: Some(1.0),
6309 enum_values: EMPTY_ENUM_VALUES,
6310 notes: None,
6311 },
6312 IndicatorParamInfo {
6313 key: "updown_length",
6314 label: "Updown RSI Length",
6315 kind: IndicatorParamKind::Int,
6316 required: false,
6317 default: Some(ParamValueStatic::Int(2)),
6318 min: Some(1.0),
6319 max: None,
6320 step: Some(1.0),
6321 enum_values: EMPTY_ENUM_VALUES,
6322 notes: None,
6323 },
6324 IndicatorParamInfo {
6325 key: "roc_length",
6326 label: "ROC Length",
6327 kind: IndicatorParamKind::Int,
6328 required: false,
6329 default: Some(ParamValueStatic::Int(100)),
6330 min: Some(1.0),
6331 max: None,
6332 step: Some(1.0),
6333 enum_values: EMPTY_ENUM_VALUES,
6334 notes: None,
6335 },
6336];
6337
6338const PARAM_CHOP: &[IndicatorParamInfo] = &[
6339 IndicatorParamInfo {
6340 key: "period",
6341 label: "Period",
6342 kind: IndicatorParamKind::Int,
6343 required: false,
6344 default: Some(ParamValueStatic::Int(14)),
6345 min: Some(1.0),
6346 max: None,
6347 step: Some(1.0),
6348 enum_values: EMPTY_ENUM_VALUES,
6349 notes: None,
6350 },
6351 IndicatorParamInfo {
6352 key: "scalar",
6353 label: "Scalar",
6354 kind: IndicatorParamKind::Float,
6355 required: false,
6356 default: Some(ParamValueStatic::Float(100.0)),
6357 min: Some(0.0),
6358 max: None,
6359 step: None,
6360 enum_values: EMPTY_ENUM_VALUES,
6361 notes: None,
6362 },
6363 IndicatorParamInfo {
6364 key: "drift",
6365 label: "Drift",
6366 kind: IndicatorParamKind::Int,
6367 required: false,
6368 default: Some(ParamValueStatic::Int(1)),
6369 min: Some(1.0),
6370 max: None,
6371 step: Some(1.0),
6372 enum_values: EMPTY_ENUM_VALUES,
6373 notes: None,
6374 },
6375];
6376
6377const PARAM_SQUEEZE_MOMENTUM: &[IndicatorParamInfo] = &[
6378 IndicatorParamInfo {
6379 key: "length_bb",
6380 label: "BB Length",
6381 kind: IndicatorParamKind::Int,
6382 required: false,
6383 default: Some(ParamValueStatic::Int(20)),
6384 min: Some(1.0),
6385 max: None,
6386 step: Some(1.0),
6387 enum_values: EMPTY_ENUM_VALUES,
6388 notes: None,
6389 },
6390 IndicatorParamInfo {
6391 key: "mult_bb",
6392 label: "BB Mult",
6393 kind: IndicatorParamKind::Float,
6394 required: false,
6395 default: Some(ParamValueStatic::Float(2.0)),
6396 min: Some(0.0),
6397 max: None,
6398 step: None,
6399 enum_values: EMPTY_ENUM_VALUES,
6400 notes: None,
6401 },
6402 IndicatorParamInfo {
6403 key: "length_kc",
6404 label: "KC Length",
6405 kind: IndicatorParamKind::Int,
6406 required: false,
6407 default: Some(ParamValueStatic::Int(20)),
6408 min: Some(1.0),
6409 max: None,
6410 step: Some(1.0),
6411 enum_values: EMPTY_ENUM_VALUES,
6412 notes: None,
6413 },
6414 IndicatorParamInfo {
6415 key: "mult_kc",
6416 label: "KC Mult",
6417 kind: IndicatorParamKind::Float,
6418 required: false,
6419 default: Some(ParamValueStatic::Float(1.5)),
6420 min: Some(0.0),
6421 max: None,
6422 step: None,
6423 enum_values: EMPTY_ENUM_VALUES,
6424 notes: None,
6425 },
6426];
6427
6428const PARAM_WTO: &[IndicatorParamInfo] = &[
6429 IndicatorParamInfo {
6430 key: "channel_length",
6431 label: "Channel Length",
6432 kind: IndicatorParamKind::Int,
6433 required: false,
6434 default: Some(ParamValueStatic::Int(10)),
6435 min: Some(1.0),
6436 max: None,
6437 step: Some(1.0),
6438 enum_values: EMPTY_ENUM_VALUES,
6439 notes: None,
6440 },
6441 IndicatorParamInfo {
6442 key: "average_length",
6443 label: "Average Length",
6444 kind: IndicatorParamKind::Int,
6445 required: false,
6446 default: Some(ParamValueStatic::Int(21)),
6447 min: Some(1.0),
6448 max: None,
6449 step: Some(1.0),
6450 enum_values: EMPTY_ENUM_VALUES,
6451 notes: None,
6452 },
6453];
6454
6455const PARAM_WAVETREND: &[IndicatorParamInfo] = &[
6456 IndicatorParamInfo {
6457 key: "channel_length",
6458 label: "Channel Length",
6459 kind: IndicatorParamKind::Int,
6460 required: false,
6461 default: Some(ParamValueStatic::Int(9)),
6462 min: Some(1.0),
6463 max: None,
6464 step: Some(1.0),
6465 enum_values: EMPTY_ENUM_VALUES,
6466 notes: None,
6467 },
6468 IndicatorParamInfo {
6469 key: "average_length",
6470 label: "Average Length",
6471 kind: IndicatorParamKind::Int,
6472 required: false,
6473 default: Some(ParamValueStatic::Int(12)),
6474 min: Some(1.0),
6475 max: None,
6476 step: Some(1.0),
6477 enum_values: EMPTY_ENUM_VALUES,
6478 notes: None,
6479 },
6480 IndicatorParamInfo {
6481 key: "ma_length",
6482 label: "MA Length",
6483 kind: IndicatorParamKind::Int,
6484 required: false,
6485 default: Some(ParamValueStatic::Int(3)),
6486 min: Some(1.0),
6487 max: None,
6488 step: Some(1.0),
6489 enum_values: EMPTY_ENUM_VALUES,
6490 notes: None,
6491 },
6492 IndicatorParamInfo {
6493 key: "factor",
6494 label: "Factor",
6495 kind: IndicatorParamKind::Float,
6496 required: false,
6497 default: Some(ParamValueStatic::Float(0.015)),
6498 min: Some(0.0),
6499 max: None,
6500 step: None,
6501 enum_values: EMPTY_ENUM_VALUES,
6502 notes: None,
6503 },
6504];
6505
6506const PARAM_YANG_ZHANG: &[IndicatorParamInfo] = &[
6507 IndicatorParamInfo {
6508 key: "lookback",
6509 label: "Lookback",
6510 kind: IndicatorParamKind::Int,
6511 required: false,
6512 default: Some(ParamValueStatic::Int(14)),
6513 min: Some(1.0),
6514 max: None,
6515 step: Some(1.0),
6516 enum_values: EMPTY_ENUM_VALUES,
6517 notes: None,
6518 },
6519 IndicatorParamInfo {
6520 key: "k_override",
6521 label: "K Override",
6522 kind: IndicatorParamKind::Bool,
6523 required: false,
6524 default: Some(ParamValueStatic::Bool(false)),
6525 min: None,
6526 max: None,
6527 step: None,
6528 enum_values: ENUM_VALUES_TRUE_FALSE,
6529 notes: None,
6530 },
6531 IndicatorParamInfo {
6532 key: "k",
6533 label: "K",
6534 kind: IndicatorParamKind::Float,
6535 required: false,
6536 default: Some(ParamValueStatic::Float(0.34)),
6537 min: Some(0.0),
6538 max: None,
6539 step: None,
6540 enum_values: EMPTY_ENUM_VALUES,
6541 notes: None,
6542 },
6543];
6544
6545const PARAM_GARMAN_KLASS: &[IndicatorParamInfo] = &[IndicatorParamInfo {
6546 key: "lookback",
6547 label: "Lookback",
6548 kind: IndicatorParamKind::Int,
6549 required: false,
6550 default: Some(ParamValueStatic::Int(14)),
6551 min: Some(1.0),
6552 max: None,
6553 step: Some(1.0),
6554 enum_values: EMPTY_ENUM_VALUES,
6555 notes: None,
6556}];
6557
6558const PARAM_PARKINSON: &[IndicatorParamInfo] = &[IndicatorParamInfo {
6559 key: "period",
6560 label: "Period",
6561 kind: IndicatorParamKind::Int,
6562 required: false,
6563 default: Some(ParamValueStatic::Int(8)),
6564 min: Some(1.0),
6565 max: None,
6566 step: Some(1.0),
6567 enum_values: EMPTY_ENUM_VALUES,
6568 notes: None,
6569}];
6570
6571const PARAM_GOPALAKRISHNAN_RANGE_INDEX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
6572 key: "length",
6573 label: "Length",
6574 kind: IndicatorParamKind::Int,
6575 required: false,
6576 default: Some(ParamValueStatic::Int(5)),
6577 min: Some(2.0),
6578 max: None,
6579 step: Some(1.0),
6580 enum_values: EMPTY_ENUM_VALUES,
6581 notes: None,
6582}];
6583
6584const PARAM_ATR_PERCENTILE: &[IndicatorParamInfo] = &[
6585 IndicatorParamInfo {
6586 key: "atr_length",
6587 label: "ATR Length",
6588 kind: IndicatorParamKind::Int,
6589 required: false,
6590 default: Some(ParamValueStatic::Int(10)),
6591 min: Some(1.0),
6592 max: None,
6593 step: Some(1.0),
6594 enum_values: EMPTY_ENUM_VALUES,
6595 notes: None,
6596 },
6597 IndicatorParamInfo {
6598 key: "percentile_length",
6599 label: "Percentile Length",
6600 kind: IndicatorParamKind::Int,
6601 required: false,
6602 default: Some(ParamValueStatic::Int(50)),
6603 min: Some(1.0),
6604 max: None,
6605 step: Some(1.0),
6606 enum_values: EMPTY_ENUM_VALUES,
6607 notes: None,
6608 },
6609];
6610
6611const PARAM_HISTORICAL_VOLATILITY: &[IndicatorParamInfo] = &[
6612 IndicatorParamInfo {
6613 key: "lookback",
6614 label: "Lookback",
6615 kind: IndicatorParamKind::Int,
6616 required: false,
6617 default: Some(ParamValueStatic::Int(20)),
6618 min: Some(1.0),
6619 max: None,
6620 step: Some(1.0),
6621 enum_values: EMPTY_ENUM_VALUES,
6622 notes: None,
6623 },
6624 IndicatorParamInfo {
6625 key: "annualization_days",
6626 label: "Annualization Days",
6627 kind: IndicatorParamKind::Float,
6628 required: false,
6629 default: Some(ParamValueStatic::Float(250.0)),
6630 min: Some(0.0),
6631 max: None,
6632 step: None,
6633 enum_values: EMPTY_ENUM_VALUES,
6634 notes: None,
6635 },
6636];
6637
6638const PARAM_VELOCITY_ACCELERATION_INDICATOR: &[IndicatorParamInfo] = &[
6639 IndicatorParamInfo {
6640 key: "length",
6641 label: "Length",
6642 kind: IndicatorParamKind::Int,
6643 required: false,
6644 default: Some(ParamValueStatic::Int(21)),
6645 min: Some(2.0),
6646 max: None,
6647 step: Some(1.0),
6648 enum_values: EMPTY_ENUM_VALUES,
6649 notes: None,
6650 },
6651 IndicatorParamInfo {
6652 key: "smooth_length",
6653 label: "Smooth Length",
6654 kind: IndicatorParamKind::Int,
6655 required: false,
6656 default: Some(ParamValueStatic::Int(5)),
6657 min: Some(1.0),
6658 max: None,
6659 step: Some(1.0),
6660 enum_values: EMPTY_ENUM_VALUES,
6661 notes: None,
6662 },
6663 IndicatorParamInfo {
6664 key: "source",
6665 label: "Source",
6666 kind: IndicatorParamKind::EnumString,
6667 required: false,
6668 default: Some(ParamValueStatic::EnumString("hlcc4")),
6669 min: None,
6670 max: None,
6671 step: None,
6672 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
6673 notes: None,
6674 },
6675];
6676
6677const PARAM_NORMALIZED_RESONATOR: &[IndicatorParamInfo] = &[
6678 IndicatorParamInfo {
6679 key: "period",
6680 label: "Period",
6681 kind: IndicatorParamKind::Int,
6682 required: false,
6683 default: Some(ParamValueStatic::Int(100)),
6684 min: Some(2.0),
6685 max: None,
6686 step: Some(1.0),
6687 enum_values: EMPTY_ENUM_VALUES,
6688 notes: None,
6689 },
6690 IndicatorParamInfo {
6691 key: "delta",
6692 label: "Delta",
6693 kind: IndicatorParamKind::Float,
6694 required: false,
6695 default: Some(ParamValueStatic::Float(0.5)),
6696 min: Some(0.01),
6697 max: Some(1.0),
6698 step: Some(0.05),
6699 enum_values: EMPTY_ENUM_VALUES,
6700 notes: None,
6701 },
6702 IndicatorParamInfo {
6703 key: "lookback_mult",
6704 label: "Lookback Multiplier",
6705 kind: IndicatorParamKind::Float,
6706 required: false,
6707 default: Some(ParamValueStatic::Float(1.0)),
6708 min: Some(0.1),
6709 max: None,
6710 step: Some(0.1),
6711 enum_values: EMPTY_ENUM_VALUES,
6712 notes: None,
6713 },
6714 IndicatorParamInfo {
6715 key: "signal_length",
6716 label: "Signal Length",
6717 kind: IndicatorParamKind::Int,
6718 required: false,
6719 default: Some(ParamValueStatic::Int(9)),
6720 min: Some(1.0),
6721 max: None,
6722 step: Some(1.0),
6723 enum_values: EMPTY_ENUM_VALUES,
6724 notes: None,
6725 },
6726 IndicatorParamInfo {
6727 key: "source",
6728 label: "Source",
6729 kind: IndicatorParamKind::EnumString,
6730 required: false,
6731 default: Some(ParamValueStatic::EnumString("hl2")),
6732 min: None,
6733 max: None,
6734 step: None,
6735 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
6736 notes: None,
6737 },
6738];
6739
6740const PARAM_MONOTONICITY_INDEX: &[IndicatorParamInfo] = &[
6741 IndicatorParamInfo {
6742 key: "length",
6743 label: "Period",
6744 kind: IndicatorParamKind::Int,
6745 required: false,
6746 default: Some(ParamValueStatic::Int(20)),
6747 min: Some(2.0),
6748 max: None,
6749 step: Some(1.0),
6750 enum_values: EMPTY_ENUM_VALUES,
6751 notes: None,
6752 },
6753 IndicatorParamInfo {
6754 key: "mode",
6755 label: "Mode",
6756 kind: IndicatorParamKind::EnumString,
6757 required: false,
6758 default: Some(ParamValueStatic::EnumString("efficiency")),
6759 min: None,
6760 max: None,
6761 step: None,
6762 enum_values: ENUM_VALUES_MONOTONICITY_INDEX_MODE,
6763 notes: None,
6764 },
6765 IndicatorParamInfo {
6766 key: "index_smooth",
6767 label: "Index Smoothing",
6768 kind: IndicatorParamKind::Int,
6769 required: false,
6770 default: Some(ParamValueStatic::Int(5)),
6771 min: Some(1.0),
6772 max: None,
6773 step: Some(1.0),
6774 enum_values: EMPTY_ENUM_VALUES,
6775 notes: None,
6776 },
6777 IndicatorParamInfo {
6778 key: "source",
6779 label: "Source",
6780 kind: IndicatorParamKind::EnumString,
6781 required: false,
6782 default: Some(ParamValueStatic::EnumString("close")),
6783 min: None,
6784 max: None,
6785 step: None,
6786 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
6787 notes: None,
6788 },
6789];
6790
6791const PARAM_HALF_CAUSAL_ESTIMATOR: &[IndicatorParamInfo] = &[
6792 IndicatorParamInfo {
6793 key: "slots_per_day",
6794 label: "Slots Per Day",
6795 kind: IndicatorParamKind::Int,
6796 required: false,
6797 default: None,
6798 min: Some(2.0),
6799 max: None,
6800 step: Some(1.0),
6801 enum_values: EMPTY_ENUM_VALUES,
6802 notes: Some("Required for raw-slice dispatch; candle dispatch infers this when omitted."),
6803 },
6804 IndicatorParamInfo {
6805 key: "data_period",
6806 label: "Data Period",
6807 kind: IndicatorParamKind::Int,
6808 required: false,
6809 default: Some(ParamValueStatic::Int(5)),
6810 min: Some(0.0),
6811 max: None,
6812 step: Some(1.0),
6813 enum_values: EMPTY_ENUM_VALUES,
6814 notes: None,
6815 },
6816 IndicatorParamInfo {
6817 key: "filter_length",
6818 label: "Filter Length",
6819 kind: IndicatorParamKind::Int,
6820 required: false,
6821 default: Some(ParamValueStatic::Int(20)),
6822 min: Some(2.0),
6823 max: None,
6824 step: Some(1.0),
6825 enum_values: EMPTY_ENUM_VALUES,
6826 notes: None,
6827 },
6828 IndicatorParamInfo {
6829 key: "kernel_width",
6830 label: "Kernel Width",
6831 kind: IndicatorParamKind::Float,
6832 required: false,
6833 default: Some(ParamValueStatic::Float(20.0)),
6834 min: Some(0.125),
6835 max: None,
6836 step: Some(0.125),
6837 enum_values: EMPTY_ENUM_VALUES,
6838 notes: None,
6839 },
6840 IndicatorParamInfo {
6841 key: "kernel_type",
6842 label: "Kernel Type",
6843 kind: IndicatorParamKind::EnumString,
6844 required: false,
6845 default: Some(ParamValueStatic::EnumString("epanechnikov")),
6846 min: None,
6847 max: None,
6848 step: None,
6849 enum_values: ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_KERNEL_TYPE,
6850 notes: None,
6851 },
6852 IndicatorParamInfo {
6853 key: "confidence_adjust",
6854 label: "Confidence Adjust",
6855 kind: IndicatorParamKind::EnumString,
6856 required: false,
6857 default: Some(ParamValueStatic::EnumString("symmetric")),
6858 min: None,
6859 max: None,
6860 step: None,
6861 enum_values: ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_CONFIDENCE_ADJUST,
6862 notes: None,
6863 },
6864 IndicatorParamInfo {
6865 key: "maximum_confidence_adjust",
6866 label: "Maximum Confidence Adjust",
6867 kind: IndicatorParamKind::Float,
6868 required: false,
6869 default: Some(ParamValueStatic::Float(100.0)),
6870 min: Some(0.0),
6871 max: Some(100.0),
6872 step: Some(1.0),
6873 enum_values: EMPTY_ENUM_VALUES,
6874 notes: None,
6875 },
6876 IndicatorParamInfo {
6877 key: "enable_expected_value",
6878 label: "Enable Expected Value",
6879 kind: IndicatorParamKind::Bool,
6880 required: false,
6881 default: Some(ParamValueStatic::Bool(false)),
6882 min: None,
6883 max: None,
6884 step: None,
6885 enum_values: ENUM_VALUES_TRUE_FALSE,
6886 notes: None,
6887 },
6888 IndicatorParamInfo {
6889 key: "extra_smoothing",
6890 label: "Extra Smoothing",
6891 kind: IndicatorParamKind::Int,
6892 required: false,
6893 default: Some(ParamValueStatic::Int(0)),
6894 min: Some(0.0),
6895 max: None,
6896 step: Some(1.0),
6897 enum_values: EMPTY_ENUM_VALUES,
6898 notes: None,
6899 },
6900 IndicatorParamInfo {
6901 key: "source",
6902 label: "Source",
6903 kind: IndicatorParamKind::EnumString,
6904 required: false,
6905 default: Some(ParamValueStatic::EnumString("volume")),
6906 min: None,
6907 max: None,
6908 step: None,
6909 enum_values: ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_SOURCE,
6910 notes: None,
6911 },
6912];
6913
6914const PARAM_ABSOLUTE_STRENGTH_INDEX_OSCILLATOR: &[IndicatorParamInfo] = &[
6915 IndicatorParamInfo {
6916 key: "ema_length",
6917 label: "EMA Length",
6918 kind: IndicatorParamKind::Int,
6919 required: false,
6920 default: Some(ParamValueStatic::Int(21)),
6921 min: Some(1.0),
6922 max: None,
6923 step: Some(1.0),
6924 enum_values: EMPTY_ENUM_VALUES,
6925 notes: None,
6926 },
6927 IndicatorParamInfo {
6928 key: "signal_length",
6929 label: "Signal Length",
6930 kind: IndicatorParamKind::Int,
6931 required: false,
6932 default: Some(ParamValueStatic::Int(34)),
6933 min: Some(2.0),
6934 max: None,
6935 step: Some(1.0),
6936 enum_values: EMPTY_ENUM_VALUES,
6937 notes: None,
6938 },
6939];
6940
6941const PARAM_PREMIER_RSI_OSCILLATOR: &[IndicatorParamInfo] = &[
6942 IndicatorParamInfo {
6943 key: "rsi_length",
6944 label: "RSI Length",
6945 kind: IndicatorParamKind::Int,
6946 required: false,
6947 default: Some(ParamValueStatic::Int(14)),
6948 min: Some(1.0),
6949 max: None,
6950 step: Some(1.0),
6951 enum_values: EMPTY_ENUM_VALUES,
6952 notes: None,
6953 },
6954 IndicatorParamInfo {
6955 key: "stoch_length",
6956 label: "Stoch Length",
6957 kind: IndicatorParamKind::Int,
6958 required: false,
6959 default: Some(ParamValueStatic::Int(8)),
6960 min: Some(1.0),
6961 max: None,
6962 step: Some(1.0),
6963 enum_values: EMPTY_ENUM_VALUES,
6964 notes: None,
6965 },
6966 IndicatorParamInfo {
6967 key: "smooth_length",
6968 label: "Smooth Length",
6969 kind: IndicatorParamKind::Int,
6970 required: false,
6971 default: Some(ParamValueStatic::Int(25)),
6972 min: Some(1.0),
6973 max: None,
6974 step: Some(1.0),
6975 enum_values: EMPTY_ENUM_VALUES,
6976 notes: None,
6977 },
6978];
6979
6980const PARAM_MULTI_LENGTH_STOCHASTIC_AVERAGE: &[IndicatorParamInfo] = &[
6981 IndicatorParamInfo {
6982 key: "length",
6983 label: "Length",
6984 kind: IndicatorParamKind::Int,
6985 required: false,
6986 default: Some(ParamValueStatic::Int(14)),
6987 min: Some(4.0),
6988 max: None,
6989 step: Some(1.0),
6990 enum_values: EMPTY_ENUM_VALUES,
6991 notes: None,
6992 },
6993 IndicatorParamInfo {
6994 key: "presmooth",
6995 label: "Pre-Smoothing",
6996 kind: IndicatorParamKind::Int,
6997 required: false,
6998 default: Some(ParamValueStatic::Int(10)),
6999 min: Some(1.0),
7000 max: None,
7001 step: Some(1.0),
7002 enum_values: EMPTY_ENUM_VALUES,
7003 notes: None,
7004 },
7005 IndicatorParamInfo {
7006 key: "premethod",
7007 label: "Pre-Smoothing Method",
7008 kind: IndicatorParamKind::EnumString,
7009 required: false,
7010 default: Some(ParamValueStatic::EnumString("sma")),
7011 min: None,
7012 max: None,
7013 step: None,
7014 enum_values: ENUM_VALUES_MULTI_LENGTH_STOCHASTIC_AVERAGE_METHOD,
7015 notes: None,
7016 },
7017 IndicatorParamInfo {
7018 key: "postsmooth",
7019 label: "Post-Smoothing",
7020 kind: IndicatorParamKind::Int,
7021 required: false,
7022 default: Some(ParamValueStatic::Int(10)),
7023 min: Some(1.0),
7024 max: None,
7025 step: Some(1.0),
7026 enum_values: EMPTY_ENUM_VALUES,
7027 notes: None,
7028 },
7029 IndicatorParamInfo {
7030 key: "postmethod",
7031 label: "Post-Smoothing Method",
7032 kind: IndicatorParamKind::EnumString,
7033 required: false,
7034 default: Some(ParamValueStatic::EnumString("sma")),
7035 min: None,
7036 max: None,
7037 step: None,
7038 enum_values: ENUM_VALUES_MULTI_LENGTH_STOCHASTIC_AVERAGE_METHOD,
7039 notes: None,
7040 },
7041 IndicatorParamInfo {
7042 key: "source",
7043 label: "Source",
7044 kind: IndicatorParamKind::EnumString,
7045 required: false,
7046 default: Some(ParamValueStatic::EnumString("close")),
7047 min: None,
7048 max: None,
7049 step: None,
7050 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
7051 notes: None,
7052 },
7053];
7054
7055const PARAM_HULL_BUTTERFLY_OSCILLATOR: &[IndicatorParamInfo] = &[
7056 IndicatorParamInfo {
7057 key: "length",
7058 label: "Length",
7059 kind: IndicatorParamKind::Int,
7060 required: false,
7061 default: Some(ParamValueStatic::Int(14)),
7062 min: Some(2.0),
7063 max: None,
7064 step: Some(1.0),
7065 enum_values: EMPTY_ENUM_VALUES,
7066 notes: None,
7067 },
7068 IndicatorParamInfo {
7069 key: "mult",
7070 label: "Levels Multiplier",
7071 kind: IndicatorParamKind::Float,
7072 required: false,
7073 default: Some(ParamValueStatic::Float(2.0)),
7074 min: None,
7075 max: None,
7076 step: Some(0.1),
7077 enum_values: EMPTY_ENUM_VALUES,
7078 notes: None,
7079 },
7080 IndicatorParamInfo {
7081 key: "source",
7082 label: "Source",
7083 kind: IndicatorParamKind::EnumString,
7084 required: false,
7085 default: Some(ParamValueStatic::EnumString("close")),
7086 min: None,
7087 max: None,
7088 step: None,
7089 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
7090 notes: None,
7091 },
7092];
7093
7094const PARAM_FIBONACCI_TRAILING_STOP: &[IndicatorParamInfo] = &[
7095 IndicatorParamInfo {
7096 key: "left_bars",
7097 label: "Left Bars",
7098 kind: IndicatorParamKind::Int,
7099 required: false,
7100 default: Some(ParamValueStatic::Int(20)),
7101 min: Some(1.0),
7102 max: None,
7103 step: Some(1.0),
7104 enum_values: EMPTY_ENUM_VALUES,
7105 notes: None,
7106 },
7107 IndicatorParamInfo {
7108 key: "right_bars",
7109 label: "Right Bars",
7110 kind: IndicatorParamKind::Int,
7111 required: false,
7112 default: Some(ParamValueStatic::Int(1)),
7113 min: Some(1.0),
7114 max: None,
7115 step: Some(1.0),
7116 enum_values: EMPTY_ENUM_VALUES,
7117 notes: None,
7118 },
7119 IndicatorParamInfo {
7120 key: "level",
7121 label: "Level",
7122 kind: IndicatorParamKind::Float,
7123 required: false,
7124 default: Some(ParamValueStatic::Float(-0.382)),
7125 min: None,
7126 max: None,
7127 step: Some(0.001),
7128 enum_values: EMPTY_ENUM_VALUES,
7129 notes: Some("Finite Fibonacci extension/retracement factor"),
7130 },
7131 IndicatorParamInfo {
7132 key: "trigger",
7133 label: "Trigger",
7134 kind: IndicatorParamKind::EnumString,
7135 required: false,
7136 default: Some(ParamValueStatic::EnumString("close")),
7137 min: None,
7138 max: None,
7139 step: None,
7140 enum_values: ENUM_VALUES_FIBONACCI_TRAILING_STOP_TRIGGER,
7141 notes: None,
7142 },
7143];
7144const PARAM_FIBONACCI_ENTRY_BANDS: &[IndicatorParamInfo] = &[
7145 IndicatorParamInfo {
7146 key: "source",
7147 label: "Source",
7148 kind: IndicatorParamKind::EnumString,
7149 required: false,
7150 default: Some(ParamValueStatic::EnumString("hlc3")),
7151 min: None,
7152 max: None,
7153 step: None,
7154 enum_values: ENUM_VALUES_FIBONACCI_ENTRY_BANDS_SOURCE,
7155 notes: None,
7156 },
7157 IndicatorParamInfo {
7158 key: "length",
7159 label: "Length",
7160 kind: IndicatorParamKind::Int,
7161 required: false,
7162 default: Some(ParamValueStatic::Int(21)),
7163 min: Some(1.0),
7164 max: None,
7165 step: Some(1.0),
7166 enum_values: EMPTY_ENUM_VALUES,
7167 notes: None,
7168 },
7169 IndicatorParamInfo {
7170 key: "atr_length",
7171 label: "ATR Length",
7172 kind: IndicatorParamKind::Int,
7173 required: false,
7174 default: Some(ParamValueStatic::Int(14)),
7175 min: Some(1.0),
7176 max: None,
7177 step: Some(1.0),
7178 enum_values: EMPTY_ENUM_VALUES,
7179 notes: None,
7180 },
7181 IndicatorParamInfo {
7182 key: "use_atr",
7183 label: "Use ATR",
7184 kind: IndicatorParamKind::Bool,
7185 required: false,
7186 default: Some(ParamValueStatic::Bool(true)),
7187 min: None,
7188 max: None,
7189 step: None,
7190 enum_values: ENUM_VALUES_TRUE_FALSE,
7191 notes: None,
7192 },
7193 IndicatorParamInfo {
7194 key: "tp_aggressiveness",
7195 label: "TP Aggressiveness",
7196 kind: IndicatorParamKind::EnumString,
7197 required: false,
7198 default: Some(ParamValueStatic::EnumString("low")),
7199 min: None,
7200 max: None,
7201 step: None,
7202 enum_values: ENUM_VALUES_FIBONACCI_ENTRY_BANDS_TP_AGGRESSIVENESS,
7203 notes: None,
7204 },
7205];
7206
7207const PARAM_VOLUME_ENERGY_RESERVOIRS: &[IndicatorParamInfo] = &[
7208 IndicatorParamInfo {
7209 key: "length",
7210 label: "Energy Horizon",
7211 kind: IndicatorParamKind::Int,
7212 required: false,
7213 default: Some(ParamValueStatic::Int(20)),
7214 min: Some(5.0),
7215 max: None,
7216 step: Some(1.0),
7217 enum_values: EMPTY_ENUM_VALUES,
7218 notes: Some("Lookback for price stability and midpoint range."),
7219 },
7220 IndicatorParamInfo {
7221 key: "sensitivity",
7222 label: "Energy Sensitivity",
7223 kind: IndicatorParamKind::Float,
7224 required: false,
7225 default: Some(ParamValueStatic::Float(1.5)),
7226 min: Some(0.5),
7227 max: None,
7228 step: Some(0.1),
7229 enum_values: EMPTY_ENUM_VALUES,
7230 notes: Some("Controls how quickly reservoir energy is released on volume spikes."),
7231 },
7232];
7233
7234const PARAM_NEIGHBORING_TRAILING_STOP: &[IndicatorParamInfo] = &[
7235 IndicatorParamInfo {
7236 key: "buffer_size",
7237 label: "Historical Buffer",
7238 kind: IndicatorParamKind::Int,
7239 required: false,
7240 default: Some(ParamValueStatic::Int(200)),
7241 min: Some(100.0),
7242 max: Some(20000.0),
7243 step: Some(1.0),
7244 enum_values: EMPTY_ENUM_VALUES,
7245 notes: Some("Number of historical closes retained in the sorted neighborhood buffer."),
7246 },
7247 IndicatorParamInfo {
7248 key: "k",
7249 label: "Neighboring Range",
7250 kind: IndicatorParamKind::Int,
7251 required: false,
7252 default: Some(ParamValueStatic::Int(50)),
7253 min: Some(5.0),
7254 max: None,
7255 step: Some(1.0),
7256 enum_values: EMPTY_ENUM_VALUES,
7257 notes: Some("Number of neighboring closes examined on each side of the insertion point."),
7258 },
7259 IndicatorParamInfo {
7260 key: "percentile",
7261 label: "Percentile",
7262 kind: IndicatorParamKind::Float,
7263 required: false,
7264 default: Some(ParamValueStatic::Float(90.0)),
7265 min: Some(1.0),
7266 max: Some(99.0),
7267 step: Some(1.0),
7268 enum_values: EMPTY_ENUM_VALUES,
7269 notes: Some("Percentile rank used for the lower and upper neighborhood bands."),
7270 },
7271 IndicatorParamInfo {
7272 key: "smooth",
7273 label: "Smoothing",
7274 kind: IndicatorParamKind::Int,
7275 required: false,
7276 default: Some(ParamValueStatic::Int(5)),
7277 min: Some(1.0),
7278 max: None,
7279 step: Some(1.0),
7280 enum_values: EMPTY_ENUM_VALUES,
7281 notes: Some("SMA smoothing applied to the neighborhood bands before stop updates."),
7282 },
7283];
7284
7285const PARAM_GROVER_LLORENS_CYCLE_OSCILLATOR: &[IndicatorParamInfo] = &[
7286 IndicatorParamInfo {
7287 key: "length",
7288 label: "Length",
7289 kind: IndicatorParamKind::Int,
7290 required: false,
7291 default: Some(ParamValueStatic::Int(100)),
7292 min: Some(1.0),
7293 max: None,
7294 step: Some(1.0),
7295 enum_values: EMPTY_ENUM_VALUES,
7296 notes: None,
7297 },
7298 IndicatorParamInfo {
7299 key: "mult",
7300 label: "Multiplier",
7301 kind: IndicatorParamKind::Float,
7302 required: false,
7303 default: Some(ParamValueStatic::Float(10.0)),
7304 min: None,
7305 max: None,
7306 step: None,
7307 enum_values: EMPTY_ENUM_VALUES,
7308 notes: None,
7309 },
7310 IndicatorParamInfo {
7311 key: "source",
7312 label: "Source",
7313 kind: IndicatorParamKind::EnumString,
7314 required: false,
7315 default: Some(ParamValueStatic::EnumString("close")),
7316 min: None,
7317 max: None,
7318 step: None,
7319 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
7320 notes: None,
7321 },
7322 IndicatorParamInfo {
7323 key: "smooth",
7324 label: "Smooth",
7325 kind: IndicatorParamKind::Bool,
7326 required: false,
7327 default: Some(ParamValueStatic::Bool(true)),
7328 min: None,
7329 max: None,
7330 step: None,
7331 enum_values: ENUM_VALUES_TRUE_FALSE,
7332 notes: None,
7333 },
7334 IndicatorParamInfo {
7335 key: "rsi_period",
7336 label: "RSI Period",
7337 kind: IndicatorParamKind::Int,
7338 required: false,
7339 default: Some(ParamValueStatic::Int(20)),
7340 min: Some(1.0),
7341 max: None,
7342 step: Some(1.0),
7343 enum_values: EMPTY_ENUM_VALUES,
7344 notes: None,
7345 },
7346];
7347
7348const PARAM_EHLERS_LINEAR_EXTRAPOLATION_PREDICTOR: &[IndicatorParamInfo] = &[
7349 IndicatorParamInfo {
7350 key: "high_pass_length",
7351 label: "High-Pass Length",
7352 kind: IndicatorParamKind::Int,
7353 required: false,
7354 default: Some(ParamValueStatic::Int(125)),
7355 min: Some(1.0),
7356 max: None,
7357 step: Some(1.0),
7358 enum_values: EMPTY_ENUM_VALUES,
7359 notes: None,
7360 },
7361 IndicatorParamInfo {
7362 key: "low_pass_length",
7363 label: "Low-Pass Length",
7364 kind: IndicatorParamKind::Int,
7365 required: false,
7366 default: Some(ParamValueStatic::Int(12)),
7367 min: Some(1.0),
7368 max: None,
7369 step: Some(1.0),
7370 enum_values: EMPTY_ENUM_VALUES,
7371 notes: None,
7372 },
7373 IndicatorParamInfo {
7374 key: "gain",
7375 label: "Gain",
7376 kind: IndicatorParamKind::Float,
7377 required: false,
7378 default: Some(ParamValueStatic::Float(0.7)),
7379 min: None,
7380 max: None,
7381 step: None,
7382 enum_values: EMPTY_ENUM_VALUES,
7383 notes: None,
7384 },
7385 IndicatorParamInfo {
7386 key: "bars_forward",
7387 label: "Bars Forward",
7388 kind: IndicatorParamKind::Int,
7389 required: false,
7390 default: Some(ParamValueStatic::Int(5)),
7391 min: Some(0.0),
7392 max: Some(10.0),
7393 step: Some(1.0),
7394 enum_values: EMPTY_ENUM_VALUES,
7395 notes: Some("Faithful core supports 0..10 forward bars."),
7396 },
7397 IndicatorParamInfo {
7398 key: "signal_mode",
7399 label: "Signal Mode",
7400 kind: IndicatorParamKind::EnumString,
7401 required: false,
7402 default: Some(ParamValueStatic::EnumString("predict_filter_crosses")),
7403 min: None,
7404 max: None,
7405 step: None,
7406 enum_values: ENUM_VALUES_EHLERS_LINEAR_EXTRAPOLATION_SIGNAL_MODE,
7407 notes: None,
7408 },
7409];
7410
7411const PARAM_BULL_POWER_VS_BEAR_POWER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
7412 key: "period",
7413 label: "Period",
7414 kind: IndicatorParamKind::Int,
7415 required: false,
7416 default: Some(ParamValueStatic::Int(5)),
7417 min: Some(1.0),
7418 max: None,
7419 step: Some(1.0),
7420 enum_values: EMPTY_ENUM_VALUES,
7421 notes: None,
7422}];
7423
7424const PARAM_VERTICAL_HORIZONTAL_FILTER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
7425 key: "length",
7426 label: "Length",
7427 kind: IndicatorParamKind::Int,
7428 required: false,
7429 default: Some(ParamValueStatic::Int(28)),
7430 min: Some(1.0),
7431 max: None,
7432 step: Some(1.0),
7433 enum_values: EMPTY_ENUM_VALUES,
7434 notes: None,
7435}];
7436
7437const PARAM_SQUEEZE_INDEX: &[IndicatorParamInfo] = &[
7438 IndicatorParamInfo {
7439 key: "conv",
7440 label: "Convergence Factor",
7441 kind: IndicatorParamKind::Float,
7442 required: false,
7443 default: Some(ParamValueStatic::Float(50.0)),
7444 min: Some(1.0),
7445 max: None,
7446 step: Some(1.0),
7447 enum_values: EMPTY_ENUM_VALUES,
7448 notes: None,
7449 },
7450 IndicatorParamInfo {
7451 key: "length",
7452 label: "Length",
7453 kind: IndicatorParamKind::Int,
7454 required: false,
7455 default: Some(ParamValueStatic::Int(20)),
7456 min: Some(1.0),
7457 max: None,
7458 step: Some(1.0),
7459 enum_values: EMPTY_ENUM_VALUES,
7460 notes: None,
7461 },
7462];
7463
7464const PARAM_STOCHASTIC_DISTANCE: &[IndicatorParamInfo] = &[
7465 IndicatorParamInfo {
7466 key: "lookback_length",
7467 label: "Lookback Length",
7468 kind: IndicatorParamKind::Int,
7469 required: false,
7470 default: Some(ParamValueStatic::Int(200)),
7471 min: Some(1.0),
7472 max: None,
7473 step: Some(1.0),
7474 enum_values: EMPTY_ENUM_VALUES,
7475 notes: None,
7476 },
7477 IndicatorParamInfo {
7478 key: "length1",
7479 label: "Length 1",
7480 kind: IndicatorParamKind::Int,
7481 required: false,
7482 default: Some(ParamValueStatic::Int(12)),
7483 min: Some(1.0),
7484 max: None,
7485 step: Some(1.0),
7486 enum_values: EMPTY_ENUM_VALUES,
7487 notes: None,
7488 },
7489 IndicatorParamInfo {
7490 key: "length2",
7491 label: "Length 2",
7492 kind: IndicatorParamKind::Int,
7493 required: false,
7494 default: Some(ParamValueStatic::Int(3)),
7495 min: Some(1.0),
7496 max: None,
7497 step: Some(1.0),
7498 enum_values: EMPTY_ENUM_VALUES,
7499 notes: None,
7500 },
7501 IndicatorParamInfo {
7502 key: "ob_level",
7503 label: "Overbought Level",
7504 kind: IndicatorParamKind::Int,
7505 required: false,
7506 default: Some(ParamValueStatic::Int(40)),
7507 min: Some(0.0),
7508 max: Some(100.0),
7509 step: Some(1.0),
7510 enum_values: EMPTY_ENUM_VALUES,
7511 notes: None,
7512 },
7513 IndicatorParamInfo {
7514 key: "os_level",
7515 label: "Oversold Level",
7516 kind: IndicatorParamKind::Int,
7517 required: false,
7518 default: Some(ParamValueStatic::Int(-40)),
7519 min: Some(-100.0),
7520 max: Some(0.0),
7521 step: Some(1.0),
7522 enum_values: EMPTY_ENUM_VALUES,
7523 notes: None,
7524 },
7525];
7526
7527const PARAM_ADAPTIVE_BANDPASS_TRIGGER_OSCILLATOR: &[IndicatorParamInfo] = &[
7528 IndicatorParamInfo {
7529 key: "delta",
7530 label: "Delta",
7531 kind: IndicatorParamKind::Float,
7532 required: false,
7533 default: Some(ParamValueStatic::Float(0.1)),
7534 min: Some(0.0000001),
7535 max: Some(0.9999999),
7536 step: Some(0.01),
7537 enum_values: EMPTY_ENUM_VALUES,
7538 notes: None,
7539 },
7540 IndicatorParamInfo {
7541 key: "alpha",
7542 label: "Alpha",
7543 kind: IndicatorParamKind::Float,
7544 required: false,
7545 default: Some(ParamValueStatic::Float(0.07)),
7546 min: Some(0.0000001),
7547 max: Some(0.9999999),
7548 step: Some(0.01),
7549 enum_values: EMPTY_ENUM_VALUES,
7550 notes: None,
7551 },
7552];
7553
7554const PARAM_DIDI_INDEX: &[IndicatorParamInfo] = &[
7555 IndicatorParamInfo {
7556 key: "short_length",
7557 label: "Short Length",
7558 kind: IndicatorParamKind::Int,
7559 required: false,
7560 default: Some(ParamValueStatic::Int(3)),
7561 min: Some(1.0),
7562 max: None,
7563 step: Some(1.0),
7564 enum_values: EMPTY_ENUM_VALUES,
7565 notes: None,
7566 },
7567 IndicatorParamInfo {
7568 key: "medium_length",
7569 label: "Medium Length",
7570 kind: IndicatorParamKind::Int,
7571 required: false,
7572 default: Some(ParamValueStatic::Int(8)),
7573 min: Some(1.0),
7574 max: None,
7575 step: Some(1.0),
7576 enum_values: EMPTY_ENUM_VALUES,
7577 notes: None,
7578 },
7579 IndicatorParamInfo {
7580 key: "long_length",
7581 label: "Long Length",
7582 kind: IndicatorParamKind::Int,
7583 required: false,
7584 default: Some(ParamValueStatic::Int(20)),
7585 min: Some(1.0),
7586 max: None,
7587 step: Some(1.0),
7588 enum_values: EMPTY_ENUM_VALUES,
7589 notes: None,
7590 },
7591];
7592
7593const PARAM_EHLERS_AUTOCORRELATION_PERIODOGRAM: &[IndicatorParamInfo] = &[
7594 IndicatorParamInfo {
7595 key: "min_period",
7596 label: "Min Period",
7597 kind: IndicatorParamKind::Int,
7598 required: false,
7599 default: Some(ParamValueStatic::Int(8)),
7600 min: Some(3.0),
7601 max: None,
7602 step: Some(1.0),
7603 enum_values: EMPTY_ENUM_VALUES,
7604 notes: None,
7605 },
7606 IndicatorParamInfo {
7607 key: "max_period",
7608 label: "Max Period",
7609 kind: IndicatorParamKind::Int,
7610 required: false,
7611 default: Some(ParamValueStatic::Int(48)),
7612 min: Some(4.0),
7613 max: None,
7614 step: Some(1.0),
7615 enum_values: EMPTY_ENUM_VALUES,
7616 notes: None,
7617 },
7618 IndicatorParamInfo {
7619 key: "avg_length",
7620 label: "Autocorrelation Length",
7621 kind: IndicatorParamKind::Int,
7622 required: false,
7623 default: Some(ParamValueStatic::Int(3)),
7624 min: Some(0.0),
7625 max: None,
7626 step: Some(1.0),
7627 enum_values: EMPTY_ENUM_VALUES,
7628 notes: None,
7629 },
7630 IndicatorParamInfo {
7631 key: "enhance",
7632 label: "Enhance Resolution",
7633 kind: IndicatorParamKind::Bool,
7634 required: false,
7635 default: Some(ParamValueStatic::Bool(true)),
7636 min: None,
7637 max: None,
7638 step: None,
7639 enum_values: ENUM_VALUES_TRUE_FALSE,
7640 notes: None,
7641 },
7642];
7643
7644const PARAM_KASE_PEAK_OSCILLATOR_WITH_DIVERGENCES: &[IndicatorParamInfo] = &[
7645 IndicatorParamInfo {
7646 key: "deviations",
7647 label: "Deviations",
7648 kind: IndicatorParamKind::Float,
7649 required: false,
7650 default: Some(ParamValueStatic::Float(2.0)),
7651 min: Some(0.0),
7652 max: None,
7653 step: None,
7654 enum_values: EMPTY_ENUM_VALUES,
7655 notes: None,
7656 },
7657 IndicatorParamInfo {
7658 key: "short_cycle",
7659 label: "Short Cycle",
7660 kind: IndicatorParamKind::Int,
7661 required: false,
7662 default: Some(ParamValueStatic::Int(8)),
7663 min: Some(1.0),
7664 max: None,
7665 step: Some(1.0),
7666 enum_values: EMPTY_ENUM_VALUES,
7667 notes: None,
7668 },
7669 IndicatorParamInfo {
7670 key: "long_cycle",
7671 label: "Long Cycle",
7672 kind: IndicatorParamKind::Int,
7673 required: false,
7674 default: Some(ParamValueStatic::Int(65)),
7675 min: Some(2.0),
7676 max: None,
7677 step: Some(1.0),
7678 enum_values: EMPTY_ENUM_VALUES,
7679 notes: None,
7680 },
7681 IndicatorParamInfo {
7682 key: "sensitivity",
7683 label: "Sensitivity",
7684 kind: IndicatorParamKind::Float,
7685 required: false,
7686 default: Some(ParamValueStatic::Float(40.0)),
7687 min: None,
7688 max: None,
7689 step: None,
7690 enum_values: EMPTY_ENUM_VALUES,
7691 notes: None,
7692 },
7693 IndicatorParamInfo {
7694 key: "all_peaks_mode",
7695 label: "All Peaks Mode",
7696 kind: IndicatorParamKind::Bool,
7697 required: false,
7698 default: Some(ParamValueStatic::Bool(true)),
7699 min: None,
7700 max: None,
7701 step: None,
7702 enum_values: ENUM_VALUES_TRUE_FALSE,
7703 notes: None,
7704 },
7705 IndicatorParamInfo {
7706 key: "lb_r",
7707 label: "Pivot Right",
7708 kind: IndicatorParamKind::Int,
7709 required: false,
7710 default: Some(ParamValueStatic::Int(5)),
7711 min: Some(1.0),
7712 max: None,
7713 step: Some(1.0),
7714 enum_values: EMPTY_ENUM_VALUES,
7715 notes: None,
7716 },
7717 IndicatorParamInfo {
7718 key: "lb_l",
7719 label: "Pivot Left",
7720 kind: IndicatorParamKind::Int,
7721 required: false,
7722 default: Some(ParamValueStatic::Int(5)),
7723 min: Some(1.0),
7724 max: None,
7725 step: Some(1.0),
7726 enum_values: EMPTY_ENUM_VALUES,
7727 notes: None,
7728 },
7729 IndicatorParamInfo {
7730 key: "range_upper",
7731 label: "Range Upper",
7732 kind: IndicatorParamKind::Int,
7733 required: false,
7734 default: Some(ParamValueStatic::Int(60)),
7735 min: Some(1.0),
7736 max: None,
7737 step: Some(1.0),
7738 enum_values: EMPTY_ENUM_VALUES,
7739 notes: None,
7740 },
7741 IndicatorParamInfo {
7742 key: "range_lower",
7743 label: "Range Lower",
7744 kind: IndicatorParamKind::Int,
7745 required: false,
7746 default: Some(ParamValueStatic::Int(5)),
7747 min: Some(1.0),
7748 max: None,
7749 step: Some(1.0),
7750 enum_values: EMPTY_ENUM_VALUES,
7751 notes: None,
7752 },
7753 IndicatorParamInfo {
7754 key: "plot_bull",
7755 label: "Plot Bull",
7756 kind: IndicatorParamKind::Bool,
7757 required: false,
7758 default: Some(ParamValueStatic::Bool(true)),
7759 min: None,
7760 max: None,
7761 step: None,
7762 enum_values: ENUM_VALUES_TRUE_FALSE,
7763 notes: None,
7764 },
7765 IndicatorParamInfo {
7766 key: "plot_hidden_bull",
7767 label: "Plot Hidden Bull",
7768 kind: IndicatorParamKind::Bool,
7769 required: false,
7770 default: Some(ParamValueStatic::Bool(false)),
7771 min: None,
7772 max: None,
7773 step: None,
7774 enum_values: ENUM_VALUES_TRUE_FALSE,
7775 notes: None,
7776 },
7777 IndicatorParamInfo {
7778 key: "plot_bear",
7779 label: "Plot Bear",
7780 kind: IndicatorParamKind::Bool,
7781 required: false,
7782 default: Some(ParamValueStatic::Bool(true)),
7783 min: None,
7784 max: None,
7785 step: None,
7786 enum_values: ENUM_VALUES_TRUE_FALSE,
7787 notes: None,
7788 },
7789 IndicatorParamInfo {
7790 key: "plot_hidden_bear",
7791 label: "Plot Hidden Bear",
7792 kind: IndicatorParamKind::Bool,
7793 required: false,
7794 default: Some(ParamValueStatic::Bool(false)),
7795 min: None,
7796 max: None,
7797 step: None,
7798 enum_values: ENUM_VALUES_TRUE_FALSE,
7799 notes: None,
7800 },
7801];
7802
7803const PARAM_INTRADAY_MOMENTUM_INDEX: &[IndicatorParamInfo] = &[
7804 IndicatorParamInfo {
7805 key: "length",
7806 label: "IMI Length",
7807 kind: IndicatorParamKind::Int,
7808 required: false,
7809 default: Some(ParamValueStatic::Int(14)),
7810 min: Some(1.0),
7811 max: None,
7812 step: Some(1.0),
7813 enum_values: EMPTY_ENUM_VALUES,
7814 notes: None,
7815 },
7816 IndicatorParamInfo {
7817 key: "length_ma",
7818 label: "Signal Length",
7819 kind: IndicatorParamKind::Int,
7820 required: false,
7821 default: Some(ParamValueStatic::Int(6)),
7822 min: Some(1.0),
7823 max: None,
7824 step: Some(1.0),
7825 enum_values: EMPTY_ENUM_VALUES,
7826 notes: None,
7827 },
7828 IndicatorParamInfo {
7829 key: "mult",
7830 label: "Band StdDev Mult",
7831 kind: IndicatorParamKind::Float,
7832 required: false,
7833 default: Some(ParamValueStatic::Float(2.0)),
7834 min: Some(0.0),
7835 max: None,
7836 step: None,
7837 enum_values: EMPTY_ENUM_VALUES,
7838 notes: None,
7839 },
7840 IndicatorParamInfo {
7841 key: "length_bb",
7842 label: "Band Length",
7843 kind: IndicatorParamKind::Int,
7844 required: false,
7845 default: Some(ParamValueStatic::Int(20)),
7846 min: Some(1.0),
7847 max: None,
7848 step: Some(1.0),
7849 enum_values: EMPTY_ENUM_VALUES,
7850 notes: None,
7851 },
7852 IndicatorParamInfo {
7853 key: "apply_smoothing",
7854 label: "Apply Smoothing",
7855 kind: IndicatorParamKind::Bool,
7856 required: false,
7857 default: Some(ParamValueStatic::Bool(false)),
7858 min: None,
7859 max: None,
7860 step: None,
7861 enum_values: ENUM_VALUES_TRUE_FALSE,
7862 notes: None,
7863 },
7864 IndicatorParamInfo {
7865 key: "low_band",
7866 label: "Smoothing Lower Band",
7867 kind: IndicatorParamKind::Int,
7868 required: false,
7869 default: Some(ParamValueStatic::Int(10)),
7870 min: Some(1.0),
7871 max: None,
7872 step: Some(1.0),
7873 enum_values: EMPTY_ENUM_VALUES,
7874 notes: None,
7875 },
7876];
7877
7878const PARAM_DEMAND_INDEX: &[IndicatorParamInfo] = &[
7879 IndicatorParamInfo {
7880 key: "len_bs",
7881 label: "Buy/Sell Power Length",
7882 kind: IndicatorParamKind::Int,
7883 required: false,
7884 default: Some(ParamValueStatic::Int(19)),
7885 min: Some(1.0),
7886 max: None,
7887 step: Some(1.0),
7888 enum_values: EMPTY_ENUM_VALUES,
7889 notes: None,
7890 },
7891 IndicatorParamInfo {
7892 key: "len_bs_ma",
7893 label: "Buy/Sell Power MA Length",
7894 kind: IndicatorParamKind::Int,
7895 required: false,
7896 default: Some(ParamValueStatic::Int(19)),
7897 min: Some(1.0),
7898 max: None,
7899 step: Some(1.0),
7900 enum_values: EMPTY_ENUM_VALUES,
7901 notes: None,
7902 },
7903 IndicatorParamInfo {
7904 key: "len_di_ma",
7905 label: "Demand Index SMA Length",
7906 kind: IndicatorParamKind::Int,
7907 required: false,
7908 default: Some(ParamValueStatic::Int(19)),
7909 min: Some(1.0),
7910 max: None,
7911 step: Some(1.0),
7912 enum_values: EMPTY_ENUM_VALUES,
7913 notes: None,
7914 },
7915 IndicatorParamInfo {
7916 key: "ma_type",
7917 label: "MA Type",
7918 kind: IndicatorParamKind::EnumString,
7919 required: false,
7920 default: Some(ParamValueStatic::EnumString("ema")),
7921 min: None,
7922 max: None,
7923 step: None,
7924 enum_values: ENUM_VALUES_DEMAND_INDEX_MA_TYPE,
7925 notes: None,
7926 },
7927];
7928
7929const PARAM_VWAP_ZSCORE_WITH_SIGNALS: &[IndicatorParamInfo] = &[
7930 IndicatorParamInfo {
7931 key: "length",
7932 label: "Length",
7933 kind: IndicatorParamKind::Int,
7934 required: false,
7935 default: Some(ParamValueStatic::Int(20)),
7936 min: Some(1.0),
7937 max: None,
7938 step: Some(1.0),
7939 enum_values: EMPTY_ENUM_VALUES,
7940 notes: None,
7941 },
7942 IndicatorParamInfo {
7943 key: "upper_bottom",
7944 label: "Upper Threshold",
7945 kind: IndicatorParamKind::Float,
7946 required: false,
7947 default: Some(ParamValueStatic::Float(2.5)),
7948 min: None,
7949 max: None,
7950 step: None,
7951 enum_values: EMPTY_ENUM_VALUES,
7952 notes: None,
7953 },
7954 IndicatorParamInfo {
7955 key: "lower_bottom",
7956 label: "Lower Threshold",
7957 kind: IndicatorParamKind::Float,
7958 required: false,
7959 default: Some(ParamValueStatic::Float(-2.5)),
7960 min: None,
7961 max: None,
7962 step: None,
7963 enum_values: EMPTY_ENUM_VALUES,
7964 notes: None,
7965 },
7966];
7967
7968const PARAM_VI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
7969 key: "period",
7970 label: "Period",
7971 kind: IndicatorParamKind::Int,
7972 required: false,
7973 default: Some(ParamValueStatic::Int(14)),
7974 min: Some(1.0),
7975 max: None,
7976 step: Some(1.0),
7977 enum_values: EMPTY_ENUM_VALUES,
7978 notes: None,
7979}];
7980
7981const PARAM_KDJ: &[IndicatorParamInfo] = &[
7982 IndicatorParamInfo {
7983 key: "fast_k_period",
7984 label: "Fast K Period",
7985 kind: IndicatorParamKind::Int,
7986 required: false,
7987 default: Some(ParamValueStatic::Int(9)),
7988 min: Some(1.0),
7989 max: None,
7990 step: Some(1.0),
7991 enum_values: EMPTY_ENUM_VALUES,
7992 notes: None,
7993 },
7994 IndicatorParamInfo {
7995 key: "slow_k_period",
7996 label: "Slow K Period",
7997 kind: IndicatorParamKind::Int,
7998 required: false,
7999 default: Some(ParamValueStatic::Int(3)),
8000 min: Some(1.0),
8001 max: None,
8002 step: Some(1.0),
8003 enum_values: EMPTY_ENUM_VALUES,
8004 notes: None,
8005 },
8006 IndicatorParamInfo {
8007 key: "slow_k_ma_type",
8008 label: "Slow K MA Type",
8009 kind: IndicatorParamKind::EnumString,
8010 required: false,
8011 default: Some(ParamValueStatic::EnumString("sma")),
8012 min: None,
8013 max: None,
8014 step: None,
8015 enum_values: EMPTY_ENUM_VALUES,
8016 notes: None,
8017 },
8018 IndicatorParamInfo {
8019 key: "slow_d_period",
8020 label: "Slow D Period",
8021 kind: IndicatorParamKind::Int,
8022 required: false,
8023 default: Some(ParamValueStatic::Int(3)),
8024 min: Some(1.0),
8025 max: None,
8026 step: Some(1.0),
8027 enum_values: EMPTY_ENUM_VALUES,
8028 notes: None,
8029 },
8030 IndicatorParamInfo {
8031 key: "slow_d_ma_type",
8032 label: "Slow D MA Type",
8033 kind: IndicatorParamKind::EnumString,
8034 required: false,
8035 default: Some(ParamValueStatic::EnumString("sma")),
8036 min: None,
8037 max: None,
8038 step: None,
8039 enum_values: EMPTY_ENUM_VALUES,
8040 notes: None,
8041 },
8042];
8043
8044const PARAM_ACOSC: &[IndicatorParamInfo] = PARAM_NONE;
8045
8046const PARAM_ALLIGATOR: &[IndicatorParamInfo] = &[
8047 IndicatorParamInfo {
8048 key: "jaw_period",
8049 label: "Jaw Period",
8050 kind: IndicatorParamKind::Int,
8051 required: false,
8052 default: Some(ParamValueStatic::Int(13)),
8053 min: Some(1.0),
8054 max: None,
8055 step: Some(1.0),
8056 enum_values: EMPTY_ENUM_VALUES,
8057 notes: None,
8058 },
8059 IndicatorParamInfo {
8060 key: "jaw_offset",
8061 label: "Jaw Offset",
8062 kind: IndicatorParamKind::Int,
8063 required: false,
8064 default: Some(ParamValueStatic::Int(8)),
8065 min: Some(0.0),
8066 max: None,
8067 step: Some(1.0),
8068 enum_values: EMPTY_ENUM_VALUES,
8069 notes: None,
8070 },
8071 IndicatorParamInfo {
8072 key: "teeth_period",
8073 label: "Teeth Period",
8074 kind: IndicatorParamKind::Int,
8075 required: false,
8076 default: Some(ParamValueStatic::Int(8)),
8077 min: Some(1.0),
8078 max: None,
8079 step: Some(1.0),
8080 enum_values: EMPTY_ENUM_VALUES,
8081 notes: None,
8082 },
8083 IndicatorParamInfo {
8084 key: "teeth_offset",
8085 label: "Teeth Offset",
8086 kind: IndicatorParamKind::Int,
8087 required: false,
8088 default: Some(ParamValueStatic::Int(5)),
8089 min: Some(0.0),
8090 max: None,
8091 step: Some(1.0),
8092 enum_values: EMPTY_ENUM_VALUES,
8093 notes: None,
8094 },
8095 IndicatorParamInfo {
8096 key: "lips_period",
8097 label: "Lips Period",
8098 kind: IndicatorParamKind::Int,
8099 required: false,
8100 default: Some(ParamValueStatic::Int(5)),
8101 min: Some(1.0),
8102 max: None,
8103 step: Some(1.0),
8104 enum_values: EMPTY_ENUM_VALUES,
8105 notes: None,
8106 },
8107 IndicatorParamInfo {
8108 key: "lips_offset",
8109 label: "Lips Offset",
8110 kind: IndicatorParamKind::Int,
8111 required: false,
8112 default: Some(ParamValueStatic::Int(3)),
8113 min: Some(0.0),
8114 max: None,
8115 step: Some(1.0),
8116 enum_values: EMPTY_ENUM_VALUES,
8117 notes: None,
8118 },
8119];
8120
8121const PARAM_ALPHATREND: &[IndicatorParamInfo] = &[
8122 IndicatorParamInfo {
8123 key: "coeff",
8124 label: "Coeff",
8125 kind: IndicatorParamKind::Float,
8126 required: false,
8127 default: Some(ParamValueStatic::Float(1.0)),
8128 min: Some(0.0),
8129 max: None,
8130 step: None,
8131 enum_values: EMPTY_ENUM_VALUES,
8132 notes: None,
8133 },
8134 IndicatorParamInfo {
8135 key: "period",
8136 label: "Period",
8137 kind: IndicatorParamKind::Int,
8138 required: false,
8139 default: Some(ParamValueStatic::Int(14)),
8140 min: Some(1.0),
8141 max: None,
8142 step: Some(1.0),
8143 enum_values: EMPTY_ENUM_VALUES,
8144 notes: None,
8145 },
8146 IndicatorParamInfo {
8147 key: "no_volume",
8148 label: "No Volume",
8149 kind: IndicatorParamKind::Bool,
8150 required: false,
8151 default: Some(ParamValueStatic::Bool(false)),
8152 min: None,
8153 max: None,
8154 step: None,
8155 enum_values: ENUM_VALUES_TRUE_FALSE,
8156 notes: None,
8157 },
8158];
8159
8160const PARAM_ASO: &[IndicatorParamInfo] = &[
8161 IndicatorParamInfo {
8162 key: "period",
8163 label: "Period",
8164 kind: IndicatorParamKind::Int,
8165 required: false,
8166 default: Some(ParamValueStatic::Int(10)),
8167 min: Some(1.0),
8168 max: None,
8169 step: Some(1.0),
8170 enum_values: EMPTY_ENUM_VALUES,
8171 notes: None,
8172 },
8173 IndicatorParamInfo {
8174 key: "mode",
8175 label: "Mode",
8176 kind: IndicatorParamKind::Int,
8177 required: false,
8178 default: Some(ParamValueStatic::Int(0)),
8179 min: Some(0.0),
8180 max: None,
8181 step: Some(1.0),
8182 enum_values: EMPTY_ENUM_VALUES,
8183 notes: None,
8184 },
8185];
8186
8187const PARAM_AVSL: &[IndicatorParamInfo] = &[
8188 IndicatorParamInfo {
8189 key: "fast_period",
8190 label: "Fast Period",
8191 kind: IndicatorParamKind::Int,
8192 required: false,
8193 default: Some(ParamValueStatic::Int(12)),
8194 min: Some(1.0),
8195 max: None,
8196 step: Some(1.0),
8197 enum_values: EMPTY_ENUM_VALUES,
8198 notes: None,
8199 },
8200 IndicatorParamInfo {
8201 key: "slow_period",
8202 label: "Slow Period",
8203 kind: IndicatorParamKind::Int,
8204 required: false,
8205 default: Some(ParamValueStatic::Int(26)),
8206 min: Some(1.0),
8207 max: None,
8208 step: Some(1.0),
8209 enum_values: EMPTY_ENUM_VALUES,
8210 notes: None,
8211 },
8212 IndicatorParamInfo {
8213 key: "multiplier",
8214 label: "Multiplier",
8215 kind: IndicatorParamKind::Float,
8216 required: false,
8217 default: Some(ParamValueStatic::Float(2.0)),
8218 min: Some(0.0),
8219 max: None,
8220 step: Some(0.1),
8221 enum_values: EMPTY_ENUM_VALUES,
8222 notes: None,
8223 },
8224];
8225
8226const PARAM_BANDPASS: &[IndicatorParamInfo] = &[
8227 IndicatorParamInfo {
8228 key: "period",
8229 label: "Period",
8230 kind: IndicatorParamKind::Int,
8231 required: false,
8232 default: Some(ParamValueStatic::Int(20)),
8233 min: Some(1.0),
8234 max: None,
8235 step: Some(1.0),
8236 enum_values: EMPTY_ENUM_VALUES,
8237 notes: None,
8238 },
8239 IndicatorParamInfo {
8240 key: "bandwidth",
8241 label: "Bandwidth",
8242 kind: IndicatorParamKind::Float,
8243 required: false,
8244 default: Some(ParamValueStatic::Float(0.3)),
8245 min: Some(0.0),
8246 max: None,
8247 step: None,
8248 enum_values: EMPTY_ENUM_VALUES,
8249 notes: None,
8250 },
8251];
8252
8253const PARAM_CHANDE: &[IndicatorParamInfo] = &[
8254 IndicatorParamInfo {
8255 key: "period",
8256 label: "Period",
8257 kind: IndicatorParamKind::Int,
8258 required: false,
8259 default: Some(ParamValueStatic::Int(22)),
8260 min: Some(1.0),
8261 max: None,
8262 step: Some(1.0),
8263 enum_values: EMPTY_ENUM_VALUES,
8264 notes: None,
8265 },
8266 IndicatorParamInfo {
8267 key: "mult",
8268 label: "Multiplier",
8269 kind: IndicatorParamKind::Float,
8270 required: false,
8271 default: Some(ParamValueStatic::Float(3.0)),
8272 min: Some(0.0),
8273 max: None,
8274 step: Some(0.1),
8275 enum_values: EMPTY_ENUM_VALUES,
8276 notes: None,
8277 },
8278 IndicatorParamInfo {
8279 key: "direction",
8280 label: "Direction",
8281 kind: IndicatorParamKind::EnumString,
8282 required: false,
8283 default: Some(ParamValueStatic::EnumString("long")),
8284 min: None,
8285 max: None,
8286 step: None,
8287 enum_values: &["long", "short"],
8288 notes: None,
8289 },
8290];
8291
8292const PARAM_CHANDELIER_EXIT: &[IndicatorParamInfo] = &[
8293 IndicatorParamInfo {
8294 key: "period",
8295 label: "Period",
8296 kind: IndicatorParamKind::Int,
8297 required: false,
8298 default: Some(ParamValueStatic::Int(22)),
8299 min: Some(1.0),
8300 max: None,
8301 step: Some(1.0),
8302 enum_values: EMPTY_ENUM_VALUES,
8303 notes: None,
8304 },
8305 IndicatorParamInfo {
8306 key: "mult",
8307 label: "Multiplier",
8308 kind: IndicatorParamKind::Float,
8309 required: false,
8310 default: Some(ParamValueStatic::Float(3.0)),
8311 min: Some(0.0),
8312 max: None,
8313 step: None,
8314 enum_values: EMPTY_ENUM_VALUES,
8315 notes: None,
8316 },
8317 IndicatorParamInfo {
8318 key: "use_close",
8319 label: "Use Close",
8320 kind: IndicatorParamKind::Bool,
8321 required: false,
8322 default: Some(ParamValueStatic::Bool(true)),
8323 min: None,
8324 max: None,
8325 step: None,
8326 enum_values: ENUM_VALUES_TRUE_FALSE,
8327 notes: None,
8328 },
8329];
8330
8331const PARAM_CKSP: &[IndicatorParamInfo] = &[
8332 IndicatorParamInfo {
8333 key: "p",
8334 label: "P",
8335 kind: IndicatorParamKind::Int,
8336 required: false,
8337 default: Some(ParamValueStatic::Int(10)),
8338 min: Some(1.0),
8339 max: None,
8340 step: Some(1.0),
8341 enum_values: EMPTY_ENUM_VALUES,
8342 notes: None,
8343 },
8344 IndicatorParamInfo {
8345 key: "x",
8346 label: "X",
8347 kind: IndicatorParamKind::Float,
8348 required: false,
8349 default: Some(ParamValueStatic::Float(1.0)),
8350 min: Some(0.0),
8351 max: None,
8352 step: None,
8353 enum_values: EMPTY_ENUM_VALUES,
8354 notes: None,
8355 },
8356 IndicatorParamInfo {
8357 key: "q",
8358 label: "Q",
8359 kind: IndicatorParamKind::Int,
8360 required: false,
8361 default: Some(ParamValueStatic::Int(9)),
8362 min: Some(1.0),
8363 max: None,
8364 step: Some(1.0),
8365 enum_values: EMPTY_ENUM_VALUES,
8366 notes: None,
8367 },
8368];
8369
8370const PARAM_CORRELATION_CYCLE: &[IndicatorParamInfo] = &[
8371 IndicatorParamInfo {
8372 key: "period",
8373 label: "Period",
8374 kind: IndicatorParamKind::Int,
8375 required: false,
8376 default: Some(ParamValueStatic::Int(20)),
8377 min: Some(1.0),
8378 max: None,
8379 step: Some(1.0),
8380 enum_values: EMPTY_ENUM_VALUES,
8381 notes: None,
8382 },
8383 IndicatorParamInfo {
8384 key: "threshold",
8385 label: "Threshold",
8386 kind: IndicatorParamKind::Float,
8387 required: false,
8388 default: Some(ParamValueStatic::Float(9.0)),
8389 min: None,
8390 max: None,
8391 step: None,
8392 enum_values: EMPTY_ENUM_VALUES,
8393 notes: None,
8394 },
8395];
8396
8397const PARAM_CORREL_HL: &[IndicatorParamInfo] = &[IndicatorParamInfo {
8398 key: "period",
8399 label: "Period",
8400 kind: IndicatorParamKind::Int,
8401 required: false,
8402 default: Some(ParamValueStatic::Int(9)),
8403 min: Some(1.0),
8404 max: None,
8405 step: Some(1.0),
8406 enum_values: EMPTY_ENUM_VALUES,
8407 notes: None,
8408}];
8409
8410const PARAM_DAMIANI_VOLATMETER: &[IndicatorParamInfo] = &[
8411 IndicatorParamInfo {
8412 key: "vis_atr",
8413 label: "Vis ATR",
8414 kind: IndicatorParamKind::Int,
8415 required: false,
8416 default: Some(ParamValueStatic::Int(13)),
8417 min: Some(1.0),
8418 max: None,
8419 step: Some(1.0),
8420 enum_values: EMPTY_ENUM_VALUES,
8421 notes: None,
8422 },
8423 IndicatorParamInfo {
8424 key: "vis_std",
8425 label: "Vis STD",
8426 kind: IndicatorParamKind::Int,
8427 required: false,
8428 default: Some(ParamValueStatic::Int(20)),
8429 min: Some(1.0),
8430 max: None,
8431 step: Some(1.0),
8432 enum_values: EMPTY_ENUM_VALUES,
8433 notes: None,
8434 },
8435 IndicatorParamInfo {
8436 key: "sed_atr",
8437 label: "Sed ATR",
8438 kind: IndicatorParamKind::Int,
8439 required: false,
8440 default: Some(ParamValueStatic::Int(40)),
8441 min: Some(1.0),
8442 max: None,
8443 step: Some(1.0),
8444 enum_values: EMPTY_ENUM_VALUES,
8445 notes: None,
8446 },
8447 IndicatorParamInfo {
8448 key: "sed_std",
8449 label: "Sed STD",
8450 kind: IndicatorParamKind::Int,
8451 required: false,
8452 default: Some(ParamValueStatic::Int(100)),
8453 min: Some(1.0),
8454 max: None,
8455 step: Some(1.0),
8456 enum_values: EMPTY_ENUM_VALUES,
8457 notes: None,
8458 },
8459 IndicatorParamInfo {
8460 key: "threshold",
8461 label: "Threshold",
8462 kind: IndicatorParamKind::Float,
8463 required: false,
8464 default: Some(ParamValueStatic::Float(1.4)),
8465 min: None,
8466 max: None,
8467 step: None,
8468 enum_values: EMPTY_ENUM_VALUES,
8469 notes: None,
8470 },
8471];
8472
8473const PARAM_DVDIQQE: &[IndicatorParamInfo] = &[
8474 IndicatorParamInfo {
8475 key: "period",
8476 label: "Period",
8477 kind: IndicatorParamKind::Int,
8478 required: false,
8479 default: Some(ParamValueStatic::Int(13)),
8480 min: Some(1.0),
8481 max: None,
8482 step: Some(1.0),
8483 enum_values: EMPTY_ENUM_VALUES,
8484 notes: None,
8485 },
8486 IndicatorParamInfo {
8487 key: "smoothing_period",
8488 label: "Smoothing Period",
8489 kind: IndicatorParamKind::Int,
8490 required: false,
8491 default: Some(ParamValueStatic::Int(6)),
8492 min: Some(1.0),
8493 max: None,
8494 step: Some(1.0),
8495 enum_values: EMPTY_ENUM_VALUES,
8496 notes: None,
8497 },
8498 IndicatorParamInfo {
8499 key: "fast_multiplier",
8500 label: "Fast Multiplier",
8501 kind: IndicatorParamKind::Float,
8502 required: false,
8503 default: Some(ParamValueStatic::Float(2.618)),
8504 min: Some(0.0),
8505 max: None,
8506 step: None,
8507 enum_values: EMPTY_ENUM_VALUES,
8508 notes: None,
8509 },
8510 IndicatorParamInfo {
8511 key: "slow_multiplier",
8512 label: "Slow Multiplier",
8513 kind: IndicatorParamKind::Float,
8514 required: false,
8515 default: Some(ParamValueStatic::Float(4.236)),
8516 min: Some(0.0),
8517 max: None,
8518 step: None,
8519 enum_values: EMPTY_ENUM_VALUES,
8520 notes: None,
8521 },
8522 IndicatorParamInfo {
8523 key: "volume_type",
8524 label: "Volume Type",
8525 kind: IndicatorParamKind::EnumString,
8526 required: false,
8527 default: Some(ParamValueStatic::EnumString("default")),
8528 min: None,
8529 max: None,
8530 step: None,
8531 enum_values: EMPTY_ENUM_VALUES,
8532 notes: None,
8533 },
8534 IndicatorParamInfo {
8535 key: "center_type",
8536 label: "Center Type",
8537 kind: IndicatorParamKind::EnumString,
8538 required: false,
8539 default: Some(ParamValueStatic::EnumString("dynamic")),
8540 min: None,
8541 max: None,
8542 step: None,
8543 enum_values: EMPTY_ENUM_VALUES,
8544 notes: None,
8545 },
8546 IndicatorParamInfo {
8547 key: "tick_size",
8548 label: "Tick Size",
8549 kind: IndicatorParamKind::Float,
8550 required: false,
8551 default: Some(ParamValueStatic::Float(0.01)),
8552 min: Some(0.0),
8553 max: None,
8554 step: None,
8555 enum_values: EMPTY_ENUM_VALUES,
8556 notes: None,
8557 },
8558];
8559
8560const PARAM_EMD: &[IndicatorParamInfo] = &[
8561 IndicatorParamInfo {
8562 key: "period",
8563 label: "Period",
8564 kind: IndicatorParamKind::Int,
8565 required: false,
8566 default: Some(ParamValueStatic::Int(20)),
8567 min: Some(1.0),
8568 max: None,
8569 step: Some(1.0),
8570 enum_values: EMPTY_ENUM_VALUES,
8571 notes: None,
8572 },
8573 IndicatorParamInfo {
8574 key: "delta",
8575 label: "Delta",
8576 kind: IndicatorParamKind::Float,
8577 required: false,
8578 default: Some(ParamValueStatic::Float(0.5)),
8579 min: Some(0.0),
8580 max: None,
8581 step: None,
8582 enum_values: EMPTY_ENUM_VALUES,
8583 notes: None,
8584 },
8585 IndicatorParamInfo {
8586 key: "fraction",
8587 label: "Fraction",
8588 kind: IndicatorParamKind::Float,
8589 required: false,
8590 default: Some(ParamValueStatic::Float(0.1)),
8591 min: Some(0.0),
8592 max: None,
8593 step: None,
8594 enum_values: EMPTY_ENUM_VALUES,
8595 notes: None,
8596 },
8597];
8598
8599const PARAM_ERI: &[IndicatorParamInfo] = &[
8600 IndicatorParamInfo {
8601 key: "period",
8602 label: "Period",
8603 kind: IndicatorParamKind::Int,
8604 required: false,
8605 default: Some(ParamValueStatic::Int(13)),
8606 min: Some(1.0),
8607 max: None,
8608 step: Some(1.0),
8609 enum_values: EMPTY_ENUM_VALUES,
8610 notes: None,
8611 },
8612 IndicatorParamInfo {
8613 key: "ma_type",
8614 label: "MA Type",
8615 kind: IndicatorParamKind::EnumString,
8616 required: false,
8617 default: Some(ParamValueStatic::EnumString("ema")),
8618 min: None,
8619 max: None,
8620 step: None,
8621 enum_values: EMPTY_ENUM_VALUES,
8622 notes: None,
8623 },
8624];
8625
8626const PARAM_FISHER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
8627 key: "period",
8628 label: "Period",
8629 kind: IndicatorParamKind::Int,
8630 required: false,
8631 default: Some(ParamValueStatic::Int(9)),
8632 min: Some(1.0),
8633 max: None,
8634 step: Some(1.0),
8635 enum_values: EMPTY_ENUM_VALUES,
8636 notes: None,
8637}];
8638
8639const PARAM_FVG_TRAILING_STOP: &[IndicatorParamInfo] = &[
8640 IndicatorParamInfo {
8641 key: "unmitigated_fvg_lookback",
8642 label: "FVG Lookback",
8643 kind: IndicatorParamKind::Int,
8644 required: false,
8645 default: Some(ParamValueStatic::Int(5)),
8646 min: Some(1.0),
8647 max: None,
8648 step: Some(1.0),
8649 enum_values: EMPTY_ENUM_VALUES,
8650 notes: None,
8651 },
8652 IndicatorParamInfo {
8653 key: "smoothing_length",
8654 label: "Smoothing Length",
8655 kind: IndicatorParamKind::Int,
8656 required: false,
8657 default: Some(ParamValueStatic::Int(9)),
8658 min: Some(1.0),
8659 max: None,
8660 step: Some(1.0),
8661 enum_values: EMPTY_ENUM_VALUES,
8662 notes: None,
8663 },
8664 IndicatorParamInfo {
8665 key: "reset_on_cross",
8666 label: "Reset On Cross",
8667 kind: IndicatorParamKind::Bool,
8668 required: false,
8669 default: Some(ParamValueStatic::Bool(false)),
8670 min: None,
8671 max: None,
8672 step: None,
8673 enum_values: ENUM_VALUES_TRUE_FALSE,
8674 notes: None,
8675 },
8676];
8677
8678const PARAM_GATOROSC: &[IndicatorParamInfo] = &[
8679 IndicatorParamInfo {
8680 key: "jaws_length",
8681 label: "Jaws Length",
8682 kind: IndicatorParamKind::Int,
8683 required: false,
8684 default: Some(ParamValueStatic::Int(13)),
8685 min: Some(1.0),
8686 max: None,
8687 step: Some(1.0),
8688 enum_values: EMPTY_ENUM_VALUES,
8689 notes: None,
8690 },
8691 IndicatorParamInfo {
8692 key: "jaws_shift",
8693 label: "Jaws Shift",
8694 kind: IndicatorParamKind::Int,
8695 required: false,
8696 default: Some(ParamValueStatic::Int(8)),
8697 min: Some(0.0),
8698 max: None,
8699 step: Some(1.0),
8700 enum_values: EMPTY_ENUM_VALUES,
8701 notes: None,
8702 },
8703 IndicatorParamInfo {
8704 key: "teeth_length",
8705 label: "Teeth Length",
8706 kind: IndicatorParamKind::Int,
8707 required: false,
8708 default: Some(ParamValueStatic::Int(8)),
8709 min: Some(1.0),
8710 max: None,
8711 step: Some(1.0),
8712 enum_values: EMPTY_ENUM_VALUES,
8713 notes: None,
8714 },
8715 IndicatorParamInfo {
8716 key: "teeth_shift",
8717 label: "Teeth Shift",
8718 kind: IndicatorParamKind::Int,
8719 required: false,
8720 default: Some(ParamValueStatic::Int(5)),
8721 min: Some(0.0),
8722 max: None,
8723 step: Some(1.0),
8724 enum_values: EMPTY_ENUM_VALUES,
8725 notes: None,
8726 },
8727 IndicatorParamInfo {
8728 key: "lips_length",
8729 label: "Lips Length",
8730 kind: IndicatorParamKind::Int,
8731 required: false,
8732 default: Some(ParamValueStatic::Int(5)),
8733 min: Some(1.0),
8734 max: None,
8735 step: Some(1.0),
8736 enum_values: EMPTY_ENUM_VALUES,
8737 notes: None,
8738 },
8739 IndicatorParamInfo {
8740 key: "lips_shift",
8741 label: "Lips Shift",
8742 kind: IndicatorParamKind::Int,
8743 required: false,
8744 default: Some(ParamValueStatic::Int(3)),
8745 min: Some(0.0),
8746 max: None,
8747 step: Some(1.0),
8748 enum_values: EMPTY_ENUM_VALUES,
8749 notes: None,
8750 },
8751];
8752
8753const PARAM_HALFTREND: &[IndicatorParamInfo] = &[
8754 IndicatorParamInfo {
8755 key: "amplitude",
8756 label: "Amplitude",
8757 kind: IndicatorParamKind::Int,
8758 required: false,
8759 default: Some(ParamValueStatic::Int(2)),
8760 min: Some(1.0),
8761 max: None,
8762 step: Some(1.0),
8763 enum_values: EMPTY_ENUM_VALUES,
8764 notes: None,
8765 },
8766 IndicatorParamInfo {
8767 key: "channel_deviation",
8768 label: "Channel Deviation",
8769 kind: IndicatorParamKind::Float,
8770 required: false,
8771 default: Some(ParamValueStatic::Float(2.0)),
8772 min: Some(0.0),
8773 max: None,
8774 step: None,
8775 enum_values: EMPTY_ENUM_VALUES,
8776 notes: None,
8777 },
8778 IndicatorParamInfo {
8779 key: "atr_period",
8780 label: "ATR Period",
8781 kind: IndicatorParamKind::Int,
8782 required: false,
8783 default: Some(ParamValueStatic::Int(100)),
8784 min: Some(1.0),
8785 max: None,
8786 step: Some(1.0),
8787 enum_values: EMPTY_ENUM_VALUES,
8788 notes: None,
8789 },
8790];
8791
8792const PARAM_SAFEZONESTOP: &[IndicatorParamInfo] = &[
8793 IndicatorParamInfo {
8794 key: "period",
8795 label: "Period",
8796 kind: IndicatorParamKind::Int,
8797 required: false,
8798 default: Some(ParamValueStatic::Int(22)),
8799 min: Some(1.0),
8800 max: None,
8801 step: Some(1.0),
8802 enum_values: EMPTY_ENUM_VALUES,
8803 notes: None,
8804 },
8805 IndicatorParamInfo {
8806 key: "mult",
8807 label: "Multiplier",
8808 kind: IndicatorParamKind::Float,
8809 required: false,
8810 default: Some(ParamValueStatic::Float(2.5)),
8811 min: Some(0.0),
8812 max: None,
8813 step: None,
8814 enum_values: EMPTY_ENUM_VALUES,
8815 notes: None,
8816 },
8817 IndicatorParamInfo {
8818 key: "max_lookback",
8819 label: "Max Lookback",
8820 kind: IndicatorParamKind::Int,
8821 required: false,
8822 default: Some(ParamValueStatic::Int(3)),
8823 min: Some(1.0),
8824 max: None,
8825 step: Some(1.0),
8826 enum_values: EMPTY_ENUM_VALUES,
8827 notes: None,
8828 },
8829 IndicatorParamInfo {
8830 key: "direction",
8831 label: "Direction",
8832 kind: IndicatorParamKind::EnumString,
8833 required: false,
8834 default: Some(ParamValueStatic::EnumString("long")),
8835 min: None,
8836 max: None,
8837 step: None,
8838 enum_values: EMPTY_ENUM_VALUES,
8839 notes: None,
8840 },
8841];
8842
8843const PARAM_DEVSTOP: &[IndicatorParamInfo] = &[
8844 IndicatorParamInfo {
8845 key: "period",
8846 label: "Period",
8847 kind: IndicatorParamKind::Int,
8848 required: false,
8849 default: Some(ParamValueStatic::Int(20)),
8850 min: Some(1.0),
8851 max: None,
8852 step: Some(1.0),
8853 enum_values: EMPTY_ENUM_VALUES,
8854 notes: None,
8855 },
8856 IndicatorParamInfo {
8857 key: "mult",
8858 label: "Multiplier",
8859 kind: IndicatorParamKind::Float,
8860 required: false,
8861 default: Some(ParamValueStatic::Float(0.0)),
8862 min: Some(0.0),
8863 max: None,
8864 step: None,
8865 enum_values: EMPTY_ENUM_VALUES,
8866 notes: None,
8867 },
8868 IndicatorParamInfo {
8869 key: "devtype",
8870 label: "Dev Type",
8871 kind: IndicatorParamKind::Int,
8872 required: false,
8873 default: Some(ParamValueStatic::Int(0)),
8874 min: Some(0.0),
8875 max: None,
8876 step: Some(1.0),
8877 enum_values: EMPTY_ENUM_VALUES,
8878 notes: None,
8879 },
8880 IndicatorParamInfo {
8881 key: "direction",
8882 label: "Direction",
8883 kind: IndicatorParamKind::EnumString,
8884 required: false,
8885 default: Some(ParamValueStatic::EnumString("long")),
8886 min: None,
8887 max: None,
8888 step: None,
8889 enum_values: EMPTY_ENUM_VALUES,
8890 notes: None,
8891 },
8892 IndicatorParamInfo {
8893 key: "ma_type",
8894 label: "MA Type",
8895 kind: IndicatorParamKind::EnumString,
8896 required: false,
8897 default: Some(ParamValueStatic::EnumString("sma")),
8898 min: None,
8899 max: None,
8900 step: None,
8901 enum_values: EMPTY_ENUM_VALUES,
8902 notes: None,
8903 },
8904];
8905
8906const PARAM_MOD_GOD_MODE: &[IndicatorParamInfo] = &[
8907 IndicatorParamInfo {
8908 key: "n1",
8909 label: "N1",
8910 kind: IndicatorParamKind::Int,
8911 required: false,
8912 default: Some(ParamValueStatic::Int(17)),
8913 min: Some(1.0),
8914 max: None,
8915 step: Some(1.0),
8916 enum_values: EMPTY_ENUM_VALUES,
8917 notes: None,
8918 },
8919 IndicatorParamInfo {
8920 key: "n2",
8921 label: "N2",
8922 kind: IndicatorParamKind::Int,
8923 required: false,
8924 default: Some(ParamValueStatic::Int(6)),
8925 min: Some(1.0),
8926 max: None,
8927 step: Some(1.0),
8928 enum_values: EMPTY_ENUM_VALUES,
8929 notes: None,
8930 },
8931 IndicatorParamInfo {
8932 key: "n3",
8933 label: "N3",
8934 kind: IndicatorParamKind::Int,
8935 required: false,
8936 default: Some(ParamValueStatic::Int(4)),
8937 min: Some(1.0),
8938 max: None,
8939 step: Some(1.0),
8940 enum_values: EMPTY_ENUM_VALUES,
8941 notes: None,
8942 },
8943 IndicatorParamInfo {
8944 key: "mode",
8945 label: "Mode",
8946 kind: IndicatorParamKind::EnumString,
8947 required: false,
8948 default: Some(ParamValueStatic::EnumString("tradition_mg")),
8949 min: None,
8950 max: None,
8951 step: None,
8952 enum_values: EMPTY_ENUM_VALUES,
8953 notes: None,
8954 },
8955 IndicatorParamInfo {
8956 key: "use_volume",
8957 label: "Use Volume",
8958 kind: IndicatorParamKind::Bool,
8959 required: false,
8960 default: Some(ParamValueStatic::Bool(true)),
8961 min: None,
8962 max: None,
8963 step: None,
8964 enum_values: ENUM_VALUES_TRUE_FALSE,
8965 notes: None,
8966 },
8967];
8968
8969const PARAM_HEMA_TREND_LEVELS: &[IndicatorParamInfo] = &[
8970 IndicatorParamInfo {
8971 key: "fast_length",
8972 label: "Fast Length",
8973 kind: IndicatorParamKind::Int,
8974 required: false,
8975 default: Some(ParamValueStatic::Int(20)),
8976 min: Some(1.0),
8977 max: None,
8978 step: Some(1.0),
8979 enum_values: EMPTY_ENUM_VALUES,
8980 notes: None,
8981 },
8982 IndicatorParamInfo {
8983 key: "slow_length",
8984 label: "Slow Length",
8985 kind: IndicatorParamKind::Int,
8986 required: false,
8987 default: Some(ParamValueStatic::Int(40)),
8988 min: Some(1.0),
8989 max: None,
8990 step: Some(1.0),
8991 enum_values: EMPTY_ENUM_VALUES,
8992 notes: None,
8993 },
8994];
8995
8996const PARAM_KST: &[IndicatorParamInfo] = &[
8997 IndicatorParamInfo {
8998 key: "sma_period1",
8999 label: "SMA 1",
9000 kind: IndicatorParamKind::Int,
9001 required: false,
9002 default: Some(ParamValueStatic::Int(10)),
9003 min: Some(1.0),
9004 max: None,
9005 step: Some(1.0),
9006 enum_values: EMPTY_ENUM_VALUES,
9007 notes: None,
9008 },
9009 IndicatorParamInfo {
9010 key: "sma_period2",
9011 label: "SMA 2",
9012 kind: IndicatorParamKind::Int,
9013 required: false,
9014 default: Some(ParamValueStatic::Int(10)),
9015 min: Some(1.0),
9016 max: None,
9017 step: Some(1.0),
9018 enum_values: EMPTY_ENUM_VALUES,
9019 notes: None,
9020 },
9021 IndicatorParamInfo {
9022 key: "sma_period3",
9023 label: "SMA 3",
9024 kind: IndicatorParamKind::Int,
9025 required: false,
9026 default: Some(ParamValueStatic::Int(10)),
9027 min: Some(1.0),
9028 max: None,
9029 step: Some(1.0),
9030 enum_values: EMPTY_ENUM_VALUES,
9031 notes: None,
9032 },
9033 IndicatorParamInfo {
9034 key: "sma_period4",
9035 label: "SMA 4",
9036 kind: IndicatorParamKind::Int,
9037 required: false,
9038 default: Some(ParamValueStatic::Int(15)),
9039 min: Some(1.0),
9040 max: None,
9041 step: Some(1.0),
9042 enum_values: EMPTY_ENUM_VALUES,
9043 notes: None,
9044 },
9045 IndicatorParamInfo {
9046 key: "roc_period1",
9047 label: "ROC 1",
9048 kind: IndicatorParamKind::Int,
9049 required: false,
9050 default: Some(ParamValueStatic::Int(10)),
9051 min: Some(1.0),
9052 max: None,
9053 step: Some(1.0),
9054 enum_values: EMPTY_ENUM_VALUES,
9055 notes: None,
9056 },
9057 IndicatorParamInfo {
9058 key: "roc_period2",
9059 label: "ROC 2",
9060 kind: IndicatorParamKind::Int,
9061 required: false,
9062 default: Some(ParamValueStatic::Int(15)),
9063 min: Some(1.0),
9064 max: None,
9065 step: Some(1.0),
9066 enum_values: EMPTY_ENUM_VALUES,
9067 notes: None,
9068 },
9069 IndicatorParamInfo {
9070 key: "roc_period3",
9071 label: "ROC 3",
9072 kind: IndicatorParamKind::Int,
9073 required: false,
9074 default: Some(ParamValueStatic::Int(20)),
9075 min: Some(1.0),
9076 max: None,
9077 step: Some(1.0),
9078 enum_values: EMPTY_ENUM_VALUES,
9079 notes: None,
9080 },
9081 IndicatorParamInfo {
9082 key: "roc_period4",
9083 label: "ROC 4",
9084 kind: IndicatorParamKind::Int,
9085 required: false,
9086 default: Some(ParamValueStatic::Int(30)),
9087 min: Some(1.0),
9088 max: None,
9089 step: Some(1.0),
9090 enum_values: EMPTY_ENUM_VALUES,
9091 notes: None,
9092 },
9093 IndicatorParamInfo {
9094 key: "signal_period",
9095 label: "Signal Period",
9096 kind: IndicatorParamKind::Int,
9097 required: false,
9098 default: Some(ParamValueStatic::Int(9)),
9099 min: Some(1.0),
9100 max: None,
9101 step: Some(1.0),
9102 enum_values: EMPTY_ENUM_VALUES,
9103 notes: None,
9104 },
9105];
9106
9107const PARAM_KAUFMANSTOP: &[IndicatorParamInfo] = &[
9108 IndicatorParamInfo {
9109 key: "period",
9110 label: "Period",
9111 kind: IndicatorParamKind::Int,
9112 required: false,
9113 default: Some(ParamValueStatic::Int(22)),
9114 min: Some(1.0),
9115 max: None,
9116 step: Some(1.0),
9117 enum_values: EMPTY_ENUM_VALUES,
9118 notes: None,
9119 },
9120 IndicatorParamInfo {
9121 key: "mult",
9122 label: "Multiplier",
9123 kind: IndicatorParamKind::Float,
9124 required: false,
9125 default: Some(ParamValueStatic::Float(2.0)),
9126 min: Some(0.0),
9127 max: None,
9128 step: None,
9129 enum_values: EMPTY_ENUM_VALUES,
9130 notes: None,
9131 },
9132 IndicatorParamInfo {
9133 key: "direction",
9134 label: "Direction",
9135 kind: IndicatorParamKind::EnumString,
9136 required: false,
9137 default: Some(ParamValueStatic::EnumString("long")),
9138 min: None,
9139 max: None,
9140 step: None,
9141 enum_values: EMPTY_ENUM_VALUES,
9142 notes: None,
9143 },
9144 IndicatorParamInfo {
9145 key: "ma_type",
9146 label: "MA Type",
9147 kind: IndicatorParamKind::EnumString,
9148 required: false,
9149 default: Some(ParamValueStatic::EnumString("sma")),
9150 min: None,
9151 max: None,
9152 step: None,
9153 enum_values: EMPTY_ENUM_VALUES,
9154 notes: None,
9155 },
9156];
9157
9158const PARAM_LPC: &[IndicatorParamInfo] = &[
9159 IndicatorParamInfo {
9160 key: "cutoff_type",
9161 label: "Cutoff Type",
9162 kind: IndicatorParamKind::EnumString,
9163 required: false,
9164 default: Some(ParamValueStatic::EnumString("adaptive")),
9165 min: None,
9166 max: None,
9167 step: None,
9168 enum_values: EMPTY_ENUM_VALUES,
9169 notes: None,
9170 },
9171 IndicatorParamInfo {
9172 key: "fixed_period",
9173 label: "Fixed Period",
9174 kind: IndicatorParamKind::Int,
9175 required: false,
9176 default: Some(ParamValueStatic::Int(20)),
9177 min: Some(1.0),
9178 max: None,
9179 step: Some(1.0),
9180 enum_values: EMPTY_ENUM_VALUES,
9181 notes: None,
9182 },
9183 IndicatorParamInfo {
9184 key: "max_cycle_limit",
9185 label: "Max Cycle Limit",
9186 kind: IndicatorParamKind::Int,
9187 required: false,
9188 default: Some(ParamValueStatic::Int(60)),
9189 min: Some(1.0),
9190 max: None,
9191 step: Some(1.0),
9192 enum_values: EMPTY_ENUM_VALUES,
9193 notes: None,
9194 },
9195 IndicatorParamInfo {
9196 key: "cycle_mult",
9197 label: "Cycle Mult",
9198 kind: IndicatorParamKind::Float,
9199 required: false,
9200 default: Some(ParamValueStatic::Float(1.0)),
9201 min: Some(0.0),
9202 max: None,
9203 step: None,
9204 enum_values: EMPTY_ENUM_VALUES,
9205 notes: None,
9206 },
9207 IndicatorParamInfo {
9208 key: "tr_mult",
9209 label: "TR Mult",
9210 kind: IndicatorParamKind::Float,
9211 required: false,
9212 default: Some(ParamValueStatic::Float(1.0)),
9213 min: Some(0.0),
9214 max: None,
9215 step: None,
9216 enum_values: EMPTY_ENUM_VALUES,
9217 notes: None,
9218 },
9219];
9220
9221const PARAM_MAB: &[IndicatorParamInfo] = &[
9222 IndicatorParamInfo {
9223 key: "fast_period",
9224 label: "Fast Period",
9225 kind: IndicatorParamKind::Int,
9226 required: false,
9227 default: Some(ParamValueStatic::Int(10)),
9228 min: Some(1.0),
9229 max: None,
9230 step: Some(1.0),
9231 enum_values: EMPTY_ENUM_VALUES,
9232 notes: None,
9233 },
9234 IndicatorParamInfo {
9235 key: "slow_period",
9236 label: "Slow Period",
9237 kind: IndicatorParamKind::Int,
9238 required: false,
9239 default: Some(ParamValueStatic::Int(50)),
9240 min: Some(1.0),
9241 max: None,
9242 step: Some(1.0),
9243 enum_values: EMPTY_ENUM_VALUES,
9244 notes: None,
9245 },
9246 IndicatorParamInfo {
9247 key: "devup",
9248 label: "Dev Up",
9249 kind: IndicatorParamKind::Float,
9250 required: false,
9251 default: Some(ParamValueStatic::Float(1.0)),
9252 min: Some(0.0),
9253 max: None,
9254 step: None,
9255 enum_values: EMPTY_ENUM_VALUES,
9256 notes: None,
9257 },
9258 IndicatorParamInfo {
9259 key: "devdn",
9260 label: "Dev Down",
9261 kind: IndicatorParamKind::Float,
9262 required: false,
9263 default: Some(ParamValueStatic::Float(1.0)),
9264 min: Some(0.0),
9265 max: None,
9266 step: None,
9267 enum_values: EMPTY_ENUM_VALUES,
9268 notes: None,
9269 },
9270 IndicatorParamInfo {
9271 key: "fast_ma_type",
9272 label: "Fast MA Type",
9273 kind: IndicatorParamKind::EnumString,
9274 required: false,
9275 default: Some(ParamValueStatic::EnumString("sma")),
9276 min: None,
9277 max: None,
9278 step: None,
9279 enum_values: EMPTY_ENUM_VALUES,
9280 notes: None,
9281 },
9282 IndicatorParamInfo {
9283 key: "slow_ma_type",
9284 label: "Slow MA Type",
9285 kind: IndicatorParamKind::EnumString,
9286 required: false,
9287 default: Some(ParamValueStatic::EnumString("sma")),
9288 min: None,
9289 max: None,
9290 step: None,
9291 enum_values: EMPTY_ENUM_VALUES,
9292 notes: None,
9293 },
9294];
9295
9296const PARAM_MACZ: &[IndicatorParamInfo] = &[
9297 IndicatorParamInfo {
9298 key: "fast_length",
9299 label: "Fast Length",
9300 kind: IndicatorParamKind::Int,
9301 required: false,
9302 default: Some(ParamValueStatic::Int(12)),
9303 min: Some(1.0),
9304 max: None,
9305 step: Some(1.0),
9306 enum_values: EMPTY_ENUM_VALUES,
9307 notes: None,
9308 },
9309 IndicatorParamInfo {
9310 key: "slow_length",
9311 label: "Slow Length",
9312 kind: IndicatorParamKind::Int,
9313 required: false,
9314 default: Some(ParamValueStatic::Int(25)),
9315 min: Some(1.0),
9316 max: None,
9317 step: Some(1.0),
9318 enum_values: EMPTY_ENUM_VALUES,
9319 notes: None,
9320 },
9321 IndicatorParamInfo {
9322 key: "signal_length",
9323 label: "Signal Length",
9324 kind: IndicatorParamKind::Int,
9325 required: false,
9326 default: Some(ParamValueStatic::Int(9)),
9327 min: Some(1.0),
9328 max: None,
9329 step: Some(1.0),
9330 enum_values: EMPTY_ENUM_VALUES,
9331 notes: None,
9332 },
9333 IndicatorParamInfo {
9334 key: "lengthz",
9335 label: "Length Z",
9336 kind: IndicatorParamKind::Int,
9337 required: false,
9338 default: Some(ParamValueStatic::Int(20)),
9339 min: Some(1.0),
9340 max: None,
9341 step: Some(1.0),
9342 enum_values: EMPTY_ENUM_VALUES,
9343 notes: None,
9344 },
9345 IndicatorParamInfo {
9346 key: "length_stdev",
9347 label: "Length StdDev",
9348 kind: IndicatorParamKind::Int,
9349 required: false,
9350 default: Some(ParamValueStatic::Int(25)),
9351 min: Some(1.0),
9352 max: None,
9353 step: Some(1.0),
9354 enum_values: EMPTY_ENUM_VALUES,
9355 notes: None,
9356 },
9357 IndicatorParamInfo {
9358 key: "a",
9359 label: "A",
9360 kind: IndicatorParamKind::Float,
9361 required: false,
9362 default: Some(ParamValueStatic::Float(1.0)),
9363 min: None,
9364 max: None,
9365 step: None,
9366 enum_values: EMPTY_ENUM_VALUES,
9367 notes: None,
9368 },
9369 IndicatorParamInfo {
9370 key: "b",
9371 label: "B",
9372 kind: IndicatorParamKind::Float,
9373 required: false,
9374 default: Some(ParamValueStatic::Float(1.0)),
9375 min: None,
9376 max: None,
9377 step: None,
9378 enum_values: EMPTY_ENUM_VALUES,
9379 notes: None,
9380 },
9381 IndicatorParamInfo {
9382 key: "use_lag",
9383 label: "Use Lag",
9384 kind: IndicatorParamKind::Bool,
9385 required: false,
9386 default: Some(ParamValueStatic::Bool(false)),
9387 min: None,
9388 max: None,
9389 step: None,
9390 enum_values: ENUM_VALUES_TRUE_FALSE,
9391 notes: None,
9392 },
9393 IndicatorParamInfo {
9394 key: "gamma",
9395 label: "Gamma",
9396 kind: IndicatorParamKind::Float,
9397 required: false,
9398 default: Some(ParamValueStatic::Float(0.02)),
9399 min: None,
9400 max: None,
9401 step: None,
9402 enum_values: EMPTY_ENUM_VALUES,
9403 notes: None,
9404 },
9405];
9406
9407const PARAM_MINMAX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
9408 key: "order",
9409 label: "Order",
9410 kind: IndicatorParamKind::Int,
9411 required: false,
9412 default: Some(ParamValueStatic::Int(3)),
9413 min: Some(1.0),
9414 max: None,
9415 step: Some(1.0),
9416 enum_values: EMPTY_ENUM_VALUES,
9417 notes: None,
9418}];
9419
9420const PARAM_MSW: &[IndicatorParamInfo] = &[IndicatorParamInfo {
9421 key: "period",
9422 label: "Period",
9423 kind: IndicatorParamKind::Int,
9424 required: false,
9425 default: Some(ParamValueStatic::Int(5)),
9426 min: Some(1.0),
9427 max: None,
9428 step: Some(1.0),
9429 enum_values: EMPTY_ENUM_VALUES,
9430 notes: None,
9431}];
9432
9433const PARAM_NWE: &[IndicatorParamInfo] = &[
9434 IndicatorParamInfo {
9435 key: "bandwidth",
9436 label: "Bandwidth",
9437 kind: IndicatorParamKind::Float,
9438 required: false,
9439 default: Some(ParamValueStatic::Float(8.0)),
9440 min: Some(0.0),
9441 max: None,
9442 step: None,
9443 enum_values: EMPTY_ENUM_VALUES,
9444 notes: None,
9445 },
9446 IndicatorParamInfo {
9447 key: "multiplier",
9448 label: "Multiplier",
9449 kind: IndicatorParamKind::Float,
9450 required: false,
9451 default: Some(ParamValueStatic::Float(3.0)),
9452 min: Some(0.0),
9453 max: None,
9454 step: None,
9455 enum_values: EMPTY_ENUM_VALUES,
9456 notes: None,
9457 },
9458 IndicatorParamInfo {
9459 key: "lookback",
9460 label: "Lookback",
9461 kind: IndicatorParamKind::Int,
9462 required: false,
9463 default: Some(ParamValueStatic::Int(500)),
9464 min: Some(1.0),
9465 max: None,
9466 step: Some(1.0),
9467 enum_values: EMPTY_ENUM_VALUES,
9468 notes: None,
9469 },
9470];
9471
9472const PARAM_OTT: &[IndicatorParamInfo] = &[
9473 IndicatorParamInfo {
9474 key: "period",
9475 label: "Period",
9476 kind: IndicatorParamKind::Int,
9477 required: false,
9478 default: Some(ParamValueStatic::Int(2)),
9479 min: Some(1.0),
9480 max: None,
9481 step: Some(1.0),
9482 enum_values: EMPTY_ENUM_VALUES,
9483 notes: None,
9484 },
9485 IndicatorParamInfo {
9486 key: "percent",
9487 label: "Percent",
9488 kind: IndicatorParamKind::Float,
9489 required: false,
9490 default: Some(ParamValueStatic::Float(1.4)),
9491 min: Some(0.0),
9492 max: None,
9493 step: None,
9494 enum_values: EMPTY_ENUM_VALUES,
9495 notes: None,
9496 },
9497 IndicatorParamInfo {
9498 key: "ma_type",
9499 label: "MA Type",
9500 kind: IndicatorParamKind::EnumString,
9501 required: false,
9502 default: Some(ParamValueStatic::EnumString("VAR")),
9503 min: None,
9504 max: None,
9505 step: None,
9506 enum_values: EMPTY_ENUM_VALUES,
9507 notes: None,
9508 },
9509];
9510
9511const PARAM_OTTO: &[IndicatorParamInfo] = &[
9512 IndicatorParamInfo {
9513 key: "ott_period",
9514 label: "OTT Period",
9515 kind: IndicatorParamKind::Int,
9516 required: false,
9517 default: Some(ParamValueStatic::Int(2)),
9518 min: Some(1.0),
9519 max: None,
9520 step: Some(1.0),
9521 enum_values: EMPTY_ENUM_VALUES,
9522 notes: None,
9523 },
9524 IndicatorParamInfo {
9525 key: "ott_percent",
9526 label: "OTT Percent",
9527 kind: IndicatorParamKind::Float,
9528 required: false,
9529 default: Some(ParamValueStatic::Float(0.6)),
9530 min: Some(0.0),
9531 max: None,
9532 step: None,
9533 enum_values: EMPTY_ENUM_VALUES,
9534 notes: None,
9535 },
9536 IndicatorParamInfo {
9537 key: "fast_vidya_length",
9538 label: "Fast VIDYA Length",
9539 kind: IndicatorParamKind::Int,
9540 required: false,
9541 default: Some(ParamValueStatic::Int(10)),
9542 min: Some(1.0),
9543 max: None,
9544 step: Some(1.0),
9545 enum_values: EMPTY_ENUM_VALUES,
9546 notes: None,
9547 },
9548 IndicatorParamInfo {
9549 key: "slow_vidya_length",
9550 label: "Slow VIDYA Length",
9551 kind: IndicatorParamKind::Int,
9552 required: false,
9553 default: Some(ParamValueStatic::Int(25)),
9554 min: Some(1.0),
9555 max: None,
9556 step: Some(1.0),
9557 enum_values: EMPTY_ENUM_VALUES,
9558 notes: None,
9559 },
9560 IndicatorParamInfo {
9561 key: "correcting_constant",
9562 label: "Correcting Constant",
9563 kind: IndicatorParamKind::Float,
9564 required: false,
9565 default: Some(ParamValueStatic::Float(100000.0)),
9566 min: Some(0.0),
9567 max: None,
9568 step: None,
9569 enum_values: EMPTY_ENUM_VALUES,
9570 notes: None,
9571 },
9572 IndicatorParamInfo {
9573 key: "ma_type",
9574 label: "MA Type",
9575 kind: IndicatorParamKind::EnumString,
9576 required: false,
9577 default: Some(ParamValueStatic::EnumString("VAR")),
9578 min: None,
9579 max: None,
9580 step: None,
9581 enum_values: EMPTY_ENUM_VALUES,
9582 notes: None,
9583 },
9584];
9585
9586const PARAM_PMA: &[IndicatorParamInfo] = PARAM_NONE;
9587
9588const PARAM_EHLERS_ADAPTIVE_CG: &[IndicatorParamInfo] = &[
9589 IndicatorParamInfo {
9590 key: "alpha",
9591 label: "Alpha",
9592 kind: IndicatorParamKind::Float,
9593 required: false,
9594 default: Some(ParamValueStatic::Float(0.07)),
9595 min: Some(0.0),
9596 max: Some(1.0),
9597 step: None,
9598 enum_values: EMPTY_ENUM_VALUES,
9599 notes: None,
9600 },
9601 PARAM_OUTPUT_EHLERS_ADAPTIVE_CG,
9602];
9603
9604const PARAM_PRB: &[IndicatorParamInfo] = &[
9605 IndicatorParamInfo {
9606 key: "smooth_data",
9607 label: "Smooth Data",
9608 kind: IndicatorParamKind::Bool,
9609 required: false,
9610 default: Some(ParamValueStatic::Bool(true)),
9611 min: None,
9612 max: None,
9613 step: None,
9614 enum_values: ENUM_VALUES_TRUE_FALSE,
9615 notes: None,
9616 },
9617 IndicatorParamInfo {
9618 key: "smooth_period",
9619 label: "Smooth Period",
9620 kind: IndicatorParamKind::Int,
9621 required: false,
9622 default: Some(ParamValueStatic::Int(10)),
9623 min: Some(1.0),
9624 max: None,
9625 step: Some(1.0),
9626 enum_values: EMPTY_ENUM_VALUES,
9627 notes: None,
9628 },
9629 IndicatorParamInfo {
9630 key: "regression_period",
9631 label: "Regression Period",
9632 kind: IndicatorParamKind::Int,
9633 required: false,
9634 default: Some(ParamValueStatic::Int(100)),
9635 min: Some(1.0),
9636 max: None,
9637 step: Some(1.0),
9638 enum_values: EMPTY_ENUM_VALUES,
9639 notes: None,
9640 },
9641 IndicatorParamInfo {
9642 key: "polynomial_order",
9643 label: "Polynomial Order",
9644 kind: IndicatorParamKind::Int,
9645 required: false,
9646 default: Some(ParamValueStatic::Int(2)),
9647 min: Some(1.0),
9648 max: None,
9649 step: Some(1.0),
9650 enum_values: EMPTY_ENUM_VALUES,
9651 notes: None,
9652 },
9653 IndicatorParamInfo {
9654 key: "regression_offset",
9655 label: "Regression Offset",
9656 kind: IndicatorParamKind::Int,
9657 required: false,
9658 default: Some(ParamValueStatic::Int(0)),
9659 min: None,
9660 max: None,
9661 step: Some(1.0),
9662 enum_values: EMPTY_ENUM_VALUES,
9663 notes: None,
9664 },
9665 IndicatorParamInfo {
9666 key: "ndev",
9667 label: "NDev",
9668 kind: IndicatorParamKind::Float,
9669 required: false,
9670 default: Some(ParamValueStatic::Float(2.0)),
9671 min: Some(0.0),
9672 max: None,
9673 step: None,
9674 enum_values: EMPTY_ENUM_VALUES,
9675 notes: None,
9676 },
9677 IndicatorParamInfo {
9678 key: "equ_from",
9679 label: "Equ From",
9680 kind: IndicatorParamKind::Int,
9681 required: false,
9682 default: Some(ParamValueStatic::Int(0)),
9683 min: Some(0.0),
9684 max: None,
9685 step: Some(1.0),
9686 enum_values: EMPTY_ENUM_VALUES,
9687 notes: None,
9688 },
9689];
9690
9691const PARAM_POLYNOMIAL_REGRESSION_EXTRAPOLATION: &[IndicatorParamInfo] = &[
9692 IndicatorParamInfo {
9693 key: "length",
9694 label: "Length",
9695 kind: IndicatorParamKind::Int,
9696 required: false,
9697 default: Some(ParamValueStatic::Int(100)),
9698 min: Some(1.0),
9699 max: None,
9700 step: Some(1.0),
9701 enum_values: EMPTY_ENUM_VALUES,
9702 notes: None,
9703 },
9704 IndicatorParamInfo {
9705 key: "extrapolate",
9706 label: "Extrapolate",
9707 kind: IndicatorParamKind::Int,
9708 required: false,
9709 default: Some(ParamValueStatic::Int(10)),
9710 min: Some(0.0),
9711 max: None,
9712 step: Some(1.0),
9713 enum_values: EMPTY_ENUM_VALUES,
9714 notes: None,
9715 },
9716 IndicatorParamInfo {
9717 key: "degree",
9718 label: "Degree",
9719 kind: IndicatorParamKind::Int,
9720 required: false,
9721 default: Some(ParamValueStatic::Int(3)),
9722 min: Some(0.0),
9723 max: Some(8.0),
9724 step: Some(1.0),
9725 enum_values: EMPTY_ENUM_VALUES,
9726 notes: Some("Must satisfy degree + 1 <= length"),
9727 },
9728];
9729
9730const PARAM_STATISTICAL_TRAILING_STOP: &[IndicatorParamInfo] = &[
9731 IndicatorParamInfo {
9732 key: "data_length",
9733 label: "Data Length",
9734 kind: IndicatorParamKind::Int,
9735 required: false,
9736 default: Some(ParamValueStatic::Int(10)),
9737 min: Some(1.0),
9738 max: None,
9739 step: Some(1.0),
9740 enum_values: EMPTY_ENUM_VALUES,
9741 notes: Some("Corrected from the provided source so the data_length input controls the true-range window"),
9742 },
9743 IndicatorParamInfo {
9744 key: "normalization_length",
9745 label: "Distribution Length",
9746 kind: IndicatorParamKind::Int,
9747 required: false,
9748 default: Some(ParamValueStatic::Int(100)),
9749 min: Some(10.0),
9750 max: Some(5000.0),
9751 step: Some(1.0),
9752 enum_values: EMPTY_ENUM_VALUES,
9753 notes: None,
9754 },
9755 IndicatorParamInfo {
9756 key: "base_level",
9757 label: "Base Level",
9758 kind: IndicatorParamKind::EnumString,
9759 required: false,
9760 default: Some(ParamValueStatic::EnumString("level2")),
9761 min: None,
9762 max: None,
9763 step: None,
9764 enum_values: ENUM_VALUES_STATISTICAL_TRAILING_STOP_BASE_LEVEL,
9765 notes: None,
9766 },
9767];
9768
9769const PARAM_GEOMETRIC_BIAS_OSCILLATOR: &[IndicatorParamInfo] = &[
9770 IndicatorParamInfo {
9771 key: "length",
9772 label: "Window Size",
9773 kind: IndicatorParamKind::Int,
9774 required: false,
9775 default: Some(ParamValueStatic::Int(100)),
9776 min: Some(10.0),
9777 max: Some(500.0),
9778 step: Some(1.0),
9779 enum_values: EMPTY_ENUM_VALUES,
9780 notes: None,
9781 },
9782 IndicatorParamInfo {
9783 key: "multiplier",
9784 label: "ATR Multiplier",
9785 kind: IndicatorParamKind::Float,
9786 required: false,
9787 default: Some(ParamValueStatic::Float(2.0)),
9788 min: Some(0.1),
9789 max: None,
9790 step: Some(0.1),
9791 enum_values: EMPTY_ENUM_VALUES,
9792 notes: Some(
9793 "Used as the RDP simplification threshold against ATR-normalized price geometry",
9794 ),
9795 },
9796 IndicatorParamInfo {
9797 key: "atr_length",
9798 label: "ATR Length",
9799 kind: IndicatorParamKind::Int,
9800 required: false,
9801 default: Some(ParamValueStatic::Int(14)),
9802 min: Some(1.0),
9803 max: None,
9804 step: Some(1.0),
9805 enum_values: EMPTY_ENUM_VALUES,
9806 notes: None,
9807 },
9808 IndicatorParamInfo {
9809 key: "smooth",
9810 label: "Smoothing",
9811 kind: IndicatorParamKind::Int,
9812 required: false,
9813 default: Some(ParamValueStatic::Int(1)),
9814 min: Some(1.0),
9815 max: None,
9816 step: Some(1.0),
9817 enum_values: EMPTY_ENUM_VALUES,
9818 notes: None,
9819 },
9820];
9821
9822const PARAM_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR: &[IndicatorParamInfo] = &[
9823 IndicatorParamInfo {
9824 key: "fast_depth",
9825 label: "Fast Depth",
9826 kind: IndicatorParamKind::Int,
9827 required: false,
9828 default: Some(ParamValueStatic::Int(9)),
9829 min: Some(1.0),
9830 max: None,
9831 step: Some(1.0),
9832 enum_values: EMPTY_ENUM_VALUES,
9833 notes: None,
9834 },
9835 IndicatorParamInfo {
9836 key: "slow_depth",
9837 label: "Slow Depth",
9838 kind: IndicatorParamKind::Int,
9839 required: false,
9840 default: Some(ParamValueStatic::Int(24)),
9841 min: Some(1.0),
9842 max: None,
9843 step: Some(1.0),
9844 enum_values: EMPTY_ENUM_VALUES,
9845 notes: None,
9846 },
9847 IndicatorParamInfo {
9848 key: "fast_length",
9849 label: "Fast Length",
9850 kind: IndicatorParamKind::Int,
9851 required: false,
9852 default: Some(ParamValueStatic::Int(21)),
9853 min: Some(1.0),
9854 max: None,
9855 step: Some(1.0),
9856 enum_values: EMPTY_ENUM_VALUES,
9857 notes: None,
9858 },
9859 IndicatorParamInfo {
9860 key: "slow_length",
9861 label: "Slow Length",
9862 kind: IndicatorParamKind::Int,
9863 required: false,
9864 default: Some(ParamValueStatic::Int(34)),
9865 min: Some(1.0),
9866 max: None,
9867 step: Some(1.0),
9868 enum_values: EMPTY_ENUM_VALUES,
9869 notes: None,
9870 },
9871 IndicatorParamInfo {
9872 key: "signal_length",
9873 label: "Signal Length",
9874 kind: IndicatorParamKind::Int,
9875 required: false,
9876 default: Some(ParamValueStatic::Int(5)),
9877 min: Some(1.0),
9878 max: None,
9879 step: Some(1.0),
9880 enum_values: EMPTY_ENUM_VALUES,
9881 notes: None,
9882 },
9883 IndicatorParamInfo {
9884 key: "lookback",
9885 label: "Momentum Pivot Lookback",
9886 kind: IndicatorParamKind::Int,
9887 required: false,
9888 default: Some(ParamValueStatic::Int(3)),
9889 min: Some(1.0),
9890 max: None,
9891 step: Some(1.0),
9892 enum_values: EMPTY_ENUM_VALUES,
9893 notes: None,
9894 },
9895 IndicatorParamInfo {
9896 key: "err_tol",
9897 label: "Harmonic Tolerance",
9898 kind: IndicatorParamKind::Float,
9899 required: false,
9900 default: Some(ParamValueStatic::Float(0.15)),
9901 min: Some(0.01),
9902 max: Some(0.5),
9903 step: Some(0.01),
9904 enum_values: EMPTY_ENUM_VALUES,
9905 notes: Some(
9906 "Uses corrected XAD ratio instead of the constant 1.27 shown in the provided source",
9907 ),
9908 },
9909 IndicatorParamInfo {
9910 key: "show_standard",
9911 label: "Show Standard",
9912 kind: IndicatorParamKind::Bool,
9913 required: false,
9914 default: Some(ParamValueStatic::Bool(true)),
9915 min: None,
9916 max: None,
9917 step: None,
9918 enum_values: ENUM_VALUES_TRUE_FALSE,
9919 notes: None,
9920 },
9921 IndicatorParamInfo {
9922 key: "show_climax",
9923 label: "Show Climax",
9924 kind: IndicatorParamKind::Bool,
9925 required: false,
9926 default: Some(ParamValueStatic::Bool(true)),
9927 min: None,
9928 max: None,
9929 step: None,
9930 enum_values: ENUM_VALUES_TRUE_FALSE,
9931 notes: None,
9932 },
9933 IndicatorParamInfo {
9934 key: "show_rounded",
9935 label: "Show Rounded",
9936 kind: IndicatorParamKind::Bool,
9937 required: false,
9938 default: Some(ParamValueStatic::Bool(true)),
9939 min: None,
9940 max: None,
9941 step: None,
9942 enum_values: ENUM_VALUES_TRUE_FALSE,
9943 notes: None,
9944 },
9945 IndicatorParamInfo {
9946 key: "show_predator",
9947 label: "Show Predator",
9948 kind: IndicatorParamKind::Bool,
9949 required: false,
9950 default: Some(ParamValueStatic::Bool(true)),
9951 min: None,
9952 max: None,
9953 step: None,
9954 enum_values: ENUM_VALUES_TRUE_FALSE,
9955 notes: None,
9956 },
9957 IndicatorParamInfo {
9958 key: "show_gartley",
9959 label: "Show Gartley",
9960 kind: IndicatorParamKind::Bool,
9961 required: false,
9962 default: Some(ParamValueStatic::Bool(false)),
9963 min: None,
9964 max: None,
9965 step: None,
9966 enum_values: ENUM_VALUES_TRUE_FALSE,
9967 notes: None,
9968 },
9969 IndicatorParamInfo {
9970 key: "show_bat",
9971 label: "Show Bat",
9972 kind: IndicatorParamKind::Bool,
9973 required: false,
9974 default: Some(ParamValueStatic::Bool(false)),
9975 min: None,
9976 max: None,
9977 step: None,
9978 enum_values: ENUM_VALUES_TRUE_FALSE,
9979 notes: None,
9980 },
9981 IndicatorParamInfo {
9982 key: "show_butterfly",
9983 label: "Show Butterfly",
9984 kind: IndicatorParamKind::Bool,
9985 required: false,
9986 default: Some(ParamValueStatic::Bool(false)),
9987 min: None,
9988 max: None,
9989 step: None,
9990 enum_values: ENUM_VALUES_TRUE_FALSE,
9991 notes: None,
9992 },
9993 IndicatorParamInfo {
9994 key: "show_crab",
9995 label: "Show Crab",
9996 kind: IndicatorParamKind::Bool,
9997 required: false,
9998 default: Some(ParamValueStatic::Bool(false)),
9999 min: None,
10000 max: None,
10001 step: None,
10002 enum_values: ENUM_VALUES_TRUE_FALSE,
10003 notes: None,
10004 },
10005 IndicatorParamInfo {
10006 key: "show_deep",
10007 label: "Show Deep",
10008 kind: IndicatorParamKind::Bool,
10009 required: false,
10010 default: Some(ParamValueStatic::Bool(false)),
10011 min: None,
10012 max: None,
10013 step: None,
10014 enum_values: ENUM_VALUES_TRUE_FALSE,
10015 notes: None,
10016 },
10017 IndicatorParamInfo {
10018 key: "show_hs",
10019 label: "Show H&S",
10020 kind: IndicatorParamKind::Bool,
10021 required: false,
10022 default: Some(ParamValueStatic::Bool(true)),
10023 min: None,
10024 max: None,
10025 step: None,
10026 enum_values: ENUM_VALUES_TRUE_FALSE,
10027 notes: None,
10028 },
10029];
10030
10031const PARAM_QQE: &[IndicatorParamInfo] = &[
10032 IndicatorParamInfo {
10033 key: "rsi_period",
10034 label: "RSI Period",
10035 kind: IndicatorParamKind::Int,
10036 required: false,
10037 default: Some(ParamValueStatic::Int(14)),
10038 min: Some(1.0),
10039 max: None,
10040 step: Some(1.0),
10041 enum_values: EMPTY_ENUM_VALUES,
10042 notes: None,
10043 },
10044 IndicatorParamInfo {
10045 key: "smoothing_factor",
10046 label: "Smoothing Factor",
10047 kind: IndicatorParamKind::Int,
10048 required: false,
10049 default: Some(ParamValueStatic::Int(5)),
10050 min: Some(1.0),
10051 max: None,
10052 step: Some(1.0),
10053 enum_values: EMPTY_ENUM_VALUES,
10054 notes: None,
10055 },
10056 IndicatorParamInfo {
10057 key: "fast_factor",
10058 label: "Fast Factor",
10059 kind: IndicatorParamKind::Float,
10060 required: false,
10061 default: Some(ParamValueStatic::Float(4.236)),
10062 min: Some(0.0),
10063 max: None,
10064 step: None,
10065 enum_values: EMPTY_ENUM_VALUES,
10066 notes: None,
10067 },
10068];
10069
10070const PARAM_QQE_WEIGHTED_OSCILLATOR: &[IndicatorParamInfo] = &[
10071 IndicatorParamInfo {
10072 key: "length",
10073 label: "Length",
10074 kind: IndicatorParamKind::Int,
10075 required: false,
10076 default: Some(ParamValueStatic::Int(14)),
10077 min: Some(1.0),
10078 max: None,
10079 step: Some(1.0),
10080 enum_values: EMPTY_ENUM_VALUES,
10081 notes: None,
10082 },
10083 IndicatorParamInfo {
10084 key: "factor",
10085 label: "Factor",
10086 kind: IndicatorParamKind::Float,
10087 required: false,
10088 default: Some(ParamValueStatic::Float(4.236)),
10089 min: Some(0.0),
10090 max: None,
10091 step: None,
10092 enum_values: EMPTY_ENUM_VALUES,
10093 notes: None,
10094 },
10095 IndicatorParamInfo {
10096 key: "smooth",
10097 label: "Smooth",
10098 kind: IndicatorParamKind::Int,
10099 required: false,
10100 default: Some(ParamValueStatic::Int(5)),
10101 min: Some(1.0),
10102 max: None,
10103 step: Some(1.0),
10104 enum_values: EMPTY_ENUM_VALUES,
10105 notes: None,
10106 },
10107 IndicatorParamInfo {
10108 key: "weight",
10109 label: "Weight",
10110 kind: IndicatorParamKind::Float,
10111 required: false,
10112 default: Some(ParamValueStatic::Float(2.0)),
10113 min: None,
10114 max: None,
10115 step: None,
10116 enum_values: EMPTY_ENUM_VALUES,
10117 notes: None,
10118 },
10119];
10120
10121const PARAM_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR: &[IndicatorParamInfo] = &[
10122 IndicatorParamInfo {
10123 key: "length",
10124 label: "Length",
10125 kind: IndicatorParamKind::Int,
10126 required: false,
10127 default: Some(ParamValueStatic::Int(20)),
10128 min: Some(1.0),
10129 max: None,
10130 step: Some(1.0),
10131 enum_values: EMPTY_ENUM_VALUES,
10132 notes: None,
10133 },
10134 IndicatorParamInfo {
10135 key: "smooth",
10136 label: "Smoothing",
10137 kind: IndicatorParamKind::Int,
10138 required: false,
10139 default: Some(ParamValueStatic::Int(10)),
10140 min: Some(1.0),
10141 max: None,
10142 step: Some(1.0),
10143 enum_values: EMPTY_ENUM_VALUES,
10144 notes: None,
10145 },
10146];
10147
10148const PARAM_ADAPTIVE_BOUNDS_RSI: &[IndicatorParamInfo] = &[
10149 IndicatorParamInfo {
10150 key: "rsi_length",
10151 label: "RSI Length",
10152 kind: IndicatorParamKind::Int,
10153 required: false,
10154 default: Some(ParamValueStatic::Int(14)),
10155 min: Some(1.0),
10156 max: None,
10157 step: Some(1.0),
10158 enum_values: EMPTY_ENUM_VALUES,
10159 notes: None,
10160 },
10161 IndicatorParamInfo {
10162 key: "alpha",
10163 label: "Learning Rate",
10164 kind: IndicatorParamKind::Float,
10165 required: false,
10166 default: Some(ParamValueStatic::Float(0.1)),
10167 min: Some(0.001),
10168 max: Some(1.0),
10169 step: Some(0.001),
10170 enum_values: EMPTY_ENUM_VALUES,
10171 notes: None,
10172 },
10173];
10174
10175const PARAM_RANGE_OSCILLATOR: &[IndicatorParamInfo] = &[
10176 IndicatorParamInfo {
10177 key: "length",
10178 label: "Length",
10179 kind: IndicatorParamKind::Int,
10180 required: false,
10181 default: Some(ParamValueStatic::Int(50)),
10182 min: Some(1.0),
10183 max: None,
10184 step: Some(1.0),
10185 enum_values: EMPTY_ENUM_VALUES,
10186 notes: None,
10187 },
10188 IndicatorParamInfo {
10189 key: "mult",
10190 label: "Multiplier",
10191 kind: IndicatorParamKind::Float,
10192 required: false,
10193 default: Some(ParamValueStatic::Float(2.0)),
10194 min: Some(0.1),
10195 max: None,
10196 step: Some(0.1),
10197 enum_values: EMPTY_ENUM_VALUES,
10198 notes: None,
10199 },
10200];
10201const PARAM_RANGE_FILTERED_TREND_SIGNALS: &[IndicatorParamInfo] = &[
10202 IndicatorParamInfo {
10203 key: "kalman_alpha",
10204 label: "Kalman Alpha",
10205 kind: IndicatorParamKind::Float,
10206 required: false,
10207 default: Some(ParamValueStatic::Float(0.01)),
10208 min: Some(0.0),
10209 max: None,
10210 step: Some(0.01),
10211 enum_values: EMPTY_ENUM_VALUES,
10212 notes: None,
10213 },
10214 IndicatorParamInfo {
10215 key: "kalman_beta",
10216 label: "Kalman Beta",
10217 kind: IndicatorParamKind::Float,
10218 required: false,
10219 default: Some(ParamValueStatic::Float(0.1)),
10220 min: Some(0.0),
10221 max: None,
10222 step: Some(0.1),
10223 enum_values: EMPTY_ENUM_VALUES,
10224 notes: None,
10225 },
10226 IndicatorParamInfo {
10227 key: "kalman_period",
10228 label: "Kalman Period",
10229 kind: IndicatorParamKind::Int,
10230 required: false,
10231 default: Some(ParamValueStatic::Int(77)),
10232 min: Some(1.0),
10233 max: None,
10234 step: Some(1.0),
10235 enum_values: EMPTY_ENUM_VALUES,
10236 notes: None,
10237 },
10238 IndicatorParamInfo {
10239 key: "dev",
10240 label: "Deviation",
10241 kind: IndicatorParamKind::Float,
10242 required: false,
10243 default: Some(ParamValueStatic::Float(1.2)),
10244 min: Some(0.0),
10245 max: None,
10246 step: Some(0.1),
10247 enum_values: EMPTY_ENUM_VALUES,
10248 notes: None,
10249 },
10250 IndicatorParamInfo {
10251 key: "supertrend_factor",
10252 label: "Supertrend Factor",
10253 kind: IndicatorParamKind::Float,
10254 required: false,
10255 default: Some(ParamValueStatic::Float(0.7)),
10256 min: Some(0.0),
10257 max: None,
10258 step: Some(0.1),
10259 enum_values: EMPTY_ENUM_VALUES,
10260 notes: None,
10261 },
10262 IndicatorParamInfo {
10263 key: "supertrend_atr_period",
10264 label: "Supertrend ATR Period",
10265 kind: IndicatorParamKind::Int,
10266 required: false,
10267 default: Some(ParamValueStatic::Int(7)),
10268 min: Some(1.0),
10269 max: None,
10270 step: Some(1.0),
10271 enum_values: EMPTY_ENUM_VALUES,
10272 notes: None,
10273 },
10274];
10275const ENUM_VALUES_MSC_BOS_CONFIRMATION: &[&str] = &["Candle Close", "Wicks"];
10276const PARAM_MARKET_STRUCTURE_CONFLUENCE: &[IndicatorParamInfo] = &[
10277 IndicatorParamInfo {
10278 key: "swing_size",
10279 label: "Time Horizon",
10280 kind: IndicatorParamKind::Int,
10281 required: false,
10282 default: Some(ParamValueStatic::Int(10)),
10283 min: Some(2.0),
10284 max: None,
10285 step: Some(1.0),
10286 enum_values: EMPTY_ENUM_VALUES,
10287 notes: None,
10288 },
10289 IndicatorParamInfo {
10290 key: "bos_confirmation",
10291 label: "BOS Confirmation",
10292 kind: IndicatorParamKind::EnumString,
10293 required: false,
10294 default: Some(ParamValueStatic::EnumString("Candle Close")),
10295 min: None,
10296 max: None,
10297 step: None,
10298 enum_values: ENUM_VALUES_MSC_BOS_CONFIRMATION,
10299 notes: None,
10300 },
10301 IndicatorParamInfo {
10302 key: "basis_length",
10303 label: "Basis Length",
10304 kind: IndicatorParamKind::Int,
10305 required: false,
10306 default: Some(ParamValueStatic::Int(100)),
10307 min: Some(1.0),
10308 max: None,
10309 step: Some(1.0),
10310 enum_values: EMPTY_ENUM_VALUES,
10311 notes: None,
10312 },
10313 IndicatorParamInfo {
10314 key: "atr_length",
10315 label: "ATR Length",
10316 kind: IndicatorParamKind::Int,
10317 required: false,
10318 default: Some(ParamValueStatic::Int(14)),
10319 min: Some(1.0),
10320 max: None,
10321 step: Some(1.0),
10322 enum_values: EMPTY_ENUM_VALUES,
10323 notes: None,
10324 },
10325 IndicatorParamInfo {
10326 key: "atr_smooth",
10327 label: "ATR Smoothing",
10328 kind: IndicatorParamKind::Int,
10329 required: false,
10330 default: Some(ParamValueStatic::Int(21)),
10331 min: Some(1.0),
10332 max: None,
10333 step: Some(1.0),
10334 enum_values: EMPTY_ENUM_VALUES,
10335 notes: None,
10336 },
10337 IndicatorParamInfo {
10338 key: "vol_mult",
10339 label: "Volatility Multiplier",
10340 kind: IndicatorParamKind::Float,
10341 required: false,
10342 default: Some(ParamValueStatic::Float(2.0)),
10343 min: Some(0.0),
10344 max: None,
10345 step: Some(0.1),
10346 enum_values: EMPTY_ENUM_VALUES,
10347 notes: None,
10348 },
10349];
10350const ENUM_VALUES_VWRSI_MA_TYPE: &[&str] = &["EMA", "SMA", "HMA", "SMMA (RMA)", "WMA", "VWMA"];
10351const PARAM_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX: &[IndicatorParamInfo] = &[
10352 IndicatorParamInfo {
10353 key: "rsi_length",
10354 label: "RSI Length",
10355 kind: IndicatorParamKind::Int,
10356 required: false,
10357 default: Some(ParamValueStatic::Int(14)),
10358 min: Some(1.0),
10359 max: None,
10360 step: Some(1.0),
10361 enum_values: EMPTY_ENUM_VALUES,
10362 notes: None,
10363 },
10364 IndicatorParamInfo {
10365 key: "range_length",
10366 label: "Consolidation Length",
10367 kind: IndicatorParamKind::Int,
10368 required: false,
10369 default: Some(ParamValueStatic::Int(10)),
10370 min: Some(1.0),
10371 max: None,
10372 step: Some(1.0),
10373 enum_values: EMPTY_ENUM_VALUES,
10374 notes: None,
10375 },
10376 IndicatorParamInfo {
10377 key: "ma_length",
10378 label: "RSI MA Length",
10379 kind: IndicatorParamKind::Int,
10380 required: false,
10381 default: Some(ParamValueStatic::Int(14)),
10382 min: Some(1.0),
10383 max: None,
10384 step: Some(1.0),
10385 enum_values: EMPTY_ENUM_VALUES,
10386 notes: None,
10387 },
10388 IndicatorParamInfo {
10389 key: "ma_type",
10390 label: "RSI MA Type",
10391 kind: IndicatorParamKind::EnumString,
10392 required: false,
10393 default: Some(ParamValueStatic::EnumString("EMA")),
10394 min: None,
10395 max: None,
10396 step: None,
10397 enum_values: ENUM_VALUES_VWRSI_MA_TYPE,
10398 notes: None,
10399 },
10400];
10401
10402const PARAM_RANGE_FILTER: &[IndicatorParamInfo] = &[
10403 IndicatorParamInfo {
10404 key: "range_size",
10405 label: "Range Size",
10406 kind: IndicatorParamKind::Float,
10407 required: false,
10408 default: Some(ParamValueStatic::Float(2.618)),
10409 min: Some(0.0),
10410 max: None,
10411 step: None,
10412 enum_values: EMPTY_ENUM_VALUES,
10413 notes: None,
10414 },
10415 IndicatorParamInfo {
10416 key: "range_period",
10417 label: "Range Period",
10418 kind: IndicatorParamKind::Int,
10419 required: false,
10420 default: Some(ParamValueStatic::Int(14)),
10421 min: Some(1.0),
10422 max: None,
10423 step: Some(1.0),
10424 enum_values: EMPTY_ENUM_VALUES,
10425 notes: None,
10426 },
10427 IndicatorParamInfo {
10428 key: "smooth_range",
10429 label: "Smooth Range",
10430 kind: IndicatorParamKind::Bool,
10431 required: false,
10432 default: Some(ParamValueStatic::Bool(true)),
10433 min: None,
10434 max: None,
10435 step: None,
10436 enum_values: ENUM_VALUES_TRUE_FALSE,
10437 notes: None,
10438 },
10439 IndicatorParamInfo {
10440 key: "smooth_period",
10441 label: "Smooth Period",
10442 kind: IndicatorParamKind::Int,
10443 required: false,
10444 default: Some(ParamValueStatic::Int(27)),
10445 min: Some(1.0),
10446 max: None,
10447 step: Some(1.0),
10448 enum_values: EMPTY_ENUM_VALUES,
10449 notes: None,
10450 },
10451];
10452
10453const PARAM_RSMK: &[IndicatorParamInfo] = &[
10454 IndicatorParamInfo {
10455 key: "lookback",
10456 label: "Lookback",
10457 kind: IndicatorParamKind::Int,
10458 required: false,
10459 default: Some(ParamValueStatic::Int(90)),
10460 min: Some(1.0),
10461 max: None,
10462 step: Some(1.0),
10463 enum_values: EMPTY_ENUM_VALUES,
10464 notes: None,
10465 },
10466 IndicatorParamInfo {
10467 key: "period",
10468 label: "Period",
10469 kind: IndicatorParamKind::Int,
10470 required: false,
10471 default: Some(ParamValueStatic::Int(3)),
10472 min: Some(1.0),
10473 max: None,
10474 step: Some(1.0),
10475 enum_values: EMPTY_ENUM_VALUES,
10476 notes: None,
10477 },
10478 IndicatorParamInfo {
10479 key: "signal_period",
10480 label: "Signal Period",
10481 kind: IndicatorParamKind::Int,
10482 required: false,
10483 default: Some(ParamValueStatic::Int(20)),
10484 min: Some(1.0),
10485 max: None,
10486 step: Some(1.0),
10487 enum_values: EMPTY_ENUM_VALUES,
10488 notes: None,
10489 },
10490 IndicatorParamInfo {
10491 key: "matype",
10492 label: "MA Type",
10493 kind: IndicatorParamKind::EnumString,
10494 required: false,
10495 default: Some(ParamValueStatic::EnumString("ema")),
10496 min: None,
10497 max: None,
10498 step: None,
10499 enum_values: EMPTY_ENUM_VALUES,
10500 notes: None,
10501 },
10502 IndicatorParamInfo {
10503 key: "signal_matype",
10504 label: "Signal MA Type",
10505 kind: IndicatorParamKind::EnumString,
10506 required: false,
10507 default: Some(ParamValueStatic::EnumString("ema")),
10508 min: None,
10509 max: None,
10510 step: None,
10511 enum_values: EMPTY_ENUM_VALUES,
10512 notes: None,
10513 },
10514];
10515
10516const PARAM_VOSS: &[IndicatorParamInfo] = &[
10517 IndicatorParamInfo {
10518 key: "period",
10519 label: "Period",
10520 kind: IndicatorParamKind::Int,
10521 required: false,
10522 default: Some(ParamValueStatic::Int(20)),
10523 min: Some(1.0),
10524 max: None,
10525 step: Some(1.0),
10526 enum_values: EMPTY_ENUM_VALUES,
10527 notes: None,
10528 },
10529 IndicatorParamInfo {
10530 key: "predict",
10531 label: "Predict",
10532 kind: IndicatorParamKind::Int,
10533 required: false,
10534 default: Some(ParamValueStatic::Int(3)),
10535 min: Some(1.0),
10536 max: None,
10537 step: Some(1.0),
10538 enum_values: EMPTY_ENUM_VALUES,
10539 notes: None,
10540 },
10541 IndicatorParamInfo {
10542 key: "bandwidth",
10543 label: "Bandwidth",
10544 kind: IndicatorParamKind::Float,
10545 required: false,
10546 default: Some(ParamValueStatic::Float(0.25)),
10547 min: Some(0.0),
10548 max: None,
10549 step: None,
10550 enum_values: EMPTY_ENUM_VALUES,
10551 notes: None,
10552 },
10553];
10554
10555const PARAM_STC: &[IndicatorParamInfo] = &[
10556 IndicatorParamInfo {
10557 key: "fast_period",
10558 label: "Fast Period",
10559 kind: IndicatorParamKind::Int,
10560 required: false,
10561 default: Some(ParamValueStatic::Int(23)),
10562 min: Some(1.0),
10563 max: None,
10564 step: Some(1.0),
10565 enum_values: EMPTY_ENUM_VALUES,
10566 notes: None,
10567 },
10568 IndicatorParamInfo {
10569 key: "slow_period",
10570 label: "Slow Period",
10571 kind: IndicatorParamKind::Int,
10572 required: false,
10573 default: Some(ParamValueStatic::Int(50)),
10574 min: Some(1.0),
10575 max: None,
10576 step: Some(1.0),
10577 enum_values: EMPTY_ENUM_VALUES,
10578 notes: None,
10579 },
10580 IndicatorParamInfo {
10581 key: "k_period",
10582 label: "K Period",
10583 kind: IndicatorParamKind::Int,
10584 required: false,
10585 default: Some(ParamValueStatic::Int(10)),
10586 min: Some(1.0),
10587 max: None,
10588 step: Some(1.0),
10589 enum_values: EMPTY_ENUM_VALUES,
10590 notes: None,
10591 },
10592 IndicatorParamInfo {
10593 key: "d_period",
10594 label: "D Period",
10595 kind: IndicatorParamKind::Int,
10596 required: false,
10597 default: Some(ParamValueStatic::Int(3)),
10598 min: Some(1.0),
10599 max: None,
10600 step: Some(1.0),
10601 enum_values: EMPTY_ENUM_VALUES,
10602 notes: None,
10603 },
10604];
10605
10606const PARAM_RVI: &[IndicatorParamInfo] = &[
10607 IndicatorParamInfo {
10608 key: "period",
10609 label: "Period",
10610 kind: IndicatorParamKind::Int,
10611 required: false,
10612 default: Some(ParamValueStatic::Int(10)),
10613 min: Some(1.0),
10614 max: None,
10615 step: Some(1.0),
10616 enum_values: EMPTY_ENUM_VALUES,
10617 notes: None,
10618 },
10619 IndicatorParamInfo {
10620 key: "ma_len",
10621 label: "MA Length",
10622 kind: IndicatorParamKind::Int,
10623 required: false,
10624 default: Some(ParamValueStatic::Int(14)),
10625 min: Some(1.0),
10626 max: None,
10627 step: Some(1.0),
10628 enum_values: EMPTY_ENUM_VALUES,
10629 notes: None,
10630 },
10631 IndicatorParamInfo {
10632 key: "matype",
10633 label: "MA Type",
10634 kind: IndicatorParamKind::Int,
10635 required: false,
10636 default: Some(ParamValueStatic::Int(1)),
10637 min: Some(0.0),
10638 max: None,
10639 step: Some(1.0),
10640 enum_values: EMPTY_ENUM_VALUES,
10641 notes: None,
10642 },
10643 IndicatorParamInfo {
10644 key: "devtype",
10645 label: "Deviation Type",
10646 kind: IndicatorParamKind::Int,
10647 required: false,
10648 default: Some(ParamValueStatic::Int(0)),
10649 min: Some(0.0),
10650 max: None,
10651 step: Some(1.0),
10652 enum_values: EMPTY_ENUM_VALUES,
10653 notes: None,
10654 },
10655];
10656
10657const PARAM_COPPOCK: &[IndicatorParamInfo] = &[
10658 IndicatorParamInfo {
10659 key: "short_roc_period",
10660 label: "Short ROC Period",
10661 kind: IndicatorParamKind::Int,
10662 required: false,
10663 default: Some(ParamValueStatic::Int(11)),
10664 min: Some(1.0),
10665 max: None,
10666 step: Some(1.0),
10667 enum_values: EMPTY_ENUM_VALUES,
10668 notes: None,
10669 },
10670 IndicatorParamInfo {
10671 key: "long_roc_period",
10672 label: "Long ROC Period",
10673 kind: IndicatorParamKind::Int,
10674 required: false,
10675 default: Some(ParamValueStatic::Int(14)),
10676 min: Some(1.0),
10677 max: None,
10678 step: Some(1.0),
10679 enum_values: EMPTY_ENUM_VALUES,
10680 notes: None,
10681 },
10682 IndicatorParamInfo {
10683 key: "ma_period",
10684 label: "MA Period",
10685 kind: IndicatorParamKind::Int,
10686 required: false,
10687 default: Some(ParamValueStatic::Int(10)),
10688 min: Some(1.0),
10689 max: None,
10690 step: Some(1.0),
10691 enum_values: EMPTY_ENUM_VALUES,
10692 notes: None,
10693 },
10694];
10695
10696const PARAM_PIVOT: &[IndicatorParamInfo] = &[IndicatorParamInfo {
10697 key: "mode",
10698 label: "Mode",
10699 kind: IndicatorParamKind::Int,
10700 required: false,
10701 default: Some(ParamValueStatic::Int(3)),
10702 min: Some(0.0),
10703 max: None,
10704 step: Some(1.0),
10705 enum_values: EMPTY_ENUM_VALUES,
10706 notes: None,
10707}];
10708
10709const SUPPLEMENTAL_SEED_NOTE: &str =
10710 "Phase 1 seed metadata; parameter and capability metadata will expand.";
10711
10712struct SupplementalIndicatorSeed {
10713 id: &'static str,
10714 label: &'static str,
10715 category: &'static str,
10716 input_kind: IndicatorInputKind,
10717 outputs: &'static [IndicatorOutputInfo],
10718 params: &'static [IndicatorParamInfo],
10719}
10720
10721const SUPPLEMENTAL_INDICATORS: &[SupplementalIndicatorSeed] = &[
10722 SupplementalIndicatorSeed {
10723 id: "adx",
10724 label: "ADX",
10725 category: "trend",
10726 input_kind: IndicatorInputKind::Ohlc,
10727 outputs: OUTPUTS_VALUE_F64,
10728 params: PARAM_ADX_PERIOD,
10729 },
10730 SupplementalIndicatorSeed {
10731 id: "adxr",
10732 label: "ADXR",
10733 category: "trend",
10734 input_kind: IndicatorInputKind::Ohlc,
10735 outputs: OUTPUTS_VALUE_F64,
10736 params: PARAM_ADX_PERIOD,
10737 },
10738 SupplementalIndicatorSeed {
10739 id: "dx",
10740 label: "DX",
10741 category: "trend",
10742 input_kind: IndicatorInputKind::Ohlc,
10743 outputs: OUTPUTS_VALUE_F64,
10744 params: PARAM_DX_PERIOD,
10745 },
10746 SupplementalIndicatorSeed {
10747 id: "di",
10748 label: "DI",
10749 category: "trend",
10750 input_kind: IndicatorInputKind::Ohlc,
10751 outputs: OUTPUTS_PLUS_MINUS,
10752 params: PARAM_DI,
10753 },
10754 SupplementalIndicatorSeed {
10755 id: "dm",
10756 label: "DM",
10757 category: "trend",
10758 input_kind: IndicatorInputKind::HighLow,
10759 outputs: OUTPUTS_PLUS_MINUS,
10760 params: PARAM_DM,
10761 },
10762 SupplementalIndicatorSeed {
10763 id: "vi",
10764 label: "VI",
10765 category: "trend",
10766 input_kind: IndicatorInputKind::Ohlc,
10767 outputs: OUTPUTS_PLUS_MINUS,
10768 params: PARAM_VI,
10769 },
10770 SupplementalIndicatorSeed {
10771 id: "donchian",
10772 label: "Donchian",
10773 category: "volatility",
10774 input_kind: IndicatorInputKind::HighLow,
10775 outputs: OUTPUTS_BOLLINGER,
10776 params: PARAM_DONCHIAN,
10777 },
10778 SupplementalIndicatorSeed {
10779 id: "supertrend",
10780 label: "SuperTrend",
10781 category: "trend",
10782 input_kind: IndicatorInputKind::Ohlc,
10783 outputs: OUTPUTS_TREND_CHANGED,
10784 params: PARAM_SUPERTREND,
10785 },
10786 SupplementalIndicatorSeed {
10787 id: "adjustable_ma_alternating_extremities",
10788 label: "Adjustable MA & Alternating Extremities",
10789 category: "trend",
10790 input_kind: IndicatorInputKind::Ohlc,
10791 outputs: OUTPUTS_ADJUSTABLE_MA_ALTERNATING_EXTREMITIES,
10792 params: PARAM_ADJUSTABLE_MA_ALTERNATING_EXTREMITIES,
10793 },
10794 SupplementalIndicatorSeed {
10795 id: "supertrend_recovery",
10796 label: "SuperTrend Recovery",
10797 category: "trend",
10798 input_kind: IndicatorInputKind::Ohlc,
10799 outputs: OUTPUTS_SUPERTREND_RECOVERY,
10800 params: PARAM_SUPERTREND_RECOVERY,
10801 },
10802 SupplementalIndicatorSeed {
10803 id: "keltner",
10804 label: "Keltner",
10805 category: "volatility",
10806 input_kind: IndicatorInputKind::Ohlc,
10807 outputs: OUTPUTS_BOLLINGER,
10808 params: PARAM_KELTNER,
10809 },
10810 SupplementalIndicatorSeed {
10811 id: "aroon",
10812 label: "Aroon",
10813 category: "trend",
10814 input_kind: IndicatorInputKind::HighLow,
10815 outputs: OUTPUTS_UP_DOWN,
10816 params: PARAM_AROON,
10817 },
10818 SupplementalIndicatorSeed {
10819 id: "aroonosc",
10820 label: "Aroon Oscillator",
10821 category: "momentum",
10822 input_kind: IndicatorInputKind::HighLow,
10823 outputs: OUTPUTS_VALUE_F64,
10824 params: PARAM_AROON,
10825 },
10826 SupplementalIndicatorSeed {
10827 id: "srsi",
10828 label: "Stochastic RSI",
10829 category: "momentum",
10830 input_kind: IndicatorInputKind::Slice,
10831 outputs: OUTPUTS_STOCH,
10832 params: PARAM_SRSI,
10833 },
10834 SupplementalIndicatorSeed {
10835 id: "stochastic_connors_rsi",
10836 label: "Stochastic Connors RSI",
10837 category: "momentum",
10838 input_kind: IndicatorInputKind::Slice,
10839 outputs: OUTPUTS_STOCH,
10840 params: PARAM_STOCHASTIC_CONNORS_RSI,
10841 },
10842 SupplementalIndicatorSeed {
10843 id: "kdj",
10844 label: "KDJ",
10845 category: "momentum",
10846 input_kind: IndicatorInputKind::Ohlc,
10847 outputs: OUTPUTS_KDJ,
10848 params: PARAM_KDJ,
10849 },
10850 SupplementalIndicatorSeed {
10851 id: "squeeze_momentum",
10852 label: "Squeeze Momentum",
10853 category: "momentum",
10854 input_kind: IndicatorInputKind::Ohlc,
10855 outputs: OUTPUTS_SQUEEZE_MOMENTUM,
10856 params: PARAM_SQUEEZE_MOMENTUM,
10857 },
10858 SupplementalIndicatorSeed {
10859 id: "wavetrend",
10860 label: "WaveTrend",
10861 category: "momentum",
10862 input_kind: IndicatorInputKind::Slice,
10863 outputs: OUTPUTS_WAVETREND,
10864 params: PARAM_WAVETREND,
10865 },
10866 SupplementalIndicatorSeed {
10867 id: "wto",
10868 label: "WTO",
10869 category: "momentum",
10870 input_kind: IndicatorInputKind::Slice,
10871 outputs: OUTPUTS_WTO,
10872 params: PARAM_WTO,
10873 },
10874 SupplementalIndicatorSeed {
10875 id: "accumulation_swing_index",
10876 label: "Accumulation Swing Index",
10877 category: "volatility",
10878 input_kind: IndicatorInputKind::Ohlc,
10879 outputs: OUTPUTS_VALUE_F64,
10880 params: PARAM_ACCUMULATION_SWING_INDEX,
10881 },
10882 SupplementalIndicatorSeed {
10883 id: "daily_factor",
10884 label: "Daily Factor",
10885 category: "momentum",
10886 input_kind: IndicatorInputKind::Ohlc,
10887 outputs: OUTPUTS_DAILY_FACTOR,
10888 params: PARAM_DAILY_FACTOR,
10889 },
10890 SupplementalIndicatorSeed {
10891 id: "moving_average_cross_probability",
10892 label: "Moving Average Cross Probability",
10893 category: "momentum",
10894 input_kind: IndicatorInputKind::Candles,
10895 outputs: OUTPUTS_MOVING_AVERAGE_CROSS_PROBABILITY,
10896 params: PARAM_MOVING_AVERAGE_CROSS_PROBABILITY,
10897 },
10898 SupplementalIndicatorSeed {
10899 id: "bulls_v_bears",
10900 label: "Bulls v Bears",
10901 category: "momentum",
10902 input_kind: IndicatorInputKind::Ohlc,
10903 outputs: OUTPUTS_BULLS_V_BEARS,
10904 params: PARAM_BULLS_V_BEARS,
10905 },
10906 SupplementalIndicatorSeed {
10907 id: "regression_slope_oscillator",
10908 label: "Regression Slope Oscillator",
10909 category: "momentum",
10910 input_kind: IndicatorInputKind::Candles,
10911 outputs: OUTPUTS_REGRESSION_SLOPE_OSCILLATOR,
10912 params: PARAM_REGRESSION_SLOPE_OSCILLATOR,
10913 },
10914 SupplementalIndicatorSeed {
10915 id: "smooth_theil_sen",
10916 label: "Smooth Theil-Sen",
10917 category: "trend",
10918 input_kind: IndicatorInputKind::Candles,
10919 outputs: OUTPUTS_SMOOTH_THEIL_SEN,
10920 params: PARAM_SMOOTH_THEIL_SEN,
10921 },
10922 SupplementalIndicatorSeed {
10923 id: "l2_ehlers_signal_to_noise",
10924 label: "L2 Ehlers Signal to Noise",
10925 category: "cycle",
10926 input_kind: IndicatorInputKind::Candles,
10927 outputs: OUTPUTS_VALUE_F64,
10928 params: PARAM_L2_EHLERS_SIGNAL_TO_NOISE,
10929 },
10930 SupplementalIndicatorSeed {
10931 id: "ehlers_smoothed_adaptive_momentum",
10932 label: "Ehlers Smoothed Adaptive Momentum",
10933 category: "cycle",
10934 input_kind: IndicatorInputKind::Candles,
10935 outputs: OUTPUTS_VALUE_F64,
10936 params: PARAM_EHLERS_SMOOTHED_ADAPTIVE_MOMENTUM,
10937 },
10938 SupplementalIndicatorSeed {
10939 id: "ehlers_adaptive_cyber_cycle",
10940 label: "Ehlers Adaptive Cyber Cycle",
10941 category: "cycle",
10942 input_kind: IndicatorInputKind::Candles,
10943 outputs: OUTPUTS_EHLERS_SIMPLE_CYCLE_INDICATOR,
10944 params: PARAM_EHLERS_ADAPTIVE_CYBER_CYCLE,
10945 },
10946 SupplementalIndicatorSeed {
10947 id: "ehlers_simple_cycle_indicator",
10948 label: "Ehlers Simple Cycle Indicator",
10949 category: "cycle",
10950 input_kind: IndicatorInputKind::Candles,
10951 outputs: OUTPUTS_EHLERS_SIMPLE_CYCLE_INDICATOR,
10952 params: PARAM_EHLERS_SIMPLE_CYCLE_INDICATOR,
10953 },
10954 SupplementalIndicatorSeed {
10955 id: "l1_ehlers_phasor",
10956 label: "L1 Ehlers Phasor",
10957 category: "cycle",
10958 input_kind: IndicatorInputKind::Candles,
10959 outputs: OUTPUTS_VALUE_F64,
10960 params: PARAM_L1_EHLERS_PHASOR,
10961 },
10962 SupplementalIndicatorSeed {
10963 id: "andean_oscillator",
10964 label: "Andean Oscillator",
10965 category: "trend",
10966 input_kind: IndicatorInputKind::Candles,
10967 outputs: OUTPUTS_ANDEAN_OSCILLATOR,
10968 params: PARAM_ANDEAN_OSCILLATOR,
10969 },
10970 SupplementalIndicatorSeed {
10971 id: "cycle_channel_oscillator",
10972 label: "Cycle Channel Oscillator",
10973 category: "cycle",
10974 input_kind: IndicatorInputKind::Candles,
10975 outputs: OUTPUTS_CYCLE_CHANNEL_OSCILLATOR,
10976 params: PARAM_CYCLE_CHANNEL_OSCILLATOR,
10977 },
10978 SupplementalIndicatorSeed {
10979 id: "ewma_volatility",
10980 label: "EWMA Volatility",
10981 category: "volatility",
10982 input_kind: IndicatorInputKind::Slice,
10983 outputs: OUTPUTS_VALUE_F64,
10984 params: PARAM_EWMA_VOLATILITY,
10985 },
10986 SupplementalIndicatorSeed {
10987 id: "ichimoku_oscillator",
10988 label: "Ichimoku Oscillator",
10989 category: "trend",
10990 input_kind: IndicatorInputKind::Candles,
10991 outputs: OUTPUTS_ICHIMOKU_OSCILLATOR,
10992 params: PARAM_ICHIMOKU_OSCILLATOR,
10993 },
10994 SupplementalIndicatorSeed {
10995 id: "random_walk_index",
10996 label: "Random Walk Index",
10997 category: "volatility",
10998 input_kind: IndicatorInputKind::Ohlc,
10999 outputs: OUTPUTS_RANDOM_WALK_INDEX,
11000 params: PARAM_RANDOM_WALK_INDEX,
11001 },
11002 SupplementalIndicatorSeed {
11003 id: "price_moving_average_ratio_percentile",
11004 label: "Price Moving Average Ratio & Percentile",
11005 category: "momentum",
11006 input_kind: IndicatorInputKind::Candles,
11007 outputs: OUTPUTS_PRICE_MOVING_AVERAGE_RATIO_PERCENTILE,
11008 params: PARAM_PRICE_MOVING_AVERAGE_RATIO_PERCENTILE,
11009 },
11010 SupplementalIndicatorSeed {
11011 id: "relative_strength_index_wave_indicator",
11012 label: "Relative Strength Index Wave Indicator",
11013 category: "momentum",
11014 input_kind: IndicatorInputKind::Candles,
11015 outputs: OUTPUTS_RELATIVE_STRENGTH_INDEX_WAVE_INDICATOR,
11016 params: PARAM_RELATIVE_STRENGTH_INDEX_WAVE_INDICATOR,
11017 },
11018 SupplementalIndicatorSeed {
11019 id: "mesa_stochastic_multi_length",
11020 label: "MESA Stochastic Multi Length",
11021 category: "momentum",
11022 input_kind: IndicatorInputKind::Candles,
11023 outputs: OUTPUTS_MESA_STOCHASTIC_MULTI_LENGTH,
11024 params: PARAM_MESA_STOCHASTIC_MULTI_LENGTH,
11025 },
11026 SupplementalIndicatorSeed {
11027 id: "spearman_correlation",
11028 label: "Spearman Correlation",
11029 category: "relative_strength",
11030 input_kind: IndicatorInputKind::Candles,
11031 outputs: OUTPUTS_SPEARMAN_CORRELATION,
11032 params: PARAM_SPEARMAN_CORRELATION,
11033 },
11034 SupplementalIndicatorSeed {
11035 id: "trend_trigger_factor",
11036 label: "Trend Trigger Factor",
11037 category: "momentum",
11038 input_kind: IndicatorInputKind::HighLow,
11039 outputs: OUTPUTS_VALUE_F64,
11040 params: PARAM_TREND_TRIGGER_FACTOR,
11041 },
11042 SupplementalIndicatorSeed {
11043 id: "volatility_quality_index",
11044 label: "Volatility Quality Index",
11045 category: "volatility",
11046 input_kind: IndicatorInputKind::Ohlc,
11047 outputs: OUTPUTS_VOLATILITY_QUALITY_INDEX,
11048 params: PARAM_VOLATILITY_QUALITY_INDEX,
11049 },
11050 SupplementalIndicatorSeed {
11051 id: "yang_zhang_volatility",
11052 label: "Yang-Zhang Volatility",
11053 category: "volatility",
11054 input_kind: IndicatorInputKind::Ohlc,
11055 outputs: OUTPUTS_YANG_ZHANG,
11056 params: PARAM_YANG_ZHANG,
11057 },
11058 SupplementalIndicatorSeed {
11059 id: "garman_klass_volatility",
11060 label: "Garman-Klass Volatility",
11061 category: "volatility",
11062 input_kind: IndicatorInputKind::Ohlc,
11063 outputs: OUTPUTS_VALUE_F64,
11064 params: PARAM_GARMAN_KLASS,
11065 },
11066 SupplementalIndicatorSeed {
11067 id: "parkinson_volatility",
11068 label: "Parkinson Volatility",
11069 category: "volatility",
11070 input_kind: IndicatorInputKind::HighLow,
11071 outputs: OUTPUTS_PARKINSON,
11072 params: PARAM_PARKINSON,
11073 },
11074 SupplementalIndicatorSeed {
11075 id: "atr_percentile",
11076 label: "ATR Percentile",
11077 category: "volatility",
11078 input_kind: IndicatorInputKind::Ohlc,
11079 outputs: OUTPUTS_VALUE_F64,
11080 params: PARAM_ATR_PERCENTILE,
11081 },
11082 SupplementalIndicatorSeed {
11083 id: "advance_decline_line",
11084 label: "Advance-Decline Line",
11085 category: "breadth",
11086 input_kind: IndicatorInputKind::Slice,
11087 outputs: OUTPUTS_VALUE_F64,
11088 params: PARAM_NONE,
11089 },
11090 SupplementalIndicatorSeed {
11091 id: "decisionpoint_breadth_swenlin_trading_oscillator",
11092 label: "DecisionPoint Breadth Swenlin Trading Oscillator",
11093 category: "breadth",
11094 input_kind: IndicatorInputKind::HighLow,
11095 outputs: OUTPUTS_VALUE_F64,
11096 params: PARAM_NONE,
11097 },
11098 SupplementalIndicatorSeed {
11099 id: "velocity_acceleration_indicator",
11100 label: "Velocity Acceleration Indicator",
11101 category: "momentum",
11102 input_kind: IndicatorInputKind::Candles,
11103 outputs: OUTPUTS_VALUE_F64,
11104 params: PARAM_VELOCITY_ACCELERATION_INDICATOR,
11105 },
11106 SupplementalIndicatorSeed {
11107 id: "normalized_resonator",
11108 label: "Normalized Resonator",
11109 category: "cycle",
11110 input_kind: IndicatorInputKind::Candles,
11111 outputs: OUTPUTS_OSCILLATOR_SIGNAL,
11112 params: PARAM_NORMALIZED_RESONATOR,
11113 },
11114 SupplementalIndicatorSeed {
11115 id: "monotonicity_index",
11116 label: "Monotonicity Index",
11117 category: "statistics",
11118 input_kind: IndicatorInputKind::Candles,
11119 outputs: OUTPUTS_MONOTONICITY_INDEX,
11120 params: PARAM_MONOTONICITY_INDEX,
11121 },
11122 SupplementalIndicatorSeed {
11123 id: "half_causal_estimator",
11124 label: "Half Causal Estimator",
11125 category: "statistics",
11126 input_kind: IndicatorInputKind::Candles,
11127 outputs: OUTPUTS_HALF_CAUSAL_ESTIMATOR,
11128 params: PARAM_HALF_CAUSAL_ESTIMATOR,
11129 },
11130 SupplementalIndicatorSeed {
11131 id: "bull_power_vs_bear_power",
11132 label: "Bull Power vs Bear Power",
11133 category: "momentum",
11134 input_kind: IndicatorInputKind::Ohlc,
11135 outputs: OUTPUTS_VALUE_F64,
11136 params: PARAM_BULL_POWER_VS_BEAR_POWER,
11137 },
11138 SupplementalIndicatorSeed {
11139 id: "historical_volatility",
11140 label: "Historical Volatility",
11141 category: "volatility",
11142 input_kind: IndicatorInputKind::Slice,
11143 outputs: OUTPUTS_VALUE_F64,
11144 params: PARAM_HISTORICAL_VOLATILITY,
11145 },
11146 SupplementalIndicatorSeed {
11147 id: "absolute_strength_index_oscillator",
11148 label: "Absolute Strength Index Oscillator",
11149 category: "momentum",
11150 input_kind: IndicatorInputKind::Slice,
11151 outputs: OUTPUTS_OSCILLATOR_SIGNAL_HISTOGRAM,
11152 params: PARAM_ABSOLUTE_STRENGTH_INDEX_OSCILLATOR,
11153 },
11154 SupplementalIndicatorSeed {
11155 id: "adaptive_bandpass_trigger_oscillator",
11156 label: "Adaptive Bandpass Trigger Oscillator",
11157 category: "cycle",
11158 input_kind: IndicatorInputKind::Slice,
11159 outputs: OUTPUTS_IN_PHASE_LEAD,
11160 params: PARAM_ADAPTIVE_BANDPASS_TRIGGER_OSCILLATOR,
11161 },
11162 SupplementalIndicatorSeed {
11163 id: "premier_rsi_oscillator",
11164 label: "Premier RSI Oscillator",
11165 category: "momentum",
11166 input_kind: IndicatorInputKind::Slice,
11167 outputs: OUTPUTS_VALUE_F64,
11168 params: PARAM_PREMIER_RSI_OSCILLATOR,
11169 },
11170 SupplementalIndicatorSeed {
11171 id: "multi_length_stochastic_average",
11172 label: "Multi-Length Stochastic Average",
11173 category: "momentum",
11174 input_kind: IndicatorInputKind::Candles,
11175 outputs: OUTPUTS_VALUE_F64,
11176 params: PARAM_MULTI_LENGTH_STOCHASTIC_AVERAGE,
11177 },
11178 SupplementalIndicatorSeed {
11179 id: "hull_butterfly_oscillator",
11180 label: "Hull Butterfly Oscillator",
11181 category: "momentum",
11182 input_kind: IndicatorInputKind::Candles,
11183 outputs: OUTPUTS_HULL_BUTTERFLY_OSCILLATOR,
11184 params: PARAM_HULL_BUTTERFLY_OSCILLATOR,
11185 },
11186 SupplementalIndicatorSeed {
11187 id: "fibonacci_trailing_stop",
11188 label: "Fibonacci Trailing Stop",
11189 category: "trend",
11190 input_kind: IndicatorInputKind::Ohlc,
11191 outputs: OUTPUTS_FIBONACCI_TRAILING_STOP,
11192 params: PARAM_FIBONACCI_TRAILING_STOP,
11193 },
11194 SupplementalIndicatorSeed {
11195 id: "fibonacci_entry_bands",
11196 label: "Fibonacci Entry Bands",
11197 category: "trend",
11198 input_kind: IndicatorInputKind::Ohlc,
11199 outputs: OUTPUTS_FIBONACCI_ENTRY_BANDS,
11200 params: PARAM_FIBONACCI_ENTRY_BANDS,
11201 },
11202 SupplementalIndicatorSeed {
11203 id: "volume_energy_reservoirs",
11204 label: "Volume Energy Reservoirs",
11205 category: "volume",
11206 input_kind: IndicatorInputKind::Ohlcv,
11207 outputs: OUTPUTS_VOLUME_ENERGY_RESERVOIRS,
11208 params: PARAM_VOLUME_ENERGY_RESERVOIRS,
11209 },
11210 SupplementalIndicatorSeed {
11211 id: "neighboring_trailing_stop",
11212 label: "Neighboring Trailing Stop",
11213 category: "trend",
11214 input_kind: IndicatorInputKind::Ohlc,
11215 outputs: OUTPUTS_NEIGHBORING_TRAILING_STOP,
11216 params: PARAM_NEIGHBORING_TRAILING_STOP,
11217 },
11218 SupplementalIndicatorSeed {
11219 id: "macd_wave_signal_pro",
11220 label: "MACD Wave Signal Pro",
11221 category: "momentum",
11222 input_kind: IndicatorInputKind::Ohlc,
11223 outputs: OUTPUTS_MACD_WAVE_SIGNAL_PRO,
11224 params: PARAM_NONE,
11225 },
11226 SupplementalIndicatorSeed {
11227 id: "hema_trend_levels",
11228 label: "HEMA Trend Levels",
11229 category: "trend",
11230 input_kind: IndicatorInputKind::Ohlc,
11231 outputs: OUTPUTS_HEMA_TREND_LEVELS,
11232 params: PARAM_HEMA_TREND_LEVELS,
11233 },
11234 SupplementalIndicatorSeed {
11235 id: "grover_llorens_cycle_oscillator",
11236 label: "Grover Llorens Cycle Oscillator",
11237 category: "cycle",
11238 input_kind: IndicatorInputKind::Ohlc,
11239 outputs: OUTPUTS_VALUE_F64,
11240 params: PARAM_GROVER_LLORENS_CYCLE_OSCILLATOR,
11241 },
11242 SupplementalIndicatorSeed {
11243 id: "squeeze_index",
11244 label: "Squeeze Index",
11245 category: "volatility",
11246 input_kind: IndicatorInputKind::Slice,
11247 outputs: OUTPUTS_VALUE_F64,
11248 params: PARAM_SQUEEZE_INDEX,
11249 },
11250 SupplementalIndicatorSeed {
11251 id: "stochastic_distance",
11252 label: "Stochastic Distance",
11253 category: "momentum",
11254 input_kind: IndicatorInputKind::Slice,
11255 outputs: OUTPUTS_OSCILLATOR_SIGNAL,
11256 params: PARAM_STOCHASTIC_DISTANCE,
11257 },
11258 SupplementalIndicatorSeed {
11259 id: "vertical_horizontal_filter",
11260 label: "Vertical Horizontal Filter",
11261 category: "trend",
11262 input_kind: IndicatorInputKind::Slice,
11263 outputs: OUTPUTS_VALUE_F64,
11264 params: PARAM_VERTICAL_HORIZONTAL_FILTER,
11265 },
11266 SupplementalIndicatorSeed {
11267 id: "intraday_momentum_index",
11268 label: "Intraday Momentum Index",
11269 category: "momentum",
11270 input_kind: IndicatorInputKind::Ohlc,
11271 outputs: &[
11272 OUTPUT_IMI,
11273 OUTPUT_UPPER_HIT,
11274 OUTPUT_LOWER_HIT,
11275 OUTPUT_SIGNAL,
11276 ],
11277 params: PARAM_INTRADAY_MOMENTUM_INDEX,
11278 },
11279 SupplementalIndicatorSeed {
11280 id: "vwap_zscore_with_signals",
11281 label: "VWAP Z-Score With Signals",
11282 category: "volume",
11283 input_kind: IndicatorInputKind::CloseVolume,
11284 outputs: &[
11285 OUTPUT_ZVWAP,
11286 OUTPUT_SUPPORT_SIGNAL,
11287 OUTPUT_RESISTANCE_SIGNAL,
11288 ],
11289 params: PARAM_VWAP_ZSCORE_WITH_SIGNALS,
11290 },
11291 SupplementalIndicatorSeed {
11292 id: "demand_index",
11293 label: "Demand Index",
11294 category: "volume",
11295 input_kind: IndicatorInputKind::Ohlcv,
11296 outputs: &[OUTPUT_DEMAND_INDEX, OUTPUT_SIGNAL],
11297 params: PARAM_DEMAND_INDEX,
11298 },
11299 SupplementalIndicatorSeed {
11300 id: "didi_index",
11301 label: "Didi Index",
11302 category: "momentum",
11303 input_kind: IndicatorInputKind::Slice,
11304 outputs: &[
11305 OUTPUT_SHORT,
11306 OUTPUT_LONG,
11307 OUTPUT_CROSSOVER,
11308 OUTPUT_CROSSUNDER,
11309 ],
11310 params: PARAM_DIDI_INDEX,
11311 },
11312 SupplementalIndicatorSeed {
11313 id: "ehlers_autocorrelation_periodogram",
11314 label: "Ehlers Autocorrelation Periodogram",
11315 category: "cycle",
11316 input_kind: IndicatorInputKind::Slice,
11317 outputs: &[OUTPUT_DOMINANT_CYCLE, OUTPUT_NORMALIZED_POWER],
11318 params: PARAM_EHLERS_AUTOCORRELATION_PERIODOGRAM,
11319 },
11320 SupplementalIndicatorSeed {
11321 id: "ehlers_linear_extrapolation_predictor",
11322 label: "Ehlers Linear Extrapolation Predictor",
11323 category: "cycle",
11324 input_kind: IndicatorInputKind::Slice,
11325 outputs: &[
11326 OUTPUT_PREDICTION,
11327 OUTPUT_FILTER,
11328 OUTPUT_STATE,
11329 OUTPUT_GO_LONG,
11330 OUTPUT_GO_SHORT,
11331 ],
11332 params: PARAM_EHLERS_LINEAR_EXTRAPOLATION_PREDICTOR,
11333 },
11334 SupplementalIndicatorSeed {
11335 id: "kase_peak_oscillator_with_divergences",
11336 label: "Kase Peak Oscillator With Divergences",
11337 category: "momentum",
11338 input_kind: IndicatorInputKind::Ohlc,
11339 outputs: &[
11340 OUTPUT_OSCILLATOR,
11341 OUTPUT_HIST,
11342 OUTPUT_MAX_PEAK_VALUE,
11343 OUTPUT_MIN_PEAK_VALUE,
11344 OUTPUT_MARKET_EXTREME,
11345 OUTPUT_REGULAR_BULLISH,
11346 OUTPUT_HIDDEN_BULLISH,
11347 OUTPUT_REGULAR_BEARISH,
11348 OUTPUT_HIDDEN_BEARISH,
11349 OUTPUT_GO_LONG,
11350 OUTPUT_GO_SHORT,
11351 ],
11352 params: PARAM_KASE_PEAK_OSCILLATOR_WITH_DIVERGENCES,
11353 },
11354 SupplementalIndicatorSeed {
11355 id: "gopalakrishnan_range_index",
11356 label: "Gopalakrishnan Range Index",
11357 category: "volatility",
11358 input_kind: IndicatorInputKind::HighLow,
11359 outputs: OUTPUTS_VALUE_F64,
11360 params: PARAM_GOPALAKRISHNAN_RANGE_INDEX,
11361 },
11362 SupplementalIndicatorSeed {
11363 id: "atr",
11364 label: "ATR",
11365 category: "volatility",
11366 input_kind: IndicatorInputKind::Ohlc,
11367 outputs: OUTPUTS_VALUE_F64,
11368 params: PARAM_ATR_PERIOD,
11369 },
11370 SupplementalIndicatorSeed {
11371 id: "ad",
11372 label: "AD",
11373 category: "volume",
11374 input_kind: IndicatorInputKind::Ohlcv,
11375 outputs: OUTPUTS_VALUE_F64,
11376 params: PARAM_NONE,
11377 },
11378 SupplementalIndicatorSeed {
11379 id: "adosc",
11380 label: "ADOSC",
11381 category: "volume",
11382 input_kind: IndicatorInputKind::Ohlcv,
11383 outputs: OUTPUTS_VALUE_F64,
11384 params: PARAM_ADOSC,
11385 },
11386 SupplementalIndicatorSeed {
11387 id: "ao",
11388 label: "AO",
11389 category: "momentum",
11390 input_kind: IndicatorInputKind::HighLow,
11391 outputs: OUTPUTS_VALUE_F64,
11392 params: PARAM_AO,
11393 },
11394 SupplementalIndicatorSeed {
11395 id: "bop",
11396 label: "BOP",
11397 category: "momentum",
11398 input_kind: IndicatorInputKind::Ohlc,
11399 outputs: OUTPUTS_VALUE_F64,
11400 params: PARAM_NONE,
11401 },
11402 SupplementalIndicatorSeed {
11403 id: "emv",
11404 label: "EMV",
11405 category: "volume",
11406 input_kind: IndicatorInputKind::Ohlcv,
11407 outputs: OUTPUTS_VALUE_F64,
11408 params: PARAM_NONE,
11409 },
11410 SupplementalIndicatorSeed {
11411 id: "efi",
11412 label: "EFI",
11413 category: "volume",
11414 input_kind: IndicatorInputKind::CloseVolume,
11415 outputs: OUTPUTS_VALUE_F64,
11416 params: PARAM_EFI_PERIOD,
11417 },
11418 SupplementalIndicatorSeed {
11419 id: "dti",
11420 label: "DTI",
11421 category: "momentum",
11422 input_kind: IndicatorInputKind::HighLow,
11423 outputs: OUTPUTS_VALUE_F64,
11424 params: PARAM_DTI,
11425 },
11426 SupplementalIndicatorSeed {
11427 id: "mfi",
11428 label: "MFI",
11429 category: "volume",
11430 input_kind: IndicatorInputKind::CloseVolume,
11431 outputs: OUTPUTS_VALUE_F64,
11432 params: PARAM_MFI_PERIOD,
11433 },
11434 SupplementalIndicatorSeed {
11435 id: "volume_weighted_rsi",
11436 label: "Volume Weighted RSI",
11437 category: "volume",
11438 input_kind: IndicatorInputKind::CloseVolume,
11439 outputs: OUTPUTS_VALUE_F64,
11440 params: PARAM_RSI_PERIOD,
11441 },
11442 SupplementalIndicatorSeed {
11443 id: "mass",
11444 label: "MASS",
11445 category: "volatility",
11446 input_kind: IndicatorInputKind::HighLow,
11447 outputs: OUTPUTS_VALUE_F64,
11448 params: PARAM_MASS_PERIOD,
11449 },
11450 SupplementalIndicatorSeed {
11451 id: "kvo",
11452 label: "KVO",
11453 category: "volume",
11454 input_kind: IndicatorInputKind::Ohlcv,
11455 outputs: OUTPUTS_VALUE_F64,
11456 params: PARAM_KVO,
11457 },
11458 SupplementalIndicatorSeed {
11459 id: "vosc",
11460 label: "VOSC",
11461 category: "volume",
11462 input_kind: IndicatorInputKind::Slice,
11463 outputs: OUTPUTS_VALUE_F64,
11464 params: PARAM_VOSC,
11465 },
11466 SupplementalIndicatorSeed {
11467 id: "rsi",
11468 label: "RSI",
11469 category: "momentum",
11470 input_kind: IndicatorInputKind::Slice,
11471 outputs: OUTPUTS_VALUE_F64,
11472 params: PARAM_RSI_PERIOD,
11473 },
11474 SupplementalIndicatorSeed {
11475 id: "rsx",
11476 label: "RSX",
11477 category: "momentum",
11478 input_kind: IndicatorInputKind::Slice,
11479 outputs: OUTPUTS_VALUE_F64,
11480 params: PARAM_RSI_PERIOD,
11481 },
11482 SupplementalIndicatorSeed {
11483 id: "roc",
11484 label: "ROC",
11485 category: "momentum",
11486 input_kind: IndicatorInputKind::Slice,
11487 outputs: OUTPUTS_VALUE_F64,
11488 params: PARAM_ROC_PERIOD,
11489 },
11490 SupplementalIndicatorSeed {
11491 id: "linear_correlation_oscillator",
11492 label: "Linear Correlation Oscillator",
11493 category: "momentum",
11494 input_kind: IndicatorInputKind::Slice,
11495 outputs: OUTPUTS_VALUE_F64,
11496 params: PARAM_LINEAR_CORRELATION_OSCILLATOR_PERIOD,
11497 },
11498 SupplementalIndicatorSeed {
11499 id: "ehlers_fm_demodulator",
11500 label: "Ehlers FM Demodulator",
11501 category: "momentum",
11502 input_kind: IndicatorInputKind::Ohlc,
11503 outputs: OUTPUTS_VALUE_F64,
11504 params: PARAM_EHLERS_FM_DEMODULATOR_PERIOD,
11505 },
11506 SupplementalIndicatorSeed {
11507 id: "ehlers_adaptive_cg",
11508 label: "Ehlers Adaptive CG",
11509 category: "momentum",
11510 input_kind: IndicatorInputKind::Slice,
11511 outputs: OUTPUTS_EHLERS_ADAPTIVE_CG,
11512 params: PARAM_EHLERS_ADAPTIVE_CG,
11513 },
11514 SupplementalIndicatorSeed {
11515 id: "adaptive_momentum_oscillator",
11516 label: "Adaptive Momentum Oscillator",
11517 category: "momentum",
11518 input_kind: IndicatorInputKind::Slice,
11519 outputs: OUTPUTS_ADAPTIVE_MOMENTUM_OSCILLATOR,
11520 params: PARAM_ADAPTIVE_MOMENTUM_OSCILLATOR,
11521 },
11522 SupplementalIndicatorSeed {
11523 id: "velocity",
11524 label: "Velocity",
11525 category: "momentum",
11526 input_kind: IndicatorInputKind::Slice,
11527 outputs: OUTPUTS_VALUE_F64,
11528 params: PARAM_VELOCITY,
11529 },
11530 SupplementalIndicatorSeed {
11531 id: "normalized_volume_true_range",
11532 label: "Normalized Volume True Range",
11533 category: "volume",
11534 input_kind: IndicatorInputKind::Ohlcv,
11535 outputs: OUTPUTS_NORMALIZED_VOLUME_TRUE_RANGE,
11536 params: PARAM_NORMALIZED_VOLUME_TRUE_RANGE,
11537 },
11538 SupplementalIndicatorSeed {
11539 id: "exponential_trend",
11540 label: "Exponential Trend",
11541 category: "trend",
11542 input_kind: IndicatorInputKind::Ohlc,
11543 outputs: OUTPUTS_EXPONENTIAL_TREND,
11544 params: PARAM_EXPONENTIAL_TREND,
11545 },
11546 SupplementalIndicatorSeed {
11547 id: "trend_flow_trail",
11548 label: "Trend Flow Trail",
11549 category: "trend",
11550 input_kind: IndicatorInputKind::Ohlcv,
11551 outputs: OUTPUTS_TREND_FLOW_TRAIL,
11552 params: PARAM_TREND_FLOW_TRAIL,
11553 },
11554 SupplementalIndicatorSeed {
11555 id: "range_breakout_signals",
11556 label: "Range Breakout Signals",
11557 category: "trend",
11558 input_kind: IndicatorInputKind::Ohlcv,
11559 outputs: OUTPUTS_RANGE_BREAKOUT_SIGNALS,
11560 params: PARAM_RANGE_BREAKOUT_SIGNALS,
11561 },
11562 SupplementalIndicatorSeed {
11563 id: "apo",
11564 label: "APO",
11565 category: "momentum",
11566 input_kind: IndicatorInputKind::Slice,
11567 outputs: OUTPUTS_VALUE_F64,
11568 params: PARAM_APO,
11569 },
11570 SupplementalIndicatorSeed {
11571 id: "cci",
11572 label: "CCI",
11573 category: "momentum",
11574 input_kind: IndicatorInputKind::Slice,
11575 outputs: OUTPUTS_VALUE_F64,
11576 params: PARAM_CCI_PERIOD,
11577 },
11578 SupplementalIndicatorSeed {
11579 id: "cci_cycle",
11580 label: "CCI Cycle",
11581 category: "momentum",
11582 input_kind: IndicatorInputKind::Slice,
11583 outputs: OUTPUTS_VALUE_F64,
11584 params: PARAM_CCI_CYCLE,
11585 },
11586 SupplementalIndicatorSeed {
11587 id: "cfo",
11588 label: "CFO",
11589 category: "momentum",
11590 input_kind: IndicatorInputKind::Slice,
11591 outputs: OUTPUTS_VALUE_F64,
11592 params: PARAM_CFO,
11593 },
11594 SupplementalIndicatorSeed {
11595 id: "cg",
11596 label: "CG",
11597 category: "momentum",
11598 input_kind: IndicatorInputKind::Slice,
11599 outputs: OUTPUTS_VALUE_F64,
11600 params: PARAM_CG_PERIOD,
11601 },
11602 SupplementalIndicatorSeed {
11603 id: "er",
11604 label: "ER",
11605 category: "momentum",
11606 input_kind: IndicatorInputKind::Slice,
11607 outputs: OUTPUTS_VALUE_F64,
11608 params: PARAM_ER_PERIOD,
11609 },
11610 SupplementalIndicatorSeed {
11611 id: "kurtosis",
11612 label: "Kurtosis",
11613 category: "statistics",
11614 input_kind: IndicatorInputKind::Slice,
11615 outputs: OUTPUTS_VALUE_F64,
11616 params: PARAM_KURTOSIS_PERIOD,
11617 },
11618 SupplementalIndicatorSeed {
11619 id: "natr",
11620 label: "NATR",
11621 category: "volatility",
11622 input_kind: IndicatorInputKind::Ohlc,
11623 outputs: OUTPUTS_VALUE_F64,
11624 params: PARAM_NATR_PERIOD,
11625 },
11626 SupplementalIndicatorSeed {
11627 id: "mean_ad",
11628 label: "Mean AD",
11629 category: "statistics",
11630 input_kind: IndicatorInputKind::Slice,
11631 outputs: OUTPUTS_VALUE_F64,
11632 params: PARAM_MEAN_AD_PERIOD,
11633 },
11634 SupplementalIndicatorSeed {
11635 id: "medium_ad",
11636 label: "Medium AD",
11637 category: "statistics",
11638 input_kind: IndicatorInputKind::Slice,
11639 outputs: OUTPUTS_VALUE_F64,
11640 params: PARAM_MEDIUM_AD_PERIOD,
11641 },
11642 SupplementalIndicatorSeed {
11643 id: "deviation",
11644 label: "Deviation",
11645 category: "statistics",
11646 input_kind: IndicatorInputKind::Slice,
11647 outputs: OUTPUTS_VALUE_F64,
11648 params: PARAM_DEVIATION,
11649 },
11650 SupplementalIndicatorSeed {
11651 id: "dpo",
11652 label: "DPO",
11653 category: "trend",
11654 input_kind: IndicatorInputKind::Slice,
11655 outputs: OUTPUTS_VALUE_F64,
11656 params: PARAM_DPO_PERIOD,
11657 },
11658 SupplementalIndicatorSeed {
11659 id: "fosc",
11660 label: "FOSC",
11661 category: "momentum",
11662 input_kind: IndicatorInputKind::Slice,
11663 outputs: OUTPUTS_VALUE_F64,
11664 params: PARAM_FOSC_PERIOD,
11665 },
11666 SupplementalIndicatorSeed {
11667 id: "ift_rsi",
11668 label: "IFT RSI",
11669 category: "momentum",
11670 input_kind: IndicatorInputKind::Slice,
11671 outputs: OUTPUTS_VALUE_F64,
11672 params: PARAM_IFT_RSI,
11673 },
11674 SupplementalIndicatorSeed {
11675 id: "linearreg_angle",
11676 label: "Linear Regression Angle",
11677 category: "trend",
11678 input_kind: IndicatorInputKind::Slice,
11679 outputs: OUTPUTS_VALUE_F64,
11680 params: PARAM_LINEARREG_ANGLE_PERIOD,
11681 },
11682 SupplementalIndicatorSeed {
11683 id: "linearreg_intercept",
11684 label: "Linear Regression Intercept",
11685 category: "trend",
11686 input_kind: IndicatorInputKind::Slice,
11687 outputs: OUTPUTS_VALUE_F64,
11688 params: PARAM_LINEARREG_INTERCEPT_PERIOD,
11689 },
11690 SupplementalIndicatorSeed {
11691 id: "linearreg_slope",
11692 label: "Linear Regression Slope",
11693 category: "trend",
11694 input_kind: IndicatorInputKind::Slice,
11695 outputs: OUTPUTS_VALUE_F64,
11696 params: PARAM_LINEARREG_SLOPE_PERIOD,
11697 },
11698 SupplementalIndicatorSeed {
11699 id: "pfe",
11700 label: "PFE",
11701 category: "trend",
11702 input_kind: IndicatorInputKind::Slice,
11703 outputs: OUTPUTS_VALUE_F64,
11704 params: PARAM_PFE,
11705 },
11706 SupplementalIndicatorSeed {
11707 id: "qstick",
11708 label: "QStick",
11709 category: "trend",
11710 input_kind: IndicatorInputKind::Ohlc,
11711 outputs: OUTPUTS_VALUE_F64,
11712 params: PARAM_QSTICK,
11713 },
11714 SupplementalIndicatorSeed {
11715 id: "reverse_rsi",
11716 label: "Reverse RSI",
11717 category: "momentum",
11718 input_kind: IndicatorInputKind::Slice,
11719 outputs: OUTPUTS_VALUE_F64,
11720 params: PARAM_REVERSE_RSI,
11721 },
11722 SupplementalIndicatorSeed {
11723 id: "percentile_nearest_rank",
11724 label: "Percentile Nearest Rank",
11725 category: "statistics",
11726 input_kind: IndicatorInputKind::Slice,
11727 outputs: OUTPUTS_VALUE_F64,
11728 params: PARAM_PERCENTILE_NEAREST_RANK,
11729 },
11730 SupplementalIndicatorSeed {
11731 id: "ui",
11732 label: "UI",
11733 category: "volatility",
11734 input_kind: IndicatorInputKind::Slice,
11735 outputs: OUTPUTS_VALUE_F64,
11736 params: PARAM_UI,
11737 },
11738 SupplementalIndicatorSeed {
11739 id: "zscore",
11740 label: "Zscore",
11741 category: "statistics",
11742 input_kind: IndicatorInputKind::Slice,
11743 outputs: OUTPUTS_VALUE_F64,
11744 params: PARAM_ZSCORE,
11745 },
11746 SupplementalIndicatorSeed {
11747 id: "medprice",
11748 label: "Medprice",
11749 category: "price",
11750 input_kind: IndicatorInputKind::HighLow,
11751 outputs: OUTPUTS_VALUE_F64,
11752 params: PARAM_NONE,
11753 },
11754 SupplementalIndicatorSeed {
11755 id: "midpoint",
11756 label: "Midpoint",
11757 category: "price",
11758 input_kind: IndicatorInputKind::Slice,
11759 outputs: OUTPUTS_VALUE_F64,
11760 params: PARAM_MIDPOINT_PERIOD,
11761 },
11762 SupplementalIndicatorSeed {
11763 id: "midprice",
11764 label: "Midprice",
11765 category: "price",
11766 input_kind: IndicatorInputKind::HighLow,
11767 outputs: OUTPUTS_VALUE_F64,
11768 params: PARAM_MIDPRICE_PERIOD,
11769 },
11770 SupplementalIndicatorSeed {
11771 id: "wclprice",
11772 label: "WCLPRICE",
11773 category: "price",
11774 input_kind: IndicatorInputKind::Ohlc,
11775 outputs: OUTPUTS_VALUE_F64,
11776 params: PARAM_NONE,
11777 },
11778 SupplementalIndicatorSeed {
11779 id: "obv",
11780 label: "OBV",
11781 category: "volume",
11782 input_kind: IndicatorInputKind::CloseVolume,
11783 outputs: OUTPUTS_VALUE_F64,
11784 params: PARAM_NONE,
11785 },
11786 SupplementalIndicatorSeed {
11787 id: "vpt",
11788 label: "VPT",
11789 category: "volume",
11790 input_kind: IndicatorInputKind::CloseVolume,
11791 outputs: OUTPUTS_VALUE_F64,
11792 params: PARAM_NONE,
11793 },
11794 SupplementalIndicatorSeed {
11795 id: "nvi",
11796 label: "NVI",
11797 category: "volume",
11798 input_kind: IndicatorInputKind::CloseVolume,
11799 outputs: OUTPUTS_VALUE_F64,
11800 params: PARAM_NONE,
11801 },
11802 SupplementalIndicatorSeed {
11803 id: "pvi",
11804 label: "PVI",
11805 category: "volume",
11806 input_kind: IndicatorInputKind::CloseVolume,
11807 outputs: OUTPUTS_VALUE_F64,
11808 params: PARAM_PVI,
11809 },
11810 SupplementalIndicatorSeed {
11811 id: "mom",
11812 label: "MOM",
11813 category: "momentum",
11814 input_kind: IndicatorInputKind::Slice,
11815 outputs: OUTPUTS_VALUE_F64,
11816 params: PARAM_MOM_PERIOD,
11817 },
11818 SupplementalIndicatorSeed {
11819 id: "cmo",
11820 label: "CMO",
11821 category: "momentum",
11822 input_kind: IndicatorInputKind::Slice,
11823 outputs: OUTPUTS_VALUE_F64,
11824 params: PARAM_CMO_PERIOD,
11825 },
11826 SupplementalIndicatorSeed {
11827 id: "dec_osc",
11828 label: "Dec Osc",
11829 category: "momentum",
11830 input_kind: IndicatorInputKind::Slice,
11831 outputs: OUTPUTS_VALUE_F64,
11832 params: PARAM_DEC_OSC,
11833 },
11834 SupplementalIndicatorSeed {
11835 id: "lrsi",
11836 label: "LRSI",
11837 category: "momentum",
11838 input_kind: IndicatorInputKind::HighLow,
11839 outputs: OUTPUTS_VALUE_F64,
11840 params: PARAM_LRSI_ALPHA,
11841 },
11842 SupplementalIndicatorSeed {
11843 id: "rocp",
11844 label: "ROCP",
11845 category: "momentum",
11846 input_kind: IndicatorInputKind::Slice,
11847 outputs: OUTPUTS_VALUE_F64,
11848 params: PARAM_ROCP_PERIOD,
11849 },
11850 SupplementalIndicatorSeed {
11851 id: "rocr",
11852 label: "ROCR",
11853 category: "momentum",
11854 input_kind: IndicatorInputKind::Slice,
11855 outputs: OUTPUTS_VALUE_F64,
11856 params: PARAM_ROCR_PERIOD,
11857 },
11858 SupplementalIndicatorSeed {
11859 id: "tsf",
11860 label: "TSF",
11861 category: "trend",
11862 input_kind: IndicatorInputKind::Slice,
11863 outputs: OUTPUTS_VALUE_F64,
11864 params: PARAM_TSF_PERIOD,
11865 },
11866 SupplementalIndicatorSeed {
11867 id: "adaptive_macd",
11868 label: "Adaptive MACD",
11869 category: "momentum",
11870 input_kind: IndicatorInputKind::Slice,
11871 outputs: OUTPUTS_MACD,
11872 params: PARAM_ADAPTIVE_MACD,
11873 },
11874 SupplementalIndicatorSeed {
11875 id: "polynomial_regression_extrapolation",
11876 label: "Polynomial Regression Extrapolation",
11877 category: "trend",
11878 input_kind: IndicatorInputKind::Slice,
11879 outputs: OUTPUTS_VALUE_F64,
11880 params: PARAM_POLYNOMIAL_REGRESSION_EXTRAPOLATION,
11881 },
11882 SupplementalIndicatorSeed {
11883 id: "statistical_trailing_stop",
11884 label: "Statistical Trailing Stop",
11885 category: "trend",
11886 input_kind: IndicatorInputKind::Ohlc,
11887 outputs: OUTPUTS_STATISTICAL_TRAILING_STOP,
11888 params: PARAM_STATISTICAL_TRAILING_STOP,
11889 },
11890 SupplementalIndicatorSeed {
11891 id: "standardized_psar_oscillator",
11892 label: "Standardized PSAR Oscillator",
11893 category: "momentum",
11894 input_kind: IndicatorInputKind::Ohlc,
11895 outputs: OUTPUTS_STANDARDIZED_PSAR_OSCILLATOR,
11896 params: PARAM_STANDARDIZED_PSAR_OSCILLATOR,
11897 },
11898 SupplementalIndicatorSeed {
11899 id: "geometric_bias_oscillator",
11900 label: "Geometric Bias Oscillator",
11901 category: "momentum",
11902 input_kind: IndicatorInputKind::Ohlc,
11903 outputs: OUTPUTS_VALUE_F64,
11904 params: PARAM_GEOMETRIC_BIAS_OSCILLATOR,
11905 },
11906 SupplementalIndicatorSeed {
11907 id: "vdubus_divergence_wave_pattern_generator",
11908 label: "Vdubus Divergence Wave Pattern Generator",
11909 category: "pattern_recognition",
11910 input_kind: IndicatorInputKind::Ohlc,
11911 outputs: OUTPUTS_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR,
11912 params: PARAM_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR,
11913 },
11914 SupplementalIndicatorSeed {
11915 id: "ppo",
11916 label: "PPO",
11917 category: "momentum",
11918 input_kind: IndicatorInputKind::Slice,
11919 outputs: OUTPUTS_VALUE_F64,
11920 params: PARAM_PPO,
11921 },
11922 SupplementalIndicatorSeed {
11923 id: "trix",
11924 label: "TRIX",
11925 category: "momentum",
11926 input_kind: IndicatorInputKind::Slice,
11927 outputs: OUTPUTS_VALUE_F64,
11928 params: PARAM_TRIX_PERIOD,
11929 },
11930 SupplementalIndicatorSeed {
11931 id: "tsi",
11932 label: "TSI",
11933 category: "momentum",
11934 input_kind: IndicatorInputKind::Slice,
11935 outputs: OUTPUTS_VALUE_F64,
11936 params: PARAM_TSI,
11937 },
11938 SupplementalIndicatorSeed {
11939 id: "stddev",
11940 label: "StdDev",
11941 category: "volatility",
11942 input_kind: IndicatorInputKind::Slice,
11943 outputs: OUTPUTS_VALUE_F64,
11944 params: PARAM_STDDEV,
11945 },
11946 SupplementalIndicatorSeed {
11947 id: "var",
11948 label: "VAR",
11949 category: "volatility",
11950 input_kind: IndicatorInputKind::Slice,
11951 outputs: OUTPUTS_VALUE_F64,
11952 params: PARAM_VAR,
11953 },
11954 SupplementalIndicatorSeed {
11955 id: "willr",
11956 label: "WILLR",
11957 category: "momentum",
11958 input_kind: IndicatorInputKind::Ohlc,
11959 outputs: OUTPUTS_VALUE_F64,
11960 params: PARAM_WILLR_PERIOD,
11961 },
11962 SupplementalIndicatorSeed {
11963 id: "ultosc",
11964 label: "ULTOSC",
11965 category: "momentum",
11966 input_kind: IndicatorInputKind::Ohlc,
11967 outputs: OUTPUTS_VALUE_F64,
11968 params: PARAM_ULTOSC,
11969 },
11970 SupplementalIndicatorSeed {
11971 id: "macd",
11972 label: "MACD",
11973 category: "momentum",
11974 input_kind: IndicatorInputKind::Slice,
11975 outputs: OUTPUTS_MACD,
11976 params: PARAM_MACD,
11977 },
11978 SupplementalIndicatorSeed {
11979 id: "bollinger_bands",
11980 label: "Bollinger Bands",
11981 category: "volatility",
11982 input_kind: IndicatorInputKind::Slice,
11983 outputs: OUTPUTS_BOLLINGER,
11984 params: PARAM_BOLLINGER,
11985 },
11986 SupplementalIndicatorSeed {
11987 id: "bollinger_bands_width",
11988 label: "Bollinger Bands Width",
11989 category: "volatility",
11990 input_kind: IndicatorInputKind::Slice,
11991 outputs: OUTPUTS_VALUE_F64,
11992 params: PARAM_BOLLINGER,
11993 },
11994 SupplementalIndicatorSeed {
11995 id: "stoch",
11996 label: "Stochastic",
11997 category: "momentum",
11998 input_kind: IndicatorInputKind::Ohlc,
11999 outputs: OUTPUTS_STOCH,
12000 params: PARAM_STOCH,
12001 },
12002 SupplementalIndicatorSeed {
12003 id: "stochf",
12004 label: "Fast Stochastic",
12005 category: "momentum",
12006 input_kind: IndicatorInputKind::Ohlc,
12007 outputs: OUTPUTS_STOCH,
12008 params: PARAM_STOCHF,
12009 },
12010 SupplementalIndicatorSeed {
12011 id: "vwmacd",
12012 label: "VWMACD",
12013 category: "volume",
12014 input_kind: IndicatorInputKind::CloseVolume,
12015 outputs: OUTPUTS_MACD,
12016 params: PARAM_VW_MACD,
12017 },
12018 SupplementalIndicatorSeed {
12019 id: "vpci",
12020 label: "VPCI",
12021 category: "volume",
12022 input_kind: IndicatorInputKind::CloseVolume,
12023 outputs: OUTPUTS_VPCI,
12024 params: PARAM_VPCI,
12025 },
12026 SupplementalIndicatorSeed {
12027 id: "ttm_trend",
12028 label: "TTM Trend",
12029 category: "trend",
12030 input_kind: IndicatorInputKind::Ohlc,
12031 outputs: OUTPUTS_VALUE_BOOL,
12032 params: PARAM_TTM_TREND,
12033 },
12034 SupplementalIndicatorSeed {
12035 id: "ttm_squeeze",
12036 label: "TTM Squeeze",
12037 category: "momentum",
12038 input_kind: IndicatorInputKind::Ohlc,
12039 outputs: OUTPUTS_TTM_SQUEEZE,
12040 params: PARAM_TTM_SQUEEZE,
12041 },
12042 SupplementalIndicatorSeed {
12043 id: "acosc",
12044 label: "Acosc",
12045 category: "momentum",
12046 input_kind: IndicatorInputKind::HighLow,
12047 outputs: OUTPUTS_ACOSC,
12048 params: PARAM_ACOSC,
12049 },
12050 SupplementalIndicatorSeed {
12051 id: "alligator",
12052 label: "Alligator",
12053 category: "trend",
12054 input_kind: IndicatorInputKind::Slice,
12055 outputs: OUTPUTS_ALLIGATOR,
12056 params: PARAM_ALLIGATOR,
12057 },
12058 SupplementalIndicatorSeed {
12059 id: "alphatrend",
12060 label: "AlphaTrend",
12061 category: "trend",
12062 input_kind: IndicatorInputKind::Ohlcv,
12063 outputs: OUTPUTS_K1_K2,
12064 params: PARAM_ALPHATREND,
12065 },
12066 SupplementalIndicatorSeed {
12067 id: "aso",
12068 label: "ASO",
12069 category: "momentum",
12070 input_kind: IndicatorInputKind::Ohlc,
12071 outputs: OUTPUTS_BULLS_BEARS,
12072 params: PARAM_ASO,
12073 },
12074 SupplementalIndicatorSeed {
12075 id: "avsl",
12076 label: "AVSL",
12077 category: "trend",
12078 input_kind: IndicatorInputKind::Ohlcv,
12079 outputs: OUTPUTS_VALUE_F64,
12080 params: PARAM_AVSL,
12081 },
12082 SupplementalIndicatorSeed {
12083 id: "bandpass",
12084 label: "BandPass",
12085 category: "cycle",
12086 input_kind: IndicatorInputKind::Slice,
12087 outputs: OUTPUTS_BANDPASS,
12088 params: PARAM_BANDPASS,
12089 },
12090 SupplementalIndicatorSeed {
12091 id: "chande",
12092 label: "Chande",
12093 category: "trend",
12094 input_kind: IndicatorInputKind::Ohlc,
12095 outputs: OUTPUTS_VALUE_F64,
12096 params: PARAM_CHANDE,
12097 },
12098 SupplementalIndicatorSeed {
12099 id: "chandelier_exit",
12100 label: "Chandelier Exit",
12101 category: "trend",
12102 input_kind: IndicatorInputKind::Ohlc,
12103 outputs: OUTPUTS_LONG_SHORT_STOP,
12104 params: PARAM_CHANDELIER_EXIT,
12105 },
12106 SupplementalIndicatorSeed {
12107 id: "cksp",
12108 label: "CKSP",
12109 category: "trend",
12110 input_kind: IndicatorInputKind::Ohlc,
12111 outputs: OUTPUTS_LONG_SHORT_VALUES,
12112 params: PARAM_CKSP,
12113 },
12114 SupplementalIndicatorSeed {
12115 id: "correlation_cycle",
12116 label: "Correlation Cycle",
12117 category: "cycle",
12118 input_kind: IndicatorInputKind::Slice,
12119 outputs: OUTPUTS_CORRELATION_CYCLE,
12120 params: PARAM_CORRELATION_CYCLE,
12121 },
12122 SupplementalIndicatorSeed {
12123 id: "correl_hl",
12124 label: "Correl HL",
12125 category: "statistics",
12126 input_kind: IndicatorInputKind::HighLow,
12127 outputs: OUTPUTS_VALUE_F64,
12128 params: PARAM_CORREL_HL,
12129 },
12130 SupplementalIndicatorSeed {
12131 id: "decycler",
12132 label: "Decycler",
12133 category: "trend",
12134 input_kind: IndicatorInputKind::Slice,
12135 outputs: OUTPUTS_VALUE_F64,
12136 params: PARAM_DECYCLER,
12137 },
12138 SupplementalIndicatorSeed {
12139 id: "damiani_volatmeter",
12140 label: "Damiani Volatmeter",
12141 category: "volatility",
12142 input_kind: IndicatorInputKind::Slice,
12143 outputs: OUTPUTS_VOL_ANTI,
12144 params: PARAM_DAMIANI_VOLATMETER,
12145 },
12146 SupplementalIndicatorSeed {
12147 id: "dvdiqqe",
12148 label: "DVDIQQE",
12149 category: "volume",
12150 input_kind: IndicatorInputKind::Ohlc,
12151 outputs: OUTPUTS_DVDIQQE,
12152 params: PARAM_DVDIQQE,
12153 },
12154 SupplementalIndicatorSeed {
12155 id: "emd",
12156 label: "EMD",
12157 category: "volatility",
12158 input_kind: IndicatorInputKind::Ohlcv,
12159 outputs: OUTPUTS_UPPER_MIDDLE_LOWER_BAND,
12160 params: PARAM_EMD,
12161 },
12162 SupplementalIndicatorSeed {
12163 id: "eri",
12164 label: "ERI",
12165 category: "trend",
12166 input_kind: IndicatorInputKind::Ohlc,
12167 outputs: OUTPUTS_BULL_BEAR,
12168 params: PARAM_ERI,
12169 },
12170 SupplementalIndicatorSeed {
12171 id: "fisher",
12172 label: "Fisher",
12173 category: "momentum",
12174 input_kind: IndicatorInputKind::HighLow,
12175 outputs: OUTPUTS_FISHER,
12176 params: PARAM_FISHER,
12177 },
12178 SupplementalIndicatorSeed {
12179 id: "fvg_trailing_stop",
12180 label: "FVG Trailing Stop",
12181 category: "trend",
12182 input_kind: IndicatorInputKind::Ohlc,
12183 outputs: OUTPUTS_FVG_TS,
12184 params: PARAM_FVG_TRAILING_STOP,
12185 },
12186 SupplementalIndicatorSeed {
12187 id: "gatorosc",
12188 label: "Gator Oscillator",
12189 category: "trend",
12190 input_kind: IndicatorInputKind::Slice,
12191 outputs: OUTPUTS_GATOROSC,
12192 params: PARAM_GATOROSC,
12193 },
12194 SupplementalIndicatorSeed {
12195 id: "halftrend",
12196 label: "HalfTrend",
12197 category: "trend",
12198 input_kind: IndicatorInputKind::Ohlc,
12199 outputs: OUTPUTS_HALFTREND,
12200 params: PARAM_HALFTREND,
12201 },
12202 SupplementalIndicatorSeed {
12203 id: "kst",
12204 label: "KST",
12205 category: "momentum",
12206 input_kind: IndicatorInputKind::Slice,
12207 outputs: OUTPUTS_LINE_SIGNAL,
12208 params: PARAM_KST,
12209 },
12210 SupplementalIndicatorSeed {
12211 id: "kaufmanstop",
12212 label: "Kaufmanstop",
12213 category: "trend",
12214 input_kind: IndicatorInputKind::HighLow,
12215 outputs: OUTPUTS_VALUE_F64,
12216 params: PARAM_KAUFMANSTOP,
12217 },
12218 SupplementalIndicatorSeed {
12219 id: "lpc",
12220 label: "LPC",
12221 category: "cycle",
12222 input_kind: IndicatorInputKind::Ohlc,
12223 outputs: OUTPUTS_FILTER_BANDS,
12224 params: PARAM_LPC,
12225 },
12226 SupplementalIndicatorSeed {
12227 id: "mab",
12228 label: "MAB",
12229 category: "volatility",
12230 input_kind: IndicatorInputKind::Slice,
12231 outputs: OUTPUTS_UPPER_MIDDLE_LOWER_BAND,
12232 params: PARAM_MAB,
12233 },
12234 SupplementalIndicatorSeed {
12235 id: "macz",
12236 label: "MACZ",
12237 category: "momentum",
12238 input_kind: IndicatorInputKind::Slice,
12239 outputs: OUTPUTS_VALUE_F64,
12240 params: PARAM_MACZ,
12241 },
12242 SupplementalIndicatorSeed {
12243 id: "minmax",
12244 label: "MinMax",
12245 category: "pattern",
12246 input_kind: IndicatorInputKind::HighLow,
12247 outputs: OUTPUTS_MINMAX,
12248 params: PARAM_MINMAX,
12249 },
12250 SupplementalIndicatorSeed {
12251 id: "mod_god_mode",
12252 label: "Mod God Mode",
12253 category: "momentum",
12254 input_kind: IndicatorInputKind::Ohlc,
12255 outputs: OUTPUTS_MOD_GOD_MODE,
12256 params: PARAM_MOD_GOD_MODE,
12257 },
12258 SupplementalIndicatorSeed {
12259 id: "pattern_recognition",
12260 label: "Pattern Recognition",
12261 category: "pattern",
12262 input_kind: IndicatorInputKind::Ohlc,
12263 outputs: OUTPUTS_MATRIX_BOOL,
12264 params: PARAM_NONE,
12265 },
12266 SupplementalIndicatorSeed {
12267 id: "msw",
12268 label: "MSW",
12269 category: "cycle",
12270 input_kind: IndicatorInputKind::Slice,
12271 outputs: OUTPUTS_SINE_LEAD,
12272 params: PARAM_MSW,
12273 },
12274 SupplementalIndicatorSeed {
12275 id: "nadaraya_watson_envelope",
12276 label: "Nadaraya Watson Envelope",
12277 category: "volatility",
12278 input_kind: IndicatorInputKind::Slice,
12279 outputs: OUTPUTS_UPPER_LOWER,
12280 params: PARAM_NWE,
12281 },
12282 SupplementalIndicatorSeed {
12283 id: "ott",
12284 label: "OTT",
12285 category: "trend",
12286 input_kind: IndicatorInputKind::Slice,
12287 outputs: OUTPUTS_VALUE_F64,
12288 params: PARAM_OTT,
12289 },
12290 SupplementalIndicatorSeed {
12291 id: "otto",
12292 label: "OTTO",
12293 category: "trend",
12294 input_kind: IndicatorInputKind::Slice,
12295 outputs: OUTPUTS_HOTT_LOTT,
12296 params: PARAM_OTTO,
12297 },
12298 SupplementalIndicatorSeed {
12299 id: "vidya",
12300 label: "VIDYA",
12301 category: "trend",
12302 input_kind: IndicatorInputKind::Slice,
12303 outputs: OUTPUTS_VALUE_F64,
12304 params: PARAM_VIDYA,
12305 },
12306 SupplementalIndicatorSeed {
12307 id: "vlma",
12308 label: "VLMA",
12309 category: "trend",
12310 input_kind: IndicatorInputKind::Slice,
12311 outputs: OUTPUTS_VALUE_F64,
12312 params: PARAM_VLMA,
12313 },
12314 SupplementalIndicatorSeed {
12315 id: "pma",
12316 label: "PMA",
12317 category: "trend",
12318 input_kind: IndicatorInputKind::Slice,
12319 outputs: OUTPUTS_EHLERS_PMA,
12320 params: PARAM_PMA,
12321 },
12322 SupplementalIndicatorSeed {
12323 id: "prb",
12324 label: "PRB",
12325 category: "statistics",
12326 input_kind: IndicatorInputKind::Slice,
12327 outputs: OUTPUTS_PRB,
12328 params: PARAM_PRB,
12329 },
12330 SupplementalIndicatorSeed {
12331 id: "qqe",
12332 label: "QQE",
12333 category: "momentum",
12334 input_kind: IndicatorInputKind::Slice,
12335 outputs: &[OUTPUT_FAST, OUTPUT_SLOW],
12336 params: PARAM_QQE,
12337 },
12338 SupplementalIndicatorSeed {
12339 id: "adaptive_bounds_rsi",
12340 label: "Adaptive Bounds RSI",
12341 category: "momentum",
12342 input_kind: IndicatorInputKind::Slice,
12343 outputs: OUTPUTS_ADAPTIVE_BOUNDS_RSI,
12344 params: PARAM_ADAPTIVE_BOUNDS_RSI,
12345 },
12346 SupplementalIndicatorSeed {
12347 id: "forward_backward_exponential_oscillator",
12348 label: "Forward-Backward Exponential Oscillator",
12349 category: "momentum",
12350 input_kind: IndicatorInputKind::Slice,
12351 outputs: OUTPUTS_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR,
12352 params: PARAM_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR,
12353 },
12354 SupplementalIndicatorSeed {
12355 id: "qqe_weighted_oscillator",
12356 label: "QQE Weighted Oscillator",
12357 category: "momentum",
12358 input_kind: IndicatorInputKind::Slice,
12359 outputs: OUTPUTS_QQE_WEIGHTED_OSCILLATOR,
12360 params: PARAM_QQE_WEIGHTED_OSCILLATOR,
12361 },
12362 SupplementalIndicatorSeed {
12363 id: "market_structure_confluence",
12364 label: "Market Structure Confluence",
12365 category: "trend",
12366 input_kind: IndicatorInputKind::Ohlc,
12367 outputs: OUTPUTS_MARKET_STRUCTURE_CONFLUENCE,
12368 params: PARAM_MARKET_STRUCTURE_CONFLUENCE,
12369 },
12370 SupplementalIndicatorSeed {
12371 id: "range_filtered_trend_signals",
12372 label: "Range Filtered Trend Signals",
12373 category: "trend",
12374 input_kind: IndicatorInputKind::Ohlc,
12375 outputs: OUTPUTS_RANGE_FILTERED_TREND_SIGNALS,
12376 params: PARAM_RANGE_FILTERED_TREND_SIGNALS,
12377 },
12378 SupplementalIndicatorSeed {
12379 id: "range_oscillator",
12380 label: "Range Oscillator",
12381 category: "volatility",
12382 input_kind: IndicatorInputKind::Ohlc,
12383 outputs: OUTPUTS_RANGE_OSCILLATOR,
12384 params: PARAM_RANGE_OSCILLATOR,
12385 },
12386 SupplementalIndicatorSeed {
12387 id: "volume_weighted_relative_strength_index",
12388 label: "Volume Weighted Relative Strength Index",
12389 category: "momentum",
12390 input_kind: IndicatorInputKind::CloseVolume,
12391 outputs: OUTPUTS_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX,
12392 params: PARAM_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX,
12393 },
12394 SupplementalIndicatorSeed {
12395 id: "range_filter",
12396 label: "Range Filter",
12397 category: "volatility",
12398 input_kind: IndicatorInputKind::Slice,
12399 outputs: OUTPUTS_FILTER_BANDS,
12400 params: PARAM_RANGE_FILTER,
12401 },
12402 SupplementalIndicatorSeed {
12403 id: "coppock",
12404 label: "Coppock",
12405 category: "momentum",
12406 input_kind: IndicatorInputKind::Slice,
12407 outputs: OUTPUTS_VALUE_F64,
12408 params: PARAM_COPPOCK,
12409 },
12410 SupplementalIndicatorSeed {
12411 id: "rsmk",
12412 label: "RSMK",
12413 category: "relative_strength",
12414 input_kind: IndicatorInputKind::CloseVolume,
12415 outputs: OUTPUTS_INDICATOR_SIGNAL,
12416 params: PARAM_RSMK,
12417 },
12418 SupplementalIndicatorSeed {
12419 id: "voss",
12420 label: "Voss",
12421 category: "cycle",
12422 input_kind: IndicatorInputKind::Slice,
12423 outputs: OUTPUTS_VOSS,
12424 params: PARAM_VOSS,
12425 },
12426 SupplementalIndicatorSeed {
12427 id: "stc",
12428 label: "STC",
12429 category: "momentum",
12430 input_kind: IndicatorInputKind::Slice,
12431 outputs: OUTPUTS_VALUE_F64,
12432 params: PARAM_STC,
12433 },
12434 SupplementalIndicatorSeed {
12435 id: "rvi",
12436 label: "RVI",
12437 category: "volatility",
12438 input_kind: IndicatorInputKind::Slice,
12439 outputs: OUTPUTS_VALUE_F64,
12440 params: PARAM_RVI,
12441 },
12442 SupplementalIndicatorSeed {
12443 id: "safezonestop",
12444 label: "SafeZoneStop",
12445 category: "trend",
12446 input_kind: IndicatorInputKind::HighLow,
12447 outputs: OUTPUTS_VALUE_F64,
12448 params: PARAM_SAFEZONESTOP,
12449 },
12450 SupplementalIndicatorSeed {
12451 id: "chop",
12452 label: "CHOP",
12453 category: "trend",
12454 input_kind: IndicatorInputKind::Ohlc,
12455 outputs: OUTPUTS_VALUE_F64,
12456 params: PARAM_CHOP,
12457 },
12458 SupplementalIndicatorSeed {
12459 id: "devstop",
12460 label: "DevStop",
12461 category: "trend",
12462 input_kind: IndicatorInputKind::HighLow,
12463 outputs: OUTPUTS_VALUE_F64,
12464 params: PARAM_DEVSTOP,
12465 },
12466 SupplementalIndicatorSeed {
12467 id: "net_myrsi",
12468 label: "NET_MyRSI",
12469 category: "momentum",
12470 input_kind: IndicatorInputKind::Slice,
12471 outputs: OUTPUTS_VALUE_F64,
12472 params: PARAMS_PERIOD_ONLY,
12473 },
12474 SupplementalIndicatorSeed {
12475 id: "wad",
12476 label: "WAD",
12477 category: "volume",
12478 input_kind: IndicatorInputKind::Ohlc,
12479 outputs: OUTPUTS_VALUE_F64,
12480 params: PARAM_NONE,
12481 },
12482 SupplementalIndicatorSeed {
12483 id: "pivot",
12484 label: "Pivot",
12485 category: "price",
12486 input_kind: IndicatorInputKind::Ohlc,
12487 outputs: OUTPUTS_PIVOT,
12488 params: PARAM_PIVOT,
12489 },
12490];
12491
12492fn supplemental_supports_cpu_batch(id: &str) -> bool {
12493 matches!(
12494 id,
12495 "adx"
12496 | "adxr"
12497 | "atr"
12498 | "atr_percentile"
12499 | "ad"
12500 | "adosc"
12501 | "ao"
12502 | "dti"
12503 | "dx"
12504 | "di"
12505 | "dm"
12506 | "vi"
12507 | "donchian"
12508 | "supertrend"
12509 | "adjustable_ma_alternating_extremities"
12510 | "supertrend_recovery"
12511 | "keltner"
12512 | "aroon"
12513 | "srsi"
12514 | "kdj"
12515 | "squeeze_momentum"
12516 | "wavetrend"
12517 | "wto"
12518 | "garman_klass_volatility"
12519 | "historical_volatility"
12520 | "absolute_strength_index_oscillator"
12521 | "adaptive_bandpass_trigger_oscillator"
12522 | "premier_rsi_oscillator"
12523 | "multi_length_stochastic_average"
12524 | "hull_butterfly_oscillator"
12525 | "fibonacci_trailing_stop"
12526 | "fibonacci_entry_bands"
12527 | "volume_energy_reservoirs"
12528 | "neighboring_trailing_stop"
12529 | "macd_wave_signal_pro"
12530 | "hema_trend_levels"
12531 | "grover_llorens_cycle_oscillator"
12532 | "squeeze_index"
12533 | "stochastic_distance"
12534 | "advance_decline_line"
12535 | "decisionpoint_breadth_swenlin_trading_oscillator"
12536 | "velocity_acceleration_indicator"
12537 | "normalized_resonator"
12538 | "monotonicity_index"
12539 | "half_causal_estimator"
12540 | "bull_power_vs_bear_power"
12541 | "vertical_horizontal_filter"
12542 | "intraday_momentum_index"
12543 | "vwap_zscore_with_signals"
12544 | "demand_index"
12545 | "didi_index"
12546 | "ehlers_autocorrelation_periodogram"
12547 | "ehlers_linear_extrapolation_predictor"
12548 | "kase_peak_oscillator_with_divergences"
12549 | "gopalakrishnan_range_index"
12550 | "yang_zhang_volatility"
12551 | "historical_volatility_percentile"
12552 | "ehlers_detrending_filter"
12553 | "keltner_channel_width_oscillator"
12554 | "market_meanness_index"
12555 | "price_density_market_noise"
12556 | "momentum_ratio_oscillator"
12557 | "hypertrend"
12558 | "adaptive_schaff_trend_cycle"
12559 | "smoothed_gaussian_trend_filter"
12560 | "logarithmic_moving_average"
12561 | "ict_propulsion_block"
12562 | "supertrend_oscillator"
12563 | "leavitt_convolution_acceleration"
12564 | "impulse_macd"
12565 | "insync_index"
12566 | "volatility_ratio_adaptive_rsx"
12567 | "on_balance_volume_oscillator"
12568 | "parkinson_volatility"
12569 | "psychological_line"
12570 | "rank_correlation_index"
12571 | "trend_follower"
12572 | "trend_direction_force_index"
12573 | "linear_regression_intensity"
12574 | "trend_continuation_factor"
12575 | "pretty_good_oscillator"
12576 | "twiggs_money_flow"
12577 | "volume_weighted_stochastic_rsi"
12578 | "stochastic_adaptive_d"
12579 | "stochastic_connors_rsi"
12580 | "volume_zone_oscillator"
12581 | "bop"
12582 | "emv"
12583 | "efi"
12584 | "mfi"
12585 | "mass"
12586 | "kvo"
12587 | "wad"
12588 | "vosc"
12589 | "rvi"
12590 | "coppock"
12591 | "rsi"
12592 | "roc"
12593 | "linear_correlation_oscillator"
12594 | "ehlers_fm_demodulator"
12595 | "ehlers_adaptive_cg"
12596 | "adaptive_momentum_oscillator"
12597 | "velocity"
12598 | "normalized_volume_true_range"
12599 | "exponential_trend"
12600 | "trend_flow_trail"
12601 | "range_breakout_signals"
12602 | "apo"
12603 | "cci"
12604 | "cci_cycle"
12605 | "cfo"
12606 | "cg"
12607 | "er"
12608 | "kurtosis"
12609 | "natr"
12610 | "net_myrsi"
12611 | "mean_ad"
12612 | "medium_ad"
12613 | "deviation"
12614 | "mod_god_mode"
12615 | "dpo"
12616 | "lrsi"
12617 | "fosc"
12618 | "ift_rsi"
12619 | "linearreg_angle"
12620 | "linearreg_intercept"
12621 | "linearreg_slope"
12622 | "pfe"
12623 | "percentile_nearest_rank"
12624 | "ui"
12625 | "zscore"
12626 | "medprice"
12627 | "midpoint"
12628 | "midprice"
12629 | "wclprice"
12630 | "obv"
12631 | "vpt"
12632 | "nvi"
12633 | "pvi"
12634 | "mom"
12635 | "cmo"
12636 | "rocp"
12637 | "rocr"
12638 | "tsf"
12639 | "adaptive_macd"
12640 | "polynomial_regression_extrapolation"
12641 | "statistical_trailing_stop"
12642 | "standardized_psar_oscillator"
12643 | "geometric_bias_oscillator"
12644 | "ppo"
12645 | "trix"
12646 | "tsi"
12647 | "stddev"
12648 | "var"
12649 | "willr"
12650 | "ultosc"
12651 | "macd"
12652 | "bollinger_bands"
12653 | "bollinger_bands_width"
12654 | "stoch"
12655 | "stochf"
12656 | "vwmacd"
12657 | "volume_weighted_rsi"
12658 | "dynamic_momentum_index"
12659 | "disparity_index"
12660 | "donchian_channel_width"
12661 | "kairi_relative_index"
12662 | "projection_oscillator"
12663 | "possible_rsi"
12664 | "stochastic_money_flow_index"
12665 | "autocorrelation_indicator"
12666 | "goertzel_cycle_composite_wave"
12667 | "rolling_skewness_kurtosis"
12668 | "rolling_z_score_trend"
12669 | "ehlers_data_sampling_relative_strength_indicator"
12670 | "velocity_acceleration_convergence_divergence_indicator"
12671 | "trend_direction_force_index"
12672 | "stc"
12673 | "vpci"
12674 | "ttm_trend"
12675 | "ttm_squeeze"
12676 | "acosc"
12677 | "alligator"
12678 | "alphatrend"
12679 | "aso"
12680 | "bandpass"
12681 | "chande"
12682 | "chandelier_exit"
12683 | "cksp"
12684 | "coppock"
12685 | "correl_hl"
12686 | "correlation_cycle"
12687 | "ehlers_adaptive_cg"
12688 | "normalized_volume_true_range"
12689 | "exponential_trend"
12690 | "trend_flow_trail"
12691 | "range_breakout_signals"
12692 | "chop"
12693 | "damiani_volatmeter"
12694 | "dvdiqqe"
12695 | "emd"
12696 | "eri"
12697 | "fisher"
12698 | "fvg_trailing_stop"
12699 | "gatorosc"
12700 | "halftrend"
12701 | "kst"
12702 | "lpc"
12703 | "mab"
12704 | "macz"
12705 | "minmax"
12706 | "msw"
12707 | "nadaraya_watson_envelope"
12708 | "otto"
12709 | "vidya"
12710 | "vlma"
12711 | "pma"
12712 | "prb"
12713 | "qqe"
12714 | "qqe_weighted_oscillator"
12715 | "range_filter"
12716 | "rsmk"
12717 | "safezonestop"
12718 | "devstop"
12719 | "voss"
12720 | "pivot"
12721 )
12722}
12723
12724fn supplemental_supports_cuda_single(id: &str) -> bool {
12725 matches!(id, "pattern_recognition")
12726}
12727
12728fn supplemental_supports_cuda_batch(id: &str) -> bool {
12729 matches!(
12730 id,
12731 "acosc"
12732 | "adosc"
12733 | "adx"
12734 | "adxr"
12735 | "alligator"
12736 | "alphatrend"
12737 | "ao"
12738 | "apo"
12739 | "aroon"
12740 | "aroonosc"
12741 | "aso"
12742 | "atr"
12743 | "avsl"
12744 | "bandpass"
12745 | "bollinger_bands"
12746 | "bollinger_bands_width"
12747 | "bop"
12748 | "cci"
12749 | "cci_cycle"
12750 | "cfo"
12751 | "cg"
12752 | "chande"
12753 | "chandelier_exit"
12754 | "chop"
12755 | "cksp"
12756 | "cmo"
12757 | "coppock"
12758 | "correl_hl"
12759 | "correlation_cycle"
12760 | "cvi"
12761 | "damiani_volatmeter"
12762 | "dec_osc"
12763 | "decycler"
12764 | "deviation"
12765 | "devstop"
12766 | "di"
12767 | "dm"
12768 | "donchian"
12769 | "dpo"
12770 | "dti"
12771 | "dvdiqqe"
12772 | "dx"
12773 | "efi"
12774 | "emd"
12775 | "emv"
12776 | "er"
12777 | "eri"
12778 | "fisher"
12779 | "fosc"
12780 | "fvg_trailing_stop"
12781 | "gatorosc"
12782 | "halftrend"
12783 | "ift_rsi"
12784 | "kaufmanstop"
12785 | "kdj"
12786 | "keltner"
12787 | "kst"
12788 | "kurtosis"
12789 | "kvo"
12790 | "linearreg_angle"
12791 | "linearreg_intercept"
12792 | "linearreg_slope"
12793 | "lpc"
12794 | "lrsi"
12795 | "mab"
12796 | "macd"
12797 | "macz"
12798 | "marketefi"
12799 | "mass"
12800 | "mean_ad"
12801 | "medium_ad"
12802 | "medprice"
12803 | "mfi"
12804 | "minmax"
12805 | "mod_god_mode"
12806 | "mom"
12807 | "msw"
12808 | "nadaraya_watson_envelope"
12809 | "natr"
12810 | "net_myrsi"
12811 | "nvi"
12812 | "obv"
12813 | "ott"
12814 | "otto"
12815 | "percentile_nearest_rank"
12816 | "pfe"
12817 | "pivot"
12818 | "pma"
12819 | "ppo"
12820 | "prb"
12821 | "pvi"
12822 | "qqe"
12823 | "qstick"
12824 | "range_filter"
12825 | "reverse_rsi"
12826 | "roc"
12827 | "rocp"
12828 | "rocr"
12829 | "rsi"
12830 | "rsmk"
12831 | "rsx"
12832 | "rvi"
12833 | "safezonestop"
12834 | "sar"
12835 | "squeeze_momentum"
12836 | "srsi"
12837 | "stc"
12838 | "stddev"
12839 | "stoch"
12840 | "stochf"
12841 | "supertrend"
12842 | "trix"
12843 | "tsf"
12844 | "tsi"
12845 | "ttm_squeeze"
12846 | "ttm_trend"
12847 | "ui"
12848 | "ultosc"
12849 | "var"
12850 | "vi"
12851 | "vidya"
12852 | "vlma"
12853 | "vosc"
12854 | "voss"
12855 | "vpci"
12856 | "vpt"
12857 | "vwmacd"
12858 | "wad"
12859 | "wavetrend"
12860 | "wclprice"
12861 | "willr"
12862 | "wto"
12863 | "garman_klass_volatility"
12864 | "yang_zhang_volatility"
12865 | "parkinson_volatility"
12866 | "zscore"
12867 )
12868}
12869
12870fn supplemental_supports_cuda_vram(id: &str) -> bool {
12871 matches!(id, "pattern_recognition") || supplemental_supports_cuda_batch(id)
12872}
12873
12874pub fn is_bucket_b_indicator(id: &str) -> bool {
12875 BUCKET_B_INDICATORS
12876 .iter()
12877 .any(|item| item.eq_ignore_ascii_case(id))
12878}
12879
12880static INDICATOR_REGISTRY: Lazy<Vec<IndicatorInfo>> = Lazy::new(build_registry);
12881static INDICATOR_EXACT_INDEX: Lazy<HashMap<&'static str, usize>> = Lazy::new(|| {
12882 let mut map = HashMap::with_capacity(INDICATOR_REGISTRY.len());
12883 for (idx, info) in INDICATOR_REGISTRY.iter().enumerate() {
12884 map.insert(info.id, idx);
12885 }
12886 map
12887});
12888
12889fn ma_outputs_for(ma_id: &str) -> Vec<IndicatorOutputInfo> {
12890 match ma_id {
12891 "mama" => OUTPUTS_MAMA.to_vec(),
12892 "ehlers_pma" => OUTPUTS_EHLERS_PMA.to_vec(),
12893 "ehlers_undersampled_double_moving_average" => OUTPUTS_BUFF_AVERAGES.to_vec(),
12894 "buff_averages" => OUTPUTS_BUFF_AVERAGES.to_vec(),
12895 "ema_deviation_corrected_t3" => OUTPUTS_EDCT3.to_vec(),
12896 "logarithmic_moving_average" => OUTPUTS_LOGARITHMIC_MOVING_AVERAGE.to_vec(),
12897 _ => OUTPUTS_VALUE_F64.to_vec(),
12898 }
12899}
12900
12901fn ma_params_for(ma_id: &str, period_based: bool) -> Vec<IndicatorParamInfo> {
12902 let mut params = Vec::new();
12903 if period_based {
12904 params.push(PARAM_PERIOD);
12905 }
12906 for item in ma_param_schema(ma_id).iter() {
12907 let kind = match item.kind {
12908 MaParamKind::Float => IndicatorParamKind::Float,
12909 MaParamKind::Int => IndicatorParamKind::Int,
12910 };
12911 let default = match kind {
12912 IndicatorParamKind::Float => Some(ParamValueStatic::Float(item.default)),
12913 IndicatorParamKind::Int => Some(ParamValueStatic::Int(item.default as i64)),
12914 IndicatorParamKind::Bool | IndicatorParamKind::EnumString => None,
12915 };
12916 params.push(IndicatorParamInfo {
12917 key: item.key,
12918 label: item.label,
12919 kind,
12920 required: false,
12921 default,
12922 min: item.min,
12923 max: item.max,
12924 step: item.step,
12925 enum_values: EMPTY_ENUM_VALUES,
12926 notes: item.notes,
12927 });
12928 }
12929 match ma_id {
12930 "mama" => params.push(PARAM_OUTPUT_MAMA),
12931 "ehlers_pma" => params.push(PARAM_OUTPUT_EHLERS_PMA),
12932 "ehlers_undersampled_double_moving_average" => params.push(PARAM_OUTPUT_BUFF_AVERAGES),
12933 "buff_averages" => params.push(PARAM_OUTPUT_BUFF_AVERAGES),
12934 "ema_deviation_corrected_t3" => params.push(PARAM_OUTPUT_EDCT3),
12935 "vwap" => params.push(PARAM_ANCHOR),
12936 "volume_adjusted_ma" => params.push(PARAM_STRICT),
12937 "n_order_ema" => {
12938 params.push(IndicatorParamInfo {
12939 key: "ema_style",
12940 label: "EMA Style",
12941 kind: IndicatorParamKind::EnumString,
12942 required: false,
12943 default: None,
12944 min: None,
12945 max: None,
12946 step: None,
12947 enum_values: ENUM_VALUES_N_ORDER_EMA_STYLE,
12948 notes: Some("Default: ema."),
12949 });
12950 params.push(IndicatorParamInfo {
12951 key: "iir_style",
12952 label: "IIR Style",
12953 kind: IndicatorParamKind::EnumString,
12954 required: false,
12955 default: None,
12956 min: None,
12957 max: None,
12958 step: None,
12959 enum_values: ENUM_VALUES_N_ORDER_EMA_IIR_STYLE,
12960 notes: Some("Default: impulse_matched."),
12961 });
12962 }
12963 _ => {}
12964 }
12965 params
12966}
12967
12968fn build_registry() -> Vec<IndicatorInfo> {
12969 let mut out = Vec::new();
12970
12971 for ma in list_moving_averages().iter() {
12972 out.push(IndicatorInfo {
12973 id: ma.id,
12974 label: ma.label,
12975 category: "moving_averages",
12976 dynamic_strategy_eligible: true,
12977 input_kind: if ma.requires_candles {
12978 IndicatorInputKind::Candles
12979 } else {
12980 IndicatorInputKind::Slice
12981 },
12982 outputs: ma_outputs_for(ma.id),
12983 params: ma_params_for(ma.id, ma.period_based),
12984 capabilities: IndicatorCapabilities {
12985 supports_cpu_single: ma.supports_cpu_single,
12986 supports_cpu_batch: ma.supports_cpu_batch,
12987 supports_cuda_single: ma.supports_cuda_single,
12988 supports_cuda_batch: ma.supports_cuda_sweep,
12989 supports_cuda_vram: ma.supports_cuda_sweep,
12990 },
12991 notes: ma.notes,
12992 });
12993 }
12994
12995 for seed in SUPPLEMENTAL_INDICATORS.iter() {
12996 let info = IndicatorInfo {
12997 id: seed.id,
12998 label: seed.label,
12999 category: seed.category,
13000 dynamic_strategy_eligible: true,
13001 input_kind: seed.input_kind,
13002 outputs: seed.outputs.to_vec(),
13003 params: seed.params.to_vec(),
13004 capabilities: IndicatorCapabilities {
13005 supports_cpu_single: true,
13006 supports_cpu_batch: supplemental_supports_cpu_batch(seed.id),
13007 supports_cuda_single: supplemental_supports_cuda_single(seed.id),
13008 supports_cuda_batch: supplemental_supports_cuda_batch(seed.id),
13009 supports_cuda_vram: supplemental_supports_cuda_vram(seed.id),
13010 },
13011 notes: Some(SUPPLEMENTAL_SEED_NOTE),
13012 };
13013
13014 if let Some(existing) = out
13015 .iter_mut()
13016 .find(|item| item.id.eq_ignore_ascii_case(seed.id))
13017 {
13018 *existing = info;
13019 } else {
13020 out.push(info);
13021 }
13022 }
13023
13024 out.sort_by(|a, b| a.id.cmp(b.id));
13025 out
13026}
13027
13028pub fn list_indicators() -> &'static [IndicatorInfo] {
13029 INDICATOR_REGISTRY.as_slice()
13030}
13031
13032pub fn get_indicator(id: &str) -> Option<&'static IndicatorInfo> {
13033 let indicators = list_indicators();
13034 if let Some(idx) = INDICATOR_EXACT_INDEX.get(id).copied() {
13035 return Some(&indicators[idx]);
13036 }
13037 if let Ok(idx) = indicators.binary_search_by(|info| info.id.cmp(id)) {
13038 return Some(&indicators[idx]);
13039 }
13040 indicators
13041 .iter()
13042 .find(|info| info.id.eq_ignore_ascii_case(id))
13043}
13044
13045pub fn indicator_param_schema(id: &str) -> Option<&'static [IndicatorParamInfo]> {
13046 get_indicator(id).map(|info| info.params.as_slice())
13047}
13048
13049pub fn indicator_output_schema(id: &str) -> Option<&'static [IndicatorOutputInfo]> {
13050 get_indicator(id).map(|info| info.outputs.as_slice())
13051}
13052
13053pub fn indicator_capabilities(id: &str) -> Option<IndicatorCapabilities> {
13054 get_indicator(id).map(|info| info.capabilities)
13055}
13056
13057#[cfg(test)]
13058mod tests {
13059 use super::*;
13060
13061 #[test]
13062 fn registry_is_non_empty() {
13063 assert!(!list_indicators().is_empty());
13064 }
13065
13066 #[test]
13067 fn ids_are_unique_case_insensitive() {
13068 use std::collections::HashSet;
13069 let mut seen = HashSet::new();
13070 for info in list_indicators().iter() {
13071 let lower = info.id.to_ascii_lowercase();
13072 assert!(seen.insert(lower), "duplicate id {}", info.id);
13073 }
13074 }
13075
13076 #[test]
13077 fn all_registered_entries_have_output_schema() {
13078 for info in list_indicators().iter() {
13079 assert!(
13080 !info.outputs.is_empty(),
13081 "indicator {} has no output schema",
13082 info.id
13083 );
13084 }
13085 }
13086
13087 #[test]
13088 fn ma_registry_is_mirrored() {
13089 for ma in list_moving_averages().iter() {
13090 assert!(
13091 get_indicator(ma.id).is_some(),
13092 "missing moving average {} in global registry",
13093 ma.id
13094 );
13095 }
13096 }
13097
13098 #[test]
13099 fn lookup_is_case_insensitive() {
13100 assert!(get_indicator("SMA").is_some());
13101 assert!(get_indicator("sma").is_some());
13102 }
13103
13104 #[test]
13105 fn schema_accessors_work() {
13106 assert!(indicator_output_schema("macd").is_some());
13107 assert!(indicator_param_schema("sma").is_some());
13108 assert!(indicator_capabilities("sma").is_some());
13109 assert!(indicator_output_schema("not_real").is_none());
13110 }
13111
13112 #[test]
13113 fn pattern_recognition_capability_is_registered_as_non_batch() {
13114 let info = get_indicator("pattern_recognition").unwrap();
13115 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13116 assert_eq!(info.outputs.len(), 1);
13117 assert_eq!(info.outputs[0].id, "matrix");
13118 assert!(info.capabilities.supports_cpu_single);
13119 assert!(!info.capabilities.supports_cpu_batch);
13120 assert!(info.capabilities.supports_cuda_single);
13121 assert!(!info.capabilities.supports_cuda_batch);
13122 assert!(info.capabilities.supports_cuda_vram);
13123 }
13124
13125 #[test]
13126 fn dec_osc_and_rsx_are_registered_for_cuda_batch() {
13127 let dec_osc = get_indicator("dec_osc").unwrap();
13128 assert_eq!(dec_osc.input_kind, IndicatorInputKind::Slice);
13129 assert_eq!(dec_osc.outputs.len(), 1);
13130 assert_eq!(dec_osc.outputs[0].id, "value");
13131 assert!(dec_osc.capabilities.supports_cuda_batch);
13132 assert!(dec_osc.capabilities.supports_cuda_vram);
13133
13134 let rsx = get_indicator("rsx").unwrap();
13135 assert_eq!(rsx.input_kind, IndicatorInputKind::Slice);
13136 assert_eq!(rsx.outputs.len(), 1);
13137 assert_eq!(rsx.outputs[0].id, "value");
13138 assert!(rsx.capabilities.supports_cuda_batch);
13139 assert!(rsx.capabilities.supports_cuda_vram);
13140 }
13141
13142 #[test]
13143 fn chande_is_registered_for_cpu_and_cuda_batch() {
13144 assert!(supplemental_supports_cpu_batch("chande"));
13145 assert!(supplemental_supports_cuda_batch("chande"));
13146 let chande = get_indicator("chande").unwrap();
13147 assert_eq!(chande.input_kind, IndicatorInputKind::Ohlc);
13148 assert_eq!(chande.outputs.len(), 1);
13149 assert_eq!(chande.outputs[0].id, "value");
13150 assert!(chande.capabilities.supports_cpu_batch);
13151 assert!(chande.capabilities.supports_cuda_batch);
13152 assert!(chande.capabilities.supports_cuda_vram);
13153 }
13154
13155 #[test]
13156 fn bucket_b_ma_capabilities_follow_ma_registry() {
13157 let mama = indicator_capabilities("mama").unwrap();
13158 assert!(mama.supports_cpu_batch);
13159 assert!(mama.supports_cuda_batch);
13160 assert!(mama.supports_cuda_vram);
13161
13162 let vwap = indicator_capabilities("vwap").unwrap();
13163 assert!(vwap.supports_cpu_batch);
13164 assert!(vwap.supports_cuda_batch);
13165 assert!(vwap.supports_cuda_vram);
13166 }
13167
13168 #[test]
13169 fn bucket_membership_lookup_is_case_insensitive() {
13170 assert!(is_bucket_b_indicator("MAMA"));
13171 assert!(is_bucket_b_indicator("pivot"));
13172 assert!(!is_bucket_b_indicator("sma"));
13173 assert!(!is_bucket_b_indicator("adx"));
13174 }
13175
13176 #[test]
13177 fn lrsi_is_registered_for_cuda_batch() {
13178 let lrsi = get_indicator("lrsi").unwrap();
13179 assert_eq!(lrsi.input_kind, IndicatorInputKind::HighLow);
13180 assert_eq!(lrsi.outputs.len(), 1);
13181 assert_eq!(lrsi.outputs[0].id, "value");
13182 assert!(lrsi.capabilities.supports_cpu_batch);
13183 assert!(lrsi.capabilities.supports_cuda_batch);
13184 assert!(lrsi.capabilities.supports_cuda_vram);
13185 }
13186
13187 #[test]
13188 fn garman_klass_volatility_is_registered_for_cpu_and_cuda_batch() {
13189 assert!(supplemental_supports_cpu_batch("garman_klass_volatility"));
13190 assert!(supplemental_supports_cuda_batch("garman_klass_volatility"));
13191 let info = get_indicator("garman_klass_volatility").unwrap();
13192 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13193 assert_eq!(info.outputs.len(), 1);
13194 assert_eq!(info.outputs[0].id, "value");
13195 assert_eq!(info.params.len(), 1);
13196 assert_eq!(info.params[0].key, "lookback");
13197 assert!(info.capabilities.supports_cpu_single);
13198 assert!(info.capabilities.supports_cpu_batch);
13199 assert!(info.capabilities.supports_cuda_batch);
13200 assert!(info.capabilities.supports_cuda_vram);
13201 }
13202
13203 #[test]
13204 fn parkinson_volatility_is_registered_for_cpu_and_cuda_batch() {
13205 assert!(supplemental_supports_cpu_batch("parkinson_volatility"));
13206 assert!(supplemental_supports_cuda_batch("parkinson_volatility"));
13207 let info = get_indicator("parkinson_volatility").unwrap();
13208 assert_eq!(info.input_kind, IndicatorInputKind::HighLow);
13209 assert_eq!(info.outputs.len(), 2);
13210 assert_eq!(info.outputs[0].id, "volatility");
13211 assert_eq!(info.outputs[1].id, "variance");
13212 assert_eq!(info.params.len(), 1);
13213 assert_eq!(info.params[0].key, "period");
13214 assert!(info.capabilities.supports_cpu_single);
13215 assert!(info.capabilities.supports_cpu_batch);
13216 assert!(info.capabilities.supports_cuda_batch);
13217 assert!(info.capabilities.supports_cuda_vram);
13218 }
13219
13220 #[test]
13221 fn historical_volatility_is_registered_for_cpu_batch_only() {
13222 assert!(supplemental_supports_cpu_batch("historical_volatility"));
13223 assert!(!supplemental_supports_cuda_batch("historical_volatility"));
13224 let info = get_indicator("historical_volatility").unwrap();
13225 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13226 assert_eq!(info.outputs.len(), 1);
13227 assert_eq!(info.outputs[0].id, "value");
13228 assert_eq!(info.params.len(), 2);
13229 assert_eq!(info.params[0].key, "lookback");
13230 assert_eq!(info.params[1].key, "annualization_days");
13231 assert!(info.capabilities.supports_cpu_single);
13232 assert!(info.capabilities.supports_cpu_batch);
13233 assert!(!info.capabilities.supports_cuda_batch);
13234 assert!(!info.capabilities.supports_cuda_vram);
13235 }
13236
13237 #[test]
13238 fn advance_decline_line_is_registered_for_cpu_batch_only() {
13239 assert!(supplemental_supports_cpu_batch("advance_decline_line"));
13240 assert!(!supplemental_supports_cuda_batch("advance_decline_line"));
13241 let info = get_indicator("advance_decline_line").unwrap();
13242 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13243 assert_eq!(info.outputs.len(), 1);
13244 assert_eq!(info.outputs[0].id, "value");
13245 assert!(info.params.is_empty());
13246 assert!(info.capabilities.supports_cpu_single);
13247 assert!(info.capabilities.supports_cpu_batch);
13248 assert!(!info.capabilities.supports_cuda_batch);
13249 assert!(!info.capabilities.supports_cuda_vram);
13250 }
13251
13252 #[test]
13253 fn decisionpoint_breadth_swenlin_trading_oscillator_is_registered_for_cpu_batch_only() {
13254 assert!(supplemental_supports_cpu_batch(
13255 "decisionpoint_breadth_swenlin_trading_oscillator"
13256 ));
13257 assert!(!supplemental_supports_cuda_batch(
13258 "decisionpoint_breadth_swenlin_trading_oscillator"
13259 ));
13260 let info = get_indicator("decisionpoint_breadth_swenlin_trading_oscillator").unwrap();
13261 assert_eq!(info.input_kind, IndicatorInputKind::HighLow);
13262 assert_eq!(info.outputs.len(), 1);
13263 assert_eq!(info.outputs[0].id, "value");
13264 assert!(info.params.is_empty());
13265 assert!(info.capabilities.supports_cpu_single);
13266 assert!(info.capabilities.supports_cpu_batch);
13267 assert!(!info.capabilities.supports_cuda_batch);
13268 assert!(!info.capabilities.supports_cuda_vram);
13269 }
13270
13271 #[test]
13272 fn velocity_acceleration_indicator_is_registered_for_cpu_batch_only() {
13273 assert!(supplemental_supports_cpu_batch(
13274 "velocity_acceleration_indicator"
13275 ));
13276 assert!(!supplemental_supports_cuda_batch(
13277 "velocity_acceleration_indicator"
13278 ));
13279 let info = get_indicator("velocity_acceleration_indicator").unwrap();
13280 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13281 assert_eq!(info.outputs.len(), 1);
13282 assert_eq!(info.outputs[0].id, "value");
13283 assert_eq!(info.params.len(), 3);
13284 assert_eq!(info.params[0].key, "length");
13285 assert_eq!(info.params[1].key, "smooth_length");
13286 assert_eq!(info.params[2].key, "source");
13287 assert!(info.capabilities.supports_cpu_single);
13288 assert!(info.capabilities.supports_cpu_batch);
13289 assert!(!info.capabilities.supports_cuda_batch);
13290 assert!(!info.capabilities.supports_cuda_vram);
13291 }
13292
13293 #[test]
13294 fn normalized_resonator_is_registered_for_cpu_batch_only() {
13295 assert!(supplemental_supports_cpu_batch("normalized_resonator"));
13296 assert!(!supplemental_supports_cuda_batch("normalized_resonator"));
13297 let info = get_indicator("normalized_resonator").unwrap();
13298 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13299 assert_eq!(info.outputs.len(), 2);
13300 assert_eq!(info.outputs[0].id, "oscillator");
13301 assert_eq!(info.outputs[1].id, "signal");
13302 assert_eq!(info.params.len(), 5);
13303 assert_eq!(info.params[0].key, "period");
13304 assert_eq!(info.params[1].key, "delta");
13305 assert_eq!(info.params[2].key, "lookback_mult");
13306 assert_eq!(info.params[3].key, "signal_length");
13307 assert_eq!(info.params[4].key, "source");
13308 assert!(info.capabilities.supports_cpu_single);
13309 assert!(info.capabilities.supports_cpu_batch);
13310 assert!(!info.capabilities.supports_cuda_batch);
13311 assert!(!info.capabilities.supports_cuda_vram);
13312 }
13313
13314 #[test]
13315 fn monotonicity_index_is_registered_for_cpu_batch_only() {
13316 assert!(supplemental_supports_cpu_batch("monotonicity_index"));
13317 assert!(!supplemental_supports_cuda_batch("monotonicity_index"));
13318 let info = get_indicator("monotonicity_index").unwrap();
13319 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13320 assert_eq!(info.outputs.len(), 3);
13321 assert_eq!(info.outputs[0].id, "index");
13322 assert_eq!(info.outputs[1].id, "cumulative_mean");
13323 assert_eq!(info.outputs[2].id, "upper_bound");
13324 assert_eq!(info.params.len(), 4);
13325 assert_eq!(info.params[0].key, "length");
13326 assert_eq!(info.params[1].key, "mode");
13327 assert_eq!(info.params[2].key, "index_smooth");
13328 assert_eq!(info.params[3].key, "source");
13329 assert!(info.capabilities.supports_cpu_single);
13330 assert!(info.capabilities.supports_cpu_batch);
13331 assert!(!info.capabilities.supports_cuda_batch);
13332 assert!(!info.capabilities.supports_cuda_vram);
13333 }
13334
13335 #[test]
13336 fn half_causal_estimator_is_registered_for_cpu_batch_only() {
13337 assert!(supplemental_supports_cpu_batch("half_causal_estimator"));
13338 assert!(!supplemental_supports_cuda_batch("half_causal_estimator"));
13339 let info = get_indicator("half_causal_estimator").unwrap();
13340 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13341 assert_eq!(info.outputs.len(), 2);
13342 assert_eq!(info.outputs[0].id, "estimate");
13343 assert_eq!(info.outputs[1].id, "expected_value");
13344 assert_eq!(info.params.len(), 10);
13345 assert_eq!(info.params[0].key, "slots_per_day");
13346 assert_eq!(info.params[1].key, "data_period");
13347 assert_eq!(info.params[9].key, "source");
13348 assert!(info.capabilities.supports_cpu_single);
13349 assert!(info.capabilities.supports_cpu_batch);
13350 assert!(!info.capabilities.supports_cuda_batch);
13351 assert!(!info.capabilities.supports_cuda_vram);
13352 }
13353
13354 #[test]
13355 fn bull_power_vs_bear_power_is_registered_for_cpu_batch_only() {
13356 assert!(supplemental_supports_cpu_batch("bull_power_vs_bear_power"));
13357 assert!(!supplemental_supports_cuda_batch(
13358 "bull_power_vs_bear_power"
13359 ));
13360 let info = get_indicator("bull_power_vs_bear_power").unwrap();
13361 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13362 assert_eq!(info.outputs.len(), 1);
13363 assert_eq!(info.outputs[0].id, "value");
13364 assert_eq!(info.params.len(), 1);
13365 assert_eq!(info.params[0].key, "period");
13366 assert!(info.capabilities.supports_cpu_single);
13367 assert!(info.capabilities.supports_cpu_batch);
13368 assert!(!info.capabilities.supports_cuda_batch);
13369 assert!(!info.capabilities.supports_cuda_vram);
13370 }
13371
13372 #[test]
13373 fn didi_index_is_registered_for_cpu_batch_only() {
13374 assert!(supplemental_supports_cpu_batch("didi_index"));
13375 assert!(!supplemental_supports_cuda_batch("didi_index"));
13376 let info = get_indicator("didi_index").unwrap();
13377 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13378 assert_eq!(info.outputs.len(), 4);
13379 assert_eq!(info.outputs[0].id, "short");
13380 assert_eq!(info.outputs[1].id, "long");
13381 assert_eq!(info.outputs[2].id, "crossover");
13382 assert_eq!(info.outputs[3].id, "crossunder");
13383 assert_eq!(info.params.len(), 3);
13384 assert!(info.capabilities.supports_cpu_single);
13385 assert!(info.capabilities.supports_cpu_batch);
13386 assert!(!info.capabilities.supports_cuda_batch);
13387 assert!(!info.capabilities.supports_cuda_vram);
13388 }
13389
13390 #[test]
13391 fn ehlers_autocorrelation_periodogram_is_registered_for_cpu_batch_only() {
13392 assert!(supplemental_supports_cpu_batch(
13393 "ehlers_autocorrelation_periodogram"
13394 ));
13395 assert!(!supplemental_supports_cuda_batch(
13396 "ehlers_autocorrelation_periodogram"
13397 ));
13398 let info = get_indicator("ehlers_autocorrelation_periodogram").unwrap();
13399 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13400 assert_eq!(info.outputs.len(), 2);
13401 assert_eq!(info.outputs[0].id, "dominant_cycle");
13402 assert_eq!(info.outputs[1].id, "normalized_power");
13403 assert_eq!(info.params.len(), 4);
13404 assert_eq!(info.params[0].key, "min_period");
13405 assert_eq!(info.params[1].key, "max_period");
13406 assert_eq!(info.params[2].key, "avg_length");
13407 assert_eq!(info.params[3].key, "enhance");
13408 assert!(info.capabilities.supports_cpu_single);
13409 assert!(info.capabilities.supports_cpu_batch);
13410 assert!(!info.capabilities.supports_cuda_batch);
13411 assert!(!info.capabilities.supports_cuda_vram);
13412 }
13413
13414 #[test]
13415 fn ehlers_linear_extrapolation_predictor_is_registered_for_cpu_batch_only() {
13416 assert!(supplemental_supports_cpu_batch(
13417 "ehlers_linear_extrapolation_predictor"
13418 ));
13419 assert!(!supplemental_supports_cuda_batch(
13420 "ehlers_linear_extrapolation_predictor"
13421 ));
13422 let info = get_indicator("ehlers_linear_extrapolation_predictor").unwrap();
13423 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13424 assert_eq!(info.outputs.len(), 5);
13425 assert_eq!(info.outputs[0].id, "prediction");
13426 assert_eq!(info.outputs[1].id, "filter");
13427 assert_eq!(info.outputs[2].id, "state");
13428 assert_eq!(info.outputs[3].id, "go_long");
13429 assert_eq!(info.outputs[4].id, "go_short");
13430 assert_eq!(info.params.len(), 5);
13431 assert_eq!(info.params[0].key, "high_pass_length");
13432 assert_eq!(info.params[1].key, "low_pass_length");
13433 assert_eq!(info.params[2].key, "gain");
13434 assert_eq!(info.params[3].key, "bars_forward");
13435 assert_eq!(info.params[4].key, "signal_mode");
13436 assert!(info.capabilities.supports_cpu_single);
13437 assert!(info.capabilities.supports_cpu_batch);
13438 assert!(!info.capabilities.supports_cuda_batch);
13439 assert!(!info.capabilities.supports_cuda_vram);
13440 }
13441
13442 #[test]
13443 fn vertical_horizontal_filter_is_registered_for_cpu_batch_only() {
13444 assert!(supplemental_supports_cpu_batch(
13445 "vertical_horizontal_filter"
13446 ));
13447 assert!(!supplemental_supports_cuda_batch(
13448 "vertical_horizontal_filter"
13449 ));
13450 let info = get_indicator("vertical_horizontal_filter").unwrap();
13451 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13452 assert_eq!(info.outputs.len(), 1);
13453 assert_eq!(info.outputs[0].id, "value");
13454 assert_eq!(info.params.len(), 1);
13455 assert_eq!(info.params[0].key, "length");
13456 assert!(info.capabilities.supports_cpu_single);
13457 assert!(info.capabilities.supports_cpu_batch);
13458 assert!(!info.capabilities.supports_cuda_batch);
13459 assert!(!info.capabilities.supports_cuda_vram);
13460 }
13461
13462 #[test]
13463 fn squeeze_index_is_registered_for_cpu_batch_only() {
13464 assert!(supplemental_supports_cpu_batch("squeeze_index"));
13465 assert!(!supplemental_supports_cuda_batch("squeeze_index"));
13466 let info = get_indicator("squeeze_index").unwrap();
13467 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13468 assert_eq!(info.outputs.len(), 1);
13469 assert_eq!(info.outputs[0].id, "value");
13470 assert_eq!(info.params.len(), 2);
13471 assert_eq!(info.params[0].key, "conv");
13472 assert_eq!(info.params[1].key, "length");
13473 assert!(info.capabilities.supports_cpu_single);
13474 assert!(info.capabilities.supports_cpu_batch);
13475 assert!(!info.capabilities.supports_cuda_batch);
13476 assert!(!info.capabilities.supports_cuda_vram);
13477 }
13478
13479 #[test]
13480 fn stochastic_distance_is_registered_for_cpu_batch_only() {
13481 assert!(supplemental_supports_cpu_batch("stochastic_distance"));
13482 assert!(!supplemental_supports_cuda_batch("stochastic_distance"));
13483 let info = get_indicator("stochastic_distance").unwrap();
13484 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13485 assert_eq!(info.outputs.len(), 2);
13486 assert_eq!(info.outputs[0].id, "oscillator");
13487 assert_eq!(info.outputs[1].id, "signal");
13488 assert_eq!(info.params.len(), 5);
13489 assert_eq!(info.params[0].key, "lookback_length");
13490 assert_eq!(info.params[1].key, "length1");
13491 assert_eq!(info.params[2].key, "length2");
13492 assert_eq!(info.params[3].key, "ob_level");
13493 assert_eq!(info.params[4].key, "os_level");
13494 assert!(info.capabilities.supports_cpu_single);
13495 assert!(info.capabilities.supports_cpu_batch);
13496 assert!(!info.capabilities.supports_cuda_batch);
13497 assert!(!info.capabilities.supports_cuda_vram);
13498 }
13499
13500 #[test]
13501 fn adaptive_bandpass_trigger_oscillator_is_registered_for_cpu_batch_only() {
13502 assert!(supplemental_supports_cpu_batch(
13503 "adaptive_bandpass_trigger_oscillator"
13504 ));
13505 assert!(!supplemental_supports_cuda_batch(
13506 "adaptive_bandpass_trigger_oscillator"
13507 ));
13508 let info = get_indicator("adaptive_bandpass_trigger_oscillator").unwrap();
13509 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13510 assert_eq!(info.outputs.len(), 2);
13511 assert_eq!(info.outputs[0].id, "in_phase");
13512 assert_eq!(info.outputs[1].id, "lead");
13513 assert_eq!(info.params.len(), 2);
13514 assert_eq!(info.params[0].key, "delta");
13515 assert_eq!(info.params[1].key, "alpha");
13516 assert!(info.capabilities.supports_cpu_single);
13517 assert!(info.capabilities.supports_cpu_batch);
13518 assert!(!info.capabilities.supports_cuda_batch);
13519 assert!(!info.capabilities.supports_cuda_vram);
13520 }
13521
13522 #[test]
13523 fn absolute_strength_index_oscillator_is_registered_for_cpu_batch_only() {
13524 assert!(supplemental_supports_cpu_batch(
13525 "absolute_strength_index_oscillator"
13526 ));
13527 assert!(!supplemental_supports_cuda_batch(
13528 "absolute_strength_index_oscillator"
13529 ));
13530 let info = get_indicator("absolute_strength_index_oscillator").unwrap();
13531 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13532 assert_eq!(info.outputs.len(), 3);
13533 assert_eq!(info.outputs[0].id, "oscillator");
13534 assert_eq!(info.outputs[1].id, "signal");
13535 assert_eq!(info.outputs[2].id, "histogram");
13536 assert_eq!(info.params.len(), 2);
13537 assert_eq!(info.params[0].key, "ema_length");
13538 assert_eq!(info.params[1].key, "signal_length");
13539 assert!(info.capabilities.supports_cpu_single);
13540 assert!(info.capabilities.supports_cpu_batch);
13541 assert!(!info.capabilities.supports_cuda_batch);
13542 assert!(!info.capabilities.supports_cuda_vram);
13543 }
13544
13545 #[test]
13546 fn premier_rsi_oscillator_is_registered_for_cpu_batch_only() {
13547 assert!(supplemental_supports_cpu_batch("premier_rsi_oscillator"));
13548 assert!(!supplemental_supports_cuda_batch("premier_rsi_oscillator"));
13549 let info = get_indicator("premier_rsi_oscillator").unwrap();
13550 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13551 assert_eq!(info.outputs.len(), 1);
13552 assert_eq!(info.outputs[0].id, "value");
13553 assert_eq!(info.params.len(), 3);
13554 assert_eq!(info.params[0].key, "rsi_length");
13555 assert_eq!(info.params[1].key, "stoch_length");
13556 assert_eq!(info.params[2].key, "smooth_length");
13557 assert!(info.capabilities.supports_cpu_single);
13558 assert!(info.capabilities.supports_cpu_batch);
13559 assert!(!info.capabilities.supports_cuda_batch);
13560 assert!(!info.capabilities.supports_cuda_vram);
13561 }
13562
13563 #[test]
13564 fn multi_length_stochastic_average_is_registered_for_cpu_batch_only() {
13565 assert!(supplemental_supports_cpu_batch(
13566 "multi_length_stochastic_average"
13567 ));
13568 assert!(!supplemental_supports_cuda_batch(
13569 "multi_length_stochastic_average"
13570 ));
13571 let info = get_indicator("multi_length_stochastic_average").unwrap();
13572 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13573 assert_eq!(info.outputs.len(), 1);
13574 assert_eq!(info.outputs[0].id, "value");
13575 assert_eq!(info.params.len(), 6);
13576 assert_eq!(info.params[0].key, "length");
13577 assert_eq!(info.params[1].key, "presmooth");
13578 assert_eq!(info.params[2].key, "premethod");
13579 assert_eq!(info.params[3].key, "postsmooth");
13580 assert_eq!(info.params[4].key, "postmethod");
13581 assert_eq!(info.params[5].key, "source");
13582 assert!(info.capabilities.supports_cpu_single);
13583 assert!(info.capabilities.supports_cpu_batch);
13584 assert!(!info.capabilities.supports_cuda_batch);
13585 assert!(!info.capabilities.supports_cuda_vram);
13586 }
13587
13588 #[test]
13589 fn hull_butterfly_oscillator_is_registered_for_cpu_batch_only() {
13590 assert!(supplemental_supports_cpu_batch("hull_butterfly_oscillator"));
13591 assert!(!supplemental_supports_cuda_batch(
13592 "hull_butterfly_oscillator"
13593 ));
13594 let info = get_indicator("hull_butterfly_oscillator").unwrap();
13595 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13596 assert_eq!(info.outputs.len(), 3);
13597 assert_eq!(info.outputs[0].id, "oscillator");
13598 assert_eq!(info.outputs[1].id, "cumulative_mean");
13599 assert_eq!(info.outputs[2].id, "signal");
13600 assert_eq!(info.params.len(), 3);
13601 assert_eq!(info.params[0].key, "length");
13602 assert_eq!(info.params[1].key, "mult");
13603 assert_eq!(info.params[2].key, "source");
13604 assert!(info.capabilities.supports_cpu_single);
13605 assert!(info.capabilities.supports_cpu_batch);
13606 assert!(!info.capabilities.supports_cuda_batch);
13607 assert!(!info.capabilities.supports_cuda_vram);
13608 }
13609
13610 #[test]
13611 fn fibonacci_trailing_stop_is_registered_for_cpu_batch_only() {
13612 assert!(supplemental_supports_cpu_batch("fibonacci_trailing_stop"));
13613 assert!(!supplemental_supports_cuda_batch("fibonacci_trailing_stop"));
13614 let info = get_indicator("fibonacci_trailing_stop").unwrap();
13615 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13616 assert_eq!(info.outputs.len(), 4);
13617 assert_eq!(info.outputs[0].id, "trailing_stop");
13618 assert_eq!(info.outputs[1].id, "long_stop");
13619 assert_eq!(info.outputs[2].id, "short_stop");
13620 assert_eq!(info.outputs[3].id, "direction");
13621 assert_eq!(info.params.len(), 4);
13622 assert_eq!(info.params[0].key, "left_bars");
13623 assert_eq!(info.params[1].key, "right_bars");
13624 assert_eq!(info.params[2].key, "level");
13625 assert_eq!(info.params[3].key, "trigger");
13626 assert!(info.capabilities.supports_cpu_single);
13627 assert!(info.capabilities.supports_cpu_batch);
13628 assert!(!info.capabilities.supports_cuda_batch);
13629 assert!(!info.capabilities.supports_cuda_vram);
13630 }
13631
13632 #[test]
13633 fn fibonacci_entry_bands_is_registered_for_cpu_batch_only() {
13634 assert!(supplemental_supports_cpu_batch("fibonacci_entry_bands"));
13635 assert!(!supplemental_supports_cuda_batch("fibonacci_entry_bands"));
13636 let info = get_indicator("fibonacci_entry_bands").unwrap();
13637 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13638 assert_eq!(info.outputs.len(), 18);
13639 assert_eq!(info.outputs[0].id, "middle");
13640 assert_eq!(info.outputs[1].id, "trend");
13641 assert_eq!(info.outputs[10].id, "tp_long_band");
13642 assert_eq!(info.outputs[11].id, "tp_short_band");
13643 assert_eq!(info.outputs[12].id, "go_long");
13644 assert_eq!(info.outputs[13].id, "go_short");
13645 assert_eq!(info.params.len(), 5);
13646 assert_eq!(info.params[0].key, "source");
13647 assert_eq!(info.params[1].key, "length");
13648 assert_eq!(info.params[2].key, "atr_length");
13649 assert_eq!(info.params[3].key, "use_atr");
13650 assert_eq!(info.params[4].key, "tp_aggressiveness");
13651 assert!(info.capabilities.supports_cpu_single);
13652 assert!(info.capabilities.supports_cpu_batch);
13653 assert!(!info.capabilities.supports_cuda_batch);
13654 assert!(!info.capabilities.supports_cuda_vram);
13655 }
13656
13657 #[test]
13658 fn volume_energy_reservoirs_is_registered_for_cpu_batch_only() {
13659 assert!(supplemental_supports_cpu_batch("volume_energy_reservoirs"));
13660 assert!(!supplemental_supports_cuda_batch(
13661 "volume_energy_reservoirs"
13662 ));
13663 let info = get_indicator("volume_energy_reservoirs").unwrap();
13664 assert_eq!(info.input_kind, IndicatorInputKind::Ohlcv);
13665 assert_eq!(info.outputs.len(), 6);
13666 assert_eq!(info.outputs[0].id, "momentum");
13667 assert_eq!(info.outputs[1].id, "reservoir");
13668 assert_eq!(info.outputs[2].id, "squeeze_active");
13669 assert_eq!(info.outputs[3].id, "squeeze_start");
13670 assert_eq!(info.outputs[4].id, "range_high");
13671 assert_eq!(info.outputs[5].id, "range_low");
13672 assert_eq!(info.params.len(), 2);
13673 assert_eq!(info.params[0].key, "length");
13674 assert_eq!(info.params[1].key, "sensitivity");
13675 assert!(info.capabilities.supports_cpu_single);
13676 assert!(info.capabilities.supports_cpu_batch);
13677 assert!(!info.capabilities.supports_cuda_batch);
13678 assert!(!info.capabilities.supports_cuda_vram);
13679 }
13680
13681 #[test]
13682 fn neighboring_trailing_stop_is_registered_for_cpu_batch_only() {
13683 assert!(supplemental_supports_cpu_batch("neighboring_trailing_stop"));
13684 assert!(!supplemental_supports_cuda_batch(
13685 "neighboring_trailing_stop"
13686 ));
13687 let info = get_indicator("neighboring_trailing_stop").unwrap();
13688 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13689 assert_eq!(info.outputs.len(), 6);
13690 assert_eq!(info.outputs[0].id, "trailing_stop");
13691 assert_eq!(info.outputs[1].id, "bullish_band");
13692 assert_eq!(info.outputs[2].id, "bearish_band");
13693 assert_eq!(info.outputs[3].id, "direction");
13694 assert_eq!(info.outputs[4].id, "discovery_bull");
13695 assert_eq!(info.outputs[5].id, "discovery_bear");
13696 assert_eq!(info.params.len(), 4);
13697 assert_eq!(info.params[0].key, "buffer_size");
13698 assert_eq!(info.params[1].key, "k");
13699 assert_eq!(info.params[2].key, "percentile");
13700 assert_eq!(info.params[3].key, "smooth");
13701 assert!(info.capabilities.supports_cpu_single);
13702 assert!(info.capabilities.supports_cpu_batch);
13703 assert!(!info.capabilities.supports_cuda_batch);
13704 assert!(!info.capabilities.supports_cuda_vram);
13705 }
13706
13707 #[test]
13708 fn macd_wave_signal_pro_is_registered_for_cpu_batch_only() {
13709 assert!(supplemental_supports_cpu_batch("macd_wave_signal_pro"));
13710 assert!(!supplemental_supports_cuda_batch("macd_wave_signal_pro"));
13711 let info = get_indicator("macd_wave_signal_pro").unwrap();
13712 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13713 assert_eq!(info.outputs.len(), 6);
13714 assert_eq!(info.outputs[0].id, "diff");
13715 assert_eq!(info.outputs[1].id, "dea");
13716 assert_eq!(info.outputs[2].id, "macd_histogram");
13717 assert_eq!(info.outputs[3].id, "line_convergence");
13718 assert_eq!(info.outputs[4].id, "buy_signal");
13719 assert_eq!(info.outputs[5].id, "sell_signal");
13720 assert!(info.params.is_empty());
13721 assert!(info.capabilities.supports_cpu_single);
13722 assert!(info.capabilities.supports_cpu_batch);
13723 assert!(!info.capabilities.supports_cuda_batch);
13724 assert!(!info.capabilities.supports_cuda_vram);
13725 }
13726
13727 #[test]
13728 fn hema_trend_levels_is_registered_for_cpu_batch_only() {
13729 assert!(supplemental_supports_cpu_batch("hema_trend_levels"));
13730 assert!(!supplemental_supports_cuda_batch("hema_trend_levels"));
13731 let info = get_indicator("hema_trend_levels").unwrap();
13732 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13733 assert_eq!(info.outputs.len(), 15);
13734 assert_eq!(info.outputs[0].id, "fast_hema");
13735 assert_eq!(info.outputs[1].id, "slow_hema");
13736 assert_eq!(info.outputs[2].id, "trend_direction");
13737 assert_eq!(info.outputs[3].id, "bar_state");
13738 assert_eq!(info.outputs[4].id, "bullish_crossover");
13739 assert_eq!(info.outputs[5].id, "bearish_crossunder");
13740 assert_eq!(info.outputs[6].id, "box_offset");
13741 assert_eq!(info.outputs[7].id, "bull_box_top");
13742 assert_eq!(info.outputs[8].id, "bull_box_bottom");
13743 assert_eq!(info.outputs[9].id, "bear_box_top");
13744 assert_eq!(info.outputs[10].id, "bear_box_bottom");
13745 assert_eq!(info.outputs[11].id, "bullish_test");
13746 assert_eq!(info.outputs[12].id, "bearish_test");
13747 assert_eq!(info.outputs[13].id, "bullish_test_level");
13748 assert_eq!(info.outputs[14].id, "bearish_test_level");
13749 assert_eq!(info.params.len(), 2);
13750 assert!(info.capabilities.supports_cpu_single);
13751 assert!(info.capabilities.supports_cpu_batch);
13752 assert!(!info.capabilities.supports_cuda_batch);
13753 assert!(!info.capabilities.supports_cuda_vram);
13754 }
13755
13756 #[test]
13757 fn grover_llorens_cycle_oscillator_is_registered_for_cpu_batch_only() {
13758 assert!(supplemental_supports_cpu_batch(
13759 "grover_llorens_cycle_oscillator"
13760 ));
13761 assert!(!supplemental_supports_cuda_batch(
13762 "grover_llorens_cycle_oscillator"
13763 ));
13764 let info = get_indicator("grover_llorens_cycle_oscillator").unwrap();
13765 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13766 assert_eq!(info.outputs.len(), 1);
13767 assert_eq!(info.outputs[0].id, "value");
13768 assert_eq!(info.params.len(), 5);
13769 assert_eq!(info.params[0].key, "length");
13770 assert_eq!(info.params[1].key, "mult");
13771 assert_eq!(info.params[2].key, "source");
13772 assert_eq!(info.params[3].key, "smooth");
13773 assert_eq!(info.params[4].key, "rsi_period");
13774 assert!(info.capabilities.supports_cpu_single);
13775 assert!(info.capabilities.supports_cpu_batch);
13776 assert!(!info.capabilities.supports_cuda_batch);
13777 assert!(!info.capabilities.supports_cuda_vram);
13778 }
13779
13780 #[test]
13781 fn intraday_momentum_index_is_registered_for_cpu_batch_only() {
13782 assert!(supplemental_supports_cpu_batch("intraday_momentum_index"));
13783 assert!(!supplemental_supports_cuda_batch("intraday_momentum_index"));
13784 let info = get_indicator("intraday_momentum_index").unwrap();
13785 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13786 assert_eq!(info.outputs.len(), 4);
13787 assert_eq!(info.outputs[0].id, "imi");
13788 assert_eq!(info.outputs[1].id, "upper_hit");
13789 assert_eq!(info.outputs[2].id, "lower_hit");
13790 assert_eq!(info.outputs[3].id, "signal");
13791 assert_eq!(info.params.len(), 6);
13792 assert_eq!(info.params[0].key, "length");
13793 assert_eq!(info.params[1].key, "length_ma");
13794 assert_eq!(info.params[2].key, "mult");
13795 assert_eq!(info.params[3].key, "length_bb");
13796 assert_eq!(info.params[4].key, "apply_smoothing");
13797 assert_eq!(info.params[5].key, "low_band");
13798 assert!(info.capabilities.supports_cpu_single);
13799 assert!(info.capabilities.supports_cpu_batch);
13800 assert!(!info.capabilities.supports_cuda_batch);
13801 assert!(!info.capabilities.supports_cuda_vram);
13802 }
13803
13804 #[test]
13805 fn vwap_zscore_with_signals_is_registered_for_cpu_batch_only() {
13806 assert!(supplemental_supports_cpu_batch("vwap_zscore_with_signals"));
13807 assert!(!supplemental_supports_cuda_batch(
13808 "vwap_zscore_with_signals"
13809 ));
13810 let info = get_indicator("vwap_zscore_with_signals").unwrap();
13811 assert_eq!(info.input_kind, IndicatorInputKind::CloseVolume);
13812 assert_eq!(info.outputs.len(), 3);
13813 assert_eq!(info.outputs[0].id, "zvwap");
13814 assert_eq!(info.outputs[1].id, "support_signal");
13815 assert_eq!(info.outputs[2].id, "resistance_signal");
13816 assert_eq!(info.params.len(), 3);
13817 assert_eq!(info.params[0].key, "length");
13818 assert_eq!(info.params[1].key, "upper_bottom");
13819 assert_eq!(info.params[2].key, "lower_bottom");
13820 assert!(info.capabilities.supports_cpu_single);
13821 assert!(info.capabilities.supports_cpu_batch);
13822 assert!(!info.capabilities.supports_cuda_batch);
13823 assert!(!info.capabilities.supports_cuda_vram);
13824 }
13825
13826 #[test]
13827 fn atr_percentile_is_registered_for_cpu_batch_only() {
13828 assert!(supplemental_supports_cpu_batch("atr_percentile"));
13829 assert!(!supplemental_supports_cuda_batch("atr_percentile"));
13830 let info = get_indicator("atr_percentile").unwrap();
13831 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13832 assert_eq!(info.outputs.len(), 1);
13833 assert_eq!(info.outputs[0].id, "value");
13834 assert_eq!(info.params.len(), 2);
13835 assert_eq!(info.params[0].key, "atr_length");
13836 assert_eq!(info.params[1].key, "percentile_length");
13837 assert!(info.capabilities.supports_cpu_single);
13838 assert!(info.capabilities.supports_cpu_batch);
13839 assert!(!info.capabilities.supports_cuda_batch);
13840 assert!(!info.capabilities.supports_cuda_vram);
13841 }
13842
13843 #[test]
13844 fn gopalakrishnan_range_index_is_registered_for_cpu_batch_only() {
13845 assert!(supplemental_supports_cpu_batch(
13846 "gopalakrishnan_range_index"
13847 ));
13848 assert!(!supplemental_supports_cuda_batch(
13849 "gopalakrishnan_range_index"
13850 ));
13851 let info = get_indicator("gopalakrishnan_range_index").unwrap();
13852 assert_eq!(info.input_kind, IndicatorInputKind::HighLow);
13853 assert_eq!(info.outputs.len(), 1);
13854 assert_eq!(info.outputs[0].id, "value");
13855 assert_eq!(info.params.len(), 1);
13856 assert_eq!(info.params[0].key, "length");
13857 assert!(info.capabilities.supports_cpu_single);
13858 assert!(info.capabilities.supports_cpu_batch);
13859 assert!(!info.capabilities.supports_cuda_batch);
13860 assert!(!info.capabilities.supports_cuda_vram);
13861 }
13862
13863 #[test]
13864 fn demand_index_is_registered_for_cpu_batch_only() {
13865 assert!(supplemental_supports_cpu_batch("demand_index"));
13866 assert!(!supplemental_supports_cuda_batch("demand_index"));
13867 let info = get_indicator("demand_index").unwrap();
13868 assert_eq!(info.input_kind, IndicatorInputKind::Ohlcv);
13869 assert_eq!(info.outputs.len(), 2);
13870 assert_eq!(info.outputs[0].id, "demand_index");
13871 assert_eq!(info.outputs[1].id, "signal");
13872 assert_eq!(info.params.len(), 4);
13873 assert_eq!(info.params[0].key, "len_bs");
13874 assert_eq!(info.params[1].key, "len_bs_ma");
13875 assert_eq!(info.params[2].key, "len_di_ma");
13876 assert_eq!(info.params[3].key, "ma_type");
13877 assert!(info.capabilities.supports_cpu_single);
13878 assert!(info.capabilities.supports_cpu_batch);
13879 assert!(!info.capabilities.supports_cuda_batch);
13880 assert!(!info.capabilities.supports_cuda_vram);
13881 }
13882}