Я не работал с modx, документация говорит что это php+mysql.
17 секунд на формирование всего 400 записей это необычно долго. С высокой вероятностью там происходит что то типа - на каждую запись выполняется сложный запрос вместо того, чтобы сделать все одним.
Традиционно, в любом приложении, узкие места начинают искать с помощью профилирования - оценке времени выполнения разных мест в коде (как долго в сумме в какой функции идет выполнение) и sql запросов (можно средствами базы данных, а можно все тем же профилировщиком кода).
Ключевые слова для гугла -
php-spx,
xhprof
Возможно в базе данных не созданы необходимые индексы (по каждому медленному запросу делать explain), или сама установка mysql не настроена как следует (например выделено маленькое количество оперативной памяти и индексы в нее не влезают)...
Почти наверняка можно данную задачу решить не средствами фреймворка modx, а напрямую, написав вручную sql запрос и сформировав страницу кодом на php, тем более изначально php это язык создания шаблонов.
Сделали, загрузка примерно 1-2 сек
вот тут наверняка этот запрос и сделали, почему бы его и не вставить напрямую в страницу вывода цен, а не формировать html капк кеш.