Использование дескрипторов сделки и заявки вне CALLBACK функций
Пользователь
Сообщений: Регистрация: 03.08.2016
26.05.2017 11:24:10
Через дескрипторы сделки и заявки внутри CALLBACK функций вызывается много дополнительных процедур. Можно ли вызывать эти процедуры вне CALLBACK функции, имея только сохранённый дескриптор из CALLBACK функции.
Если Да, то как долго он действует. Ведь у него ограничение Long.
Пользователь
Сообщений: Регистрация: 23.01.2015
26.05.2017 11:50:10
Здравствуйте, Согласно документации:
Цитата
Дескриптор сделки, может использоваться для следующих специальных функций в функции обратного вызова:
Пользователь
Сообщений: Регистрация: 03.08.2016
26.05.2017 12:09:55
Это я прочитал. Поэтому и задал вопрос о сохранении дескриптора и дальнейшем использовании. Является ли переменная дескриптора глобальным идентификатором или только локальным?
И какая есть возможность прямого вызова этих внутренних функций из DLL, перечисленных внутри CALLBACK? (В списке экспортируемых многие из них есть).
Объясню. На момент компиляции CALLBACK функции, я не знаю, какие специальные функции мне понадобится потом вызывать. А вызывать все подряд, чтобы только было - ресурсозатратно.
Пользователь
Сообщений: Регистрация: 23.01.2015
26.05.2017 13:13:49
Олег, Как уже было сказано указанные функции предназначены только для вызова внутри колбека. От того как Вы переставите слова в вопросе, ответ не поменяется.
Цитата
Олег написал: На момент компиляции CALLBACK функции, я не знаю, какие специальные функции мне понадобится потом вызывать.
Сделайте внутри колбека несколько разных функций, которые будут срабатывать по условию, каждая со своими спец функциями. Не видим проблем в этом.
Пользователь
Сообщений: Регистрация: 03.08.2016
26.05.2017 15:06:37
Да будет так... (это к вышесказанному).
Где можно посмотреть описание формата значений возврата этих специальных функций типа Long из САLLBACKов?
long __stdcall TRANS2QUIK_ORDER_DATE (intptr_t nOrderDescriptor) – возвращает дату заявки;
long __stdcall TRANS2QUIK_ORDER_TIME (intptr_t nOrderDescriptor) – возвращает время заявки;
long __stdcall TRANS2QUIK_ORDER_ACTIVATION_TIME (intptr_t nOrderDescriptor) – возвращает время активации заявки;
long __stdcall TRANS2QUIK_ORDER_WITHDRAW_TIME (intptr_t nOrderDescriptor) – возвращает время снятия заявки; (в API_Tester_DLG.exe возвращает 0 при снятии заявки вручную)
long __stdcall TRANS2QUIK_ORDER_EXPIRY (intptr_t nOrderDescriptor) – возвращает дату окончания срока действия заявки;(в API_Tester_DLG.exe возвращает -1)
(в API_Tester_DLG.exe возвращает 0 также WDDate, WDTimeMicrosec). Соответствующие им функции подключены в DLL?
long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки;
long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Каковы максимальные значения для: long nExtendedErrorCode
long __stdcall TRANS2QUIK_ORDER_UID (intptr_t nOrderDescriptor) – возвращает UserID пользователя, указанный в заявке;
Я, конечно, понимаю, что Long - это 2 147 483 647. А реально MAX?
Почему нужна информация о макс. значениях.
В Амиброкере используется single Float, а это гарантированно только 6 значащих цифр. Поэтому смотрю, что можно запихнуть в этот формат напрямую без дополнительных ухищрений.
Пользователь
Сообщений: Регистрация: 03.08.2016
29.05.2017 18:58:18
Обладает ли QUIK clients support информацией для ответа на поставленные выше вопросы?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
31.05.2017 09:12:43
Добрый день,
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_DATE (intptr_t nOrderDescriptor) – возвращает дату заявки;
Формат соответствует формату: yyyymmdd
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_TIME (intptr_t nOrderDescriptor) – возвращает время заявки;
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_ACTIVATION_TIME (intptr_t nOrderDescriptor) – возвращает время активации заявки;
Формат соответствует формату: hhmmss
Относительно:
Цитата
Олег написал: long __stdcall TRANS2QUIK_ORDER_WITHDRAW_TIME (intptr_t nOrderDescriptor) – возвращает время снятия заявки; (в API_Tester_DLG.exe возвращает 0 при снятии заявки вручную) long __stdcall TRANS2QUIK_ORDER_EXPIRY (intptr_t nOrderDescriptor) – возвращает дату окончания срока действия заявки;(в API_Tester_DLG.exe возвращает -1) (в API_Tester_DLG.exe возвращает 0 также WDDate, WDTimeMicrosec). Соответствующие им функции подключены в DLL?
Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Цитата
Олег написал: Каковы максимальные значения для: long nExtendedErrorCode
Максимальное значение равно 1023.
Цитата
Олег написал: Я, конечно, понимаю, что Long - это 2 147 483 647. А реально MAX?
В данном случае максимальное значение равно 2147483647.
Пользователь
Сообщений: Регистрация: 03.08.2016
31.05.2017 14:05:18
Спасибо, Ваш юмор про long оценил. Смешно!
Буду стараться писать подробнее.
Вопрос по МАХ был, конечно, про long, возвращаемый функциями.
Каково максимальное значения для: long __stdcall TRANS2QUIK_ORDER_UID (intptr_t nOrderDescriptor) – возвращает UserID пользователя, указанный в заявке;
Каков формат возвращаемых значений для функций:
long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки;
long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
QUIK clients support
Сообщений: Регистрация: 27.01.2015
01.06.2017 08:56:38
Добрый день,
Цитата
Олег написал: Каково максимальное значения для: long __stdcall TRANS2QUIK_ORDER_UID (intptr_t nOrderDescriptor) – возвращает UserID пользователя, указанный в заявке;
UID пользователя, это номер пользователя в базе данных сервера брокера, максимум будет таким, какой поместится в БД. Формально максимум ограничен размером long.
Цитата
Олег написал: Каков формат возвращаемых значений для функций: long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки; long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Цитата
Олег написал: long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
В данном конкретном случае, никакой разницы нет.
Пользователь
Сообщений: Регистрация: 03.08.2016
02.06.2017 11:28:27
В руководстве пользователя функция void __stdcall TRANS2QUIK_TRANSACTION_REPLY_CALLBACK(long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, insigned__int64 dOrderNum, LPSTR lpstrTransactionReplyMessage, intptr_t transReplyDescriptor) последним параметром имеет дескриптор.
В примерах для API_Tester_DLG.exe и в прототипе функции typedef void (__stdcall *TRANS2QUIK_TRANSACTION_REPLY_CALLBACK) (long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, double dOrderNum, LPCSTR lpcstrTransactionReplyMessage); из trans2quik_api.h параметр дескриптора отсутствует.
Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Цитата
Цитата
написал: Каков формат возвращаемых значений для функций: long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки; long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Так что означают конкретные флаги (0 или 1) в этом двоичном коде для обоих функций?
Цитата
Цитата
написал: long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
В данном конкретном случае, никакой разницы нет.
Соответствуют ли возвращаемые значения пункту 6.12.3 ( Константы) из руководства пользователя?
QUIK clients support
Сообщений: Регистрация: 27.01.2015
05.06.2017 16:23:33
Добрый день,
Цитата
Олег написал: В руководстве пользователя функция void __stdcall TRANS2QUIK_TRANSACTION_REPLY_CALLBACK(long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, insigned__int64 dOrderNum, LPSTR lpstrTransactionReplyMessage, intptr_t transReplyDescriptor) последним параметром имеет дескриптор.
В примерах для API_Tester_DLG.exe и в прототипе функции typedef void (__stdcall *TRANS2QUIK_TRANSACTION_REPLY_CALLBACK) (long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, double dOrderNum, LPCSTR lpcstrTransactionReplyMessage); из trans2quik_api.h параметр дескриптора отсутствует.
Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Как можем видеть, в файле trans2quik_api.h полученном по ссылке:
Документация будет приведена в соответствие в одной из очередных версий. Приносим извинения за причиненные неудобства.
Пользователь
Сообщений: Регистрация: 03.08.2016
08.06.2017 19:09:02
Цитата
Как можем видеть, в файле trans2quik_api.h полученном по ссылке: он есть:Код, TransactionReplyDescriptor transReplyDescriptor);
Это для х64. У меня Win7 x32, поэтому пользуюсь . А там дескриптор отсутствует. Описание функций было взято оттуда.
Возможно там правильно работают и вышеназванные функции: long __stdcall TRANS2QUIK_ORDER_WITHDRAW_TIME (intptr_t nOrderDescriptor) – возвращает время снятия заявки; (в API_Tester_DLG.exe возвращает 0 при снятии заявки вручную) long __stdcall TRANS2QUIK_ORDER_EXPIRY (intptr_t nOrderDescriptor) – возвращает дату окончания срока действия заявки;(в API_Tester_DLG.exe возвращает -1) (в API_Tester_DLG.exe возвращает 0 также WDDate, WDTimeMicrosec).
Мы не смогли повторить ситуацию, когда функция TRANS2QUIK_ORDER_WITHDRAW_TIME всегда возвращает 0 для снятых заявок. Что касается функции TRANS2QUIK_ORDER_EXPIRY, то результат ее выполнения следует трактовать следующим образом: 0 - это заявка до отмены(в таблице заявок в поле "Срок" отображается "До отмены"), -1 - это заявка текущей сессии(в таблице заявок в поле "Срок" пусто) иначе это дата в формате YYYYMMDD до которой заявка активна.
Приносим извинения за причиненные неудобства.
Пользователь
Сообщений: Регистрация: 29.12.2018
25.03.2019 15:10:54
Цитата
Олег написал: В руководстве пользователя функция void __stdcall TRANS2QUIK_TRANSACTION_REPLY_CALLBACK(long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, insigned__int64 dOrderNum, LPSTR lpstrTransactionReplyMessage, intptr_t transReplyDescriptor) последним параметром имеет дескриптор.
В примерах для API_Tester_DLG.exe и в прототипе функции typedef void (__stdcall *TRANS2QUIK_TRANSACTION_REPLY_CALLBACK) (long nTransactionResult, long nTransactionExtendedErrorCode, long nTransactionReplyCode, DWORD dwTransId, double dOrderNum, LPCSTR lpcstrTransactionReplyMessage); из trans2quik_api.h параметр дескриптора отсутствует.
Как получить этот дескриптор для доступа к вызову специальных функций в теле функции обратного вызова?
Цитата
Цитата
написал: Каков формат возвращаемых значений для функций: long __stdcall TRANS2QUIK_ORDER_EXTENDED_FLAGS (intptr_t nOrderDescriptor) – возвращает расширенные флаги заявки; long __stdcall TRANS2QUIK_ORDER_EXEC_TYPE (intptr_t nOrderDescriptor) – возвращает тип исполнения заявки; «0» – значение не задано;
Функции возвращают обычное десятичное число, которое если преобразовать в двоичный вид, каждое число (0 или 1) которого будет что-то означать. Из максимального long значимы только первые 1023, остальные, если и есть, означают служебную информацию.
Так что означают конкретные флаги (0 или 1) в этом двоичном коде для обоих функций?
Цитата
Цитата
написал: long TRANS2QUIK_API __stdcall TRANS2QUIK_START_TRADES(TRANS2QUIK_TRADE_STATUS_CALLBACK pfnTradeStatusCallback); (для этой функции в описании написано void, а в примере long)
В данном конкретном случае, никакой разницы нет.
Соответствуют ли возвращаемые значения пункту 6.12.3 ( Константы) из руководства пользователя?
Здравствуйте. Описанная в данном инциденте ошибка была исправлена в версии 7.27.2 терминала QUIK. Приносим извинения за причиненные неудобства.