Воспроизвести описанное поведение у себя не удалось. Просим Вас сделать копию Рабочего места QUIK (без файлов pubring.txk, secring.txk, если используется аутентификация по ключам), в котором наблюдается данный эффект. Вы можете загрузить архив терминала на любой удобный Вам файлообменный сервис и отправить ссылку на файл на нашу почту quiksupport@arqatech.com .
Подскажите я правильно понял, что нужно просто за архивировать всю папку Quik без указанных файлов и выслать ссылку на архив на указную почту ?
nikolz написал: пардон, поправлю, интенсивно создаете объекты или расширяете таблицы, но не уничтожаете не нужные объекты
Так и не смог найти причину, так как ошибка плавающая. Переписал код по другому - ошибка исезла. Все таки гарантировано, что это проблема в Квике не могу на данный момент сказать.
Mike Orbita написал: Бестолочь ты не образованная. Мамба - это Московская биржа, если ты кодишь для Квика такие вещи знать нужно.
Лапуль, если у тебя месячные, возьми у своей Мамы прокладки и используй по назначению, больше ты не на что не способна. Ну и пусть тебе твой папаша еще говнецом мордочку твою умоет.
Mike Orbita написал: Слушай, ОКОЛОрыночник, я Мамбу шатаю более 15 лет и своими руками написал не один десяток высокочастотных алгоритмов, и тут какая-то бездарная личность из ПТУ, которая не может даже обычный парсер котировок из Квика закодить будет мне пальцем тыкать - иди сначала БЭЙСИК подучи, невежда.
Тебе в детстве кто-то говорил, что ты прохрамист и ты в это поверил ? Шатай и дальше свою маму, папашу видимо шатать силенок не хватает. Иди и дальше тыкай пальцем - это все на что ты способен.
Мы продолжаем изучение вопроса по Вашему обращению. Как только работы будут завершены, мы отправим Вам соответствующее уведомление. Приносим извинения за задержку и доставленные неудобства.
А можете обозначить хотя бы приблизительное сроки ? А то на форуме не мало подобных сообщения по типу "проблема изучается. Постараемся в ближайшее время дать ответ." - которые висят годами без ответа. :(
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через CreateDataSource:SetUpdateCallback():
Запускаю Квик: -Загружаю скрипт. -Запускаю скрипт. -Скрипт вызывает CreateDataSource. -CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек. -Колбек больше НИКОГДА не вызывается ... проверка размера таблицы в цикле - так же не дает результата, а точнее размер таблицы всегда нулевой - хоть крути цикл минуту, хоть 10 минут.
Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.
Вот простейший скрипт подтверждающий это поведение:
Код
Версия Квика 9.7.1.10
function my_callback_CreateDataSource(my_table_data_, code_class_, code_paper_)
message(code_paper_) //В первый запуск скрипта - НИКОГДА не вызывается.
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1 = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2 = INTERVAL_TICK
----------------------------------------------------------------------Вызов CreateDataSource_1------------------------------------------------------------------------------
local my_table1, error_desc1 = CreateDataSource(code_class1, code_paper1, interval1) --Вызываем собственно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc1 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table1.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table1.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------Вызов CreateDataSource_2------------------------------------------------------------------------------
local my_table2, error_desc2 = CreateDataSource(code_class2, code_paper2, interval2) --Вызываем собсвенно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc2 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table2.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table2.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
my_table1:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data1, code_class1, code_paper1) end)
my_table2:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data2, code_class2, code_paper2) end)
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через CreateDataSource:SetUpdateCallback():
Запускаю Квик: -Загружаю скрипт. -Запускаю скрипт. -Скрипт вызывает CreateDataSource. -CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек. -Колбек больше НИКОГДА не вызывается ... проверка размера таблицы в цикле - так же не дает результата, а точнее размер таблицы всегда нулевой - хоть крути цикл минуту, хоть 10 минут.
Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.
Вот простейший скрипт подтверждающий это поведение:
Версия Квика 9.7.1.10
Код
function my_callback_CreateDataSource(my_table_data_, code_class_, code_paper_)
message(code_paper_) //В первый запуск скрипта - НИКОГДА не вызывается.
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1 = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2 = INTERVAL_TICK
----------------------------------------------------------------------Вызов CreateDataSource_1------------------------------------------------------------------------------
local my_table1, error_desc1 = CreateDataSource(code_class1, code_paper1, interval1) --Вызываем собственно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc1 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table1.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table1.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------Вызов CreateDataSource_2------------------------------------------------------------------------------
local my_table2, error_desc2 = CreateDataSource(code_class2, code_paper2, interval2) --Вызываем собсвенно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc2 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table2.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table2.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
my_table1:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data1, code_class1, code_paper1) end)
my_table2:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data2, code_class2, code_paper2) end)
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через CreateDataSource:SetUpdateCallback():
Запускаю Квик: -Загружаю скрипт. -Запускаю скрипт. -Скрипт вызывает CreateDataSource. -CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек. -Колбек больше НИКОГДА не вызывается ... проверка размера таблицы в цикле - так же не дает результата, а точнее размер таблицы всегда нулевой - хоть крути цикл минуту, хоть 10 минут.
Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.
Вот простейший скрипт подтверждающий это поведение:
Код
function my_callback_CreateDataSource(my_table_data_, code_class_, code_paper_)
message(code_paper_) //В первый запуск скрипта - НИКОГДА не вызывается.
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1 = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2 = INTERVAL_TICK
----------------------------------------------------------------------Вызов CreateDataSource_1------------------------------------------------------------------------------
local my_table1, error_desc1 = CreateDataSource(code_class1, code_paper1, interval1) --Вызываем собственно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc1 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table1.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table1.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------Вызов CreateDataSource_2------------------------------------------------------------------------------
local my_table2, error_desc2 = CreateDataSource(code_class2, code_paper2, interval2) --Вызываем собсвенно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc2 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table2.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table2.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
my_table1:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data1, code_class1, code_paper1) end)
my_table2:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data2, code_class2, code_paper2) end)
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через CreateDataSource:SetUpdateCallback():
Запускаю Квик: -Загружаю скрипт. -Запускаю скрипт. -Скрипт вызывает CreateDataSource. -CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек. -Колбек больше НИКОГДА не вызывается ... проверка размера таблицы в цикле - так же не дает результата, а точнее размер таблицы всегда нулевой - хоть крути цикл минуту, хоть 10 минут.
Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.
Вот простейший скрипт подтверждающий это поведение:
Код
function my_callback_CreateDataSource(my_table_data_, code_class_, code_paper_)
message(code_paper_) //В первый запуск скрипта - НИКОГДА не вызывается.
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
local code_class1 = "TQBR"
local code_paper1 = "GAZP"
local interval1 = INTERVAL_TICK
local code_class2 = "TQBR"
local code_paper2 = "SBER"
local interval2 = INTERVAL_TICK
----------------------------------------------------------------------Вызов CreateDataSource_1------------------------------------------------------------------------------
local my_table1, error_desc1 = CreateDataSource(code_class1, code_paper1, interval1) --Вызываем собственно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc1 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table1.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table1.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------Вызов CreateDataSource_2------------------------------------------------------------------------------
local my_table2, error_desc2 = CreateDataSource(code_class2, code_paper2, interval2) --Вызываем собсвенно CreateDataSource
------------------------Проверка на ошибки:-------------------
if error_desc2 ~= nil then
message("Error")
end
--------------------------------------------------------------
message(tostring(my_table2.Size())) //В первый запуск скрипта - размер табилцы ВСЕГДА нулевой - сколько бы времени не ожидал.
if my_table2.Size() == 0 then
message("data requested from the server")
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
my_table1:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data1, code_class1, code_paper1) end)
my_table2:SetUpdateCallback(function(idx)my_callback_CreateDataSource(my_table_data2, code_class2, code_paper2) end)
nikolz написал: покажите где КВИК в скрипте, который написали Вы, загрузил вашу dll
Вот полный скрипт в Квике:
Код
function OnQuote(class, sec)
end
function main()
Quik_Lua_connector = require("Quik_Lua_connector ")
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end -- end main()
nikolz написал: Так Вы просто сделали функцию OnQuote но ваша dll вообще здесь не причем. -------------------------- Вы dll сделали правильно (если выкинуть лишнее, из того что Вам написали) Но Вы не объявили Вашу функцию колбеком. -----------------------
Как вариант,вы можете вызвать вашу функцию внутри например так:
Код
--здесь загрузите вашу dll
function OnQuote (class, sec)
---- здесь вызов вашей функции из вашей dll
end
Не понимаю, что значит я просто обьявил функцию, но не сделал ее колбеком ? Я обявил Сишную функцию и связал ее с именем реальной глобальной квиковской функции - OnQuote.
Что значит не сделал ее колбеком ? И что такое " ---- здесь вызов вашей функции из вашей dll". Функция OnQuote вызывается не мной - а самим Квиком.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Проблема в том что Вы неправильно ее описываете в dll. Ваша DLL - это таблица которая размещается в глобальном стеке, а колбек - это функция которая размещается в глобальном стеке Когда Вы присвоите функции вашу функцию тогда и вызывается.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Проблема в том что Вы неправильно ее описываете в dll. Ваша DLL - это таблица которая размещается в глобальном стеке, а колбек - это функция которая размещается в глобальном стеке Когда Вы присвоите функции вашу функцию тогда и вызывается.
Quikos написал: Хмммм, в моем случае - начинает работать когда я объявляю callback-функцию в самом скрипте, без этого в dll - не вызывается.
надо с самой dll разбираться...
Я даже не знаю, что там еще можно разобрать. В Luaopen - я добавил функцию на стек, определил ее, как глобальную "OnQuote". Не вызывается. Как только добавляю в Lua скрипт эти две строчки - то начинает вызываться. Ну и хорошо, что мне еще нужно :)
Даниил Волошин написал: Данная информация не является устаревшей, так как действительно данный параметр обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS». Если Вы желаете, чтобы в описании параметра ACCOUNT также было сказано о том, что при вводе заявки указание данного параметра (торгового счёта) является обязательным , ты мы можем зарегистрировать пожелание.
Ну Вы могли бы согласится, что это было бы логично ?
А то написано, что ACCOUNT обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS», но когда я ставлю «ACTION» = "NEW ORDER" или "KILL ORDER" - ACCOUNT - все равно оказывается Обязательным.
Разве для поддержания документации в Корректном Актуальном состоянии - Вам нужно регистрировать мое пожелание ?
Даниил Волошин написал: ACCOUNT Номер счета Трейдера. Параметр обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS». Параметр чувствителен к верхнему/нижнему регистру символов
Это устаревшая информация:
Цитата
ACCOUNT Номер счета Трейдера. Параметр обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS». Параметр чувствителен к верхнему/нижнему регистру символо
Подскажите почему sendTransaction - не хочет работать.
Вызываю sendTransaction:
Во простой скрипт:
Код
function OnTransReply(Table_)
message(tostring(Table_.trans_id) .. ":" .. tostring(Table_.status) .. ":" .. tostring(Table_.result_msg) .. ":" .. tostring(Table_.client_code))
end
function main()
transaction_table =
{
CLIENT_CODE="XXXXX",
TYPE="M",
TRANS_ID="7",
CLASSCODE="TQBR",
SECCODE="GAZP",
ACTION="NEW_ORDER",
OPERATION="B",
PRICE="0",
QUANTITY="1"
}
local result = sendTransaction(transaction)
//Проверяю на ошибку:
if result ~= nil then
if res ~= "" then
message("Error:"..result )
end
end
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end
sendTransaction - Завершается ошибкой: "Не указано значение поля "Торговый счет" Что за торговый счет такой ? И почему он требуется ? В ОПИСАНИИ обязательных параметрах sendTransaction - ОТСУТСТВУЕТ значение "торговый счет" для фондового рынка.
Роман написал: Если кому нужно переходите по ссылке getParamEx список параметров берите параметры getParamEx К сожалению параметра с "Дата закрытия реестра" там нет. Если у кого есть скиньте плиз.
Роман написал: Вопрос актуален. Требуется програмно получить дату закрытия реестра по акциям из таблицы "Текущие торги" колонка "Дата з.р." (дата закрытия реестра). Подскажите плиз как это сделать.
Вот так можно сделать:
Код
function main()
Class_name = "TQBR"
paper_name = "SBER"
-------------------------
while not stopped do
my_table = getParamEx2 (Class_name, paper_name , "VALUE") //Только за место "VALUE" нужно указать параметр отвечающий за "дату закрытия реестра"
message(tostring(my_table.param_value))
sleep(1000)
end
-------------------------
end
А параметры для функции getParamEx2 - видимо по умозаключению сутулых собак, нужно искать хрен знает где.
Даниил Волошин написал: sendTransaction - Завершается ошибкой: "Не указано значение поля "Торговый счет"Что за торговый счет такой ? Где его найти ? И почему он требуется ?
А по вопросу почему sendTransaction требует какой то торговый счет подскажите ? В обязательных параметрах sendTransaction - я не нашел "торгового счета" для фондового рынка.
В обязательных параметрах sendTransaction имеется такой параметр как ACCOUNT, который является торговым счётом и который вы не указали. Торговый счет – раздел учета в биржевой торговой системе, в котором отображаются средства участника торгов, зарезервированные для совершения сделок на бирже. Торговый счёт указывается при вводе заявки. Посмотреть данный счет Вы можете в терминале в таблице "Позиции по инструментам" в столбце "Счет депо".
Спасибо, это получается устаревшая информация:
Код
ACCOUNT Номер счета Трейдера. Параметр обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS». Параметр чувствителен к верхнему/нижнему регистру символов
В качестве параметра принимает таблицу, в которой имена и значения полей соответствуют параметрам tri-файла, описанным в Руководстве пользователя QUIK, Раздел 6 «Совместная работа с другими приложениями» / «Формат .tri-файла с параметрами транзакций».
А где этот Раздел номер 6 ? В присланном Вами руководстве QLUA - я не нахожу такого раздела.
В обязательных параметрах sendTransaction имеется такой параметр как ACCOUNT, который является торговым счётом и который вы не указали. Торговый счет – раздел учета в биржевой торговой системе, в котором отображаются средства участника торгов, зарезервированные для совершения сделок на бирже. Торговый счёт указывается при вводе заявки. Посмотреть данный счет Вы можете в терминале в таблице "Позиции по инструментам" в столбце "Счет депо".
Спасибо, это получается устаревшая информация:
Код
ACCOUNT Номер счета Трейдера. Параметр обязателен при «ACTION» = «KILL_ALL_FUTURES_ORDERS». Параметр чувствителен к верхнему/нижнему регистру символов
Подскажите почему sendTransaction - не хочет работать.
Вызываю sendTransaction:
Во простой скрипт:
Код
function OnTransReply(Table_)
message(tostring(Table_.trans_id) .. ":" .. tostring(Table_.status) .. ":" .. tostring(Table_.result_msg) .. ":" .. tostring(Table_.client_code))
end
function main()
transaction_table =
{
CLIENT_CODE="XXXXX",
TYPE="M",
TRANS_ID="7",
CLASSCODE="TQBR",
SECCODE="GAZP",
ACTION="NEW_ORDER",
OPERATION="B",
PRICE="0",
QUANTITY="1"
}
local result = sendTransaction(transaction)
//Проверяю на ошибку:
if result ~= nil then
if res ~= "" then
message("Error:"..result )
end
end
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end
sendTransaction - Завершается ошибкой: "Не указано значение поля "Торговый счет"
Что за торговый счет такой ? Где его найти ? И почему он требуется ? В обязательных параметрах sendTransaction - я не нашел "торгового счета" для фондового рынка.
Подскажите, есть к примеру callback`и - OnQuote, OnAllTrade - которые вызываются самим Квиком.
Я пытаюсь их объявить Lua C api:
Код
static int global_callback__OnQuote(lua_State* L)
{
std::cout << "global_callback__OnQuote" << std::endl;
return 0;
}
int main()
{
lua_pushcfunction(L, global_callback__OnQuote); //Помещаю Си-шную функцию в стек.
lua_setglobal(L, "OnQuote"); //Присваиваю ей глобальное имя.
}
Вроде бы должно работать, но функция не вызывается. Получение стаканов предварительно естественно заказана, да и в самом квике открыты, да и обычный Lua-скрипт с OnQuote - тоже работает. Но из dll-ки не хочет почему то.
Роман написал: Вопрос актуален. Требуется програмно получить дату закрытия реестра по акциям из таблицы "Текущие торги" колонка "Дата з.р." (дата закрытия реестра). Подскажите плиз как это сделать.
читайте внимательно документацию. Там стоит звездочка - т е надо читать сноску, а в сноске написано: (*) В зависимости от настроек сервера QUIK, величина может выражаться в лотах или в штуках. Уточните единицы измерения у обслуживающего брокера.
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Может быть Вы изучите и проблему с SetUpdateCallback ? Который срабатывает Только после второго запуска скрипта или подтвердите, что такая странная работа SetUpdateCallback и задумана разработчиками Квика ?
Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Может быть Вы изучите и проблему с SetUpdateCallback ? Который срабатывает Только после второго запуска скрипта или подтвердите, что такая странная работа SetUpdateCallback и задумана разработчиками Квика ?