Клиентский API > Когда же будет API для терминала.

Разработка с использованием клиентского API
Worldmaster
Сообщения: 24
Зарегистрирован: 04 сен 2017, 13:30
Поблагодарили: 3 раза

Re: Когда же будет API для терминала.

Непрочитанное сообщение Worldmaster » 05 сен 2017, 15:02

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

ensh
Сообщения: 218
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Re: Когда же будет API для терминала.

Непрочитанное сообщение ensh » 05 сен 2017, 15:43

успехов изучения класса AdClient...

Worldmaster
Сообщения: 24
Зарегистрирован: 04 сен 2017, 13:30
Поблагодарили: 3 раза

Re: Когда же будет API для терминала.

Непрочитанное сообщение Worldmaster » 05 сен 2017, 16:12

Спасибо. ))

Worldmaster
Сообщения: 24
Зарегистрирован: 04 сен 2017, 13:30
Поблагодарили: 3 раза

Re: Когда же будет API для терминала.

Непрочитанное сообщение Worldmaster » 24 окт 2017, 16:50

Здравствуйте. В общем все отлично продвигается. В целом можно переводить свои торговые системы на 4. Даже в чем то шустрее стало работать. Ну это лирика.
Далее вопрос возник, может ктото еще сталкивался.

не работает функционал подключения терминала. Вот код:

Код: Выделить всё

Packer.Initialize(@"C:\Program Files (x86)\Alfa-Direct Pro\ad.xml");

                client = new AdClient();
                client.OnConnectionChanged += new Action<AD.Common.Helpers.FrontEndType, AD.Common.DataStructures.ConnectionStatus>(client_OnConnectionChanged);
                client.OnServerMessage += new Action<AD.Common.Helpers.FrontEndType, AD.Common.DataStructures.ClientMessageEntity>(client_OnServerMessage);
                client.Trading.OnTradeLimitResponse += Trading_OnTradeLimitResponse;
                client.Trading.OnOrderChanged += Trading_OnOrderChanged;

                ConnectionStatus constat =  client.GetConnectionStatus(FrontEndType.AllTypes); // !!! ТУТ ВСЕГДА Disconnected
                if (constat == ConnectionStatus.Disconnected)
                {
                    client.Connect("login", "pass"); // ТУТ ВСЕГДА ОШИБКА "Ссылка на объект не указывает на экземпляр объекта.
                }


Почему так происходит? Остальной код нормально работает.

ensh
Сообщения: 218
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Re: Когда же будет API для терминала.

Непрочитанное сообщение ensh » 24 окт 2017, 18:47

Код: Выделить всё

ConnectionStatus constat =  client.GetConnectionStatus(FrontEndType.AllTypes); // !!! ТУТ ВСЕГДА Disconnected


Именно! Ибо нужно знать какой фронтенд спрашивать, а то все... это было бы слишком легко :lol:
Наверно, для соединения самый интересный AuthAndOperInitServer.

Код: Выделить всё

client.Connect("login", "pass"); // ТУТ ВСЕГДА ОШИБКА "Ссылка на объект не указывает на экземпляр объекта.


Поспешай медленно... Нужно что-то типа:

Код: Выделить всё

           client.OnTerminalConnectionChanged += status =>
           {
                   if (status == ConnectionStatus.Connected)
                   {
                          client.Connect("login", "pass");
                   }
           };


или даже


Код: Выделить всё

           client.OnTerminalConnectionChanged += status =>
           {
                   if (status == ConnectionStatus.Connected)
                   {
                      var connStatus = client.GetConnectionStatus(FrontEndType.AuthAndOperInitServer);
                          if (connStatus != ConnectionStatus.Authorized)
                              client.Connect("login", "pass");
                   }
           };

ensh
Сообщения: 218
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Re: Когда же будет API для терминала.

Непрочитанное сообщение ensh » 25 окт 2017, 10:42

Вот, кстати, еще способ, без колбека:

Код: Выделить всё

           
            Thread.Sleep(2000); // минимум подбирается эмпирически ;)
            var connStatus = client.GetConnectionStatus(FrontEndType.AuthAndOperInitServer);
            if (connStatus != ConnectionStatus.Authorized)
                client.Connect("", "");

