Описание процесса подключения к СмартКом

  1. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18

    Smartcom - Интерфейс программирования для доступа на российский фондовый рынок. Разработан брокером It Invest. Из бесплатных платформ для доступа на ММВБ является самым быстрым решением. В 10 - 50 раз быстрее Quik.


    Описание на сайте брокера: SmartCom


    Первое. Подключаем дистрибутивы


    Для того чтобы подсоединиться к торгам, необходимо установить дистрибутивы SmartCom. Они находятся рядом с инструкцией. Файл: SmartCOM_Setup_3.0.146.msi

    Далее, в главном окне платформы жмём "Сервер" и выбираем в качестве платформы для подключения SmartCom.



    Для того чтобы запустить сервер SmartCom надо настроить:
    1.Адрес и порт сервера. Их можно взять из терминала СмартХ, из окна соединения, которое появляется сразу после загрузки.
    2.Надо ввести Пароль и имя пользователя для доступа в систему.
    3.Нажать кнопку "Подключить".


    Заказать тестовые ключи доступа можно на странице: It Invest Внизу находиться соответствующее поле.


    Алексей Ван
    05.12.2016 16:49
    #1
  2. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Добрый день!

    Есть вопросы:

    1. Чем драйвера для Смарткома, лежащие в дистрибутиве, лучше, чем с сайта самого АйТиИнвеста? Там они вроде по-новее будут...

    2. Скольки разрядная ваша программа? Если можно скачать драйвера с АйТиИнвеста, то какую версию выбрать (32 или 64 бит)?

    Кот Матроскин
    02.01.2017 19:50
    #2
  3. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Все еще жду ответа...

    Кот Матроскин
    08.01.2017 19:38
    #3
  4. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    И еще вопрос. Для ТСЛаба мне АйТиИнвест создал как бы дополнительный счет. Деньги те же, но пароль и логин разные. Для этой программы такое нужно?

    Кот Матроскин
    08.01.2017 19:44
    #4
  5. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18
    Цитата: Кот Матроскин

    Добрый день!

    Есть вопросы:

    1. Чем драйвера для Смарткома, лежащие в дистрибутиве, лучше, чем с сайта самого АйТиИнвеста? Там они вроде по-новее будут...

    2. Скольки разрядная ваша программа? Если можно скачать драйвера с АйТиИнвеста, то какую версию выбрать (32 или 64 бит)?

    1. Попробуйте новые. Но может глючить, т.к. делалось на старых

    2. 32

    Алексей Ван
    11.01.2017 19:51
    #5
  6. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18
    Цитата: Кот Матроскин

    И еще вопрос. Для ТСЛаба мне АйТиИнвест создал как бы дополнительный счет. Деньги те же, но пароль и логин разные. Для этой программы такое нужно?

    нет. не нужно
    Алексей Ван
    11.01.2017 19:51
    #6
  7. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18
    Цитата: Алексей Ван
    1. Попробуйте новые. Но может глючить, т.к. делалось на старых 2. 32

    Спасибо!

    Кот Матроскин
    11.01.2017 20:24
    #7
  8. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Добрый день!

    Поставил Смартком из дистрибутива. При запуске программы выбираю Робот, и пытаюсь подключить сервер Смарткома для робота. И получаю:

    15.01.2017 19:16:57
    Error
    System.IO.FileNotFoundException: Не удалось получить фабрику класса COM для компонента с CLSID {99F5EA2E-0636-49BE-8100-8AE309B03331} из-за следующей ошибки: 8007007e Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E).
    в OsEngine.Market.Servers.SmartCom.SmartComServer.CreateNewServerSmartCom() в D:\Dist\OSA\OsEngine_v0.9.2_Beta\Проект\OsEngine\Market\Servers\SmartCom\SmartComServer.cs:строка 355
    в OsEngine.Market.Servers.SmartCom.SmartComServer.PrimeThreadArea() в D:\Dist\OSA\OsEngine_v0.9.2_Beta\Проект\OsEngine\Market\Servers\SmartCom\SmartComServer.cs:строка 252


    Как лечить?

    Кот Матроскин
    15.01.2017 19:21
    #8
  9. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18


    Как лечить?

    Не сталкивался с такой проблемой.

    Но абсолютно точно в систему СмартКом не установился или установлен криво. Попробуйте переустановить.


    Алексей Ван
    17.01.2017 08:21
    #9
  10. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18
    Цитата: Алексей Ван
    Не сталкивался с такой проблемой. Но абсолютно точно в систему СмартКом не установился или установлен криво. Попробуйте переустановить.

    1. Абсолютно точно, что Смартком, во-первых, установился, а во-вторых, установился не криво, т.к. ТСЛаб на нем нормально работает
    2. Переустановил пару раз Смартком из дистрибутива, напоследок даже с сайта АйТиИнвест скачал Смартком - без толку, не работает, та же ошибка вылезает

    Кот Матроскин
    17.01.2017 22:24
    #10
  11. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Спасибо! Вечером попробую

    Кот Матроскин
    18.01.2017 06:27
    #11
  12. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Странно, ни в дистрибутиве с ОСА.НЕТ, ни на компьютере не нашел SmartCom.dll... Где его взять то?

    SmartComApi - это SmartCOM_Setup_3.0.146.msi?


    Кот Матроскин
    18.01.2017 06:47
    #12
  13. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18

    Смог смоделировать. Если удалить SmartCom.dll что рядом с экзешником или потерять на него ссылку, то возникает такая ошибка. Возьмите чистый билд, и загрузитесь из него. Ничего рядом с экзешником удалять не нужно, референсы тоже менять не стоит. Также необходимо установить SmartComApi из дистрибудива.

    Алексей Ван
    18.01.2017 07:59
    #13
  14. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Странно, ни в дистрибутиве с ОСА.НЕТ, ни на компьютере не нашел SmartCom.dll... Где его взять то?

    SmartComApi - это SmartCOM_Setup_3.0.146.msi?

    Кот Матроскин
    18.01.2017 10:21
    #14
  15. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18
    Цитата: Кот Матроскин

    Странно, ни в дистрибутиве с ОСА.НЕТ, ни на компьютере не нашел SmartCom.dll... Где его взять то?

    SmartComApi - это SmartCOM_Setup_3.0.146.msi?

    этот файл лежит рядом с экзешником. OsEngine/bin/Debag/ Вот здесь.

    Алексей Ван
    18.01.2017 13:21
    #15
  16. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Странно, ничего не делал, только раскрыл ссылки, и все ошибка прекратилась... Указанные файлы не удалял и не добавлял...

    Кот Матроскин
    18.01.2017 21:44
    #16
  17. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    Добрый день. Торгую в реале, пока вылезли две проблемы:

    1. Постоянно вылазит ошибка:

    в OsEngine.Market.Connector.ConnectorBot_NewTradeEvent(List`1 tradesList) в D:\Dist\OSA\OsEngine_v0.9.3_Beta\Проект\OsEngine\Market\Connector.cs:строка 738
    30.01.2017 16:47:18_Error_System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
    в OsEngine.OsTrader.Panels.Tab.BotTabSimple._connector_TickChangeEvent(List`1 trades) в D:\Dist\OSA\OsEngine_v0.9.3_Beta\Проект\OsEngine\OsTrader\Panels\Tab\BotTabSimple.cs:строка 3293
    в OsEngine.Market.Connector.ConnectorBot_NewTradeEvent(List`1 tradesList) в D:\Dist\OSA\OsEngine_v0.9.3_Beta\Проект\OsEngine\Market\Connector.cs:строка 746
    30.01.2017 16:47:19_Error_System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.

    2. Очень часто неправильно набирает/закрывает позицию. Например, пытаюсь закрыть лонговую позицию:

    List openPositions;
    openPositions = _tab0SR.PositionsOpenAll;

    if (openPositions != null && openPositions.Count != 0) { _tab0SR.CloseAllAtMarket(); }

    А он мне не только лонг закрывает, но и шорт набирает при этом...

    Или входит в позицию больше, чем просил....


    Я на смарткоме. Чем лечить?


    Кот Матроскин
    30.01.2017 22:04
    #17
  18. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18

    Я на смарткоме. Чем лечить?

    по первому. Надо открыть класс BotTabSimple и вставить перед 3293 строкой вот это:

    if (trades[i2] == null)
    {
    trades.RemoveAt(i2);
    return;
    }

    Должно отпустить. Не знаю откуда там null... Но костыль должен это дело обойти. В новом релизе этого соответственно не будет. Но новый релиз будет недели через две только. Надо кое что допилить...


    по второму.

    Тут нужно смотреть торговую логику. Важно чтобы у робота было время между вызовами функций открытия и закрытия позиций. Если его не будет и робот не успеет получить коллБеки по предыдущим запросам - будут такие штуки. Как бороться - запретить роботу вызывать эти функции чаще раза в 2 - 5 секунд.


    Сделал раздел баги: http://o-s-a.net/forum/20

    и предложения: http://o-s-a.net/forum/21



    Алексей Ван
    31.01.2017 08:46
    #18
  19. Кот Матроскин

    Регистрация:
    02.01.17
    Сообщения:
    40
    Был на сайте:
    19.08.18

    По первому - спасибо!

    По второму:
    Цитата: Алексей ВанТут нужно смотреть торговую логику. Важно чтобы у робота было время между вызовами функций открытия и закрытия позиций. Если его не будет и робот не успеет получить коллБеки по предыдущим запросам - будут такие штуки. Как бороться - запретить роботу вызывать эти функции чаще раза в 2 - 5 секунд.


    Логика простая:

    private void Strateg_CandleFinishedEvent(List candles)

    {

    if ( условие по времени)

    {

    ClosePosition();

    }

    }

    private void ClosePosition()
    {


    List openPositions;
    openPositions = _tab0SR.PositionsOpenAll;
    if (openPositions != null && openPositions.Count != 0) { _tab0SR.CloseAllAtMarket(); }

    }

    Таймфрейм 15 мин. К моменту закрытия позиция была открыта несколько часов. Между этими функциям открытия и закрытия никак не могло быть 2-5 секунд....

    Кот Матроскин
    31.01.2017 21:14
    #19
  20. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18

    Таймфрейм 15 мин. К моменту закрытия позиция была открыта несколько часов. Между этими функциям открытия и закрытия никак не могло быть 2-5 секунд....

    сложно сказать что не так. Попробуйте закрываться лимитками глубоко в рынок передавая в метод название сигнала на закрытие. Можно попробовать логировать работу. Фиксируя время когда вызывается закрытие позиции. Сами функции закрытия работают нормально, уже на 100 раз протестировано всё.

    Алексей Ван
    01.02.2017 07:35
    #20
  21. Niktesla

    Регистрация:
    12.02.17
    Сообщения:
    1
    Был на сайте:
    22.06.18
    Цитата: Алексей Ван
    Смог смоделировать. Если удалить SmartCom.dll что рядом с экзешником или потерять на него ссылку, то возникает такая ошибка.

    А позвольте полюбопытствовать, за счёт чего такая конфузия?

    По идее ведь ее местоположение, как любой порядочной COM-дллки должно дергаться из реестра...

    Или вы используете лежащую рядом библиотечку для каких-то своих нестандартных низменных целей чуть ли не на уровне ассемблера?

    Niktesla
    12.02.2017 18:35
    #21
  22. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18

    Или вы используете лежащую рядом библиотечку для каких-то своих нестандартных низменных целей чуть ли не на уровне ассемблера?

    Нечего такого. Всё стандартно.

    Алексей Ван
    12.02.2017 21:30
    #22
  23. vshka

    Регистрация:
    20.03.18
    Сообщения:
    2
    Был на сайте:
    17.08.18

    Друзья, в SmartCom есть такое событие как SmartServer.UpdateQuote там есть много вкусностей таких, как общий объём ЦБ с требованием на покупку или продажу и многое другое чего не нашёл в библиотеке. В библиотеке нашёл аналог общего объёма в MarketDepth (marketDepth.AskSummVolume и marketDepth.BidSummVolume), но он в высчитывает только то, что показывает смарткомовский стакан 50 уровней вверх и вниз от текущей цены. Пытался по аналогии с другими событиями в SmartComServers.cs добавить SmartServer.UpdateQuote, но навыков программирования увы не хватило... Ругается на то что "нет перегруженного метода для SmartServer_UpdateQuote, который соответствует делегату _IStClient_UpdateQujteEventHandler". Есть ли в планах расширение функционала для SmartCom подключения? И в каком формате у вас проходит платное обучение и сколько оно длится?

    vshka
    21.04.2018 00:31
    #23
  24. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18
    Цитата: vshka

    Друзья, в SmartCom есть такое событие как SmartServer.UpdateQuote там есть много вкусностей таких, как общий объём ЦБ с требованием на покупку или продажу и многое другое чего не нашёл в библиотеке. В библиотеке нашёл аналог общего объёма в MarketDepth (marketDepth.AskSummVolume и marketDepth.BidSummVolume), но он в высчитывает только то, что показывает смарткомовский стакан 50 уровней вверх и вниз от текущей цены. Пытался по аналогии с другими событиями в SmartComServers.cs добавить SmartServer.UpdateQuote, но навыков программирования увы не хватило... Ругается на то что "нет перегруженного метода для SmartServer_UpdateQuote, который соответствует делегату _IStClient_UpdateQujteEventHandler". Есть ли в планах расширение функционала для SmartCom подключения? И в каком формате у вас проходит платное обучение и сколько оно длится?

    В обучении у нас создание роботов в слое создания роботов. Там скриптовый язык основанный на СиШарп, которым нужно пользоваться для создания роботов. ООП, Паттерны и прочее мы на этом обучении не даём. И оно не поможет Вам реализовать данную функцию.

    Вообще не планируется ничего такого. Разные платформы выдают разные штуки. Под всё не подстроишься. Однако, если купите обучение полное, сделаю такую штуку Вам лично. Можно не насиловать всю иерархию до слоя создания ботов, а сделать в сервере статический массив с нужными Вам данными, которые можно будет запрашивать от куда угодно как из глобальной переменной.

    Алексей Ван
    21.04.2018 09:40
    #24
  25. agraton

    Регистрация:
    12.07.18
    Сообщения:
    3
    Был на сайте:
    01.08.18

    Уважаемый Алексей!

    Помогите, плз. Сдуру поставил последнюю версию смарткома. Скомпилировать не удалось. Вернул старую - ошибка повторяется - не может внедрить st.server class.Как правильно самому добавлять ссылку на смартком? Пожалуйста, дайте инструкцию. Просто замена версии на старую не помогает. Студия отказывается компилировать.

    Пытался даже реестр чистить. Увы.

    Спасибо.

    agraton
    30.07.2018 11:10
    #25
  26. agraton

    Регистрация:
    12.07.18
    Сообщения:
    3
    Был на сайте:
    01.08.18
    Цитата: Алексей Ван
    Цитата: agraton

    Уважаемый Алексей!

    Помогите, плз. Сдуру поставил последнюю версию смарткома. Скомпилировать не удалось. Вернул старую - ошибка повторяется - не может внедрить st.server class.Как правильно самому добавлять ссылку на смартком? Пожалуйста, дайте инструкцию. Просто замена версии на старую не помогает. Студия отказывается компилировать.

    Пытался даже реестр чистить. Увы.

    Спасибо.

    Скачайте чистую версию всего дистрибутива с гитХаба. Распакуйте её и запустите. Всё должно быть хорошо. https://github.com/AlexWan/OsEngine

    К сожалению - нет. Работает все, кроме квик луа. А он очень нужен. Такое впечатление, что происходит подмена идентификатора интеропа смарткома. Как все-таки правильно самому менять(или устанавливать) смартком в проекте?

    agraton
    30.07.2018 11:40
    #26
  27. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18
    Цитата: agraton

    Уважаемый Алексей!

    Помогите, плз. Сдуру поставил последнюю версию смарткома. Скомпилировать не удалось. Вернул старую - ошибка повторяется - не может внедрить st.server class.Как правильно самому добавлять ссылку на смартком? Пожалуйста, дайте инструкцию. Просто замена версии на старую не помогает. Студия отказывается компилировать.

    Пытался даже реестр чистить. Увы.

    Спасибо.

    Скачайте чистую версию всего дистрибутива с гитХаба. Распакуйте её и запустите. Всё должно быть хорошо. https://github.com/AlexWan/OsEngine

    Алексей Ван
    30.07.2018 14:16
    #27
  28. Алексей Ван Команда форума

    Регистрация:
    02.02.13
    Сообщения:
    341
    Был на сайте:
    20.08.18
    Цитата: agraton
    Цитата: Алексей Ван
    Цитата: agraton

    Уважаемый Алексей!

    Помогите, плз. Сдуру поставил последнюю версию смарткома. Скомпилировать не удалось. Вернул старую - ошибка повторяется - не может внедрить st.server class.Как правильно самому добавлять ссылку на смартком? Пожалуйста, дайте инструкцию. Просто замена версии на старую не помогает. Студия отказывается компилировать.

    Пытался даже реестр чистить. Увы.

    Спасибо.

    Скачайте чистую версию всего дистрибутива с гитХаба. Распакуйте её и запустите. Всё должно быть хорошо. https://github.com/AlexWan/OsEngine

    К сожалению - нет. Работает все, кроме квик луа. А он очень нужен. Такое впечатление, что происходит подмена идентификатора интеропа смарткома. Как все-таки правильно самому менять(или устанавливать) смартком в проекте?

    Самому у Вас врятли получится что-то поменять. Для этого нужно переделывать ServerSmartCom. И фиксить все изменения. Т.к. версия от версии отличается. Удалите все старые версии смартКом и установите ту что лежит в дистрибутивах с OsEngine, в папке Doc

    Алексей Ван
    30.07.2018 16:22
    #28