nikolz написал: На самом деле, количество используемых функций влияет на производительность. Поясняю: Если функции глобальные, то указатели на них помещаются в глобальную таблицу , что увеличивает ее размер и соответственно поиск по ней требуемой функции. Если функция локальная, то она увеличивает локальную таблицу и аналогично выше сказанному если применить предварительную выборку функции, то это требует добавку кода, что влияет на производительность. ----------------- Таким образом, в общем случае количество функций влияет на производительность.
размер таблицы в луа-реализации практически не влияет на скорость выборки информации из нее, так как используется механизм хеширования ключей.
для таблиц с целочисленными индексами вообще не влияет.
Для неронятливой администрации: речь идёт именно о пользователе Владимир. Это не "общение пользователей", это непрекращаемое хамство, спровоцированное бездеятельностью соответствующих сотрудников компании арка
Алексей написал: Версия Quik 9.3.3.3. Для чего появились нули после запятой в значении горизонтальных линиях, если ввести можно только целые числа? Уберите их, пожалуйста. В идеале нужно, чтобы была возможность выставления линий с учетом шага цены инструмента.
горизонтальные линии могут строиться не только для графика инструмента, но и для индикаторов. Поэтому шаг цены для горизонтальных линий не имеет смысла.
Тимур написал: Жуть как не хватает графических инструментов! в первую очередь - расширения по Фибоначчи - и сеткка фибоначчи с возможностью инверсии - также не хватает возможности добавления своих уровней на инструмент периоды фибоначчи
а также по прежнему не хватает низкоуровнего рисования в окне средствами win api по пикселаим без привязки к свечам.
Спасибо, однако в этом нет необходимости, так как проблему, описываемую в данном трэде, мы смогли воспроизвести на наших терминалах.
может, мне имеет смысл помочь вам ссылками на сообщение Ия этого форума, где на протяжении несколько лет (более 5) вы регулярно отчитываетесь о ее успешном решении? Это сможет помочь?
Проблема, описанная в данном трэде, на данный момент изучается, и на текущий момент, к сожалению, какой-либо содержательный комментарий предоставить не можем.
Когда какая-либо информация касательно данной проблемы появится, в данном трэде будет написано соответствующее сообщение.
я могу чем нибудь помочь для ускорения процесса? Скрипт я привел, файлы меток тоже. Могу рассказать, как запустить скрипт в терминале Квик.
Бары, которые получились справа от текущего времени после сдвига времени нужно помечать соответствующим полем в получаемой по getcandlebyindex, чтобы была возможность понять, что "ненастоящий" период, в котором была торговля, а фантомный, который создан на графике искусственно
Скрипт на луа, выставляющий 2 метки на один график
res = AddLabel("ri", { --IMAGE_PATH = "E:\\GoogleDisk\\ROBOT\\__TEST\\2-0.bmp", IMAGE_PATH = "E:\\GoogleDisk\\ROBOT\\__TEST\\2-0a.bmp", TEXT = "", DATE = 20220105, TIME = 150000, YVALUE = 151550, ALIGNMENT = "LEFT" }) res1 = AddLabel("ri", { IMAGE_PATH = "E:\\GoogleDisk\\ROBOT\\__TEST\\2-0.bmp", --IMAGE_PATH = "E:\\GoogleDisk\\ROBOT\\__TEST\\2-0a.bmp", TEXT = "", DATE = 20220105, TIME = 150000, YVALUE = 151650, ALIGNMENT = "LEFT" }) message(tostring(res).. " " .. tostring(res1))
Как видим, отличие лишь в бмп файле (yvalue изменены, чтобы видеть метки не друг на друге)
в результате выставляется всегда только вторая метка, при первая не выставляется. Терминал при исполнении этого скрипта выдает сообщение в окно сообщений: Произошла ошибка при загрузке файла чивотатам\2-0.bmp
скрипт выдает message вида 23465.0 nil
Из чего можно сделать вывод, что файл 2-0.bmp битый, а файл 2-0a.bmp нормальный.
ok. Но раньше то все было нормально!
Запускали мы сейчас скрипт на версии 9. Запустим его на версии 8.
function main() t = {} for i = 1,150000 do t = os.time() end while true do sleep() end end
запустите, посмотрите размер занимаемой памяти.
s_mike, а где вы в ветке увидели про размер занимаемой памяти?
Я ещё раз прочитал сообщение _sk_, на которое я отвечал и да, речь идёт именно о занимаемой памяти скриптом, в котором очень много таблиц, описывающих дату/время.
_sk_ написал: Очень хочется увидеть ответ от разработчиков по поводу изучения данной проблемы, хотя бы после новогодних праздников. Ниже описывается пример, как большое количество таблиц может появляться в реальной программе.
Предположим, что скрипту нужно хранить в памяти для работы 3000 свечей (сколько отдаёт сервер при запросе данных по ликвидным инструментам) по 10 инструментам и 5 таймфреймам. Время свечи QLua отдаёт в виде таблицы
Код
datetime = { year = 2021 , month = 12 , day = 30 , hour = 11 , min = 0 , sec = 0 , ms = 0 , mcs = 0 , .. . }
Соответственно, сразу же имеем 3000 * 10 * 5 = 150 000 таблиц. А если скриптов несколько, то можно ещё на порядок увеличить количество таблиц в памяти.
Конечно, конкретно здесь можно закодировать дату в виде строки "2021-12-30T11:00:00.000" или вообще числом 20211230110000000 для эффективности, но придётся писать код для выделения из этого числа отдельных полей, и арифметика даты/времени станет неудобной.
В общем, просьба к разработчикам дать обратную связь, а то уже нехорошо выглядит такая техподдержка. Хоть пообещайте что-нибудь, как обычно.
_sk_,
вы видите проблему, где ее нет
function main() t = {} for i = 1,150000 do t[i] = os.time() end while true do sleep() end end
Старатель написал: Сделать другие значки для скриптов: 1) остановившихся в результате ошибки; 2) в которых возникла ошибка, но скрипт продолжил работу (ошибка в колбеке)
оберните содержимое main и колбеков в xpcall и дудите в динамик при ошибках сколько вам заблагорассудится.
r написал: Считаю это важной доработкой. Коллеги, кто так же считает плюсаните, чтобы повысить приоритет предложения.
почему бы не подписаться на историю параметра на тикоаом интервале и не иметь сразу всю историю его изменений за торговый день со временем в микросекундах?
Берем класс (SPBFUT) Получаем все тикеры из этого класса (getclasssecurity) выбирем из них по первым символам те, что нам нужны (RIxx - это фьючерск на индекс, Sixx - на доллар и так далее) Переводим по маске (см статью по ссылке) оставшиеся символы во время unix. Самое малое время даст нам ближайший фьючерс
Александр Копяткевич написал: Здравствуйте, Sergey Denegin . Как таковой настройки на сохранение истории графиков нет. В терминале QUIK максимально отображаются 3 тысячи свечей, а хранится максимум 65 тысяч.
Уточните, пожалуйста, на втором терминале (на котором история сохранилась за 4 месяца) Вы постоянно держали график открытым? Когда график открыт он постоянно сохраняет данные при обновлении. Так же, уточните, пожалуйста, подключаются ли терминалы к одному и тому же серверу брокера или каждый к отдельному?
С какой целью разработчики Quik Сделали хранения свечей в кол-ве 65 000, если реализовали отображение только 3000 ?? Зачем разработчики просто так занимают место на HDD Клиента ?
отображение 65000 свечей вкупе с расчетом индикаторов, в том числе пользовательских, да в количестве 100 диаграмм - дело не богоугодное.
Александр М написал: Есть функция: num = getNumCandles ("Идентификатор") Она вернет число баров, включая фантомные бары, которых нет, но которые QUIK создает чтобы показать значения линий индикаторов в будущем.
В результате как получить текущий реальный бар со значениями цены через getCandlesByIndex("Идентификатор",Номер линии,num-1,1) ?
Перебор всех баров вглубь не предлагать.
Должна быть функция или флаг у функции getNumCandles, чтобы данная функция вернула число реальных баров Инструмента. Как минимум это относится к самой Цене, все остальное можно смотреть по ней.
перебор всех баров справа налево с конца не даёт результата, даже если идти этим путем. Индикатор может быть присвоен индикатору, который даёт значимые нулевые значения. Пример - фрактал. Поэтому отличить фантомные бары, полученные справа сдвигом от значимых э, дающих пустое значение, нет возможности.
вопрос к разработчикам. Как, использую ваш интерфейс, отличить фантомные бары, полученные сдвигом от значимых, дающих пустое значение?
function f() a=math.random(0,1) -- выдает 0 или 1 if a==1 then b= 1 end x = 5 > b -- вот так должно быть. b или число или nil. ошибка исполнения при nil require "чегойта" end
Андрей написал: Спасибо, учить меня не надо. Да, я сразу даю разработчикам видимые вероятные наводки. Что-то переоптимизировали с загрузкой модулей. Добавлю еще, что переход перманентен - после него все скрипты, загружающие данный модуль, не исполняют его.
андрей.
ошибка где то у вас, даже не сомневайтесь.
если нужна помощь - делайте минимальный пример, где эффект есть и выкладывайте. Но скорее всего в процессе этого вы сами найдете свою ошибку
С чего это така яуверенность? ) Смотрите. Если в квике ошибки нет, то запуски скриптов не должны иметь side effects на последующие запуски. А я вижу, что все скрипты остановлены и запуск приводит к такой проблеме. Как вы можете это объяснить, если в квике нет ошибки? И нет смысла говорить о простом примере, т.к. у меня самого он не воспроизведет проблему на свежем запуске квика. А каким примером привести квик в такое проблемное состояние я, конечно, не знаю. Поэтому надо копать с другой стороны - чтобы разработчики посмотрели у себя, почему вообще возможны такие side effects с подгрузкой модулей. Какое-то там кеширование. Потому я и дал такую наводку сразу.
вариантов просто миллион
вот вам один, при котором require может выполняться, а может не выполняться и никаких сообщений вы не получите
function f() a=math.random(0,1) -- выдает 0 или 1 if a==1 then b= 1 end x = 5 > a require "чегойта" end
Андрей написал: Спасибо, учить меня не надо. Да, я сразу даю разработчикам видимые вероятные наводки. Что-то переоптимизировали с загрузкой модулей. Добавлю еще, что переход перманентен - после него все скрипты, загружающие данный модуль, не исполняют его.
андрей.
ошибка где то у вас, даже не сомневайтесь.
если нужна помощь - делайте минимальный пример, где эффект есть и выкладывайте. Но скорее всего в процессе этого вы сами найдете свою ошибку
Рустам написал: Возникает и очень часто вот такая ошибка на всех серверах "?:-1: attempt to perform arithmetic on a nil value" Из за чего это происходит и как это исправить? Скрипты не использую. Брокер ВТБ
если не используете скрипты лук, остаются только индикаторы луа
Можно как то узнать какой именно? Вроде все стандартные индикаторы.
у вас на каком то графике есть индикатор, написанный на луа. Проверьте.
вариантов два: или индикатор или скрипт луа
Это твой индикатор))) я у тебя купил его)))
так что же молчим как партизан об лёд? ))
звоните в Скайп и показывайте эту беду, патологоанатом в предвкушении )
Рустам написал: Возникает и очень часто вот такая ошибка на всех серверах "?:-1: attempt to perform arithmetic on a nil value" Из за чего это происходит и как это исправить? Скрипты не использую. Брокер ВТБ
если не используете скрипты лук, остаются только индикаторы луа
Можно как то узнать какой именно? Вроде все стандартные индикаторы.
у вас на каком то графике есть индикатор, написанный на луа. Проверьте.
Рустам написал: Возникает и очень часто вот такая ошибка на всех серверах "?:-1: attempt to perform arithmetic on a nil value" Из за чего это происходит и как это исправить? Скрипты не использую. Брокер ВТБ
если не используете скрипты лук, остаются только индикаторы луа
Как отличить пустую свечу графика, получаемого по getcandlebyindex от правых фантомных свечей в случае, если график сдвинут вправо от источника его данных?
у вас есть уверенность, что в секунду на si происходит более 174 изменений цены?
что не так?
речь шла о минутах
Да, крнечно, в минутах.
Вы проверяли по таблице обезличенных сделок или по тиковому графику, сколько на самом деле было ИЗМЕНЕНИЙ цены? Есть мнение, что их ровно столько и было....