Объяснение процесса обратного получения заявок

Страницы: 1
RSS
Объяснение процесса обратного получения заявок, Объяснение процесса обратного получения заявок
 
Добрый вечер, уважаемые эксперты!

Пишу программу на C#
Столкнулся с трудностями по выводу статуса отправленный заявки в терминал.
Как ни стараюсь не могу понять как реализовать получение статуса по заявке.
Я прочитал и понял что делается это с помощью функции TRANS2QUIK_START_ORDERS, в которую нужно передать параметр ((TRANS2QUIK_ORDER_STATUS_CALLBACK pfnOrderStatusCallback))

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


Кусок моего кода:

subscribe_orders(Code, action) // С этим все понятно , создал список инструментов по классу, по которому отправил заявки

Далее вызываю

start_orders(order_callback)

где order_callback = new TransToQuik.order_status_callback(TransToQuik.order_status_callback_impl);


И вот тут меня пропало понимание. Что происходит. Как и куда мне передавать параметры моей заявки.
Как и куда возвращается результат.

Прошу разъяснить прям на пальцах.


Если понадобится добавлю весь код. Но для начала хочу понять сам процесс!


Заранее спасибо!
 
Здравствуйте!
Тут стоит выделить все по пунктам:
1. Как Вы правильно отметили, сначала нужно создать список классов и инструментов для подписки на получение заявок по ним.
2. Необходимо создать функцию обратного вызова для получения информации о параметрах заявки TRANS2QUIK_ORDER_STATUS_CALLBACK (у Вас она называется order_status_callback_impl).
3. Вызвать функцию TRANS2QUIK_START_ORDERS в которой Вы пропишете параметр указателя на функцию обратного вызова (order_status_callback_impl) для получения информации о заявках.

Далее, передавать ничего никуда не нужно. Результат будет отображаться именно в результате вызова функции TRANS2QUIK_START_ORDERS.
QUIK clients support
 
Цитата
Alexander Kopyatkevich написал:
Здравствуйте!
Тут стоит выделить все по пунктам:
1. Как Вы правильно отметили, сначала нужно создать список классов и инструментов для подписки на получение заявок по ним.
2. Необходимо создать функцию обратного вызова для получения информации о параметрах заявки TRANS2QUIK_ORDER_STATUS_CALLBACK (у Вас она называется order_status_callback_impl).
3. Вызвать функцию TRANS2QUIK_START_ORDERS в которой Вы пропишете параметр указателя на функцию обратного вызова (order_status_callback_impl) для получения информации о заявках.

Далее, передавать ничего никуда не нужно. Результат будет отображаться именно в результате вызова функции TRANS2QUIK_START_ORDERS.
Спасибо, Александр, за ответ!
Но все же как и куда возвращается ответ( то есть статус заявки). В каком месте функции мне его увидеть и вывести.
Делать вывод в функции TRANS2QUIK_START_ORDERS?
То что выводить? какую переменную?
 
Здравствуйте, GrigoriyA.
Все параметры заявки (заявок) должны быть указаны в функции обратного вызова (order_status_callback_impl). В ней же можно задать вывод.
То есть, после вызова функции TRANS2QUIK_START_ORDERS с указателем на order_status_callback_impl и произойдет вывод данных.
Просмотреть все возможные параметры заявок можно в руководстве пользователя терминала QUIK (по нажатии клавиши F1) в разделе 6 "Импорт транзакций через API" "Функция TRANS2QUIK_ORDER_STATUS_CALLBACK".
Пример реализации так же можно найти на нашем сайте по ссылке https://arqatech.com/upload/iblock/80a/Trans2QuikAPI_1.3_x64.zip
QUIK clients support
 
