← Назад

Логгирование

Добрый день! После перехода на 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.

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

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

frontman
frontman

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

Alexander
Alexander

Артем_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
> 
>     ```csharp

    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, однако этого не происходит. Подскажите, пожалуйста, что я делаю не так?

  1. При запуске стратегии (вызов Start()) в событие Log начинает выводиться ВСЯ ИСТОРИЯ обработки заявок. Т.е. выводятся сообщения типа: [MarketTime <10:45:51.234>]:[OWS] Обработка Limit заявки 38623862 на Sell с номером 935182789 для всех заявок, которые уже отработали в прошлом.
  • Это вызывает огромные неудобства, т.к. при активном использовании котирования запуск стратегии начинает занимать несколько минут из-за большого списка заявок.

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

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

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

frontman
frontman

Извиняюсь)

Артем_2
Артем_2 Автор

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

  1. WriteMessage вызывается?
  • Нет не вызывается(((
Alexander
Alexander

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

  1. WriteMessage вызывается?
  • Нет не вызывается(((

Наследуйтесь от LogListener, переопределяйте OnWriteMessage.

Артем_2
Артем_2 Автор

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