← Atrás

SmartCOM 3.0

Говорят уже вышел. Кто с ним работал? Хочется понять его стабильность, и, если все окей, перевести и наш коннектор. Тем более там наконец-то появилось 64-ех битность (всего-то 6 лет назад последние 32-ух битные компьютеры с прилавков исчезли😀).

¿Le resultó útil este tema?

Compartir tema

Comentarios (45)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

gramp
gramp

Очень стабилен, реконнекты очень редки и не каждый день. Просто dll, без .exe. Позволяет запускать множество экземпляров на одном компьютере. Отличий от 2.2 - совсем немного - какие-то параметры убраны и добавлены в некоторых методах и событиях. Проблема пока только одна - при реконнекте или при ручной остановке скрипта после обнуления объекта StServerClass через =null и создания нового экземпляра объекта через несколько минут тихо умирает. Поэтому при любой остановке приходится закрывать приложение и открывать заново - тогда никаких проблем, все работает стабильно. Хотя, может быть, помимо =null нужно еще что-то делать для корректного обнуления объекта StServerClass? Буду благодарен за совет. И иногда событие OrderSuccseeded приходит на несколько секунд позднее, поэтому использовать его в основной логике нежелательно. На 2.2 торговать не пробовал, но, судя по массе гневных отзывов о постоянных реконнектах 2.2 и танцах с бубном для перезапуска службы - на 3.0 этой проблемы не существует. Время отклика сервера, как и на 2.2, пока не очень быстро - 50-70мс., но через месяц обещают ускорить. В целом работает отлично!

MenDel
MenDel

Когда будем переходить на SmartCOM 3.0?

MenDel
MenDel

Что надо изменить в коде, чтоб законнектиться через SmartCOM 3.0, если на компе стоят обе версии? Если у меня 64 битная винда, то лучше поставить 64 битный смартком или же 32? Есть ли какие нибудь отличительные особенности по работе с ним или же все тоже самое?

Mikhail Sukhov
Mikhail Sukhov Autor

Начиная с версии S# 4.1.5, нами поддерживается SmartCOM 3.X. Поддерживает оба режима, 32 и 64 бит. Для того, чтобы робот, написанный на S# начал работать с новой версией, необходимо написать код как показано в документации:

// подключение будет производиться через SmartCOM 3
// (в зависимости от разрядности процесса будет выбран автоматически SmartCom3Wrapper32 или SmartCom3Wrapper64)
smartTrader.ApplyWrapper(SmartComVersions.V3);
MenDel
MenDel
MenDel

Подскажите, как правильно настроить смартком. Я удалил 2 версию, установил 3-ю 64bit вот от сюда Но в диспетчере задач, в службах я вижу только вторую версию хотя она удалена.

И правильно ли дописан код?

SmartTrader _trader = new SmartTrader
           {
               Login = "",
               Password = "",
               Address = "194.247.135.144:8090".To<IPEndPoint>()
           };
_trader.ApplyWrapper(SmartComVersions.V3);
_trader.Connect();
Mikhail Sukhov
Mikhail Sukhov Autor

MenDel: И правильно ли дописан код?

Вы зачем в сообщение пароль к счету вставляете?

Я просто поставил поверх смартком 64 бита. Попробуйте пример SampleSmart. Там галку нужно выставить v3. Если и он не будет подключаться, то значит что-то не так на компьютере с установкой СмартКом. Просто все удалите и заново установите 3-ю. Но, повторюсь, у меня нормально и 2-ка и 3-ка сосуществуют.

MenDel
MenDel

Михаил Сухов: Вы зачем в сообщение пароль к счету вставляете?

Ну это все равно ж демка. А в целом код правильно написан? Или надо как то по другому писать? Потому, что я смотрю можно еще так коннект делать _trader.Wrapper.Connect("194.247.135.144", 8090, "", "");

И в каком месте прописывать _trader.Wrapper = new SmartCom3Wrapper64();?

Я просто немного запутался.

Mikhail Sukhov
Mikhail Sukhov Autor

MenDel: Я просто немного запутался.

Запустите SampleSmart и проверьте подключение через 3-ий смартком.

MenDel
MenDel

Михаил Сухов: Запустите SampleSmart и проверьте подключение через 3-ий смартком.

32 битный запускается, а 64 битный кидает ошибку

Mikhail Sukhov
Mikhail Sukhov Autor

MenDel:

Михаил Сухов: Запустите SampleSmart и проверьте подключение через 3-ий смартком.

32 битный запускается, а 64 битный кидает ошибку

А в какой последовательности они устанавливались?

MenDel
MenDel

Михаил Сухов: А в какой последовательности они устанавливались?

Я х32 и х64 одновременно не ставил. На 2 смартком поставил 3 х64, ошибка. Потом все стер, перезагрузил, поставил опять 2, на него 3 х32, запустилось. Потом опять все стер, перезагрузил, поставил 2, на него 3 х64, ошибка.

Mikhail Sukhov
Mikhail Sukhov Autor

MenDel: Потом опять все стер, перезагрузил, поставил 2, на него 3 х64, ошибка.

А если просто 3 x64? Компьютер 64 битный?

alexan3010
alexan3010

Опишу свой вариант этой проблемы: Запускаюсь на Win7, 64 bit, 16 Gb памяти (под vmWare ESXi если важно).

Версия S# сегодня качал 4.1.19.1 Смартком так же сегодня качал и 2.2ой и 3ий. После каждого удаления - перегружался.

Варианты:

  1. S#.Studio в режиме 64 бит и SmartCom 3.0 64 бит - все работает отлично.
  2. API и SmartCom 3.0 64 бит, запускаю SampleSmart с галкой V3 - ошибка, как у товарища описано вверху.
  3. API и SmartCom 3.0 32 бит, запускаю SampleSmart с галкой V3 - ругается что не нашел SmartCom2, но ЗАПУСКАЕТСЯ и работает! При этом S#.Studio работает тоже нормально в 32 битном режиме.
  4. Дальше тупо поставил SmartCom 2.2 не снося 3.0 32 бита - API SampleSmart работает с галкой V3 и не ругается (потому что видит сервис SmartCom2).

Похоже на небольшой косяк.

Mikhail Sukhov
Mikhail Sukhov Autor

Вы можете привести текст ошибок?

Mikhail Sukhov
Mikhail Sukhov Autor

alexan3010: 3) API и SmartCom 3.0 32 бит, запускаю SampleSmart с галкой V3 - ругается что не нашел SmartCom2, но ЗАПУСКАЕТСЯ и работает! При этом S#.Studio работает тоже нормально в 32 битном режиме.

SampleSmart (он по умолчанию скомпилирован под 32 бита) - ошибка не наблюдается.

alexan3010
alexan3010

Ошибка при варианте 3) следующая: SystemInvalidOperationExeption: Не удалось запустить службу SmartCom2 на компьютере '.' --> SystemComponentModel.Win32Exeption: Не удается найти указанный файл

Но при этом все работает (на SmartCom3, он то есть, вторая версия и не нужна).

Так же у меня еще следующие соображения. Я использую Visual Studio 2010 Express и как я вычитал (на википедии), по умолчанию он компилирует только в 32bit приложения. Это скорее всего объясняет пункты 1) и 2) моих ошибок - Studio у меня заведомо 64 и оно работает нормально, а то приложение, которое я компилирую - 32 бита, поэтому оно будет работать только с 32bit SmartCom.

А с пунктом 3 похоже все таки что то не то. Такое ощущение, что забыли где то убрать обращение ко второму SmartCom при явном обращении к V3. Но если стоят оба - то все как бы и нормально - проверил что есть вторая - ОК, а работает через третий.

Такие вот мысли.

Mikhail Sukhov
Mikhail Sukhov Autor

Приведите полный стек-трейс ошибки.

alexan3010
alexan3010

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

Mikhail Sukhov
Mikhail Sukhov Autor

alexan3010: А подскажите, как бы стек-трейс по проще сюда скопировать? Не могу сказать что я крупный программист на .net.

Просто вставьте как текст.

alexan3010
alexan3010

Так там MessageBox "Ошибка обработки данных" - он не предусматривает копирование текста из себя. Первые две строчки я вам переписал. Дальше идет еще четыре строки после - Конец трассировки внутреннего стека исключений -

vk37
vk37

Поставил финальный (не бета) смартком 3.0.66 x64 от 17.09.2013 на Windows 8 x64 Смарткомы предыдущих версий удалил. Скомпилировал SampleSmart версии 4.1.19.1 под x64. Запускаю в дебаг режиме с галочкой SmartCom3. После Trader.Connect() в обработчике события Trader.ProcessDataError ошибка: ```plain System.InvalidOperationException: Cannot open SmartCom2 service on computer '.'. ---> System.ComponentModel.Win32Exception: Access is denied --- End of inner exception stack trace --- at System.ServiceProcess.ServiceController.GetServiceHandle(Int32 desiredAccess) at System.ServiceProcess.ServiceController.Start(String[] args) at StockSharp.Smart.SmartTrader.RestartSmartComService() at StockSharp.Smart.SmartTrader.OnConnect()

И в обработчике события Trader.ConnectionError ошибка без стэк трейса: ```plain
System.InvalidOperationException: Responce parse failed
Mikhail Sukhov
Mikhail Sukhov Autor

Судя по всему SmartTrader.Wrapper установлен как SmartCom2Wrapper, а нужно SmartCom3Wrapper64

vk37
vk37

Если проинициализировать трейдер так: ```csharp Trader = new SmartTrader() { Wrapper = new SmartCom3Wrapper64(), };

Mikhail Sukhov
Mikhail Sukhov Autor

А метод ApplyWrapper закомментировали?

Mikhail Sukhov
Mikhail Sukhov Autor

Михаил Сухов: А метод ApplyWrapper закомментировали?

Ошибку эту уже правили. Как выложим новую версию, то она уйдет. Смысл - там всегда просится перезапуск роутера, с неважно каким раппером. Нужно в примере SmartTrader.RestartService = false;

vk37
vk37

Михаил Сухов: А метод ApplyWrapper закомментировали?Да

vk37
vk37

Михаил Сухов: Нужно в примере SmartTrader.RestartService = false;Это исправляет только первую ошибку. ```plain System.InvalidOperationException: Responce parse failed

Mikhail Sukhov
Mikhail Sukhov Autor

vk37: ... остается

А вот по этому я не в курсе. Судя по всему это ошибка СмартКом. Можете полный стектрейс привести?

vk37
vk37

StackTrace у этого исключения отсутствует

Mikhail Sukhov
Mikhail Sukhov Autor

vk37: StackTrace у этого исключения отсутствует

А чем он ловиться? Откуда он возникает?

vk37
vk37

Михаил Сухов: А чем он ловиться? Откуда он возникает? При вызове Trader.Connect() в обработчике события Trader.ConnectionError. Можно сразу поставить SmartTrader.RestartService = false чтобы исключить ошибку с перезапуском SmartCom2. Насколько я помню, ошибки "Responce parse failed" не было при работе S# API 4.1.19.1 с бета версией Смартком 3.0.

Mikhail Sukhov
Mikhail Sukhov Autor

vk37:

Михаил Сухов: А чем он ловиться? Откуда он возникает? При вызове Trader.Connect() в обработчике события Trader.ConnectionError. Можно сразу поставить SmartTrader.RestartService = false чтобы исключить ошибку с перезапуском SmartCom2. Насколько я помню, ошибки "Responce parse failed" не было при работе S# API 4.1.19.1 с бета версией Смартком 3.0.

С рестартом сервиса все понятно, и я уже написал, что ошибку исправили давно. Надо новую версию выкладывать.

А вот ошибка подключения - это уже смартком. Судя по грамматической ошибке - строка от АйТи инвеста.

Mikhail Sukhov
Mikhail Sukhov Autor

Собственно, выложили. А еще сам пример перевели в AnyCPU, так как мне кажется 3.0 теперь уже стал окончательной версией.

vk37
vk37

Михаил Сухов: Собственно, выложили. А еще сам пример перевели в AnyCPU, так как мне кажется 3.0 теперь уже стал окончательной версией.На версии 4.2.1.2 такая ошибка: ```plain 2013-11-28 16:29:02,543 [Transaction. Messages thread.] ERROR - Trader ProcessDataError System.InvalidOperationException: Подключение к системе изменило свое состояние. Текущее состояние клиента Connecting. Сообщение типа 'DisconnectMessage'. ---> System.InvalidOperationException: responce parse failed --- End of inner exception stack trace --- 2013-11-28 16:29:02,547 [17] ERROR - 16:29:02.541 | SmartTrader | System.InvalidOperationException: Подключение к системе изменило свое состояние. Текущее состояние клиента Connecting. Сообщение типа 'DisconnectMessage'. ---> System.InvalidOperationException: responce parse failed --- End of inner exception stack trace ---

Mikhail Sukhov
Mikhail Sukhov Autor

vk37: System.InvalidOperationException: responce parse failed

Это в АйТи.

vk37
vk37

Михаил Сухов:

vk37: System.InvalidOperationException: responce parse failed

Это в АйТи.Так ведь на SampleSmart такая ошибка. Версии S# и смартком последние. Что я скажу в IT? Что S# не работает при подключении?

Mikhail Sukhov
Mikhail Sukhov Autor

vk37:

Михаил Сухов:

vk37: System.InvalidOperationException: responce parse failed

Это в АйТи.Так ведь на SampleSmart такая ошибка. Версии S# и смартком последние. Что я скажу в IT? Что S# не работает при подключении?

У нас то подключение нормально происходит. Ошибка с парсингом судя по неправильной орфографии - АйТи. Значит сервер АйТи присылает СмартКом 3 что-то, что невозможно распарсить. Вы же программист, понимаете, что на этом этапе нет S#.

В АйТи нужно будет логи какие-то прислать. Как минимум нужно узнать как из включать.

vk37
vk37

Михаил Сухов: В АйТи нужно будет логи какие-то прислать. Как минимум нужно узнать как из включать.Обратился в тех поддержку АйТи. Просят прислать логи с уровнем логгирования 6. Установил для SmartTrader максимальный уровень логгирования:

            var trader = new SmartTrader
            {
                Login = login,
                Password = password,
                Address = address,
                Version = SmartComVersions.V3,
                LogLevel = LogLevels.Debug,
                RestartService = false,
            };

Все равно логгирование идет с уровнем 4.

2013-Nov-30 14:05:28.842629 [TID=33e8] - INFO : SmartCOM3 client module (v3.0.79.2589) logging started.. 
2013-Nov-30 14:05:28.842629 [TID=33e8] - INFO : Logging level is set to 4 value. 
2013-Nov-30 14:05:28.842629 [TID=33e8] - INFO : Using maximum 7 worker threads to process data. 
2013-Nov-30 14:05:28.842629 [TID=33e8] - INFO : Store logs in C:\Users\Vladimir\AppData\Local\IT Invest\ 
2013-Nov-30 14:05:30.062879 [TID=33e8] - INFO : Trying to authenticate in 82.204.220.34:8090 using SSL connection (login 20pppf) 
2013-Nov-30 14:05:30.062879 [TID=33e8] - jelly:  : Trying connect to 82.204.220.34:8090 
2013-Nov-30 14:05:30.089885 [TID=33e8] - jelly:  : Channel 0xE31AC42E10, sockErr 'Create SSL session failed': 100, file: src\jelly_http_logon.cpp, line 50 
2013-Nov-30 14:05:30.089885 [TID=33e8] - jelly:  : Create SSL session failed for channel 0x1AC42E10, code 1 
2013-Nov-30 14:05:30.089885 [TID=33e8] - jelly:  : Destroying https channel..0x1AC42E10 
2013-Nov-30 14:05:31.063088 [TID=33e8] - WARN : SSL connection failed, no problem, trying to connect without SSL 
2013-Nov-30 14:05:31.064087 [TID=33e8] - jelly:  : Trying connect to 82.204.220.34:8090 
2013-Nov-30 14:05:31.064087 [TID=33e8] - jelly:  : Channel 0x1AC48230 will use async connect mode (2496) 
2013-Nov-30 14:05:31.165109 [TID=39d0] - jelly:  : Http channel 0x1AC48230 OK.. 
2013-Nov-30 14:05:32.222949 [TID=1a18] - ERROR : Login failed: Responce parse failed:-1001 
2013-Nov-30 14:05:32.232950 [TID=1a18] - jelly:  : Error response: -1001, http code: Sat,, 30 Nov 2013 10:05:29 GMT 
2013-Nov-30 14:05:32.232950 [TID=1a18] - ERROR : Login failed: 30 Nov 2013 10:05:29 GMT:-1001 
2013-Nov-30 14:05:32.232950 [TID=1a18] - jelly:  : Destroying http channel..0x1AC48230 
vk37
vk37

Из справки по SmartCom3, уровень логгирования устанавливается так (см. вложение)

Mikhail Sukhov
Mikhail Sukhov Autor

vk37: Из справки по SmartCom3, уровень логгирования устанавливается так (см. вложение)

Добавим. Но вроде и так видно, что ошибка авторизации. Пускай сражут по логам на сервере что не так в передаваемых логин паролях. Может на продакшене еще новая версия СмартКом 3 не развернута?

vk37
vk37

Михаил Сухов: Пускай сражут по логам на сервере что не так в передаваемых логин паролях. Может на продакшене еще новая версия СмартКом 3 не развернута? Причина ошибки была в работе антивируса на моей машине. Использую ESET Smart Security 7. После отключения "Web access protection" подключение стало проходить нормально.

vk37
vk37

Уровни логгирования, вроде, такие: http://www.itinvest.ru/forum/index.php?showtopic=71596&#entry297683

vk37
vk37

Версия 4.2.1.3. Уровень логгирования все-равно не получается задать максимальный. Все осталось так, как было в этом посте: http://stocksharp.com/posts/m/28563/ Лог: ```plain 2013-Dec-08 18:15:26.929856 [TID=c34] - INFO : SmartCOM3 client module (v3.0.79.2589) logging started.. 2013-Dec-08 18:15:26.929856 [TID=c34] - INFO : Logging level is set to 4 value.

esper
esper

Что указывали в SmartTrader.ClientConfig и SmartTrader.ServerConfig?

vk37
vk37

esper: Что указывали в SmartTrader.ClientConfig и SmartTrader.ServerConfig?Честно говоря, ожидал, что будет реализовано через csharp SmartTrader.LogLevel = LogLevels.Debug, Попробовал указывать ClientConfig и ServerConfig равными "logLevel=6;". Пробовал вместе ClientConfig и ServerConfig и по отдельности. Во всех случаях ошибка: Подключение к SmartCOM не инициализировано ```plain 2013-12-08 22:50:53,217 [13] INFO - 00:00:00.000 | SmartTrader | Connect 2013-12-08 22:50:54,386 [Datafeed. Messages thread.] ERROR - Trader ProcessDataError System.InvalidOperationException: Подключение к SmartCOM не инициализировано. at StockSharp.Smart.Wrapper.SmartComWrapper1.#=qKPmbpLB6bUPtmCG_pyahkw==() at StockSharp.Smart.Wrapper.SmartCom3Wrapper64.#=qjchwCBJ$mb9GZ2UOpOt3zRmIoyClH_57xCzzOFWj_SN2S5LzPs7xXR35OAOEleNufw3mDWDJiiS5Tv4vVIdhMg==(String #=qZleZTwOqNxbYZyvEeIa9Xw==) at StockSharp.Smart.SmartComMessageAdapter.#=qCE6veO3FuA1AUfvHrQ2Dsw==(ConnectMessage #=qAvUNcvyrnhEPP5MrkNuMlA==) at StockSharp.Smart.SmartComTransactionMessageAdapter.SendMessage(Message message) at StockSharp.Algo.BaseTrader.#=qnthjmRD$16qgLGdxKlgc4gHaYna8bhm3LbjjYvWx2s8=.#=qU0cFoZ9rUpMYu1z4cQSsJ2XiZ9b6X8h7ar3pmOIXPY8=.#=qwpvr3Y32NBPIcpqxojmJ8lZYD8fwk94TF7uSGm8XjVc=() 2013-12-08 22:50:54,730 [16] INFO - 00:00:00.000 | SmartTrader | RCM: Connecting PrevState = -1 CurrState = -1. 2013-12-08 22:50:54,730 [16] DEBUG - 22:50:54.356 | SmartTrader | BP:MarketDataError,T=2013.12.08 22:50:54.382 2013-12-08 22:50:54,731 [16] ERROR - 22:50:54.382 | SmartTrader | System.InvalidOperationException: Подключение к SmartCOM не инициализировано. at StockSharp.Smart.Wrapper.SmartComWrapper1.#=qKPmbpLB6bUPtmCG_pyahkw==() at StockSharp.Smart.Wrapper.SmartCom3Wrapper64.#=qjchwCBJ$mb9GZ2UOpOt3zRmIoyClH_57xCzzOFWj_SN2S5LzPs7xXR35OAOEleNufw3mDWDJiiS5Tv4vVIdhMg==(String #=qZleZTwOqNxbYZyvEeIa9Xw==) at StockSharp.Smart.SmartComMessageAdapter.#=qCE6veO3FuA1AUfvHrQ2Dsw==(ConnectMessage #=qAvUNcvyrnhEPP5MrkNuMlA==) at StockSharp.Smart.SmartComTransactionMessageAdapter.SendMessage(Message message) at StockSharp.Algo.BaseTrader.#=qnthjmRD$16qgLGdxKlgc4gHaYna8bhm3LbjjYvWx2s8=.#=qU0cFoZ9rUpMYu1z4cQSsJ2XiZ9b6X8h7ar3pmOIXPY8=.#=qwpvr3Y32NBPIcpqxojmJ8lZYD8fwk94TF7uSGm8XjVc=()