Добрый день, пытаюсь сесть на Вашу библиотеку. Смотрю примеры. Пример SampleSmart отлично коннектится и работает с моим демосчетом А пример SampleSmartSMA при нажатии на кнопку Connect выдает следующую ошибку
System.ComponentModel.Win32Exception (0x80004005): Отказано в доступе
в System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
в System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
в System.Diagnostics.Process.Kill()
в StockSharp.Smart.SmartTrader.KillSmartComProcess()
в StockSharp.Smart.SmartTrader.OnConnect()
В чем может быть дело?
Comentários (20)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
smartcom и samplesmartsma от одного юзера запущен, от админа? версию S# тоже указывайте
Точно, спасибо Надо запускать от админитсратора
Добавьте пожалуйста в доку, что Гидру тоже для smartcom надо из под админа пускать.
Думал написать в отдельную тему, но раз уж эта "всплыла".
Меня интересует вопрос, зачем вообще нужно убивать процесс SmartCOM? Негативные последствия от этого предположительно такие:
Как минимум это не позволяет к нему подключиться из двух разных программ. Например, если хочется возложить скачивание маркет-данных на Гидру, а торговать из другой используя тот же SmartCOM.
У меня есть нехороший эффект: если в Гидре сначала нажать Старт, потом Стоп, а затем снова Старт при включенном источнике Smart, то второй раз Старт отвалится по таймауту. Есть предположение, что это связано как раз с убийством SmartCOM во втором Старте.
Вопрос - какая польза? Ведь она же должна быть :-)
Параметры запуска:
Есть также тест на C#, написанный на основе консольного примера для Smart вида: new SmartTrader, Connect, StartExport, Dispose, new SmartTrader, Connect... Скомпилирован под x86. На втором коннекте либо крэш от отсутствия прав, если VisualStudio запущена не под админом, либо бесконечное ожидание успешного коннекта.
Поддержу вопрос. Не знаю, связано ли это с убийством процесса SmartCOM, но определенно с реализацией подключения и переподключения в SmartTrader есть проблемы. Я тоже набросал тест, который умеет подключаться/отключаться, и содержит настройки переподключения при обрыве связи. При тестировании имеем:
Настройки переподключения у меня такие:
Собственно вопросы такие:
P.S.: Тестовый проект - в аттаче. Там нужно поменять константы логина-пароля-портфеля. Прописан адрес основного сервера ITInvest. Если будете использовать тестовую систему - адрес нужно поменять.
Убивание процесса было сделано потому, что если он зависнет (а такое было в 2010, когда я через него торговал, сейчас возможно это не актуально), то к нему уже никак не переключиться.
Реконнект сейчас работает не очень стабильно. В планах его его переделать, но пока это далекие планы, так как нужно малому количеству юзеров. На Квике в последнее время тьфу-тьфу вроде все работает нормально, на Плазе так же, а это основная масса роботостроителей.
Что можно сделать сейчас.
Вопрос сразу, не отходя от кассы. Раз SmartCOM такой нестабильный, а я пока планирую связать с ним свои ближайшие торговые амбиции, можно ли получить исходный код связанный именно со SmartCOM и SmartTrader с тем, чтобы иметь лучшие возможности по поиску и исправлению ошибок? Взамен могу предложить идеи по улучшению SmartTrader, если они конечно будут :-)
Был уже один помощник, который так же говорил про СмартКом. Получил исходники, и больше мы его не видели.
Так что теперь только через время и кодеплекс. Время покажет надежность, кодеплекс - навык.😉
Михаил, спасибо за комментарий.
А сколько будет стоить фикс реконнекта для SmartTrader?
Хотя предположу, что стратегически более правильно будет свалить на плазу.
5-10... Не смотрел точно, как можно переделать. Просто видел в коде явные ошибки. Переподключения писалось очень давно, и тогда было другое мировоззрение на работу с потоками.
Плаза - это хорошо, но только для ФОРТС.
Михаил, спасибо. Цена сравнима со стоимостью подключения к плазе. Я подумаю.
Подключайтесь через СтокШарп http://stocksharp.com/broker/ Бесплатное подключение к Плазе.😀
Мудро
Не получится, т.к. при втором подключении к службе SmartCOM первое дисконнектится.
Кроме этого, некоторое время назад в АйТи что-то подкрутили, и изредка случаются дисконнекты, если во время работы (с другой машины) происходит подключение с этого же, либо даже с дополнительного (!) логина, зарегистрированного на одного клиента. Чёткой системы не уловил, техподдержка АйТи ничем не помогла. Возможно, борьба с мультиподключениями или настройки безопасности, а точнее некорректная их реализация. Благо, мне сейчас не критично, но вообще, конечно, нужно разбираться с этим.
Убийство процесса лучше оставить, хотя зависаний службы не припомню, это надо сильно постараться, производя какие-то нестандартные действия. Но можно и отключить рестарт службы (переопределением метода SmartTrader.Connect), если хочется сделать реконнект быстрым. А, по-хорошему, в SmartTrader можно бы распознавать зависание SmartCOM (предлагаю подумать как именно).
В остальном проблем с реконнектом не замечал, лично у меня он работоспособный на 99.5%. Конечно, с некоторыми костылями вроде переподписывания на события и т.д. Вообще, это рекомендованное разработчиками SmartCOM поведение - отписаться и подписаться снова (CancelTicks+ListenTicks,CancelBidAsk+ListenQuotes и т.д.) Так что, возможно, эти "костыли", которые и не костыли, стоит прописать в SmartTrader.
P.S. Михаил, а кому давали исходники? Я готов потратить время и оттюнить реконнект в SmartTrader, т.к. сам его использую и имею опыт с API SmartCom. Тут и другие заинтересованные есть, вроде бы. Не пойму зачем в позу вставать - "сам делать не буду и вам не дам". По-моему, все мы тут обеими руками за развитие S#. Все - в смысле старожилы, конечно, а не все при/про-ходящие.
Насколько я помню, это вполне возможно. Единственное, что для того, чтобы разрешить множественные подключения нужно звонить в АйТиИнвест и просить чтобы они сняли ограничение на количество конектов с одного адреса. По крайней мере, у меня работает два конекта и ничего не происходит - один SmartTrade, второй - из программы.
Естественно, ограничение по айпи выключено у брокера, не в этом дело. SmartTrade не использует службу SmartCOM и поэтому может одновременно работать с приложением, использующим SmartCOM.
Не смогут работать одновременно на одной машине именно два разных приложения, использующих SmartCOM. Для этого у нас StockSharp, который подключается к SmartCOM один, а уже на StockSharp можно навешивать модули с логикой.
Спасибо за ответы!
Сейчас уже могу сказать, что есть ограничения на подключения. Т.е. даже если со второго компьютера пытаешься коннектиться с одним логином, то на первом коннект пропадает. Чтобы обойти это ограничение можно привязать к своей учетке еще один логин (вопрос без проблем решается через тех.поддержку).
По поводу использования SmartCom в двух программах на одном компьютере - у меня так и не заработало (по крайней мере со StockSharp) и от концепции Hydra + "Программа Анализатор Регистратор Сделок" я отказался, так что у меня сейчас All-In-One пока со StockSharp.
Проблема в том, как верно заметил dvoris, что SmartTrader от StockSharp действительно отпадает раза 3 в день. Идея, что это связано с подключением по второму логину - интересная, можно попробовать. Может быть проблемы с настройками переподключения. В документации сказано, что SmartCom дисконнектится после ожидания ответа на запрос в течение 2 секунд (можно увеличить). Может быть стоит увеличить таймаут. Может быть неправильно настроены попытки переподлючения или оно невключено.
Начал баловаться непосредственно со SmartCom, т.е. писать свою обертку. С подключением заметил такую проблему: если на SmartCom вызвать Connect в программе, а потом эта программа завершится (например, аварийно), то коннекция выживет и не даст законнектится снова при повторном запуске программы (какая-то ошибка сокета). Но можно каждый раз при запуске программы пытаться делать Disconnect. Тогда коннекция-труп умрет и можно будет сделать новый Connect. Есть предположение, что тогда не придется убивать процесс SmartCom.
Вот именно поэтому и я решил организовать проект http://stocksharp.com/forum/3166/RoutingServer/
СмартКом по идее сам является таким вот роутером, но почему-то в него не заложена изначально функциональность множества одновременных подключений. Плюс подвисшие коннекты от одного робота не дают возможность подключаться другому.
В свое время ИТ инвест уже убивал смартком, и инициировал новый АПИ. Даже как-то присылал нам описание. Но время прошло, а его так и нет, и судя по всему даже никто толком и не использовал. Мое мнение такое, что сейчас уже смысла нет что либо писать под смартком. Они наконец-то выпустили СмартИкс и надеюсь теперь дойдут руки до переделок АПИ. Лучше конечно убить СмартКом напрочь, чем мучать и себя и юзеров.
Периодически вылетает ошибка при подключении, может кто подскажет в чем проблема Происходит следующее:
Все запускаю от Админестратора. Установлена SmartCOM 2.2.116.1020 от 14.02.2012 Экспериментировал с подключением библиотек S# (версия 4.1.5, версия 4.1.8, сборка 23281) Служба SmartCom2 отключена (тип запуска - вручную). В столбце (тип запуска) - пусто. Сначала запускаю TestConnect_2_2 с сайта ITinvest. 1. Клик "Create" запускает службу SmartCom2. 2. Клик "Connect" Connected со SmartCom. При этом (с постоянно запущенной службой SmartCom2) нажимая "Disconnect" и "Connect" по очереди много раз не создается никаких ошибок. 3. В итоге отключаю TestConnect_2_2, но оставляю службу SmartCom2 запущенной. Запускаю SampelSmartCandels (пример от S#) -> появляется ошибка
***System.ComponentModel.Win32Exception (0x80004005): Отказано в доступе
в System.Diagnostics.ProcessManager.OpenProcess(Int32 processId, Int32 access, Boolean throwIfExited)
в System.Diagnostics.Process.GetProcessHandle(Int32 access, Boolean throwIfExited)
в System.Diagnostics.Process.Kill()
в StockSharp.Smart.SmartTrader.KillSmartComProcess()
в StockSharp.Smart.SmartTrader.OnConnect()***
после клика на ОК кнопка Export разблокируется и приходят инструменты и т.д. 4. Закрыв приложение SampelSmartCandels и запустив его заново -> выскакивает та же самая ошибка, но уже без подключения, без экспорта.. Служба SmartCom2 включена. 5. Запуская приложение SampelSmartCandels постоянно возникает ошибка, и появление экспорта происходит циклично через подключение. 6. Если отключить службу SmartCom2 и запустить приложение SampelSmartCandels -> запускается без сбоев первый раз, после закрытия приложения служба SmartCom2 остается запущенной. И соответственно при запуске приложения снова появляется ошибка. После этого (с запущенной службой SmartCom2) TestConnect_2_2 запускается и работает без ошибок. Буду искать дальше ошибку, но все таки было бы хорошо если кто то поборол такую ошибку и тут чирканул решение
НАШЕЛ ПРИЧИНУ, может кому поможет в дальнейшем: При повторном запуске от Админа примера SampleSmartCandles появлялась ошибка 800400...15 (точный номер уже непомню). Причина ошибки в установке .NET Framework 4 и 4.5. Устанавливаются в первый раз на комп. нормально без ошибок (что и сбивает с толку 🤨 ). После обновления NET Framework через центр обновлений Windows все ошибки исчезли. Все запускается и работает!!!! 😀