Все дело в том, что распределитель задач - однопоточный. Если сама история короткая и считается один проход очень быстро (меньше 50мс), то программа просто не успевает загрузить столько ядер на 100%. Большое количество ядер получается загрузить, когда история очень длинная и расчет идет довольно долго (чем дольше, тем лучше загрузка). То же самое касается памяти. Если история короткая, то все варианты индикаторов занимают ограниченный объем памяти и много ее просто не нужно.
Нужно помнить, что есть еще синхронизация, связанная с тем, что если какой-то индикатор с определенными значениями уже считается в каком то из потоков, то другие потоки, которые запросили такой же индикатор, просто ждут расчета.
В общем, пробуйте просто наращивать количество потоков, участвующих в расчетах, но в любом случае, с короткой историей загрузки близкой к 100% достичь не получится.