Александр, прошу более подробно пояснить. У меня не запускается метод order_status_callback_impl.
Я предоставлю код ниже (реализовано на С#)

//Запускаю создание списка инструментов
_trans.subscrb_orders("","")

//Создаю экземпляр order_callback и передаю в него указатель на функция обратного вызова order_status_callback_impl
TransToQuik.order_status_callback order_callback = new TransToQuik.order_status_callback(TransToQuik.order_status_callback_impl);

//Запускаю начало получения статуса
_trans.start_ord(order_callback);


Вроде все правильно. Теперь подробнее опишу методы :

Метод order_status_callback:

   public delegate void order_status_callback(
                   Int32 nMode,
                   Int32 dwTransID,
                   Double dNumber,
                   [MarshalAs(UnmanagedType.LPStr)]string ClassCode,
                   [MarshalAs(UnmanagedType.LPStr)]string SecCode,
                   Double dPrice,
                   Int32 nBalance,
                   Double dValue,
                   Int32 nIsSell,
                   Int32 nStatus,
                   Int32 nOrderDescriptor);

           [DllImport("TRANS2QUIK.DLL", EntryPoint = "_TRANS2QUIK_START_ORDERS@4", CallingConvention = CallingConvention.StdCall)]
           static extern Int32 start_orders(
               order_status_callback pfOrderStatusCallback);
           public void start_ord(order_status_callback order_callback)
           {
              assist.writeData("Запускаем процесс получения статуса отправленных заявок", "log");
              start_orders(order_callback);
           }  



Далее Вы говорите выводить статус заявки в методе order_status_callback_impl


Вот этот метод:

public static void order_status_callback_impl(
      Int32 nMode, Int32 dwTransID, Double dNumber, string ClassCode, string SecCode,
      Double dPrice, Int32 nBalance, Double dValue, Int32 nIsSell, Int32 nStatus, Int32 nOrderDescriptor)
   {

       assistStatic.writeData("OLOLOL в колбэке", "log");

       String mainString = "Mode=" + nMode + " TransId=" + dwTransID + " Num=" + dNumber +
            " Class=" + ClassCode + " Sec=" + SecCode + " Price=" + dPrice +
            " Balance=" + nBalance + " Value=" + dValue + " IsSell=" + nIsSell + " Status=" + nStatus;
       String addString = "";
       String strString = "";

       addString = " Qty=" + TRANS2QUIK_ORDER_QTY(nOrderDescriptor) +
           " Date=" + TRANS2QUIK_ORDER_DATE(nOrderDescriptor) +
           " Time=" + TRANS2QUIK_ORDER_TIME(nOrderDescriptor) +
           " TimeMicroSec=" + TRANS2QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_MICROSEC) +
           " ActTime=" + TRANS2QUIK_ORDER_ACTIVATION_TIME(nOrderDescriptor) +
           " WDDate=" + TRANS2QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_WITHDRAW_QUIKDATE) +
           " WDTime=" + TRANS2QUIK_ORDER_WITHDRAW_TIME(nOrderDescriptor) +
           " WDTimeMicrosec=" + TRANS2QUIK_ORDER_DATE_TIME(nOrderDescriptor, ORDER_WITHDRAW_MICROSEC) +
           " Expiry=" + TRANS2QUIK_ORDER_EXPIRY(nOrderDescriptor) +
           " Accruedint=" + TRANS2QUIK_ORDER_ACCRUED_INT(nOrderDescriptor) +
           " Yield=" + TRANS2QUIK_ORDER_YIELD(nOrderDescriptor) +
           " UID=" + TRANS2QUIK_ORDER_UID(nOrderDescriptor) +
           " VisibleQty=" + TRANS2QUIK_ORDER_VISIBLE_QTY(nOrderDescriptor) +
           " Period=" + TRANS2QUIK_ORDER_PERIOD(nOrderDescriptor) +
           " OrderFileTime=" + DateTimeStr(TRANS2QUIK_ORDER_FILETIME(nOrderDescriptor)) +
           " WithdrawFileTime=" + DateTimeStr(TRANS2QUIK_ORDER_WITHDRAW_FILETIME(nOrderDescriptor));

       try
       {
           assistStatic.writeData("OLOLOL в колбэке", "log");
           strString = ""
                 + " USERID=" + TRANS2QUIK_ORDER_USERID(nOrderDescriptor)
                 + " Account=" + TRANS2QUIK_ORDER_ACCOUNT(nOrderDescriptor)
                 + " Brokerref=" + TRANS2QUIK_ORDER_BROKERREF(nOrderDescriptor)
                 + " ClientCode=" + TRANS2QUIK_ORDER_CLIENT_CODE(nOrderDescriptor)
                 + " Firmid=" + TRANS2QUIK_ORDER_FIRMID(nOrderDescriptor)
               ;
       }
       catch (AccessViolationException e)
       {
            assistStatic.writeData(e.ToString(), "log");
            assistStatic.writeData("OLOLOL в колбэке", "log");
       }

       try
       {
           assistStatic.writeData("OLOLOL в колбэке", "log");
           var mes = mainString + addString + strString;
           assistStatic.writeData("ORDER_CALLBACK: " + mes, "log");

           //Первоначальная заявка или нет
           assistStatic.writeData("/n" + "Признак того, идет ли начальное получение заявок или нет:" + "/n", "log");
           if (nMode == 0){
               assistStatic.writeData("/n" + "Новая заявка" + "/n", "log");
           }
           else if (nMode == 1){
                 assistStatic.writeData("/n" + "Идет начальное получение заявок" + "/n", "log");
           }
           else if (nMode == 2){
                 assistStatic.writeData("/n" + "Получена последняя заявка из начальной рассылки" + "/n", "log");
           }

           //Статус заявки
           assistStatic.writeData("/n" + "Состояние исполнения заявки:" + "/n", "log");
           if (nStatus == 1)
           {
               assistStatic.writeData("/n" + "Активна" + "/n", "log");
           }
           else if (nStatus == 2)
           {
               assistStatic.writeData("/n" + "Снята" + "/n", "log");
           }
           else
           {
               assistStatic.writeData("/n" + "Исполнена" + "/n", "log");
           }

             
       }
       catch (System.Exception e)
       {
           assistStatic.writeData(e.Message, "log");
           assistStatic.writeData("OLOLOL в колбэке", "log");
       }
       //return nStatus;
   }

и у меня ничего не выводится.
Подскажите, пожалуйста, что я не так делаю
                   
 
GrigoriyA,

1) В начале вызывается TRANS2QUIK_SUBSCRIBE_ORDERS в котором Вы указываете Код класса, для которого будут заказаны заявки и Список кодов инструментов
2) Потом вызываете TRANS2QUIK_START_ORDERS в котором Вы указываете имя функции которая будет срабатывать при получении заявок, описание функции см. в TRANS2QUIK_ORDER_STATUS_CALLBACK
3) И далее смотреть что приедет в этой функции из п.2

Судя по приведенным частям кода все описанное есть.

Если заявок нет, то и в колбеке Вы ничего не увидите.
Следовательно вопрос, заявки есть? откройте в терминале QUIK таблицу заявок и посмотрите.
Если есть, значит в коде что то выполнено не верно.
на нашем примере из "SAMPLE_C#\test_x64.exe" проблема не воспроизводится. Проверьте поступление заявок на нем.
 
ну вот я транзакции вижу , а заявки нет
 
Цитата
GrigoriyA написал:
ну вот я транзакции вижу , а заявки нет

и что Вы видите в транзакциях? А если точнее, то в колонке "Сообщение" таблицы транзакций?
Страницы: 1
Читают тему (гостей: 1)
Наверх