Добрый день!
Прошел почти год с момента моего предыдущего поста, хочу поделиться изменениями своего «приложения», произошедшими за этот период.
Несмотря на то, что предыдущая версия работала, несколько смущала производительность при приближении к дате экспирации, но, в тоже время, не хотелось все менять, т.к. был риск, что тождественность данных нарушится (в итоге статистика будет нерелевантна). Но все-таки собрался и пару месяцев назад переписал весь код с нуля (путем многократных тестовых запусков старой версии и новой, убедился в их преемственности и на серию (июнь) полностью перешел на обновленную версию). Основные изменения следующие:
1. Переписан алгоритм определения волатильностей ТЦ, спроса, предложения
2. Переход на явное определение всех переменных и упор на работу с массивами
3. Изменен алгоритм протоколирования данных
4. Ввод и вывод значений диапазоном
5. Изменен алгоритм определения исходных данных для статистики
В итоге производительность выросла в разы, если ранее средний расчет (за 1 квант времени) происходил за 0.5-1 секунды, пиковые (при протоколировании) от 3 сек до 10 (в последние недели перед экспирацией) секунд, то теперь средний расчет осуществляется менее чем за 0.1 секунды, пиковый до 0.3 секунд. Моделирование графиков PnL и грек занимает менее 0.2 сек, ранее это было около 3-4 секунд. И это далеко не предел, если минимизировать кол-во формул на листах, а их много (около 550) (закатать их в VBA) и минимизировать кол-во графиков (строить по требованию), то возможно добиться быстрых расчетов, но в целом этого и не надо. Загрузка процессора средняя, подвисаний (песочных часов), подтормаживаний экспорта нет, на этом же ноутбуке параллельно занимаюсь другими делами, ничего друг другу не мешает.
Ниже привожу обновленную блок-схему моего приложения, и скриншоты основных листов (масштаб уменьшил, чтобы на 1 экран помещалось), чтобы было примерно понятно, что и как реализовано, и как все это выглядит. Общее кол-во строк кода на VBA 400 (немного, так как часть функциональности сделана функциями на самих листах).
(
Читать дальше )