Добрый день!
После перехода на S#4.0 столкнулся со следующими проблемами логгирования:
1. Есть несколько независимых(не находятся в ChildStrategies друг друга) стратегии, которые работают через один и тот же QuikTrader, у них одинаковые Security и Portfolio.
Для прослушивания каждой из стратегий подключаю обработку события Log:
Code
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.
2. Попытался реализовать свой ILogListener
Code
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
для всех заявок, которые уже отработали в прошлом.
- Это вызывает огромные неудобства, т.к. при активном использовании котирования запуск стратегии начинает занимать несколько минут из-за большого списка заявок.