callback OnTransReply
QApplication opened this issue · 9 comments
Добрый день.
При работе с callback OnTransReply возникли следующие проблемы:
- в таблице qlua::table::trans_reply файла standalone.hpp отсутсвуют следующие поля
// add from QLUA.chm QUIK v7.19.0.51
LUACPP_TABLE_FIELD(error_code, int) // Числовой код ошибки. Значение равно «0», если транзакция выполнена успешно
LUACPP_TABLE_FIELD(error_source, unsigned int) // Источник сообщения. Возможные значения: «1» – Торговая система; «2» – Сервер QUIK; «3» – Библиотека расчёта лимитов; «4» – Шлюз торговой системы
LUACPP_TABLE_FIELD(first_ordernum, double) // Номер первой заявки, которая выставлялась при автоматической замене кода клиента. Используется, если на сервере QUIK настроена замена кода клиента для кросс-сделки
LUACPP_TABLE_FIELD(gate_reply_time, ::qlua::table::datetime) // Дата и время получения шлюзом ответа на транзакцию
- отсутствует возможность представить поле
LUACPP_TABLE_FIELD(price, double ) // Цена *
через optional. Все возможные nil поля просьба заменить через optional
LUACPP_TABLE_FIELD(order_num, std::optional<unsigned int>) // Номер заявки *
LUACPP_TABLE_FIELD(price, double ) // Цена * - error type policy
LUACPP_TABLE_FIELD(quantity, std::optional<unsigned int>) // Количество *
LUACPP_TABLE_FIELD(balance, std::optional<unsigned int>) // Остаток *
LUACPP_TABLE_FIELD(firm_id, std::optional<std::string>) // Идентификатор фирмы *
LUACPP_TABLE_FIELD(account, std::optional<std::string>) // Торговый счет *
LUACPP_TABLE_FIELD(client_code, std::optional<std::string>) // Код клиента *
LUACPP_TABLE_FIELD(brokerref, std::optional<std::string>) // Поручение *
LUACPP_TABLE_FIELD(class_code, std::optional<std::string>) // Код класса *
LUACPP_TABLE_FIELD(sec_code, std::optional<std::string>) // Код бумаги *
LUACPP_TABLE_FIELD(exchange_code, std::optional<std::string>) // Биржевой номер заявки *
- В полях с датой и временем
LUACPP_TABLE_FIELD(date_time, ::qlua::table::datetime) // Дата и время
LUACPP_TABLE_FIELD(gate_reply_time, ::qlua::table::datetime) // Дата и время получения шлюзом ответа на транзакцию
не возможно достучаться до значений.
При этом, если в callback написать так
::qlua::table::datetime date_time = trans_reply().date_time();
::qlua::table::datetime gate_reply_time= trans_reply().gate_reply_time();
quik не падает. Однако если попробовать обратиться к значениям
int year = trans_reply().date_time().year();
quik падает и try catch не помогает выявить ошибку.
Пробовал даже так на случай если там nil
std::optional<qlua::table::datetime> date_time= trans_reply().date_time();
Возможно необходимо сделать со временем как в callback OnAllTrade.
Добрый день.
При обращении к полю ::qlua::table::datetime
callback OnTransReply
LUACPP_TABLE_FIELD(date_time, ::qlua::table::datetime) // Дата и время
появляется
EXCEPTION: Luacpp entity get: typecheck failed (Lua type at stack index -1 is nil; content as string: <Oops, got null from Lua when tried to get actual content as string>)
Добрый день.
При обращении к полю ::lua::entity<detail::datetime_type_policy> gate_reply_time{s_, idx_}; // Дата и время получения шлюзом ответа на транзакцию
появляется
Exception thrown at 0x00007FFFF2B1A388 in info.exe: Microsoft C++ exception: std::runtime_error at memory location 0x0000000F705F9A58. EXCEPTION: alltrade table does not have datetime table member
оба поля с датами находятся в файле standalone.hpp
Для проверки использую не тестовую версию QUIKа: при запущенном плагине достаточно отключиться от сервера и подключиться заново, при этом срабатывают некоторые колбеки, в том числе и OnTransReply(args...)
Добавил в политику субтаблиц с датой/временем параметр имени в 88be8a8
Проверить, исправило ли эту ошибку пока не могу.
На поле date_time
продолжает кидаться исключение
Luacpp entity get: typecheck failed (Lua type at stack index -1 is nil; content as string: <Oops, got null from Lua when tried to get actual content as string>)
На поле gate_reply_time
исключение НЕ кидается.
Для проверки использую не тестовую версию QUIKа: при запущенном плагине достаточно отключиться от сервера и подключиться заново, при этом срабатывают некоторые колбеки, в том числе и OnTransReply(args...)
На Quik 8.1 демо не наблюдаю такого поведения
На поле
date_time
продолжает кидаться исключение
Luacpp entity get: typecheck failed (Lua type at stack index -1 is nil; content as string: <Oops, got null from Lua when tried to get actual content as string>)
На полеgate_reply_time
исключение НЕ кидается.
Исправил в b5c8f31, проверьте
На Quik 8.1 демо не наблюдаю такого поведения
Я тоже был удивлен и qiuk-разработчики не знают ответа
работает отлично, можно закрывать issue