Добрый день! После перехода на 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
для всех заявок, которые уже отработали в прошлом.
- Это вызывает огромные неудобства, т.к. при активном использовании котирования запуск стратегии начинает занимать несколько минут из-за большого списка заявок.
Comentários (7)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Могу ответить на 3й пунк. Для того что бы не качать все заявки заново используй Revisions. В SampleGUI описано как это делать... Там реализованы методы LoadRevisions и SaveRevisions.
А насчет логирования. Не совсем понятно... Каждая стратегия принимает ВСЕ заявки поступившие в ITrader По этой причини и выводятся в лог для каждой стратегии. Или я не так понял вопрос?
Strategy.Log += new Action<StockSharp.Algo.Logging.LogMessage>(Strategy_Log)
1, 3. Эти сообщения - просто обработка заявок. Это относится ко всем стратегиям, т.к. заявки обрабатываются из ITrader и смотрится какие нужны, какие - нет. Сделаю подобное логирование по флагу, согласен что мешает.
to frontman: не все сидят на плазе...
Извиняюсь)
Спасибо за ответы!
Спасибо за ответы!
Наследуйтесь от LogListener, переопределяйте OnWriteMessage.
Все понятно, спасибо! Буду ждать обновление....