Несколько ошибок


Несколько ошибок
Atom
4/24/2013


Версия S# 4.1.11

1. Не работает переподключение.
ReConnectionManager подписывается на событие ConnectionError. Но Директ при рассоединении это событие не выдает, ни после тайм-аута, при исчезновении инета, ни после отключения после вечерки. Сколько ни старался, получить его не удалось.
Поэтому, думаю, можно добавить строку ошибки подключения в обработчике ConnectionChanged в AlfaWrapper.cs:

case eConnectionState.Disconnected:
Disconnected.SafeInvoke();
ConnectionError.SafeInvoke(new Exception("Error eConnectionState: " + state));
break;



Может не совсем корректно, но зато переподключение будет работать.

2. При старте экспорта, сразу выходит исключение:

Code

System.ArgumentNullException: Значение не может быть неопределенным.
Имя параметра: board
   в StockSharp.Algo.SecurityIdGenerator.GenerateId(String secCode, String secClass, ExchangeBoard board)
   в StockSharp.AlfaDirect.AlfaTrader.#=qTmHoaiW0DvdZTePTIZGmQ8DDHnYjgo8cP$cmsoi4fhs=.#=q_tiMlW0BJNgFwbvijs06AWdy2b_Pnki6x7YDYCvObJU=()
   в StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)


Может не успевает к тому моменту заполниться поле ExchangeBoard у инструмента?

3. Появляется исключение при остановке экспорта:



Если в коде вызываю RegisterSecurity, то в окне Debug:

Code

RegisterTable: fin_info. Fields: paper_no, ANSI_name, mat_date, status, p_code..........
RegisterTable: msg Table subscribed succesefully

UnRegisterTable: fin_info, where: 
UnRegisterTable: fin_info, where: 


Т.е. отписка от fin_info идет два раза, на второй раз выдается исключение.
Если не подписываться на инструмент - RegisterSecurity, то идет отписка не зарегистрированного инструмента.
В обоих случаях выпадает исключение тут (ф-я StopExport AlfaTrader.cs):
Code

      if (_tradeSubscribers.IsEmpty())
      {
        Wrapper.UnRegisterSecurity();
      }


Первая отписка, как я понял, происходит в BaseTrader.cs в ф-ии StopExport.
В нем идет вызов _subscriptionManager.Stop()
Code

            public void Stop()
            {
                RegisteredSecurities.ForEach(_trader.UnRegisterSecurity);
                RegisteredMarketDepths.ForEach(_trader.UnRegisterMarketDepth);
                RegisteredOrderLogs.ForEach(_trader.UnRegisterOrderLog);
                RegisteredTrades.ForEach(_trader.UnRegisterTrades);
                RegisteredPortfolios.ForEach(_trader.UnRegisterPortfolio);
            }


Может тогда стоит убрать следующий код (ф-я StopExport AlfaTrader.cs):
Code

      if(!_tradeSubscribers.IsEmpty())
      {
        Wrapper.UnRegisterTrades();
      }

      if (_tradeSubscribers.IsEmpty())
      {
        Wrapper.UnRegisterSecurity();
      }


Если, конечно, я правильно понимаю. Все равно в BaseTrader StopExport мы отписываемся от всего, на что были подписаны (стаканы, инструменты, ордер-лог, все сделки, портфели)

Tags:


Thanks:




Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy