Добрый день! После перехода на S#4.0 столкнулся со следующими проблемами логгирования:
- Есть несколько независимых(не находятся в ChildStrategies друг друга) стратегии, которые работают через один и тот же QuikTrader, у них одинаковые Security и Portfolio.
Для прослушивания каждой из стратегий подключаю обработку события Log:
Strategy.Log += new Action<StockSharp.Algo.Logging.LogMessage>(Strategy_Log)
Проблема в том, что событие обработки заявок (см. пример) срабатывает для каждой из этих стратегий, а не только для той стратегии, в которой происходила эта обработка. Такое ощущение, что Log срабатывает не для стратегии, а для ITrader:
Например:
OQS, OSS, OWS - Это 3 независимые стратегии. В OQS запускается котирование, создается заявка и у всех 3-х стратегий срабатывает следующее событие:
[MarketTime <10:45:51.076>]:[OQS] Обработка Limit заявки 38623862 на Sell с номером 935182789. [MarketTime <10:45:51.233>]:[OSS] Обработка Limit заявки 38623862 на Sell с номером 935182789. [MarketTime <10:45:51.234>]:[OWS] Обработка Limit заявки 38623862 на Sell с номером 935182789.
Попытался реализовать свой ILogListener
public class MessageBoardLogListener : ILogListener { public void WriteMessage(LogMessage message) { string msg = string.Format("[{0}] {1}", message.Source.Name, message.Message); Info.Inform(msg, message.Type.ConvertStrategyErrorState()); } } Потом в другом классе подключаю созданный MessageBoardLogListener к LogManager class SomeClass { Strategy _Strategy; //создаю _LogManager public SomeClass() { this._LogManager = new LogManager(); this._LogManager.Listeners.Add(new MessageBoardLogListener()); this._LogManager.Sources.Add(this._Strategy); } }
После этого, как я понимаю, при возникновении события _Strategy.Log оно должно обрабатываться в MessageBoardLogListener.WriteMessage, однако этого не происходит. Подскажите, пожалуйста, что я делаю не так?
3. При запуске стратегии (вызов Start()) в событие Log начинает выводиться ВСЯ ИСТОРИЯ обработки заявок. Т.е. выводятся сообщения типа:
[MarketTime <10:45:51.234>]:[OWS] Обработка Limit заявки 38623862 на Sell с номером 935182789
для всех заявок, которые уже отработали в прошлом.
- Это вызывает огромные неудобства, т.к. при активном использовании котирования запуск стратегии начинает занимать несколько минут из-за большого списка заявок.
Комментарии (7)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Могу ответить на 3й пунк. Для того что бы не качать все заявки заново используй Revisions. В SampleGUI описано как это делать... Там реализованы методы LoadRevisions и SaveRevisions.
А насчет логирования. Не совсем понятно... Каждая стратегия принимает ВСЕ заявки поступившие в ITrader По этой причини и выводятся в лог для каждой стратегии. Или я не так понял вопрос?
Strategy.Log += new Action<StockSharp.Algo.Logging.LogMessage>(Strategy_Log)
1, 3. Эти сообщения - просто обработка заявок. Это относится ко всем стратегиям, т.к. заявки обрабатываются из ITrader и смотрится какие нужны, какие - нет. Сделаю подобное логирование по флагу, согласен что мешает.
to frontman: не все сидят на плазе...
Извиняюсь)
Спасибо за ответы!
Спасибо за ответы!
Наследуйтесь от LogListener, переопределяйте OnWriteMessage.
Все понятно, спасибо! Буду ждать обновление....