← Zurück

Не работает пример из комплекта примеров S#

Здравствуйте. Скачал себе библиотеку, установил SmartCom, решил запустить простейший консольный пример. Кстати, этот же пример описан и в справке, называется "Создание первого робота" Зарегистрировал демо-счет на ITInvest.

Так вот, пример скомпилировался, запустился и подключился к серверу, по крайней мере написал в консоли, что он это сделал.

После этого вывел строчку "Дожидаемся появления в программе инструмента Лукойл и портфеля ST8883" и больше ничего не происходит. Оставлял на сутки - ноль движения. Включал режим отладки - ошибок и exception нет. Просто ничего не происходит.

Пробовал подставить вместо инструмента LKOH другие - картина аналогична.

Причем SmartTrade к моему демо-счету прекрасно подключается, показывает котировки, ставит заявки - никаких проблем.

Вопрос - почему пример из комплекта поставки S# может не работать? Заранее спасибо всем откликнувшимся.

War dieses Thema hilfreich?

Thema teilen

Kommentare (15)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

esper
esper

так понял инструмент меняли, а название портфеля?

konstmal
konstmal Autor

esper: так понял инструмент меняли, а название портфеля?

А как это сделать? Там в примере только инструмент указывается:

const string secCode = "LKOH";

и всё, остальное без изменений

esper
esper

Ага, в смарте название портфеля (счета) вводится при запуске программы. Т.е. ни портфель, ни инструмент не находятся?

konstmal
konstmal Autor

Название счета я указываю при соединении, оно взято из письма о создании тестового аккаунта:


                var account = "ST8883"; //Название счета

                IPAddress server = IPAddress.Parse("89.175.35.229");

                using (var waitHandle = new AutoResetEvent(false))
                {
                    // создаем шлюз к Smart-у
                    using (var trader = new SmartTrader(login, password, server))
                    {
                        // подписываемся на событие успешного подключения
                        // все действия необходимо производить только после подключения
                        trader.Connected += () =>
                        {
                            Console.WriteLine("Подключение было произведено успешно.");

                            // извещаем об успешном соединени
                            waitHandle.Set();
                        };

                        Console.WriteLine("Производим подключение...");

                        trader.Connect();

                        // дожидаемся события об успешном соединении
                        waitHandle.WaitOne();

                        // подписываемся на все портфели-счета
                        trader.NewPortfolios += portfolios =>
                        {
                            // необходимое условие работы в SmartCOM
                            portfolios.ForEach(trader.RegisterPortfolio);

                            if (_portfolio == null)
                            {
                                // находим Лукойл и присваиваем ее переменной lkoh
                                _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

                                if (_portfolio != null)
                                {
                                    Console.WriteLine("Портфель {0} появился.", account);

                                    if (_lkoh != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появление инструментов
                        trader.NewSecurities += securities =>
                        {
                            if (_lkoh == null)
                            {
                                // находим Лукойл и присваиваем ее переменной lkoh
                                _lkoh = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Equity);

                                if (_lkoh != null)
                                {
                                    Console.WriteLine("Инструмент RTS появился.");

                                    if (_portfolio != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появления моих новых сделок
                        trader.NewMyTrades += myTrades =>
                        {
                            foreach (var myTrade in myTrades)
                            {
                                var trade = myTrade.Trade;
                                Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
                            }
                        };

                        Console.WriteLine("Дожидаемся появления в программе инструмента RTS и портфеля {0}...".Put(account));

                        // запускаем экспорт по инструментам и портфелям
                        trader.StartExport();

Вроде бы абсолютно всё как в примере, только логин-пароль-счет мои - и не работает. Полностью программа - во вложении

Alexander
Alexander

Что в консоль выводится? ни портфель ни инструмент не приходят? processdataerror что-нибудь выводит? подключение производится?

konstmal
konstmal Autor

В консоль выводится 3 строчки:

Производим подключение... Подключение было произведено успешно. Дожидаемся появления в программе инструмента RTS и портфеля ST8883...

ни портфель ни инструмент не приходят? processdataerror что-нибудь выводит? подключение производится?

Не приходят. processdataerror - что это? (я первый раз вижу S# и C#) подключение видимо производится, раз программа об этом пишет

Alexander
Alexander

konstmal: Не приходят. processdataerror - что это? (я первый раз вижу S# и C#) подключение видимо производится, раз программа об этом пишет

Событие у трэйдера посмотрите поднимается ли событие и на события NewPortfolios \ NewSecurities посмотрите - дёргаются ли они вообще

konstmal
konstmal Autor

Ставил точки останова в событиях. Срабатывает только в подключении, в других событиях не срабатывают

Alexander
Alexander

konstmal: Ставил точки останова в событиях. Срабатывает только в подключении, в других событиях не срабатывают

И всё же, ProcessDataError что выдаёт?

konstmal
konstmal Autor

Alexander Mukhanchikov: И всё же, ProcessDataError что выдаёт?

К сожалению, я сейчас не могу проверить, т.к. нет доступа к компьютеру с Visual Studio.

Я выложил архив с исходниками несколькими постами раньше, полностью solution, может быть у вас будет минутка посмотреть?

Mikhail Sukhov
Mikhail Sukhov

konstmal: Я выложил архив с исходниками несколькими постами раньше, полностью solution, может быть у вас будет минутка посмотреть?

Запустите SampleSmart. Что выводится?

konstmal
konstmal Autor

Mikhail Sukhov: Запустите SampleSmart. Что выводится?

Запустил, подключился со своим логином-паролем.

Нажимаю на кнопку "Инструменты" - выходит пустое окно Нажимаю "Портфели" -получаю окно в котором 2 строки: ST8883-MS-01 0 100000 RUB 2 (на сером фоне) ST8883-RF-01 0 100000 RUB 1 (на белом фоне)

Нажимаю "стоп-заявки" - пустое окно "Сделки", "Мои сделки", "Заявки" - пустое окно

Экспорт - красная кнопка - нажимается но ничего не происходит

Вот так.

Mikhail Sukhov
Mikhail Sukhov

konstmal: Экспорт - красная кнопка - нажимается но ничего не происходит

Вот так.

Боевой логин. Запуск примера из последнего дистрибутива (скачал только что). Все выводит и даже дает торговать. Тема на форуме АйТи про Т-счет. Не оно?

konstmal
konstmal Autor

Mikhail Sukhov: Боевой логин. Запуск примера из последнего дистрибутива (скачал только что). Все выводит и даже дает торговать. Тема на форуме АйТи про Т-счет. Не оно?

Тему посмотрел, только непонятно, почему SmartTrade показывает и котировки и сделки, и позволяет заявки ставить под тем же логином-паролем и по тому же счету?

А есть какая то разница, в какой момент запускать робота? или сервер обязан круглосуточно работать?

Mikhail Sukhov
Mikhail Sukhov

konstmal: Тему посмотрел, только непонятно, почему SmartTrade показывает и котировки и сделки, и позволяет заявки ставить под тем же логином-паролем и по тому же счету?

Это решение АйТи, к ним и нужно обращаться. Видимо, есть разница между СмартКом и СмартТрейд.