"1 марта 2025 года на рынке акций Московской биржи стартуют торги в выходные дни в экспериментальном режиме"
Параметр в ТТК на эту тему будет.?
Вопрос кодерам
Пользователь
Сообщений: Регистрация: 03.03.2016
28.12.2024 10:46:46
Sublime Text 3 при проверке синтаксиса путем тестовой прогонки скрипта (Build) ругается на встроенные функции qlua, например на getWorkingFolder(). Понятно, что встроенный интерпретатор Lua их не знает и считает не объявленными глобальными переменными. Как его заткнуть? Мешает.
MCFTR
Пользователь
Сообщений: Регистрация: 03.03.2016
10.10.2024 14:25:14
А в каком разделе данных находится индекс полной доходности MCFTRR ? Что-то я его никак не найду.
Пользовательская таблица.
Пользователь
Сообщений: Регистрация: 03.03.2016
10.09.2024 08:14:19
Господа разработчики,
объясните пожалуйста мне, убогому, как в функции SetTableNotificationCallback пользоваться событиями
QTABLE_RBUTTONDOWN и QTABLE_RBUTTONDBLCLK, если вы намертво прикрутили к правому клику ячейки менюшку сортировки
без возможности его отключения?
И вопрос даже не в том, нахрена нужно это меню, когда в клике по заголовку есть точно такое же, а в том, как теперь средствами Lua cделать
хотя бы простейшее меню Y/N? Проктологи, блт. ((
Как на графике нарисовать свечу?
Пользователь
Сообщений: Регистрация: 03.03.2016
23.06.2024 16:51:26
Код
Settings= {
Name = "Test",
line =
{
{
Name = "Candle",
Color = RGB(255, 0, 0),
Type = TYPE_CANDLE,
Width = 1
}
}
}
function OnCalculate(i)
local candle={O(i),C(i),H(i),L(i),V(i),T(i)}
return ???
end
function Init()
return 1
end
Восемь лет назад разработчики сказали "никак в текущей версии". Версия тогда была 7-я. Что нибудь изменилось?
Тикер в индикаторе.
Пользователь
Сообщений: Регистрация: 03.03.2016
20.06.2024 11:32:24
Споткнулся тут о проблему: в скрипте индикатора нужно обрабатывать свечи для бумаги прошедшей сплит по правилам, отличным от правил обработки других инструментов. Как в скрипте индикатора можно получить наименование тикера обрабатываемой свечи?
Что изменилось в версии 11.1.1.11?
Пользователь
Сообщений: Регистрация: 03.03.2016
07.03.2024 10:31:11
Обнаружилось, что при запуске терминала вместе со скриптом и последующем коннекте функция IsConnected() возвращает значение 1 раньше чем устанавливается фактическая связь с сервером.
в итоге
Код
if isConnected()==1 then
message("IsConnected "..tostring(Isconnected()))
csi,error_desc=CreateDataSource("INDX", "IMOEX", INTERVAL_D1)
...
...
пишет в лог: 10:06:35 isConnected 1 10:06:35 csi Source error==>INDX - unknown class code. 10:06:36 Соединение установлено. Предыдущий вход был 07.03.2024 10:05:04 с адреса 92.62.59.149.
Что за ...? В этой части скрипта я уже лет пять ничего не трогал. Приходится перезапускать скрипт после коннекта.
Обезличенные сделки. Подписка/отписка
Пользователь
Сообщений: Регистрация: 03.03.2016
17.11.2023 11:38:24
При возникновении стандартной ситуации смены рабочего тикера для робота довольно просто подписатся/отписатся на/от свечных баз данных. В случае же с обезличенными сделками ситуация выглядит иначе. Я предположил, что подписка на тиковую базу при помощи CreateDataSource решает эту проблему. Тестовый скрипт:
Код
is_run=true
function main()
ds,error_desc=CreateDataSource("TQBR", "GAZP", INTERVAL_TICK)
if error_desc~=nil and error_desc~="" then message(" Source error==>" .. error_desc) end
local nn=0
while ds:Size()<5 and nn<100 do
sleep(100) nn=nn+1
end
message("Data "..tostring(ds:Size()))
ds:SetEmptyCallback()
while is_run do
sleep(100)
end
end
function OnStop(stop_flag)
ds:Close()
is_run=false
end
Запускаю скрипт и , о чудо(!), в фильтре Основные_настройки/Программа/Получение_данных/Обезличенные_сделки появляется Газпром. Т.е. задача подписки на ленту сделок успешно решена и данные заказаны. Но... - ничего не появляется в фильтре таблицы обезличенных сделок - убрать эту подписку можно только вручную после похода в меню настроек.
В связи с вышеописанным имею два вопроса:
1. Достаточно ли такой подписки для корректной работы в скрипте колбэка OnAllTrade и выборки SearchItems("all_trades", .....) не имея этого инструмента в таблице обезличенных сделок? 2. Как отписаться от этого счастья средствами Qlua при следующей смене иструмента?
Расхождение в таблицах
Пользователь
Сообщений: Регистрация: 03.03.2016
21.09.2023 10:18:32
Подскажите по какой причине может быть расхождение позиции по одному из инструментов (в моем случае MAGN) ? В таблице "Состояние счета" --> "Позиция" --> -240 (T1) - правильное значение В таблице "Позиции по инструментам" --> "Текущий остаток" --> -2400 (Т1) В указаных таблицах еще четыре инструмента, по ним все ровно
GetParamEx2(). А что, так можно?
Пользователь
Сообщений: Регистрация: 03.03.2016
24.07.2023 11:09:13
Наткнулся на то, что иногда значения param_value совсем не соответствуют значениям param_image Например: -- local aaa=getParamEx(p_classcode,"GMKN","EV_SESS_ALLOWED").param_value local bbb=getParamEx(p_classcode,"LSRG","EV_SESS_ALLOWED").param_value message(aaa.."/"..bbb)
--> 0.0000/0.0000 -- тоже с param_image : -- local aaa=getParamEx(p_classcode,"GMKN","EV_SESS_ALLOWED").param_image local bbb=getParamEx(p_classcode,"LSRG","EV_SESS_ALLOWED").param_image message(aaa.."/"..bbb)
--> Да/ --
Это нормально?
Таблицы lua
Пользователь
Сообщений: Регистрация: 03.03.2016
19.07.2023 14:15:37
Добрый день! Подскажите как получить список ключей таблицы x={one=4, next="a"}, что нибудь типа "one next" ?
Интервалы CreateDataSource
Пользователь
Сообщений: Регистрация: 03.03.2016
29.06.2023 10:12:18
Подскажите возможно ли каким-то образом получение данных для свечи с интервалом от 1 мин или более с разбивкой объема сделок V на "покупка" и "продажа" как это сделано в ленте сделок? Выбирать это из тиковой базы уж очень затратно по ресурсам, особенно если не по одному инструменту.
Контроль работы скрипта
Пользователь
Сообщений: Регистрация: 03.03.2016
30.12.2022 19:11:43
Я тут пользую визуальный индикатор работы скрипта который показывает его замедление или затык при выполнении. Веселенький такой крутилок в крайней ячейке таблицы. Может кому пригодится. С Новым Годом!
Код
function cyrcle(c) -- крутилок
local t=os.time()
if c=="|" then
return "/", t
elseif c=="/" then
return "--", t
elseif c=="--" then
return "\\", t
elseif c=="\\" then
return "|", t
else
return "" ,t
end
end
-- Пример (цветовые функции здесь не привожу)
go,gt="",0
...
...
function main()
is_run=true
...
while is_run do
go,gt=cyrcle(go)
...
...
...
...
SetCell(kt_id,x,y,go) -- вывод в ячейку таблицы
--раскраска крутилка
if go=="/" or go=="\\" then
color(x,y,kt_id,"Lemon")
else
color(x,y,kt_id,"Salad")
end
if os.time()-gt>60 then color(x,y,kt_id,"Red") end
...
sleep(50)
end
end
Иногда доступные скрипты
Пользователь
Сообщений: Регистрация: 03.03.2016
22.12.2022 12:03:27
Уважаемые разработчики !
Ну сделайте наконец возможность изменения размера окна "Доступные скрипты"! Достало уже забавляться целый день прокруткой после изменения шрифтов. У вас что, все экраны 15 дюймов ?
Заодно поставьте уже кнопку запуска этого окна рядом с веселиньким паровозиком.
Волшебное исчезание меток
Пользователь
Сообщений: Регистрация: 03.03.2016
05.11.2022 11:50:41
Всем добрый день!
Столкнулся с тем, что после аварийного выхода из терминала при его зависании по сторонней причине, исчезают все метки добавленные при помощи функции AddLabel после последнего запуска скрипта. Очень неприятно и в голову ничего не пришло кроме сохранения параметров меток в файл при их создании с последующим удалением и пересозданием каждой при новом запуске. Наверное можно было бы решить эту проблему имея в lua функцию сохранения параметров терминала в файл info.wnd, но увы. Кто-то нашел решение этой проблемы?
Попутно изучая в доках функцию AddLabel на предмет что курили разработчики когда придумали использовать для параметра "Время в формате «ЧЧММСС»..." тип "NUMBER" наехал вот на такую шутку:
Код
local a="09:15:18"
local b=string.gsub(a,":","")
local c=tonumber(b)
local d=tonumber(string.gsub(a,":",""))
message(tostring(c).." "..tostring(d))
Результат: 91518 nil
Кто коллекционирует, дарю )) v.9.8.0.11, Lua 5.3.5
Получение цены инструмента
Пользователь
Сообщений: Регистрация: 03.03.2016
11.10.2022 10:55:08
Подскажите, есть ли возможность получения цены последней сделки по инструменту запросом с сервера не занося его в таблицу текущих торгов руками и не создавая всю базу через CreateDataSource ?
Снова AddLabel
Пользователь
Сообщений: Регистрация: 03.03.2016
12.07.2022 19:18:52
Как говорится "у кого что болит"
Описание проблемы: В случае прикрепления графика якорем к таблице текущих торгов функция AddLabel лепит метку согласно только идентификатору в текущий на графике инструмент. T.е. метка о сделке по любому тикеру выставляется в текущее окно графика. В итоге в одном окне мешанина из меток разнообразных инструментов, а при переключения на нужные они отсутствуют. В настоящее время способов автоматически правильно разносить метки на графики соответствующих тикеров нет. Единственный вариант какой я придумал - вручную открывать нужное окно и запускать скрипт который перебирает список UIDов меток относящихся к этому тикеру, поштучно удаляет ее и выставляет заново с другим uid что бы она появилась на текущем графике. Замечу, что метки покупки/продажи выставляемые самим Квиком попадают в окно нужного инструмента автоматически.
Предложение:
1. Доработать функцию AddLabel возможностью выставлять метку на график в соответствии с параметром "тикер инструмента". При отсутствии параметра пусть лепит в текущее окно.
или
2. Дать возможность позиционировать средствами qlua указатель в таблице текущих торгов на нужный тикер с тем что бы текущий график переключился на нужный инструмент. Тут наверное придется создать еще функцию получения текущей позиции укозателя.
Прошу рассмотреть данные предложения. Обязуюсь честно напоминать о них ежегодно )
Последовательность функций обратного вызова
Пользователь
Сообщений: Регистрация: 03.03.2016
18.05.2022 17:17:04
Всем добрый день!
При подаче и обработке лимитных заявок давно использую простую последовательность:
sendTransaction(...)( задание TRANS_ID) --> OnTransReply(...)(получение номера заявки order_num )-->OnTrade(...)(обработка исполнения заявки с номером order_num) Функцию OnOrder() тут не использую благо до сих пор не было необходимости.
Попытка сделать подобную схему для стоп-заявки типа тэйк-профит поставила в тупик - полученный от OnTransReply при выставлении стоп-заявки order_num бесполезен т.к. после срабатывания условий тэйка сервером выставляется новая заявка с новым номером order_num который нужно как-то отфильтровать и получить.
Прошу у знатоков совета по оформлению последовательности функций обратного вызова для этого типа заявок.
Как закрыть форточку?
Пользователь
Сообщений: Регистрация: 03.03.2016
14.02.2022 13:44:09
Сломал себе мозг пытаясь закрыть окно способом указанным в документации. Тестовый пример:
В итоге вывод message: false/true/false Это нормально? Как его еще можно закрыть чтобы оно было закрыто?
getPortfolioInfoEx в девятой версии
Пользователь
Сообщений: Регистрация: 03.03.2016
24.11.2021 10:26:49
Может быть кто-то уже разбирался с этим?
Почему-то в девятке возвращаемое значение getPortfolioInfoEx(...,2).all_assets абсолютно не соответствует значению соответствующего поля ТекСредства таблицы Клиентский портфель. В восьмерке такого не было (
Таблица алгоритмических заявок
Пользователь
Сообщений: Регистрация: 03.03.2016
02.07.2021 09:33:51
А можно узнать у уважаемых разработчиков по какой причине в таблице алгоритмических заявок утром до начала торгов по каждой заявке пустое поле "Инструмент сокр."? Какой смысл тогда заполнения остальных полей этой таблицы в это время?
Настройки и их сохранение.
Пользователь
Сообщений: Регистрация: 03.03.2016
22.04.2021 09:12:20
Я чего-то недопонимаю в логике настроек переноса заказа данных в настройки (?). Стоял фильтр заказа котировок. Снимаю галочку "фильтр инструмента" класса в /Программа/Получение данных/Котировки и уверен что все хорошо. Однако при следующем входе галка на месте. Ручное сохранение настроек эффекта не дает. Версия 8.11
Получение тикеров инсрументов
Пользователь
Сообщений: Регистрация: 03.03.2016
18.04.2021 10:24:15
Добрый день всем.
Подскажите, есть ли возможность получить с сервера в свою таблицу список ВСЕХ тикеров по конкретному классу? Типа той которая используется в таблицах квика для настройки фильтров и тп.
Подкиньте идею
Пользователь
Сообщений: Регистрация: 03.03.2016
16.01.2021 12:51:48
Привет всем.
У меня работает несколько роботов с выводом данных каждый в свою таблицу. Возникла необходимость сделать сводную таблицу для всех. Пока не понимаю как передавать данные из скрипта в скрипт. Вернее одно решение есть - отдавать через сохраняемый и затем читаемый файл, но во первых это криво, во вторых медленно. Буду благодарен за рабочую идею.
Сохранение параметров некоторых окон
Пользователь
Сообщений: Регистрация: 03.03.2016
14.01.2021 12:58:09
Здравствуйте! При изменении шрифтов в настройках Квика естественно приходится корректировать ширину столбцов и размеры таблиц. Особых проблем в большинстве таблиц это не создает. Кроме стакана. Т. к. отсутствует возможность сохранить параметры окна и каждый раз при вызове стакана из таблицы текущих торгов стакан является в корявом виде и размере по умолчанию. Прошу зарегистрировать возможность изменять и сохранять размеры и ширину столбцов по умолчанию.
Кроме того прошу аналогично дать возможность изменять размер окна "Доступные скрипты"
Спасибо.
Перестали скачиваться тиковые данные
Пользователь
Сообщений: Регистрация: 03.03.2016
23.09.2020 11:48:57
Сегодня обновил квик до версии 8.8.4.3 , перестали скачиваться тиковые данные.
Скрипт -- local ldsa={} local error_desc="" ldsa,error_desc = CreateDataSource(p_classcode, p_seccode, INTERVAL_TICK) while not ldsa or ldsa:Size()==0 do sleep(10000) message("ожидание данных") if error_desc ~= nil and error_desc ~= "" then message(p_classcode.."/"..p_seccode.."/".."Source2 error ==>" .. error_desc) end end message("получено "..tostring(ldsa:Size())) -- висит в "ожидание данных".
Что за .....? Что-то добавили в настройки?
Статус сессии.
Пользователь
Сообщений: Регистрация: 03.03.2016
21.08.2020 11:07:19
Господа разработчики, в связи с появлением на ММВБ вечерней сессии есть пара замечаний и предложений по теме.
Вот протокол изменения статуса сессии в течении дня: -- 09:50:01 Ststus 0==>3 (открытие) 09:59:40 Ststus 3==>0 (закрыта) 10:00:00 Ststus 0==>1 (открыта) 18:39:59 Ststus 1==>0 (закрыта) 18:40:05 Ststus 0==>4 (аукцион) 18:45:20 Ststus 4==>5 (ЦАЗ) 18:50:01 Ststus 5==>0 (закрыта) 19:00:01 Ststus 0==>3 (открытие) 19:04:31 Ststus 3==>0 (закрыта) 19:05:00 Ststus 0==>1 (открыта) 23:50:00 Status 1==>0 (закрыта) -- Предложения: 1. Сделать разными статусы открытия дневной и вечерней сессии с 9-50-00 до 9-59-40 и с 19-00-00 до 19-04-30. Сейчас оба периода имеют одинаковый статус 3.
2. Периоды с 09-59-40 до 10-00-00 и с 19-04-30 до 19-05-00 имеют статус сессии 0 (закрыта). Однако в это время сервером обрабатываются встречные заявки выставленные в период открытия сессии. Логично было бы этим периодам присвоить отдельный статус.
Спасибо за понимание.
Скрипт индикатора
Пользователь
Сообщений: Регистрация: 03.03.2016
08.07.2020 11:38:09
Добрый день.
В тексте индикатора встретил выражение x=ds[I] подскажите что это и почему оно NUMERIC?
Если это база свечей текущего таймфрейма, то по идее такое должно возвращать nil.
Снова CreateDataSource
Пользователь
Сообщений: Регистрация: 03.03.2016
08.06.2020 13:06:45
Добрый день,
подскажите пожалуйста есть ли возможность что бы CreateDataSource(classcode, seccode, INTERVAL_TICK) тащила с сервера только данные текущей сессии? А то это действо занимает около пяти минут. Заодно как узнать, что данные получены полностью?
Изменение фильтра из скрипта
Пользователь
Сообщений: Регистрация: 03.03.2016
18.05.2020 13:02:51
Здравствуйте!
Подскажите пожалуйста есть ли какая-либо возможность изменять из скрипта параметры заказа данных? Конкретно интересует возможность изменять фильтр в заказе потока обезличенных сделок.
SetSelectedRow()
Пользователь
Сообщений: Регистрация: 03.03.2016
05.03.2020 13:43:07
Всем добрый день!
Подскажите пожалуйста способы обхода бага: 1. Создаю таблицу с идентификатором kt_id и размером окна вмещающем n строк 2 Поштучно добавляю строки при помощи InsertRow(kt_id,k). 3. В итоге добавлено строк больше n и в окне начинает работать прокрутка с установкой бегунка прокрутки вниз так, что видна последняя строка. 4. Выделяю первую строку SetSelectedRow(kt_id,1). Строка выделяется, однако ее не видно тк она остается за пределами окна.
Как мне средствами Lua поднять этот бегунок и увидеть в окне первую строку?
Мышь окочурилась :)
Пользователь
Сообщений: Регистрация: 03.03.2016
17.02.2020 13:03:15
В последних версиях в терминал внесены значительные улучшения. Улучшения пишу честно, без скобок. Например если кликнуть правой клавишей мыши по заголовку пользовательской таблицы, предлагается сортировка столбца. Точно так же сортировка предлагается если таким образом кликнуть и в ячейке с данными. Великолепно! Только теперь при двойном клике по ячейке данных функция MouseClick(...) перестала возвращать QTABLE_LBUTTONDBLCLK. А надо :(. Вполне хватило бы оформить вызов сортировки только кликом на заголовок. Что делать?
Пользовательские таблицы, Привязка к вкладке
Пользователь
Сообщений: Регистрация: 03.03.2016
08.05.2019 17:37:44
Очень бы хотелось иметь возможность привязывать пользовательские таблицы к конкретным вкладкам Квика. Например иметь такую опцию в функции CreateTable() или SetWindowPos(...)
Сейчас для того, что бы открыть таблицу в определенной вкладке, нужно запускать скрипт робота находясь в ней. Если скриптов несколько, то бегать по вкладкам запуская их. Кроме того при закрытии терминала или аварийном перезапуске пользовательские таблицы вновь открываются во вкладке вкладке, которая была открыта на момент выхода из Квика. Робот обижается :)
getDepoEx, Ошибки при выполнении функции
Пользователь
Сообщений: Регистрация: 03.03.2016
26.12.2018 19:30:03
Добрый день !
Столкнулся с проблемой при использовании данной функции.
Получаю ошибку несуществующего аргумента в момент очистки таблиц при первом за текущие сутки коннекте к серверу 9-30. Дальше работает корректно, все данные из таблицы лимитов получаются, при переконнекте скрипт не вылетает.
Попробовал посмотреть что она в этот момент возвращает ... y=type(getDepoEx ("MC0003300000", "555555", "SU26225RMFS1", "L01-00000F00", 2)) ...
получил: bad argument #1 to type (value expected)
Выборки из других таблиц getParamEx, getPortfolioInfoEx работают как и должны круглосуточно.
Возможно это баг разработчиков. Но я не могу придумать как это обойти, кроме как останавливать скрипт на время обновления данных. Подскажите если кого озарит
Обращение к произвольной таблицы
Пользователь
Сообщений: Регистрация: 03.03.2016
18.10.2018 10:47:38
Добрый день знатоки!
Подскажите пожалуйста, а то я уже всю голову сломал. В скрипте создаю таблицу
t_id=AllocTable()
Я так понимаю, что t_id создается случайным образом
Как обратится к этой таблице из другого скрипта, который этот идентификатор не знает?
Ну или передать переменную из скрипа в скрипт что ли ?
Помогите пожалуйста коллеги. getInfoParam возвращает пустую строку и я не понимаю почему.
Простейший код
if isConnected()==1 then local a=getInfoParam("Tradedate") local b=getInfoParam("Servertime") message(a,1) message(b,1) end
в ответ в message пустые строки Время рабочей сессии. Версия 7.6.1.1
Спасибо!
Звуки в Qlua, Вопрос по звуковой индикации
Пользователь
Сообщений: Регистрация: 03.03.2016
08.06.2016 11:39:50
Добрый день ! Подскажите знатоки, есть какая то библиотека проигрывания звукового файла под lua? Или хотя бы бипер на худой конец ?
Спасибо.
Игорь
Работа с именем переменной
Пользователь
Сообщений: Регистрация: 03.03.2016
26.04.2016 11:39:48
Подскажите пожалуйста человеку не знакомому достаточно подробно с lua. Как обработать переменную, имя которой представлено в строке? Например :
var1=0 a = "var" b = "1" c =a..b далее мне нужно например в конструкции if проверить значение переменной var1 имея переменную c. В некоторых языках для этого используется оператор $ там это выглядит так: if $c = 0 then ........ end
Как это сделать в lua?
Прошу извинить, что не нашел этого в руководстве :(
Вызов окна настроек при запуске индикатора
Пользователь
Сообщений: Регистрация: 03.03.2016
03.03.2016 11:41:30
Добрый день. Подскажите начинающему как победить проблему. При добавлении индикатора, написаного на lua в появляющемся окне настроек индикатора отсутствует вкладка "Общие". Имеются только вкладки "Дополнительно" и "Уровни". В результате невозможно задать параметры индикатора. Quik версия 7.0.4.10 Спасибо