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"];
198const ENUM_VALUES_VDO_SESSION_MODE: &[&str] =
199 &["4_hours", "daily", "weekly", "rolling_bars", "rolling_days"];
200const ENUM_VALUES_VDO_DEVIATION_MODE: &[&str] = &["percent", "absolute", "zscore"];
201const ENUM_VALUES_ICHI_NORMALIZE_MODE: &[&str] = &["all", "window", "disabled"];
202const ENUM_VALUES_STATISTICAL_TRAILING_STOP_BASE_LEVEL: &[&str] =
203 &["level0", "level1", "level2", "level3"];
204const ENUM_VALUES_EDCT3_OUTPUT: &[&str] = &["corrected", "t3"];
205const ENUM_VALUES_NORMALIZED_VOLUME_TRUE_RANGE_OUTPUT: &[&str] = &[
206 "normalized_volume",
207 "normalized_true_range",
208 "baseline",
209 "atr",
210 "average_volume",
211];
212const ENUM_VALUES_MOVING_AVERAGE_CROSS_PROBABILITY_MA_TYPE: &[&str] = &["ema", "sma"];
213const ENUM_VALUES_BULLS_V_BEARS_MA_TYPE: &[&str] = &["ema", "sma", "wma"];
214const ENUM_VALUES_BULLS_V_BEARS_CALCULATION_METHOD: &[&str] = &["normalized", "raw"];
215const ENUM_VALUES_SMOOTH_THEIL_SEN_STAT_STYLE: &[&str] =
216 &["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_GOPALAKRISHNAN_RANGE_INDEX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
6559 key: "length",
6560 label: "Length",
6561 kind: IndicatorParamKind::Int,
6562 required: false,
6563 default: Some(ParamValueStatic::Int(5)),
6564 min: Some(2.0),
6565 max: None,
6566 step: Some(1.0),
6567 enum_values: EMPTY_ENUM_VALUES,
6568 notes: None,
6569}];
6570
6571const PARAM_ATR_PERCENTILE: &[IndicatorParamInfo] = &[
6572 IndicatorParamInfo {
6573 key: "atr_length",
6574 label: "ATR Length",
6575 kind: IndicatorParamKind::Int,
6576 required: false,
6577 default: Some(ParamValueStatic::Int(10)),
6578 min: Some(1.0),
6579 max: None,
6580 step: Some(1.0),
6581 enum_values: EMPTY_ENUM_VALUES,
6582 notes: None,
6583 },
6584 IndicatorParamInfo {
6585 key: "percentile_length",
6586 label: "Percentile Length",
6587 kind: IndicatorParamKind::Int,
6588 required: false,
6589 default: Some(ParamValueStatic::Int(50)),
6590 min: Some(1.0),
6591 max: None,
6592 step: Some(1.0),
6593 enum_values: EMPTY_ENUM_VALUES,
6594 notes: None,
6595 },
6596];
6597
6598const PARAM_HISTORICAL_VOLATILITY: &[IndicatorParamInfo] = &[
6599 IndicatorParamInfo {
6600 key: "lookback",
6601 label: "Lookback",
6602 kind: IndicatorParamKind::Int,
6603 required: false,
6604 default: Some(ParamValueStatic::Int(20)),
6605 min: Some(1.0),
6606 max: None,
6607 step: Some(1.0),
6608 enum_values: EMPTY_ENUM_VALUES,
6609 notes: None,
6610 },
6611 IndicatorParamInfo {
6612 key: "annualization_days",
6613 label: "Annualization Days",
6614 kind: IndicatorParamKind::Float,
6615 required: false,
6616 default: Some(ParamValueStatic::Float(250.0)),
6617 min: Some(0.0),
6618 max: None,
6619 step: None,
6620 enum_values: EMPTY_ENUM_VALUES,
6621 notes: None,
6622 },
6623];
6624
6625const PARAM_VELOCITY_ACCELERATION_INDICATOR: &[IndicatorParamInfo] = &[
6626 IndicatorParamInfo {
6627 key: "length",
6628 label: "Length",
6629 kind: IndicatorParamKind::Int,
6630 required: false,
6631 default: Some(ParamValueStatic::Int(21)),
6632 min: Some(2.0),
6633 max: None,
6634 step: Some(1.0),
6635 enum_values: EMPTY_ENUM_VALUES,
6636 notes: None,
6637 },
6638 IndicatorParamInfo {
6639 key: "smooth_length",
6640 label: "Smooth Length",
6641 kind: IndicatorParamKind::Int,
6642 required: false,
6643 default: Some(ParamValueStatic::Int(5)),
6644 min: Some(1.0),
6645 max: None,
6646 step: Some(1.0),
6647 enum_values: EMPTY_ENUM_VALUES,
6648 notes: None,
6649 },
6650 IndicatorParamInfo {
6651 key: "source",
6652 label: "Source",
6653 kind: IndicatorParamKind::EnumString,
6654 required: false,
6655 default: Some(ParamValueStatic::EnumString("hlcc4")),
6656 min: None,
6657 max: None,
6658 step: None,
6659 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
6660 notes: None,
6661 },
6662];
6663
6664const PARAM_NORMALIZED_RESONATOR: &[IndicatorParamInfo] = &[
6665 IndicatorParamInfo {
6666 key: "period",
6667 label: "Period",
6668 kind: IndicatorParamKind::Int,
6669 required: false,
6670 default: Some(ParamValueStatic::Int(100)),
6671 min: Some(2.0),
6672 max: None,
6673 step: Some(1.0),
6674 enum_values: EMPTY_ENUM_VALUES,
6675 notes: None,
6676 },
6677 IndicatorParamInfo {
6678 key: "delta",
6679 label: "Delta",
6680 kind: IndicatorParamKind::Float,
6681 required: false,
6682 default: Some(ParamValueStatic::Float(0.5)),
6683 min: Some(0.01),
6684 max: Some(1.0),
6685 step: Some(0.05),
6686 enum_values: EMPTY_ENUM_VALUES,
6687 notes: None,
6688 },
6689 IndicatorParamInfo {
6690 key: "lookback_mult",
6691 label: "Lookback Multiplier",
6692 kind: IndicatorParamKind::Float,
6693 required: false,
6694 default: Some(ParamValueStatic::Float(1.0)),
6695 min: Some(0.1),
6696 max: None,
6697 step: Some(0.1),
6698 enum_values: EMPTY_ENUM_VALUES,
6699 notes: None,
6700 },
6701 IndicatorParamInfo {
6702 key: "signal_length",
6703 label: "Signal Length",
6704 kind: IndicatorParamKind::Int,
6705 required: false,
6706 default: Some(ParamValueStatic::Int(9)),
6707 min: Some(1.0),
6708 max: None,
6709 step: Some(1.0),
6710 enum_values: EMPTY_ENUM_VALUES,
6711 notes: None,
6712 },
6713 IndicatorParamInfo {
6714 key: "source",
6715 label: "Source",
6716 kind: IndicatorParamKind::EnumString,
6717 required: false,
6718 default: Some(ParamValueStatic::EnumString("hl2")),
6719 min: None,
6720 max: None,
6721 step: None,
6722 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
6723 notes: None,
6724 },
6725];
6726
6727const PARAM_MONOTONICITY_INDEX: &[IndicatorParamInfo] = &[
6728 IndicatorParamInfo {
6729 key: "length",
6730 label: "Period",
6731 kind: IndicatorParamKind::Int,
6732 required: false,
6733 default: Some(ParamValueStatic::Int(20)),
6734 min: Some(2.0),
6735 max: None,
6736 step: Some(1.0),
6737 enum_values: EMPTY_ENUM_VALUES,
6738 notes: None,
6739 },
6740 IndicatorParamInfo {
6741 key: "mode",
6742 label: "Mode",
6743 kind: IndicatorParamKind::EnumString,
6744 required: false,
6745 default: Some(ParamValueStatic::EnumString("efficiency")),
6746 min: None,
6747 max: None,
6748 step: None,
6749 enum_values: ENUM_VALUES_MONOTONICITY_INDEX_MODE,
6750 notes: None,
6751 },
6752 IndicatorParamInfo {
6753 key: "index_smooth",
6754 label: "Index Smoothing",
6755 kind: IndicatorParamKind::Int,
6756 required: false,
6757 default: Some(ParamValueStatic::Int(5)),
6758 min: Some(1.0),
6759 max: None,
6760 step: Some(1.0),
6761 enum_values: EMPTY_ENUM_VALUES,
6762 notes: None,
6763 },
6764 IndicatorParamInfo {
6765 key: "source",
6766 label: "Source",
6767 kind: IndicatorParamKind::EnumString,
6768 required: false,
6769 default: Some(ParamValueStatic::EnumString("close")),
6770 min: None,
6771 max: None,
6772 step: None,
6773 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
6774 notes: None,
6775 },
6776];
6777
6778const PARAM_HALF_CAUSAL_ESTIMATOR: &[IndicatorParamInfo] = &[
6779 IndicatorParamInfo {
6780 key: "slots_per_day",
6781 label: "Slots Per Day",
6782 kind: IndicatorParamKind::Int,
6783 required: false,
6784 default: None,
6785 min: Some(2.0),
6786 max: None,
6787 step: Some(1.0),
6788 enum_values: EMPTY_ENUM_VALUES,
6789 notes: Some("Required for raw-slice dispatch; candle dispatch infers this when omitted."),
6790 },
6791 IndicatorParamInfo {
6792 key: "data_period",
6793 label: "Data Period",
6794 kind: IndicatorParamKind::Int,
6795 required: false,
6796 default: Some(ParamValueStatic::Int(5)),
6797 min: Some(0.0),
6798 max: None,
6799 step: Some(1.0),
6800 enum_values: EMPTY_ENUM_VALUES,
6801 notes: None,
6802 },
6803 IndicatorParamInfo {
6804 key: "filter_length",
6805 label: "Filter Length",
6806 kind: IndicatorParamKind::Int,
6807 required: false,
6808 default: Some(ParamValueStatic::Int(20)),
6809 min: Some(2.0),
6810 max: None,
6811 step: Some(1.0),
6812 enum_values: EMPTY_ENUM_VALUES,
6813 notes: None,
6814 },
6815 IndicatorParamInfo {
6816 key: "kernel_width",
6817 label: "Kernel Width",
6818 kind: IndicatorParamKind::Float,
6819 required: false,
6820 default: Some(ParamValueStatic::Float(20.0)),
6821 min: Some(0.125),
6822 max: None,
6823 step: Some(0.125),
6824 enum_values: EMPTY_ENUM_VALUES,
6825 notes: None,
6826 },
6827 IndicatorParamInfo {
6828 key: "kernel_type",
6829 label: "Kernel Type",
6830 kind: IndicatorParamKind::EnumString,
6831 required: false,
6832 default: Some(ParamValueStatic::EnumString("epanechnikov")),
6833 min: None,
6834 max: None,
6835 step: None,
6836 enum_values: ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_KERNEL_TYPE,
6837 notes: None,
6838 },
6839 IndicatorParamInfo {
6840 key: "confidence_adjust",
6841 label: "Confidence Adjust",
6842 kind: IndicatorParamKind::EnumString,
6843 required: false,
6844 default: Some(ParamValueStatic::EnumString("symmetric")),
6845 min: None,
6846 max: None,
6847 step: None,
6848 enum_values: ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_CONFIDENCE_ADJUST,
6849 notes: None,
6850 },
6851 IndicatorParamInfo {
6852 key: "maximum_confidence_adjust",
6853 label: "Maximum Confidence Adjust",
6854 kind: IndicatorParamKind::Float,
6855 required: false,
6856 default: Some(ParamValueStatic::Float(100.0)),
6857 min: Some(0.0),
6858 max: Some(100.0),
6859 step: Some(1.0),
6860 enum_values: EMPTY_ENUM_VALUES,
6861 notes: None,
6862 },
6863 IndicatorParamInfo {
6864 key: "enable_expected_value",
6865 label: "Enable Expected Value",
6866 kind: IndicatorParamKind::Bool,
6867 required: false,
6868 default: Some(ParamValueStatic::Bool(false)),
6869 min: None,
6870 max: None,
6871 step: None,
6872 enum_values: ENUM_VALUES_TRUE_FALSE,
6873 notes: None,
6874 },
6875 IndicatorParamInfo {
6876 key: "extra_smoothing",
6877 label: "Extra Smoothing",
6878 kind: IndicatorParamKind::Int,
6879 required: false,
6880 default: Some(ParamValueStatic::Int(0)),
6881 min: Some(0.0),
6882 max: None,
6883 step: Some(1.0),
6884 enum_values: EMPTY_ENUM_VALUES,
6885 notes: None,
6886 },
6887 IndicatorParamInfo {
6888 key: "source",
6889 label: "Source",
6890 kind: IndicatorParamKind::EnumString,
6891 required: false,
6892 default: Some(ParamValueStatic::EnumString("volume")),
6893 min: None,
6894 max: None,
6895 step: None,
6896 enum_values: ENUM_VALUES_HALF_CAUSAL_ESTIMATOR_SOURCE,
6897 notes: None,
6898 },
6899];
6900
6901const PARAM_ABSOLUTE_STRENGTH_INDEX_OSCILLATOR: &[IndicatorParamInfo] = &[
6902 IndicatorParamInfo {
6903 key: "ema_length",
6904 label: "EMA Length",
6905 kind: IndicatorParamKind::Int,
6906 required: false,
6907 default: Some(ParamValueStatic::Int(21)),
6908 min: Some(1.0),
6909 max: None,
6910 step: Some(1.0),
6911 enum_values: EMPTY_ENUM_VALUES,
6912 notes: None,
6913 },
6914 IndicatorParamInfo {
6915 key: "signal_length",
6916 label: "Signal Length",
6917 kind: IndicatorParamKind::Int,
6918 required: false,
6919 default: Some(ParamValueStatic::Int(34)),
6920 min: Some(2.0),
6921 max: None,
6922 step: Some(1.0),
6923 enum_values: EMPTY_ENUM_VALUES,
6924 notes: None,
6925 },
6926];
6927
6928const PARAM_PREMIER_RSI_OSCILLATOR: &[IndicatorParamInfo] = &[
6929 IndicatorParamInfo {
6930 key: "rsi_length",
6931 label: "RSI Length",
6932 kind: IndicatorParamKind::Int,
6933 required: false,
6934 default: Some(ParamValueStatic::Int(14)),
6935 min: Some(1.0),
6936 max: None,
6937 step: Some(1.0),
6938 enum_values: EMPTY_ENUM_VALUES,
6939 notes: None,
6940 },
6941 IndicatorParamInfo {
6942 key: "stoch_length",
6943 label: "Stoch Length",
6944 kind: IndicatorParamKind::Int,
6945 required: false,
6946 default: Some(ParamValueStatic::Int(8)),
6947 min: Some(1.0),
6948 max: None,
6949 step: Some(1.0),
6950 enum_values: EMPTY_ENUM_VALUES,
6951 notes: None,
6952 },
6953 IndicatorParamInfo {
6954 key: "smooth_length",
6955 label: "Smooth Length",
6956 kind: IndicatorParamKind::Int,
6957 required: false,
6958 default: Some(ParamValueStatic::Int(25)),
6959 min: Some(1.0),
6960 max: None,
6961 step: Some(1.0),
6962 enum_values: EMPTY_ENUM_VALUES,
6963 notes: None,
6964 },
6965];
6966
6967const PARAM_MULTI_LENGTH_STOCHASTIC_AVERAGE: &[IndicatorParamInfo] = &[
6968 IndicatorParamInfo {
6969 key: "length",
6970 label: "Length",
6971 kind: IndicatorParamKind::Int,
6972 required: false,
6973 default: Some(ParamValueStatic::Int(14)),
6974 min: Some(4.0),
6975 max: None,
6976 step: Some(1.0),
6977 enum_values: EMPTY_ENUM_VALUES,
6978 notes: None,
6979 },
6980 IndicatorParamInfo {
6981 key: "presmooth",
6982 label: "Pre-Smoothing",
6983 kind: IndicatorParamKind::Int,
6984 required: false,
6985 default: Some(ParamValueStatic::Int(10)),
6986 min: Some(1.0),
6987 max: None,
6988 step: Some(1.0),
6989 enum_values: EMPTY_ENUM_VALUES,
6990 notes: None,
6991 },
6992 IndicatorParamInfo {
6993 key: "premethod",
6994 label: "Pre-Smoothing Method",
6995 kind: IndicatorParamKind::EnumString,
6996 required: false,
6997 default: Some(ParamValueStatic::EnumString("sma")),
6998 min: None,
6999 max: None,
7000 step: None,
7001 enum_values: ENUM_VALUES_MULTI_LENGTH_STOCHASTIC_AVERAGE_METHOD,
7002 notes: None,
7003 },
7004 IndicatorParamInfo {
7005 key: "postsmooth",
7006 label: "Post-Smoothing",
7007 kind: IndicatorParamKind::Int,
7008 required: false,
7009 default: Some(ParamValueStatic::Int(10)),
7010 min: Some(1.0),
7011 max: None,
7012 step: Some(1.0),
7013 enum_values: EMPTY_ENUM_VALUES,
7014 notes: None,
7015 },
7016 IndicatorParamInfo {
7017 key: "postmethod",
7018 label: "Post-Smoothing Method",
7019 kind: IndicatorParamKind::EnumString,
7020 required: false,
7021 default: Some(ParamValueStatic::EnumString("sma")),
7022 min: None,
7023 max: None,
7024 step: None,
7025 enum_values: ENUM_VALUES_MULTI_LENGTH_STOCHASTIC_AVERAGE_METHOD,
7026 notes: None,
7027 },
7028 IndicatorParamInfo {
7029 key: "source",
7030 label: "Source",
7031 kind: IndicatorParamKind::EnumString,
7032 required: false,
7033 default: Some(ParamValueStatic::EnumString("close")),
7034 min: None,
7035 max: None,
7036 step: None,
7037 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
7038 notes: None,
7039 },
7040];
7041
7042const PARAM_HULL_BUTTERFLY_OSCILLATOR: &[IndicatorParamInfo] = &[
7043 IndicatorParamInfo {
7044 key: "length",
7045 label: "Length",
7046 kind: IndicatorParamKind::Int,
7047 required: false,
7048 default: Some(ParamValueStatic::Int(14)),
7049 min: Some(2.0),
7050 max: None,
7051 step: Some(1.0),
7052 enum_values: EMPTY_ENUM_VALUES,
7053 notes: None,
7054 },
7055 IndicatorParamInfo {
7056 key: "mult",
7057 label: "Levels Multiplier",
7058 kind: IndicatorParamKind::Float,
7059 required: false,
7060 default: Some(ParamValueStatic::Float(2.0)),
7061 min: None,
7062 max: None,
7063 step: Some(0.1),
7064 enum_values: EMPTY_ENUM_VALUES,
7065 notes: None,
7066 },
7067 IndicatorParamInfo {
7068 key: "source",
7069 label: "Source",
7070 kind: IndicatorParamKind::EnumString,
7071 required: false,
7072 default: Some(ParamValueStatic::EnumString("close")),
7073 min: None,
7074 max: None,
7075 step: None,
7076 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
7077 notes: None,
7078 },
7079];
7080
7081const PARAM_FIBONACCI_TRAILING_STOP: &[IndicatorParamInfo] = &[
7082 IndicatorParamInfo {
7083 key: "left_bars",
7084 label: "Left Bars",
7085 kind: IndicatorParamKind::Int,
7086 required: false,
7087 default: Some(ParamValueStatic::Int(20)),
7088 min: Some(1.0),
7089 max: None,
7090 step: Some(1.0),
7091 enum_values: EMPTY_ENUM_VALUES,
7092 notes: None,
7093 },
7094 IndicatorParamInfo {
7095 key: "right_bars",
7096 label: "Right Bars",
7097 kind: IndicatorParamKind::Int,
7098 required: false,
7099 default: Some(ParamValueStatic::Int(1)),
7100 min: Some(1.0),
7101 max: None,
7102 step: Some(1.0),
7103 enum_values: EMPTY_ENUM_VALUES,
7104 notes: None,
7105 },
7106 IndicatorParamInfo {
7107 key: "level",
7108 label: "Level",
7109 kind: IndicatorParamKind::Float,
7110 required: false,
7111 default: Some(ParamValueStatic::Float(-0.382)),
7112 min: None,
7113 max: None,
7114 step: Some(0.001),
7115 enum_values: EMPTY_ENUM_VALUES,
7116 notes: Some("Finite Fibonacci extension/retracement factor"),
7117 },
7118 IndicatorParamInfo {
7119 key: "trigger",
7120 label: "Trigger",
7121 kind: IndicatorParamKind::EnumString,
7122 required: false,
7123 default: Some(ParamValueStatic::EnumString("close")),
7124 min: None,
7125 max: None,
7126 step: None,
7127 enum_values: ENUM_VALUES_FIBONACCI_TRAILING_STOP_TRIGGER,
7128 notes: None,
7129 },
7130];
7131const PARAM_FIBONACCI_ENTRY_BANDS: &[IndicatorParamInfo] = &[
7132 IndicatorParamInfo {
7133 key: "source",
7134 label: "Source",
7135 kind: IndicatorParamKind::EnumString,
7136 required: false,
7137 default: Some(ParamValueStatic::EnumString("hlc3")),
7138 min: None,
7139 max: None,
7140 step: None,
7141 enum_values: ENUM_VALUES_FIBONACCI_ENTRY_BANDS_SOURCE,
7142 notes: None,
7143 },
7144 IndicatorParamInfo {
7145 key: "length",
7146 label: "Length",
7147 kind: IndicatorParamKind::Int,
7148 required: false,
7149 default: Some(ParamValueStatic::Int(21)),
7150 min: Some(1.0),
7151 max: None,
7152 step: Some(1.0),
7153 enum_values: EMPTY_ENUM_VALUES,
7154 notes: None,
7155 },
7156 IndicatorParamInfo {
7157 key: "atr_length",
7158 label: "ATR Length",
7159 kind: IndicatorParamKind::Int,
7160 required: false,
7161 default: Some(ParamValueStatic::Int(14)),
7162 min: Some(1.0),
7163 max: None,
7164 step: Some(1.0),
7165 enum_values: EMPTY_ENUM_VALUES,
7166 notes: None,
7167 },
7168 IndicatorParamInfo {
7169 key: "use_atr",
7170 label: "Use ATR",
7171 kind: IndicatorParamKind::Bool,
7172 required: false,
7173 default: Some(ParamValueStatic::Bool(true)),
7174 min: None,
7175 max: None,
7176 step: None,
7177 enum_values: ENUM_VALUES_TRUE_FALSE,
7178 notes: None,
7179 },
7180 IndicatorParamInfo {
7181 key: "tp_aggressiveness",
7182 label: "TP Aggressiveness",
7183 kind: IndicatorParamKind::EnumString,
7184 required: false,
7185 default: Some(ParamValueStatic::EnumString("low")),
7186 min: None,
7187 max: None,
7188 step: None,
7189 enum_values: ENUM_VALUES_FIBONACCI_ENTRY_BANDS_TP_AGGRESSIVENESS,
7190 notes: None,
7191 },
7192];
7193
7194const PARAM_VOLUME_ENERGY_RESERVOIRS: &[IndicatorParamInfo] = &[
7195 IndicatorParamInfo {
7196 key: "length",
7197 label: "Energy Horizon",
7198 kind: IndicatorParamKind::Int,
7199 required: false,
7200 default: Some(ParamValueStatic::Int(20)),
7201 min: Some(5.0),
7202 max: None,
7203 step: Some(1.0),
7204 enum_values: EMPTY_ENUM_VALUES,
7205 notes: Some("Lookback for price stability and midpoint range."),
7206 },
7207 IndicatorParamInfo {
7208 key: "sensitivity",
7209 label: "Energy Sensitivity",
7210 kind: IndicatorParamKind::Float,
7211 required: false,
7212 default: Some(ParamValueStatic::Float(1.5)),
7213 min: Some(0.5),
7214 max: None,
7215 step: Some(0.1),
7216 enum_values: EMPTY_ENUM_VALUES,
7217 notes: Some("Controls how quickly reservoir energy is released on volume spikes."),
7218 },
7219];
7220
7221const PARAM_NEIGHBORING_TRAILING_STOP: &[IndicatorParamInfo] = &[
7222 IndicatorParamInfo {
7223 key: "buffer_size",
7224 label: "Historical Buffer",
7225 kind: IndicatorParamKind::Int,
7226 required: false,
7227 default: Some(ParamValueStatic::Int(200)),
7228 min: Some(100.0),
7229 max: Some(20000.0),
7230 step: Some(1.0),
7231 enum_values: EMPTY_ENUM_VALUES,
7232 notes: Some("Number of historical closes retained in the sorted neighborhood buffer."),
7233 },
7234 IndicatorParamInfo {
7235 key: "k",
7236 label: "Neighboring Range",
7237 kind: IndicatorParamKind::Int,
7238 required: false,
7239 default: Some(ParamValueStatic::Int(50)),
7240 min: Some(5.0),
7241 max: None,
7242 step: Some(1.0),
7243 enum_values: EMPTY_ENUM_VALUES,
7244 notes: Some("Number of neighboring closes examined on each side of the insertion point."),
7245 },
7246 IndicatorParamInfo {
7247 key: "percentile",
7248 label: "Percentile",
7249 kind: IndicatorParamKind::Float,
7250 required: false,
7251 default: Some(ParamValueStatic::Float(90.0)),
7252 min: Some(1.0),
7253 max: Some(99.0),
7254 step: Some(1.0),
7255 enum_values: EMPTY_ENUM_VALUES,
7256 notes: Some("Percentile rank used for the lower and upper neighborhood bands."),
7257 },
7258 IndicatorParamInfo {
7259 key: "smooth",
7260 label: "Smoothing",
7261 kind: IndicatorParamKind::Int,
7262 required: false,
7263 default: Some(ParamValueStatic::Int(5)),
7264 min: Some(1.0),
7265 max: None,
7266 step: Some(1.0),
7267 enum_values: EMPTY_ENUM_VALUES,
7268 notes: Some("SMA smoothing applied to the neighborhood bands before stop updates."),
7269 },
7270];
7271
7272const PARAM_GROVER_LLORENS_CYCLE_OSCILLATOR: &[IndicatorParamInfo] = &[
7273 IndicatorParamInfo {
7274 key: "length",
7275 label: "Length",
7276 kind: IndicatorParamKind::Int,
7277 required: false,
7278 default: Some(ParamValueStatic::Int(100)),
7279 min: Some(1.0),
7280 max: None,
7281 step: Some(1.0),
7282 enum_values: EMPTY_ENUM_VALUES,
7283 notes: None,
7284 },
7285 IndicatorParamInfo {
7286 key: "mult",
7287 label: "Multiplier",
7288 kind: IndicatorParamKind::Float,
7289 required: false,
7290 default: Some(ParamValueStatic::Float(10.0)),
7291 min: None,
7292 max: None,
7293 step: None,
7294 enum_values: EMPTY_ENUM_VALUES,
7295 notes: None,
7296 },
7297 IndicatorParamInfo {
7298 key: "source",
7299 label: "Source",
7300 kind: IndicatorParamKind::EnumString,
7301 required: false,
7302 default: Some(ParamValueStatic::EnumString("close")),
7303 min: None,
7304 max: None,
7305 step: None,
7306 enum_values: ENUM_VALUES_GROVER_LLORENS_CYCLE_OSCILLATOR_SOURCE,
7307 notes: None,
7308 },
7309 IndicatorParamInfo {
7310 key: "smooth",
7311 label: "Smooth",
7312 kind: IndicatorParamKind::Bool,
7313 required: false,
7314 default: Some(ParamValueStatic::Bool(true)),
7315 min: None,
7316 max: None,
7317 step: None,
7318 enum_values: ENUM_VALUES_TRUE_FALSE,
7319 notes: None,
7320 },
7321 IndicatorParamInfo {
7322 key: "rsi_period",
7323 label: "RSI Period",
7324 kind: IndicatorParamKind::Int,
7325 required: false,
7326 default: Some(ParamValueStatic::Int(20)),
7327 min: Some(1.0),
7328 max: None,
7329 step: Some(1.0),
7330 enum_values: EMPTY_ENUM_VALUES,
7331 notes: None,
7332 },
7333];
7334
7335const PARAM_EHLERS_LINEAR_EXTRAPOLATION_PREDICTOR: &[IndicatorParamInfo] = &[
7336 IndicatorParamInfo {
7337 key: "high_pass_length",
7338 label: "High-Pass Length",
7339 kind: IndicatorParamKind::Int,
7340 required: false,
7341 default: Some(ParamValueStatic::Int(125)),
7342 min: Some(1.0),
7343 max: None,
7344 step: Some(1.0),
7345 enum_values: EMPTY_ENUM_VALUES,
7346 notes: None,
7347 },
7348 IndicatorParamInfo {
7349 key: "low_pass_length",
7350 label: "Low-Pass Length",
7351 kind: IndicatorParamKind::Int,
7352 required: false,
7353 default: Some(ParamValueStatic::Int(12)),
7354 min: Some(1.0),
7355 max: None,
7356 step: Some(1.0),
7357 enum_values: EMPTY_ENUM_VALUES,
7358 notes: None,
7359 },
7360 IndicatorParamInfo {
7361 key: "gain",
7362 label: "Gain",
7363 kind: IndicatorParamKind::Float,
7364 required: false,
7365 default: Some(ParamValueStatic::Float(0.7)),
7366 min: None,
7367 max: None,
7368 step: None,
7369 enum_values: EMPTY_ENUM_VALUES,
7370 notes: None,
7371 },
7372 IndicatorParamInfo {
7373 key: "bars_forward",
7374 label: "Bars Forward",
7375 kind: IndicatorParamKind::Int,
7376 required: false,
7377 default: Some(ParamValueStatic::Int(5)),
7378 min: Some(0.0),
7379 max: Some(10.0),
7380 step: Some(1.0),
7381 enum_values: EMPTY_ENUM_VALUES,
7382 notes: Some("Faithful core supports 0..10 forward bars."),
7383 },
7384 IndicatorParamInfo {
7385 key: "signal_mode",
7386 label: "Signal Mode",
7387 kind: IndicatorParamKind::EnumString,
7388 required: false,
7389 default: Some(ParamValueStatic::EnumString("predict_filter_crosses")),
7390 min: None,
7391 max: None,
7392 step: None,
7393 enum_values: ENUM_VALUES_EHLERS_LINEAR_EXTRAPOLATION_SIGNAL_MODE,
7394 notes: None,
7395 },
7396];
7397
7398const PARAM_BULL_POWER_VS_BEAR_POWER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
7399 key: "period",
7400 label: "Period",
7401 kind: IndicatorParamKind::Int,
7402 required: false,
7403 default: Some(ParamValueStatic::Int(5)),
7404 min: Some(1.0),
7405 max: None,
7406 step: Some(1.0),
7407 enum_values: EMPTY_ENUM_VALUES,
7408 notes: None,
7409}];
7410
7411const PARAM_VERTICAL_HORIZONTAL_FILTER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
7412 key: "length",
7413 label: "Length",
7414 kind: IndicatorParamKind::Int,
7415 required: false,
7416 default: Some(ParamValueStatic::Int(28)),
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_SQUEEZE_INDEX: &[IndicatorParamInfo] = &[
7425 IndicatorParamInfo {
7426 key: "conv",
7427 label: "Convergence Factor",
7428 kind: IndicatorParamKind::Float,
7429 required: false,
7430 default: Some(ParamValueStatic::Float(50.0)),
7431 min: Some(1.0),
7432 max: None,
7433 step: Some(1.0),
7434 enum_values: EMPTY_ENUM_VALUES,
7435 notes: None,
7436 },
7437 IndicatorParamInfo {
7438 key: "length",
7439 label: "Length",
7440 kind: IndicatorParamKind::Int,
7441 required: false,
7442 default: Some(ParamValueStatic::Int(20)),
7443 min: Some(1.0),
7444 max: None,
7445 step: Some(1.0),
7446 enum_values: EMPTY_ENUM_VALUES,
7447 notes: None,
7448 },
7449];
7450
7451const PARAM_STOCHASTIC_DISTANCE: &[IndicatorParamInfo] = &[
7452 IndicatorParamInfo {
7453 key: "lookback_length",
7454 label: "Lookback Length",
7455 kind: IndicatorParamKind::Int,
7456 required: false,
7457 default: Some(ParamValueStatic::Int(200)),
7458 min: Some(1.0),
7459 max: None,
7460 step: Some(1.0),
7461 enum_values: EMPTY_ENUM_VALUES,
7462 notes: None,
7463 },
7464 IndicatorParamInfo {
7465 key: "length1",
7466 label: "Length 1",
7467 kind: IndicatorParamKind::Int,
7468 required: false,
7469 default: Some(ParamValueStatic::Int(12)),
7470 min: Some(1.0),
7471 max: None,
7472 step: Some(1.0),
7473 enum_values: EMPTY_ENUM_VALUES,
7474 notes: None,
7475 },
7476 IndicatorParamInfo {
7477 key: "length2",
7478 label: "Length 2",
7479 kind: IndicatorParamKind::Int,
7480 required: false,
7481 default: Some(ParamValueStatic::Int(3)),
7482 min: Some(1.0),
7483 max: None,
7484 step: Some(1.0),
7485 enum_values: EMPTY_ENUM_VALUES,
7486 notes: None,
7487 },
7488 IndicatorParamInfo {
7489 key: "ob_level",
7490 label: "Overbought Level",
7491 kind: IndicatorParamKind::Int,
7492 required: false,
7493 default: Some(ParamValueStatic::Int(40)),
7494 min: Some(0.0),
7495 max: Some(100.0),
7496 step: Some(1.0),
7497 enum_values: EMPTY_ENUM_VALUES,
7498 notes: None,
7499 },
7500 IndicatorParamInfo {
7501 key: "os_level",
7502 label: "Oversold Level",
7503 kind: IndicatorParamKind::Int,
7504 required: false,
7505 default: Some(ParamValueStatic::Int(-40)),
7506 min: Some(-100.0),
7507 max: Some(0.0),
7508 step: Some(1.0),
7509 enum_values: EMPTY_ENUM_VALUES,
7510 notes: None,
7511 },
7512];
7513
7514const PARAM_ADAPTIVE_BANDPASS_TRIGGER_OSCILLATOR: &[IndicatorParamInfo] = &[
7515 IndicatorParamInfo {
7516 key: "delta",
7517 label: "Delta",
7518 kind: IndicatorParamKind::Float,
7519 required: false,
7520 default: Some(ParamValueStatic::Float(0.1)),
7521 min: Some(0.0000001),
7522 max: Some(0.9999999),
7523 step: Some(0.01),
7524 enum_values: EMPTY_ENUM_VALUES,
7525 notes: None,
7526 },
7527 IndicatorParamInfo {
7528 key: "alpha",
7529 label: "Alpha",
7530 kind: IndicatorParamKind::Float,
7531 required: false,
7532 default: Some(ParamValueStatic::Float(0.07)),
7533 min: Some(0.0000001),
7534 max: Some(0.9999999),
7535 step: Some(0.01),
7536 enum_values: EMPTY_ENUM_VALUES,
7537 notes: None,
7538 },
7539];
7540
7541const PARAM_DIDI_INDEX: &[IndicatorParamInfo] = &[
7542 IndicatorParamInfo {
7543 key: "short_length",
7544 label: "Short Length",
7545 kind: IndicatorParamKind::Int,
7546 required: false,
7547 default: Some(ParamValueStatic::Int(3)),
7548 min: Some(1.0),
7549 max: None,
7550 step: Some(1.0),
7551 enum_values: EMPTY_ENUM_VALUES,
7552 notes: None,
7553 },
7554 IndicatorParamInfo {
7555 key: "medium_length",
7556 label: "Medium Length",
7557 kind: IndicatorParamKind::Int,
7558 required: false,
7559 default: Some(ParamValueStatic::Int(8)),
7560 min: Some(1.0),
7561 max: None,
7562 step: Some(1.0),
7563 enum_values: EMPTY_ENUM_VALUES,
7564 notes: None,
7565 },
7566 IndicatorParamInfo {
7567 key: "long_length",
7568 label: "Long Length",
7569 kind: IndicatorParamKind::Int,
7570 required: false,
7571 default: Some(ParamValueStatic::Int(20)),
7572 min: Some(1.0),
7573 max: None,
7574 step: Some(1.0),
7575 enum_values: EMPTY_ENUM_VALUES,
7576 notes: None,
7577 },
7578];
7579
7580const PARAM_EHLERS_AUTOCORRELATION_PERIODOGRAM: &[IndicatorParamInfo] = &[
7581 IndicatorParamInfo {
7582 key: "min_period",
7583 label: "Min Period",
7584 kind: IndicatorParamKind::Int,
7585 required: false,
7586 default: Some(ParamValueStatic::Int(8)),
7587 min: Some(3.0),
7588 max: None,
7589 step: Some(1.0),
7590 enum_values: EMPTY_ENUM_VALUES,
7591 notes: None,
7592 },
7593 IndicatorParamInfo {
7594 key: "max_period",
7595 label: "Max Period",
7596 kind: IndicatorParamKind::Int,
7597 required: false,
7598 default: Some(ParamValueStatic::Int(48)),
7599 min: Some(4.0),
7600 max: None,
7601 step: Some(1.0),
7602 enum_values: EMPTY_ENUM_VALUES,
7603 notes: None,
7604 },
7605 IndicatorParamInfo {
7606 key: "avg_length",
7607 label: "Autocorrelation Length",
7608 kind: IndicatorParamKind::Int,
7609 required: false,
7610 default: Some(ParamValueStatic::Int(3)),
7611 min: Some(0.0),
7612 max: None,
7613 step: Some(1.0),
7614 enum_values: EMPTY_ENUM_VALUES,
7615 notes: None,
7616 },
7617 IndicatorParamInfo {
7618 key: "enhance",
7619 label: "Enhance Resolution",
7620 kind: IndicatorParamKind::Bool,
7621 required: false,
7622 default: Some(ParamValueStatic::Bool(true)),
7623 min: None,
7624 max: None,
7625 step: None,
7626 enum_values: ENUM_VALUES_TRUE_FALSE,
7627 notes: None,
7628 },
7629];
7630
7631const PARAM_KASE_PEAK_OSCILLATOR_WITH_DIVERGENCES: &[IndicatorParamInfo] = &[
7632 IndicatorParamInfo {
7633 key: "deviations",
7634 label: "Deviations",
7635 kind: IndicatorParamKind::Float,
7636 required: false,
7637 default: Some(ParamValueStatic::Float(2.0)),
7638 min: Some(0.0),
7639 max: None,
7640 step: None,
7641 enum_values: EMPTY_ENUM_VALUES,
7642 notes: None,
7643 },
7644 IndicatorParamInfo {
7645 key: "short_cycle",
7646 label: "Short Cycle",
7647 kind: IndicatorParamKind::Int,
7648 required: false,
7649 default: Some(ParamValueStatic::Int(8)),
7650 min: Some(1.0),
7651 max: None,
7652 step: Some(1.0),
7653 enum_values: EMPTY_ENUM_VALUES,
7654 notes: None,
7655 },
7656 IndicatorParamInfo {
7657 key: "long_cycle",
7658 label: "Long Cycle",
7659 kind: IndicatorParamKind::Int,
7660 required: false,
7661 default: Some(ParamValueStatic::Int(65)),
7662 min: Some(2.0),
7663 max: None,
7664 step: Some(1.0),
7665 enum_values: EMPTY_ENUM_VALUES,
7666 notes: None,
7667 },
7668 IndicatorParamInfo {
7669 key: "sensitivity",
7670 label: "Sensitivity",
7671 kind: IndicatorParamKind::Float,
7672 required: false,
7673 default: Some(ParamValueStatic::Float(40.0)),
7674 min: None,
7675 max: None,
7676 step: None,
7677 enum_values: EMPTY_ENUM_VALUES,
7678 notes: None,
7679 },
7680 IndicatorParamInfo {
7681 key: "all_peaks_mode",
7682 label: "All Peaks Mode",
7683 kind: IndicatorParamKind::Bool,
7684 required: false,
7685 default: Some(ParamValueStatic::Bool(true)),
7686 min: None,
7687 max: None,
7688 step: None,
7689 enum_values: ENUM_VALUES_TRUE_FALSE,
7690 notes: None,
7691 },
7692 IndicatorParamInfo {
7693 key: "lb_r",
7694 label: "Pivot Right",
7695 kind: IndicatorParamKind::Int,
7696 required: false,
7697 default: Some(ParamValueStatic::Int(5)),
7698 min: Some(1.0),
7699 max: None,
7700 step: Some(1.0),
7701 enum_values: EMPTY_ENUM_VALUES,
7702 notes: None,
7703 },
7704 IndicatorParamInfo {
7705 key: "lb_l",
7706 label: "Pivot Left",
7707 kind: IndicatorParamKind::Int,
7708 required: false,
7709 default: Some(ParamValueStatic::Int(5)),
7710 min: Some(1.0),
7711 max: None,
7712 step: Some(1.0),
7713 enum_values: EMPTY_ENUM_VALUES,
7714 notes: None,
7715 },
7716 IndicatorParamInfo {
7717 key: "range_upper",
7718 label: "Range Upper",
7719 kind: IndicatorParamKind::Int,
7720 required: false,
7721 default: Some(ParamValueStatic::Int(60)),
7722 min: Some(1.0),
7723 max: None,
7724 step: Some(1.0),
7725 enum_values: EMPTY_ENUM_VALUES,
7726 notes: None,
7727 },
7728 IndicatorParamInfo {
7729 key: "range_lower",
7730 label: "Range Lower",
7731 kind: IndicatorParamKind::Int,
7732 required: false,
7733 default: Some(ParamValueStatic::Int(5)),
7734 min: Some(1.0),
7735 max: None,
7736 step: Some(1.0),
7737 enum_values: EMPTY_ENUM_VALUES,
7738 notes: None,
7739 },
7740 IndicatorParamInfo {
7741 key: "plot_bull",
7742 label: "Plot Bull",
7743 kind: IndicatorParamKind::Bool,
7744 required: false,
7745 default: Some(ParamValueStatic::Bool(true)),
7746 min: None,
7747 max: None,
7748 step: None,
7749 enum_values: ENUM_VALUES_TRUE_FALSE,
7750 notes: None,
7751 },
7752 IndicatorParamInfo {
7753 key: "plot_hidden_bull",
7754 label: "Plot Hidden Bull",
7755 kind: IndicatorParamKind::Bool,
7756 required: false,
7757 default: Some(ParamValueStatic::Bool(false)),
7758 min: None,
7759 max: None,
7760 step: None,
7761 enum_values: ENUM_VALUES_TRUE_FALSE,
7762 notes: None,
7763 },
7764 IndicatorParamInfo {
7765 key: "plot_bear",
7766 label: "Plot Bear",
7767 kind: IndicatorParamKind::Bool,
7768 required: false,
7769 default: Some(ParamValueStatic::Bool(true)),
7770 min: None,
7771 max: None,
7772 step: None,
7773 enum_values: ENUM_VALUES_TRUE_FALSE,
7774 notes: None,
7775 },
7776 IndicatorParamInfo {
7777 key: "plot_hidden_bear",
7778 label: "Plot Hidden Bear",
7779 kind: IndicatorParamKind::Bool,
7780 required: false,
7781 default: Some(ParamValueStatic::Bool(false)),
7782 min: None,
7783 max: None,
7784 step: None,
7785 enum_values: ENUM_VALUES_TRUE_FALSE,
7786 notes: None,
7787 },
7788];
7789
7790const PARAM_INTRADAY_MOMENTUM_INDEX: &[IndicatorParamInfo] = &[
7791 IndicatorParamInfo {
7792 key: "length",
7793 label: "IMI Length",
7794 kind: IndicatorParamKind::Int,
7795 required: false,
7796 default: Some(ParamValueStatic::Int(14)),
7797 min: Some(1.0),
7798 max: None,
7799 step: Some(1.0),
7800 enum_values: EMPTY_ENUM_VALUES,
7801 notes: None,
7802 },
7803 IndicatorParamInfo {
7804 key: "length_ma",
7805 label: "Signal Length",
7806 kind: IndicatorParamKind::Int,
7807 required: false,
7808 default: Some(ParamValueStatic::Int(6)),
7809 min: Some(1.0),
7810 max: None,
7811 step: Some(1.0),
7812 enum_values: EMPTY_ENUM_VALUES,
7813 notes: None,
7814 },
7815 IndicatorParamInfo {
7816 key: "mult",
7817 label: "Band StdDev Mult",
7818 kind: IndicatorParamKind::Float,
7819 required: false,
7820 default: Some(ParamValueStatic::Float(2.0)),
7821 min: Some(0.0),
7822 max: None,
7823 step: None,
7824 enum_values: EMPTY_ENUM_VALUES,
7825 notes: None,
7826 },
7827 IndicatorParamInfo {
7828 key: "length_bb",
7829 label: "Band Length",
7830 kind: IndicatorParamKind::Int,
7831 required: false,
7832 default: Some(ParamValueStatic::Int(20)),
7833 min: Some(1.0),
7834 max: None,
7835 step: Some(1.0),
7836 enum_values: EMPTY_ENUM_VALUES,
7837 notes: None,
7838 },
7839 IndicatorParamInfo {
7840 key: "apply_smoothing",
7841 label: "Apply Smoothing",
7842 kind: IndicatorParamKind::Bool,
7843 required: false,
7844 default: Some(ParamValueStatic::Bool(false)),
7845 min: None,
7846 max: None,
7847 step: None,
7848 enum_values: ENUM_VALUES_TRUE_FALSE,
7849 notes: None,
7850 },
7851 IndicatorParamInfo {
7852 key: "low_band",
7853 label: "Smoothing Lower Band",
7854 kind: IndicatorParamKind::Int,
7855 required: false,
7856 default: Some(ParamValueStatic::Int(10)),
7857 min: Some(1.0),
7858 max: None,
7859 step: Some(1.0),
7860 enum_values: EMPTY_ENUM_VALUES,
7861 notes: None,
7862 },
7863];
7864
7865const PARAM_DEMAND_INDEX: &[IndicatorParamInfo] = &[
7866 IndicatorParamInfo {
7867 key: "len_bs",
7868 label: "Buy/Sell Power Length",
7869 kind: IndicatorParamKind::Int,
7870 required: false,
7871 default: Some(ParamValueStatic::Int(19)),
7872 min: Some(1.0),
7873 max: None,
7874 step: Some(1.0),
7875 enum_values: EMPTY_ENUM_VALUES,
7876 notes: None,
7877 },
7878 IndicatorParamInfo {
7879 key: "len_bs_ma",
7880 label: "Buy/Sell Power MA Length",
7881 kind: IndicatorParamKind::Int,
7882 required: false,
7883 default: Some(ParamValueStatic::Int(19)),
7884 min: Some(1.0),
7885 max: None,
7886 step: Some(1.0),
7887 enum_values: EMPTY_ENUM_VALUES,
7888 notes: None,
7889 },
7890 IndicatorParamInfo {
7891 key: "len_di_ma",
7892 label: "Demand Index SMA Length",
7893 kind: IndicatorParamKind::Int,
7894 required: false,
7895 default: Some(ParamValueStatic::Int(19)),
7896 min: Some(1.0),
7897 max: None,
7898 step: Some(1.0),
7899 enum_values: EMPTY_ENUM_VALUES,
7900 notes: None,
7901 },
7902 IndicatorParamInfo {
7903 key: "ma_type",
7904 label: "MA Type",
7905 kind: IndicatorParamKind::EnumString,
7906 required: false,
7907 default: Some(ParamValueStatic::EnumString("ema")),
7908 min: None,
7909 max: None,
7910 step: None,
7911 enum_values: ENUM_VALUES_DEMAND_INDEX_MA_TYPE,
7912 notes: None,
7913 },
7914];
7915
7916const PARAM_VWAP_ZSCORE_WITH_SIGNALS: &[IndicatorParamInfo] = &[
7917 IndicatorParamInfo {
7918 key: "length",
7919 label: "Length",
7920 kind: IndicatorParamKind::Int,
7921 required: false,
7922 default: Some(ParamValueStatic::Int(20)),
7923 min: Some(1.0),
7924 max: None,
7925 step: Some(1.0),
7926 enum_values: EMPTY_ENUM_VALUES,
7927 notes: None,
7928 },
7929 IndicatorParamInfo {
7930 key: "upper_bottom",
7931 label: "Upper Threshold",
7932 kind: IndicatorParamKind::Float,
7933 required: false,
7934 default: Some(ParamValueStatic::Float(2.5)),
7935 min: None,
7936 max: None,
7937 step: None,
7938 enum_values: EMPTY_ENUM_VALUES,
7939 notes: None,
7940 },
7941 IndicatorParamInfo {
7942 key: "lower_bottom",
7943 label: "Lower Threshold",
7944 kind: IndicatorParamKind::Float,
7945 required: false,
7946 default: Some(ParamValueStatic::Float(-2.5)),
7947 min: None,
7948 max: None,
7949 step: None,
7950 enum_values: EMPTY_ENUM_VALUES,
7951 notes: None,
7952 },
7953];
7954
7955const PARAM_VI: &[IndicatorParamInfo] = &[IndicatorParamInfo {
7956 key: "period",
7957 label: "Period",
7958 kind: IndicatorParamKind::Int,
7959 required: false,
7960 default: Some(ParamValueStatic::Int(14)),
7961 min: Some(1.0),
7962 max: None,
7963 step: Some(1.0),
7964 enum_values: EMPTY_ENUM_VALUES,
7965 notes: None,
7966}];
7967
7968const PARAM_KDJ: &[IndicatorParamInfo] = &[
7969 IndicatorParamInfo {
7970 key: "fast_k_period",
7971 label: "Fast K Period",
7972 kind: IndicatorParamKind::Int,
7973 required: false,
7974 default: Some(ParamValueStatic::Int(9)),
7975 min: Some(1.0),
7976 max: None,
7977 step: Some(1.0),
7978 enum_values: EMPTY_ENUM_VALUES,
7979 notes: None,
7980 },
7981 IndicatorParamInfo {
7982 key: "slow_k_period",
7983 label: "Slow K Period",
7984 kind: IndicatorParamKind::Int,
7985 required: false,
7986 default: Some(ParamValueStatic::Int(3)),
7987 min: Some(1.0),
7988 max: None,
7989 step: Some(1.0),
7990 enum_values: EMPTY_ENUM_VALUES,
7991 notes: None,
7992 },
7993 IndicatorParamInfo {
7994 key: "slow_k_ma_type",
7995 label: "Slow K MA Type",
7996 kind: IndicatorParamKind::EnumString,
7997 required: false,
7998 default: Some(ParamValueStatic::EnumString("sma")),
7999 min: None,
8000 max: None,
8001 step: None,
8002 enum_values: EMPTY_ENUM_VALUES,
8003 notes: None,
8004 },
8005 IndicatorParamInfo {
8006 key: "slow_d_period",
8007 label: "Slow D Period",
8008 kind: IndicatorParamKind::Int,
8009 required: false,
8010 default: Some(ParamValueStatic::Int(3)),
8011 min: Some(1.0),
8012 max: None,
8013 step: Some(1.0),
8014 enum_values: EMPTY_ENUM_VALUES,
8015 notes: None,
8016 },
8017 IndicatorParamInfo {
8018 key: "slow_d_ma_type",
8019 label: "Slow D MA Type",
8020 kind: IndicatorParamKind::EnumString,
8021 required: false,
8022 default: Some(ParamValueStatic::EnumString("sma")),
8023 min: None,
8024 max: None,
8025 step: None,
8026 enum_values: EMPTY_ENUM_VALUES,
8027 notes: None,
8028 },
8029];
8030
8031const PARAM_ACOSC: &[IndicatorParamInfo] = PARAM_NONE;
8032
8033const PARAM_ALLIGATOR: &[IndicatorParamInfo] = &[
8034 IndicatorParamInfo {
8035 key: "jaw_period",
8036 label: "Jaw Period",
8037 kind: IndicatorParamKind::Int,
8038 required: false,
8039 default: Some(ParamValueStatic::Int(13)),
8040 min: Some(1.0),
8041 max: None,
8042 step: Some(1.0),
8043 enum_values: EMPTY_ENUM_VALUES,
8044 notes: None,
8045 },
8046 IndicatorParamInfo {
8047 key: "jaw_offset",
8048 label: "Jaw Offset",
8049 kind: IndicatorParamKind::Int,
8050 required: false,
8051 default: Some(ParamValueStatic::Int(8)),
8052 min: Some(0.0),
8053 max: None,
8054 step: Some(1.0),
8055 enum_values: EMPTY_ENUM_VALUES,
8056 notes: None,
8057 },
8058 IndicatorParamInfo {
8059 key: "teeth_period",
8060 label: "Teeth Period",
8061 kind: IndicatorParamKind::Int,
8062 required: false,
8063 default: Some(ParamValueStatic::Int(8)),
8064 min: Some(1.0),
8065 max: None,
8066 step: Some(1.0),
8067 enum_values: EMPTY_ENUM_VALUES,
8068 notes: None,
8069 },
8070 IndicatorParamInfo {
8071 key: "teeth_offset",
8072 label: "Teeth Offset",
8073 kind: IndicatorParamKind::Int,
8074 required: false,
8075 default: Some(ParamValueStatic::Int(5)),
8076 min: Some(0.0),
8077 max: None,
8078 step: Some(1.0),
8079 enum_values: EMPTY_ENUM_VALUES,
8080 notes: None,
8081 },
8082 IndicatorParamInfo {
8083 key: "lips_period",
8084 label: "Lips Period",
8085 kind: IndicatorParamKind::Int,
8086 required: false,
8087 default: Some(ParamValueStatic::Int(5)),
8088 min: Some(1.0),
8089 max: None,
8090 step: Some(1.0),
8091 enum_values: EMPTY_ENUM_VALUES,
8092 notes: None,
8093 },
8094 IndicatorParamInfo {
8095 key: "lips_offset",
8096 label: "Lips Offset",
8097 kind: IndicatorParamKind::Int,
8098 required: false,
8099 default: Some(ParamValueStatic::Int(3)),
8100 min: Some(0.0),
8101 max: None,
8102 step: Some(1.0),
8103 enum_values: EMPTY_ENUM_VALUES,
8104 notes: None,
8105 },
8106];
8107
8108const PARAM_ALPHATREND: &[IndicatorParamInfo] = &[
8109 IndicatorParamInfo {
8110 key: "coeff",
8111 label: "Coeff",
8112 kind: IndicatorParamKind::Float,
8113 required: false,
8114 default: Some(ParamValueStatic::Float(1.0)),
8115 min: Some(0.0),
8116 max: None,
8117 step: None,
8118 enum_values: EMPTY_ENUM_VALUES,
8119 notes: None,
8120 },
8121 IndicatorParamInfo {
8122 key: "period",
8123 label: "Period",
8124 kind: IndicatorParamKind::Int,
8125 required: false,
8126 default: Some(ParamValueStatic::Int(14)),
8127 min: Some(1.0),
8128 max: None,
8129 step: Some(1.0),
8130 enum_values: EMPTY_ENUM_VALUES,
8131 notes: None,
8132 },
8133 IndicatorParamInfo {
8134 key: "no_volume",
8135 label: "No Volume",
8136 kind: IndicatorParamKind::Bool,
8137 required: false,
8138 default: Some(ParamValueStatic::Bool(false)),
8139 min: None,
8140 max: None,
8141 step: None,
8142 enum_values: ENUM_VALUES_TRUE_FALSE,
8143 notes: None,
8144 },
8145];
8146
8147const PARAM_ASO: &[IndicatorParamInfo] = &[
8148 IndicatorParamInfo {
8149 key: "period",
8150 label: "Period",
8151 kind: IndicatorParamKind::Int,
8152 required: false,
8153 default: Some(ParamValueStatic::Int(10)),
8154 min: Some(1.0),
8155 max: None,
8156 step: Some(1.0),
8157 enum_values: EMPTY_ENUM_VALUES,
8158 notes: None,
8159 },
8160 IndicatorParamInfo {
8161 key: "mode",
8162 label: "Mode",
8163 kind: IndicatorParamKind::Int,
8164 required: false,
8165 default: Some(ParamValueStatic::Int(0)),
8166 min: Some(0.0),
8167 max: None,
8168 step: Some(1.0),
8169 enum_values: EMPTY_ENUM_VALUES,
8170 notes: None,
8171 },
8172];
8173
8174const PARAM_AVSL: &[IndicatorParamInfo] = &[
8175 IndicatorParamInfo {
8176 key: "fast_period",
8177 label: "Fast Period",
8178 kind: IndicatorParamKind::Int,
8179 required: false,
8180 default: Some(ParamValueStatic::Int(12)),
8181 min: Some(1.0),
8182 max: None,
8183 step: Some(1.0),
8184 enum_values: EMPTY_ENUM_VALUES,
8185 notes: None,
8186 },
8187 IndicatorParamInfo {
8188 key: "slow_period",
8189 label: "Slow Period",
8190 kind: IndicatorParamKind::Int,
8191 required: false,
8192 default: Some(ParamValueStatic::Int(26)),
8193 min: Some(1.0),
8194 max: None,
8195 step: Some(1.0),
8196 enum_values: EMPTY_ENUM_VALUES,
8197 notes: None,
8198 },
8199 IndicatorParamInfo {
8200 key: "multiplier",
8201 label: "Multiplier",
8202 kind: IndicatorParamKind::Float,
8203 required: false,
8204 default: Some(ParamValueStatic::Float(2.0)),
8205 min: Some(0.0),
8206 max: None,
8207 step: Some(0.1),
8208 enum_values: EMPTY_ENUM_VALUES,
8209 notes: None,
8210 },
8211];
8212
8213const PARAM_BANDPASS: &[IndicatorParamInfo] = &[
8214 IndicatorParamInfo {
8215 key: "period",
8216 label: "Period",
8217 kind: IndicatorParamKind::Int,
8218 required: false,
8219 default: Some(ParamValueStatic::Int(20)),
8220 min: Some(1.0),
8221 max: None,
8222 step: Some(1.0),
8223 enum_values: EMPTY_ENUM_VALUES,
8224 notes: None,
8225 },
8226 IndicatorParamInfo {
8227 key: "bandwidth",
8228 label: "Bandwidth",
8229 kind: IndicatorParamKind::Float,
8230 required: false,
8231 default: Some(ParamValueStatic::Float(0.3)),
8232 min: Some(0.0),
8233 max: None,
8234 step: None,
8235 enum_values: EMPTY_ENUM_VALUES,
8236 notes: None,
8237 },
8238];
8239
8240const PARAM_CHANDE: &[IndicatorParamInfo] = &[
8241 IndicatorParamInfo {
8242 key: "period",
8243 label: "Period",
8244 kind: IndicatorParamKind::Int,
8245 required: false,
8246 default: Some(ParamValueStatic::Int(22)),
8247 min: Some(1.0),
8248 max: None,
8249 step: Some(1.0),
8250 enum_values: EMPTY_ENUM_VALUES,
8251 notes: None,
8252 },
8253 IndicatorParamInfo {
8254 key: "mult",
8255 label: "Multiplier",
8256 kind: IndicatorParamKind::Float,
8257 required: false,
8258 default: Some(ParamValueStatic::Float(3.0)),
8259 min: Some(0.0),
8260 max: None,
8261 step: Some(0.1),
8262 enum_values: EMPTY_ENUM_VALUES,
8263 notes: None,
8264 },
8265 IndicatorParamInfo {
8266 key: "direction",
8267 label: "Direction",
8268 kind: IndicatorParamKind::EnumString,
8269 required: false,
8270 default: Some(ParamValueStatic::EnumString("long")),
8271 min: None,
8272 max: None,
8273 step: None,
8274 enum_values: &["long", "short"],
8275 notes: None,
8276 },
8277];
8278
8279const PARAM_CHANDELIER_EXIT: &[IndicatorParamInfo] = &[
8280 IndicatorParamInfo {
8281 key: "period",
8282 label: "Period",
8283 kind: IndicatorParamKind::Int,
8284 required: false,
8285 default: Some(ParamValueStatic::Int(22)),
8286 min: Some(1.0),
8287 max: None,
8288 step: Some(1.0),
8289 enum_values: EMPTY_ENUM_VALUES,
8290 notes: None,
8291 },
8292 IndicatorParamInfo {
8293 key: "mult",
8294 label: "Multiplier",
8295 kind: IndicatorParamKind::Float,
8296 required: false,
8297 default: Some(ParamValueStatic::Float(3.0)),
8298 min: Some(0.0),
8299 max: None,
8300 step: None,
8301 enum_values: EMPTY_ENUM_VALUES,
8302 notes: None,
8303 },
8304 IndicatorParamInfo {
8305 key: "use_close",
8306 label: "Use Close",
8307 kind: IndicatorParamKind::Bool,
8308 required: false,
8309 default: Some(ParamValueStatic::Bool(true)),
8310 min: None,
8311 max: None,
8312 step: None,
8313 enum_values: ENUM_VALUES_TRUE_FALSE,
8314 notes: None,
8315 },
8316];
8317
8318const PARAM_CKSP: &[IndicatorParamInfo] = &[
8319 IndicatorParamInfo {
8320 key: "p",
8321 label: "P",
8322 kind: IndicatorParamKind::Int,
8323 required: false,
8324 default: Some(ParamValueStatic::Int(10)),
8325 min: Some(1.0),
8326 max: None,
8327 step: Some(1.0),
8328 enum_values: EMPTY_ENUM_VALUES,
8329 notes: None,
8330 },
8331 IndicatorParamInfo {
8332 key: "x",
8333 label: "X",
8334 kind: IndicatorParamKind::Float,
8335 required: false,
8336 default: Some(ParamValueStatic::Float(1.0)),
8337 min: Some(0.0),
8338 max: None,
8339 step: None,
8340 enum_values: EMPTY_ENUM_VALUES,
8341 notes: None,
8342 },
8343 IndicatorParamInfo {
8344 key: "q",
8345 label: "Q",
8346 kind: IndicatorParamKind::Int,
8347 required: false,
8348 default: Some(ParamValueStatic::Int(9)),
8349 min: Some(1.0),
8350 max: None,
8351 step: Some(1.0),
8352 enum_values: EMPTY_ENUM_VALUES,
8353 notes: None,
8354 },
8355];
8356
8357const PARAM_CORRELATION_CYCLE: &[IndicatorParamInfo] = &[
8358 IndicatorParamInfo {
8359 key: "period",
8360 label: "Period",
8361 kind: IndicatorParamKind::Int,
8362 required: false,
8363 default: Some(ParamValueStatic::Int(20)),
8364 min: Some(1.0),
8365 max: None,
8366 step: Some(1.0),
8367 enum_values: EMPTY_ENUM_VALUES,
8368 notes: None,
8369 },
8370 IndicatorParamInfo {
8371 key: "threshold",
8372 label: "Threshold",
8373 kind: IndicatorParamKind::Float,
8374 required: false,
8375 default: Some(ParamValueStatic::Float(9.0)),
8376 min: None,
8377 max: None,
8378 step: None,
8379 enum_values: EMPTY_ENUM_VALUES,
8380 notes: None,
8381 },
8382];
8383
8384const PARAM_CORREL_HL: &[IndicatorParamInfo] = &[IndicatorParamInfo {
8385 key: "period",
8386 label: "Period",
8387 kind: IndicatorParamKind::Int,
8388 required: false,
8389 default: Some(ParamValueStatic::Int(9)),
8390 min: Some(1.0),
8391 max: None,
8392 step: Some(1.0),
8393 enum_values: EMPTY_ENUM_VALUES,
8394 notes: None,
8395}];
8396
8397const PARAM_DAMIANI_VOLATMETER: &[IndicatorParamInfo] = &[
8398 IndicatorParamInfo {
8399 key: "vis_atr",
8400 label: "Vis ATR",
8401 kind: IndicatorParamKind::Int,
8402 required: false,
8403 default: Some(ParamValueStatic::Int(13)),
8404 min: Some(1.0),
8405 max: None,
8406 step: Some(1.0),
8407 enum_values: EMPTY_ENUM_VALUES,
8408 notes: None,
8409 },
8410 IndicatorParamInfo {
8411 key: "vis_std",
8412 label: "Vis STD",
8413 kind: IndicatorParamKind::Int,
8414 required: false,
8415 default: Some(ParamValueStatic::Int(20)),
8416 min: Some(1.0),
8417 max: None,
8418 step: Some(1.0),
8419 enum_values: EMPTY_ENUM_VALUES,
8420 notes: None,
8421 },
8422 IndicatorParamInfo {
8423 key: "sed_atr",
8424 label: "Sed ATR",
8425 kind: IndicatorParamKind::Int,
8426 required: false,
8427 default: Some(ParamValueStatic::Int(40)),
8428 min: Some(1.0),
8429 max: None,
8430 step: Some(1.0),
8431 enum_values: EMPTY_ENUM_VALUES,
8432 notes: None,
8433 },
8434 IndicatorParamInfo {
8435 key: "sed_std",
8436 label: "Sed STD",
8437 kind: IndicatorParamKind::Int,
8438 required: false,
8439 default: Some(ParamValueStatic::Int(100)),
8440 min: Some(1.0),
8441 max: None,
8442 step: Some(1.0),
8443 enum_values: EMPTY_ENUM_VALUES,
8444 notes: None,
8445 },
8446 IndicatorParamInfo {
8447 key: "threshold",
8448 label: "Threshold",
8449 kind: IndicatorParamKind::Float,
8450 required: false,
8451 default: Some(ParamValueStatic::Float(1.4)),
8452 min: None,
8453 max: None,
8454 step: None,
8455 enum_values: EMPTY_ENUM_VALUES,
8456 notes: None,
8457 },
8458];
8459
8460const PARAM_DVDIQQE: &[IndicatorParamInfo] = &[
8461 IndicatorParamInfo {
8462 key: "period",
8463 label: "Period",
8464 kind: IndicatorParamKind::Int,
8465 required: false,
8466 default: Some(ParamValueStatic::Int(13)),
8467 min: Some(1.0),
8468 max: None,
8469 step: Some(1.0),
8470 enum_values: EMPTY_ENUM_VALUES,
8471 notes: None,
8472 },
8473 IndicatorParamInfo {
8474 key: "smoothing_period",
8475 label: "Smoothing Period",
8476 kind: IndicatorParamKind::Int,
8477 required: false,
8478 default: Some(ParamValueStatic::Int(6)),
8479 min: Some(1.0),
8480 max: None,
8481 step: Some(1.0),
8482 enum_values: EMPTY_ENUM_VALUES,
8483 notes: None,
8484 },
8485 IndicatorParamInfo {
8486 key: "fast_multiplier",
8487 label: "Fast Multiplier",
8488 kind: IndicatorParamKind::Float,
8489 required: false,
8490 default: Some(ParamValueStatic::Float(2.618)),
8491 min: Some(0.0),
8492 max: None,
8493 step: None,
8494 enum_values: EMPTY_ENUM_VALUES,
8495 notes: None,
8496 },
8497 IndicatorParamInfo {
8498 key: "slow_multiplier",
8499 label: "Slow Multiplier",
8500 kind: IndicatorParamKind::Float,
8501 required: false,
8502 default: Some(ParamValueStatic::Float(4.236)),
8503 min: Some(0.0),
8504 max: None,
8505 step: None,
8506 enum_values: EMPTY_ENUM_VALUES,
8507 notes: None,
8508 },
8509 IndicatorParamInfo {
8510 key: "volume_type",
8511 label: "Volume Type",
8512 kind: IndicatorParamKind::EnumString,
8513 required: false,
8514 default: Some(ParamValueStatic::EnumString("default")),
8515 min: None,
8516 max: None,
8517 step: None,
8518 enum_values: EMPTY_ENUM_VALUES,
8519 notes: None,
8520 },
8521 IndicatorParamInfo {
8522 key: "center_type",
8523 label: "Center Type",
8524 kind: IndicatorParamKind::EnumString,
8525 required: false,
8526 default: Some(ParamValueStatic::EnumString("dynamic")),
8527 min: None,
8528 max: None,
8529 step: None,
8530 enum_values: EMPTY_ENUM_VALUES,
8531 notes: None,
8532 },
8533 IndicatorParamInfo {
8534 key: "tick_size",
8535 label: "Tick Size",
8536 kind: IndicatorParamKind::Float,
8537 required: false,
8538 default: Some(ParamValueStatic::Float(0.01)),
8539 min: Some(0.0),
8540 max: None,
8541 step: None,
8542 enum_values: EMPTY_ENUM_VALUES,
8543 notes: None,
8544 },
8545];
8546
8547const PARAM_EMD: &[IndicatorParamInfo] = &[
8548 IndicatorParamInfo {
8549 key: "period",
8550 label: "Period",
8551 kind: IndicatorParamKind::Int,
8552 required: false,
8553 default: Some(ParamValueStatic::Int(20)),
8554 min: Some(1.0),
8555 max: None,
8556 step: Some(1.0),
8557 enum_values: EMPTY_ENUM_VALUES,
8558 notes: None,
8559 },
8560 IndicatorParamInfo {
8561 key: "delta",
8562 label: "Delta",
8563 kind: IndicatorParamKind::Float,
8564 required: false,
8565 default: Some(ParamValueStatic::Float(0.5)),
8566 min: Some(0.0),
8567 max: None,
8568 step: None,
8569 enum_values: EMPTY_ENUM_VALUES,
8570 notes: None,
8571 },
8572 IndicatorParamInfo {
8573 key: "fraction",
8574 label: "Fraction",
8575 kind: IndicatorParamKind::Float,
8576 required: false,
8577 default: Some(ParamValueStatic::Float(0.1)),
8578 min: Some(0.0),
8579 max: None,
8580 step: None,
8581 enum_values: EMPTY_ENUM_VALUES,
8582 notes: None,
8583 },
8584];
8585
8586const PARAM_ERI: &[IndicatorParamInfo] = &[
8587 IndicatorParamInfo {
8588 key: "period",
8589 label: "Period",
8590 kind: IndicatorParamKind::Int,
8591 required: false,
8592 default: Some(ParamValueStatic::Int(13)),
8593 min: Some(1.0),
8594 max: None,
8595 step: Some(1.0),
8596 enum_values: EMPTY_ENUM_VALUES,
8597 notes: None,
8598 },
8599 IndicatorParamInfo {
8600 key: "ma_type",
8601 label: "MA Type",
8602 kind: IndicatorParamKind::EnumString,
8603 required: false,
8604 default: Some(ParamValueStatic::EnumString("ema")),
8605 min: None,
8606 max: None,
8607 step: None,
8608 enum_values: EMPTY_ENUM_VALUES,
8609 notes: None,
8610 },
8611];
8612
8613const PARAM_FISHER: &[IndicatorParamInfo] = &[IndicatorParamInfo {
8614 key: "period",
8615 label: "Period",
8616 kind: IndicatorParamKind::Int,
8617 required: false,
8618 default: Some(ParamValueStatic::Int(9)),
8619 min: Some(1.0),
8620 max: None,
8621 step: Some(1.0),
8622 enum_values: EMPTY_ENUM_VALUES,
8623 notes: None,
8624}];
8625
8626const PARAM_FVG_TRAILING_STOP: &[IndicatorParamInfo] = &[
8627 IndicatorParamInfo {
8628 key: "unmitigated_fvg_lookback",
8629 label: "FVG Lookback",
8630 kind: IndicatorParamKind::Int,
8631 required: false,
8632 default: Some(ParamValueStatic::Int(5)),
8633 min: Some(1.0),
8634 max: None,
8635 step: Some(1.0),
8636 enum_values: EMPTY_ENUM_VALUES,
8637 notes: None,
8638 },
8639 IndicatorParamInfo {
8640 key: "smoothing_length",
8641 label: "Smoothing Length",
8642 kind: IndicatorParamKind::Int,
8643 required: false,
8644 default: Some(ParamValueStatic::Int(9)),
8645 min: Some(1.0),
8646 max: None,
8647 step: Some(1.0),
8648 enum_values: EMPTY_ENUM_VALUES,
8649 notes: None,
8650 },
8651 IndicatorParamInfo {
8652 key: "reset_on_cross",
8653 label: "Reset On Cross",
8654 kind: IndicatorParamKind::Bool,
8655 required: false,
8656 default: Some(ParamValueStatic::Bool(false)),
8657 min: None,
8658 max: None,
8659 step: None,
8660 enum_values: ENUM_VALUES_TRUE_FALSE,
8661 notes: None,
8662 },
8663];
8664
8665const PARAM_GATOROSC: &[IndicatorParamInfo] = &[
8666 IndicatorParamInfo {
8667 key: "jaws_length",
8668 label: "Jaws Length",
8669 kind: IndicatorParamKind::Int,
8670 required: false,
8671 default: Some(ParamValueStatic::Int(13)),
8672 min: Some(1.0),
8673 max: None,
8674 step: Some(1.0),
8675 enum_values: EMPTY_ENUM_VALUES,
8676 notes: None,
8677 },
8678 IndicatorParamInfo {
8679 key: "jaws_shift",
8680 label: "Jaws Shift",
8681 kind: IndicatorParamKind::Int,
8682 required: false,
8683 default: Some(ParamValueStatic::Int(8)),
8684 min: Some(0.0),
8685 max: None,
8686 step: Some(1.0),
8687 enum_values: EMPTY_ENUM_VALUES,
8688 notes: None,
8689 },
8690 IndicatorParamInfo {
8691 key: "teeth_length",
8692 label: "Teeth Length",
8693 kind: IndicatorParamKind::Int,
8694 required: false,
8695 default: Some(ParamValueStatic::Int(8)),
8696 min: Some(1.0),
8697 max: None,
8698 step: Some(1.0),
8699 enum_values: EMPTY_ENUM_VALUES,
8700 notes: None,
8701 },
8702 IndicatorParamInfo {
8703 key: "teeth_shift",
8704 label: "Teeth Shift",
8705 kind: IndicatorParamKind::Int,
8706 required: false,
8707 default: Some(ParamValueStatic::Int(5)),
8708 min: Some(0.0),
8709 max: None,
8710 step: Some(1.0),
8711 enum_values: EMPTY_ENUM_VALUES,
8712 notes: None,
8713 },
8714 IndicatorParamInfo {
8715 key: "lips_length",
8716 label: "Lips Length",
8717 kind: IndicatorParamKind::Int,
8718 required: false,
8719 default: Some(ParamValueStatic::Int(5)),
8720 min: Some(1.0),
8721 max: None,
8722 step: Some(1.0),
8723 enum_values: EMPTY_ENUM_VALUES,
8724 notes: None,
8725 },
8726 IndicatorParamInfo {
8727 key: "lips_shift",
8728 label: "Lips Shift",
8729 kind: IndicatorParamKind::Int,
8730 required: false,
8731 default: Some(ParamValueStatic::Int(3)),
8732 min: Some(0.0),
8733 max: None,
8734 step: Some(1.0),
8735 enum_values: EMPTY_ENUM_VALUES,
8736 notes: None,
8737 },
8738];
8739
8740const PARAM_HALFTREND: &[IndicatorParamInfo] = &[
8741 IndicatorParamInfo {
8742 key: "amplitude",
8743 label: "Amplitude",
8744 kind: IndicatorParamKind::Int,
8745 required: false,
8746 default: Some(ParamValueStatic::Int(2)),
8747 min: Some(1.0),
8748 max: None,
8749 step: Some(1.0),
8750 enum_values: EMPTY_ENUM_VALUES,
8751 notes: None,
8752 },
8753 IndicatorParamInfo {
8754 key: "channel_deviation",
8755 label: "Channel Deviation",
8756 kind: IndicatorParamKind::Float,
8757 required: false,
8758 default: Some(ParamValueStatic::Float(2.0)),
8759 min: Some(0.0),
8760 max: None,
8761 step: None,
8762 enum_values: EMPTY_ENUM_VALUES,
8763 notes: None,
8764 },
8765 IndicatorParamInfo {
8766 key: "atr_period",
8767 label: "ATR Period",
8768 kind: IndicatorParamKind::Int,
8769 required: false,
8770 default: Some(ParamValueStatic::Int(100)),
8771 min: Some(1.0),
8772 max: None,
8773 step: Some(1.0),
8774 enum_values: EMPTY_ENUM_VALUES,
8775 notes: None,
8776 },
8777];
8778
8779const PARAM_SAFEZONESTOP: &[IndicatorParamInfo] = &[
8780 IndicatorParamInfo {
8781 key: "period",
8782 label: "Period",
8783 kind: IndicatorParamKind::Int,
8784 required: false,
8785 default: Some(ParamValueStatic::Int(22)),
8786 min: Some(1.0),
8787 max: None,
8788 step: Some(1.0),
8789 enum_values: EMPTY_ENUM_VALUES,
8790 notes: None,
8791 },
8792 IndicatorParamInfo {
8793 key: "mult",
8794 label: "Multiplier",
8795 kind: IndicatorParamKind::Float,
8796 required: false,
8797 default: Some(ParamValueStatic::Float(2.5)),
8798 min: Some(0.0),
8799 max: None,
8800 step: None,
8801 enum_values: EMPTY_ENUM_VALUES,
8802 notes: None,
8803 },
8804 IndicatorParamInfo {
8805 key: "max_lookback",
8806 label: "Max Lookback",
8807 kind: IndicatorParamKind::Int,
8808 required: false,
8809 default: Some(ParamValueStatic::Int(3)),
8810 min: Some(1.0),
8811 max: None,
8812 step: Some(1.0),
8813 enum_values: EMPTY_ENUM_VALUES,
8814 notes: None,
8815 },
8816 IndicatorParamInfo {
8817 key: "direction",
8818 label: "Direction",
8819 kind: IndicatorParamKind::EnumString,
8820 required: false,
8821 default: Some(ParamValueStatic::EnumString("long")),
8822 min: None,
8823 max: None,
8824 step: None,
8825 enum_values: EMPTY_ENUM_VALUES,
8826 notes: None,
8827 },
8828];
8829
8830const PARAM_DEVSTOP: &[IndicatorParamInfo] = &[
8831 IndicatorParamInfo {
8832 key: "period",
8833 label: "Period",
8834 kind: IndicatorParamKind::Int,
8835 required: false,
8836 default: Some(ParamValueStatic::Int(20)),
8837 min: Some(1.0),
8838 max: None,
8839 step: Some(1.0),
8840 enum_values: EMPTY_ENUM_VALUES,
8841 notes: None,
8842 },
8843 IndicatorParamInfo {
8844 key: "mult",
8845 label: "Multiplier",
8846 kind: IndicatorParamKind::Float,
8847 required: false,
8848 default: Some(ParamValueStatic::Float(0.0)),
8849 min: Some(0.0),
8850 max: None,
8851 step: None,
8852 enum_values: EMPTY_ENUM_VALUES,
8853 notes: None,
8854 },
8855 IndicatorParamInfo {
8856 key: "devtype",
8857 label: "Dev Type",
8858 kind: IndicatorParamKind::Int,
8859 required: false,
8860 default: Some(ParamValueStatic::Int(0)),
8861 min: Some(0.0),
8862 max: None,
8863 step: Some(1.0),
8864 enum_values: EMPTY_ENUM_VALUES,
8865 notes: None,
8866 },
8867 IndicatorParamInfo {
8868 key: "direction",
8869 label: "Direction",
8870 kind: IndicatorParamKind::EnumString,
8871 required: false,
8872 default: Some(ParamValueStatic::EnumString("long")),
8873 min: None,
8874 max: None,
8875 step: None,
8876 enum_values: EMPTY_ENUM_VALUES,
8877 notes: None,
8878 },
8879 IndicatorParamInfo {
8880 key: "ma_type",
8881 label: "MA Type",
8882 kind: IndicatorParamKind::EnumString,
8883 required: false,
8884 default: Some(ParamValueStatic::EnumString("sma")),
8885 min: None,
8886 max: None,
8887 step: None,
8888 enum_values: EMPTY_ENUM_VALUES,
8889 notes: None,
8890 },
8891];
8892
8893const PARAM_MOD_GOD_MODE: &[IndicatorParamInfo] = &[
8894 IndicatorParamInfo {
8895 key: "n1",
8896 label: "N1",
8897 kind: IndicatorParamKind::Int,
8898 required: false,
8899 default: Some(ParamValueStatic::Int(17)),
8900 min: Some(1.0),
8901 max: None,
8902 step: Some(1.0),
8903 enum_values: EMPTY_ENUM_VALUES,
8904 notes: None,
8905 },
8906 IndicatorParamInfo {
8907 key: "n2",
8908 label: "N2",
8909 kind: IndicatorParamKind::Int,
8910 required: false,
8911 default: Some(ParamValueStatic::Int(6)),
8912 min: Some(1.0),
8913 max: None,
8914 step: Some(1.0),
8915 enum_values: EMPTY_ENUM_VALUES,
8916 notes: None,
8917 },
8918 IndicatorParamInfo {
8919 key: "n3",
8920 label: "N3",
8921 kind: IndicatorParamKind::Int,
8922 required: false,
8923 default: Some(ParamValueStatic::Int(4)),
8924 min: Some(1.0),
8925 max: None,
8926 step: Some(1.0),
8927 enum_values: EMPTY_ENUM_VALUES,
8928 notes: None,
8929 },
8930 IndicatorParamInfo {
8931 key: "mode",
8932 label: "Mode",
8933 kind: IndicatorParamKind::EnumString,
8934 required: false,
8935 default: Some(ParamValueStatic::EnumString("tradition_mg")),
8936 min: None,
8937 max: None,
8938 step: None,
8939 enum_values: EMPTY_ENUM_VALUES,
8940 notes: None,
8941 },
8942 IndicatorParamInfo {
8943 key: "use_volume",
8944 label: "Use Volume",
8945 kind: IndicatorParamKind::Bool,
8946 required: false,
8947 default: Some(ParamValueStatic::Bool(true)),
8948 min: None,
8949 max: None,
8950 step: None,
8951 enum_values: ENUM_VALUES_TRUE_FALSE,
8952 notes: None,
8953 },
8954];
8955
8956const PARAM_HEMA_TREND_LEVELS: &[IndicatorParamInfo] = &[
8957 IndicatorParamInfo {
8958 key: "fast_length",
8959 label: "Fast Length",
8960 kind: IndicatorParamKind::Int,
8961 required: false,
8962 default: Some(ParamValueStatic::Int(20)),
8963 min: Some(1.0),
8964 max: None,
8965 step: Some(1.0),
8966 enum_values: EMPTY_ENUM_VALUES,
8967 notes: None,
8968 },
8969 IndicatorParamInfo {
8970 key: "slow_length",
8971 label: "Slow Length",
8972 kind: IndicatorParamKind::Int,
8973 required: false,
8974 default: Some(ParamValueStatic::Int(40)),
8975 min: Some(1.0),
8976 max: None,
8977 step: Some(1.0),
8978 enum_values: EMPTY_ENUM_VALUES,
8979 notes: None,
8980 },
8981];
8982
8983const PARAM_KST: &[IndicatorParamInfo] = &[
8984 IndicatorParamInfo {
8985 key: "sma_period1",
8986 label: "SMA 1",
8987 kind: IndicatorParamKind::Int,
8988 required: false,
8989 default: Some(ParamValueStatic::Int(10)),
8990 min: Some(1.0),
8991 max: None,
8992 step: Some(1.0),
8993 enum_values: EMPTY_ENUM_VALUES,
8994 notes: None,
8995 },
8996 IndicatorParamInfo {
8997 key: "sma_period2",
8998 label: "SMA 2",
8999 kind: IndicatorParamKind::Int,
9000 required: false,
9001 default: Some(ParamValueStatic::Int(10)),
9002 min: Some(1.0),
9003 max: None,
9004 step: Some(1.0),
9005 enum_values: EMPTY_ENUM_VALUES,
9006 notes: None,
9007 },
9008 IndicatorParamInfo {
9009 key: "sma_period3",
9010 label: "SMA 3",
9011 kind: IndicatorParamKind::Int,
9012 required: false,
9013 default: Some(ParamValueStatic::Int(10)),
9014 min: Some(1.0),
9015 max: None,
9016 step: Some(1.0),
9017 enum_values: EMPTY_ENUM_VALUES,
9018 notes: None,
9019 },
9020 IndicatorParamInfo {
9021 key: "sma_period4",
9022 label: "SMA 4",
9023 kind: IndicatorParamKind::Int,
9024 required: false,
9025 default: Some(ParamValueStatic::Int(15)),
9026 min: Some(1.0),
9027 max: None,
9028 step: Some(1.0),
9029 enum_values: EMPTY_ENUM_VALUES,
9030 notes: None,
9031 },
9032 IndicatorParamInfo {
9033 key: "roc_period1",
9034 label: "ROC 1",
9035 kind: IndicatorParamKind::Int,
9036 required: false,
9037 default: Some(ParamValueStatic::Int(10)),
9038 min: Some(1.0),
9039 max: None,
9040 step: Some(1.0),
9041 enum_values: EMPTY_ENUM_VALUES,
9042 notes: None,
9043 },
9044 IndicatorParamInfo {
9045 key: "roc_period2",
9046 label: "ROC 2",
9047 kind: IndicatorParamKind::Int,
9048 required: false,
9049 default: Some(ParamValueStatic::Int(15)),
9050 min: Some(1.0),
9051 max: None,
9052 step: Some(1.0),
9053 enum_values: EMPTY_ENUM_VALUES,
9054 notes: None,
9055 },
9056 IndicatorParamInfo {
9057 key: "roc_period3",
9058 label: "ROC 3",
9059 kind: IndicatorParamKind::Int,
9060 required: false,
9061 default: Some(ParamValueStatic::Int(20)),
9062 min: Some(1.0),
9063 max: None,
9064 step: Some(1.0),
9065 enum_values: EMPTY_ENUM_VALUES,
9066 notes: None,
9067 },
9068 IndicatorParamInfo {
9069 key: "roc_period4",
9070 label: "ROC 4",
9071 kind: IndicatorParamKind::Int,
9072 required: false,
9073 default: Some(ParamValueStatic::Int(30)),
9074 min: Some(1.0),
9075 max: None,
9076 step: Some(1.0),
9077 enum_values: EMPTY_ENUM_VALUES,
9078 notes: None,
9079 },
9080 IndicatorParamInfo {
9081 key: "signal_period",
9082 label: "Signal Period",
9083 kind: IndicatorParamKind::Int,
9084 required: false,
9085 default: Some(ParamValueStatic::Int(9)),
9086 min: Some(1.0),
9087 max: None,
9088 step: Some(1.0),
9089 enum_values: EMPTY_ENUM_VALUES,
9090 notes: None,
9091 },
9092];
9093
9094const PARAM_KAUFMANSTOP: &[IndicatorParamInfo] = &[
9095 IndicatorParamInfo {
9096 key: "period",
9097 label: "Period",
9098 kind: IndicatorParamKind::Int,
9099 required: false,
9100 default: Some(ParamValueStatic::Int(22)),
9101 min: Some(1.0),
9102 max: None,
9103 step: Some(1.0),
9104 enum_values: EMPTY_ENUM_VALUES,
9105 notes: None,
9106 },
9107 IndicatorParamInfo {
9108 key: "mult",
9109 label: "Multiplier",
9110 kind: IndicatorParamKind::Float,
9111 required: false,
9112 default: Some(ParamValueStatic::Float(2.0)),
9113 min: Some(0.0),
9114 max: None,
9115 step: None,
9116 enum_values: EMPTY_ENUM_VALUES,
9117 notes: None,
9118 },
9119 IndicatorParamInfo {
9120 key: "direction",
9121 label: "Direction",
9122 kind: IndicatorParamKind::EnumString,
9123 required: false,
9124 default: Some(ParamValueStatic::EnumString("long")),
9125 min: None,
9126 max: None,
9127 step: None,
9128 enum_values: EMPTY_ENUM_VALUES,
9129 notes: None,
9130 },
9131 IndicatorParamInfo {
9132 key: "ma_type",
9133 label: "MA Type",
9134 kind: IndicatorParamKind::EnumString,
9135 required: false,
9136 default: Some(ParamValueStatic::EnumString("sma")),
9137 min: None,
9138 max: None,
9139 step: None,
9140 enum_values: EMPTY_ENUM_VALUES,
9141 notes: None,
9142 },
9143];
9144
9145const PARAM_LPC: &[IndicatorParamInfo] = &[
9146 IndicatorParamInfo {
9147 key: "cutoff_type",
9148 label: "Cutoff Type",
9149 kind: IndicatorParamKind::EnumString,
9150 required: false,
9151 default: Some(ParamValueStatic::EnumString("adaptive")),
9152 min: None,
9153 max: None,
9154 step: None,
9155 enum_values: EMPTY_ENUM_VALUES,
9156 notes: None,
9157 },
9158 IndicatorParamInfo {
9159 key: "fixed_period",
9160 label: "Fixed Period",
9161 kind: IndicatorParamKind::Int,
9162 required: false,
9163 default: Some(ParamValueStatic::Int(20)),
9164 min: Some(1.0),
9165 max: None,
9166 step: Some(1.0),
9167 enum_values: EMPTY_ENUM_VALUES,
9168 notes: None,
9169 },
9170 IndicatorParamInfo {
9171 key: "max_cycle_limit",
9172 label: "Max Cycle Limit",
9173 kind: IndicatorParamKind::Int,
9174 required: false,
9175 default: Some(ParamValueStatic::Int(60)),
9176 min: Some(1.0),
9177 max: None,
9178 step: Some(1.0),
9179 enum_values: EMPTY_ENUM_VALUES,
9180 notes: None,
9181 },
9182 IndicatorParamInfo {
9183 key: "cycle_mult",
9184 label: "Cycle Mult",
9185 kind: IndicatorParamKind::Float,
9186 required: false,
9187 default: Some(ParamValueStatic::Float(1.0)),
9188 min: Some(0.0),
9189 max: None,
9190 step: None,
9191 enum_values: EMPTY_ENUM_VALUES,
9192 notes: None,
9193 },
9194 IndicatorParamInfo {
9195 key: "tr_mult",
9196 label: "TR Mult",
9197 kind: IndicatorParamKind::Float,
9198 required: false,
9199 default: Some(ParamValueStatic::Float(1.0)),
9200 min: Some(0.0),
9201 max: None,
9202 step: None,
9203 enum_values: EMPTY_ENUM_VALUES,
9204 notes: None,
9205 },
9206];
9207
9208const PARAM_MAB: &[IndicatorParamInfo] = &[
9209 IndicatorParamInfo {
9210 key: "fast_period",
9211 label: "Fast Period",
9212 kind: IndicatorParamKind::Int,
9213 required: false,
9214 default: Some(ParamValueStatic::Int(10)),
9215 min: Some(1.0),
9216 max: None,
9217 step: Some(1.0),
9218 enum_values: EMPTY_ENUM_VALUES,
9219 notes: None,
9220 },
9221 IndicatorParamInfo {
9222 key: "slow_period",
9223 label: "Slow Period",
9224 kind: IndicatorParamKind::Int,
9225 required: false,
9226 default: Some(ParamValueStatic::Int(50)),
9227 min: Some(1.0),
9228 max: None,
9229 step: Some(1.0),
9230 enum_values: EMPTY_ENUM_VALUES,
9231 notes: None,
9232 },
9233 IndicatorParamInfo {
9234 key: "devup",
9235 label: "Dev Up",
9236 kind: IndicatorParamKind::Float,
9237 required: false,
9238 default: Some(ParamValueStatic::Float(1.0)),
9239 min: Some(0.0),
9240 max: None,
9241 step: None,
9242 enum_values: EMPTY_ENUM_VALUES,
9243 notes: None,
9244 },
9245 IndicatorParamInfo {
9246 key: "devdn",
9247 label: "Dev Down",
9248 kind: IndicatorParamKind::Float,
9249 required: false,
9250 default: Some(ParamValueStatic::Float(1.0)),
9251 min: Some(0.0),
9252 max: None,
9253 step: None,
9254 enum_values: EMPTY_ENUM_VALUES,
9255 notes: None,
9256 },
9257 IndicatorParamInfo {
9258 key: "fast_ma_type",
9259 label: "Fast MA Type",
9260 kind: IndicatorParamKind::EnumString,
9261 required: false,
9262 default: Some(ParamValueStatic::EnumString("sma")),
9263 min: None,
9264 max: None,
9265 step: None,
9266 enum_values: EMPTY_ENUM_VALUES,
9267 notes: None,
9268 },
9269 IndicatorParamInfo {
9270 key: "slow_ma_type",
9271 label: "Slow MA Type",
9272 kind: IndicatorParamKind::EnumString,
9273 required: false,
9274 default: Some(ParamValueStatic::EnumString("sma")),
9275 min: None,
9276 max: None,
9277 step: None,
9278 enum_values: EMPTY_ENUM_VALUES,
9279 notes: None,
9280 },
9281];
9282
9283const PARAM_MACZ: &[IndicatorParamInfo] = &[
9284 IndicatorParamInfo {
9285 key: "fast_length",
9286 label: "Fast Length",
9287 kind: IndicatorParamKind::Int,
9288 required: false,
9289 default: Some(ParamValueStatic::Int(12)),
9290 min: Some(1.0),
9291 max: None,
9292 step: Some(1.0),
9293 enum_values: EMPTY_ENUM_VALUES,
9294 notes: None,
9295 },
9296 IndicatorParamInfo {
9297 key: "slow_length",
9298 label: "Slow Length",
9299 kind: IndicatorParamKind::Int,
9300 required: false,
9301 default: Some(ParamValueStatic::Int(25)),
9302 min: Some(1.0),
9303 max: None,
9304 step: Some(1.0),
9305 enum_values: EMPTY_ENUM_VALUES,
9306 notes: None,
9307 },
9308 IndicatorParamInfo {
9309 key: "signal_length",
9310 label: "Signal Length",
9311 kind: IndicatorParamKind::Int,
9312 required: false,
9313 default: Some(ParamValueStatic::Int(9)),
9314 min: Some(1.0),
9315 max: None,
9316 step: Some(1.0),
9317 enum_values: EMPTY_ENUM_VALUES,
9318 notes: None,
9319 },
9320 IndicatorParamInfo {
9321 key: "lengthz",
9322 label: "Length Z",
9323 kind: IndicatorParamKind::Int,
9324 required: false,
9325 default: Some(ParamValueStatic::Int(20)),
9326 min: Some(1.0),
9327 max: None,
9328 step: Some(1.0),
9329 enum_values: EMPTY_ENUM_VALUES,
9330 notes: None,
9331 },
9332 IndicatorParamInfo {
9333 key: "length_stdev",
9334 label: "Length StdDev",
9335 kind: IndicatorParamKind::Int,
9336 required: false,
9337 default: Some(ParamValueStatic::Int(25)),
9338 min: Some(1.0),
9339 max: None,
9340 step: Some(1.0),
9341 enum_values: EMPTY_ENUM_VALUES,
9342 notes: None,
9343 },
9344 IndicatorParamInfo {
9345 key: "a",
9346 label: "A",
9347 kind: IndicatorParamKind::Float,
9348 required: false,
9349 default: Some(ParamValueStatic::Float(1.0)),
9350 min: None,
9351 max: None,
9352 step: None,
9353 enum_values: EMPTY_ENUM_VALUES,
9354 notes: None,
9355 },
9356 IndicatorParamInfo {
9357 key: "b",
9358 label: "B",
9359 kind: IndicatorParamKind::Float,
9360 required: false,
9361 default: Some(ParamValueStatic::Float(1.0)),
9362 min: None,
9363 max: None,
9364 step: None,
9365 enum_values: EMPTY_ENUM_VALUES,
9366 notes: None,
9367 },
9368 IndicatorParamInfo {
9369 key: "use_lag",
9370 label: "Use Lag",
9371 kind: IndicatorParamKind::Bool,
9372 required: false,
9373 default: Some(ParamValueStatic::Bool(false)),
9374 min: None,
9375 max: None,
9376 step: None,
9377 enum_values: ENUM_VALUES_TRUE_FALSE,
9378 notes: None,
9379 },
9380 IndicatorParamInfo {
9381 key: "gamma",
9382 label: "Gamma",
9383 kind: IndicatorParamKind::Float,
9384 required: false,
9385 default: Some(ParamValueStatic::Float(0.02)),
9386 min: None,
9387 max: None,
9388 step: None,
9389 enum_values: EMPTY_ENUM_VALUES,
9390 notes: None,
9391 },
9392];
9393
9394const PARAM_MINMAX: &[IndicatorParamInfo] = &[IndicatorParamInfo {
9395 key: "order",
9396 label: "Order",
9397 kind: IndicatorParamKind::Int,
9398 required: false,
9399 default: Some(ParamValueStatic::Int(3)),
9400 min: Some(1.0),
9401 max: None,
9402 step: Some(1.0),
9403 enum_values: EMPTY_ENUM_VALUES,
9404 notes: None,
9405}];
9406
9407const PARAM_MSW: &[IndicatorParamInfo] = &[IndicatorParamInfo {
9408 key: "period",
9409 label: "Period",
9410 kind: IndicatorParamKind::Int,
9411 required: false,
9412 default: Some(ParamValueStatic::Int(5)),
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_NWE: &[IndicatorParamInfo] = &[
9421 IndicatorParamInfo {
9422 key: "bandwidth",
9423 label: "Bandwidth",
9424 kind: IndicatorParamKind::Float,
9425 required: false,
9426 default: Some(ParamValueStatic::Float(8.0)),
9427 min: Some(0.0),
9428 max: None,
9429 step: None,
9430 enum_values: EMPTY_ENUM_VALUES,
9431 notes: None,
9432 },
9433 IndicatorParamInfo {
9434 key: "multiplier",
9435 label: "Multiplier",
9436 kind: IndicatorParamKind::Float,
9437 required: false,
9438 default: Some(ParamValueStatic::Float(3.0)),
9439 min: Some(0.0),
9440 max: None,
9441 step: None,
9442 enum_values: EMPTY_ENUM_VALUES,
9443 notes: None,
9444 },
9445 IndicatorParamInfo {
9446 key: "lookback",
9447 label: "Lookback",
9448 kind: IndicatorParamKind::Int,
9449 required: false,
9450 default: Some(ParamValueStatic::Int(500)),
9451 min: Some(1.0),
9452 max: None,
9453 step: Some(1.0),
9454 enum_values: EMPTY_ENUM_VALUES,
9455 notes: None,
9456 },
9457];
9458
9459const PARAM_OTT: &[IndicatorParamInfo] = &[
9460 IndicatorParamInfo {
9461 key: "period",
9462 label: "Period",
9463 kind: IndicatorParamKind::Int,
9464 required: false,
9465 default: Some(ParamValueStatic::Int(2)),
9466 min: Some(1.0),
9467 max: None,
9468 step: Some(1.0),
9469 enum_values: EMPTY_ENUM_VALUES,
9470 notes: None,
9471 },
9472 IndicatorParamInfo {
9473 key: "percent",
9474 label: "Percent",
9475 kind: IndicatorParamKind::Float,
9476 required: false,
9477 default: Some(ParamValueStatic::Float(1.4)),
9478 min: Some(0.0),
9479 max: None,
9480 step: None,
9481 enum_values: EMPTY_ENUM_VALUES,
9482 notes: None,
9483 },
9484 IndicatorParamInfo {
9485 key: "ma_type",
9486 label: "MA Type",
9487 kind: IndicatorParamKind::EnumString,
9488 required: false,
9489 default: Some(ParamValueStatic::EnumString("VAR")),
9490 min: None,
9491 max: None,
9492 step: None,
9493 enum_values: EMPTY_ENUM_VALUES,
9494 notes: None,
9495 },
9496];
9497
9498const PARAM_OTTO: &[IndicatorParamInfo] = &[
9499 IndicatorParamInfo {
9500 key: "ott_period",
9501 label: "OTT Period",
9502 kind: IndicatorParamKind::Int,
9503 required: false,
9504 default: Some(ParamValueStatic::Int(2)),
9505 min: Some(1.0),
9506 max: None,
9507 step: Some(1.0),
9508 enum_values: EMPTY_ENUM_VALUES,
9509 notes: None,
9510 },
9511 IndicatorParamInfo {
9512 key: "ott_percent",
9513 label: "OTT Percent",
9514 kind: IndicatorParamKind::Float,
9515 required: false,
9516 default: Some(ParamValueStatic::Float(0.6)),
9517 min: Some(0.0),
9518 max: None,
9519 step: None,
9520 enum_values: EMPTY_ENUM_VALUES,
9521 notes: None,
9522 },
9523 IndicatorParamInfo {
9524 key: "fast_vidya_length",
9525 label: "Fast VIDYA Length",
9526 kind: IndicatorParamKind::Int,
9527 required: false,
9528 default: Some(ParamValueStatic::Int(10)),
9529 min: Some(1.0),
9530 max: None,
9531 step: Some(1.0),
9532 enum_values: EMPTY_ENUM_VALUES,
9533 notes: None,
9534 },
9535 IndicatorParamInfo {
9536 key: "slow_vidya_length",
9537 label: "Slow VIDYA Length",
9538 kind: IndicatorParamKind::Int,
9539 required: false,
9540 default: Some(ParamValueStatic::Int(25)),
9541 min: Some(1.0),
9542 max: None,
9543 step: Some(1.0),
9544 enum_values: EMPTY_ENUM_VALUES,
9545 notes: None,
9546 },
9547 IndicatorParamInfo {
9548 key: "correcting_constant",
9549 label: "Correcting Constant",
9550 kind: IndicatorParamKind::Float,
9551 required: false,
9552 default: Some(ParamValueStatic::Float(100000.0)),
9553 min: Some(0.0),
9554 max: None,
9555 step: None,
9556 enum_values: EMPTY_ENUM_VALUES,
9557 notes: None,
9558 },
9559 IndicatorParamInfo {
9560 key: "ma_type",
9561 label: "MA Type",
9562 kind: IndicatorParamKind::EnumString,
9563 required: false,
9564 default: Some(ParamValueStatic::EnumString("VAR")),
9565 min: None,
9566 max: None,
9567 step: None,
9568 enum_values: EMPTY_ENUM_VALUES,
9569 notes: None,
9570 },
9571];
9572
9573const PARAM_PMA: &[IndicatorParamInfo] = PARAM_NONE;
9574
9575const PARAM_EHLERS_ADAPTIVE_CG: &[IndicatorParamInfo] = &[
9576 IndicatorParamInfo {
9577 key: "alpha",
9578 label: "Alpha",
9579 kind: IndicatorParamKind::Float,
9580 required: false,
9581 default: Some(ParamValueStatic::Float(0.07)),
9582 min: Some(0.0),
9583 max: Some(1.0),
9584 step: None,
9585 enum_values: EMPTY_ENUM_VALUES,
9586 notes: None,
9587 },
9588 PARAM_OUTPUT_EHLERS_ADAPTIVE_CG,
9589];
9590
9591const PARAM_PRB: &[IndicatorParamInfo] = &[
9592 IndicatorParamInfo {
9593 key: "smooth_data",
9594 label: "Smooth Data",
9595 kind: IndicatorParamKind::Bool,
9596 required: false,
9597 default: Some(ParamValueStatic::Bool(true)),
9598 min: None,
9599 max: None,
9600 step: None,
9601 enum_values: ENUM_VALUES_TRUE_FALSE,
9602 notes: None,
9603 },
9604 IndicatorParamInfo {
9605 key: "smooth_period",
9606 label: "Smooth Period",
9607 kind: IndicatorParamKind::Int,
9608 required: false,
9609 default: Some(ParamValueStatic::Int(10)),
9610 min: Some(1.0),
9611 max: None,
9612 step: Some(1.0),
9613 enum_values: EMPTY_ENUM_VALUES,
9614 notes: None,
9615 },
9616 IndicatorParamInfo {
9617 key: "regression_period",
9618 label: "Regression Period",
9619 kind: IndicatorParamKind::Int,
9620 required: false,
9621 default: Some(ParamValueStatic::Int(100)),
9622 min: Some(1.0),
9623 max: None,
9624 step: Some(1.0),
9625 enum_values: EMPTY_ENUM_VALUES,
9626 notes: None,
9627 },
9628 IndicatorParamInfo {
9629 key: "polynomial_order",
9630 label: "Polynomial Order",
9631 kind: IndicatorParamKind::Int,
9632 required: false,
9633 default: Some(ParamValueStatic::Int(2)),
9634 min: Some(1.0),
9635 max: None,
9636 step: Some(1.0),
9637 enum_values: EMPTY_ENUM_VALUES,
9638 notes: None,
9639 },
9640 IndicatorParamInfo {
9641 key: "regression_offset",
9642 label: "Regression Offset",
9643 kind: IndicatorParamKind::Int,
9644 required: false,
9645 default: Some(ParamValueStatic::Int(0)),
9646 min: None,
9647 max: None,
9648 step: Some(1.0),
9649 enum_values: EMPTY_ENUM_VALUES,
9650 notes: None,
9651 },
9652 IndicatorParamInfo {
9653 key: "ndev",
9654 label: "NDev",
9655 kind: IndicatorParamKind::Float,
9656 required: false,
9657 default: Some(ParamValueStatic::Float(2.0)),
9658 min: Some(0.0),
9659 max: None,
9660 step: None,
9661 enum_values: EMPTY_ENUM_VALUES,
9662 notes: None,
9663 },
9664 IndicatorParamInfo {
9665 key: "equ_from",
9666 label: "Equ From",
9667 kind: IndicatorParamKind::Int,
9668 required: false,
9669 default: Some(ParamValueStatic::Int(0)),
9670 min: Some(0.0),
9671 max: None,
9672 step: Some(1.0),
9673 enum_values: EMPTY_ENUM_VALUES,
9674 notes: None,
9675 },
9676];
9677
9678const PARAM_POLYNOMIAL_REGRESSION_EXTRAPOLATION: &[IndicatorParamInfo] = &[
9679 IndicatorParamInfo {
9680 key: "length",
9681 label: "Length",
9682 kind: IndicatorParamKind::Int,
9683 required: false,
9684 default: Some(ParamValueStatic::Int(100)),
9685 min: Some(1.0),
9686 max: None,
9687 step: Some(1.0),
9688 enum_values: EMPTY_ENUM_VALUES,
9689 notes: None,
9690 },
9691 IndicatorParamInfo {
9692 key: "extrapolate",
9693 label: "Extrapolate",
9694 kind: IndicatorParamKind::Int,
9695 required: false,
9696 default: Some(ParamValueStatic::Int(10)),
9697 min: Some(0.0),
9698 max: None,
9699 step: Some(1.0),
9700 enum_values: EMPTY_ENUM_VALUES,
9701 notes: None,
9702 },
9703 IndicatorParamInfo {
9704 key: "degree",
9705 label: "Degree",
9706 kind: IndicatorParamKind::Int,
9707 required: false,
9708 default: Some(ParamValueStatic::Int(3)),
9709 min: Some(0.0),
9710 max: Some(8.0),
9711 step: Some(1.0),
9712 enum_values: EMPTY_ENUM_VALUES,
9713 notes: Some("Must satisfy degree + 1 <= length"),
9714 },
9715];
9716
9717const PARAM_STATISTICAL_TRAILING_STOP: &[IndicatorParamInfo] = &[
9718 IndicatorParamInfo {
9719 key: "data_length",
9720 label: "Data Length",
9721 kind: IndicatorParamKind::Int,
9722 required: false,
9723 default: Some(ParamValueStatic::Int(10)),
9724 min: Some(1.0),
9725 max: None,
9726 step: Some(1.0),
9727 enum_values: EMPTY_ENUM_VALUES,
9728 notes: Some("Corrected from the provided source so the data_length input controls the true-range window"),
9729 },
9730 IndicatorParamInfo {
9731 key: "normalization_length",
9732 label: "Distribution Length",
9733 kind: IndicatorParamKind::Int,
9734 required: false,
9735 default: Some(ParamValueStatic::Int(100)),
9736 min: Some(10.0),
9737 max: Some(5000.0),
9738 step: Some(1.0),
9739 enum_values: EMPTY_ENUM_VALUES,
9740 notes: None,
9741 },
9742 IndicatorParamInfo {
9743 key: "base_level",
9744 label: "Base Level",
9745 kind: IndicatorParamKind::EnumString,
9746 required: false,
9747 default: Some(ParamValueStatic::EnumString("level2")),
9748 min: None,
9749 max: None,
9750 step: None,
9751 enum_values: ENUM_VALUES_STATISTICAL_TRAILING_STOP_BASE_LEVEL,
9752 notes: None,
9753 },
9754];
9755
9756const PARAM_GEOMETRIC_BIAS_OSCILLATOR: &[IndicatorParamInfo] = &[
9757 IndicatorParamInfo {
9758 key: "length",
9759 label: "Window Size",
9760 kind: IndicatorParamKind::Int,
9761 required: false,
9762 default: Some(ParamValueStatic::Int(100)),
9763 min: Some(10.0),
9764 max: Some(500.0),
9765 step: Some(1.0),
9766 enum_values: EMPTY_ENUM_VALUES,
9767 notes: None,
9768 },
9769 IndicatorParamInfo {
9770 key: "multiplier",
9771 label: "ATR Multiplier",
9772 kind: IndicatorParamKind::Float,
9773 required: false,
9774 default: Some(ParamValueStatic::Float(2.0)),
9775 min: Some(0.1),
9776 max: None,
9777 step: Some(0.1),
9778 enum_values: EMPTY_ENUM_VALUES,
9779 notes: Some(
9780 "Used as the RDP simplification threshold against ATR-normalized price geometry",
9781 ),
9782 },
9783 IndicatorParamInfo {
9784 key: "atr_length",
9785 label: "ATR Length",
9786 kind: IndicatorParamKind::Int,
9787 required: false,
9788 default: Some(ParamValueStatic::Int(14)),
9789 min: Some(1.0),
9790 max: None,
9791 step: Some(1.0),
9792 enum_values: EMPTY_ENUM_VALUES,
9793 notes: None,
9794 },
9795 IndicatorParamInfo {
9796 key: "smooth",
9797 label: "Smoothing",
9798 kind: IndicatorParamKind::Int,
9799 required: false,
9800 default: Some(ParamValueStatic::Int(1)),
9801 min: Some(1.0),
9802 max: None,
9803 step: Some(1.0),
9804 enum_values: EMPTY_ENUM_VALUES,
9805 notes: None,
9806 },
9807];
9808
9809const PARAM_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR: &[IndicatorParamInfo] = &[
9810 IndicatorParamInfo {
9811 key: "fast_depth",
9812 label: "Fast Depth",
9813 kind: IndicatorParamKind::Int,
9814 required: false,
9815 default: Some(ParamValueStatic::Int(9)),
9816 min: Some(1.0),
9817 max: None,
9818 step: Some(1.0),
9819 enum_values: EMPTY_ENUM_VALUES,
9820 notes: None,
9821 },
9822 IndicatorParamInfo {
9823 key: "slow_depth",
9824 label: "Slow Depth",
9825 kind: IndicatorParamKind::Int,
9826 required: false,
9827 default: Some(ParamValueStatic::Int(24)),
9828 min: Some(1.0),
9829 max: None,
9830 step: Some(1.0),
9831 enum_values: EMPTY_ENUM_VALUES,
9832 notes: None,
9833 },
9834 IndicatorParamInfo {
9835 key: "fast_length",
9836 label: "Fast Length",
9837 kind: IndicatorParamKind::Int,
9838 required: false,
9839 default: Some(ParamValueStatic::Int(21)),
9840 min: Some(1.0),
9841 max: None,
9842 step: Some(1.0),
9843 enum_values: EMPTY_ENUM_VALUES,
9844 notes: None,
9845 },
9846 IndicatorParamInfo {
9847 key: "slow_length",
9848 label: "Slow Length",
9849 kind: IndicatorParamKind::Int,
9850 required: false,
9851 default: Some(ParamValueStatic::Int(34)),
9852 min: Some(1.0),
9853 max: None,
9854 step: Some(1.0),
9855 enum_values: EMPTY_ENUM_VALUES,
9856 notes: None,
9857 },
9858 IndicatorParamInfo {
9859 key: "signal_length",
9860 label: "Signal Length",
9861 kind: IndicatorParamKind::Int,
9862 required: false,
9863 default: Some(ParamValueStatic::Int(5)),
9864 min: Some(1.0),
9865 max: None,
9866 step: Some(1.0),
9867 enum_values: EMPTY_ENUM_VALUES,
9868 notes: None,
9869 },
9870 IndicatorParamInfo {
9871 key: "lookback",
9872 label: "Momentum Pivot Lookback",
9873 kind: IndicatorParamKind::Int,
9874 required: false,
9875 default: Some(ParamValueStatic::Int(3)),
9876 min: Some(1.0),
9877 max: None,
9878 step: Some(1.0),
9879 enum_values: EMPTY_ENUM_VALUES,
9880 notes: None,
9881 },
9882 IndicatorParamInfo {
9883 key: "err_tol",
9884 label: "Harmonic Tolerance",
9885 kind: IndicatorParamKind::Float,
9886 required: false,
9887 default: Some(ParamValueStatic::Float(0.15)),
9888 min: Some(0.01),
9889 max: Some(0.5),
9890 step: Some(0.01),
9891 enum_values: EMPTY_ENUM_VALUES,
9892 notes: Some(
9893 "Uses corrected XAD ratio instead of the constant 1.27 shown in the provided source",
9894 ),
9895 },
9896 IndicatorParamInfo {
9897 key: "show_standard",
9898 label: "Show Standard",
9899 kind: IndicatorParamKind::Bool,
9900 required: false,
9901 default: Some(ParamValueStatic::Bool(true)),
9902 min: None,
9903 max: None,
9904 step: None,
9905 enum_values: ENUM_VALUES_TRUE_FALSE,
9906 notes: None,
9907 },
9908 IndicatorParamInfo {
9909 key: "show_climax",
9910 label: "Show Climax",
9911 kind: IndicatorParamKind::Bool,
9912 required: false,
9913 default: Some(ParamValueStatic::Bool(true)),
9914 min: None,
9915 max: None,
9916 step: None,
9917 enum_values: ENUM_VALUES_TRUE_FALSE,
9918 notes: None,
9919 },
9920 IndicatorParamInfo {
9921 key: "show_rounded",
9922 label: "Show Rounded",
9923 kind: IndicatorParamKind::Bool,
9924 required: false,
9925 default: Some(ParamValueStatic::Bool(true)),
9926 min: None,
9927 max: None,
9928 step: None,
9929 enum_values: ENUM_VALUES_TRUE_FALSE,
9930 notes: None,
9931 },
9932 IndicatorParamInfo {
9933 key: "show_predator",
9934 label: "Show Predator",
9935 kind: IndicatorParamKind::Bool,
9936 required: false,
9937 default: Some(ParamValueStatic::Bool(true)),
9938 min: None,
9939 max: None,
9940 step: None,
9941 enum_values: ENUM_VALUES_TRUE_FALSE,
9942 notes: None,
9943 },
9944 IndicatorParamInfo {
9945 key: "show_gartley",
9946 label: "Show Gartley",
9947 kind: IndicatorParamKind::Bool,
9948 required: false,
9949 default: Some(ParamValueStatic::Bool(false)),
9950 min: None,
9951 max: None,
9952 step: None,
9953 enum_values: ENUM_VALUES_TRUE_FALSE,
9954 notes: None,
9955 },
9956 IndicatorParamInfo {
9957 key: "show_bat",
9958 label: "Show Bat",
9959 kind: IndicatorParamKind::Bool,
9960 required: false,
9961 default: Some(ParamValueStatic::Bool(false)),
9962 min: None,
9963 max: None,
9964 step: None,
9965 enum_values: ENUM_VALUES_TRUE_FALSE,
9966 notes: None,
9967 },
9968 IndicatorParamInfo {
9969 key: "show_butterfly",
9970 label: "Show Butterfly",
9971 kind: IndicatorParamKind::Bool,
9972 required: false,
9973 default: Some(ParamValueStatic::Bool(false)),
9974 min: None,
9975 max: None,
9976 step: None,
9977 enum_values: ENUM_VALUES_TRUE_FALSE,
9978 notes: None,
9979 },
9980 IndicatorParamInfo {
9981 key: "show_crab",
9982 label: "Show Crab",
9983 kind: IndicatorParamKind::Bool,
9984 required: false,
9985 default: Some(ParamValueStatic::Bool(false)),
9986 min: None,
9987 max: None,
9988 step: None,
9989 enum_values: ENUM_VALUES_TRUE_FALSE,
9990 notes: None,
9991 },
9992 IndicatorParamInfo {
9993 key: "show_deep",
9994 label: "Show Deep",
9995 kind: IndicatorParamKind::Bool,
9996 required: false,
9997 default: Some(ParamValueStatic::Bool(false)),
9998 min: None,
9999 max: None,
10000 step: None,
10001 enum_values: ENUM_VALUES_TRUE_FALSE,
10002 notes: None,
10003 },
10004 IndicatorParamInfo {
10005 key: "show_hs",
10006 label: "Show H&S",
10007 kind: IndicatorParamKind::Bool,
10008 required: false,
10009 default: Some(ParamValueStatic::Bool(true)),
10010 min: None,
10011 max: None,
10012 step: None,
10013 enum_values: ENUM_VALUES_TRUE_FALSE,
10014 notes: None,
10015 },
10016];
10017
10018const PARAM_QQE: &[IndicatorParamInfo] = &[
10019 IndicatorParamInfo {
10020 key: "rsi_period",
10021 label: "RSI Period",
10022 kind: IndicatorParamKind::Int,
10023 required: false,
10024 default: Some(ParamValueStatic::Int(14)),
10025 min: Some(1.0),
10026 max: None,
10027 step: Some(1.0),
10028 enum_values: EMPTY_ENUM_VALUES,
10029 notes: None,
10030 },
10031 IndicatorParamInfo {
10032 key: "smoothing_factor",
10033 label: "Smoothing Factor",
10034 kind: IndicatorParamKind::Int,
10035 required: false,
10036 default: Some(ParamValueStatic::Int(5)),
10037 min: Some(1.0),
10038 max: None,
10039 step: Some(1.0),
10040 enum_values: EMPTY_ENUM_VALUES,
10041 notes: None,
10042 },
10043 IndicatorParamInfo {
10044 key: "fast_factor",
10045 label: "Fast Factor",
10046 kind: IndicatorParamKind::Float,
10047 required: false,
10048 default: Some(ParamValueStatic::Float(4.236)),
10049 min: Some(0.0),
10050 max: None,
10051 step: None,
10052 enum_values: EMPTY_ENUM_VALUES,
10053 notes: None,
10054 },
10055];
10056
10057const PARAM_QQE_WEIGHTED_OSCILLATOR: &[IndicatorParamInfo] = &[
10058 IndicatorParamInfo {
10059 key: "length",
10060 label: "Length",
10061 kind: IndicatorParamKind::Int,
10062 required: false,
10063 default: Some(ParamValueStatic::Int(14)),
10064 min: Some(1.0),
10065 max: None,
10066 step: Some(1.0),
10067 enum_values: EMPTY_ENUM_VALUES,
10068 notes: None,
10069 },
10070 IndicatorParamInfo {
10071 key: "factor",
10072 label: "Factor",
10073 kind: IndicatorParamKind::Float,
10074 required: false,
10075 default: Some(ParamValueStatic::Float(4.236)),
10076 min: Some(0.0),
10077 max: None,
10078 step: None,
10079 enum_values: EMPTY_ENUM_VALUES,
10080 notes: None,
10081 },
10082 IndicatorParamInfo {
10083 key: "smooth",
10084 label: "Smooth",
10085 kind: IndicatorParamKind::Int,
10086 required: false,
10087 default: Some(ParamValueStatic::Int(5)),
10088 min: Some(1.0),
10089 max: None,
10090 step: Some(1.0),
10091 enum_values: EMPTY_ENUM_VALUES,
10092 notes: None,
10093 },
10094 IndicatorParamInfo {
10095 key: "weight",
10096 label: "Weight",
10097 kind: IndicatorParamKind::Float,
10098 required: false,
10099 default: Some(ParamValueStatic::Float(2.0)),
10100 min: None,
10101 max: None,
10102 step: None,
10103 enum_values: EMPTY_ENUM_VALUES,
10104 notes: None,
10105 },
10106];
10107
10108const PARAM_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR: &[IndicatorParamInfo] = &[
10109 IndicatorParamInfo {
10110 key: "length",
10111 label: "Length",
10112 kind: IndicatorParamKind::Int,
10113 required: false,
10114 default: Some(ParamValueStatic::Int(20)),
10115 min: Some(1.0),
10116 max: None,
10117 step: Some(1.0),
10118 enum_values: EMPTY_ENUM_VALUES,
10119 notes: None,
10120 },
10121 IndicatorParamInfo {
10122 key: "smooth",
10123 label: "Smoothing",
10124 kind: IndicatorParamKind::Int,
10125 required: false,
10126 default: Some(ParamValueStatic::Int(10)),
10127 min: Some(1.0),
10128 max: None,
10129 step: Some(1.0),
10130 enum_values: EMPTY_ENUM_VALUES,
10131 notes: None,
10132 },
10133];
10134
10135const PARAM_ADAPTIVE_BOUNDS_RSI: &[IndicatorParamInfo] = &[
10136 IndicatorParamInfo {
10137 key: "rsi_length",
10138 label: "RSI Length",
10139 kind: IndicatorParamKind::Int,
10140 required: false,
10141 default: Some(ParamValueStatic::Int(14)),
10142 min: Some(1.0),
10143 max: None,
10144 step: Some(1.0),
10145 enum_values: EMPTY_ENUM_VALUES,
10146 notes: None,
10147 },
10148 IndicatorParamInfo {
10149 key: "alpha",
10150 label: "Learning Rate",
10151 kind: IndicatorParamKind::Float,
10152 required: false,
10153 default: Some(ParamValueStatic::Float(0.1)),
10154 min: Some(0.001),
10155 max: Some(1.0),
10156 step: Some(0.001),
10157 enum_values: EMPTY_ENUM_VALUES,
10158 notes: None,
10159 },
10160];
10161
10162const PARAM_RANGE_OSCILLATOR: &[IndicatorParamInfo] = &[
10163 IndicatorParamInfo {
10164 key: "length",
10165 label: "Length",
10166 kind: IndicatorParamKind::Int,
10167 required: false,
10168 default: Some(ParamValueStatic::Int(50)),
10169 min: Some(1.0),
10170 max: None,
10171 step: Some(1.0),
10172 enum_values: EMPTY_ENUM_VALUES,
10173 notes: None,
10174 },
10175 IndicatorParamInfo {
10176 key: "mult",
10177 label: "Multiplier",
10178 kind: IndicatorParamKind::Float,
10179 required: false,
10180 default: Some(ParamValueStatic::Float(2.0)),
10181 min: Some(0.1),
10182 max: None,
10183 step: Some(0.1),
10184 enum_values: EMPTY_ENUM_VALUES,
10185 notes: None,
10186 },
10187];
10188const PARAM_RANGE_FILTERED_TREND_SIGNALS: &[IndicatorParamInfo] = &[
10189 IndicatorParamInfo {
10190 key: "kalman_alpha",
10191 label: "Kalman Alpha",
10192 kind: IndicatorParamKind::Float,
10193 required: false,
10194 default: Some(ParamValueStatic::Float(0.01)),
10195 min: Some(0.0),
10196 max: None,
10197 step: Some(0.01),
10198 enum_values: EMPTY_ENUM_VALUES,
10199 notes: None,
10200 },
10201 IndicatorParamInfo {
10202 key: "kalman_beta",
10203 label: "Kalman Beta",
10204 kind: IndicatorParamKind::Float,
10205 required: false,
10206 default: Some(ParamValueStatic::Float(0.1)),
10207 min: Some(0.0),
10208 max: None,
10209 step: Some(0.1),
10210 enum_values: EMPTY_ENUM_VALUES,
10211 notes: None,
10212 },
10213 IndicatorParamInfo {
10214 key: "kalman_period",
10215 label: "Kalman Period",
10216 kind: IndicatorParamKind::Int,
10217 required: false,
10218 default: Some(ParamValueStatic::Int(77)),
10219 min: Some(1.0),
10220 max: None,
10221 step: Some(1.0),
10222 enum_values: EMPTY_ENUM_VALUES,
10223 notes: None,
10224 },
10225 IndicatorParamInfo {
10226 key: "dev",
10227 label: "Deviation",
10228 kind: IndicatorParamKind::Float,
10229 required: false,
10230 default: Some(ParamValueStatic::Float(1.2)),
10231 min: Some(0.0),
10232 max: None,
10233 step: Some(0.1),
10234 enum_values: EMPTY_ENUM_VALUES,
10235 notes: None,
10236 },
10237 IndicatorParamInfo {
10238 key: "supertrend_factor",
10239 label: "Supertrend Factor",
10240 kind: IndicatorParamKind::Float,
10241 required: false,
10242 default: Some(ParamValueStatic::Float(0.7)),
10243 min: Some(0.0),
10244 max: None,
10245 step: Some(0.1),
10246 enum_values: EMPTY_ENUM_VALUES,
10247 notes: None,
10248 },
10249 IndicatorParamInfo {
10250 key: "supertrend_atr_period",
10251 label: "Supertrend ATR Period",
10252 kind: IndicatorParamKind::Int,
10253 required: false,
10254 default: Some(ParamValueStatic::Int(7)),
10255 min: Some(1.0),
10256 max: None,
10257 step: Some(1.0),
10258 enum_values: EMPTY_ENUM_VALUES,
10259 notes: None,
10260 },
10261];
10262const ENUM_VALUES_MSC_BOS_CONFIRMATION: &[&str] = &["Candle Close", "Wicks"];
10263const PARAM_MARKET_STRUCTURE_CONFLUENCE: &[IndicatorParamInfo] = &[
10264 IndicatorParamInfo {
10265 key: "swing_size",
10266 label: "Time Horizon",
10267 kind: IndicatorParamKind::Int,
10268 required: false,
10269 default: Some(ParamValueStatic::Int(10)),
10270 min: Some(2.0),
10271 max: None,
10272 step: Some(1.0),
10273 enum_values: EMPTY_ENUM_VALUES,
10274 notes: None,
10275 },
10276 IndicatorParamInfo {
10277 key: "bos_confirmation",
10278 label: "BOS Confirmation",
10279 kind: IndicatorParamKind::EnumString,
10280 required: false,
10281 default: Some(ParamValueStatic::EnumString("Candle Close")),
10282 min: None,
10283 max: None,
10284 step: None,
10285 enum_values: ENUM_VALUES_MSC_BOS_CONFIRMATION,
10286 notes: None,
10287 },
10288 IndicatorParamInfo {
10289 key: "basis_length",
10290 label: "Basis Length",
10291 kind: IndicatorParamKind::Int,
10292 required: false,
10293 default: Some(ParamValueStatic::Int(100)),
10294 min: Some(1.0),
10295 max: None,
10296 step: Some(1.0),
10297 enum_values: EMPTY_ENUM_VALUES,
10298 notes: None,
10299 },
10300 IndicatorParamInfo {
10301 key: "atr_length",
10302 label: "ATR Length",
10303 kind: IndicatorParamKind::Int,
10304 required: false,
10305 default: Some(ParamValueStatic::Int(14)),
10306 min: Some(1.0),
10307 max: None,
10308 step: Some(1.0),
10309 enum_values: EMPTY_ENUM_VALUES,
10310 notes: None,
10311 },
10312 IndicatorParamInfo {
10313 key: "atr_smooth",
10314 label: "ATR Smoothing",
10315 kind: IndicatorParamKind::Int,
10316 required: false,
10317 default: Some(ParamValueStatic::Int(21)),
10318 min: Some(1.0),
10319 max: None,
10320 step: Some(1.0),
10321 enum_values: EMPTY_ENUM_VALUES,
10322 notes: None,
10323 },
10324 IndicatorParamInfo {
10325 key: "vol_mult",
10326 label: "Volatility Multiplier",
10327 kind: IndicatorParamKind::Float,
10328 required: false,
10329 default: Some(ParamValueStatic::Float(2.0)),
10330 min: Some(0.0),
10331 max: None,
10332 step: Some(0.1),
10333 enum_values: EMPTY_ENUM_VALUES,
10334 notes: None,
10335 },
10336];
10337const ENUM_VALUES_VWRSI_MA_TYPE: &[&str] = &["EMA", "SMA", "HMA", "SMMA (RMA)", "WMA", "VWMA"];
10338const PARAM_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX: &[IndicatorParamInfo] = &[
10339 IndicatorParamInfo {
10340 key: "rsi_length",
10341 label: "RSI Length",
10342 kind: IndicatorParamKind::Int,
10343 required: false,
10344 default: Some(ParamValueStatic::Int(14)),
10345 min: Some(1.0),
10346 max: None,
10347 step: Some(1.0),
10348 enum_values: EMPTY_ENUM_VALUES,
10349 notes: None,
10350 },
10351 IndicatorParamInfo {
10352 key: "range_length",
10353 label: "Consolidation Length",
10354 kind: IndicatorParamKind::Int,
10355 required: false,
10356 default: Some(ParamValueStatic::Int(10)),
10357 min: Some(1.0),
10358 max: None,
10359 step: Some(1.0),
10360 enum_values: EMPTY_ENUM_VALUES,
10361 notes: None,
10362 },
10363 IndicatorParamInfo {
10364 key: "ma_length",
10365 label: "RSI MA Length",
10366 kind: IndicatorParamKind::Int,
10367 required: false,
10368 default: Some(ParamValueStatic::Int(14)),
10369 min: Some(1.0),
10370 max: None,
10371 step: Some(1.0),
10372 enum_values: EMPTY_ENUM_VALUES,
10373 notes: None,
10374 },
10375 IndicatorParamInfo {
10376 key: "ma_type",
10377 label: "RSI MA Type",
10378 kind: IndicatorParamKind::EnumString,
10379 required: false,
10380 default: Some(ParamValueStatic::EnumString("EMA")),
10381 min: None,
10382 max: None,
10383 step: None,
10384 enum_values: ENUM_VALUES_VWRSI_MA_TYPE,
10385 notes: None,
10386 },
10387];
10388
10389const PARAM_RANGE_FILTER: &[IndicatorParamInfo] = &[
10390 IndicatorParamInfo {
10391 key: "range_size",
10392 label: "Range Size",
10393 kind: IndicatorParamKind::Float,
10394 required: false,
10395 default: Some(ParamValueStatic::Float(2.618)),
10396 min: Some(0.0),
10397 max: None,
10398 step: None,
10399 enum_values: EMPTY_ENUM_VALUES,
10400 notes: None,
10401 },
10402 IndicatorParamInfo {
10403 key: "range_period",
10404 label: "Range Period",
10405 kind: IndicatorParamKind::Int,
10406 required: false,
10407 default: Some(ParamValueStatic::Int(14)),
10408 min: Some(1.0),
10409 max: None,
10410 step: Some(1.0),
10411 enum_values: EMPTY_ENUM_VALUES,
10412 notes: None,
10413 },
10414 IndicatorParamInfo {
10415 key: "smooth_range",
10416 label: "Smooth Range",
10417 kind: IndicatorParamKind::Bool,
10418 required: false,
10419 default: Some(ParamValueStatic::Bool(true)),
10420 min: None,
10421 max: None,
10422 step: None,
10423 enum_values: ENUM_VALUES_TRUE_FALSE,
10424 notes: None,
10425 },
10426 IndicatorParamInfo {
10427 key: "smooth_period",
10428 label: "Smooth Period",
10429 kind: IndicatorParamKind::Int,
10430 required: false,
10431 default: Some(ParamValueStatic::Int(27)),
10432 min: Some(1.0),
10433 max: None,
10434 step: Some(1.0),
10435 enum_values: EMPTY_ENUM_VALUES,
10436 notes: None,
10437 },
10438];
10439
10440const PARAM_RSMK: &[IndicatorParamInfo] = &[
10441 IndicatorParamInfo {
10442 key: "lookback",
10443 label: "Lookback",
10444 kind: IndicatorParamKind::Int,
10445 required: false,
10446 default: Some(ParamValueStatic::Int(90)),
10447 min: Some(1.0),
10448 max: None,
10449 step: Some(1.0),
10450 enum_values: EMPTY_ENUM_VALUES,
10451 notes: None,
10452 },
10453 IndicatorParamInfo {
10454 key: "period",
10455 label: "Period",
10456 kind: IndicatorParamKind::Int,
10457 required: false,
10458 default: Some(ParamValueStatic::Int(3)),
10459 min: Some(1.0),
10460 max: None,
10461 step: Some(1.0),
10462 enum_values: EMPTY_ENUM_VALUES,
10463 notes: None,
10464 },
10465 IndicatorParamInfo {
10466 key: "signal_period",
10467 label: "Signal Period",
10468 kind: IndicatorParamKind::Int,
10469 required: false,
10470 default: Some(ParamValueStatic::Int(20)),
10471 min: Some(1.0),
10472 max: None,
10473 step: Some(1.0),
10474 enum_values: EMPTY_ENUM_VALUES,
10475 notes: None,
10476 },
10477 IndicatorParamInfo {
10478 key: "matype",
10479 label: "MA Type",
10480 kind: IndicatorParamKind::EnumString,
10481 required: false,
10482 default: Some(ParamValueStatic::EnumString("ema")),
10483 min: None,
10484 max: None,
10485 step: None,
10486 enum_values: EMPTY_ENUM_VALUES,
10487 notes: None,
10488 },
10489 IndicatorParamInfo {
10490 key: "signal_matype",
10491 label: "Signal MA Type",
10492 kind: IndicatorParamKind::EnumString,
10493 required: false,
10494 default: Some(ParamValueStatic::EnumString("ema")),
10495 min: None,
10496 max: None,
10497 step: None,
10498 enum_values: EMPTY_ENUM_VALUES,
10499 notes: None,
10500 },
10501];
10502
10503const PARAM_VOSS: &[IndicatorParamInfo] = &[
10504 IndicatorParamInfo {
10505 key: "period",
10506 label: "Period",
10507 kind: IndicatorParamKind::Int,
10508 required: false,
10509 default: Some(ParamValueStatic::Int(20)),
10510 min: Some(1.0),
10511 max: None,
10512 step: Some(1.0),
10513 enum_values: EMPTY_ENUM_VALUES,
10514 notes: None,
10515 },
10516 IndicatorParamInfo {
10517 key: "predict",
10518 label: "Predict",
10519 kind: IndicatorParamKind::Int,
10520 required: false,
10521 default: Some(ParamValueStatic::Int(3)),
10522 min: Some(1.0),
10523 max: None,
10524 step: Some(1.0),
10525 enum_values: EMPTY_ENUM_VALUES,
10526 notes: None,
10527 },
10528 IndicatorParamInfo {
10529 key: "bandwidth",
10530 label: "Bandwidth",
10531 kind: IndicatorParamKind::Float,
10532 required: false,
10533 default: Some(ParamValueStatic::Float(0.25)),
10534 min: Some(0.0),
10535 max: None,
10536 step: None,
10537 enum_values: EMPTY_ENUM_VALUES,
10538 notes: None,
10539 },
10540];
10541
10542const PARAM_STC: &[IndicatorParamInfo] = &[
10543 IndicatorParamInfo {
10544 key: "fast_period",
10545 label: "Fast Period",
10546 kind: IndicatorParamKind::Int,
10547 required: false,
10548 default: Some(ParamValueStatic::Int(23)),
10549 min: Some(1.0),
10550 max: None,
10551 step: Some(1.0),
10552 enum_values: EMPTY_ENUM_VALUES,
10553 notes: None,
10554 },
10555 IndicatorParamInfo {
10556 key: "slow_period",
10557 label: "Slow Period",
10558 kind: IndicatorParamKind::Int,
10559 required: false,
10560 default: Some(ParamValueStatic::Int(50)),
10561 min: Some(1.0),
10562 max: None,
10563 step: Some(1.0),
10564 enum_values: EMPTY_ENUM_VALUES,
10565 notes: None,
10566 },
10567 IndicatorParamInfo {
10568 key: "k_period",
10569 label: "K Period",
10570 kind: IndicatorParamKind::Int,
10571 required: false,
10572 default: Some(ParamValueStatic::Int(10)),
10573 min: Some(1.0),
10574 max: None,
10575 step: Some(1.0),
10576 enum_values: EMPTY_ENUM_VALUES,
10577 notes: None,
10578 },
10579 IndicatorParamInfo {
10580 key: "d_period",
10581 label: "D Period",
10582 kind: IndicatorParamKind::Int,
10583 required: false,
10584 default: Some(ParamValueStatic::Int(3)),
10585 min: Some(1.0),
10586 max: None,
10587 step: Some(1.0),
10588 enum_values: EMPTY_ENUM_VALUES,
10589 notes: None,
10590 },
10591];
10592
10593const PARAM_RVI: &[IndicatorParamInfo] = &[
10594 IndicatorParamInfo {
10595 key: "period",
10596 label: "Period",
10597 kind: IndicatorParamKind::Int,
10598 required: false,
10599 default: Some(ParamValueStatic::Int(10)),
10600 min: Some(1.0),
10601 max: None,
10602 step: Some(1.0),
10603 enum_values: EMPTY_ENUM_VALUES,
10604 notes: None,
10605 },
10606 IndicatorParamInfo {
10607 key: "ma_len",
10608 label: "MA Length",
10609 kind: IndicatorParamKind::Int,
10610 required: false,
10611 default: Some(ParamValueStatic::Int(14)),
10612 min: Some(1.0),
10613 max: None,
10614 step: Some(1.0),
10615 enum_values: EMPTY_ENUM_VALUES,
10616 notes: None,
10617 },
10618 IndicatorParamInfo {
10619 key: "matype",
10620 label: "MA Type",
10621 kind: IndicatorParamKind::Int,
10622 required: false,
10623 default: Some(ParamValueStatic::Int(1)),
10624 min: Some(0.0),
10625 max: None,
10626 step: Some(1.0),
10627 enum_values: EMPTY_ENUM_VALUES,
10628 notes: None,
10629 },
10630 IndicatorParamInfo {
10631 key: "devtype",
10632 label: "Deviation Type",
10633 kind: IndicatorParamKind::Int,
10634 required: false,
10635 default: Some(ParamValueStatic::Int(0)),
10636 min: Some(0.0),
10637 max: None,
10638 step: Some(1.0),
10639 enum_values: EMPTY_ENUM_VALUES,
10640 notes: None,
10641 },
10642];
10643
10644const PARAM_COPPOCK: &[IndicatorParamInfo] = &[
10645 IndicatorParamInfo {
10646 key: "short_roc_period",
10647 label: "Short ROC Period",
10648 kind: IndicatorParamKind::Int,
10649 required: false,
10650 default: Some(ParamValueStatic::Int(11)),
10651 min: Some(1.0),
10652 max: None,
10653 step: Some(1.0),
10654 enum_values: EMPTY_ENUM_VALUES,
10655 notes: None,
10656 },
10657 IndicatorParamInfo {
10658 key: "long_roc_period",
10659 label: "Long ROC Period",
10660 kind: IndicatorParamKind::Int,
10661 required: false,
10662 default: Some(ParamValueStatic::Int(14)),
10663 min: Some(1.0),
10664 max: None,
10665 step: Some(1.0),
10666 enum_values: EMPTY_ENUM_VALUES,
10667 notes: None,
10668 },
10669 IndicatorParamInfo {
10670 key: "ma_period",
10671 label: "MA Period",
10672 kind: IndicatorParamKind::Int,
10673 required: false,
10674 default: Some(ParamValueStatic::Int(10)),
10675 min: Some(1.0),
10676 max: None,
10677 step: Some(1.0),
10678 enum_values: EMPTY_ENUM_VALUES,
10679 notes: None,
10680 },
10681];
10682
10683const PARAM_PIVOT: &[IndicatorParamInfo] = &[IndicatorParamInfo {
10684 key: "mode",
10685 label: "Mode",
10686 kind: IndicatorParamKind::Int,
10687 required: false,
10688 default: Some(ParamValueStatic::Int(3)),
10689 min: Some(0.0),
10690 max: None,
10691 step: Some(1.0),
10692 enum_values: EMPTY_ENUM_VALUES,
10693 notes: None,
10694}];
10695
10696const SUPPLEMENTAL_SEED_NOTE: &str =
10697 "Phase 1 seed metadata; parameter and capability metadata will expand.";
10698
10699struct SupplementalIndicatorSeed {
10700 id: &'static str,
10701 label: &'static str,
10702 category: &'static str,
10703 input_kind: IndicatorInputKind,
10704 outputs: &'static [IndicatorOutputInfo],
10705 params: &'static [IndicatorParamInfo],
10706}
10707
10708const SUPPLEMENTAL_INDICATORS: &[SupplementalIndicatorSeed] = &[
10709 SupplementalIndicatorSeed {
10710 id: "adx",
10711 label: "ADX",
10712 category: "trend",
10713 input_kind: IndicatorInputKind::Ohlc,
10714 outputs: OUTPUTS_VALUE_F64,
10715 params: PARAM_ADX_PERIOD,
10716 },
10717 SupplementalIndicatorSeed {
10718 id: "adxr",
10719 label: "ADXR",
10720 category: "trend",
10721 input_kind: IndicatorInputKind::Ohlc,
10722 outputs: OUTPUTS_VALUE_F64,
10723 params: PARAM_ADX_PERIOD,
10724 },
10725 SupplementalIndicatorSeed {
10726 id: "dx",
10727 label: "DX",
10728 category: "trend",
10729 input_kind: IndicatorInputKind::Ohlc,
10730 outputs: OUTPUTS_VALUE_F64,
10731 params: PARAM_DX_PERIOD,
10732 },
10733 SupplementalIndicatorSeed {
10734 id: "di",
10735 label: "DI",
10736 category: "trend",
10737 input_kind: IndicatorInputKind::Ohlc,
10738 outputs: OUTPUTS_PLUS_MINUS,
10739 params: PARAM_DI,
10740 },
10741 SupplementalIndicatorSeed {
10742 id: "dm",
10743 label: "DM",
10744 category: "trend",
10745 input_kind: IndicatorInputKind::HighLow,
10746 outputs: OUTPUTS_PLUS_MINUS,
10747 params: PARAM_DM,
10748 },
10749 SupplementalIndicatorSeed {
10750 id: "vi",
10751 label: "VI",
10752 category: "trend",
10753 input_kind: IndicatorInputKind::Ohlc,
10754 outputs: OUTPUTS_PLUS_MINUS,
10755 params: PARAM_VI,
10756 },
10757 SupplementalIndicatorSeed {
10758 id: "donchian",
10759 label: "Donchian",
10760 category: "volatility",
10761 input_kind: IndicatorInputKind::HighLow,
10762 outputs: OUTPUTS_BOLLINGER,
10763 params: PARAM_DONCHIAN,
10764 },
10765 SupplementalIndicatorSeed {
10766 id: "supertrend",
10767 label: "SuperTrend",
10768 category: "trend",
10769 input_kind: IndicatorInputKind::Ohlc,
10770 outputs: OUTPUTS_TREND_CHANGED,
10771 params: PARAM_SUPERTREND,
10772 },
10773 SupplementalIndicatorSeed {
10774 id: "adjustable_ma_alternating_extremities",
10775 label: "Adjustable MA & Alternating Extremities",
10776 category: "trend",
10777 input_kind: IndicatorInputKind::Ohlc,
10778 outputs: OUTPUTS_ADJUSTABLE_MA_ALTERNATING_EXTREMITIES,
10779 params: PARAM_ADJUSTABLE_MA_ALTERNATING_EXTREMITIES,
10780 },
10781 SupplementalIndicatorSeed {
10782 id: "supertrend_recovery",
10783 label: "SuperTrend Recovery",
10784 category: "trend",
10785 input_kind: IndicatorInputKind::Ohlc,
10786 outputs: OUTPUTS_SUPERTREND_RECOVERY,
10787 params: PARAM_SUPERTREND_RECOVERY,
10788 },
10789 SupplementalIndicatorSeed {
10790 id: "keltner",
10791 label: "Keltner",
10792 category: "volatility",
10793 input_kind: IndicatorInputKind::Ohlc,
10794 outputs: OUTPUTS_BOLLINGER,
10795 params: PARAM_KELTNER,
10796 },
10797 SupplementalIndicatorSeed {
10798 id: "aroon",
10799 label: "Aroon",
10800 category: "trend",
10801 input_kind: IndicatorInputKind::HighLow,
10802 outputs: OUTPUTS_UP_DOWN,
10803 params: PARAM_AROON,
10804 },
10805 SupplementalIndicatorSeed {
10806 id: "aroonosc",
10807 label: "Aroon Oscillator",
10808 category: "momentum",
10809 input_kind: IndicatorInputKind::HighLow,
10810 outputs: OUTPUTS_VALUE_F64,
10811 params: PARAM_AROON,
10812 },
10813 SupplementalIndicatorSeed {
10814 id: "srsi",
10815 label: "Stochastic RSI",
10816 category: "momentum",
10817 input_kind: IndicatorInputKind::Slice,
10818 outputs: OUTPUTS_STOCH,
10819 params: PARAM_SRSI,
10820 },
10821 SupplementalIndicatorSeed {
10822 id: "stochastic_connors_rsi",
10823 label: "Stochastic Connors RSI",
10824 category: "momentum",
10825 input_kind: IndicatorInputKind::Slice,
10826 outputs: OUTPUTS_STOCH,
10827 params: PARAM_STOCHASTIC_CONNORS_RSI,
10828 },
10829 SupplementalIndicatorSeed {
10830 id: "kdj",
10831 label: "KDJ",
10832 category: "momentum",
10833 input_kind: IndicatorInputKind::Ohlc,
10834 outputs: OUTPUTS_KDJ,
10835 params: PARAM_KDJ,
10836 },
10837 SupplementalIndicatorSeed {
10838 id: "squeeze_momentum",
10839 label: "Squeeze Momentum",
10840 category: "momentum",
10841 input_kind: IndicatorInputKind::Ohlc,
10842 outputs: OUTPUTS_SQUEEZE_MOMENTUM,
10843 params: PARAM_SQUEEZE_MOMENTUM,
10844 },
10845 SupplementalIndicatorSeed {
10846 id: "wavetrend",
10847 label: "WaveTrend",
10848 category: "momentum",
10849 input_kind: IndicatorInputKind::Slice,
10850 outputs: OUTPUTS_WAVETREND,
10851 params: PARAM_WAVETREND,
10852 },
10853 SupplementalIndicatorSeed {
10854 id: "wto",
10855 label: "WTO",
10856 category: "momentum",
10857 input_kind: IndicatorInputKind::Slice,
10858 outputs: OUTPUTS_WTO,
10859 params: PARAM_WTO,
10860 },
10861 SupplementalIndicatorSeed {
10862 id: "accumulation_swing_index",
10863 label: "Accumulation Swing Index",
10864 category: "volatility",
10865 input_kind: IndicatorInputKind::Ohlc,
10866 outputs: OUTPUTS_VALUE_F64,
10867 params: PARAM_ACCUMULATION_SWING_INDEX,
10868 },
10869 SupplementalIndicatorSeed {
10870 id: "daily_factor",
10871 label: "Daily Factor",
10872 category: "momentum",
10873 input_kind: IndicatorInputKind::Ohlc,
10874 outputs: OUTPUTS_DAILY_FACTOR,
10875 params: PARAM_DAILY_FACTOR,
10876 },
10877 SupplementalIndicatorSeed {
10878 id: "moving_average_cross_probability",
10879 label: "Moving Average Cross Probability",
10880 category: "momentum",
10881 input_kind: IndicatorInputKind::Candles,
10882 outputs: OUTPUTS_MOVING_AVERAGE_CROSS_PROBABILITY,
10883 params: PARAM_MOVING_AVERAGE_CROSS_PROBABILITY,
10884 },
10885 SupplementalIndicatorSeed {
10886 id: "bulls_v_bears",
10887 label: "Bulls v Bears",
10888 category: "momentum",
10889 input_kind: IndicatorInputKind::Ohlc,
10890 outputs: OUTPUTS_BULLS_V_BEARS,
10891 params: PARAM_BULLS_V_BEARS,
10892 },
10893 SupplementalIndicatorSeed {
10894 id: "regression_slope_oscillator",
10895 label: "Regression Slope Oscillator",
10896 category: "momentum",
10897 input_kind: IndicatorInputKind::Candles,
10898 outputs: OUTPUTS_REGRESSION_SLOPE_OSCILLATOR,
10899 params: PARAM_REGRESSION_SLOPE_OSCILLATOR,
10900 },
10901 SupplementalIndicatorSeed {
10902 id: "smooth_theil_sen",
10903 label: "Smooth Theil-Sen",
10904 category: "trend",
10905 input_kind: IndicatorInputKind::Candles,
10906 outputs: OUTPUTS_SMOOTH_THEIL_SEN,
10907 params: PARAM_SMOOTH_THEIL_SEN,
10908 },
10909 SupplementalIndicatorSeed {
10910 id: "l2_ehlers_signal_to_noise",
10911 label: "L2 Ehlers Signal to Noise",
10912 category: "cycle",
10913 input_kind: IndicatorInputKind::Candles,
10914 outputs: OUTPUTS_VALUE_F64,
10915 params: PARAM_L2_EHLERS_SIGNAL_TO_NOISE,
10916 },
10917 SupplementalIndicatorSeed {
10918 id: "ehlers_smoothed_adaptive_momentum",
10919 label: "Ehlers Smoothed Adaptive Momentum",
10920 category: "cycle",
10921 input_kind: IndicatorInputKind::Candles,
10922 outputs: OUTPUTS_VALUE_F64,
10923 params: PARAM_EHLERS_SMOOTHED_ADAPTIVE_MOMENTUM,
10924 },
10925 SupplementalIndicatorSeed {
10926 id: "ehlers_adaptive_cyber_cycle",
10927 label: "Ehlers Adaptive Cyber Cycle",
10928 category: "cycle",
10929 input_kind: IndicatorInputKind::Candles,
10930 outputs: OUTPUTS_EHLERS_SIMPLE_CYCLE_INDICATOR,
10931 params: PARAM_EHLERS_ADAPTIVE_CYBER_CYCLE,
10932 },
10933 SupplementalIndicatorSeed {
10934 id: "ehlers_simple_cycle_indicator",
10935 label: "Ehlers Simple Cycle Indicator",
10936 category: "cycle",
10937 input_kind: IndicatorInputKind::Candles,
10938 outputs: OUTPUTS_EHLERS_SIMPLE_CYCLE_INDICATOR,
10939 params: PARAM_EHLERS_SIMPLE_CYCLE_INDICATOR,
10940 },
10941 SupplementalIndicatorSeed {
10942 id: "l1_ehlers_phasor",
10943 label: "L1 Ehlers Phasor",
10944 category: "cycle",
10945 input_kind: IndicatorInputKind::Candles,
10946 outputs: OUTPUTS_VALUE_F64,
10947 params: PARAM_L1_EHLERS_PHASOR,
10948 },
10949 SupplementalIndicatorSeed {
10950 id: "andean_oscillator",
10951 label: "Andean Oscillator",
10952 category: "trend",
10953 input_kind: IndicatorInputKind::Candles,
10954 outputs: OUTPUTS_ANDEAN_OSCILLATOR,
10955 params: PARAM_ANDEAN_OSCILLATOR,
10956 },
10957 SupplementalIndicatorSeed {
10958 id: "cycle_channel_oscillator",
10959 label: "Cycle Channel Oscillator",
10960 category: "cycle",
10961 input_kind: IndicatorInputKind::Candles,
10962 outputs: OUTPUTS_CYCLE_CHANNEL_OSCILLATOR,
10963 params: PARAM_CYCLE_CHANNEL_OSCILLATOR,
10964 },
10965 SupplementalIndicatorSeed {
10966 id: "ewma_volatility",
10967 label: "EWMA Volatility",
10968 category: "volatility",
10969 input_kind: IndicatorInputKind::Slice,
10970 outputs: OUTPUTS_VALUE_F64,
10971 params: PARAM_EWMA_VOLATILITY,
10972 },
10973 SupplementalIndicatorSeed {
10974 id: "ichimoku_oscillator",
10975 label: "Ichimoku Oscillator",
10976 category: "trend",
10977 input_kind: IndicatorInputKind::Candles,
10978 outputs: OUTPUTS_ICHIMOKU_OSCILLATOR,
10979 params: PARAM_ICHIMOKU_OSCILLATOR,
10980 },
10981 SupplementalIndicatorSeed {
10982 id: "random_walk_index",
10983 label: "Random Walk Index",
10984 category: "volatility",
10985 input_kind: IndicatorInputKind::Ohlc,
10986 outputs: OUTPUTS_RANDOM_WALK_INDEX,
10987 params: PARAM_RANDOM_WALK_INDEX,
10988 },
10989 SupplementalIndicatorSeed {
10990 id: "price_moving_average_ratio_percentile",
10991 label: "Price Moving Average Ratio & Percentile",
10992 category: "momentum",
10993 input_kind: IndicatorInputKind::Candles,
10994 outputs: OUTPUTS_PRICE_MOVING_AVERAGE_RATIO_PERCENTILE,
10995 params: PARAM_PRICE_MOVING_AVERAGE_RATIO_PERCENTILE,
10996 },
10997 SupplementalIndicatorSeed {
10998 id: "relative_strength_index_wave_indicator",
10999 label: "Relative Strength Index Wave Indicator",
11000 category: "momentum",
11001 input_kind: IndicatorInputKind::Candles,
11002 outputs: OUTPUTS_RELATIVE_STRENGTH_INDEX_WAVE_INDICATOR,
11003 params: PARAM_RELATIVE_STRENGTH_INDEX_WAVE_INDICATOR,
11004 },
11005 SupplementalIndicatorSeed {
11006 id: "mesa_stochastic_multi_length",
11007 label: "MESA Stochastic Multi Length",
11008 category: "momentum",
11009 input_kind: IndicatorInputKind::Candles,
11010 outputs: OUTPUTS_MESA_STOCHASTIC_MULTI_LENGTH,
11011 params: PARAM_MESA_STOCHASTIC_MULTI_LENGTH,
11012 },
11013 SupplementalIndicatorSeed {
11014 id: "spearman_correlation",
11015 label: "Spearman Correlation",
11016 category: "relative_strength",
11017 input_kind: IndicatorInputKind::Candles,
11018 outputs: OUTPUTS_SPEARMAN_CORRELATION,
11019 params: PARAM_SPEARMAN_CORRELATION,
11020 },
11021 SupplementalIndicatorSeed {
11022 id: "trend_trigger_factor",
11023 label: "Trend Trigger Factor",
11024 category: "momentum",
11025 input_kind: IndicatorInputKind::HighLow,
11026 outputs: OUTPUTS_VALUE_F64,
11027 params: PARAM_TREND_TRIGGER_FACTOR,
11028 },
11029 SupplementalIndicatorSeed {
11030 id: "volatility_quality_index",
11031 label: "Volatility Quality Index",
11032 category: "volatility",
11033 input_kind: IndicatorInputKind::Ohlc,
11034 outputs: OUTPUTS_VOLATILITY_QUALITY_INDEX,
11035 params: PARAM_VOLATILITY_QUALITY_INDEX,
11036 },
11037 SupplementalIndicatorSeed {
11038 id: "yang_zhang_volatility",
11039 label: "Yang-Zhang Volatility",
11040 category: "volatility",
11041 input_kind: IndicatorInputKind::Ohlc,
11042 outputs: OUTPUTS_YANG_ZHANG,
11043 params: PARAM_YANG_ZHANG,
11044 },
11045 SupplementalIndicatorSeed {
11046 id: "garman_klass_volatility",
11047 label: "Garman-Klass Volatility",
11048 category: "volatility",
11049 input_kind: IndicatorInputKind::Ohlc,
11050 outputs: OUTPUTS_VALUE_F64,
11051 params: PARAM_GARMAN_KLASS,
11052 },
11053 SupplementalIndicatorSeed {
11054 id: "atr_percentile",
11055 label: "ATR Percentile",
11056 category: "volatility",
11057 input_kind: IndicatorInputKind::Ohlc,
11058 outputs: OUTPUTS_VALUE_F64,
11059 params: PARAM_ATR_PERCENTILE,
11060 },
11061 SupplementalIndicatorSeed {
11062 id: "advance_decline_line",
11063 label: "Advance-Decline Line",
11064 category: "breadth",
11065 input_kind: IndicatorInputKind::Slice,
11066 outputs: OUTPUTS_VALUE_F64,
11067 params: PARAM_NONE,
11068 },
11069 SupplementalIndicatorSeed {
11070 id: "decisionpoint_breadth_swenlin_trading_oscillator",
11071 label: "DecisionPoint Breadth Swenlin Trading Oscillator",
11072 category: "breadth",
11073 input_kind: IndicatorInputKind::HighLow,
11074 outputs: OUTPUTS_VALUE_F64,
11075 params: PARAM_NONE,
11076 },
11077 SupplementalIndicatorSeed {
11078 id: "velocity_acceleration_indicator",
11079 label: "Velocity Acceleration Indicator",
11080 category: "momentum",
11081 input_kind: IndicatorInputKind::Candles,
11082 outputs: OUTPUTS_VALUE_F64,
11083 params: PARAM_VELOCITY_ACCELERATION_INDICATOR,
11084 },
11085 SupplementalIndicatorSeed {
11086 id: "normalized_resonator",
11087 label: "Normalized Resonator",
11088 category: "cycle",
11089 input_kind: IndicatorInputKind::Candles,
11090 outputs: OUTPUTS_OSCILLATOR_SIGNAL,
11091 params: PARAM_NORMALIZED_RESONATOR,
11092 },
11093 SupplementalIndicatorSeed {
11094 id: "monotonicity_index",
11095 label: "Monotonicity Index",
11096 category: "statistics",
11097 input_kind: IndicatorInputKind::Candles,
11098 outputs: OUTPUTS_MONOTONICITY_INDEX,
11099 params: PARAM_MONOTONICITY_INDEX,
11100 },
11101 SupplementalIndicatorSeed {
11102 id: "half_causal_estimator",
11103 label: "Half Causal Estimator",
11104 category: "statistics",
11105 input_kind: IndicatorInputKind::Candles,
11106 outputs: OUTPUTS_HALF_CAUSAL_ESTIMATOR,
11107 params: PARAM_HALF_CAUSAL_ESTIMATOR,
11108 },
11109 SupplementalIndicatorSeed {
11110 id: "bull_power_vs_bear_power",
11111 label: "Bull Power vs Bear Power",
11112 category: "momentum",
11113 input_kind: IndicatorInputKind::Ohlc,
11114 outputs: OUTPUTS_VALUE_F64,
11115 params: PARAM_BULL_POWER_VS_BEAR_POWER,
11116 },
11117 SupplementalIndicatorSeed {
11118 id: "historical_volatility",
11119 label: "Historical Volatility",
11120 category: "volatility",
11121 input_kind: IndicatorInputKind::Slice,
11122 outputs: OUTPUTS_VALUE_F64,
11123 params: PARAM_HISTORICAL_VOLATILITY,
11124 },
11125 SupplementalIndicatorSeed {
11126 id: "absolute_strength_index_oscillator",
11127 label: "Absolute Strength Index Oscillator",
11128 category: "momentum",
11129 input_kind: IndicatorInputKind::Slice,
11130 outputs: OUTPUTS_OSCILLATOR_SIGNAL_HISTOGRAM,
11131 params: PARAM_ABSOLUTE_STRENGTH_INDEX_OSCILLATOR,
11132 },
11133 SupplementalIndicatorSeed {
11134 id: "adaptive_bandpass_trigger_oscillator",
11135 label: "Adaptive Bandpass Trigger Oscillator",
11136 category: "cycle",
11137 input_kind: IndicatorInputKind::Slice,
11138 outputs: OUTPUTS_IN_PHASE_LEAD,
11139 params: PARAM_ADAPTIVE_BANDPASS_TRIGGER_OSCILLATOR,
11140 },
11141 SupplementalIndicatorSeed {
11142 id: "premier_rsi_oscillator",
11143 label: "Premier RSI Oscillator",
11144 category: "momentum",
11145 input_kind: IndicatorInputKind::Slice,
11146 outputs: OUTPUTS_VALUE_F64,
11147 params: PARAM_PREMIER_RSI_OSCILLATOR,
11148 },
11149 SupplementalIndicatorSeed {
11150 id: "multi_length_stochastic_average",
11151 label: "Multi-Length Stochastic Average",
11152 category: "momentum",
11153 input_kind: IndicatorInputKind::Candles,
11154 outputs: OUTPUTS_VALUE_F64,
11155 params: PARAM_MULTI_LENGTH_STOCHASTIC_AVERAGE,
11156 },
11157 SupplementalIndicatorSeed {
11158 id: "hull_butterfly_oscillator",
11159 label: "Hull Butterfly Oscillator",
11160 category: "momentum",
11161 input_kind: IndicatorInputKind::Candles,
11162 outputs: OUTPUTS_HULL_BUTTERFLY_OSCILLATOR,
11163 params: PARAM_HULL_BUTTERFLY_OSCILLATOR,
11164 },
11165 SupplementalIndicatorSeed {
11166 id: "fibonacci_trailing_stop",
11167 label: "Fibonacci Trailing Stop",
11168 category: "trend",
11169 input_kind: IndicatorInputKind::Ohlc,
11170 outputs: OUTPUTS_FIBONACCI_TRAILING_STOP,
11171 params: PARAM_FIBONACCI_TRAILING_STOP,
11172 },
11173 SupplementalIndicatorSeed {
11174 id: "fibonacci_entry_bands",
11175 label: "Fibonacci Entry Bands",
11176 category: "trend",
11177 input_kind: IndicatorInputKind::Ohlc,
11178 outputs: OUTPUTS_FIBONACCI_ENTRY_BANDS,
11179 params: PARAM_FIBONACCI_ENTRY_BANDS,
11180 },
11181 SupplementalIndicatorSeed {
11182 id: "volume_energy_reservoirs",
11183 label: "Volume Energy Reservoirs",
11184 category: "volume",
11185 input_kind: IndicatorInputKind::Ohlcv,
11186 outputs: OUTPUTS_VOLUME_ENERGY_RESERVOIRS,
11187 params: PARAM_VOLUME_ENERGY_RESERVOIRS,
11188 },
11189 SupplementalIndicatorSeed {
11190 id: "neighboring_trailing_stop",
11191 label: "Neighboring Trailing Stop",
11192 category: "trend",
11193 input_kind: IndicatorInputKind::Ohlc,
11194 outputs: OUTPUTS_NEIGHBORING_TRAILING_STOP,
11195 params: PARAM_NEIGHBORING_TRAILING_STOP,
11196 },
11197 SupplementalIndicatorSeed {
11198 id: "macd_wave_signal_pro",
11199 label: "MACD Wave Signal Pro",
11200 category: "momentum",
11201 input_kind: IndicatorInputKind::Ohlc,
11202 outputs: OUTPUTS_MACD_WAVE_SIGNAL_PRO,
11203 params: PARAM_NONE,
11204 },
11205 SupplementalIndicatorSeed {
11206 id: "hema_trend_levels",
11207 label: "HEMA Trend Levels",
11208 category: "trend",
11209 input_kind: IndicatorInputKind::Ohlc,
11210 outputs: OUTPUTS_HEMA_TREND_LEVELS,
11211 params: PARAM_HEMA_TREND_LEVELS,
11212 },
11213 SupplementalIndicatorSeed {
11214 id: "grover_llorens_cycle_oscillator",
11215 label: "Grover Llorens Cycle Oscillator",
11216 category: "cycle",
11217 input_kind: IndicatorInputKind::Ohlc,
11218 outputs: OUTPUTS_VALUE_F64,
11219 params: PARAM_GROVER_LLORENS_CYCLE_OSCILLATOR,
11220 },
11221 SupplementalIndicatorSeed {
11222 id: "squeeze_index",
11223 label: "Squeeze Index",
11224 category: "volatility",
11225 input_kind: IndicatorInputKind::Slice,
11226 outputs: OUTPUTS_VALUE_F64,
11227 params: PARAM_SQUEEZE_INDEX,
11228 },
11229 SupplementalIndicatorSeed {
11230 id: "stochastic_distance",
11231 label: "Stochastic Distance",
11232 category: "momentum",
11233 input_kind: IndicatorInputKind::Slice,
11234 outputs: OUTPUTS_OSCILLATOR_SIGNAL,
11235 params: PARAM_STOCHASTIC_DISTANCE,
11236 },
11237 SupplementalIndicatorSeed {
11238 id: "vertical_horizontal_filter",
11239 label: "Vertical Horizontal Filter",
11240 category: "trend",
11241 input_kind: IndicatorInputKind::Slice,
11242 outputs: OUTPUTS_VALUE_F64,
11243 params: PARAM_VERTICAL_HORIZONTAL_FILTER,
11244 },
11245 SupplementalIndicatorSeed {
11246 id: "intraday_momentum_index",
11247 label: "Intraday Momentum Index",
11248 category: "momentum",
11249 input_kind: IndicatorInputKind::Ohlc,
11250 outputs: &[
11251 OUTPUT_IMI,
11252 OUTPUT_UPPER_HIT,
11253 OUTPUT_LOWER_HIT,
11254 OUTPUT_SIGNAL,
11255 ],
11256 params: PARAM_INTRADAY_MOMENTUM_INDEX,
11257 },
11258 SupplementalIndicatorSeed {
11259 id: "vwap_zscore_with_signals",
11260 label: "VWAP Z-Score With Signals",
11261 category: "volume",
11262 input_kind: IndicatorInputKind::CloseVolume,
11263 outputs: &[
11264 OUTPUT_ZVWAP,
11265 OUTPUT_SUPPORT_SIGNAL,
11266 OUTPUT_RESISTANCE_SIGNAL,
11267 ],
11268 params: PARAM_VWAP_ZSCORE_WITH_SIGNALS,
11269 },
11270 SupplementalIndicatorSeed {
11271 id: "demand_index",
11272 label: "Demand Index",
11273 category: "volume",
11274 input_kind: IndicatorInputKind::Ohlcv,
11275 outputs: &[OUTPUT_DEMAND_INDEX, OUTPUT_SIGNAL],
11276 params: PARAM_DEMAND_INDEX,
11277 },
11278 SupplementalIndicatorSeed {
11279 id: "didi_index",
11280 label: "Didi Index",
11281 category: "momentum",
11282 input_kind: IndicatorInputKind::Slice,
11283 outputs: &[
11284 OUTPUT_SHORT,
11285 OUTPUT_LONG,
11286 OUTPUT_CROSSOVER,
11287 OUTPUT_CROSSUNDER,
11288 ],
11289 params: PARAM_DIDI_INDEX,
11290 },
11291 SupplementalIndicatorSeed {
11292 id: "ehlers_autocorrelation_periodogram",
11293 label: "Ehlers Autocorrelation Periodogram",
11294 category: "cycle",
11295 input_kind: IndicatorInputKind::Slice,
11296 outputs: &[OUTPUT_DOMINANT_CYCLE, OUTPUT_NORMALIZED_POWER],
11297 params: PARAM_EHLERS_AUTOCORRELATION_PERIODOGRAM,
11298 },
11299 SupplementalIndicatorSeed {
11300 id: "ehlers_linear_extrapolation_predictor",
11301 label: "Ehlers Linear Extrapolation Predictor",
11302 category: "cycle",
11303 input_kind: IndicatorInputKind::Slice,
11304 outputs: &[
11305 OUTPUT_PREDICTION,
11306 OUTPUT_FILTER,
11307 OUTPUT_STATE,
11308 OUTPUT_GO_LONG,
11309 OUTPUT_GO_SHORT,
11310 ],
11311 params: PARAM_EHLERS_LINEAR_EXTRAPOLATION_PREDICTOR,
11312 },
11313 SupplementalIndicatorSeed {
11314 id: "kase_peak_oscillator_with_divergences",
11315 label: "Kase Peak Oscillator With Divergences",
11316 category: "momentum",
11317 input_kind: IndicatorInputKind::Ohlc,
11318 outputs: &[
11319 OUTPUT_OSCILLATOR,
11320 OUTPUT_HIST,
11321 OUTPUT_MAX_PEAK_VALUE,
11322 OUTPUT_MIN_PEAK_VALUE,
11323 OUTPUT_MARKET_EXTREME,
11324 OUTPUT_REGULAR_BULLISH,
11325 OUTPUT_HIDDEN_BULLISH,
11326 OUTPUT_REGULAR_BEARISH,
11327 OUTPUT_HIDDEN_BEARISH,
11328 OUTPUT_GO_LONG,
11329 OUTPUT_GO_SHORT,
11330 ],
11331 params: PARAM_KASE_PEAK_OSCILLATOR_WITH_DIVERGENCES,
11332 },
11333 SupplementalIndicatorSeed {
11334 id: "gopalakrishnan_range_index",
11335 label: "Gopalakrishnan Range Index",
11336 category: "volatility",
11337 input_kind: IndicatorInputKind::HighLow,
11338 outputs: OUTPUTS_VALUE_F64,
11339 params: PARAM_GOPALAKRISHNAN_RANGE_INDEX,
11340 },
11341 SupplementalIndicatorSeed {
11342 id: "atr",
11343 label: "ATR",
11344 category: "volatility",
11345 input_kind: IndicatorInputKind::Ohlc,
11346 outputs: OUTPUTS_VALUE_F64,
11347 params: PARAM_ATR_PERIOD,
11348 },
11349 SupplementalIndicatorSeed {
11350 id: "ad",
11351 label: "AD",
11352 category: "volume",
11353 input_kind: IndicatorInputKind::Ohlcv,
11354 outputs: OUTPUTS_VALUE_F64,
11355 params: PARAM_NONE,
11356 },
11357 SupplementalIndicatorSeed {
11358 id: "adosc",
11359 label: "ADOSC",
11360 category: "volume",
11361 input_kind: IndicatorInputKind::Ohlcv,
11362 outputs: OUTPUTS_VALUE_F64,
11363 params: PARAM_ADOSC,
11364 },
11365 SupplementalIndicatorSeed {
11366 id: "ao",
11367 label: "AO",
11368 category: "momentum",
11369 input_kind: IndicatorInputKind::HighLow,
11370 outputs: OUTPUTS_VALUE_F64,
11371 params: PARAM_AO,
11372 },
11373 SupplementalIndicatorSeed {
11374 id: "bop",
11375 label: "BOP",
11376 category: "momentum",
11377 input_kind: IndicatorInputKind::Ohlc,
11378 outputs: OUTPUTS_VALUE_F64,
11379 params: PARAM_NONE,
11380 },
11381 SupplementalIndicatorSeed {
11382 id: "emv",
11383 label: "EMV",
11384 category: "volume",
11385 input_kind: IndicatorInputKind::Ohlcv,
11386 outputs: OUTPUTS_VALUE_F64,
11387 params: PARAM_NONE,
11388 },
11389 SupplementalIndicatorSeed {
11390 id: "efi",
11391 label: "EFI",
11392 category: "volume",
11393 input_kind: IndicatorInputKind::CloseVolume,
11394 outputs: OUTPUTS_VALUE_F64,
11395 params: PARAM_EFI_PERIOD,
11396 },
11397 SupplementalIndicatorSeed {
11398 id: "dti",
11399 label: "DTI",
11400 category: "momentum",
11401 input_kind: IndicatorInputKind::HighLow,
11402 outputs: OUTPUTS_VALUE_F64,
11403 params: PARAM_DTI,
11404 },
11405 SupplementalIndicatorSeed {
11406 id: "mfi",
11407 label: "MFI",
11408 category: "volume",
11409 input_kind: IndicatorInputKind::CloseVolume,
11410 outputs: OUTPUTS_VALUE_F64,
11411 params: PARAM_MFI_PERIOD,
11412 },
11413 SupplementalIndicatorSeed {
11414 id: "volume_weighted_rsi",
11415 label: "Volume Weighted RSI",
11416 category: "volume",
11417 input_kind: IndicatorInputKind::CloseVolume,
11418 outputs: OUTPUTS_VALUE_F64,
11419 params: PARAM_RSI_PERIOD,
11420 },
11421 SupplementalIndicatorSeed {
11422 id: "mass",
11423 label: "MASS",
11424 category: "volatility",
11425 input_kind: IndicatorInputKind::HighLow,
11426 outputs: OUTPUTS_VALUE_F64,
11427 params: PARAM_MASS_PERIOD,
11428 },
11429 SupplementalIndicatorSeed {
11430 id: "kvo",
11431 label: "KVO",
11432 category: "volume",
11433 input_kind: IndicatorInputKind::Ohlcv,
11434 outputs: OUTPUTS_VALUE_F64,
11435 params: PARAM_KVO,
11436 },
11437 SupplementalIndicatorSeed {
11438 id: "vosc",
11439 label: "VOSC",
11440 category: "volume",
11441 input_kind: IndicatorInputKind::Slice,
11442 outputs: OUTPUTS_VALUE_F64,
11443 params: PARAM_VOSC,
11444 },
11445 SupplementalIndicatorSeed {
11446 id: "rsi",
11447 label: "RSI",
11448 category: "momentum",
11449 input_kind: IndicatorInputKind::Slice,
11450 outputs: OUTPUTS_VALUE_F64,
11451 params: PARAM_RSI_PERIOD,
11452 },
11453 SupplementalIndicatorSeed {
11454 id: "rsx",
11455 label: "RSX",
11456 category: "momentum",
11457 input_kind: IndicatorInputKind::Slice,
11458 outputs: OUTPUTS_VALUE_F64,
11459 params: PARAM_RSI_PERIOD,
11460 },
11461 SupplementalIndicatorSeed {
11462 id: "roc",
11463 label: "ROC",
11464 category: "momentum",
11465 input_kind: IndicatorInputKind::Slice,
11466 outputs: OUTPUTS_VALUE_F64,
11467 params: PARAM_ROC_PERIOD,
11468 },
11469 SupplementalIndicatorSeed {
11470 id: "linear_correlation_oscillator",
11471 label: "Linear Correlation Oscillator",
11472 category: "momentum",
11473 input_kind: IndicatorInputKind::Slice,
11474 outputs: OUTPUTS_VALUE_F64,
11475 params: PARAM_LINEAR_CORRELATION_OSCILLATOR_PERIOD,
11476 },
11477 SupplementalIndicatorSeed {
11478 id: "ehlers_fm_demodulator",
11479 label: "Ehlers FM Demodulator",
11480 category: "momentum",
11481 input_kind: IndicatorInputKind::Ohlc,
11482 outputs: OUTPUTS_VALUE_F64,
11483 params: PARAM_EHLERS_FM_DEMODULATOR_PERIOD,
11484 },
11485 SupplementalIndicatorSeed {
11486 id: "ehlers_adaptive_cg",
11487 label: "Ehlers Adaptive CG",
11488 category: "momentum",
11489 input_kind: IndicatorInputKind::Slice,
11490 outputs: OUTPUTS_EHLERS_ADAPTIVE_CG,
11491 params: PARAM_EHLERS_ADAPTIVE_CG,
11492 },
11493 SupplementalIndicatorSeed {
11494 id: "adaptive_momentum_oscillator",
11495 label: "Adaptive Momentum Oscillator",
11496 category: "momentum",
11497 input_kind: IndicatorInputKind::Slice,
11498 outputs: OUTPUTS_ADAPTIVE_MOMENTUM_OSCILLATOR,
11499 params: PARAM_ADAPTIVE_MOMENTUM_OSCILLATOR,
11500 },
11501 SupplementalIndicatorSeed {
11502 id: "velocity",
11503 label: "Velocity",
11504 category: "momentum",
11505 input_kind: IndicatorInputKind::Slice,
11506 outputs: OUTPUTS_VALUE_F64,
11507 params: PARAM_VELOCITY,
11508 },
11509 SupplementalIndicatorSeed {
11510 id: "normalized_volume_true_range",
11511 label: "Normalized Volume True Range",
11512 category: "volume",
11513 input_kind: IndicatorInputKind::Ohlcv,
11514 outputs: OUTPUTS_NORMALIZED_VOLUME_TRUE_RANGE,
11515 params: PARAM_NORMALIZED_VOLUME_TRUE_RANGE,
11516 },
11517 SupplementalIndicatorSeed {
11518 id: "exponential_trend",
11519 label: "Exponential Trend",
11520 category: "trend",
11521 input_kind: IndicatorInputKind::Ohlc,
11522 outputs: OUTPUTS_EXPONENTIAL_TREND,
11523 params: PARAM_EXPONENTIAL_TREND,
11524 },
11525 SupplementalIndicatorSeed {
11526 id: "trend_flow_trail",
11527 label: "Trend Flow Trail",
11528 category: "trend",
11529 input_kind: IndicatorInputKind::Ohlcv,
11530 outputs: OUTPUTS_TREND_FLOW_TRAIL,
11531 params: PARAM_TREND_FLOW_TRAIL,
11532 },
11533 SupplementalIndicatorSeed {
11534 id: "range_breakout_signals",
11535 label: "Range Breakout Signals",
11536 category: "trend",
11537 input_kind: IndicatorInputKind::Ohlcv,
11538 outputs: OUTPUTS_RANGE_BREAKOUT_SIGNALS,
11539 params: PARAM_RANGE_BREAKOUT_SIGNALS,
11540 },
11541 SupplementalIndicatorSeed {
11542 id: "apo",
11543 label: "APO",
11544 category: "momentum",
11545 input_kind: IndicatorInputKind::Slice,
11546 outputs: OUTPUTS_VALUE_F64,
11547 params: PARAM_APO,
11548 },
11549 SupplementalIndicatorSeed {
11550 id: "cci",
11551 label: "CCI",
11552 category: "momentum",
11553 input_kind: IndicatorInputKind::Slice,
11554 outputs: OUTPUTS_VALUE_F64,
11555 params: PARAM_CCI_PERIOD,
11556 },
11557 SupplementalIndicatorSeed {
11558 id: "cci_cycle",
11559 label: "CCI Cycle",
11560 category: "momentum",
11561 input_kind: IndicatorInputKind::Slice,
11562 outputs: OUTPUTS_VALUE_F64,
11563 params: PARAM_CCI_CYCLE,
11564 },
11565 SupplementalIndicatorSeed {
11566 id: "cfo",
11567 label: "CFO",
11568 category: "momentum",
11569 input_kind: IndicatorInputKind::Slice,
11570 outputs: OUTPUTS_VALUE_F64,
11571 params: PARAM_CFO,
11572 },
11573 SupplementalIndicatorSeed {
11574 id: "cg",
11575 label: "CG",
11576 category: "momentum",
11577 input_kind: IndicatorInputKind::Slice,
11578 outputs: OUTPUTS_VALUE_F64,
11579 params: PARAM_CG_PERIOD,
11580 },
11581 SupplementalIndicatorSeed {
11582 id: "er",
11583 label: "ER",
11584 category: "momentum",
11585 input_kind: IndicatorInputKind::Slice,
11586 outputs: OUTPUTS_VALUE_F64,
11587 params: PARAM_ER_PERIOD,
11588 },
11589 SupplementalIndicatorSeed {
11590 id: "kurtosis",
11591 label: "Kurtosis",
11592 category: "statistics",
11593 input_kind: IndicatorInputKind::Slice,
11594 outputs: OUTPUTS_VALUE_F64,
11595 params: PARAM_KURTOSIS_PERIOD,
11596 },
11597 SupplementalIndicatorSeed {
11598 id: "natr",
11599 label: "NATR",
11600 category: "volatility",
11601 input_kind: IndicatorInputKind::Ohlc,
11602 outputs: OUTPUTS_VALUE_F64,
11603 params: PARAM_NATR_PERIOD,
11604 },
11605 SupplementalIndicatorSeed {
11606 id: "mean_ad",
11607 label: "Mean AD",
11608 category: "statistics",
11609 input_kind: IndicatorInputKind::Slice,
11610 outputs: OUTPUTS_VALUE_F64,
11611 params: PARAM_MEAN_AD_PERIOD,
11612 },
11613 SupplementalIndicatorSeed {
11614 id: "medium_ad",
11615 label: "Medium AD",
11616 category: "statistics",
11617 input_kind: IndicatorInputKind::Slice,
11618 outputs: OUTPUTS_VALUE_F64,
11619 params: PARAM_MEDIUM_AD_PERIOD,
11620 },
11621 SupplementalIndicatorSeed {
11622 id: "deviation",
11623 label: "Deviation",
11624 category: "statistics",
11625 input_kind: IndicatorInputKind::Slice,
11626 outputs: OUTPUTS_VALUE_F64,
11627 params: PARAM_DEVIATION,
11628 },
11629 SupplementalIndicatorSeed {
11630 id: "dpo",
11631 label: "DPO",
11632 category: "trend",
11633 input_kind: IndicatorInputKind::Slice,
11634 outputs: OUTPUTS_VALUE_F64,
11635 params: PARAM_DPO_PERIOD,
11636 },
11637 SupplementalIndicatorSeed {
11638 id: "fosc",
11639 label: "FOSC",
11640 category: "momentum",
11641 input_kind: IndicatorInputKind::Slice,
11642 outputs: OUTPUTS_VALUE_F64,
11643 params: PARAM_FOSC_PERIOD,
11644 },
11645 SupplementalIndicatorSeed {
11646 id: "ift_rsi",
11647 label: "IFT RSI",
11648 category: "momentum",
11649 input_kind: IndicatorInputKind::Slice,
11650 outputs: OUTPUTS_VALUE_F64,
11651 params: PARAM_IFT_RSI,
11652 },
11653 SupplementalIndicatorSeed {
11654 id: "linearreg_angle",
11655 label: "Linear Regression Angle",
11656 category: "trend",
11657 input_kind: IndicatorInputKind::Slice,
11658 outputs: OUTPUTS_VALUE_F64,
11659 params: PARAM_LINEARREG_ANGLE_PERIOD,
11660 },
11661 SupplementalIndicatorSeed {
11662 id: "linearreg_intercept",
11663 label: "Linear Regression Intercept",
11664 category: "trend",
11665 input_kind: IndicatorInputKind::Slice,
11666 outputs: OUTPUTS_VALUE_F64,
11667 params: PARAM_LINEARREG_INTERCEPT_PERIOD,
11668 },
11669 SupplementalIndicatorSeed {
11670 id: "linearreg_slope",
11671 label: "Linear Regression Slope",
11672 category: "trend",
11673 input_kind: IndicatorInputKind::Slice,
11674 outputs: OUTPUTS_VALUE_F64,
11675 params: PARAM_LINEARREG_SLOPE_PERIOD,
11676 },
11677 SupplementalIndicatorSeed {
11678 id: "pfe",
11679 label: "PFE",
11680 category: "trend",
11681 input_kind: IndicatorInputKind::Slice,
11682 outputs: OUTPUTS_VALUE_F64,
11683 params: PARAM_PFE,
11684 },
11685 SupplementalIndicatorSeed {
11686 id: "qstick",
11687 label: "QStick",
11688 category: "trend",
11689 input_kind: IndicatorInputKind::Ohlc,
11690 outputs: OUTPUTS_VALUE_F64,
11691 params: PARAM_QSTICK,
11692 },
11693 SupplementalIndicatorSeed {
11694 id: "reverse_rsi",
11695 label: "Reverse RSI",
11696 category: "momentum",
11697 input_kind: IndicatorInputKind::Slice,
11698 outputs: OUTPUTS_VALUE_F64,
11699 params: PARAM_REVERSE_RSI,
11700 },
11701 SupplementalIndicatorSeed {
11702 id: "percentile_nearest_rank",
11703 label: "Percentile Nearest Rank",
11704 category: "statistics",
11705 input_kind: IndicatorInputKind::Slice,
11706 outputs: OUTPUTS_VALUE_F64,
11707 params: PARAM_PERCENTILE_NEAREST_RANK,
11708 },
11709 SupplementalIndicatorSeed {
11710 id: "ui",
11711 label: "UI",
11712 category: "volatility",
11713 input_kind: IndicatorInputKind::Slice,
11714 outputs: OUTPUTS_VALUE_F64,
11715 params: PARAM_UI,
11716 },
11717 SupplementalIndicatorSeed {
11718 id: "zscore",
11719 label: "Zscore",
11720 category: "statistics",
11721 input_kind: IndicatorInputKind::Slice,
11722 outputs: OUTPUTS_VALUE_F64,
11723 params: PARAM_ZSCORE,
11724 },
11725 SupplementalIndicatorSeed {
11726 id: "medprice",
11727 label: "Medprice",
11728 category: "price",
11729 input_kind: IndicatorInputKind::HighLow,
11730 outputs: OUTPUTS_VALUE_F64,
11731 params: PARAM_NONE,
11732 },
11733 SupplementalIndicatorSeed {
11734 id: "midpoint",
11735 label: "Midpoint",
11736 category: "price",
11737 input_kind: IndicatorInputKind::Slice,
11738 outputs: OUTPUTS_VALUE_F64,
11739 params: PARAM_MIDPOINT_PERIOD,
11740 },
11741 SupplementalIndicatorSeed {
11742 id: "midprice",
11743 label: "Midprice",
11744 category: "price",
11745 input_kind: IndicatorInputKind::HighLow,
11746 outputs: OUTPUTS_VALUE_F64,
11747 params: PARAM_MIDPRICE_PERIOD,
11748 },
11749 SupplementalIndicatorSeed {
11750 id: "wclprice",
11751 label: "WCLPRICE",
11752 category: "price",
11753 input_kind: IndicatorInputKind::Ohlc,
11754 outputs: OUTPUTS_VALUE_F64,
11755 params: PARAM_NONE,
11756 },
11757 SupplementalIndicatorSeed {
11758 id: "obv",
11759 label: "OBV",
11760 category: "volume",
11761 input_kind: IndicatorInputKind::CloseVolume,
11762 outputs: OUTPUTS_VALUE_F64,
11763 params: PARAM_NONE,
11764 },
11765 SupplementalIndicatorSeed {
11766 id: "vpt",
11767 label: "VPT",
11768 category: "volume",
11769 input_kind: IndicatorInputKind::CloseVolume,
11770 outputs: OUTPUTS_VALUE_F64,
11771 params: PARAM_NONE,
11772 },
11773 SupplementalIndicatorSeed {
11774 id: "nvi",
11775 label: "NVI",
11776 category: "volume",
11777 input_kind: IndicatorInputKind::CloseVolume,
11778 outputs: OUTPUTS_VALUE_F64,
11779 params: PARAM_NONE,
11780 },
11781 SupplementalIndicatorSeed {
11782 id: "pvi",
11783 label: "PVI",
11784 category: "volume",
11785 input_kind: IndicatorInputKind::CloseVolume,
11786 outputs: OUTPUTS_VALUE_F64,
11787 params: PARAM_PVI,
11788 },
11789 SupplementalIndicatorSeed {
11790 id: "mom",
11791 label: "MOM",
11792 category: "momentum",
11793 input_kind: IndicatorInputKind::Slice,
11794 outputs: OUTPUTS_VALUE_F64,
11795 params: PARAM_MOM_PERIOD,
11796 },
11797 SupplementalIndicatorSeed {
11798 id: "cmo",
11799 label: "CMO",
11800 category: "momentum",
11801 input_kind: IndicatorInputKind::Slice,
11802 outputs: OUTPUTS_VALUE_F64,
11803 params: PARAM_CMO_PERIOD,
11804 },
11805 SupplementalIndicatorSeed {
11806 id: "dec_osc",
11807 label: "Dec Osc",
11808 category: "momentum",
11809 input_kind: IndicatorInputKind::Slice,
11810 outputs: OUTPUTS_VALUE_F64,
11811 params: PARAM_DEC_OSC,
11812 },
11813 SupplementalIndicatorSeed {
11814 id: "lrsi",
11815 label: "LRSI",
11816 category: "momentum",
11817 input_kind: IndicatorInputKind::HighLow,
11818 outputs: OUTPUTS_VALUE_F64,
11819 params: PARAM_LRSI_ALPHA,
11820 },
11821 SupplementalIndicatorSeed {
11822 id: "rocp",
11823 label: "ROCP",
11824 category: "momentum",
11825 input_kind: IndicatorInputKind::Slice,
11826 outputs: OUTPUTS_VALUE_F64,
11827 params: PARAM_ROCP_PERIOD,
11828 },
11829 SupplementalIndicatorSeed {
11830 id: "rocr",
11831 label: "ROCR",
11832 category: "momentum",
11833 input_kind: IndicatorInputKind::Slice,
11834 outputs: OUTPUTS_VALUE_F64,
11835 params: PARAM_ROCR_PERIOD,
11836 },
11837 SupplementalIndicatorSeed {
11838 id: "tsf",
11839 label: "TSF",
11840 category: "trend",
11841 input_kind: IndicatorInputKind::Slice,
11842 outputs: OUTPUTS_VALUE_F64,
11843 params: PARAM_TSF_PERIOD,
11844 },
11845 SupplementalIndicatorSeed {
11846 id: "adaptive_macd",
11847 label: "Adaptive MACD",
11848 category: "momentum",
11849 input_kind: IndicatorInputKind::Slice,
11850 outputs: OUTPUTS_MACD,
11851 params: PARAM_ADAPTIVE_MACD,
11852 },
11853 SupplementalIndicatorSeed {
11854 id: "polynomial_regression_extrapolation",
11855 label: "Polynomial Regression Extrapolation",
11856 category: "trend",
11857 input_kind: IndicatorInputKind::Slice,
11858 outputs: OUTPUTS_VALUE_F64,
11859 params: PARAM_POLYNOMIAL_REGRESSION_EXTRAPOLATION,
11860 },
11861 SupplementalIndicatorSeed {
11862 id: "statistical_trailing_stop",
11863 label: "Statistical Trailing Stop",
11864 category: "trend",
11865 input_kind: IndicatorInputKind::Ohlc,
11866 outputs: OUTPUTS_STATISTICAL_TRAILING_STOP,
11867 params: PARAM_STATISTICAL_TRAILING_STOP,
11868 },
11869 SupplementalIndicatorSeed {
11870 id: "standardized_psar_oscillator",
11871 label: "Standardized PSAR Oscillator",
11872 category: "momentum",
11873 input_kind: IndicatorInputKind::Ohlc,
11874 outputs: OUTPUTS_STANDARDIZED_PSAR_OSCILLATOR,
11875 params: PARAM_STANDARDIZED_PSAR_OSCILLATOR,
11876 },
11877 SupplementalIndicatorSeed {
11878 id: "geometric_bias_oscillator",
11879 label: "Geometric Bias Oscillator",
11880 category: "momentum",
11881 input_kind: IndicatorInputKind::Ohlc,
11882 outputs: OUTPUTS_VALUE_F64,
11883 params: PARAM_GEOMETRIC_BIAS_OSCILLATOR,
11884 },
11885 SupplementalIndicatorSeed {
11886 id: "vdubus_divergence_wave_pattern_generator",
11887 label: "Vdubus Divergence Wave Pattern Generator",
11888 category: "pattern_recognition",
11889 input_kind: IndicatorInputKind::Ohlc,
11890 outputs: OUTPUTS_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR,
11891 params: PARAM_VDUBUS_DIVERGENCE_WAVE_PATTERN_GENERATOR,
11892 },
11893 SupplementalIndicatorSeed {
11894 id: "ppo",
11895 label: "PPO",
11896 category: "momentum",
11897 input_kind: IndicatorInputKind::Slice,
11898 outputs: OUTPUTS_VALUE_F64,
11899 params: PARAM_PPO,
11900 },
11901 SupplementalIndicatorSeed {
11902 id: "trix",
11903 label: "TRIX",
11904 category: "momentum",
11905 input_kind: IndicatorInputKind::Slice,
11906 outputs: OUTPUTS_VALUE_F64,
11907 params: PARAM_TRIX_PERIOD,
11908 },
11909 SupplementalIndicatorSeed {
11910 id: "tsi",
11911 label: "TSI",
11912 category: "momentum",
11913 input_kind: IndicatorInputKind::Slice,
11914 outputs: OUTPUTS_VALUE_F64,
11915 params: PARAM_TSI,
11916 },
11917 SupplementalIndicatorSeed {
11918 id: "stddev",
11919 label: "StdDev",
11920 category: "volatility",
11921 input_kind: IndicatorInputKind::Slice,
11922 outputs: OUTPUTS_VALUE_F64,
11923 params: PARAM_STDDEV,
11924 },
11925 SupplementalIndicatorSeed {
11926 id: "var",
11927 label: "VAR",
11928 category: "volatility",
11929 input_kind: IndicatorInputKind::Slice,
11930 outputs: OUTPUTS_VALUE_F64,
11931 params: PARAM_VAR,
11932 },
11933 SupplementalIndicatorSeed {
11934 id: "willr",
11935 label: "WILLR",
11936 category: "momentum",
11937 input_kind: IndicatorInputKind::Ohlc,
11938 outputs: OUTPUTS_VALUE_F64,
11939 params: PARAM_WILLR_PERIOD,
11940 },
11941 SupplementalIndicatorSeed {
11942 id: "ultosc",
11943 label: "ULTOSC",
11944 category: "momentum",
11945 input_kind: IndicatorInputKind::Ohlc,
11946 outputs: OUTPUTS_VALUE_F64,
11947 params: PARAM_ULTOSC,
11948 },
11949 SupplementalIndicatorSeed {
11950 id: "macd",
11951 label: "MACD",
11952 category: "momentum",
11953 input_kind: IndicatorInputKind::Slice,
11954 outputs: OUTPUTS_MACD,
11955 params: PARAM_MACD,
11956 },
11957 SupplementalIndicatorSeed {
11958 id: "bollinger_bands",
11959 label: "Bollinger Bands",
11960 category: "volatility",
11961 input_kind: IndicatorInputKind::Slice,
11962 outputs: OUTPUTS_BOLLINGER,
11963 params: PARAM_BOLLINGER,
11964 },
11965 SupplementalIndicatorSeed {
11966 id: "bollinger_bands_width",
11967 label: "Bollinger Bands Width",
11968 category: "volatility",
11969 input_kind: IndicatorInputKind::Slice,
11970 outputs: OUTPUTS_VALUE_F64,
11971 params: PARAM_BOLLINGER,
11972 },
11973 SupplementalIndicatorSeed {
11974 id: "stoch",
11975 label: "Stochastic",
11976 category: "momentum",
11977 input_kind: IndicatorInputKind::Ohlc,
11978 outputs: OUTPUTS_STOCH,
11979 params: PARAM_STOCH,
11980 },
11981 SupplementalIndicatorSeed {
11982 id: "stochf",
11983 label: "Fast Stochastic",
11984 category: "momentum",
11985 input_kind: IndicatorInputKind::Ohlc,
11986 outputs: OUTPUTS_STOCH,
11987 params: PARAM_STOCHF,
11988 },
11989 SupplementalIndicatorSeed {
11990 id: "vwmacd",
11991 label: "VWMACD",
11992 category: "volume",
11993 input_kind: IndicatorInputKind::CloseVolume,
11994 outputs: OUTPUTS_MACD,
11995 params: PARAM_VW_MACD,
11996 },
11997 SupplementalIndicatorSeed {
11998 id: "vpci",
11999 label: "VPCI",
12000 category: "volume",
12001 input_kind: IndicatorInputKind::CloseVolume,
12002 outputs: OUTPUTS_VPCI,
12003 params: PARAM_VPCI,
12004 },
12005 SupplementalIndicatorSeed {
12006 id: "ttm_trend",
12007 label: "TTM Trend",
12008 category: "trend",
12009 input_kind: IndicatorInputKind::Ohlc,
12010 outputs: OUTPUTS_VALUE_BOOL,
12011 params: PARAM_TTM_TREND,
12012 },
12013 SupplementalIndicatorSeed {
12014 id: "ttm_squeeze",
12015 label: "TTM Squeeze",
12016 category: "momentum",
12017 input_kind: IndicatorInputKind::Ohlc,
12018 outputs: OUTPUTS_TTM_SQUEEZE,
12019 params: PARAM_TTM_SQUEEZE,
12020 },
12021 SupplementalIndicatorSeed {
12022 id: "acosc",
12023 label: "Acosc",
12024 category: "momentum",
12025 input_kind: IndicatorInputKind::HighLow,
12026 outputs: OUTPUTS_ACOSC,
12027 params: PARAM_ACOSC,
12028 },
12029 SupplementalIndicatorSeed {
12030 id: "alligator",
12031 label: "Alligator",
12032 category: "trend",
12033 input_kind: IndicatorInputKind::Slice,
12034 outputs: OUTPUTS_ALLIGATOR,
12035 params: PARAM_ALLIGATOR,
12036 },
12037 SupplementalIndicatorSeed {
12038 id: "alphatrend",
12039 label: "AlphaTrend",
12040 category: "trend",
12041 input_kind: IndicatorInputKind::Ohlcv,
12042 outputs: OUTPUTS_K1_K2,
12043 params: PARAM_ALPHATREND,
12044 },
12045 SupplementalIndicatorSeed {
12046 id: "aso",
12047 label: "ASO",
12048 category: "momentum",
12049 input_kind: IndicatorInputKind::Ohlc,
12050 outputs: OUTPUTS_BULLS_BEARS,
12051 params: PARAM_ASO,
12052 },
12053 SupplementalIndicatorSeed {
12054 id: "avsl",
12055 label: "AVSL",
12056 category: "trend",
12057 input_kind: IndicatorInputKind::Ohlcv,
12058 outputs: OUTPUTS_VALUE_F64,
12059 params: PARAM_AVSL,
12060 },
12061 SupplementalIndicatorSeed {
12062 id: "bandpass",
12063 label: "BandPass",
12064 category: "cycle",
12065 input_kind: IndicatorInputKind::Slice,
12066 outputs: OUTPUTS_BANDPASS,
12067 params: PARAM_BANDPASS,
12068 },
12069 SupplementalIndicatorSeed {
12070 id: "chande",
12071 label: "Chande",
12072 category: "trend",
12073 input_kind: IndicatorInputKind::Ohlc,
12074 outputs: OUTPUTS_VALUE_F64,
12075 params: PARAM_CHANDE,
12076 },
12077 SupplementalIndicatorSeed {
12078 id: "chandelier_exit",
12079 label: "Chandelier Exit",
12080 category: "trend",
12081 input_kind: IndicatorInputKind::Ohlc,
12082 outputs: OUTPUTS_LONG_SHORT_STOP,
12083 params: PARAM_CHANDELIER_EXIT,
12084 },
12085 SupplementalIndicatorSeed {
12086 id: "cksp",
12087 label: "CKSP",
12088 category: "trend",
12089 input_kind: IndicatorInputKind::Ohlc,
12090 outputs: OUTPUTS_LONG_SHORT_VALUES,
12091 params: PARAM_CKSP,
12092 },
12093 SupplementalIndicatorSeed {
12094 id: "correlation_cycle",
12095 label: "Correlation Cycle",
12096 category: "cycle",
12097 input_kind: IndicatorInputKind::Slice,
12098 outputs: OUTPUTS_CORRELATION_CYCLE,
12099 params: PARAM_CORRELATION_CYCLE,
12100 },
12101 SupplementalIndicatorSeed {
12102 id: "correl_hl",
12103 label: "Correl HL",
12104 category: "statistics",
12105 input_kind: IndicatorInputKind::HighLow,
12106 outputs: OUTPUTS_VALUE_F64,
12107 params: PARAM_CORREL_HL,
12108 },
12109 SupplementalIndicatorSeed {
12110 id: "decycler",
12111 label: "Decycler",
12112 category: "trend",
12113 input_kind: IndicatorInputKind::Slice,
12114 outputs: OUTPUTS_VALUE_F64,
12115 params: PARAM_DECYCLER,
12116 },
12117 SupplementalIndicatorSeed {
12118 id: "damiani_volatmeter",
12119 label: "Damiani Volatmeter",
12120 category: "volatility",
12121 input_kind: IndicatorInputKind::Slice,
12122 outputs: OUTPUTS_VOL_ANTI,
12123 params: PARAM_DAMIANI_VOLATMETER,
12124 },
12125 SupplementalIndicatorSeed {
12126 id: "dvdiqqe",
12127 label: "DVDIQQE",
12128 category: "volume",
12129 input_kind: IndicatorInputKind::Ohlc,
12130 outputs: OUTPUTS_DVDIQQE,
12131 params: PARAM_DVDIQQE,
12132 },
12133 SupplementalIndicatorSeed {
12134 id: "emd",
12135 label: "EMD",
12136 category: "volatility",
12137 input_kind: IndicatorInputKind::Ohlcv,
12138 outputs: OUTPUTS_UPPER_MIDDLE_LOWER_BAND,
12139 params: PARAM_EMD,
12140 },
12141 SupplementalIndicatorSeed {
12142 id: "eri",
12143 label: "ERI",
12144 category: "trend",
12145 input_kind: IndicatorInputKind::Ohlc,
12146 outputs: OUTPUTS_BULL_BEAR,
12147 params: PARAM_ERI,
12148 },
12149 SupplementalIndicatorSeed {
12150 id: "fisher",
12151 label: "Fisher",
12152 category: "momentum",
12153 input_kind: IndicatorInputKind::HighLow,
12154 outputs: OUTPUTS_FISHER,
12155 params: PARAM_FISHER,
12156 },
12157 SupplementalIndicatorSeed {
12158 id: "fvg_trailing_stop",
12159 label: "FVG Trailing Stop",
12160 category: "trend",
12161 input_kind: IndicatorInputKind::Ohlc,
12162 outputs: OUTPUTS_FVG_TS,
12163 params: PARAM_FVG_TRAILING_STOP,
12164 },
12165 SupplementalIndicatorSeed {
12166 id: "gatorosc",
12167 label: "Gator Oscillator",
12168 category: "trend",
12169 input_kind: IndicatorInputKind::Slice,
12170 outputs: OUTPUTS_GATOROSC,
12171 params: PARAM_GATOROSC,
12172 },
12173 SupplementalIndicatorSeed {
12174 id: "halftrend",
12175 label: "HalfTrend",
12176 category: "trend",
12177 input_kind: IndicatorInputKind::Ohlc,
12178 outputs: OUTPUTS_HALFTREND,
12179 params: PARAM_HALFTREND,
12180 },
12181 SupplementalIndicatorSeed {
12182 id: "kst",
12183 label: "KST",
12184 category: "momentum",
12185 input_kind: IndicatorInputKind::Slice,
12186 outputs: OUTPUTS_LINE_SIGNAL,
12187 params: PARAM_KST,
12188 },
12189 SupplementalIndicatorSeed {
12190 id: "kaufmanstop",
12191 label: "Kaufmanstop",
12192 category: "trend",
12193 input_kind: IndicatorInputKind::HighLow,
12194 outputs: OUTPUTS_VALUE_F64,
12195 params: PARAM_KAUFMANSTOP,
12196 },
12197 SupplementalIndicatorSeed {
12198 id: "lpc",
12199 label: "LPC",
12200 category: "cycle",
12201 input_kind: IndicatorInputKind::Ohlc,
12202 outputs: OUTPUTS_FILTER_BANDS,
12203 params: PARAM_LPC,
12204 },
12205 SupplementalIndicatorSeed {
12206 id: "mab",
12207 label: "MAB",
12208 category: "volatility",
12209 input_kind: IndicatorInputKind::Slice,
12210 outputs: OUTPUTS_UPPER_MIDDLE_LOWER_BAND,
12211 params: PARAM_MAB,
12212 },
12213 SupplementalIndicatorSeed {
12214 id: "macz",
12215 label: "MACZ",
12216 category: "momentum",
12217 input_kind: IndicatorInputKind::Slice,
12218 outputs: OUTPUTS_VALUE_F64,
12219 params: PARAM_MACZ,
12220 },
12221 SupplementalIndicatorSeed {
12222 id: "minmax",
12223 label: "MinMax",
12224 category: "pattern",
12225 input_kind: IndicatorInputKind::HighLow,
12226 outputs: OUTPUTS_MINMAX,
12227 params: PARAM_MINMAX,
12228 },
12229 SupplementalIndicatorSeed {
12230 id: "mod_god_mode",
12231 label: "Mod God Mode",
12232 category: "momentum",
12233 input_kind: IndicatorInputKind::Ohlc,
12234 outputs: OUTPUTS_MOD_GOD_MODE,
12235 params: PARAM_MOD_GOD_MODE,
12236 },
12237 SupplementalIndicatorSeed {
12238 id: "pattern_recognition",
12239 label: "Pattern Recognition",
12240 category: "pattern",
12241 input_kind: IndicatorInputKind::Ohlc,
12242 outputs: OUTPUTS_MATRIX_BOOL,
12243 params: PARAM_NONE,
12244 },
12245 SupplementalIndicatorSeed {
12246 id: "msw",
12247 label: "MSW",
12248 category: "cycle",
12249 input_kind: IndicatorInputKind::Slice,
12250 outputs: OUTPUTS_SINE_LEAD,
12251 params: PARAM_MSW,
12252 },
12253 SupplementalIndicatorSeed {
12254 id: "nadaraya_watson_envelope",
12255 label: "Nadaraya Watson Envelope",
12256 category: "volatility",
12257 input_kind: IndicatorInputKind::Slice,
12258 outputs: OUTPUTS_UPPER_LOWER,
12259 params: PARAM_NWE,
12260 },
12261 SupplementalIndicatorSeed {
12262 id: "ott",
12263 label: "OTT",
12264 category: "trend",
12265 input_kind: IndicatorInputKind::Slice,
12266 outputs: OUTPUTS_VALUE_F64,
12267 params: PARAM_OTT,
12268 },
12269 SupplementalIndicatorSeed {
12270 id: "otto",
12271 label: "OTTO",
12272 category: "trend",
12273 input_kind: IndicatorInputKind::Slice,
12274 outputs: OUTPUTS_HOTT_LOTT,
12275 params: PARAM_OTTO,
12276 },
12277 SupplementalIndicatorSeed {
12278 id: "vidya",
12279 label: "VIDYA",
12280 category: "trend",
12281 input_kind: IndicatorInputKind::Slice,
12282 outputs: OUTPUTS_VALUE_F64,
12283 params: PARAM_VIDYA,
12284 },
12285 SupplementalIndicatorSeed {
12286 id: "vlma",
12287 label: "VLMA",
12288 category: "trend",
12289 input_kind: IndicatorInputKind::Slice,
12290 outputs: OUTPUTS_VALUE_F64,
12291 params: PARAM_VLMA,
12292 },
12293 SupplementalIndicatorSeed {
12294 id: "pma",
12295 label: "PMA",
12296 category: "trend",
12297 input_kind: IndicatorInputKind::Slice,
12298 outputs: OUTPUTS_EHLERS_PMA,
12299 params: PARAM_PMA,
12300 },
12301 SupplementalIndicatorSeed {
12302 id: "prb",
12303 label: "PRB",
12304 category: "statistics",
12305 input_kind: IndicatorInputKind::Slice,
12306 outputs: OUTPUTS_PRB,
12307 params: PARAM_PRB,
12308 },
12309 SupplementalIndicatorSeed {
12310 id: "qqe",
12311 label: "QQE",
12312 category: "momentum",
12313 input_kind: IndicatorInputKind::Slice,
12314 outputs: &[OUTPUT_FAST, OUTPUT_SLOW],
12315 params: PARAM_QQE,
12316 },
12317 SupplementalIndicatorSeed {
12318 id: "adaptive_bounds_rsi",
12319 label: "Adaptive Bounds RSI",
12320 category: "momentum",
12321 input_kind: IndicatorInputKind::Slice,
12322 outputs: OUTPUTS_ADAPTIVE_BOUNDS_RSI,
12323 params: PARAM_ADAPTIVE_BOUNDS_RSI,
12324 },
12325 SupplementalIndicatorSeed {
12326 id: "forward_backward_exponential_oscillator",
12327 label: "Forward-Backward Exponential Oscillator",
12328 category: "momentum",
12329 input_kind: IndicatorInputKind::Slice,
12330 outputs: OUTPUTS_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR,
12331 params: PARAM_FORWARD_BACKWARD_EXPONENTIAL_OSCILLATOR,
12332 },
12333 SupplementalIndicatorSeed {
12334 id: "qqe_weighted_oscillator",
12335 label: "QQE Weighted Oscillator",
12336 category: "momentum",
12337 input_kind: IndicatorInputKind::Slice,
12338 outputs: OUTPUTS_QQE_WEIGHTED_OSCILLATOR,
12339 params: PARAM_QQE_WEIGHTED_OSCILLATOR,
12340 },
12341 SupplementalIndicatorSeed {
12342 id: "market_structure_confluence",
12343 label: "Market Structure Confluence",
12344 category: "trend",
12345 input_kind: IndicatorInputKind::Ohlc,
12346 outputs: OUTPUTS_MARKET_STRUCTURE_CONFLUENCE,
12347 params: PARAM_MARKET_STRUCTURE_CONFLUENCE,
12348 },
12349 SupplementalIndicatorSeed {
12350 id: "range_filtered_trend_signals",
12351 label: "Range Filtered Trend Signals",
12352 category: "trend",
12353 input_kind: IndicatorInputKind::Ohlc,
12354 outputs: OUTPUTS_RANGE_FILTERED_TREND_SIGNALS,
12355 params: PARAM_RANGE_FILTERED_TREND_SIGNALS,
12356 },
12357 SupplementalIndicatorSeed {
12358 id: "range_oscillator",
12359 label: "Range Oscillator",
12360 category: "volatility",
12361 input_kind: IndicatorInputKind::Ohlc,
12362 outputs: OUTPUTS_RANGE_OSCILLATOR,
12363 params: PARAM_RANGE_OSCILLATOR,
12364 },
12365 SupplementalIndicatorSeed {
12366 id: "volume_weighted_relative_strength_index",
12367 label: "Volume Weighted Relative Strength Index",
12368 category: "momentum",
12369 input_kind: IndicatorInputKind::CloseVolume,
12370 outputs: OUTPUTS_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX,
12371 params: PARAM_VOLUME_WEIGHTED_RELATIVE_STRENGTH_INDEX,
12372 },
12373 SupplementalIndicatorSeed {
12374 id: "range_filter",
12375 label: "Range Filter",
12376 category: "volatility",
12377 input_kind: IndicatorInputKind::Slice,
12378 outputs: OUTPUTS_FILTER_BANDS,
12379 params: PARAM_RANGE_FILTER,
12380 },
12381 SupplementalIndicatorSeed {
12382 id: "coppock",
12383 label: "Coppock",
12384 category: "momentum",
12385 input_kind: IndicatorInputKind::Slice,
12386 outputs: OUTPUTS_VALUE_F64,
12387 params: PARAM_COPPOCK,
12388 },
12389 SupplementalIndicatorSeed {
12390 id: "rsmk",
12391 label: "RSMK",
12392 category: "relative_strength",
12393 input_kind: IndicatorInputKind::CloseVolume,
12394 outputs: OUTPUTS_INDICATOR_SIGNAL,
12395 params: PARAM_RSMK,
12396 },
12397 SupplementalIndicatorSeed {
12398 id: "voss",
12399 label: "Voss",
12400 category: "cycle",
12401 input_kind: IndicatorInputKind::Slice,
12402 outputs: OUTPUTS_VOSS,
12403 params: PARAM_VOSS,
12404 },
12405 SupplementalIndicatorSeed {
12406 id: "stc",
12407 label: "STC",
12408 category: "momentum",
12409 input_kind: IndicatorInputKind::Slice,
12410 outputs: OUTPUTS_VALUE_F64,
12411 params: PARAM_STC,
12412 },
12413 SupplementalIndicatorSeed {
12414 id: "rvi",
12415 label: "RVI",
12416 category: "volatility",
12417 input_kind: IndicatorInputKind::Slice,
12418 outputs: OUTPUTS_VALUE_F64,
12419 params: PARAM_RVI,
12420 },
12421 SupplementalIndicatorSeed {
12422 id: "safezonestop",
12423 label: "SafeZoneStop",
12424 category: "trend",
12425 input_kind: IndicatorInputKind::HighLow,
12426 outputs: OUTPUTS_VALUE_F64,
12427 params: PARAM_SAFEZONESTOP,
12428 },
12429 SupplementalIndicatorSeed {
12430 id: "chop",
12431 label: "CHOP",
12432 category: "trend",
12433 input_kind: IndicatorInputKind::Ohlc,
12434 outputs: OUTPUTS_VALUE_F64,
12435 params: PARAM_CHOP,
12436 },
12437 SupplementalIndicatorSeed {
12438 id: "devstop",
12439 label: "DevStop",
12440 category: "trend",
12441 input_kind: IndicatorInputKind::HighLow,
12442 outputs: OUTPUTS_VALUE_F64,
12443 params: PARAM_DEVSTOP,
12444 },
12445 SupplementalIndicatorSeed {
12446 id: "net_myrsi",
12447 label: "NET_MyRSI",
12448 category: "momentum",
12449 input_kind: IndicatorInputKind::Slice,
12450 outputs: OUTPUTS_VALUE_F64,
12451 params: PARAMS_PERIOD_ONLY,
12452 },
12453 SupplementalIndicatorSeed {
12454 id: "wad",
12455 label: "WAD",
12456 category: "volume",
12457 input_kind: IndicatorInputKind::Ohlc,
12458 outputs: OUTPUTS_VALUE_F64,
12459 params: PARAM_NONE,
12460 },
12461 SupplementalIndicatorSeed {
12462 id: "pivot",
12463 label: "Pivot",
12464 category: "price",
12465 input_kind: IndicatorInputKind::Ohlc,
12466 outputs: OUTPUTS_PIVOT,
12467 params: PARAM_PIVOT,
12468 },
12469];
12470
12471fn supplemental_supports_cpu_batch(id: &str) -> bool {
12472 matches!(
12473 id,
12474 "adx"
12475 | "adxr"
12476 | "atr"
12477 | "atr_percentile"
12478 | "ad"
12479 | "adosc"
12480 | "ao"
12481 | "dti"
12482 | "dx"
12483 | "di"
12484 | "dm"
12485 | "vi"
12486 | "donchian"
12487 | "supertrend"
12488 | "adjustable_ma_alternating_extremities"
12489 | "supertrend_recovery"
12490 | "keltner"
12491 | "aroon"
12492 | "srsi"
12493 | "kdj"
12494 | "squeeze_momentum"
12495 | "wavetrend"
12496 | "wto"
12497 | "garman_klass_volatility"
12498 | "historical_volatility"
12499 | "absolute_strength_index_oscillator"
12500 | "adaptive_bandpass_trigger_oscillator"
12501 | "premier_rsi_oscillator"
12502 | "multi_length_stochastic_average"
12503 | "hull_butterfly_oscillator"
12504 | "fibonacci_trailing_stop"
12505 | "fibonacci_entry_bands"
12506 | "volume_energy_reservoirs"
12507 | "neighboring_trailing_stop"
12508 | "macd_wave_signal_pro"
12509 | "hema_trend_levels"
12510 | "grover_llorens_cycle_oscillator"
12511 | "squeeze_index"
12512 | "stochastic_distance"
12513 | "advance_decline_line"
12514 | "decisionpoint_breadth_swenlin_trading_oscillator"
12515 | "velocity_acceleration_indicator"
12516 | "normalized_resonator"
12517 | "monotonicity_index"
12518 | "half_causal_estimator"
12519 | "bull_power_vs_bear_power"
12520 | "vertical_horizontal_filter"
12521 | "intraday_momentum_index"
12522 | "vwap_zscore_with_signals"
12523 | "demand_index"
12524 | "didi_index"
12525 | "ehlers_autocorrelation_periodogram"
12526 | "ehlers_linear_extrapolation_predictor"
12527 | "kase_peak_oscillator_with_divergences"
12528 | "gopalakrishnan_range_index"
12529 | "yang_zhang_volatility"
12530 | "historical_volatility_percentile"
12531 | "ehlers_detrending_filter"
12532 | "keltner_channel_width_oscillator"
12533 | "market_meanness_index"
12534 | "price_density_market_noise"
12535 | "momentum_ratio_oscillator"
12536 | "hypertrend"
12537 | "adaptive_schaff_trend_cycle"
12538 | "smoothed_gaussian_trend_filter"
12539 | "logarithmic_moving_average"
12540 | "ict_propulsion_block"
12541 | "supertrend_oscillator"
12542 | "leavitt_convolution_acceleration"
12543 | "impulse_macd"
12544 | "insync_index"
12545 | "volatility_ratio_adaptive_rsx"
12546 | "on_balance_volume_oscillator"
12547 | "parkinson_volatility"
12548 | "psychological_line"
12549 | "rank_correlation_index"
12550 | "trend_follower"
12551 | "trend_direction_force_index"
12552 | "linear_regression_intensity"
12553 | "trend_continuation_factor"
12554 | "pretty_good_oscillator"
12555 | "twiggs_money_flow"
12556 | "volume_weighted_stochastic_rsi"
12557 | "stochastic_adaptive_d"
12558 | "stochastic_connors_rsi"
12559 | "volume_zone_oscillator"
12560 | "bop"
12561 | "emv"
12562 | "efi"
12563 | "mfi"
12564 | "mass"
12565 | "kvo"
12566 | "wad"
12567 | "vosc"
12568 | "rvi"
12569 | "coppock"
12570 | "rsi"
12571 | "roc"
12572 | "linear_correlation_oscillator"
12573 | "ehlers_fm_demodulator"
12574 | "ehlers_adaptive_cg"
12575 | "adaptive_momentum_oscillator"
12576 | "velocity"
12577 | "normalized_volume_true_range"
12578 | "exponential_trend"
12579 | "trend_flow_trail"
12580 | "range_breakout_signals"
12581 | "apo"
12582 | "cci"
12583 | "cci_cycle"
12584 | "cfo"
12585 | "cg"
12586 | "er"
12587 | "kurtosis"
12588 | "natr"
12589 | "net_myrsi"
12590 | "mean_ad"
12591 | "medium_ad"
12592 | "deviation"
12593 | "mod_god_mode"
12594 | "dpo"
12595 | "lrsi"
12596 | "fosc"
12597 | "ift_rsi"
12598 | "linearreg_angle"
12599 | "linearreg_intercept"
12600 | "linearreg_slope"
12601 | "pfe"
12602 | "percentile_nearest_rank"
12603 | "ui"
12604 | "zscore"
12605 | "medprice"
12606 | "midpoint"
12607 | "midprice"
12608 | "wclprice"
12609 | "obv"
12610 | "vpt"
12611 | "nvi"
12612 | "pvi"
12613 | "mom"
12614 | "cmo"
12615 | "rocp"
12616 | "rocr"
12617 | "tsf"
12618 | "adaptive_macd"
12619 | "polynomial_regression_extrapolation"
12620 | "statistical_trailing_stop"
12621 | "standardized_psar_oscillator"
12622 | "geometric_bias_oscillator"
12623 | "ppo"
12624 | "trix"
12625 | "tsi"
12626 | "stddev"
12627 | "var"
12628 | "willr"
12629 | "ultosc"
12630 | "macd"
12631 | "bollinger_bands"
12632 | "bollinger_bands_width"
12633 | "stoch"
12634 | "stochf"
12635 | "vwmacd"
12636 | "volume_weighted_rsi"
12637 | "dynamic_momentum_index"
12638 | "disparity_index"
12639 | "donchian_channel_width"
12640 | "kairi_relative_index"
12641 | "projection_oscillator"
12642 | "possible_rsi"
12643 | "stochastic_money_flow_index"
12644 | "autocorrelation_indicator"
12645 | "goertzel_cycle_composite_wave"
12646 | "rolling_skewness_kurtosis"
12647 | "rolling_z_score_trend"
12648 | "ehlers_data_sampling_relative_strength_indicator"
12649 | "velocity_acceleration_convergence_divergence_indicator"
12650 | "trend_direction_force_index"
12651 | "stc"
12652 | "vpci"
12653 | "ttm_trend"
12654 | "ttm_squeeze"
12655 | "acosc"
12656 | "alligator"
12657 | "alphatrend"
12658 | "aso"
12659 | "bandpass"
12660 | "chande"
12661 | "chandelier_exit"
12662 | "cksp"
12663 | "coppock"
12664 | "correl_hl"
12665 | "correlation_cycle"
12666 | "ehlers_adaptive_cg"
12667 | "normalized_volume_true_range"
12668 | "exponential_trend"
12669 | "trend_flow_trail"
12670 | "range_breakout_signals"
12671 | "chop"
12672 | "damiani_volatmeter"
12673 | "dvdiqqe"
12674 | "emd"
12675 | "eri"
12676 | "fisher"
12677 | "fvg_trailing_stop"
12678 | "gatorosc"
12679 | "halftrend"
12680 | "kst"
12681 | "lpc"
12682 | "mab"
12683 | "macz"
12684 | "minmax"
12685 | "msw"
12686 | "nadaraya_watson_envelope"
12687 | "otto"
12688 | "vidya"
12689 | "vlma"
12690 | "pma"
12691 | "prb"
12692 | "qqe"
12693 | "qqe_weighted_oscillator"
12694 | "range_filter"
12695 | "rsmk"
12696 | "safezonestop"
12697 | "devstop"
12698 | "voss"
12699 | "pivot"
12700 )
12701}
12702
12703fn supplemental_supports_cuda_single(id: &str) -> bool {
12704 matches!(id, "pattern_recognition")
12705}
12706
12707fn supplemental_supports_cuda_batch(id: &str) -> bool {
12708 matches!(
12709 id,
12710 "acosc"
12711 | "adosc"
12712 | "adx"
12713 | "adxr"
12714 | "alligator"
12715 | "alphatrend"
12716 | "ao"
12717 | "apo"
12718 | "aroon"
12719 | "aroonosc"
12720 | "aso"
12721 | "atr"
12722 | "avsl"
12723 | "bandpass"
12724 | "bollinger_bands"
12725 | "bollinger_bands_width"
12726 | "bop"
12727 | "cci"
12728 | "cci_cycle"
12729 | "cfo"
12730 | "cg"
12731 | "chande"
12732 | "chandelier_exit"
12733 | "chop"
12734 | "cksp"
12735 | "cmo"
12736 | "coppock"
12737 | "correl_hl"
12738 | "correlation_cycle"
12739 | "cvi"
12740 | "damiani_volatmeter"
12741 | "dec_osc"
12742 | "decycler"
12743 | "deviation"
12744 | "devstop"
12745 | "di"
12746 | "dm"
12747 | "donchian"
12748 | "dpo"
12749 | "dti"
12750 | "dvdiqqe"
12751 | "dx"
12752 | "efi"
12753 | "emd"
12754 | "emv"
12755 | "er"
12756 | "eri"
12757 | "fisher"
12758 | "fosc"
12759 | "fvg_trailing_stop"
12760 | "gatorosc"
12761 | "halftrend"
12762 | "ift_rsi"
12763 | "kaufmanstop"
12764 | "kdj"
12765 | "keltner"
12766 | "kst"
12767 | "kurtosis"
12768 | "kvo"
12769 | "linearreg_angle"
12770 | "linearreg_intercept"
12771 | "linearreg_slope"
12772 | "lpc"
12773 | "lrsi"
12774 | "mab"
12775 | "macd"
12776 | "macz"
12777 | "marketefi"
12778 | "mass"
12779 | "mean_ad"
12780 | "medium_ad"
12781 | "medprice"
12782 | "mfi"
12783 | "minmax"
12784 | "mod_god_mode"
12785 | "mom"
12786 | "msw"
12787 | "nadaraya_watson_envelope"
12788 | "natr"
12789 | "net_myrsi"
12790 | "nvi"
12791 | "obv"
12792 | "ott"
12793 | "otto"
12794 | "percentile_nearest_rank"
12795 | "pfe"
12796 | "pivot"
12797 | "pma"
12798 | "ppo"
12799 | "prb"
12800 | "pvi"
12801 | "qqe"
12802 | "qstick"
12803 | "range_filter"
12804 | "reverse_rsi"
12805 | "roc"
12806 | "rocp"
12807 | "rocr"
12808 | "rsi"
12809 | "rsmk"
12810 | "rsx"
12811 | "rvi"
12812 | "safezonestop"
12813 | "sar"
12814 | "squeeze_momentum"
12815 | "srsi"
12816 | "stc"
12817 | "stddev"
12818 | "stoch"
12819 | "stochf"
12820 | "supertrend"
12821 | "trix"
12822 | "tsf"
12823 | "tsi"
12824 | "ttm_squeeze"
12825 | "ttm_trend"
12826 | "ui"
12827 | "ultosc"
12828 | "var"
12829 | "vi"
12830 | "vidya"
12831 | "vlma"
12832 | "vosc"
12833 | "voss"
12834 | "vpci"
12835 | "vpt"
12836 | "vwmacd"
12837 | "wad"
12838 | "wavetrend"
12839 | "wclprice"
12840 | "willr"
12841 | "wto"
12842 | "garman_klass_volatility"
12843 | "yang_zhang_volatility"
12844 | "parkinson_volatility"
12845 | "zscore"
12846 )
12847}
12848
12849fn supplemental_supports_cuda_vram(id: &str) -> bool {
12850 matches!(id, "pattern_recognition") || supplemental_supports_cuda_batch(id)
12851}
12852
12853pub fn is_bucket_b_indicator(id: &str) -> bool {
12854 BUCKET_B_INDICATORS
12855 .iter()
12856 .any(|item| item.eq_ignore_ascii_case(id))
12857}
12858
12859static INDICATOR_REGISTRY: Lazy<Vec<IndicatorInfo>> = Lazy::new(build_registry);
12860static INDICATOR_EXACT_INDEX: Lazy<HashMap<&'static str, usize>> = Lazy::new(|| {
12861 let mut map = HashMap::with_capacity(INDICATOR_REGISTRY.len());
12862 for (idx, info) in INDICATOR_REGISTRY.iter().enumerate() {
12863 map.insert(info.id, idx);
12864 }
12865 map
12866});
12867
12868fn ma_outputs_for(ma_id: &str) -> Vec<IndicatorOutputInfo> {
12869 match ma_id {
12870 "mama" => OUTPUTS_MAMA.to_vec(),
12871 "ehlers_pma" => OUTPUTS_EHLERS_PMA.to_vec(),
12872 "ehlers_undersampled_double_moving_average" => OUTPUTS_BUFF_AVERAGES.to_vec(),
12873 "buff_averages" => OUTPUTS_BUFF_AVERAGES.to_vec(),
12874 "ema_deviation_corrected_t3" => OUTPUTS_EDCT3.to_vec(),
12875 "logarithmic_moving_average" => OUTPUTS_LOGARITHMIC_MOVING_AVERAGE.to_vec(),
12876 _ => OUTPUTS_VALUE_F64.to_vec(),
12877 }
12878}
12879
12880fn ma_params_for(ma_id: &str, period_based: bool) -> Vec<IndicatorParamInfo> {
12881 let mut params = Vec::new();
12882 if period_based {
12883 params.push(PARAM_PERIOD);
12884 }
12885 for item in ma_param_schema(ma_id).iter() {
12886 let kind = match item.kind {
12887 MaParamKind::Float => IndicatorParamKind::Float,
12888 MaParamKind::Int => IndicatorParamKind::Int,
12889 };
12890 let default = match kind {
12891 IndicatorParamKind::Float => Some(ParamValueStatic::Float(item.default)),
12892 IndicatorParamKind::Int => Some(ParamValueStatic::Int(item.default as i64)),
12893 IndicatorParamKind::Bool | IndicatorParamKind::EnumString => None,
12894 };
12895 params.push(IndicatorParamInfo {
12896 key: item.key,
12897 label: item.label,
12898 kind,
12899 required: false,
12900 default,
12901 min: item.min,
12902 max: item.max,
12903 step: item.step,
12904 enum_values: EMPTY_ENUM_VALUES,
12905 notes: item.notes,
12906 });
12907 }
12908 match ma_id {
12909 "mama" => params.push(PARAM_OUTPUT_MAMA),
12910 "ehlers_pma" => params.push(PARAM_OUTPUT_EHLERS_PMA),
12911 "ehlers_undersampled_double_moving_average" => params.push(PARAM_OUTPUT_BUFF_AVERAGES),
12912 "buff_averages" => params.push(PARAM_OUTPUT_BUFF_AVERAGES),
12913 "ema_deviation_corrected_t3" => params.push(PARAM_OUTPUT_EDCT3),
12914 "vwap" => params.push(PARAM_ANCHOR),
12915 "volume_adjusted_ma" => params.push(PARAM_STRICT),
12916 "n_order_ema" => {
12917 params.push(IndicatorParamInfo {
12918 key: "ema_style",
12919 label: "EMA Style",
12920 kind: IndicatorParamKind::EnumString,
12921 required: false,
12922 default: None,
12923 min: None,
12924 max: None,
12925 step: None,
12926 enum_values: ENUM_VALUES_N_ORDER_EMA_STYLE,
12927 notes: Some("Default: ema."),
12928 });
12929 params.push(IndicatorParamInfo {
12930 key: "iir_style",
12931 label: "IIR Style",
12932 kind: IndicatorParamKind::EnumString,
12933 required: false,
12934 default: None,
12935 min: None,
12936 max: None,
12937 step: None,
12938 enum_values: ENUM_VALUES_N_ORDER_EMA_IIR_STYLE,
12939 notes: Some("Default: impulse_matched."),
12940 });
12941 }
12942 _ => {}
12943 }
12944 params
12945}
12946
12947fn build_registry() -> Vec<IndicatorInfo> {
12948 let mut out = Vec::new();
12949
12950 for ma in list_moving_averages().iter() {
12951 out.push(IndicatorInfo {
12952 id: ma.id,
12953 label: ma.label,
12954 category: "moving_averages",
12955 dynamic_strategy_eligible: true,
12956 input_kind: if ma.requires_candles {
12957 IndicatorInputKind::Candles
12958 } else {
12959 IndicatorInputKind::Slice
12960 },
12961 outputs: ma_outputs_for(ma.id),
12962 params: ma_params_for(ma.id, ma.period_based),
12963 capabilities: IndicatorCapabilities {
12964 supports_cpu_single: ma.supports_cpu_single,
12965 supports_cpu_batch: ma.supports_cpu_batch,
12966 supports_cuda_single: ma.supports_cuda_single,
12967 supports_cuda_batch: ma.supports_cuda_sweep,
12968 supports_cuda_vram: ma.supports_cuda_sweep,
12969 },
12970 notes: ma.notes,
12971 });
12972 }
12973
12974 for seed in SUPPLEMENTAL_INDICATORS.iter() {
12975 let info = IndicatorInfo {
12976 id: seed.id,
12977 label: seed.label,
12978 category: seed.category,
12979 dynamic_strategy_eligible: true,
12980 input_kind: seed.input_kind,
12981 outputs: seed.outputs.to_vec(),
12982 params: seed.params.to_vec(),
12983 capabilities: IndicatorCapabilities {
12984 supports_cpu_single: true,
12985 supports_cpu_batch: supplemental_supports_cpu_batch(seed.id),
12986 supports_cuda_single: supplemental_supports_cuda_single(seed.id),
12987 supports_cuda_batch: supplemental_supports_cuda_batch(seed.id),
12988 supports_cuda_vram: supplemental_supports_cuda_vram(seed.id),
12989 },
12990 notes: Some(SUPPLEMENTAL_SEED_NOTE),
12991 };
12992
12993 if let Some(existing) = out
12994 .iter_mut()
12995 .find(|item| item.id.eq_ignore_ascii_case(seed.id))
12996 {
12997 *existing = info;
12998 } else {
12999 out.push(info);
13000 }
13001 }
13002
13003 out.sort_by(|a, b| a.id.cmp(b.id));
13004 out
13005}
13006
13007pub fn list_indicators() -> &'static [IndicatorInfo] {
13008 INDICATOR_REGISTRY.as_slice()
13009}
13010
13011pub fn get_indicator(id: &str) -> Option<&'static IndicatorInfo> {
13012 let indicators = list_indicators();
13013 if let Some(idx) = INDICATOR_EXACT_INDEX.get(id).copied() {
13014 return Some(&indicators[idx]);
13015 }
13016 if let Ok(idx) = indicators.binary_search_by(|info| info.id.cmp(id)) {
13017 return Some(&indicators[idx]);
13018 }
13019 indicators
13020 .iter()
13021 .find(|info| info.id.eq_ignore_ascii_case(id))
13022}
13023
13024pub fn indicator_param_schema(id: &str) -> Option<&'static [IndicatorParamInfo]> {
13025 get_indicator(id).map(|info| info.params.as_slice())
13026}
13027
13028pub fn indicator_output_schema(id: &str) -> Option<&'static [IndicatorOutputInfo]> {
13029 get_indicator(id).map(|info| info.outputs.as_slice())
13030}
13031
13032pub fn indicator_capabilities(id: &str) -> Option<IndicatorCapabilities> {
13033 get_indicator(id).map(|info| info.capabilities)
13034}
13035
13036#[cfg(test)]
13037mod tests {
13038 use super::*;
13039
13040 #[test]
13041 fn registry_is_non_empty() {
13042 assert!(!list_indicators().is_empty());
13043 }
13044
13045 #[test]
13046 fn ids_are_unique_case_insensitive() {
13047 use std::collections::HashSet;
13048 let mut seen = HashSet::new();
13049 for info in list_indicators().iter() {
13050 let lower = info.id.to_ascii_lowercase();
13051 assert!(seen.insert(lower), "duplicate id {}", info.id);
13052 }
13053 }
13054
13055 #[test]
13056 fn all_registered_entries_have_output_schema() {
13057 for info in list_indicators().iter() {
13058 assert!(
13059 !info.outputs.is_empty(),
13060 "indicator {} has no output schema",
13061 info.id
13062 );
13063 }
13064 }
13065
13066 #[test]
13067 fn ma_registry_is_mirrored() {
13068 for ma in list_moving_averages().iter() {
13069 assert!(
13070 get_indicator(ma.id).is_some(),
13071 "missing moving average {} in global registry",
13072 ma.id
13073 );
13074 }
13075 }
13076
13077 #[test]
13078 fn lookup_is_case_insensitive() {
13079 assert!(get_indicator("SMA").is_some());
13080 assert!(get_indicator("sma").is_some());
13081 }
13082
13083 #[test]
13084 fn schema_accessors_work() {
13085 assert!(indicator_output_schema("macd").is_some());
13086 assert!(indicator_param_schema("sma").is_some());
13087 assert!(indicator_capabilities("sma").is_some());
13088 assert!(indicator_output_schema("not_real").is_none());
13089 }
13090
13091 #[test]
13092 fn pattern_recognition_capability_is_registered_as_non_batch() {
13093 let info = get_indicator("pattern_recognition").unwrap();
13094 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13095 assert_eq!(info.outputs.len(), 1);
13096 assert_eq!(info.outputs[0].id, "matrix");
13097 assert!(info.capabilities.supports_cpu_single);
13098 assert!(!info.capabilities.supports_cpu_batch);
13099 assert!(info.capabilities.supports_cuda_single);
13100 assert!(!info.capabilities.supports_cuda_batch);
13101 assert!(info.capabilities.supports_cuda_vram);
13102 }
13103
13104 #[test]
13105 fn dec_osc_and_rsx_are_registered_for_cuda_batch() {
13106 let dec_osc = get_indicator("dec_osc").unwrap();
13107 assert_eq!(dec_osc.input_kind, IndicatorInputKind::Slice);
13108 assert_eq!(dec_osc.outputs.len(), 1);
13109 assert_eq!(dec_osc.outputs[0].id, "value");
13110 assert!(dec_osc.capabilities.supports_cuda_batch);
13111 assert!(dec_osc.capabilities.supports_cuda_vram);
13112
13113 let rsx = get_indicator("rsx").unwrap();
13114 assert_eq!(rsx.input_kind, IndicatorInputKind::Slice);
13115 assert_eq!(rsx.outputs.len(), 1);
13116 assert_eq!(rsx.outputs[0].id, "value");
13117 assert!(rsx.capabilities.supports_cuda_batch);
13118 assert!(rsx.capabilities.supports_cuda_vram);
13119 }
13120
13121 #[test]
13122 fn chande_is_registered_for_cpu_and_cuda_batch() {
13123 assert!(supplemental_supports_cpu_batch("chande"));
13124 assert!(supplemental_supports_cuda_batch("chande"));
13125 let chande = get_indicator("chande").unwrap();
13126 assert_eq!(chande.input_kind, IndicatorInputKind::Ohlc);
13127 assert_eq!(chande.outputs.len(), 1);
13128 assert_eq!(chande.outputs[0].id, "value");
13129 assert!(chande.capabilities.supports_cpu_batch);
13130 assert!(chande.capabilities.supports_cuda_batch);
13131 assert!(chande.capabilities.supports_cuda_vram);
13132 }
13133
13134 #[test]
13135 fn bucket_b_ma_capabilities_follow_ma_registry() {
13136 let mama = indicator_capabilities("mama").unwrap();
13137 assert!(mama.supports_cpu_batch);
13138 assert!(mama.supports_cuda_batch);
13139 assert!(mama.supports_cuda_vram);
13140
13141 let vwap = indicator_capabilities("vwap").unwrap();
13142 assert!(vwap.supports_cpu_batch);
13143 assert!(vwap.supports_cuda_batch);
13144 assert!(vwap.supports_cuda_vram);
13145 }
13146
13147 #[test]
13148 fn bucket_membership_lookup_is_case_insensitive() {
13149 assert!(is_bucket_b_indicator("MAMA"));
13150 assert!(is_bucket_b_indicator("pivot"));
13151 assert!(!is_bucket_b_indicator("sma"));
13152 assert!(!is_bucket_b_indicator("adx"));
13153 }
13154
13155 #[test]
13156 fn lrsi_is_registered_for_cuda_batch() {
13157 let lrsi = get_indicator("lrsi").unwrap();
13158 assert_eq!(lrsi.input_kind, IndicatorInputKind::HighLow);
13159 assert_eq!(lrsi.outputs.len(), 1);
13160 assert_eq!(lrsi.outputs[0].id, "value");
13161 assert!(lrsi.capabilities.supports_cpu_batch);
13162 assert!(lrsi.capabilities.supports_cuda_batch);
13163 assert!(lrsi.capabilities.supports_cuda_vram);
13164 }
13165
13166 #[test]
13167 fn garman_klass_volatility_is_registered_for_cpu_and_cuda_batch() {
13168 assert!(supplemental_supports_cpu_batch("garman_klass_volatility"));
13169 assert!(supplemental_supports_cuda_batch("garman_klass_volatility"));
13170 let info = get_indicator("garman_klass_volatility").unwrap();
13171 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13172 assert_eq!(info.outputs.len(), 1);
13173 assert_eq!(info.outputs[0].id, "value");
13174 assert_eq!(info.params.len(), 1);
13175 assert_eq!(info.params[0].key, "lookback");
13176 assert!(info.capabilities.supports_cpu_single);
13177 assert!(info.capabilities.supports_cpu_batch);
13178 assert!(info.capabilities.supports_cuda_batch);
13179 assert!(info.capabilities.supports_cuda_vram);
13180 }
13181
13182 #[test]
13183 fn historical_volatility_is_registered_for_cpu_batch_only() {
13184 assert!(supplemental_supports_cpu_batch("historical_volatility"));
13185 assert!(!supplemental_supports_cuda_batch("historical_volatility"));
13186 let info = get_indicator("historical_volatility").unwrap();
13187 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13188 assert_eq!(info.outputs.len(), 1);
13189 assert_eq!(info.outputs[0].id, "value");
13190 assert_eq!(info.params.len(), 2);
13191 assert_eq!(info.params[0].key, "lookback");
13192 assert_eq!(info.params[1].key, "annualization_days");
13193 assert!(info.capabilities.supports_cpu_single);
13194 assert!(info.capabilities.supports_cpu_batch);
13195 assert!(!info.capabilities.supports_cuda_batch);
13196 assert!(!info.capabilities.supports_cuda_vram);
13197 }
13198
13199 #[test]
13200 fn advance_decline_line_is_registered_for_cpu_batch_only() {
13201 assert!(supplemental_supports_cpu_batch("advance_decline_line"));
13202 assert!(!supplemental_supports_cuda_batch("advance_decline_line"));
13203 let info = get_indicator("advance_decline_line").unwrap();
13204 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13205 assert_eq!(info.outputs.len(), 1);
13206 assert_eq!(info.outputs[0].id, "value");
13207 assert!(info.params.is_empty());
13208 assert!(info.capabilities.supports_cpu_single);
13209 assert!(info.capabilities.supports_cpu_batch);
13210 assert!(!info.capabilities.supports_cuda_batch);
13211 assert!(!info.capabilities.supports_cuda_vram);
13212 }
13213
13214 #[test]
13215 fn decisionpoint_breadth_swenlin_trading_oscillator_is_registered_for_cpu_batch_only() {
13216 assert!(supplemental_supports_cpu_batch(
13217 "decisionpoint_breadth_swenlin_trading_oscillator"
13218 ));
13219 assert!(!supplemental_supports_cuda_batch(
13220 "decisionpoint_breadth_swenlin_trading_oscillator"
13221 ));
13222 let info = get_indicator("decisionpoint_breadth_swenlin_trading_oscillator").unwrap();
13223 assert_eq!(info.input_kind, IndicatorInputKind::HighLow);
13224 assert_eq!(info.outputs.len(), 1);
13225 assert_eq!(info.outputs[0].id, "value");
13226 assert!(info.params.is_empty());
13227 assert!(info.capabilities.supports_cpu_single);
13228 assert!(info.capabilities.supports_cpu_batch);
13229 assert!(!info.capabilities.supports_cuda_batch);
13230 assert!(!info.capabilities.supports_cuda_vram);
13231 }
13232
13233 #[test]
13234 fn velocity_acceleration_indicator_is_registered_for_cpu_batch_only() {
13235 assert!(supplemental_supports_cpu_batch(
13236 "velocity_acceleration_indicator"
13237 ));
13238 assert!(!supplemental_supports_cuda_batch(
13239 "velocity_acceleration_indicator"
13240 ));
13241 let info = get_indicator("velocity_acceleration_indicator").unwrap();
13242 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13243 assert_eq!(info.outputs.len(), 1);
13244 assert_eq!(info.outputs[0].id, "value");
13245 assert_eq!(info.params.len(), 3);
13246 assert_eq!(info.params[0].key, "length");
13247 assert_eq!(info.params[1].key, "smooth_length");
13248 assert_eq!(info.params[2].key, "source");
13249 assert!(info.capabilities.supports_cpu_single);
13250 assert!(info.capabilities.supports_cpu_batch);
13251 assert!(!info.capabilities.supports_cuda_batch);
13252 assert!(!info.capabilities.supports_cuda_vram);
13253 }
13254
13255 #[test]
13256 fn normalized_resonator_is_registered_for_cpu_batch_only() {
13257 assert!(supplemental_supports_cpu_batch("normalized_resonator"));
13258 assert!(!supplemental_supports_cuda_batch("normalized_resonator"));
13259 let info = get_indicator("normalized_resonator").unwrap();
13260 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13261 assert_eq!(info.outputs.len(), 2);
13262 assert_eq!(info.outputs[0].id, "oscillator");
13263 assert_eq!(info.outputs[1].id, "signal");
13264 assert_eq!(info.params.len(), 5);
13265 assert_eq!(info.params[0].key, "period");
13266 assert_eq!(info.params[1].key, "delta");
13267 assert_eq!(info.params[2].key, "lookback_mult");
13268 assert_eq!(info.params[3].key, "signal_length");
13269 assert_eq!(info.params[4].key, "source");
13270 assert!(info.capabilities.supports_cpu_single);
13271 assert!(info.capabilities.supports_cpu_batch);
13272 assert!(!info.capabilities.supports_cuda_batch);
13273 assert!(!info.capabilities.supports_cuda_vram);
13274 }
13275
13276 #[test]
13277 fn monotonicity_index_is_registered_for_cpu_batch_only() {
13278 assert!(supplemental_supports_cpu_batch("monotonicity_index"));
13279 assert!(!supplemental_supports_cuda_batch("monotonicity_index"));
13280 let info = get_indicator("monotonicity_index").unwrap();
13281 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13282 assert_eq!(info.outputs.len(), 3);
13283 assert_eq!(info.outputs[0].id, "index");
13284 assert_eq!(info.outputs[1].id, "cumulative_mean");
13285 assert_eq!(info.outputs[2].id, "upper_bound");
13286 assert_eq!(info.params.len(), 4);
13287 assert_eq!(info.params[0].key, "length");
13288 assert_eq!(info.params[1].key, "mode");
13289 assert_eq!(info.params[2].key, "index_smooth");
13290 assert_eq!(info.params[3].key, "source");
13291 assert!(info.capabilities.supports_cpu_single);
13292 assert!(info.capabilities.supports_cpu_batch);
13293 assert!(!info.capabilities.supports_cuda_batch);
13294 assert!(!info.capabilities.supports_cuda_vram);
13295 }
13296
13297 #[test]
13298 fn half_causal_estimator_is_registered_for_cpu_batch_only() {
13299 assert!(supplemental_supports_cpu_batch("half_causal_estimator"));
13300 assert!(!supplemental_supports_cuda_batch("half_causal_estimator"));
13301 let info = get_indicator("half_causal_estimator").unwrap();
13302 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13303 assert_eq!(info.outputs.len(), 2);
13304 assert_eq!(info.outputs[0].id, "estimate");
13305 assert_eq!(info.outputs[1].id, "expected_value");
13306 assert_eq!(info.params.len(), 10);
13307 assert_eq!(info.params[0].key, "slots_per_day");
13308 assert_eq!(info.params[1].key, "data_period");
13309 assert_eq!(info.params[9].key, "source");
13310 assert!(info.capabilities.supports_cpu_single);
13311 assert!(info.capabilities.supports_cpu_batch);
13312 assert!(!info.capabilities.supports_cuda_batch);
13313 assert!(!info.capabilities.supports_cuda_vram);
13314 }
13315
13316 #[test]
13317 fn bull_power_vs_bear_power_is_registered_for_cpu_batch_only() {
13318 assert!(supplemental_supports_cpu_batch("bull_power_vs_bear_power"));
13319 assert!(!supplemental_supports_cuda_batch(
13320 "bull_power_vs_bear_power"
13321 ));
13322 let info = get_indicator("bull_power_vs_bear_power").unwrap();
13323 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13324 assert_eq!(info.outputs.len(), 1);
13325 assert_eq!(info.outputs[0].id, "value");
13326 assert_eq!(info.params.len(), 1);
13327 assert_eq!(info.params[0].key, "period");
13328 assert!(info.capabilities.supports_cpu_single);
13329 assert!(info.capabilities.supports_cpu_batch);
13330 assert!(!info.capabilities.supports_cuda_batch);
13331 assert!(!info.capabilities.supports_cuda_vram);
13332 }
13333
13334 #[test]
13335 fn didi_index_is_registered_for_cpu_batch_only() {
13336 assert!(supplemental_supports_cpu_batch("didi_index"));
13337 assert!(!supplemental_supports_cuda_batch("didi_index"));
13338 let info = get_indicator("didi_index").unwrap();
13339 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13340 assert_eq!(info.outputs.len(), 4);
13341 assert_eq!(info.outputs[0].id, "short");
13342 assert_eq!(info.outputs[1].id, "long");
13343 assert_eq!(info.outputs[2].id, "crossover");
13344 assert_eq!(info.outputs[3].id, "crossunder");
13345 assert_eq!(info.params.len(), 3);
13346 assert!(info.capabilities.supports_cpu_single);
13347 assert!(info.capabilities.supports_cpu_batch);
13348 assert!(!info.capabilities.supports_cuda_batch);
13349 assert!(!info.capabilities.supports_cuda_vram);
13350 }
13351
13352 #[test]
13353 fn ehlers_autocorrelation_periodogram_is_registered_for_cpu_batch_only() {
13354 assert!(supplemental_supports_cpu_batch(
13355 "ehlers_autocorrelation_periodogram"
13356 ));
13357 assert!(!supplemental_supports_cuda_batch(
13358 "ehlers_autocorrelation_periodogram"
13359 ));
13360 let info = get_indicator("ehlers_autocorrelation_periodogram").unwrap();
13361 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13362 assert_eq!(info.outputs.len(), 2);
13363 assert_eq!(info.outputs[0].id, "dominant_cycle");
13364 assert_eq!(info.outputs[1].id, "normalized_power");
13365 assert_eq!(info.params.len(), 4);
13366 assert_eq!(info.params[0].key, "min_period");
13367 assert_eq!(info.params[1].key, "max_period");
13368 assert_eq!(info.params[2].key, "avg_length");
13369 assert_eq!(info.params[3].key, "enhance");
13370 assert!(info.capabilities.supports_cpu_single);
13371 assert!(info.capabilities.supports_cpu_batch);
13372 assert!(!info.capabilities.supports_cuda_batch);
13373 assert!(!info.capabilities.supports_cuda_vram);
13374 }
13375
13376 #[test]
13377 fn ehlers_linear_extrapolation_predictor_is_registered_for_cpu_batch_only() {
13378 assert!(supplemental_supports_cpu_batch(
13379 "ehlers_linear_extrapolation_predictor"
13380 ));
13381 assert!(!supplemental_supports_cuda_batch(
13382 "ehlers_linear_extrapolation_predictor"
13383 ));
13384 let info = get_indicator("ehlers_linear_extrapolation_predictor").unwrap();
13385 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13386 assert_eq!(info.outputs.len(), 5);
13387 assert_eq!(info.outputs[0].id, "prediction");
13388 assert_eq!(info.outputs[1].id, "filter");
13389 assert_eq!(info.outputs[2].id, "state");
13390 assert_eq!(info.outputs[3].id, "go_long");
13391 assert_eq!(info.outputs[4].id, "go_short");
13392 assert_eq!(info.params.len(), 5);
13393 assert_eq!(info.params[0].key, "high_pass_length");
13394 assert_eq!(info.params[1].key, "low_pass_length");
13395 assert_eq!(info.params[2].key, "gain");
13396 assert_eq!(info.params[3].key, "bars_forward");
13397 assert_eq!(info.params[4].key, "signal_mode");
13398 assert!(info.capabilities.supports_cpu_single);
13399 assert!(info.capabilities.supports_cpu_batch);
13400 assert!(!info.capabilities.supports_cuda_batch);
13401 assert!(!info.capabilities.supports_cuda_vram);
13402 }
13403
13404 #[test]
13405 fn vertical_horizontal_filter_is_registered_for_cpu_batch_only() {
13406 assert!(supplemental_supports_cpu_batch(
13407 "vertical_horizontal_filter"
13408 ));
13409 assert!(!supplemental_supports_cuda_batch(
13410 "vertical_horizontal_filter"
13411 ));
13412 let info = get_indicator("vertical_horizontal_filter").unwrap();
13413 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13414 assert_eq!(info.outputs.len(), 1);
13415 assert_eq!(info.outputs[0].id, "value");
13416 assert_eq!(info.params.len(), 1);
13417 assert_eq!(info.params[0].key, "length");
13418 assert!(info.capabilities.supports_cpu_single);
13419 assert!(info.capabilities.supports_cpu_batch);
13420 assert!(!info.capabilities.supports_cuda_batch);
13421 assert!(!info.capabilities.supports_cuda_vram);
13422 }
13423
13424 #[test]
13425 fn squeeze_index_is_registered_for_cpu_batch_only() {
13426 assert!(supplemental_supports_cpu_batch("squeeze_index"));
13427 assert!(!supplemental_supports_cuda_batch("squeeze_index"));
13428 let info = get_indicator("squeeze_index").unwrap();
13429 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13430 assert_eq!(info.outputs.len(), 1);
13431 assert_eq!(info.outputs[0].id, "value");
13432 assert_eq!(info.params.len(), 2);
13433 assert_eq!(info.params[0].key, "conv");
13434 assert_eq!(info.params[1].key, "length");
13435 assert!(info.capabilities.supports_cpu_single);
13436 assert!(info.capabilities.supports_cpu_batch);
13437 assert!(!info.capabilities.supports_cuda_batch);
13438 assert!(!info.capabilities.supports_cuda_vram);
13439 }
13440
13441 #[test]
13442 fn stochastic_distance_is_registered_for_cpu_batch_only() {
13443 assert!(supplemental_supports_cpu_batch("stochastic_distance"));
13444 assert!(!supplemental_supports_cuda_batch("stochastic_distance"));
13445 let info = get_indicator("stochastic_distance").unwrap();
13446 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13447 assert_eq!(info.outputs.len(), 2);
13448 assert_eq!(info.outputs[0].id, "oscillator");
13449 assert_eq!(info.outputs[1].id, "signal");
13450 assert_eq!(info.params.len(), 5);
13451 assert_eq!(info.params[0].key, "lookback_length");
13452 assert_eq!(info.params[1].key, "length1");
13453 assert_eq!(info.params[2].key, "length2");
13454 assert_eq!(info.params[3].key, "ob_level");
13455 assert_eq!(info.params[4].key, "os_level");
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 adaptive_bandpass_trigger_oscillator_is_registered_for_cpu_batch_only() {
13464 assert!(supplemental_supports_cpu_batch(
13465 "adaptive_bandpass_trigger_oscillator"
13466 ));
13467 assert!(!supplemental_supports_cuda_batch(
13468 "adaptive_bandpass_trigger_oscillator"
13469 ));
13470 let info = get_indicator("adaptive_bandpass_trigger_oscillator").unwrap();
13471 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13472 assert_eq!(info.outputs.len(), 2);
13473 assert_eq!(info.outputs[0].id, "in_phase");
13474 assert_eq!(info.outputs[1].id, "lead");
13475 assert_eq!(info.params.len(), 2);
13476 assert_eq!(info.params[0].key, "delta");
13477 assert_eq!(info.params[1].key, "alpha");
13478 assert!(info.capabilities.supports_cpu_single);
13479 assert!(info.capabilities.supports_cpu_batch);
13480 assert!(!info.capabilities.supports_cuda_batch);
13481 assert!(!info.capabilities.supports_cuda_vram);
13482 }
13483
13484 #[test]
13485 fn absolute_strength_index_oscillator_is_registered_for_cpu_batch_only() {
13486 assert!(supplemental_supports_cpu_batch(
13487 "absolute_strength_index_oscillator"
13488 ));
13489 assert!(!supplemental_supports_cuda_batch(
13490 "absolute_strength_index_oscillator"
13491 ));
13492 let info = get_indicator("absolute_strength_index_oscillator").unwrap();
13493 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13494 assert_eq!(info.outputs.len(), 3);
13495 assert_eq!(info.outputs[0].id, "oscillator");
13496 assert_eq!(info.outputs[1].id, "signal");
13497 assert_eq!(info.outputs[2].id, "histogram");
13498 assert_eq!(info.params.len(), 2);
13499 assert_eq!(info.params[0].key, "ema_length");
13500 assert_eq!(info.params[1].key, "signal_length");
13501 assert!(info.capabilities.supports_cpu_single);
13502 assert!(info.capabilities.supports_cpu_batch);
13503 assert!(!info.capabilities.supports_cuda_batch);
13504 assert!(!info.capabilities.supports_cuda_vram);
13505 }
13506
13507 #[test]
13508 fn premier_rsi_oscillator_is_registered_for_cpu_batch_only() {
13509 assert!(supplemental_supports_cpu_batch("premier_rsi_oscillator"));
13510 assert!(!supplemental_supports_cuda_batch("premier_rsi_oscillator"));
13511 let info = get_indicator("premier_rsi_oscillator").unwrap();
13512 assert_eq!(info.input_kind, IndicatorInputKind::Slice);
13513 assert_eq!(info.outputs.len(), 1);
13514 assert_eq!(info.outputs[0].id, "value");
13515 assert_eq!(info.params.len(), 3);
13516 assert_eq!(info.params[0].key, "rsi_length");
13517 assert_eq!(info.params[1].key, "stoch_length");
13518 assert_eq!(info.params[2].key, "smooth_length");
13519 assert!(info.capabilities.supports_cpu_single);
13520 assert!(info.capabilities.supports_cpu_batch);
13521 assert!(!info.capabilities.supports_cuda_batch);
13522 assert!(!info.capabilities.supports_cuda_vram);
13523 }
13524
13525 #[test]
13526 fn multi_length_stochastic_average_is_registered_for_cpu_batch_only() {
13527 assert!(supplemental_supports_cpu_batch(
13528 "multi_length_stochastic_average"
13529 ));
13530 assert!(!supplemental_supports_cuda_batch(
13531 "multi_length_stochastic_average"
13532 ));
13533 let info = get_indicator("multi_length_stochastic_average").unwrap();
13534 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13535 assert_eq!(info.outputs.len(), 1);
13536 assert_eq!(info.outputs[0].id, "value");
13537 assert_eq!(info.params.len(), 6);
13538 assert_eq!(info.params[0].key, "length");
13539 assert_eq!(info.params[1].key, "presmooth");
13540 assert_eq!(info.params[2].key, "premethod");
13541 assert_eq!(info.params[3].key, "postsmooth");
13542 assert_eq!(info.params[4].key, "postmethod");
13543 assert_eq!(info.params[5].key, "source");
13544 assert!(info.capabilities.supports_cpu_single);
13545 assert!(info.capabilities.supports_cpu_batch);
13546 assert!(!info.capabilities.supports_cuda_batch);
13547 assert!(!info.capabilities.supports_cuda_vram);
13548 }
13549
13550 #[test]
13551 fn hull_butterfly_oscillator_is_registered_for_cpu_batch_only() {
13552 assert!(supplemental_supports_cpu_batch("hull_butterfly_oscillator"));
13553 assert!(!supplemental_supports_cuda_batch(
13554 "hull_butterfly_oscillator"
13555 ));
13556 let info = get_indicator("hull_butterfly_oscillator").unwrap();
13557 assert_eq!(info.input_kind, IndicatorInputKind::Candles);
13558 assert_eq!(info.outputs.len(), 3);
13559 assert_eq!(info.outputs[0].id, "oscillator");
13560 assert_eq!(info.outputs[1].id, "cumulative_mean");
13561 assert_eq!(info.outputs[2].id, "signal");
13562 assert_eq!(info.params.len(), 3);
13563 assert_eq!(info.params[0].key, "length");
13564 assert_eq!(info.params[1].key, "mult");
13565 assert_eq!(info.params[2].key, "source");
13566 assert!(info.capabilities.supports_cpu_single);
13567 assert!(info.capabilities.supports_cpu_batch);
13568 assert!(!info.capabilities.supports_cuda_batch);
13569 assert!(!info.capabilities.supports_cuda_vram);
13570 }
13571
13572 #[test]
13573 fn fibonacci_trailing_stop_is_registered_for_cpu_batch_only() {
13574 assert!(supplemental_supports_cpu_batch("fibonacci_trailing_stop"));
13575 assert!(!supplemental_supports_cuda_batch("fibonacci_trailing_stop"));
13576 let info = get_indicator("fibonacci_trailing_stop").unwrap();
13577 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13578 assert_eq!(info.outputs.len(), 4);
13579 assert_eq!(info.outputs[0].id, "trailing_stop");
13580 assert_eq!(info.outputs[1].id, "long_stop");
13581 assert_eq!(info.outputs[2].id, "short_stop");
13582 assert_eq!(info.outputs[3].id, "direction");
13583 assert_eq!(info.params.len(), 4);
13584 assert_eq!(info.params[0].key, "left_bars");
13585 assert_eq!(info.params[1].key, "right_bars");
13586 assert_eq!(info.params[2].key, "level");
13587 assert_eq!(info.params[3].key, "trigger");
13588 assert!(info.capabilities.supports_cpu_single);
13589 assert!(info.capabilities.supports_cpu_batch);
13590 assert!(!info.capabilities.supports_cuda_batch);
13591 assert!(!info.capabilities.supports_cuda_vram);
13592 }
13593
13594 #[test]
13595 fn fibonacci_entry_bands_is_registered_for_cpu_batch_only() {
13596 assert!(supplemental_supports_cpu_batch("fibonacci_entry_bands"));
13597 assert!(!supplemental_supports_cuda_batch("fibonacci_entry_bands"));
13598 let info = get_indicator("fibonacci_entry_bands").unwrap();
13599 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13600 assert_eq!(info.outputs.len(), 18);
13601 assert_eq!(info.outputs[0].id, "middle");
13602 assert_eq!(info.outputs[1].id, "trend");
13603 assert_eq!(info.outputs[10].id, "tp_long_band");
13604 assert_eq!(info.outputs[11].id, "tp_short_band");
13605 assert_eq!(info.outputs[12].id, "go_long");
13606 assert_eq!(info.outputs[13].id, "go_short");
13607 assert_eq!(info.params.len(), 5);
13608 assert_eq!(info.params[0].key, "source");
13609 assert_eq!(info.params[1].key, "length");
13610 assert_eq!(info.params[2].key, "atr_length");
13611 assert_eq!(info.params[3].key, "use_atr");
13612 assert_eq!(info.params[4].key, "tp_aggressiveness");
13613 assert!(info.capabilities.supports_cpu_single);
13614 assert!(info.capabilities.supports_cpu_batch);
13615 assert!(!info.capabilities.supports_cuda_batch);
13616 assert!(!info.capabilities.supports_cuda_vram);
13617 }
13618
13619 #[test]
13620 fn volume_energy_reservoirs_is_registered_for_cpu_batch_only() {
13621 assert!(supplemental_supports_cpu_batch("volume_energy_reservoirs"));
13622 assert!(!supplemental_supports_cuda_batch(
13623 "volume_energy_reservoirs"
13624 ));
13625 let info = get_indicator("volume_energy_reservoirs").unwrap();
13626 assert_eq!(info.input_kind, IndicatorInputKind::Ohlcv);
13627 assert_eq!(info.outputs.len(), 6);
13628 assert_eq!(info.outputs[0].id, "momentum");
13629 assert_eq!(info.outputs[1].id, "reservoir");
13630 assert_eq!(info.outputs[2].id, "squeeze_active");
13631 assert_eq!(info.outputs[3].id, "squeeze_start");
13632 assert_eq!(info.outputs[4].id, "range_high");
13633 assert_eq!(info.outputs[5].id, "range_low");
13634 assert_eq!(info.params.len(), 2);
13635 assert_eq!(info.params[0].key, "length");
13636 assert_eq!(info.params[1].key, "sensitivity");
13637 assert!(info.capabilities.supports_cpu_single);
13638 assert!(info.capabilities.supports_cpu_batch);
13639 assert!(!info.capabilities.supports_cuda_batch);
13640 assert!(!info.capabilities.supports_cuda_vram);
13641 }
13642
13643 #[test]
13644 fn neighboring_trailing_stop_is_registered_for_cpu_batch_only() {
13645 assert!(supplemental_supports_cpu_batch("neighboring_trailing_stop"));
13646 assert!(!supplemental_supports_cuda_batch(
13647 "neighboring_trailing_stop"
13648 ));
13649 let info = get_indicator("neighboring_trailing_stop").unwrap();
13650 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13651 assert_eq!(info.outputs.len(), 6);
13652 assert_eq!(info.outputs[0].id, "trailing_stop");
13653 assert_eq!(info.outputs[1].id, "bullish_band");
13654 assert_eq!(info.outputs[2].id, "bearish_band");
13655 assert_eq!(info.outputs[3].id, "direction");
13656 assert_eq!(info.outputs[4].id, "discovery_bull");
13657 assert_eq!(info.outputs[5].id, "discovery_bear");
13658 assert_eq!(info.params.len(), 4);
13659 assert_eq!(info.params[0].key, "buffer_size");
13660 assert_eq!(info.params[1].key, "k");
13661 assert_eq!(info.params[2].key, "percentile");
13662 assert_eq!(info.params[3].key, "smooth");
13663 assert!(info.capabilities.supports_cpu_single);
13664 assert!(info.capabilities.supports_cpu_batch);
13665 assert!(!info.capabilities.supports_cuda_batch);
13666 assert!(!info.capabilities.supports_cuda_vram);
13667 }
13668
13669 #[test]
13670 fn macd_wave_signal_pro_is_registered_for_cpu_batch_only() {
13671 assert!(supplemental_supports_cpu_batch("macd_wave_signal_pro"));
13672 assert!(!supplemental_supports_cuda_batch("macd_wave_signal_pro"));
13673 let info = get_indicator("macd_wave_signal_pro").unwrap();
13674 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13675 assert_eq!(info.outputs.len(), 6);
13676 assert_eq!(info.outputs[0].id, "diff");
13677 assert_eq!(info.outputs[1].id, "dea");
13678 assert_eq!(info.outputs[2].id, "macd_histogram");
13679 assert_eq!(info.outputs[3].id, "line_convergence");
13680 assert_eq!(info.outputs[4].id, "buy_signal");
13681 assert_eq!(info.outputs[5].id, "sell_signal");
13682 assert!(info.params.is_empty());
13683 assert!(info.capabilities.supports_cpu_single);
13684 assert!(info.capabilities.supports_cpu_batch);
13685 assert!(!info.capabilities.supports_cuda_batch);
13686 assert!(!info.capabilities.supports_cuda_vram);
13687 }
13688
13689 #[test]
13690 fn hema_trend_levels_is_registered_for_cpu_batch_only() {
13691 assert!(supplemental_supports_cpu_batch("hema_trend_levels"));
13692 assert!(!supplemental_supports_cuda_batch("hema_trend_levels"));
13693 let info = get_indicator("hema_trend_levels").unwrap();
13694 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13695 assert_eq!(info.outputs.len(), 15);
13696 assert_eq!(info.outputs[0].id, "fast_hema");
13697 assert_eq!(info.outputs[1].id, "slow_hema");
13698 assert_eq!(info.outputs[2].id, "trend_direction");
13699 assert_eq!(info.outputs[3].id, "bar_state");
13700 assert_eq!(info.outputs[4].id, "bullish_crossover");
13701 assert_eq!(info.outputs[5].id, "bearish_crossunder");
13702 assert_eq!(info.outputs[6].id, "box_offset");
13703 assert_eq!(info.outputs[7].id, "bull_box_top");
13704 assert_eq!(info.outputs[8].id, "bull_box_bottom");
13705 assert_eq!(info.outputs[9].id, "bear_box_top");
13706 assert_eq!(info.outputs[10].id, "bear_box_bottom");
13707 assert_eq!(info.outputs[11].id, "bullish_test");
13708 assert_eq!(info.outputs[12].id, "bearish_test");
13709 assert_eq!(info.outputs[13].id, "bullish_test_level");
13710 assert_eq!(info.outputs[14].id, "bearish_test_level");
13711 assert_eq!(info.params.len(), 2);
13712 assert!(info.capabilities.supports_cpu_single);
13713 assert!(info.capabilities.supports_cpu_batch);
13714 assert!(!info.capabilities.supports_cuda_batch);
13715 assert!(!info.capabilities.supports_cuda_vram);
13716 }
13717
13718 #[test]
13719 fn grover_llorens_cycle_oscillator_is_registered_for_cpu_batch_only() {
13720 assert!(supplemental_supports_cpu_batch(
13721 "grover_llorens_cycle_oscillator"
13722 ));
13723 assert!(!supplemental_supports_cuda_batch(
13724 "grover_llorens_cycle_oscillator"
13725 ));
13726 let info = get_indicator("grover_llorens_cycle_oscillator").unwrap();
13727 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13728 assert_eq!(info.outputs.len(), 1);
13729 assert_eq!(info.outputs[0].id, "value");
13730 assert_eq!(info.params.len(), 5);
13731 assert_eq!(info.params[0].key, "length");
13732 assert_eq!(info.params[1].key, "mult");
13733 assert_eq!(info.params[2].key, "source");
13734 assert_eq!(info.params[3].key, "smooth");
13735 assert_eq!(info.params[4].key, "rsi_period");
13736 assert!(info.capabilities.supports_cpu_single);
13737 assert!(info.capabilities.supports_cpu_batch);
13738 assert!(!info.capabilities.supports_cuda_batch);
13739 assert!(!info.capabilities.supports_cuda_vram);
13740 }
13741
13742 #[test]
13743 fn intraday_momentum_index_is_registered_for_cpu_batch_only() {
13744 assert!(supplemental_supports_cpu_batch("intraday_momentum_index"));
13745 assert!(!supplemental_supports_cuda_batch("intraday_momentum_index"));
13746 let info = get_indicator("intraday_momentum_index").unwrap();
13747 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13748 assert_eq!(info.outputs.len(), 4);
13749 assert_eq!(info.outputs[0].id, "imi");
13750 assert_eq!(info.outputs[1].id, "upper_hit");
13751 assert_eq!(info.outputs[2].id, "lower_hit");
13752 assert_eq!(info.outputs[3].id, "signal");
13753 assert_eq!(info.params.len(), 6);
13754 assert_eq!(info.params[0].key, "length");
13755 assert_eq!(info.params[1].key, "length_ma");
13756 assert_eq!(info.params[2].key, "mult");
13757 assert_eq!(info.params[3].key, "length_bb");
13758 assert_eq!(info.params[4].key, "apply_smoothing");
13759 assert_eq!(info.params[5].key, "low_band");
13760 assert!(info.capabilities.supports_cpu_single);
13761 assert!(info.capabilities.supports_cpu_batch);
13762 assert!(!info.capabilities.supports_cuda_batch);
13763 assert!(!info.capabilities.supports_cuda_vram);
13764 }
13765
13766 #[test]
13767 fn vwap_zscore_with_signals_is_registered_for_cpu_batch_only() {
13768 assert!(supplemental_supports_cpu_batch("vwap_zscore_with_signals"));
13769 assert!(!supplemental_supports_cuda_batch(
13770 "vwap_zscore_with_signals"
13771 ));
13772 let info = get_indicator("vwap_zscore_with_signals").unwrap();
13773 assert_eq!(info.input_kind, IndicatorInputKind::CloseVolume);
13774 assert_eq!(info.outputs.len(), 3);
13775 assert_eq!(info.outputs[0].id, "zvwap");
13776 assert_eq!(info.outputs[1].id, "support_signal");
13777 assert_eq!(info.outputs[2].id, "resistance_signal");
13778 assert_eq!(info.params.len(), 3);
13779 assert_eq!(info.params[0].key, "length");
13780 assert_eq!(info.params[1].key, "upper_bottom");
13781 assert_eq!(info.params[2].key, "lower_bottom");
13782 assert!(info.capabilities.supports_cpu_single);
13783 assert!(info.capabilities.supports_cpu_batch);
13784 assert!(!info.capabilities.supports_cuda_batch);
13785 assert!(!info.capabilities.supports_cuda_vram);
13786 }
13787
13788 #[test]
13789 fn atr_percentile_is_registered_for_cpu_batch_only() {
13790 assert!(supplemental_supports_cpu_batch("atr_percentile"));
13791 assert!(!supplemental_supports_cuda_batch("atr_percentile"));
13792 let info = get_indicator("atr_percentile").unwrap();
13793 assert_eq!(info.input_kind, IndicatorInputKind::Ohlc);
13794 assert_eq!(info.outputs.len(), 1);
13795 assert_eq!(info.outputs[0].id, "value");
13796 assert_eq!(info.params.len(), 2);
13797 assert_eq!(info.params[0].key, "atr_length");
13798 assert_eq!(info.params[1].key, "percentile_length");
13799 assert!(info.capabilities.supports_cpu_single);
13800 assert!(info.capabilities.supports_cpu_batch);
13801 assert!(!info.capabilities.supports_cuda_batch);
13802 assert!(!info.capabilities.supports_cuda_vram);
13803 }
13804
13805 #[test]
13806 fn gopalakrishnan_range_index_is_registered_for_cpu_batch_only() {
13807 assert!(supplemental_supports_cpu_batch(
13808 "gopalakrishnan_range_index"
13809 ));
13810 assert!(!supplemental_supports_cuda_batch(
13811 "gopalakrishnan_range_index"
13812 ));
13813 let info = get_indicator("gopalakrishnan_range_index").unwrap();
13814 assert_eq!(info.input_kind, IndicatorInputKind::HighLow);
13815 assert_eq!(info.outputs.len(), 1);
13816 assert_eq!(info.outputs[0].id, "value");
13817 assert_eq!(info.params.len(), 1);
13818 assert_eq!(info.params[0].key, "length");
13819 assert!(info.capabilities.supports_cpu_single);
13820 assert!(info.capabilities.supports_cpu_batch);
13821 assert!(!info.capabilities.supports_cuda_batch);
13822 assert!(!info.capabilities.supports_cuda_vram);
13823 }
13824
13825 #[test]
13826 fn demand_index_is_registered_for_cpu_batch_only() {
13827 assert!(supplemental_supports_cpu_batch("demand_index"));
13828 assert!(!supplemental_supports_cuda_batch("demand_index"));
13829 let info = get_indicator("demand_index").unwrap();
13830 assert_eq!(info.input_kind, IndicatorInputKind::Ohlcv);
13831 assert_eq!(info.outputs.len(), 2);
13832 assert_eq!(info.outputs[0].id, "demand_index");
13833 assert_eq!(info.outputs[1].id, "signal");
13834 assert_eq!(info.params.len(), 4);
13835 assert_eq!(info.params[0].key, "len_bs");
13836 assert_eq!(info.params[1].key, "len_bs_ma");
13837 assert_eq!(info.params[2].key, "len_di_ma");
13838 assert_eq!(info.params[3].key, "ma_type");
13839 assert!(info.capabilities.supports_cpu_single);
13840 assert!(info.capabilities.supports_cpu_batch);
13841 assert!(!info.capabilities.supports_cuda_batch);
13842 assert!(!info.capabilities.supports_cuda_vram);
13843 }
13844}