Alexander
|
Дата: 16.03.2012
smartcom и samplesmartsma от одного юзера запущен, от админа? версию S# тоже указывайте
|
|
|
|
AlexBuzaev
|
Дата: 16.03.2012
Точно, спасибо Надо запускать от админитсратора
|
Автор топика
|
|
|
kingdom2
|
Дата: 08.10.2012
Добавьте пожалуйста в доку, что Гидру тоже для smartcom надо из под админа пускать.
|
|
|
|
Цифровой
|
Дата: 09.10.2012
|
|
|
|
Думал написать в отдельную тему, но раз уж эта "всплыла".
Меня интересует вопрос, зачем вообще нужно убивать процесс SmartCOM? Негативные последствия от этого предположительно такие:
1. Как минимум это не позволяет к нему подключиться из двух разных программ. Например, если хочется возложить скачивание маркет-данных на Гидру, а торговать из другой используя тот же SmartCOM.
2. У меня есть нехороший эффект: если в Гидре сначала нажать Старт, потом Стоп, а затем снова Старт при включенном источнике Smart, то второй раз Старт отвалится по таймауту. Есть предположение, что это связано как раз с убийством SmartCOM во втором Старте.
Вопрос - какая польза? Ведь она же должна быть :-)
Параметры запуска: - Гидра, скомпилированная под x86 - Запуск с правами администратора - Windows 8 Release Preview x64, Windows 7 Ultimate x64
Есть также тест на C#, написанный на основе консольного примера для Smart вида: new SmartTrader, Connect, StartExport, Dispose, new SmartTrader, Connect... Скомпилирован под x86. На втором коннекте либо крэш от отсутствия прав, если VisualStudio запущена не под админом, либо бесконечное ожидание успешного коннекта.
|
|
|
|
Marco
|
Дата: 10.10.2012
|
|
|
|
Поддержу вопрос. Не знаю, связано ли это с убийством процесса SmartCOM, но определенно с реализацией подключения и переподключения в SmartTrader есть проблемы. Я тоже набросал тест, который умеет подключаться/отключаться, и содержит настройки переподключения при обрыве связи. При тестировании имеем:
- После запуска тест подключается к шлюзу и получает сделки.
- При отключении вручную и последующем подключении вручную (Disconnect()/Connect()), получение сделок успешно возобновляется.
- При физическом отключении от сети и последующем физическом подключении SmartTrader переподключение выполняет, но получение сделок НЕ возобновляется. (В обработчике события Connected я переподписываюсь на сделки и перезапускаю экспорт.) Вообще при переподключении происходят странные вещи. Например событие Disconnected вызывается с большой задержкой либо вообще не вызывается. При этом Disconnected и Connected могут вызываться несколько раз, в процессе может возникнуть исключение "Программа выполнила недопустимую операцию и будет закрыта" и т.д.
- При перезапуске сервиса SmartCOM в процессе работы теста, просто перестают вызываться все обработчики событий. Никаких попыток восстановить соединение не предпринимается.
Настройки переподключения у меня такие: Код
// настраиваем переподключение при обрыве связи для SmartCom
trader.ReConnectionSettings.ReConnectingAttemptCount = -1;
trader.ReConnectionSettings.ConnectingAttemptCount = -1;
trader.ReConnectionSettings.IsReStartExport = false; // true - тоже пробовал.
trader.ReConnectionSettings.ExportTimeOutInterval = TimeSpan.FromSeconds(30);
trader.ReConnectionSettings.Interval = TimeSpan.FromSeconds(10);
trader.ReConnectionSettings.WorkingTime = Exchange.Rts.WorkingTime;
trader.ReConnectionSettings.ConnectionRestored += () =>
{
Console.WriteLine("Соединение восстановлено.");
};
Собственно вопросы такие:
- Есть ли возможность заставить SmartTrader/SmartCOM стабильно переподключаться при проблемах с каналом связи? Если проблема в моем коде, я готов оплатить техподдержку.
- Если проблемы в SmartTrader, и у уважаемых авторов библиотеки нет времени/желания/возможности их исправлять, могу ли я получить доступ к проекту SmartTrader, чтобы внести необходимые исправления?
- Или посоветуете забить на SmartCOM и перейти на Plaza?
P.S.: Тестовый проект - в аттаче. Там нужно поменять константы логина-пароля-портфеля. Прописан адрес основного сервера ITInvest. Если будете использовать тестовую систему - адрес нужно поменять.
|
|
|
|
Mikhail Sukhov
|
Дата: 10.10.2012
Убивание процесса было сделано потому, что если он зависнет (а такое было в 2010, когда я через него торговал, сейчас возможно это не актуально), то к нему уже никак не переключиться.
Реконнект сейчас работает не очень стабильно. В планах его его переделать, но пока это далекие планы, так как нужно малому количеству юзеров. На Квике в последнее время тьфу-тьфу вроде все работает нормально, на Плазе так же, а это основная масса роботостроителей.
Что можно сделать сейчас.
1) Можно сделать флаг для опционального убивания процесса СмартКом (что, кстати, возможно и сейчас, достаточно переопределить метод SmartTrader.OnConnect). На разрыв соединения это не повлияет, но первое подключение возможно станет быстрее и стабильнее. 2) Можете оплатить доработку для экстренного фикса самостоятельно, или с кем-то, кому еще она нужна.
|
|
|
|
Marco
|
Дата: 10.10.2012
Михаил, спасибо за комментарий.
А сколько будет стоить фикс реконнекта для SmartTrader?
Хотя предположу, что стратегически более правильно будет свалить на плазу.
|
|
|
|
Mikhail Sukhov
|
Дата: 10.10.2012
Marco  Михаил, спасибо за комментарий.
А сколько будет стоить фикс реконнекта для SmartTrader?
Хотя предположу, что стратегически более правильно будет свалить на плазу. 5-10... Не смотрел точно, как можно переделать. Просто видел в коде явные ошибки. Переподключения писалось очень давно, и тогда было другое мировоззрение на работу с потоками. Плаза - это хорошо, но только для ФОРТС.
|
|
|
|
Marco
|
Дата: 10.10.2012
Михаил, спасибо. Цена сравнима со стоимостью подключения к плазе. Я подумаю.
|
|
|
|
Mikhail Sukhov
|
Дата: 10.10.2012
Marco  Михаил, спасибо. Цена сравнима со стоимостью подключения к плазе. Я подумаю. Подключайтесь через СтокШарп https://stocksharp.ru/broker/ Бесплатное подключение к Плазе.
|
|
|
|
Marco
|
Дата: 10.10.2012
Mikhail Sukhov  Вы умеете вести переговоры. (c)
|
|
|
|
Цифровой
|
Дата: 10.10.2012
Mikhail Sukhov  1) Можно сделать флаг для опционального убивания процесса СмартКом (что, кстати, возможно и сейчас, достаточно переопределить метод SmartTrader.OnConnect). На разрыв соединения это не повлияет, но первое подключение возможно станет быстрее и стабильнее.
Да, слона то в виде virtual я и не приметил... Спасибо, буду тестить! Вопрос сразу, не отходя от кассы. Раз SmartCOM такой нестабильный, а я пока планирую связать с ним свои ближайшие торговые амбиции, можно ли получить исходный код связанный именно со SmartCOM и SmartTrader с тем, чтобы иметь лучшие возможности по поиску и исправлению ошибок? Взамен могу предложить идеи по улучшению SmartTrader, если они конечно будут :-)
|
|
|
|
Mikhail Sukhov
|
Дата: 11.10.2012
Цифровой  Раз SmartCOM такой нестабильный, а я пока планирую связать с ним свои ближайшие торговые амбиции, можно ли получить исходный код связанный именно со SmartCOM и SmartTrader с тем, чтобы иметь лучшие возможности по поиску и исправлению ошибок? Взамен могу предложить идеи по улучшению SmartTrader, если они конечно будут :-)
Был уже один помощник, который так же говорил про СмартКом. Получил исходники, и больше мы его не видели. Так что теперь только через время и кодеплекс. Время покажет надежность, кодеплекс - навык.
|
|
|
|
Цифровой
|
Дата: 11.10.2012
Мудро
|
|
|
|
dvoris
|
Дата: 06.12.2012
|
|
|
|
Цитата:1. Как минимум это не позволяет к нему подключиться из двух разных программ. Например, если хочется возложить скачивание маркет-данных на Гидру, а торговать из другой используя тот же SmartCOM. Не получится, т.к. при втором подключении к службе SmartCOM первое дисконнектится. Кроме этого, некоторое время назад в АйТи что-то подкрутили, и изредка случаются дисконнекты, если во время работы (с другой машины) происходит подключение с этого же, либо даже с дополнительного (!) логина, зарегистрированного на одного клиента. Чёткой системы не уловил, техподдержка АйТи ничем не помогла. Возможно, борьба с мультиподключениями или настройки безопасности, а точнее некорректная их реализация. Благо, мне сейчас не критично, но вообще, конечно, нужно разбираться с этим. Убийство процесса лучше оставить, хотя зависаний службы не припомню, это надо сильно постараться, производя какие-то нестандартные действия. Но можно и отключить рестарт службы (переопределением метода SmartTrader.Connect), если хочется сделать реконнект быстрым. А, по-хорошему, в SmartTrader можно бы распознавать зависание SmartCOM (предлагаю подумать как именно). В остальном проблем с реконнектом не замечал, лично у меня он работоспособный на 99.5%. Конечно, с некоторыми костылями вроде переподписывания на события и т.д. Вообще, это рекомендованное разработчиками SmartCOM поведение - отписаться и подписаться снова (CancelTicks+ListenTicks,CancelBidAsk+ListenQuotes и т.д.) Так что, возможно, эти "костыли", которые и не костыли, стоит прописать в SmartTrader. P.S. Михаил, а кому давали исходники? Я готов потратить время и оттюнить реконнект в SmartTrader, т.к. сам его использую и имею опыт с API SmartCom. Тут и другие заинтересованные есть, вроде бы. Не пойму зачем в позу вставать - "сам делать не буду и вам не дам". По-моему, все мы тут обеими руками за развитие S#. Все - в смысле старожилы, конечно, а не все при/про-ходящие.
|
|
|
|
andy_baka_
|
Дата: 06.12.2012
Насколько я помню, это вполне возможно. Единственное, что для того, чтобы разрешить множественные подключения нужно звонить в АйТиИнвест и просить чтобы они сняли ограничение на количество конектов с одного адреса. По крайней мере, у меня работает два конекта и ничего не происходит - один SmartTrade, второй - из программы.
|
|
|
|
dvoris
|
Дата: 06.12.2012
andy_baka_  Насколько я помню, это вполне возможно. Единственное, что для того, чтобы разрешить множественные подключения нужно звонить в АйТиИнвест и просить чтобы они сняли ограничение на количество конектов с одного адреса. По крайней мере, у меня работает два конекта и ничего не происходит - один SmartTrade, второй - из программы. Естественно, ограничение по айпи выключено у брокера, не в этом дело. SmartTrade не использует службу SmartCOM и поэтому может одновременно работать с приложением, использующим SmartCOM. Не смогут работать одновременно на одной машине именно два разных приложения, использующих SmartCOM. Для этого у нас StockSharp, который подключается к SmartCOM один, а уже на StockSharp можно навешивать модули с логикой.
|
|
|
|
Цифровой
|
Дата: 20.12.2012
|
|
|
|
Спасибо за ответы!
1. Сейчас уже могу сказать, что есть ограничения на подключения. Т.е. даже если со второго компьютера пытаешься коннектиться с одним логином, то на первом коннект пропадает. Чтобы обойти это ограничение можно привязать к своей учетке еще один логин (вопрос без проблем решается через тех.поддержку).
2. По поводу использования SmartCom в двух программах на одном компьютере - у меня так и не заработало (по крайней мере со StockSharp) и от концепции Hydra + "Программа Анализатор Регистратор Сделок" я отказался, так что у меня сейчас All-In-One пока со StockSharp.
3. Проблема в том, как верно заметил dvoris, что SmartTrader от StockSharp действительно отпадает раза 3 в день. Идея, что это связано с подключением по второму логину - интересная, можно попробовать. Может быть проблемы с настройками переподключения. В документации сказано, что SmartCom дисконнектится после ожидания ответа на запрос в течение 2 секунд (можно увеличить). Может быть стоит увеличить таймаут. Может быть неправильно настроены попытки переподлючения или оно невключено.
4. Начал баловаться непосредственно со SmartCom, т.е. писать свою обертку. С подключением заметил такую проблему: если на SmartCom вызвать Connect в программе, а потом эта программа завершится (например, аварийно), то коннекция выживет и не даст законнектится снова при повторном запуске программы (какая-то ошибка сокета). Но можно каждый раз при запуске программы пытаться делать Disconnect. Тогда коннекция-труп умрет и можно будет сделать новый Connect. Есть предположение, что тогда не придется убивать процесс SmartCom.
|
|
|
|
Mikhail Sukhov
|
Дата: 20.12.2012
Цифровой  и от концепции Hydra + "Программа Анализатор Регистратор Сделок" я отказался, так что у меня сейчас All-In-One пока со StockSharp.
Вот именно поэтому и я решил организовать проект https://stocksharp.ru/forum/3166/RoutingServer/
СмартКом по идее сам является таким вот роутером, но почему-то в него не заложена изначально функциональность множества одновременных подключений. Плюс подвисшие коннекты от одного робота не дают возможность подключаться другому. В свое время ИТ инвест уже убивал смартком, и инициировал новый АПИ. Даже как-то присылал нам описание. Но время прошло, а его так и нет, и судя по всему даже никто толком и не использовал. Мое мнение такое, что сейчас уже смысла нет что либо писать под смартком. Они наконец-то выпустили СмартИкс и надеюсь теперь дойдут руки до переделок АПИ. Лучше конечно убить СмартКом напрочь, чем мучать и себя и юзеров.
|
|
|
|
Aleksey24
|
Дата: 11.03.2013
|
|
|
|
Периодически вылетает ошибка при подключении, может кто подскажет в чем проблема Происходит следующее: Все запускаю от Админестратора. Установлена 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 все ошибки исчезли. Все запускается и работает!!!!
|
|
|