6.17.0.58 bugs collection, разработчикам на заметку. (все остальные - прошу проходить мимо и не засорять топик)
Пользователь
Сообщений: Регистрация: 01.02.2015
29.03.2015 03:43:35
В этой теме буду выкладывать переходящие из версии к версии баги QUIK и QLUA. Для себя уже давно составил коллекцию уязвимостей скриптов на QLUA и скриптов QLUA-индикаторов. Для справки: QLUA-индикаторов в QUIK используется отдельная усечённая sandbox-реализация LUA VM.
Итак, вот "код", а точнее, BUG в формате OnePageLesson:
Код
--testBUG#0001
Settings=
{
Name = "test Labels",
ChartID1 = "rima",
line =
{
{
Name = "test Labels",
Color = RGB(0,0,255),
Type = TYPE_LINE,
Width = 1
}
}
}
labelparams1 = {
TEXT = "",
IMAGE_PATH = getScriptPath() .. "заведомо отсутствующий файл и путь",
ALIGNMENT = "RIGHT",
YVALUE = 0,
DATE = "19000101",
TIME = "100000",
R = 0,
G = 0,
B = 255,
TRANSPARENCY = 0,
TRANSPARENT_BACKGROUND = 0,
FONT_FACE_NAME = "Arial",
FONT_HEIGHT = 18,
HINT = ""
}
function Init()
lab1 = AddLabel(Settings.ChartID1, labelparams1)
return 1
end
function OnCalculate(index)
return nil
end
function OnDestroy()
DelAllLabels(Settings.ChartID1)
end
Действия:
при успешно загруженном квике создаю график RIM5 с идентификатором "rima"
накладываю на него этот "индикатор". Индикатор успешно наложился, что подтверждается добавлением подписи на pane чарта. (то, что сам индикатор "пустой" - в данном случае, не суть)
сохраняем настройки окон (и, соответственно индикаторов) в файл info.wnd (стандартными средствами через соответствующий пункт меню)
отключаемся от сервера и выключаем квик
пытаемся вновь запустить квик и, ... ждём. долго так ждём, потом опять ждём. а тем временем, на экране:
старина QUIK нам каГбе намекает, что ждать можно чуть меньше чем (ну вы поняли... :) )) )
-----------------------------------
Пояснения: сам файл скрипта-индикатора находится в стандартном месте, в папке LuaIndicators. -----------------------------------
Возможные причины: Индикаторная "песочница" LUA VM слабо устойчива к параметрам и их корректности в функции AddLabel. И похоже даже использование pcall - не спасает. Кроме того, перед запуском QUIK, а точнее QLUA парсит всю папку и подпапки LuaIndicators, пытаясь запустить каждый, находящийся в ней скрипт (а это уже повод для использования в вирусописательстве). -----------------------------------
Методы устранения: все, абсолютно все параметры передаваемые из пользовательских скриптов обязаны проверяться на валидность прежде чем целиком и полностью заглатывать таблицу (в данном случае). То есть, внутри AddLabel (qlua-side) сперва должна быть проверка на валидность параметров. Уверен, что она у вас итак есть. так что спишем на недочёт. Кроме того, для скриптов просто обязан быть watchdog-таймер (даже в интернет-браузерах это есть и пользователю всегда предлагается отключить тормозной скрипт) -----------------------------------
Когда в первый раз была озвучена проблема (и технично похе..рена проигнорирована):
Советую обратить внимание на фразу, что даже если у нас индикатор не наложен ни на один график НО! присутствует в папке индикаторов - баг (зависание) обеспечен.
Пользователь
Сообщений: Регистрация: 23.01.2015
30.03.2015 12:00:15
Здравствуйте, Уточните Вы воспроизводили с функцией getScriptPath или без нее?
Пользователь
Сообщений: Регистрация: 01.02.2015
30.03.2015 16:17:28
делал всё именно так, как написано в скрипте-примере.
и вообще, причём здесь, с ней или без неё? getScriptPath - одинаково доступна и в обычных скриптах и в скриптах-индикаторах. по кр. мере - так сказано в вашей документации.
Пользователь
Сообщений: Регистрация: 01.02.2015
30.03.2015 16:20:08
ваша задача, как разработчиков - обеспечить 100%-ную стабильность квика - дабы он при любом раскладе не зависал от скриптов. если скриптовая система ( в клуа-вской реализации) заведомо не обладает устойчивостью к действиям пользователя то, спрашивается: на хрена козе баян??
Пользователь
Сообщений: Регистрация: 23.01.2015
31.03.2015 06:34:59
Цитата
sam063rus пишет: делал всё именно так, как написано в скрипте-примере.
и вообще, причём здесь, с ней или без неё? getScriptPath - одинаково доступна и в обычных скриптах и в скриптах-индикаторах. по кр. мере - так сказано в вашей документации.
Просьба уточнить это требуется для воспроизведения описанной ситуации
Пользователь
Сообщений: Регистрация: 23.01.2015
31.03.2015 06:36:19
Цитата
sam063rus пишет: ваша задача, как разработчиков - обеспечить 100%-ную стабильность квика - дабы он при любом раскладе не зависал от скриптов. если скриптовая система ( в клуа-вской реализации) заведомо не обладает устойчивостью к действиям пользователя то, спрашивается: на хрена козе баян??
Второе предупреждение, следите за языком. Просьба вести культурный диалог.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 07:19:23
Выскажу свою точку зрения:
мне неинтересны ваши предупреждения да и в общем-то диалог с вами. судя по вашим ответам - вы не обладаете необходимой минимальной компетенцией, чтоб отвечать на вопросы пользователей по квику. Советую для начала, набраться опыта - хотя бы до уровня Михаила Булычева (это единственный человек, компетентность которого не вызывает сомнений).
поэтому, вы можете меня смело забанить на этому форуме. я от этого абсолютно ничего не потеряю.
мне неинтересны ваши предупреждения да и в общем-то диалог с вами. судя по вашим ответам - вы не обладаете необходимой минимальной компетенцией, чтоб отвечать на вопросы пользователей по квику. Советую для начала, набраться опыта - хотя бы до уровня Михаила Булычева (это единственный человек, компетентность которого не вызывает сомнений).
поэтому, вы можете меня смело забанить на этому форуме . я от этого абсолютно ничего не потеряю.
Удачи вам, Сергей...
))
Михаил это разработчик, а не сотрудник саппорта. И его работа заключается в разработке. Соответсвенно его появление на форуме абсолютно на добровольной основе. Поэтому Вам в любом случае придется довольствоваться тем что есть. Если заявлено о проблеме, то первый шаг к ее изучению, это попытка воспроизвести. Собственно это правило которого придерживаются специалисты в любой отрасли. В Вашем случае, приведенный код не приводит к зависаниям. Но это потому, что я убрал функцию getScriptPath Если ее оставить то код вообще не запуститься. От сюда и логичный вопрос, как Вы его запускали
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 07:35:42
в последний раз (третий) говрю, именно так, как и написано в примере кода. то есть ВМЕСТЕ с getscriptpath
p.s. вместе с той же getscripthpath у меня есть и вполне отлично работающий пример. главное, чтобы путь и файл были корректными и РЕАЛЬНО существовали.
так что ещё раз хочу отметить абсолютно нет никакой разницы есть gescriptpath или нет в скрипте.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 07:40:42
то есть, если в поле IMAGE_PATH - у нас заведомо некорректный путь к файлу то, происходит зависание.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 07:43:26
то есть внутри функции AddLabel -должны быть 2 проверки (при получении/обновлении параметров):
isPathExist
isFileExist
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 07:49:32
Цитата
sam063rus пишет: то есть, если в поле IMAGE_PATH - у нас заведомо некорректный путь к файлу то, происходит зависание.
имеется ввиду, что зависание будет при сохранении настроек в info.wnd и следующем перезапуске квика разумеется.
Пользователь
Сообщений: Регистрация: 23.01.2015
31.03.2015 07:54:55
К сожалению, повторить проблему никак не получается. Но тем не менее мы изучим проблему. Постараемся в ближайшее время дать ответ.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 08:03:58
на всякий случай, если это, действительно важно: OS WIN XP PRO SP3
конечно жаль, что в данном случае, минидамп не был сформирован (почему-то)
Пользователь
Сообщений: Регистрация: 23.01.2015
31.03.2015 08:17:37
Цитата
sam063rus пишет: на всякий случай, если это, действительно важно: OS WIN XP PRO SP3
конечно жаль, что в данном случае, минидамп не был сформирован (почему-то)
Спасибо за уточнение
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 08:23:36
Цитата
Sergey Gorokhov пишет: Но это потому, что я убрал функцию getScriptPath Если ее оставить то код вообще не запуститься.
работает. и ещё как работает)))
для начала, начнём именно с этого момента. почему у вас именно так. Хотелось бы услышать ваши мысли по этому поводу?
p.s. если произвести некоторые изменения в скрипте то, вот такой код работает:
подразумевается, файл blueline.bmp реально существует и находится в папке LuaIndicators. По крайней мере у меня так)))
----------------------- у меня всё это дело успешно работает в скрипте-индикаторе отображения спреда Best Quotes. Полностью скрипт не могу привести - т.к. не собираюсь дарить его дармоедам (речь разумеется не о вас)
Пользователь
Сообщений: Регистрация: 23.01.2015
31.03.2015 08:50:10
Цитата
sam063rus пишет: для начала, начнём именно с этого момента. почему у вас именно так. Хотелось бы услышать ваши мысли по этому поводу?
так как у Вас терминал зависает и без функции getScriptPath то скорее всего она не причем. но с ней явно есть какая-то беда. с этим разберемся отдельно, это уже наша внутренняя тема.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 09:17:56
Цитата
Sergey Gorokhov пишет: зависает и без функции getScriptPath то скорее всего она не причем.
именно про это и говорю с самого начала.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 09:23:35
могу только дать не большую наводку: если IMAGE_PATH ="" - то так тоже всё работает. т.к. путь не является некорректным или содержащим отсутствующий файл. а является просто пустым, что не считается недопустимым или ошибочным в функции AddLabel.
Пользователь
Сообщений: Регистрация: 01.02.2015
31.03.2015 09:29:19
если далее присвоить IMAGE_PATH эту конструкцию: labelimagepath1 = getScriptPath() .. "\\blueline.bmp" - то, тоже всё работает. Таким образом, тут думаю имеет крайне важное значение порядок инициализации labelparams в AddLabel. То есть если IMAGE_PATH в ней НЕ является пустым и содержит не правильный путь то, именно тогда начинаются "грабли".
Пользователь
Сообщений: Регистрация: 23.01.2015
31.03.2015 09:32:27
Цитата
sam063rus пишет: если далее присвоить IMAGE_PATH эту конструкцию: labelimagepath1 = getScriptPath() .. "\\blueline.bmp" - то, тоже всё работает. Таким образом, тут думаю имеет крайне важное значение порядок инициализации labelparams в AddLabel. То есть если IMAGE_PATH в ней НЕ является пустым и содержит не правильный путь то, именно тогда начинаются "грабли".
А скажите, если не секрет - такой выбор ОС обусловлен тем, что QUIK лучше всего работает именно под Windows XP, а не под Windows 7 или более новой?
Пользователь
Сообщений: Регистрация: 01.02.2015
06.04.2015 10:20:29
тем, что у меня куча программ СТАБИЛЬНО работает на этой системе и ради каких-то "псевдоновшеств" семёрки и восьмёрки - я пока не собираюсь "перекапывать огород". К тому же XP для меня более чем изучена, а в других системах - куча недосказанностей.
Пользователь
Сообщений: Регистрация: 29.04.2015
29.04.2015 14:02:05
Цитата
Sergey Gorokhov пишет: так как у Вас терминал зависает и без функции getScriptPath то скорее всего она не причем. но с ней явно есть какая-то беда. с этим разберемся отдельно, это уже наша внутренняя тема.
Явная беда именно с ней. У меня в скриптах индикаторов эта функция использовалась и с версии 6.17 эти индикаторы перестали работать. В 6.16 всё было ок. Вставка message(getScriptPath()) в самое начало скрипта индикатора у меня стабильно воспроизводит проблему.
Пользователь
Сообщений: Регистрация: 23.01.2015
29.04.2015 14:38:47
Здравствуйте!
Ваше письмо получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Sergey Gorokhov пишет: так как у Вас терминал зависает и без функции getScriptPath то скорее всего она не причем. но с ней явно есть какая-то беда. с этим разберемся отдельно, это уже наша внутренняя тема.
Явная беда именно с ней. У меня в скриптах индикаторов эта функция использовалась и с версии 6.17 эти индикаторы перестали работать. В 6.16 всё было ок. Вставка message(getScriptPath()) в самое начало скрипта индикатора у меня стабильно воспроизводит проблему.
Добрый день,
Ошибка будет исправлена в одной из следующих версий программы
Пользователь
Сообщений: Регистрация: 31.01.2015
14.05.2015 19:49:23
Здравствуйте! Также обнаружил, что любой вызов функции getScriptPath() в скрипте индикатора (и вообще любого скрипта, находящегося в папке LuaIndicators) приводит к зависанию терминала при попытке открыть окно добавления индикатора на график, но только в том случае, если вызов getScriptPath() производится не внутри какой-либо другой функции (типа Init(), OnCalculate() и т.п.). Версия терминала 6.16.0.42
Пользователь
Сообщений: Регистрация: 23.01.2015
15.05.2015 06:43:15
Цитата
Дмитрий пишет: Здравствуйте! Также обнаружил, что любой вызов функции getScriptPath() в скрипте индикатора (и вообще любого скрипта, находящегося в папке LuaIndicators) приводит к зависанию терминала при попытке открыть окно добавления индикатора на график, но только в том случае, если вызов getScriptPath() производится не внутри какой-либо другой функции (типа Init(), OnCalculate() и т.п.). Версия терминала 6.16.0.42
Здравствуйте, Мы в курсе описанной проблемы. Она будет исправлена в одной из следующих версий программы.
Пользователь
Сообщений: Регистрация: 01.02.2015
21.05.2015 16:07:55
если не секрет: причина в отсутствии pcall?
Michael Bulychev
Гость
22.05.2015 05:19:28
Не секрет - нет, причина не в этом.
Пользователь
Сообщений: Регистрация: 31.01.2015
24.05.2015 01:30:45
Решил не создавать новую тему, эта вполне подходит по названию.
Читаем документацию QLua.chm :
Цитата
SetValue Функция предназначена для установки указанного значения на выбранной линии определенной свечи индикатора: Формат вызова: BOOLEAN SetValue(NUMBER index, NUMBER line_number, NUMBER value) Параметры:
index – индекс свечи;
line_number – номер линии;
value – индекс первой свечки. Первая (самая левая) свечка имеет индекс 0.
Ясно, что value – это не индекс первой свечки, а значение, которое мы устанавливаем. Однако, эта "опечатка" - еще не беда.
Беда в том, что из следующего за этим предложения "Первая (самая левая) свечка имеет индекс 0." легко можно прийти к выводу, что для функций SetValue, GetValue и SetRangeValue нумерация свечей индикатора начинается с 0. В то же время несложный тест показывает, что это не так - нумерация на самом деле начинается с 1. На всякий случай прошу разработчиков разъяснить - это действительно ошибка в документации или же ошибка в работе перечисленных функций? А также впоследствии прошу ее исправить.
Заметил также еще одну особенность работы функций SetValue и SetRangeValue - если с их помощью установить значения индикатора (индикатор рисовал в отдельном окне), которые выходят за границы минимальных/максимальных значений индикатора, установленных ранее с помощью return в OnCalculate, то новые значения в итоге не видны, так как оказываются за границами окна (автомасштабирование на такую смену значений индикатора не реагирует). Прошу исправить это в следующих версиях терминала.
Пользователь
Сообщений: Регистрация: 01.02.2015
24.05.2015 02:50:35
насчёт документации разработчикам уже даже и перестал напоминать :) )) просто отчаился - это бесполезно. Даже тему создал: а в ответ - тишина. думаю, недолго осталось - эволюция сделает своё дело - безответственные фирмы - рано или поздно разваливаются...
Пользователь
Сообщений: Регистрация: 23.01.2015
25.05.2015 16:52:03
Цитата
Дмитрий пишет: это действительно ошибка в документации или же ошибка в работе перечисленных функций?
Здравствуйте, Это ошибка в документации, мы ее обязательно поправим.
Цитата
Дмитрий пишет: если с их помощью установить значения индикатора (индикатор рисовал в отдельном окне), которые выходят за границы минимальных/максимальных значений индикатора, установленных ранее с помощью return в OnCalculate, то новые значения в итоге не видны
Указанная проблема у нас не воспроизводится. Тестировали на терминале версии 6.17.1.17. Если у Вас терминал более старой версии, выполните обновление. Если такой же версии, приведите пример скрипта.
Пользователь
Сообщений: Регистрация: 31.01.2015
25.05.2015 21:56:33
Цитата
Sergey Gorokhov пишет: Указанная проблема у нас не воспроизводится. Тестировали на терминале версии 6.17.1.17. Если у Вас терминал более старой версии, выполните обновление. Если такой же версии, приведите пример скрипта.
Я тестировал на терминале точно такой же версии (на часовом графике, отключив связь с сервером). Вот пример скрипта:
Код
Settings =
{
Name = "Test",
line =
{
{
Name = "Hour",
Color = RGB(0, 255, 0),
Type = TYPE_HISTOGRAM
}
}
}
function Init()
return 1
end
function OnCalculate(index)
if index == 9 then
for i = 1, 8 do
SetValue(i, 1, i) -- 2) получаем значения индикатора: 1, 2, 3, 4, 5, 6, 7, 8, 18
end
end
SetRangeValue(1, 2, 4, -3) -- 3) получаем значения индикатора: 1, -3, -3, -3, 5, 6, 7, 8, 18
return T(index).hour -- 1) получаем значения индикатора: 10, 11, 12, 13, 14, 15, 16, 17, 18
end
В итоге в (отдельном) окне с индикатором отображается шкала по вертикали от 9 до 24 и все первые 8 значений индикатора не видны.
Пользователь
Сообщений: Регистрация: 23.01.2015
25.05.2015 23:53:24
Здравствуйте!
Информация получена, проблема изучается. Постараемся в ближайшее время дать ответ.
Документация будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
QUIK clients support
Сообщений: Регистрация: 23.01.2015
26.05.2015 07:58:08
Дмитрий, Добрый день. Документация будет исправлена в одной из очередных версий программы. Приносим извинения за причинённые неудобства.
Пользователь
Сообщений: Регистрация: 31.01.2015
03.06.2015 01:52:50
Цитата
Дмитрий пишет: Заметил также еще одну особенность работы функций SetValue и SetRangeValue - если с их помощью установить значения индикатора (индикатор рисовал в отдельном окне), которые выходят за границы минимальных/максимальных значений индикатора, установленных ранее с помощью return в OnCalculate, то новые значения в итоге не видны, так как оказываются за границами окна (автомасштабирование на такую смену значений индикатора не реагирует).
Здравствуйте! Удалось ли воспроизвести проблему с помощью приведенного мною скрипта?
Дмитрий пишет: Заметил также еще одну особенность работы функций SetValue и SetRangeValue - если с их помощью установить значения индикатора (индикатор рисовал в отдельном окне), которые выходят за границы минимальных/максимальных значений индикатора, установленных ранее с помощью return в OnCalculate, то новые значения в итоге не видны, так как оказываются за границами окна (автомасштабирование на такую смену значений индикатора не реагирует).
Здравствуйте! Удалось ли воспроизвести проблему с помощью приведенного мною скрипта?
Да, описанное поведение воспроизводится. Ответа по проблеме пока нет.
Пользователь
Сообщений: Регистрация: 30.01.2015
03.06.2015 10:01:04
Было бы неплохо также распространить автомасштабирование на установленные метки.
Пасхалочка для Алексея Иванникова:
Пользователь
Сообщений: Регистрация: 23.01.2015
03.06.2015 10:20:15
Цитата
s_mike@rambler.ru пишет: Было бы неплохо также распространить автомасштабирование на установленные метки.
Михаил, Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Sergey Gorokhov пишет: Указанная проблема у нас не воспроизводится. Тестировали на терминале версии 6.17.1.17. Если у Вас терминал более старой версии, выполните обновление. Если такой же версии, приведите пример скрипта.
Я тестировал на терминале точно такой же версии (на часовом графике, отключив связь с сервером). Вот пример скрипта:
Код
Settings =
{
Name = "Test",
line =
{
{
Name = "Hour",
Color = RGB(0, 255, 0),
Type = TYPE_HISTOGRAM
}
}
}
function Init()
return 1
end
function OnCalculate(index)
if index == 9 then
for i = 1, 8 do
SetValue(i, 1, i) -- 2) получаем значения индикатора: 1, 2, 3, 4, 5, 6, 7, 8, 18
end
end
SetRangeValue(1, 2, 4, -3) -- 3) получаем значения индикатора: 1, -3, -3, -3, 5, 6, 7, 8, 18
return T(index).hour -- 1) получаем значения индикатора: 10, 11, 12, 13, 14, 15, 16, 17, 18
end
В итоге в (отдельном) окне с индикатором отображается шкала по вертикали от 9 до 24 и все первые 8 значений индикатора не видны.
Добрый день,
Описанная ошибка будет исправлена в одной из ближайших версий программы. Приносим извинения за причиненные неудобства.
к ответу на основной вопрос топика - похоже не только я один с таким сталкивался. А вот и ответ: фраза:
Цитата
2. В теле индикатора (за пределами функций) нельзя указывать ничего, кроме "тупых" присваиваний. Кстати, определение функций, с точки зрения луа, это тоже "тупое" присваивание. Иначе индикатор просто не появится в списке. Так строка в теле индикатора log=FilePath.."\"..FileName (кроме присваивания, есть вычисление) не даст появится ему в списке.
если вынести основную мысль и перенести по аналогии то получим:
похоже когда свойству в таблице параметров метки прямо указываешь в качестве значения формулу да ещё и с функцией - QLua этого переварить не может. А когда по отдельности - через буферную переменную - то всё ОК. Что было мной подтверждено выше. Так что тут не только и не столько была проблема с getScriptPath - сколько вот в таких "мелочах" и недосказанностях.
Но, как всегда, истинную причину нам опять не сказали. В общем, всё приходится вытягивать.
Дмитрий пишет: В итоге в (отдельном) окне с индикатором отображается шкала по вертикали от 9 до 24 и все первые 8 значений индикатора не видны.
Описанная ошибка будет исправлена в одной из ближайших версий программы.
А я предлагаю добавить отдельную опцию для индикаторов "Автоматически масштабировать" - иногда требуется видеть только близкие к цене значения индикатора, а далёкие от графика цены - не важны.
Надо делать так, как надо. А как не надо - делать не надо.
Дмитрий пишет: В итоге в (отдельном) окне с индикатором отображается шкала по вертикали от 9 до 24 и все первые 8 значений индикатора не видны.
Описанная ошибка будет исправлена в одной из ближайших версий программы.
А я предлагаю добавить отдельную опцию для индикаторов "Автоматически масштабировать" - иногда требуется видеть только близкие к цене значения индикатора, а далёкие от графика цены - не важны.
Добрый день.
Ваше пожелание зарегистрировано.
QUIK clients support
Сообщений: Регистрация: 27.01.2015
23.06.2015 10:28:53
Цитата
s_mike@rambler.ru пишет: Было бы неплохо также распространить автомасштабирование на установленные метки.
Добрый день,
Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.
Sergey Gorokhov пишет: Указанная проблема у нас не воспроизводится. Тестировали на терминале версии 6.17.1.17. Если у Вас терминал более старой версии, выполните обновление. Если такой же версии, приведите пример скрипта.
Я тестировал на терминале точно такой же версии (на часовом графике, отключив связь с сервером). Вот пример скрипта:
Код
Settings =
{
Name = "Test",
line =
{
{
Name = "Hour",
Color = RGB(0, 255, 0),
Type = TYPE_HISTOGRAM
}
}
}
function Init()
return 1
end
function OnCalculate(index)
if index == 9 then
for i = 1, 8 do
SetValue(i, 1, i) -- 2) получаем значения индикатора: 1, 2, 3, 4, 5, 6, 7, 8, 18
end
end
SetRangeValue(1, 2, 4, -3) -- 3) получаем значения индикатора: 1, -3, -3, -3, 5, 6, 7, 8, 18
return T(index).hour -- 1) получаем значения индикатора: 10, 11, 12, 13, 14, 15, 16, 17, 18
end
В итоге в (отдельном) окне с индикатором отображается шкала по вертикали от 9 до 24 и все первые 8 значений индикатора не видны.
Добрый день,
Описанная в данном инциденте ошибка была исправлена в версии 7.0.0 терминала QUIK. Данная версия терминала была выслана всем брокерам, использующим систему QUIK вчера, 07.10.2015, в установленном порядке передачи обновлений . Рекомендуем Вам дождаться обновления версии терминала у Вашего брокера и обновить Ваш терминал.
Приносим извинения за причиненные неудобства.
QUIK clients support
Сообщений: Регистрация: 22.12.2014
05.09.2016 11:45:54
Цитата
Дмитрий написал: Решил не создавать новую тему, эта вполне подходит по названию.
Читаем документацию QLua.chm :
Цитата
SetValue
Функция предназначена для установки указанного значения на выбранной линии определенной свечи индикатора: Формат вызова: BOOLEAN SetValue(NUMBER index, NUMBER line_number, NUMBER value)
Параметры: index – индекс свечи; line_number – номер линии; value – индекс первой свечки. Первая (самая левая) свечка имеет индекс 0.
Ясно, что value – это не индекс первой свечки , а значение, которое мы устанавливаем. Однако, эта "опечатка" - еще не беда.
Беда в том, что из следующего за этим предложения " Первая (самая левая) свечка имеет индекс 0." легко можно прийти к выводу, что для функций SetValue, GetValue и SetRangeValue нумерация свечей индикатора начинается с 0. В то же время несложный тест показывает, что это не так - нумерация на самом деле начинается с 1. На всякий случай прошу разработчиков разъяснить - это действительно ошибка в документации или же ошибка в работе перечисленных функций? А также впоследствии прошу ее исправить.
Заметил также еще одну особенность работы функций SetValue и SetRangeValue - если с их помощью установить значения индикатора (индикатор рисовал в отдельном окне), которые выходят за границы минимальных/максимальных значений индикатора, установленных ранее с помощью return в OnCalculate, то новые значения в итоге не видны, так как оказываются за границами окна (автомасштабирование на такую смену значений индикатора не реагирует). Прошу исправить это в следующих версиях терминала.
Добрый день.
Данная проблема была устранена в версии 7.4.0 терминала QUIK.
Рекомендуем Вам обновить версию программы.
Приносим извинения за причинённые неудобства.
Пользователь
Сообщений: Регистрация: 02.02.2015
миру мир!
06.09.2016 05:04:29
Вот бы еще кто-нибудь потрудился пояснить как именно исправлена ошибка с SetValue
QUIK clients support
Сообщений: Регистрация: 27.01.2015
06.09.2016 07:57:54
Цитата
swerg написал: Вот бы еще кто-нибудь потрудился пояснить как именно исправлена ошибка с SetValue
Добрый день,
В руководстве пользователя QLUA.chm исправлено описание на следующее: value - устанавливаемое значение. Параметр может иметь значение «nil». Функция возвращает «true» в случае успешного завершения, иначе – «false».