В теории оптимизация в вашей программе - очень классная штука.
Но получается, что ее использование возможно только на 5-10% от возможного. Т.к. прогнать на истории можно только используя большие свечи и короткий период и малое количество оптимизируемых параметров с небольшим числом проходов(большой шаг и маленький диапазон). Пускай процесс растягивается, но ошибки Out of memory совсем удручают. Если программе не хватает оперативки, почему бы не сделать какое-нибудь сохранение промежуточных результатов в файл? или поэтапное выполнение оптимизации? Вы же понимаете, что чем большее кол-во проходов программа может делать безотказно, тем больше ее польза.
Если бы можно было "оптимизировать оптимизацию" цены б вашей программе бы не было.