Решил всё же создать отдельную тему для MultiTrader. У меня логика в роботе такая - есть несколько стратегий-роботов, которые запускаются на одном квике, но на разных субсчетах (каждый робот-стратегия - на отдельном субсчёте).
Соответственно, я создаю MultiTrader и добавляю в AggregatedTraders счёт \ созданный QuikTrader (через конструктор, в который передаётся один лишь путь до папки). Естественно, второй QuikTrader с таким же путём мне добавить не дают - возникает исключение. Обхожу я это с помощью мэпа-словаря: <pathToQuik.ToLower(), QuikTrader>. И не создаю таким образом повторно QuikTrader. Но на мой взгляд, такая логика должна быть внутри MultiTrader. Если я не прав - можно оставить как есть, но стоит как-то пометить в документации для будущих поколений, я потратил на то, чтоб это обнаружить какое-то время.
Вторая проблема, которую пока не решил - возникает эксепшен если вызвать Disconnect для такой же структуры MultiTrader. Я так понимаю вызывается Disconnect для каждого из AggregatedTraders, но т.к., по сути, они все одинаковые (просто с разными счетами) - он успешно завершится для первого, а дальше выскочит эксепшен.
Следующий момент, который не особо нравится - при такой же структуре MultiTrader и при вызове метода StartExport для MultiTrader вначале запустится StartExport для первого из AggregatedTraders. Затем, для второго из списка экспорт вначале остановится (т.к. он уже был запущен
- опять же, QuikTraders ведь одинаковые, различаются только счета), и потом опять запустится. И так для каждого. Мне это мешало, потому я стал хранить список из различных QuikTraders и для каждого элемента из списка вызывать StartExport. Но, опять же, на мой взгляд, было бы здорово это всё запрятать внутрь архитектуры MultiTrader.
Пока расписывал возник такой вопрос - если поставить обработчик события ProcessUnknownDdeData для элемента класса MultiTrader - он установится для каждого из элементов AggregatedTraders? Если да, тут, опять же, как мне кажется, стоит устанавливать лишь на различные элементы QuikTraders (сейчас я это делаю храня список различных квиков и устанавливая событие для каждого из них - получается, само понятие MultiTrader у меня очень смазано).
Комментарии (6)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
В догонку. MultiTrader - для работы с разными платформами. Разные Квики, Квик и Смарт, Смарт и еще что. Но не одно и то же. Весь смысл просто теряется.
А как тогда должен выглядеть робот, если хочется получить доступ к разным субсчетам? Просто использовать один QuikTrader, передавая в каждую стратегию отдельный субсчёт?
Попробую завтра с утра тогда немного переписать свою архитектуру и заодно посмотрю, не пропала ли ошибка с позициями.
У меня первоначальная задумка была такая: в моей программе можно иметь возможность работать как с разными папками квиков, так и с разными субсчетами. поэтому в настройках мы задаём счёт + путь до квика, добавляем всё это в multitrader и удобно работаем.
сейчас, видимо, придётся это сузить до: для каждого пути берём первый попавшийся счёт, добавляем в multitrader. А отдельно храним мэп <счёт, стратегия на которой запускать данный счёт>. И при создании стратегии просто передаём туда целиком MultiTrader и устанавливаем счёт в нужный. Как-то так, верно?
Конечно.
Да, так будет правильнее и изящнее.