Worldmaster
Сообщения: 24
Зарегистрирован: 04 сен 2017, 13:30
Поблагодарили: 3 раза

Re: Когда же будет API для терминала.

Непрочитанное сообщение Worldmaster » 25 окт 2017, 13:54

Не. В любом случае Connect не работает.

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

Код: Выделить всё

ConnectionStatus AllTypes =  client.GetConnectionStatus(FrontEndType.AllTypes);
ConnectionStatus AuthAndOperInitServer = client.GetConnectionStatus(FrontEndType.AuthAndOperInitServer);
ConnectionStatus BirzArchAndMediaServer = client.GetConnectionStatus(FrontEndType.BirzArchAndMediaServer);
ConnectionStatus OperServer = client.GetConnectionStatus(FrontEndType.OperServer);
ConnectionStatus RealTimeBirzInfoDelayedServer = client.GetConnectionStatus(FrontEndType.RealTimeBirzInfoDelayedServer);
ConnectionStatus RealTimeBirzInfoServer = client.GetConnectionStatus(FrontEndType.RealTimeBirzInfoServer);


Все переменные равны Disconnected/

ensh
Сообщения: 218
Зарегистрирован: 28 июн 2017, 13:56
Благодарил (а): 4 раза
Поблагодарили: 39 раз

Re: Когда же будет API для терминала.

Непрочитанное сообщение ensh » 25 окт 2017, 15:37

Не знаю, у меня этот кодв VS2013 прекрасно работает.
Только нужно правильные dll-ки взять :roll:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

using AD.Common.DataStructures;
using AD.Common.Helpers;
using ADClientSDK;

namespace CliSdkTest
{
    class Program
    {
        public static AdClient client;
        static void Main(string[] args)
        {
            Packer.Initialize();


            Console.WriteLine(@"Disconnected.");
            try
            {
                client = new AdClient();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());

            }
            client.OnTerminalConnectionChanged += status =>
            {
                switch(status)
                {
                    case ConnectionStatus.Connected:
                        Console.WriteLine(
                            String.Format("Версии библиотеки {0}({1}), версии терминала {2}({3}). ",
                            AdClient.Version,
                            AdClient.ProtocolVersion,
                            AdClient.TerminalVersion,
                            AdClient.ProtocolTerminalVersion));
                        break;
                    case ConnectionStatus.Authorized:
                        Console.WriteLine("Авторизация терминала прошла успешно.");
                        break;
                    case ConnectionStatus.Disconnected:
                        Console.WriteLine("Терминал отсоединен.");
                        break;
                    case ConnectionStatus.Connecting:
                        Console.WriteLine("Ожидание подключения терминала.");
                        break;
                }
            };

            Thread.Sleep(2000);
            var connStatus = client.GetConnectionStatus(FrontEndType.AuthAndOperInitServer);
            if (connStatus != ConnectionStatus.Authorized)
            {
                Console.Write("Login=");
                var login = Console.ReadLine();
                Console.Write("Password=");
                var password = Console.ReadLine();
                client.Connect(login, password);
            }
            Console.ReadLine();
        }
    }
}

Worldmaster
Сообщения: 24
Зарегистрирован: 04 сен 2017, 13:30
Поблагодарили: 3 раза

Re: Когда же будет API для терминала.

Непрочитанное сообщение Worldmaster » 27 окт 2017, 14:12

Спасибо. Видимо ключевой момент это после инициализации пакера подождать некоторое время. Затем все работает.

А почему не работает событие OnServerMessage;

Вот подписался на событие, но событие никогда не срабатывает.
ClientConnection.OnServerMessage += ClientConnection_OnServerMessage;

piyyy
Сообщения: 97
Зарегистрирован: 15 янв 2018, 16:36
Благодарил (а): 4 раза
Поблагодарили: 8 раз

Re: Когда же будет API для терминала.

Непрочитанное сообщение piyyy » 15 янв 2018, 16:40

Кто-нибудь пробовал торговать через этот api? Есть какие-то проблемы с получением информации - свои трэйды/заявки? Заявки выставляются/снимаются стабильно?
Сам пока не могу протестировать т.к. счет к Квику привязан.


Вернуться в «Клиентский API»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя