Решил пощупать рынок за опционы. Кубики на эту тему спроектированы не очень понятно, но достаточно гибко. Набросал сценарий, погонял по истории (правда выяснилось, что хрен ты автоматом задашь расчетный опцион из дохлых, только руками даты экспирации подбирать), ну да ладно. Обошелся тестами на последнем, срок истечения которого совпадает с истечением фьюча. Все запустил, сижу жду. Входим в позицию и тут агент начинает выбрасывать эксепшены. Причем в отличии от прошлого раза, исключение можно вносить в палату мер и весов по информативности:
07:53:30.54[2219]DEBUG:System.ArgumentOutOfRangeException: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index
в System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
в System.SZArrayHelper.get_Item[T](Int32 index)
в TSLab.User.Script.Execute(IContext context, IOption ТоргуемОпцион)
В лабе проблем нет. Два агента на том-же коде, но без позиций — тоже чисто. После часа ковыряний, выяснилось, что если убрать все опционные кубики и заменить их посконными, то агент больше не ругается. В итоге на том и порешил. Жаль конечно. Изначальная задумка предполагала возможность быстрого развёртывания, где указывается только опорный инструмент, а страйки рассчитываются автоматом. Но нет. Зато я теперь по названию опциона умею быстро понимать про что он, уже профит.