[Вопрос разработичкам Квика: попытка №4] CreateDataSource и SetUpdateCallback - не срабатывает после первого запуска скрипта
Пользователь
Сообщений: Регистрация: 13.05.2022
12.12.2022 11:01:37
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через 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)
[Вопрос разработичкам Квика: попытка №3] CreateDataSource и SetUpdateCallback - не срабатывает после первого запуска скрипта
Пользователь
Сообщений: Регистрация: 13.05.2022
09.12.2022 10:58:54
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через 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)
[Вопрос разработичкам Квика] SetUpdateCallback - не срабатывает после первого запуска скрипта попытка №2
Пользователь
Сообщений: Регистрация: 13.05.2022
08.12.2022 11:08:38
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через 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)
Версия Квика 9.7.1.10
Bad Allocation [критические дни] Квика
Пользователь
Сообщений: Регистрация: 13.05.2022
08.12.2022 11:05:48
Буквально 8 часов назад скрипт в кивке без проблем запускался, сегодня при попытке запустить скрипт Квик выдает "bad allocation".
Что это ??? Это "критические дни" Квика или что ??? Откуда эта ошибка ?
[Вопрос разработичкам Квика] SetUpdateCallback - не срабатывает после первого запуска скрипта
Пользователь
Сообщений: Регистрация: 13.05.2022
03.12.2022 14:54:36
Прошу пожалуйста подтвердить, что это ошибка или что это корректное поведение Квика:
Заказываю данные через 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)
Версия Квика 9.7.1.10
sendTransaction - требует какой то "торговый счет" - попытка #2
Пользователь
Сообщений: Регистрация: 13.05.2022
28.11.2022 19:51:46
Подскажите почему 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 - ОТСУТСТВУЕТ значение "торговый счет" для фондового рынка.
sendTransaction - требует какой то "торговый счет"
Пользователь
Сообщений: Регистрация: 13.05.2022
28.11.2022 12:41:28
Подскажите почему 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 функции
Пользователь
Сообщений: Регистрация: 13.05.2022
28.11.2022 11:35:04
Подскажите, есть к примеру 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-ки не хочет почему то.
getBuySellInfoEx - выдает не сущесвующий тип клиента
Пользователь
Сообщений: Регистрация: 13.05.2022
25.11.2022 20:55:21
Функция getBuySellInfoEx в поле client_type возвращает тип клиента "5" - которого не существует в описании:
client_type
STRING
Тип клиента. Возможные значения:
«1» – «МЛ»;
«2» – «МП»;
«3» – «МОП»;
«4» – «МД»;
getBuySellInfoEx - параметр "оценка кол-во лотов"
Пользователь
Сообщений: Регистрация: 13.05.2022
25.11.2022 19:22:05
Подскажите:
Параметр функции getBuySellInfoEx:
Цитата
can_buy; // Оценка количества лотов, доступных на покупку по указанной цене
Не соответствует действительности.
Данные в can_buy - указаны не в лотах, а в количествах штук акций, то есть лот умноженный на кол-во акций в лоте.
Это ошибка описания или ошибка в функции getBuySellInfoEx и в параметре can_buy - должно находится именно кол-во Лотов, а не Акций. ??
getBuySellInfoEx - признак маржинальности
Пользователь
Сообщений: Регистрация: 13.05.2022
25.11.2022 19:18:13
Подскажите:
Функция getBuySellInfoEx возвращает два параметра:
Цитата
is_long_allowed = 1; //Признак того, является ли бумага разрешенной для покупки на заемные средства. Возможные значения: «1» – разрешена, «0» – не разрешена. is_short_allowed = 1; //Признак того, является ли бумага разрешенной для покупки на заемные средства. Возможные значения: «1» – разрешена, «0» – не разрешена.
То есть бумага для которой я запрашивал getBuySellInfoEx - имеет возможность торговли с плечом.
Но параметр так же возвращенный функцией getBuySellInfoEx:
Разве значения параметров is_long_allowed/is_short_allowed не противоречит значению параметра is_margin_sec ??
getMoney - значение полей таблицы
Пользователь
Сообщений: Регистрация: 13.05.2022
21.11.2022 21:23:49
Подскажите:
Цитата
Таблица параметров денежных лимитов
Параметр Тип Описание money_open_limit NUMBER Входящий лимит по денежным средствам money_limit_locked_nonmarginal_value NUMBER Стоимость немаржинальных бумаг в заявках на покупку money_limit_locked NUMBER Заблокированное в заявках на покупку количество денежных средств money_open_balance NUMBER Входящий остаток по денежным средствам money_current_limit NUMBER Текущий лимит по денежным средствам money_current_balance NUMBER Текущий остаток по денежным средствам money_limit_available NUMBER Доступное количество денежных средств
Вызвал функцию getMoney() - она вернула условно следующие значения:
Там где нули пока что не интересует, там, где 1000 руб - функия вернула корректно, при условии, что у меня не было открытых позиций.
Я специально купил одну акцию и стоиомсть портфеля начала соовтевтнно изменятся, но при вызове getMoney() - возвращается все та же - 1000. Я закрыл сделку - стоимость изменилась - условно стала 998, но при вызове getMoney() - возвращается все та же - 1000.
Это так и должно быть ? Если да, то, как тогда получить кол-во доступных средств на конкретный данный момент в который вызвается getMoney() ? Под доступными средвами я имею ввиду, если у меня была 1000 на счете, я купил одну какую то акцию по 100 рублей - дсотупно мне стало 900, вот как эти 900 получить ?
SetUpdateCallback - не срабатывает после первого запуска скрипта
Пользователь
Сообщений: Регистрация: 13.05.2022
21.11.2022 16:12:34
Кто встречался с такой ситуацией ?
Заказываю тики через CreateDataSource:SetUpdateCallback().
Запускаю Квик: -Загружаю скрипт. -Запускаю скрипт. -Скрипт вызывает CreateDataSource. -CreateDataSource возвращает нулевую таблицу, что говорит о том, что данные придут позже в колбек. -Колбек больше НИКОГДА не вызывается.
Выгружаю Скрипт и СРАЗУ же его запускаю - данные сразу же начинают приходить.
Кто косячит ? Я или криворукие разрабы ?
getMoney - как понят, что это за Входные параметры ???
Пользователь
Сообщений: Регистрация: 13.05.2022
21.11.2022 00:14:08
У функции getMoney() - какие то не понятные параметры, которая она принимает:
из примера:
Цитата
-- Параметры для запроса берутся из таблицы "Лимиты по дененым средствам" -- client_code = "Код клиента" -- firmid = "Фирма" -- tag = "Группа" -- currcode = "Валюта"
У меня в таблице лимиты по денежным средствам - из перечисленного есть только код клиента, который я естественно и так знаю. Все остальное вообще не понятно ничего.
Что за фирма ? Что за группа ? Кармен или машина времени ? Валюта ?? Что валюта ? Рубли? Так и писать РУБЛИ ??
Для кого это описание написано ? Для ясновидящих ? А зачем оно им ?
Функция подключения к серверу
Пользователь
Сообщений: Регистрация: 13.05.2022
20.11.2022 21:38:29
Подскажите, после разрыва соединения, есть ли функция, которая опять начнет установку соединения ?
Отличие функции OnDisconnected от
Пользователь
Сообщений: Регистрация: 13.05.2022
20.11.2022 21:36:04
OnDisconnected: Функция вызывается терминалом QUIK при отключении от сервера QUIK.
isConnected: Функция предназначена для определения состояния подключения клиентского места к серверу. Возвращает «1», если клиентское место подключено и «0», если не подключено.
Правильно ли я понимаю, что отличия нет ?
Порядок приход тиковых данных от CreateDataSource
Пользователь
Сообщений: Регистрация: 13.05.2022
19.11.2022 15:21:01
Когда я запрашиваю SetUpdateCallback от CreateDataSource - по тикам - из приход строго упорядоченные ?
То есть не может быть ситуации:
Это два последних тика для 29 минуты:
-вызвался callback - пришел тик, время условно: 15:29:59 - теоретически этот тик должен относится к последней сделке на данный конкретный момент. -вызвался callback - пришел тик, время условно: 15:29:59 - теоретически этот тик должен относится к последней сделке на данный конкретный момент, НО фактически этот тик относится к сделке, которая была ДО предыдущего тика.
То есть не может быть такой ситуации, что я учту второй тик - как цену закрытия 29 минуты, НО фактически цена закрытия - будет в первом тике - так как именно он относится к последней сделке в этой 29 минуте. ?
Как заполняется размер таблицы исторических свечей ?
Пользователь
Сообщений: Регистрация: 13.05.2022
18.11.2022 21:18:29
Подскажите пожалуйста, когда я запрашиваю таблицу исторических свечей через CreateDataSource, то таблица сразу приходит заполненная окончательным размером или размер меняется по мере заполнения ?
Теоретически таблица сразу должна заполнится итоговым размером. Правильно ?
Запрос данных после разрыва соединения
Пользователь
Сообщений: Регистрация: 13.05.2022
16.11.2022 20:12:49
Такая ситуация:
-Соединение установлено -Скрипт получает каждые данные изменившейся цены и дату/время и упаковывает в свечи по интервалу. -Предположим произошел дисконнект Квика. -Через 5 минут произошел опять коннект и данные опять начали приходить, но прежде, чем принимать после дисконнекта данные - нужно заполнить 5 минутный пропущенный промежуток. -А для этого, нужно как то определить, что произошел ре-коннект.
Подскажите, как можно определить ре-коннект ?
Заказанный стакан после отключения скрипта - отписывается самостоятельно ?
Пользователь
Сообщений: Регистрация: 13.05.2022
15.11.2022 15:48:25
Собственно вопрос: если я заказываю стакан с помощью Subscribe_Level_II_Quotes, после отключения скрипта - он автоматически будет отписан, то есть эквивалентен вызову Unsubscribe_Level_II_Quotes ?
Пустая таблица от CreateDataSource
Пользователь
Сообщений: Регистрация: 13.05.2022
11.11.2022 15:59:24
Подскажите пожалуйста:
-вот я вызываю CreateDataSource -в отдельном потоке запускаю функцию - которая каждые 100 мс - проверяю размер таблицы -Как только размер таблицы (к примеру данные запрашивались на сервере) становится больше 0, то значит данные таблицы свечей получены -Завершаю функцию.
Вроде бы все нормально, но есть случай - когда по какому то инструменту/акции - просто нету вообще свечей, то есть акция есть - а торгов по ней вообще на данный момент еше не было. И в итоге получается, что функция будет крутится вечно, так как размер таблицы будет всегда возвращаться нулевым.
Возможно ли, как то определить - что нулевой размер таблицы - это не потому что данные с севера еще не пришли, а потому что размер таблицы - нулевой - Фактически, потому что данных свечей по акции физически еще не существует.
Остановка и запуск скрипта из другого скрипта
Пользователь
Сообщений: Регистрация: 13.05.2022
10.11.2022 18:04:15
Подскажите, возможна ли остановка и запуск скрипта из другого скрипта ?
К примеру так: первый скрипт следит за соединение Квика - если соединение разрывается, то первый скрипт останавливает второй скрипт. Первый скрипт ждет пока восстановится соединение и как только соединение восстанавливается первый скрипт запускает второй скрипт.
Qlua - тупо вешает Квик
Пользователь
Сообщений: Регистрация: 13.05.2022
10.11.2022 12:42:51
В какой то рандомный момент работы dll-скрипта - вызов функции lua_pcall() - просто вешает Квик. Это не обязательно первый вызов lua_pcall - это именно рандомный вызов. То есть Квик просто зависает и все - не ошибок ничего - просто виснет и все.Причем lua_pcall() - не возвращается, то есть код после lua_pcall - не выполянется. Квик тупо виснет в какой то момент именно на lua_pcall() и дальше Квик уже ничего не выполняет. И как тут разобраться в чем проблема ? Квик даже дамп ошибки не создаёт.
getQuoteLevel2 поле bid_count
Пользователь
Сообщений: Регистрация: 13.05.2022
08.11.2022 15:31:23
Подскажите, а то в описании, по крайней мере на мой взгляд слишком размытое понятие термина поля bid_count:
bid_count
STRING
Количество котировок покупки. При отсутствии спроса возвращается значение «0»
Это кол-во строк в стакане на момент запроса ? То есть 20 штук, а не общее суммарно кол-во лотов ? Правильно же ?
Как вызвать у таблицы - "строковую переменную" ?
Пользователь
Сообщений: Регистрация: 13.05.2022
04.11.2022 11:45:13
Чтобы вызвать метод у таблицы, к примеру метод Size() у таблицы CreateDataSource - нужно сделать так:
Код
//index - номер таблицы в стеке Lua
lua_getfield(L, index, "Size"); //"Извлекаем" из "таблицы" функцию отвечающую за возвращения размера этой таблицы.
lua_pushvalue(L, index); //Помещаем копию обьекта таблицы на вершину стека.
int status_lua_pcall = lua_pcall(L, 1, 1, 0); //Вызываем функцию Size
А как сделать тоже самое, но не с методом таблицы, а со строковым полем ? К примеру, как в getQuoteLevel2: [url];
У таблицы есть поле bid_count/bid_count, но такой же код не прокатывает:
Код
lua_getfield(L, index, "bid_count"); //"Извлекаем" из "таблицы" функцию отвечающую за возвращения размера этой таблицы.
lua_pushvalue(L, index); //Помещаем копию обьекта таблицы на вершину стека.
int status_lua_pcall = lua_pcall(L, 1, 1, 0); //Вызываем функцию Size
Ошибка: attempt to call a string value
Получение стакана без открытия стакана, Получение стакана без открытия стакана
Пользователь
Сообщений: Регистрация: 13.05.2022
03.11.2022 13:14:29
Мне нужно получить стакан без открытия стакана в Квике.
OnQuote: я так понял - это глоабльная функция Квика, которая вызывается каждый раз на изменение во всех стаканах Квика, открытых и не открытых, всех классов и бумаг.
getQuoteLevel2: заказывает сам стакан по конкретному классу и бумаге и получает таблицу данных стакана, НО только, если стакан открыт в Квик, что очень печально и с какого перепуга нельзя сделать без открытого стакана ?
Subscribe_Level_II_Quotes: а вот эта функция мне что то совсем не понятна. В описании написано, что:
[quote]Функция заказывает на сервер получение стакана по указанному классу и бумаге.[/quote]
Но для работы OnQuote - это не требуется. Для getQuoteLevel2 - тоже вызов Subscribe_Level_II_Quotes - не требуется.
Так что в итоге делает Subscribe_Level_II_Quotes ?
После вызова метода Close у обьекта CreateDataSource --> SetUpdateCallback больше не устанавливается
Пользователь
Сообщений: Регистрация: 13.05.2022
03.11.2022 12:32:57
Собственно, как и написано в названии темы - после вызова метода Close у обьекта CreateDataSource --> SetUpdateCallback больше не устанавливается.
-То есть я заказываю SetUpdateCallback у акции Сбера. -В колбек приходят обновляемые данные сбера. -В какой то момент я отписываюсь от SetUpdateCallback - вызывая метод Close(). Отписка проходит успешно, данные более не приходят в колбек. -После этого я уже вызываю CreateDataSource для акций Газпрома и зазываю SetUpdateCallback. -Ошибок нет - все вызовы функций и методов проходят успешно, но данные не приходят в колбек.
То есть резюмирую - единственный вызов метода Close() - вырубает Всю последующие заказы CreateDataSourc: SetUpdateCallback
Это корректное поведение функций ?
Отписка от колбека SetUpdateCallback и сразу же подписка
Пользователь
Сообщений: Регистрация: 13.05.2022
03.11.2022 10:40:25
Что то фигня получается, я подписываюсь на акцию к примеру Сбера - все окей - обновляемые данные приходят. Через некоторые время я отписываюсь от колбека и через несколько секунд опять подписываюсь, подписка проходит без ошибок, НО - колбек уже не вызывается, то есть обновляемые данные не хотят уже приходить.
Вот код демонстрирующий это:
Код
global_cntr=0;
function my_callback_CreateDataSource_(my_table_data_candle_, code_class_, code_paper_, interval_, idx)
message(code_paper_ ..":" .. interval_string_..":" ..tostring(my_table_data_history_candle_:C(idx)) )
if global_cntr == 13 then
my_table_data_history_candle_:Close() --отписываемся
message("CLOSE")
end
global_cntr=global_cntr+1
end
function main()
message("start")
local code_class_1= "TQBR"
local code_paper_1= "SBER"
local intervakla_1= INTERVAL_M1
local my_table_1, error_desc_1 = CreateDataSource(code_class_1, code_paper_1, intervakla_1)
------------------------Проверка на ошибки:-------------------
if error_desc_1 ~= nil then
message("1:" .. error_desc_1)
end
--------------------------------------------------------------
status = my_table_1:SetUpdateCallback(function(idx)my_callback_CreateDataSource_(my_table_1, code_class_1, code_paper_1, intervakla_1, idx) end)
while not stopped do
sleep(1)
if global_cntr == 14 then
message("START_2")
local code_class_1= "TQBR"
local code_paper_1= "SBER"
local intervakla_1= INTERVAL_M1
local my_table_2, error_desc_2 = CreateDataSource(code_class_1, code_paper_1, intervakla_1)
------------------------Проверка на ошибки:-------------------
if error_desc_2 ~= nil then
message("1:" .. error_desc_2)
end
--------------------------------------------------------------
status = my_table_2:SetUpdateCallback(function(idx)my_callback_CreateDataSource_(my_table_2, code_class_1, code_paper_1, intervakla_1, idx) end)
message(tostring(status))
global_cntr = global_cntr + 1
message("END")
break
end
end
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end -- end main()
Номер свечи из SetUpdateCallback всегда будет равен размеру таблицы ?, Номер свечи из SetUpdateCallback всегда будет равен размеру таблицы ?
Пользователь
Сообщений: Регистрация: 13.05.2022
25.10.2022 23:11:03
Вопрос, номер свечи, который приходит в колбеке SetUpdateCallback- ВСЕГДА будет равен размеру таблицы, которая возвратила CreateDataSource ?
CreateDataSource SetUpdateCallbackcallback более чем для одного заказа, SetUpdateCallbackcallback более чем для одного заказа
Пользователь
Сообщений: Регистрация: 13.05.2022
20.10.2022 16:32:56
Я понимаю, что "CreateDataSource гавно", но мне уже чисто из любопытства интересно. Я уже перешел чисто на Lua.
У кого нибудь работает CreateDataSource SetUpdateCallbackcallback - более, чем для одного инструмента ??
Вот простой тестовый код на чистом Lua:
Код
function my_callback_CreateDataSource_HISTORY_1(my_table_data_history_candle_, code_class_, code_paper_, interval_, interval_string_)
message("SIZE_TABLE:" ..tostring(my_table_data_history_candle_:Size() .. "\n" .. ":" .. code_paper_ ..":" .. interval_string_ ..":" ..my_int_1))
end
function my_callback_CreateDataSource_HISTORY_2(my_table_data_history_candle_, code_class_, code_paper_, interval_, interval_string_)
message("SIZE_TABLE:" ..tostring(my_table_data_history_candle_:Size() .. "\n" .. ":" .. code_paper_ ..":" .. interval_string_..":" ..my_int_2))
end
-----------------------------------------------------------------------------------------------------------int main:-----------------------------------------------------------------------------------------------------
function main()
local code_class_1= "TQBR"
local code_paper_1= "GAZP"
local intervakla_1= INTERVAL_MN1
local intervakla_string_1 = "INTERVAL_MN1"
my_table_1, error_desc_1 = CreateDataSource(code_class_1, code_paper_1, intervakla_1)
------------------------Проверка на ошибки:-------------------
if error_desc_1 ~= nil then
message("1:" .. error_desc_1)
end
--------------------------------------------------------------
my_table_1:SetUpdateCallback(function(idx)my_callback_CreateDataSource_HISTORY_1(my_table_1, code_class_1, code_paper_1, intervakla_1, intervakla_string_1) end)
local code_class_2= "TQBR"
local code_paper_2= "SBER"
local intervakla_2= INTERVAL_W1
local intervakla_string_2 = "INTERVAL_W1"
my_table_2, error_desc_2 = CreateDataSource(code_class_2, code_paper_2, intervakla_2)
------------------------Проверка на ошибки:-------------------
if error_desc_2 ~= nil then
message("2:" .. error_desc_2)
end
--------------------------------------------------------------
my_table_2:SetUpdateCallback(function(idx)my_callback_CreateDataSource_HISTORY_1(my_table_2, code_class_2, code_paper_2, intervakla_2, intervakla_string_2) end)
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end -- end main()
То есть я просто заказываю SetUpdateCallback - для Газпрома и Сбера, но callback вызывается ТОЛЬКО для сбера. КТО НИБУДЬ получал callback - сразу более, чем по одному инстурменту ??
Или я что то конкретно не так делаю ??
SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.
Пользователь
Сообщений: Регистрация: 13.05.2022
15.10.2022 19:27:44
SetUpdateCallbackcallback в Lua C api - перезаписывает заказы:
Из скрипта квика вызывается Сищная-функция: в нее соответственно автоматически передается или создается Lua-Стек:
Код
int my_callback(lua_State* L)
{
//Доп.пераметры извелкаем через lua_upvalueindex.
std::cout<<"interval_int:" <<interval_int <<std::endl;
}
void my_call_CreateDataSource(lua_State* L_, name_class_insrument, name_code_paper, interval_int)
{
lua_getglobal(L, "CreateDataSource");
lua_pushstring(L,_ name_class_insrument);
lua_pushstring(L_, name_code_paper);
lua_pushnumber(L_, interval_int);
int status_lua_pcall = lua_pcall(L, 3, 2, 0);
my_call_SetUpdateCallback(L_, my_callback, name_class_insrument, name_code_paper, interval_int); //Вызываем SetUpdateCallback и передаем в нее функцкиб обратного вызова и доп.параметры.
}
int ruc_cpp(lua_State* L_main)
{
lua_State* L_1 = lua_newthread(L_main); //Создаю "поток" связанный с главным стеком.
lua_State* L_2 = lua_newthread(L_main);
my_call_CreateDataSource(L_1 , "TQBR", "GAZP", "INTERVAL_H2");
my_call_CreateDataSource(L_2 , "TQBR", "GAZP", "INTERVAL_H4");
//-----------------------------------------------
for (int i = 0; i < 1000000; i++)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
//-----------------------------------------------
}
Приведенный код частично условный, чтобы не загромождать кодом страницу.
Но суть в том, что - я создаю два новых "потока" от главного Луа-стека: -Вызываю для каждого из двух созданных "потоков" - функцию CreateDataSource и навешиваю колбек через SetUpdateCallback. -Первый и примерно второй и третий - колбеки - выводят интервал "INTERVAL_H2" - то есть это тот интервал, который я запросил первым у CreateDataSource... -НО! Как только вызывается второй CreateDataSource для второго "потока" и навешивается callback - после этого любой вызываемый callback приходит только с интервалом "INTERVAL_H4" - что соотвевует второму вызову CreateDataSource - ТО ЕСТЬ произошло, как бы затирание подписки на колбек... -НО ПОЧЕМУ ? Ведь я создал два разных "потока" которые хоть и связаныс основным луа-стеком, но сами обладают свои стеком, в который я и записываю результа от CreateDataSource.
Что то не понятно.
Отписка callback`а SetUpdateCallbackcallback - отписывает ВСЕ заказы, Отписка callback`а SetUpdateCallbackcallback - отписывает ВСЕ заказы
Пользователь
Сообщений: Регистрация: 13.05.2022
14.10.2022 21:38:00
После вызова callback`а от SetUpdateCallback - я сразу отписываюсь от callback`а, но отписываюсь именно от как бы первого объекта CreateDataSource, но почему от отписка происходит от всех последующих от CreateDataSource.
Вот такой простенький код:
Код
function main()
local code_class_= "TQBR"
local code_paper_= "ZVEZ"
local interval_= INTERVAL_W1
my_table_, error_desc = CreateDataSource(code_class_, code_paper_, interval_)
------------------------Проверка на ошибки:-------------------
if error_desc ~= nil then
message(error_desc)
end
--------------------------------------------------------------
my_table_:SetUpdateCallback(function(idx)my_callback_CreateDataSource_HISTORY(my_table_, code_class_, code_paper_, intervakla_) end)
code_class_= "TQBR"
code_paper_= "ZVEZ"
interval_= INTERVAL_M15
local my_table_1, error_desc_1 = CreateDataSource(code_class_, code_paper_, interval_)
------------------------Проверка на ошибки:-------------------
if error_desc_1 ~= nil then
message(error_desc_1)
end
--------------------------------------------------------------
my_table_1:SetUpdateCallback(function(idx)my_callback_CreateDataSource_HISTORY(my_table_1, code_class_, code_paper_, intervakla_) end)
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end -- end main()
То есть я вызываю CreateDataSource для двух значений, которые точно нужно заказывать на сервере.
На два значений вешаю callback`и.
Вызывается первый callback для my_table_ и сразу же отписываюсь от callback`а - НО отписка осуществляется и для таблицы my_table_1, то есть отписка осуществляется для всех ранее заказанных callback`ов для разных парамтеров.
Так и должно быть ?
Квик ПАДАЕТ от простейшего кода
Пользователь
Сообщений: Регистрация: 13.05.2022
12.10.2022 19:43:45
Квик ПАДАЕТ от простейшего кода - тупо ЗАКРЫВАЕТСЯ:
В квике Lua-скрипт:
Код
function main()
Quik_Lua_connector= require("Quik_Lua_connector")
Quik_Lua_connector.run_Cpp()
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end
То есть из Квика запускаю функцию run_Cpp из .dll:
На выполнении строчки кода lua_close(L) - квик просто закрывается и все.
Создать новый стек Lua, Создать новый стек Lua
Пользователь
Сообщений: Регистрация: 13.05.2022
12.10.2022 18:37:45
Есть такой простой код:
В квике Lua-скрипт:
Код
function main()
Quik_Lua_connector= require("Quil_Lua_connector_work_TEST")
Quik_Lua_connector.TestFunc_run_WinConsole_for_dll()
Quik_Lua_connector.run_Cpp()
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end
В С++ соответственно:
Код
static int run_Cpp(lua_State* Lua_stek)
{
lua_State* L = luaL_newstate();
if (L == NULL)
{
std::cout << "L == NULL" << std::endl; //Ошибки нет.
}
lua_getglobal(L, "CreateDataSource");
lua_pushstring(L, "TQBR");
lua_pushstring(L, "GAZP");
lua_pushnumber(L, "INTERVAL_MN1");
std::cout << "Size_stack:" << lua_gettop(L) << std::endl; //Размер 4 - как и должно быть
int status_lua_pcall = lua_pcall(L, 3, 2, 0);
if(status_lua_pcall != 0)
{
std::cout<<"Error"<<std::endl; //attempt to call a nil value
}
}
То есть я хочу использовать автоматически не созданный при вызове функции run_Cpp - Lua стек, а создать своей новый - через luaL_newstate. Стек создается, он не равен нулю. В стек добавляются элементы - то есть он рабочий. Но, как я вызываю lua_pcall - то lua_pcall завершается ошибкой "attempt to call a nil value".
Со автоматически созданный стеком Lua_stek - никаких ошибок нет, все работает.
Что это может быть ?
Передать в SetUpdateCallback дополнительные параметры
Пользователь
Сообщений: Регистрация: 13.05.2022
11.10.2022 12:22:49
При вызове SetUpdateCallback по умолчанию передать туда доп. параметры нельзя:
Код
function my_callback_(index)
--index - индекс свечи в таблице my_table, НО сама таблица по умолчанию не приходит, что просто дикость.
end
local my_table = CreateDataSource(code_class, code_paper_ interval)
my_table :SetUpdateCallback(my_callback_)
Но, передать доп. параметры в callback - можно с помощью такой контракции, в данном случае я не знаю, что она означает на Lua, просто подсмотрел на данном форуме:
Код
function my_callback_(my_table_, param1, param2, index)
--Теперь тут доступны переданные дополнительные параметры...my_table_, param1, param2 - помимо стандартного index
end
local my_table = CreateDataSource(code_class, code_paper_ interval)
parametr_1 = "1"
parametr_2 = "2"
my_table :SetUpdateCallback(function(idx)my_callback_(my_table,parametr_1, parametr_2, idx) end)
И теперь параметры замечательно переданы в callback SetUpdateCallback.
И вот подскажите пожалуйста, а можно ли подобное провернуть в Си ??
SetUpdateCallback возвращает Lua-стек в котором нет таблицы, SetUpdateCallback возвращает Lua-стек в котором нет таблицы
Пользователь
Сообщений: Регистрация: 13.05.2022
10.10.2022 21:41:33
Какая то странность.
Вызываю CreateDataSource их С++ с заведомо такими параметрами акций по которым в квике нет загруженных данных.
То есть CreateDataSource - возвращает пустую таблицу и я вызываю SetUpdateCallback:
Код
lua_getfield(L, index, "SetUpdateCallback"); //"Извлекаем" из "таблицы" функцию SetUpdateCallback.
lua_pushvalue(L, index); //Помещаем копию обьекта таблицы на вершину стека.
lua_pushcfunction(L, my_callback_); //Помещаем имя Сишой callback функции таблицы на вершину стека.
int status_lua_pcall = lua_pcall(L, 2, 0, 0); //Реализую вызов метода SetUpdateCallback
И с одной стороны все нормально, my_callback_ - вызывается, НО с другой стороны - я ожидаю там увидеть таблицу запалённую данными свечей, а приходит строка:
Код
1
2
3
4
5
6
...
итд
Такое ощущение, как будто бы похоже на размер таблицы, но в какой то момент это число доходит до 3007 и после этого так и приходит 3007 с последующими вызовами my_callback_ .
Непосредственно в скрипте Lua в квике такой странности не наблюдается, все работает нормально. Что это может быть ?
Поток в котором вызывается SetUpdateCallback, Поток в котором вызывается SetUpdateCallback
Пользователь
Сообщений: Регистрация: 13.05.2022
09.10.2022 13:06:05
В документации естественно таких данных нет, но может кто знает ?
Когда вызывается callback SetUpdateCallback от CreateDataSource - он вызывается всегда только в одном потоке, как в Lua, так и в С++ ?
Кстати интересен данный вопрос и касаемо функции OnQuote.
Вопрос естественно связан с синхронизацией доступа в случае - многотонной SetUpdateCallback .
Вызвать Lua функцию из С++ c передачей callback`а, Вызвать Lua функцию из С++ c передачей callback`а
Пользователь
Сообщений: Регистрация: 13.05.2022
07.10.2022 13:45:17
Подскажите пожалуйста, есть ли пример, как вызывать функцию к примеру SetUpdateCallback с передачей в нее параметров ?
Ну то есть, вот аналог код в Lua:
Код
local my_table_= CreateDataSource(code_class_, code_paper_, interval)
my_table_:SetUpdateCallback(function(idx)my_callback_(my_table_, code_class_, code_paper_, interval) end)
Код
function my_callback_(my_table_, code_class, code_paper, interval)
...код
end
Код
//В L - на вершине стека уже находится таблица возвращенная CreateDataSource.
lua_getfield(L, -1, "SetUpdateCallback"); //"Извлекаем" на вершину стека из "таблицы" функцию SetUpdateCallback.
Теперь нужно поместить в стек последовательно параметры функции SetUpdateCallback, но тут уже не могу понять: - как поместить function(idx) - как поместить my_callback_
Не могу понять, где должна быть объявлена моя функция callback ?
В Lua скрипте и тогда мне ее нужно просто получить через Lua_global или же в C++ ?
Квик не распознает процедуру в dll, Квик не распознает процедуру в dll
Пользователь
Сообщений: Регистрация: 13.05.2022
06.10.2022 17:53:27
Подскажите, кто нибудь сталкивался с такой проблемой ?
Простейший пример:
Скрипт Lua:
Код
function main()
Quik_Lua_connector = require("Quik_Lua_connector")
Quik_Lua_connector.run_CPP()
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end
С++:
Код
#include "my_func.h"
extern "C"
{
#include "lauxlib.h"
#include "lua.h"
}
#pragma comment(lib,"C:\\Users\\lua54.lib")
int forLua_run_CPP(lua_State* L)
{
int status - my_func(L);
return 0;
}
my_func.h: отдельным файлом:
Код
#pragma once
extern "C"
{
#include "lauxlib.h"
#include "lua.h"
}
int my_func(lua_State* L)
{
int my_int =5;
return my_int ;
}
Соответственно - все компилируется, запускаю скрипт в Квике и квик сообщает об ошибке:
Код
error loading module 'Quik_Lua_connector' from file 'C:\SBERBANK\QUIK_x64_KA\Quik_Lua_connector.dll':
Не найдена указанная процедура.
И вся проблема из за того, что я подключим хедеры Lua в отдельном my_func.h. Если я убираю include из my_func.h. и соответвенно убирают "lua_State* L" из параметров функции, то все работает.
Почему так ?
Вызов простой функции Lua из С++ ВСЕГДА приводит к ошибке, Вызов простой функции Lua из С++ ВСЕГДА приводит к ошибке
Пользователь
Сообщений: Регистрация: 13.05.2022
04.10.2022 19:20:01
Вызов простой функции Lua из С++ ВСЕГДА приводит к ошибке:
Lua_code:
Код
function my_func_Lua()
message("my_func_Lua")
end
function main()
Quik_Lua_connector = require("Quik_Lua_connector_TEST")
Quik_Lua_connector_TEST()
-------------------------
while not stopped do
sleep(1)
end
-------------------------
end
C++ код:
Код
static int Quik_Lua_connector_TEST(lua_State* L)
{
std::cout << "Start" << std::endl;
lua_getglobal(L, "my_func_Lua"); // получаю функцию
//Проверяю, что на вершине стека находится теперь именно функция: int status_lua_is_function = lua_isfunction(L, -1);
std::cout << "status_lua_is_function:" << status_lua_is_function << std::endl; //return 1 - значит Lua функция.
int status = lua_pcall(L, 0, 0, 0); //Вызываю функцию без аргументов и бещ возвратного значения.
if (status != 0)
{
std::cout << "error:" << lua_tostring(L, -1) << std::endl; //ОШИБКА: error in error handling
}
}
lua_pcall ВСЕГДА завершается ошибкой "error in error handling"
Передача таблицы с ключем из Lua в Си
Пользователь
Сообщений: Регистрация: 13.05.2022
03.10.2022 19:36:58
Получаю таблицу свечей в Lua:
Код
local my_table_ = CreateDataSource(code_class_, code_paper_, interval)
local size_table = my_table_:Size() //Гарантировано не равно нулю.
Отправляю в dll в Си:
Код
Quik_Lua_connector.get_data_frim_Lua(size_table)
В dll принимаю:
Код
static int forLua_get_data_frim_Lua(lua_State* L)
{
std::cout << "Size:" << lua_tonumber(L, -1) << std::endl; //Снимаю данные с вершины стека. Все выводится на косноль нормально.
}
Теперь я хочк передать не отдельный параметр полученной таблицы my_table_, а сразу всю таблицу:
Отправляю в dll в Си:
Код
Quik_Lua_connector.get_data_frim_Lua(size_table)
В dll принимаю:
Код
static int forLua_get_data_frim_Lua(lua_State* L)
{
lua_pushnumber(L, 1); //Добавляю в стек номер индекса переданной таблицы к элементу которой я хочу получить доступ. lua_gettable(L, 1); //Помещает на вершину стека переданной таблицы - расположенная по 1 элементу в стеке, и индексу в самой таблице - по номеру элемента с вершины стека, то есть с номера "1", которая я добавил строчкой выше.
lua_getfield(L, -1, "Size"); //Теперь беру значение из стека с вершины стека, то есть то значние, которое я извлек из таблицы по индексу "1" (грубо говоря первая свеча) и извлекаю из него поле с заданным именем "Size" и значение этого поля помещается на вершину стека.
std::cout << "Size:" << lua_tonumber(L, -1) << std::endl; //Беру значение с вершины стека и получаю дулю с маслом или ошибку "unrecognized exception" в самом квике.
}
То есть передать обычную таблицу в виде массива из Lua в Си и получить доступ к значнеием - не составляет проблемы, а передача таблицы с ключом и плучение доступа по ключу не работает в Квике.
Перенос индикаторов с одного графика на другой, Перенос индикаторов с одного графика на другой
Пользователь
Сообщений: Регистрация: 13.05.2022
13.05.2022 15:59:46
Здравствуйте,
Подскажите - возможно ли перенести индикаторы с одного листа на другой, чтобы вручную на каждый график их не добавлять ?