Логгирование
Atom Ответить
03.10.2011


Добрый день!
После перехода на S#4.0 столкнулся со следующими проблемами логгирования:

1. Есть несколько независимых(не находятся в 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.

2. Попытался реализовать свой 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 Ответов
frontman

Фотография
Дата: 03.10.2011
Ответить


Могу ответить на 3й пунк.
Для того что бы не качать все заявки заново используй Revisions.
В SampleGUI описано как это делать...
Там реализованы методы LoadRevisions и SaveRevisions.
Спасибо:

frontman

Фотография
Дата: 03.10.2011
Ответить


А насчет логирования. Не совсем понятно...
Каждая стратегия принимает ВСЕ заявки поступившие в ITrader
По этой причини и выводятся в лог для каждой стратегии.
Или я не так понял вопрос?
Спасибо:

Alexander

Фотография
Дата: 03.10.2011
Ответить


Артем_2 Перейти
Добрый день!
После перехода на S#4.0 столкнулся со следующими проблемами логгирования:

1. Есть несколько независимых(не находятся в 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.

2. Попытался реализовать свой 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
для всех заявок, которые уже отработали в прошлом.
- Это вызывает огромные неудобства, т.к. при активном использовании котирования запуск стратегии начинает занимать несколько минут из-за большого списка заявок.



1, 3. Эти сообщения - просто обработка заявок. Это относится ко всем стратегиям, т.к. заявки обрабатываются из ITrader и смотрится какие нужны, какие - нет. Сделаю подобное логирование по флагу, согласен что мешает.

2. WriteMessage вызывается?



to frontman: не все сидят на плазе...
Спасибо:

frontman

Фотография
Дата: 03.10.2011
Ответить


Извиняюсь)
Спасибо:

Артем_2

Фотография
Дата: 03.10.2011
Ответить


Спасибо за ответы!

Цитата:

2. WriteMessage вызывается?


- Нет не вызывается(((
Автор топика
Спасибо:

Alexander

Фотография
Дата: 03.10.2011
Ответить


Артем_2 Перейти
Спасибо за ответы!

Цитата:

2. WriteMessage вызывается?


- Нет не вызывается(((


Наследуйтесь от LogListener, переопределяйте OnWriteMessage.
Спасибо: Артем_2

Артем_2

Фотография
Дата: 03.10.2011
Ответить


Все понятно, спасибо! Буду ждать обновление....
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy