Логирование в 4.2.2.6
Atom
09.02.2014
romany4


При попытке инициализации логирования


 private readonly LogManager _logManager = new LogManager();
 public MainWindow()
 {
 InitializeComponent();
 _logManager.Listeners.Add(new FileLogListener("log.txt"));
 }

получаю эксепшн

System.MissingMethodException was unhandled HResult=-2146233069 Message=Method not found: 'Void Ecng.Collections.CollectionHelper.ForEach(System.Collections.Generic.IEnumerable1<!!0>, System.Action1<!!0>)'. Source=StockSharp.Logging StackTrace: at StockSharp.Logging.LogManager.#=q$WytdlyXhA4Mns5S44OC$A==() at Ecng.Common.ThreadingHelper.<>c__DisplayClass1.<Timer>b__0(Object s) at System.Threading.TimerQueueTimer.CallCallbackInContext(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.TimerQueueTimer.CallCallback() at System.Threading.TimerQueueTimer.Fire() at System.Threading.TimerQueue.FireNextTimers() at System.Threading.TimerQueue.AppDomainTimerCallback() InnerException:


Теги:


Спасибо:


romany4

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


В общем, может кому пригодится - надо подключить библиотеку MoreLinq

Спасибо:

romany4

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


Появился новый вопрос) при попытке эмуляции (HistoryEmulationConnector) в лог получаю следующее сообщение


