Dr. Anton Fokin wrote:
Кстати про exception вопрос тоже не такой простой, как кажется. В некоторых случая, особенно в случае работающий стратегии, я бы не хотел, чтобы у меня все упало или выскакивали какие-либо окошки (особенно на удаленном сервере) при некритичном (для стратегии) exception.
Вопрос не простой - однозначно. Но есть вроде общие практики, как это сделать. И там "либо-либо" - либо падаем и в консоль пишем stacktrace - эдакий linux-style либо озадачиваем юзера окошком.
У вас сейчас не так и не эдак. Exceptions некотрые приходят, некоторые нет, некоторые в окошке, некоторые просто валят стратегию.
Вот конкретный пример с Position==null - стратегия могла бы месяцами работать без исключений, а потом втихоря упасть, OQ даже в логах ничего бы оставил.
Вот заходите вы к себе на сервачок - OQ работает, а стратегия в Live упала, ноги арбитражные уехали в разные стороны и т.д. И концов не найти - почему упала, даже когда упала не установить.
Про идеальный вариаент - когда исключения обрабатываются по-разному в Live и Simulation - я даже не говорю. Не нравятся окошки - пишите в логи хотя бы, но нужно ведь хоть что-то делать.
У меня свой watchdog - он умеет перезапустить OQ, в том числе, если тот вывалит какие-то окошки, в том числе на другом сервере, в другой ВМ и т.д. и т.п. Но ему тоже что-то нужно мониторить - окошки, логи, пиксели на экране в конце концов ...
Да и проблемы разработки и отладки стратегии он никак решить не может.
Quote:
В качестве бредовой идеи можно предложить раннер стратегии обернуть в try catch...
Да, конечно, это первое, что пришло в голову
Ну идея специфическая, вы сами это понимаете, к сожалению, она проблему не решает. Вот сделал я так - получаю Attempted to divide by zero в стратегии и вместо моего красивого немодального обработчика с окошком треугольной формы и портретом Путина выскакивает ваша модальная формочка с единственной кнопокой "Abort". А если бы это в оптимизации было ? Опять freeze by design
Я предложил своё решение - немодальное окошко или для начала хотя бы кнопочку "стоп оптимизации" в модальном.
Плюс хочется ясное, понятное полиси - ловите вы или не ловите исключения и как вы это делаете.
Могу еще попросить дать мне callback OnStrategyException() - если что я его сам переназначу на что-то нужное, причём отдельно на Simulation и отдельно в Live. Ещё могу попросить дать мне class Optimization() - чтобы я сам мог запускать-паузить оптимизацию, получил доступ к OptimizationParameter не через for цикл в сценарии, а напрямую.
Но, вообще, если уже пора что-то на Новый год себе просить - я готов - список-то немаленький будет
