package finance

// EMA calcula la media movil exponencial de data con el periodo dado.
// El primer valor valido se inicializa con la SMA de los primeros period elementos.
// Los primeros period-1 elementos del resultado son 0.
func EMA(data []float64, period int) []float64 {
	n := len(data)
	result := make([]float64, n)
	if period <= 0 || period > n {
		return result
	}
	k := 2.0 / float64(period+1)
	// Seed con SMA
	var sum float64
	for i := 0; i < period; i++ {
		sum += data[i]
	}
	result[period-1] = sum / float64(period)
	for i := period; i < n; i++ {
		result[i] = data[i]*k + result[i-1]*(1-k)
	}
	return result
}
