v1 0.0.1

Scalar mathematical library for neural networks.
Documentation
// libs/v1/src/finance/oscillator.rs
//
//! # Математика рыночных осцилляторов
//!
//! Модуль содержит чистые скалярные функции для расчета импульса 
//! и нормализации финансовых диапазонов.

/// # Расчет фактора относительной силы (Relative Strength)
///
/// Математическое отношение среднего прироста к среднему убытку.
/// Если убыток равен нулю, возвращает максимальное значение (`f32::MAX`).
pub fn calculate_rs(avg_gain: f32, avg_loss: f32) -> f32 {
    if avg_gain.is_nan() || avg_loss.is_nan() {
        return f32::NAN;
    }
    if avg_loss <= 0.0 {
        if avg_gain <= 0.0 {
            return 1.0; // Рынок мертв
        }
        return f32::INFINITY; // Чистый аптренд
    }
    
    let rs = avg_gain / avg_loss;
    if rs.is_infinite() {
        f32::INFINITY
    } else {
        rs
    }
}

/// # Финансовое сжатие диапазона (RSI функция)
///
/// Скалярная функция, нормализующая коэффициент относительной силы (RS)
/// в жесткий диапазон от 0.0 до 100.0. 
/// Математический аналог сигмоиды для временных рядов.
pub fn squash_rsi(rs: f32) -> f32 {
    if rs.is_nan() || rs <= 0.0 {
        return 0.0;
    }
    if rs.is_infinite() {
        return 100.0;
    }
    
    let val = 100.0 - (100.0 / (1.0 + rs));
    // Защита от машинного округления f32 на ультра-малых числах
    if val < 0.0 { 0.0 } else { val }
}