2013/09/01 10:00:00.000|Error  |HistoryEmulationConnector|System.ArgumentOutOfRangeException: Текущее время должно быть в интервале от 09/01/2013 10:00:00 до 02/28/2014 18:00:00.
Parameter name: currentTime
   at StockSharp.Algo.Testing.HistorySessionHolder.UpdateCurrentTime(DateTime currentTime)
   at StockSharp.Algo.Testing.EmulationMessageAdapter.#=qLQaA57Ra4dqrkkYWb9B60NhvHtkRrXpLgVICuOEhvss=.#=qHTlfjg0Z5e8_hDvXk7IGli_zq2qdrN2Zdl$pKpAbVMw=(HistorySessionHolder #=qtdZDQUFGvWgNAVsZ$b61NQ==)
   at Ecng.Common.TypeHelper.DoIf[TSource,TDestination](TSource source, Action`1 handler)
   at StockSharp.Algo.Testing.EmulationMessageAdapter.OnSendInMessage(Message message)
   at StockSharp.Messages.MessageAdapter`1.OnInMessageProcessor(Message message, IMessageAdapter adapter)

Если посмотреть через дебаг то conectior.currentTime - Date = {01.01.0001 0:00:00} и вся проблема во внутреннем методе UpdateCurrentTime, который при проверке бросает этот эксепшн.

Кто-нибудь с таким сталкивался?

зы в 4.2.1.7 - проблемы такой не было, эмулирование проходило нормально. свой код для этой версии библиотеки правил с учетом примера SampleHistoryTesting 4.2.2.6

Спасибо:

romany4

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


В общем эту проблему обошел следующим путем - просто стал передавать только дату (при этом часы = 00). Т.е. раньше я передавал что-то типа этого в connector.Start(new DateTime(2013, 9, 1, 10, 0, 0), new DateTime(2014, 2, 1, 18, 0, 0) - теперь же просто connector.Start(new DateTime(2013, 9, 1, 0, 0, 0), new DateTime(2014, 2, 1, 0, 0, 0). НО теперь в логе вот что


2013/09/02 00:00:00.000|       |HistoryEmulationConnector|Изменение состояния эмуляции Stopped -> Starting
2013/09/02 00:00:00.000|       |HistoryEmulationConnector|Создан новый портфель test account.
2013/09/02 00:00:00.000|       |HistoryEmulationConnector|Изменение состояния эмуляции Starting -> Started
2013/09/01 20:00:00.000|Debug  |SS_SBER@QJSIM_test account|Переход из состояния Stopped в Started.
2013/09/01 20:00:00.000|       |SS_SBER@QJSIM_test account|Стратегия запущена. [0,-1]. Позиция при старте 0.
2013/09/02 00:00:00.000|       |HistoryEmulationConnector|Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для MarketDepth.
2013/09/02 00:00:00.000|       |HistoryEmulationConnector|Инструмент SBER@QJSIM зарегистрирован на получение рыночных данных для Trades.
2014/02/19 22:38:40.342|       |HistoryMessageAdapter|Loading 02.09.2013 0:00:00 Events: 0
2014/02/19 22:38:40.631|       |HistoryMessageAdapter|Loading 03.09.2013 0:00:00 Events: 8640

...........

2014/02/19 22:39:11.106|       |HistoryMessageAdapter|Loading 25.02.2014 0:00:00 Events: 1520640
2014/02/19 22:39:11.211|       |HistoryMessageAdapter|Loading 26.02.2014 0:00:00 Events: 1529280
2014/02/26 23:59:59.999|       |HistoryEmulationConnector|Изменение состояния эмуляции Started -> Stopping
2014/02/26 23:59:59.999|Error  |HistoryEmulationConnector|System.InvalidOperationException: Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'.
2014/02/26 23:59:59.999|       |HistoryEmulationConnector|Изменение состояния эмуляции Stopping -> Stopped


Не могу понять принцип выставления времени. Кто-нибудь может объяснить? А также натолкнуть на мысль причины ошибки "Подключение в состоянии Connected получило неожиданное сообщение типа 'DisconnectMessage'."

Спасибо:

Bond

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


Добрый день! Похоже вы торгуете акции в нерабочее время биржи. Демо-Квик работает по своему расписанию) Отсюда похоже и ошибки. Покажите ваши настройки времени работы робота.

Спасибо:

romany4

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


Добрый вечер!

Похоже вы торгуете акции в нерабочее время биржи. Демо-Квик работает по своему расписанию) Отсюда похоже и ошибки. Да. Эмулятор тестирую по вечерам. Демо-квик сейчас не использую. Все данные (свечи, инструменты) беру из бд вот так


new Security()
                    {
                        Id = security.Code + "@" + security.ExchangeBoardT.Code,
                        Code = security.Code,
                        Name = security.Name,
                        Decimals = security.Decimals,
                        Class = security.Class,
                        LastChangeTime = DateTime.Now,
                        MinLotSize = security.MinLotSize,
                        MinPrice = security.MinPrice,
                        MinStepPrice = security.MinStepPrice,
                        MinStepSize = security.MinStepSize,
                        Currency = (CurrencyTypes)security.IdsCurrencyTypes,
                        ExtensionInfo = new Dictionary<object, object> { { "DBIds", security.Id } },
                        //ExchangeBoard = new ExchangeBoard()
                        //{
                        //    Code = security.ExchangeBoardT.Code,
                        //    Exchange = new Exchange()
                        //    {
                        //        Name = security.ExchangeBoardT.ExchangeT.Code,
                        //        EngName = security.ExchangeBoardT.ExchangeT.EngName,
                        //        RusName = security.ExchangeBoardT.ExchangeT.RusName,
                        //        TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time")
                        //    },
                        //    ExpiryTime = new TimeSpan(),
                        //    IsSupportAtomicReRegister = security.ExchangeBoardT.IsSupportAtomicReRegister,
                        //    IsSupportMarketOrders = security.ExchangeBoardT.IsSupportMarketOrders,
                        //    WorkingTime = new WorkingTime()
                        //},
                        ExchangeBoard = ExchangeBoard.MicexJunior
                    };

На данный момент решил пока использовать ExchangeBoard.MicexJunior. Свечи так


new TimeFrameCandle()
                            {
                                OpenPrice = candle.Open,
                                HighPrice = candle.High,
                                LowPrice = candle.Low,
                                ClosePrice = candle.Close,
                                TimeFrame = timeFrameCandle,
                                OpenTime = time,
                                CloseTime = time + timeFrameCandle,
                                TotalVolume = candle.Volume,
                                Security = security,
                                State = CandleStates.Finished
                            };

Данные из бд корректны (основываюсь на том что в предыдущих версиях проблем не было и график худо-бедно строился)

Если принять, что проблема во времени выполнения, когда биржа закрыта, то предположу, что текущее время берется из системного, однако, перевод часов в нужный период не дал результата) или я что-то не так делаю?)

Спасибо:


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

loading
clippy