pub const FUNCTION_COUNT: usize = 161;
pub const IMPLEMENTED_FUNCTION_COUNT: usize = 161;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FunctionGroup {
OverlapStudies,
MomentumIndicators,
VolumeIndicators,
VolatilityIndicators,
PriceTransform,
CycleIndicators,
PatternRecognition,
StatisticFunctions,
MathTransform,
MathOperators,
}
impl FunctionGroup {
pub const ALL: &'static [Self] = &[
Self::OverlapStudies,
Self::MomentumIndicators,
Self::VolumeIndicators,
Self::VolatilityIndicators,
Self::PriceTransform,
Self::CycleIndicators,
Self::PatternRecognition,
Self::StatisticFunctions,
Self::MathTransform,
Self::MathOperators,
];
pub const fn as_str(self) -> &'static str {
match self {
Self::OverlapStudies => "Overlap Studies",
Self::MomentumIndicators => "Momentum Indicators",
Self::VolumeIndicators => "Volume Indicators",
Self::VolatilityIndicators => "Volatility Indicators",
Self::PriceTransform => "Price Transform",
Self::CycleIndicators => "Cycle Indicators",
Self::PatternRecognition => "Pattern Recognition",
Self::StatisticFunctions => "Statistic Functions",
Self::MathTransform => "Math Transform",
Self::MathOperators => "Math Operators",
}
}
pub const fn expected_count(self) -> usize {
match self {
Self::OverlapStudies => 18,
Self::MomentumIndicators => 31,
Self::VolumeIndicators => 3,
Self::VolatilityIndicators => 3,
Self::PriceTransform => 5,
Self::CycleIndicators => 5,
Self::PatternRecognition => 61,
Self::StatisticFunctions => 9,
Self::MathTransform => 15,
Self::MathOperators => 11,
}
}
pub const fn rust_module(self) -> &'static str {
match self {
Self::OverlapStudies => "overlap",
Self::MomentumIndicators => "momentum",
Self::VolumeIndicators => "volume",
Self::VolatilityIndicators => "volatility",
Self::PriceTransform => "price_transform",
Self::CycleIndicators => "cycle",
Self::PatternRecognition => "pattern_recognition",
Self::StatisticFunctions => "statistic",
Self::MathTransform => "math_transform",
Self::MathOperators => "math_operators",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum ImplementationStatus {
Implemented,
Planned,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct FunctionInfo {
pub name: &'static str,
pub group: FunctionGroup,
pub status: ImplementationStatus,
}
impl FunctionInfo {
pub const fn is_implemented(self) -> bool {
match self.status {
ImplementationStatus::Implemented => true,
ImplementationStatus::Planned => false,
}
}
pub const fn rust_module(self) -> &'static str {
self.group.rust_module()
}
}
macro_rules! function {
($name:literal, $group:ident, $status:ident) => {
FunctionInfo {
name: $name,
group: FunctionGroup::$group,
status: ImplementationStatus::$status,
}
};
}
pub const TALIB_FUNCTIONS: &[FunctionInfo] = &[
function!("ACCBANDS", OverlapStudies, Implemented),
function!("BBANDS", OverlapStudies, Implemented),
function!("DEMA", OverlapStudies, Implemented),
function!("EMA", OverlapStudies, Implemented),
function!("HT_TRENDLINE", OverlapStudies, Implemented),
function!("KAMA", OverlapStudies, Implemented),
function!("MA", OverlapStudies, Implemented),
function!("MAMA", OverlapStudies, Implemented),
function!("MAVP", OverlapStudies, Implemented),
function!("MIDPOINT", OverlapStudies, Implemented),
function!("MIDPRICE", OverlapStudies, Implemented),
function!("SAR", OverlapStudies, Implemented),
function!("SAREXT", OverlapStudies, Implemented),
function!("SMA", OverlapStudies, Implemented),
function!("T3", OverlapStudies, Implemented),
function!("TEMA", OverlapStudies, Implemented),
function!("TRIMA", OverlapStudies, Implemented),
function!("WMA", OverlapStudies, Implemented),
function!("ADX", MomentumIndicators, Implemented),
function!("ADXR", MomentumIndicators, Implemented),
function!("APO", MomentumIndicators, Implemented),
function!("AROON", MomentumIndicators, Implemented),
function!("AROONOSC", MomentumIndicators, Implemented),
function!("BOP", MomentumIndicators, Implemented),
function!("CCI", MomentumIndicators, Implemented),
function!("CMO", MomentumIndicators, Implemented),
function!("DX", MomentumIndicators, Implemented),
function!("IMI", MomentumIndicators, Implemented),
function!("MACD", MomentumIndicators, Implemented),
function!("MACDEXT", MomentumIndicators, Implemented),
function!("MACDFIX", MomentumIndicators, Implemented),
function!("MFI", MomentumIndicators, Implemented),
function!("MINUS_DI", MomentumIndicators, Implemented),
function!("MINUS_DM", MomentumIndicators, Implemented),
function!("MOM", MomentumIndicators, Implemented),
function!("PLUS_DI", MomentumIndicators, Implemented),
function!("PLUS_DM", MomentumIndicators, Implemented),
function!("PPO", MomentumIndicators, Implemented),
function!("ROC", MomentumIndicators, Implemented),
function!("ROCP", MomentumIndicators, Implemented),
function!("ROCR", MomentumIndicators, Implemented),
function!("ROCR100", MomentumIndicators, Implemented),
function!("RSI", MomentumIndicators, Implemented),
function!("STOCH", MomentumIndicators, Implemented),
function!("STOCHF", MomentumIndicators, Implemented),
function!("STOCHRSI", MomentumIndicators, Implemented),
function!("TRIX", MomentumIndicators, Implemented),
function!("ULTOSC", MomentumIndicators, Implemented),
function!("WILLR", MomentumIndicators, Implemented),
function!("AD", VolumeIndicators, Implemented),
function!("ADOSC", VolumeIndicators, Implemented),
function!("OBV", VolumeIndicators, Implemented),
function!("ATR", VolatilityIndicators, Implemented),
function!("NATR", VolatilityIndicators, Implemented),
function!("TRANGE", VolatilityIndicators, Implemented),
function!("AVGDEV", PriceTransform, Implemented),
function!("AVGPRICE", PriceTransform, Implemented),
function!("MEDPRICE", PriceTransform, Implemented),
function!("TYPPRICE", PriceTransform, Implemented),
function!("WCLPRICE", PriceTransform, Implemented),
function!("HT_DCPERIOD", CycleIndicators, Implemented),
function!("HT_DCPHASE", CycleIndicators, Implemented),
function!("HT_PHASOR", CycleIndicators, Implemented),
function!("HT_SINE", CycleIndicators, Implemented),
function!("HT_TRENDMODE", CycleIndicators, Implemented),
function!("CDL2CROWS", PatternRecognition, Implemented),
function!("CDL3BLACKCROWS", PatternRecognition, Implemented),
function!("CDL3INSIDE", PatternRecognition, Implemented),
function!("CDL3LINESTRIKE", PatternRecognition, Implemented),
function!("CDL3OUTSIDE", PatternRecognition, Implemented),
function!("CDL3STARSINSOUTH", PatternRecognition, Implemented),
function!("CDL3WHITESOLDIERS", PatternRecognition, Implemented),
function!("CDLABANDONEDBABY", PatternRecognition, Implemented),
function!("CDLADVANCEBLOCK", PatternRecognition, Implemented),
function!("CDLBELTHOLD", PatternRecognition, Implemented),
function!("CDLBREAKAWAY", PatternRecognition, Implemented),
function!("CDLCLOSINGMARUBOZU", PatternRecognition, Implemented),
function!("CDLCONCEALBABYSWALL", PatternRecognition, Implemented),
function!("CDLCOUNTERATTACK", PatternRecognition, Implemented),
function!("CDLDARKCLOUDCOVER", PatternRecognition, Implemented),
function!("CDLDOJI", PatternRecognition, Implemented),
function!("CDLDOJISTAR", PatternRecognition, Implemented),
function!("CDLDRAGONFLYDOJI", PatternRecognition, Implemented),
function!("CDLENGULFING", PatternRecognition, Implemented),
function!("CDLEVENINGDOJISTAR", PatternRecognition, Implemented),
function!("CDLEVENINGSTAR", PatternRecognition, Implemented),
function!("CDLGAPSIDESIDEWHITE", PatternRecognition, Implemented),
function!("CDLGRAVESTONEDOJI", PatternRecognition, Implemented),
function!("CDLHAMMER", PatternRecognition, Implemented),
function!("CDLHANGINGMAN", PatternRecognition, Implemented),
function!("CDLHARAMI", PatternRecognition, Implemented),
function!("CDLHARAMICROSS", PatternRecognition, Implemented),
function!("CDLHIGHWAVE", PatternRecognition, Implemented),
function!("CDLHIKKAKE", PatternRecognition, Implemented),
function!("CDLHIKKAKEMOD", PatternRecognition, Implemented),
function!("CDLHOMINGPIGEON", PatternRecognition, Implemented),
function!("CDLIDENTICAL3CROWS", PatternRecognition, Implemented),
function!("CDLINNECK", PatternRecognition, Implemented),
function!("CDLINVERTEDHAMMER", PatternRecognition, Implemented),
function!("CDLKICKING", PatternRecognition, Implemented),
function!("CDLKICKINGBYLENGTH", PatternRecognition, Implemented),
function!("CDLLADDERBOTTOM", PatternRecognition, Implemented),
function!("CDLLONGLEGGEDDOJI", PatternRecognition, Implemented),
function!("CDLLONGLINE", PatternRecognition, Implemented),
function!("CDLMARUBOZU", PatternRecognition, Implemented),
function!("CDLMATCHINGLOW", PatternRecognition, Implemented),
function!("CDLMATHOLD", PatternRecognition, Implemented),
function!("CDLMORNINGDOJISTAR", PatternRecognition, Implemented),
function!("CDLMORNINGSTAR", PatternRecognition, Implemented),
function!("CDLONNECK", PatternRecognition, Implemented),
function!("CDLPIERCING", PatternRecognition, Implemented),
function!("CDLRICKSHAWMAN", PatternRecognition, Implemented),
function!("CDLRISEFALL3METHODS", PatternRecognition, Implemented),
function!("CDLSEPARATINGLINES", PatternRecognition, Implemented),
function!("CDLSHOOTINGSTAR", PatternRecognition, Implemented),
function!("CDLSHORTLINE", PatternRecognition, Implemented),
function!("CDLSPINNINGTOP", PatternRecognition, Implemented),
function!("CDLSTALLEDPATTERN", PatternRecognition, Implemented),
function!("CDLSTICKSANDWICH", PatternRecognition, Implemented),
function!("CDLTAKURI", PatternRecognition, Implemented),
function!("CDLTASUKIGAP", PatternRecognition, Implemented),
function!("CDLTHRUSTING", PatternRecognition, Implemented),
function!("CDLTRISTAR", PatternRecognition, Implemented),
function!("CDLUNIQUE3RIVER", PatternRecognition, Implemented),
function!("CDLUPSIDEGAP2CROWS", PatternRecognition, Implemented),
function!("CDLXSIDEGAP3METHODS", PatternRecognition, Implemented),
function!("BETA", StatisticFunctions, Implemented),
function!("CORREL", StatisticFunctions, Implemented),
function!("LINEARREG", StatisticFunctions, Implemented),
function!("LINEARREG_ANGLE", StatisticFunctions, Implemented),
function!("LINEARREG_INTERCEPT", StatisticFunctions, Implemented),
function!("LINEARREG_SLOPE", StatisticFunctions, Implemented),
function!("STDDEV", StatisticFunctions, Implemented),
function!("TSF", StatisticFunctions, Implemented),
function!("VAR", StatisticFunctions, Implemented),
function!("ACOS", MathTransform, Implemented),
function!("ASIN", MathTransform, Implemented),
function!("ATAN", MathTransform, Implemented),
function!("CEIL", MathTransform, Implemented),
function!("COS", MathTransform, Implemented),
function!("COSH", MathTransform, Implemented),
function!("EXP", MathTransform, Implemented),
function!("FLOOR", MathTransform, Implemented),
function!("LN", MathTransform, Implemented),
function!("LOG10", MathTransform, Implemented),
function!("SIN", MathTransform, Implemented),
function!("SINH", MathTransform, Implemented),
function!("SQRT", MathTransform, Implemented),
function!("TAN", MathTransform, Implemented),
function!("TANH", MathTransform, Implemented),
function!("ADD", MathOperators, Implemented),
function!("DIV", MathOperators, Implemented),
function!("MAX", MathOperators, Implemented),
function!("MAXINDEX", MathOperators, Implemented),
function!("MIN", MathOperators, Implemented),
function!("MININDEX", MathOperators, Implemented),
function!("MINMAX", MathOperators, Implemented),
function!("MINMAXINDEX", MathOperators, Implemented),
function!("MULT", MathOperators, Implemented),
function!("SUB", MathOperators, Implemented),
function!("SUM", MathOperators, Implemented),
];
pub fn function(name: &str) -> Option<&'static FunctionInfo> {
TALIB_FUNCTIONS.iter().find(|info| info.name == name)
}