Почему CreateDataSource возвращает массив свечей с дублями ? Такое наблюдается не по всем интервалам и инстрементам, но встречается.
Вот скрипт которым проверял:
Код
CLASS_CODE = "TQBR"
SEC_CODE = "GAZP"
INTERVAL = INTERVAL_D1
ds = nil
function OnInit()
message("Starting duplicate candles check (DataSource mode)")
ds = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL)
if ds == nil then
message("Error: failed to create DataSource")
return
end
while ds:Size() == 0 do
sleep(100)
end
message("Data loaded. Candles count: " .. ds:Size())
check_duplicates()
end
function check_duplicates()
local groups = {}
for i = 1, ds:Size() do
local dt = ds:T(i)
local key
if dt ~= nil then
-- если время нормальное
if dt.hour ~= 0 or dt.min ~= 0 or (dt.sec or 0) ~= 0 then
key = string.format("%04d%02d%02d %02d:%02d:%02d",
dt.year, dt.month, dt.day,
dt.hour, dt.min, dt.sec or 0)
else
-- fallback: только дата (важно!)
key = string.format("%04d%02d%02d",
dt.year, dt.month, dt.day)
end
else
key = "unknown"
end
if groups[key] == nil then
groups[key] = {}
end
table.insert(groups[key], i)
end
local found = false
for key, indexes in pairs(groups) do
if #indexes > 1 then
found = true
message("Duplicate group: " .. key .. " | candles: " .. #indexes)
for _, i in ipairs(indexes) do
message(string.format(
" index=%d O=%.2f H=%.2f L=%.2f C=%.2f V=%.0f",
i,
ds:O(i),
ds:H(i),
ds:L(i),
ds:C(i),
ds:V(i)
))
end
end
end
if not found then
message("No duplicates found")
end
end
function OnStop()
if ds ~= nil then
ds:Close()
end
message("Script stopped")
end
Куда делать тема ?, Куда делать тема ?
Пользователь
Сообщений: Регистрация: 18.01.2023
02.04.2026 21:35:06
Куда делать тема ?
Что это ба БАГОВАННЫЙ ГЭП на графике и Истории ???, Что это ба БАГОВАННЫЙ ГЭП на графике и Истории ???
Пользователь
Сообщений: Регистрация: 18.01.2023
23.03.2026 10:06:37
Разработчики обьясните, что это за БАГОВАННЫЙ ГЭП на графике и исторчиеских данных ?
Как видно график 3 минуты, и в какой то момент происходит просто потеря данных между свечей 17 февраля 2026 и 11 марта 2026 !!!
Точный расчет комисии при сделке, Точный расчет комисии при сделке
Пользователь
Сообщений: Регистрация: 18.01.2023
18.03.2026 19:05:22
Вопрос не связан непосредвенно с Quik-ом, незнаю просто, где бы такой вопрос просить еще.
Кто нибудь рассчитывал точную комиссию которая берется совершении сделки? Речь про акции обыкновенные.
Вроде бы все легко, есть комисси брокера: -Комиссия в зависимости от оборота за Вход и Закрытие сделки. -Если сделка маржинальная и сделка переносится на другой день, то + комиссия за перенос сделки на следюущий день, + сам процент с заемных средств.
Но оказалось, что еще присутвует коммиссия биржы, то есть биржа взывает со совершенной сделки комисси. Задал вопрос брокеру(Сбер) - говорю. я же с биржей никаких договоров не заключал, только с вами, как еще кто-то вне договора может с моего счета списывать деньги. А они говорят, что все верно, Мос.биржа дополнительно списывает за комиссию, велечину и как они вообще это делают идите на сайт Мос.биржы и читайте, а там хрен поймешь, как и с какой суммы и какая комиссия берется.
Скажите пожалууйста Кто нибдут "изучал" данный вопрос ?
SetUpdateCallback и обнудение стека Lua
Пользователь
Сообщений: Регистрация: 18.01.2023
06.12.2023 12:16:22
Здравствуйте,
Слезно прошу помощи, я что то не вьезжаю, что происходит. Раньше вроде все работало, сейчас, как будто бы перестало.
Использую LUA C API - для вызова SetUpdateCallback, вот такой просто С++ код: да понимаю, что вероятность, что кто-то будет смтреть код стремится к нулю, поэтому срезюмирую поведение кода:
С помощью QLua C API:
-1:Я вызываю CreteDataSorce: вызов происходит успешно, мне возвращается таблица и нулевая ошибка. -2:Я подтверждаю это проверкой стека Lua: на вершине стека находится таблица и нулевая ошибка.
-3:Затем я вызываю SetUpdateCallback и передаю вв него саму колбек функцию, которая будет вызыватся при каждой совершенной сделке. Так же дополнительно я связываю по типу лямбды любое значение, чтбы предать для последующего ивзлечения его в самом колбеке.
-4:Вызыва SetUpdateCallback, убеждаюсь, что вызов SetUpdateCallback прошел успешно и опять проверяю стек на наличие ранее заказанной таблицы CreateDataSource - ОНИ НА МЕСТЕ! . -5: И наконец на рынке совершается сделка по заказанному инстурменту и вызывается колбек "my_callback__for__SetUpdateCallback". Все что я делаю в данном примере в этом колбеке это проверяю наличие моей таблицы CrateDataSourc в стеке Lua. ИИИИИИ ее там нет!!!! Весь стека кромер первого элемента был "кем-то" очищен!
ВОПРОС: КТО И ЗАЧЕМ очитстил стек ?? КАК видно из кода, между вызовов SetUpdateCallback и вызовом самой колбек-функции нет ни одной строчки кода, которая бы редактировала стек. Так что происходит тогда ?
Код
lua_State* L_global;
int static nummer_table_from_stack;
Код
void SetUpdateCallcak_wrapper(lua_State* L)
{
L_global = L;
std::cout << "L_global_adress:" << &L_global << std::endl;
//-----------------------------------------------------------------1-Вызовем функцию CreateDataSource:Начало--------------------------------------------
lua_getglobal(L, "CreateDataSource");
lua_pushstring(L, "TQBR"); //Добавим первый параметр функции CreateDataSource на вершину стека
lua_pushstring(L, "SBER"); //Добавим второй параметр функции CreateDataSource на вершину стека
lua_pushnumber(L, 1); //Добавим третий параметр функции CreateDataSource на вершину стека
int status_lua_pcall = lua_pcall(L, 3, 2, 0); //Так как все необходимые параметры добавлены в стек, то вызываем функцию lua_pcall - которая использя доабвенные параметры в правильном порядке - реализует вызов функции CreateDataSource: 2-ой параметр - это число аргументов, которые мы добаили в стек и которая принимает функция CreateDataSource; 2-ой: параметр - это число параметров, которое возвращает функция CreateDataSource. После успешного выполнения lua_pcall удаляет и значение функции и переданные аргменты со стека в кол-во указанном во втором параметре(не велючая функцию) и доабвляеи результат на стек в кол-во указанном во втором параметре.
//-----------------------------------------------------------------1-Вызовем функцию CreateDataSource:Конец--------------------------------------------
//-------------------------------------------------------------------5-Проверка на ошибку lua_pcall:Начало---------------------------------------------------------------------
if (status_lua_pcall != 0)
{
//Ошибка произошла при вызове функции lua_pcall при вызове CreateDataSource:
std::cout << "ERROR CreateDataSource" << std::endl;
return;
}
//-------------------------------------------------------------------5-Проверка на ошибку lua_pcall:Конец---------------------------------------------------------------------
else
{
nummer_table_from_stack = lua_gettop(L) - 1; //Это номер элемента в стеке L - в котором теперь размещается полученная от CreateDataSource таблица. "-1" - потому что CreateDataSource поместила на вершину стека две перменные: таблицу и переменную об ошибке. То есть таблица находить на предпоследнем месте с вершины стека.
my_call_SetUpdateCallback(L); //Вызываем SetUpdateCallback wrapper
}
}
Код
static void ckeck_Lua_Stack(lua_State* L)
{
std::cout << "----------------------------------------" << std::endl;
int top = lua_gettop(L);
std::cout << "Total element is stack:"<< top << std::endl;
for (int i = 1; i <= top; i++)
{
int type = lua_type(L, i);
const char* type_name = lua_typename(L, type);
std::cout << "type:" << type_name << ":";
if (type == LUA_TSTRING || type == LUA_TNUMBER)
{
std::cout << lua_tostring(L, i) << std::endl;
}
else
{
std::cout << std::endl;
}
}
std::cout << "----------------------------------------" << std::endl << std::endl;
//std::this_thread::sleep_for(std::chrono::milliseconds(100000));
}
Код
static int my_callback__for__SetUpdateCallback(lua_State* L)
{
//Значит произошла сделка!
std::cout << "Number_candle:"<< lua_tonumber(L, -1) << std::endl;
ckeck_Lua_Stack(L_global); //Проверяем стек Lua!!! И теперь в нем находится сдедующее:
----------------------------------------
Total element is stack:1 //Куда черт возьми делать моя ранее заказанная таблица CreateDataSource ?????
type:number:1
----------------------------------------
return 0;
}
Код
static void my_call_SetUpdateCallback(lua_State* L)
{
//--------------------------------------------------------
lua_getfield(L_global, nummer_table_from_stack, "SetUpdateCallback"); //"Извлекаем" из "таблицы" функцию SetUpdateCallback.
lua_pushvalue(L_global, nummer_table_from_stack); //Помещаем копию обьекта таблицы CreateDataSource на вершину стека.
//--------------------------------------------------------
lua_pushnumber(L_global, 555); //Просто для примера связываю какое то любое значение для передачи в колбек.
lua_pushcclosure(L_global, my_callback__for__SetUpdateCallback, 1); //Захватываем.
//--------------------------------------------------------
int status_lua_pcall = lua_pcall(L_global, 2, 0, 0); //Реализауем вызов функции SetUpdateCallback с аргументом таблицы, которую поместили на вершину стека
//--------------------------------------------------------
if (status_lua_pcall != 0)
{
std::cout << "lua_pcall__ERROR" << std::endl;
return;
}
else
{
std::cout << "SetUpdateCallback Success Call" << std::endl;
ckeck_Lua_Stack(L_global); //Проверяю что находится на данный момент в стеке Lua.
//Находится следующее:
----------------------------------------
Total element is stack:3
type:string:1 //Таблица глобьальный функций
type:table: //Это как раз запрошенная таблица CreateDataSource
type:nil: //Ошибка при запросе таблицы CreateDataSource - то есть nil - ошибки нет.
----------------------------------------
return;
}
}
SetUpdateCallback Опять косячит ?
Пользователь
Сообщений: Регистрация: 18.01.2023
04.12.2023 16:47:27
Здравствуйте,
Развейте пожалуйста мои сомнения насчет того, что Quik и в частности SetUpdateCallback() - опять работают, какбудто бы их написал через %опу, и что руки их %опы, растут, как раз таки у меня.
Использую такой простейший код для теста: просто вывожу последнюю цену сделки и обьем по последней минутной свече:
Код
function main()
local class_code = "TQBR" -- Код класса
local sec_code = "SBER" -- Код бумаги
ds = CreateDataSource(class_code, sec_code, INTERVAL_M1)
ds:SetUpdateCallback(function(index)
local last_price = ds:C(index)
local volume = ds:V(index) -- Получение объема по свече
message("Last Price of " .. sec_code .. ": " .. tostring(last_price) .. ", Volume: " .. tostring(volume)) -- Вывод цены и объема по свече
end)
while true do
sleep(1000)
end
end
Данный код исправно работает. НО, как только я вывожу код SetUpdateCallback в отдельный колбек, то ничего более не работает. Ошибок также в скрипте нет, но он не сообщает ни о каких измененениях, то есть колбек функция указанная в качестве параметра для SetUpdateCallback - тупо не вызывается при изменнеии цены:
Код
function updateCallback(index)
local last_price = ds:C(index)
local volume = ds:V(index) -- Получение объема по свече
message("Last Price of " .. sec_code .. ": " .. tostring(last_price) .. ", Volume: " .. tostring(volume)) -- Вывод цены и объема по свече
end
function main()
local class_code = "TQBR" -- Код класса
local sec_code = "SBER" -- Код бумаги
ds = CreateDataSource(class_code, sec_code, INTERVAL_M1)
ds:SetUpdateCallback(updateCallback)
while true do
sleep(1000)
end
end
Кто из нас рукожоп ? Я или разрабы Квика ? Надеюсь, что я.
Quik не запрашивает PIN-код по СМС, Quik не запрашивает PIN-код по СМС
Пользователь
Сообщений: Регистрация: 18.01.2023
01.12.2023 14:58:25
Здравствуйте,
После аварийного завершения Quik и повторного запуска Quik - аутентификация происходит только через пароль без PIN кода в СМС.
Это корректное поведение или косяк ?
CreateDataSource иногда возвращает ошибку - "TQBR - unknown class code"
Пользователь
Сообщений: Регистрация: 18.01.2023
02.03.2023 11:48:39
Собственно вопрос: Почему CreateDataSource иногда возвращает ошибку: "TQBR - unknown class code" ??
Это еще блин че такое на графике Яндекса (YNDX) ???
Пользователь
Сообщений: Регистрация: 18.01.2023
27.02.2023 11:32:10
Заметил, что по Яндексу CreateDataSource выдает какую * .
Решил посмотреть на реальный месячный график в самом Квике, вот скрин месячного-интервального графика: на скрине подробное описание проблемы:
По другим интервалам Яндекса - проблем нет. По другим месячным интервалам других инструментов - проблем нет. Но это явная извините херня какая то.
Это еще блин че такое на графике Яндекса (YNDX) ???
Пользователь
Сообщений: Регистрация: 18.01.2023
26.02.2023 21:47:22
Заметил, что по Яндексу CreateDataSource выдает какую * .
Решил посмотреть на реальный месячный график в самом Квике, вот скрин месячного-интервального графика: на скрине подробное описание проблемы:
КУ
По другим интервалам Яндекса - проблем нет. По другим месячным интервалам других инструментов - проблем нет. Но это явная извините херня какая то.
CreateDataSource и SetUpdateCallback - по разным интервалам
Пользователь
Сообщений: Регистрация: 18.01.2023
13.02.2023 13:10:01
Подскажите, я правильно понимаю, что когда я вызваю:
-CreateDataSource и потом SetUpdateCallback по одному инструменту, но с разными интервалами, для примера:
То на сервер при SetUpdateCallback - идет по сути только один запрос по интервалу - "INTERVAL_TICK", а уже пришедшая цена с датой раскидывается по интервалу силами Квика ?
Ограничения Квик на однорвеемнные вызовы CreateDataSource
Пользователь
Сообщений: Регистрация: 18.01.2023
09.02.2023 12:31:05
Подскажите пожалуйста, я правильно понимаю, что у Квика есть лимит по вызовам CreateDataSource ?
Запускаю простой скрипт:
Код
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","SBER", "INTERVAL_M1")
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","GAZP", "INTERVAL_M1")
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","ZILL", "INTERVAL_M1")
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","YRSBP", "INTERVAL_M1")
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","YRSB", "INTERVAL_M1")
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","YNDX", "INTERVAL_M1")
my_status = my_CreateDataSource__HISTORY__wrapper("TQBR","YKENP", "INTERVAL_M1")
...
и так штук 200-300
-------------------------
while not stopped do
sleep(1)
end
-------------------------
По некотрым акциям - формируются не все интервалы свечи
Пользователь
Сообщений: Регистрация: 18.01.2023
01.02.2023 22:18:05
Здравствуйте,
По некоторым акциям - формируются не все интервалы.
Для примера: TQBR: ZILL
В самом Квике на графике интервалы 1 и 3 минуты не формируются - окно просто черное. А вот с 5 минутным интервалом без проблем.
Это так и должно быть или такое поведение допускается или это ошибка ?
Индикаторы RSI и EMA на графике
Пользователь
Сообщений: Регистрация: 18.01.2023
18.01.2023 11:13:49
Здравствуйте,
Подскажите, где я ошибаюсь или как Квик рассчитывает эти два индикатора ?
Вот скриншот из Квика с периодом индикаторов == 3:
У меня вопрос, как RSI и EMA рачитались для третьей с начала свечи с периодом 3, если для их расчета нужно кол-во свечей равное: period + 1, то ест ьв данном случае для расчета нужны 4 свечи с указанным периодом. Или я чего то неправильно понимаю ?
Индикаторы RSI и EMA на графике
Пользователь
Сообщений: Регистрация: 18.01.2023
18.01.2023 11:05:51
Здравствуйте,
Подскажите, где я ошибаюсь или как Квик рассчитывает эти два индикатора ?
Вот скриншот из Квика с периодом индикаторов == 3:
У меня вопрос, как RSI и EMA рачитались для третьей с начала свечи с периодом 3, если для их расчета нужно кол-во свечей равное: period + 1, то ест ьв данном случае для расчета нужны 4 свечи с указанным периодом. Или я чего то неправильно понимаю ?