Обновил версию квика до 7.6.0.81 На предыдущей версии прекрасно работал индикатор, который выводил уровень открытия дня в виде жирных точек. ВОт полный текст:
Settings = { Name = "Day Open Price", line = { { Name = "Open", Color = 0xd7ff, Type = TYPE_POINT, Width = 2 } } }
function Init() return #Settings.line end
price_begin_day = nil
function OnCalculate(indx) -- если новый день, то сохраняем цену начала дня if T(indx).hour <= 10 and T(indx).min == 0 then price_begin_day = O(indx) end return price_begin_day end
Однако на версии 7.6 он почему-то начал выдавать серию ошибок следующего содержания:
Open_Day.lua:20: attempt to index a nil value
20я строка это которая if T(indx).hour <= 10 and T(indx).min == 0 then т.е. получается, что функция OnCalculate(indx) вызывается энное количество раз с параметром nil Количество таких срабатываний в конце рабочего дня составляет больше 50и раз (точно считать совсем не хочется), при том, что всего свечей на 5и минутном графике, где этот индикатор рисуется 3324. Просьба проверить, похоже на какую-то ошибку.
Здравствуйте, Описанная проблема у нас не повторяется. Единственное, есть версия, что ошибку возвращает какой-то другой, параллельно работающий, скрипт. Проверьте этот момент. Если разобраться не получится, просьба прислать для анализа, на адрес quiksupport@arqatech.com копию всей папки с проблемным терминалом QUIK (без ключей доступа). В письме укажите ссылку на эту ветку форума.
Покопал более детально, что за ошибка возникает в скрипте. Вот в чем дело: у меня под графиком цены, есть еще график суммарного спроса и суммарного предложения, так вот в периоды клиринга в обеих версиях 7.5 и 7.6 свечи рисуются одинаково - у цены есть свеча 18:40, затем три пустых интервала, и затем свеча 19:00. В то время как свечи спроса и предложений присутствуют в эти пустые интервалы. Так вот - в версии 7.5 когда строятся индикаторы, на пропущенных свечах в цене OnCalculate не запускается. А вот в версии 7.6 OnCalculate запускается на этих пропущенных свечах, и всё было бы хорошо, если бы не одна проблема: значение T(index) на этих интервалах равно nil Отсюда и все проблемы с индикаторами.
Здравствуйте, Действительно, в 7.6 поведение изменилось. В предыдущих версиях, на пропущенных свечках время выводилось, а вместо цены был 0. Данное поведение было признано некорректным, так как 0 означает наличие данных, а не их отсутствие. В связи с чем, начиная с 7.6 на пропущенных свечках выводится nil по всем параметрам (в том числе и по времени). И это правильно, так как отсутствие свечи это отсутствие данных. Однако, к сожалению, данное исправление по ошибке не попало в список изменений. Приносим извинения за неудобства.
В качестве решения, Вам нужно добавить в скрипте проверку на наличие данных, примерно следующим образом:
Код
function OnCalculate(indx)
-- если новый день, то сохраняем цену начала дня
if T(indx) and T(indx).hour <= 10 and T(indx).min == 0 then
price_begin_day = O(indx)
end
return price_begin_day
end
Sergey Gorokhov написал: И это правильно, так как отсутствие свечи это отсутствие данных.
Что же тут правильного? Если свечи нет, то не должно быть и вызова OnCalculate на эту свечу. Если же свеча вызывается, то логично, чтобы для этой свечи существовали те параметры, которые про нее известны. Логично, что цена отсутствует, тогда и пусть будет nil. Но у этих пропущенных свечей есть время. ТАк почему тогда время должно равняться для них nil? В чем логика?
Проверку на nil и добавил как только нашел ошибку. Но не хотелось бы переделывать работающий индикатор под непонятную логику. И есть еще одна загвоздка и пожелание - сейчас, насколько я понимаю, при добавлении LUA индикатора на график, его сприпт "запоминается", и при следующих запусках квика уже не загружается заново с диска. Теперь представьте себе терминал, на котором штук 5-7 (минимум) вкладов, и на каждой вкладке по 5-7 окон с разными графикам. На каждом из них добавлен этот индикатор, который ни с того ни с сего перестает корректно работать...... Это надо в каждом окне его зайти, удалить, и потом добавить. Представляете трудоемкость?
Я предлагаю сделать вот что - чтобы все внешние индикаторы загружались с диска заново, тогда будет возможность переписать код, и "применить" его без трудоемких операций.
p.s. лично меня в описанной в теме ситуации спасло только то, что у меня основное тело индикатора написано во внешнем файле, который запускается оператором dofile. Иначе я бы долго матерился, и не исключено, что очень долго бы не хотел переходить на версию 7.6. Я думаю, разработчикам квика от этого никакой пользы нет )
Sergey Gorokhov написал: И это правильно, так как отсутствие свечи это отсутствие данных.
Что же тут правильного? Если свечи нет, то не должно быть и вызова OnCalculate на эту свечу. Если же свеча вызывается, то логично, чтобы для этой свечи существовали те параметры, которые про нее известны. Логично, что цена отсутствует, тогда и пусть будет nil. Но у этих пропущенных свечей есть время. ТАк почему тогда время должно равняться для них nil? В чем логика?
Вызов OnCalculate происходит потому, что на одном графике свечи есть, поэтому он вызывается и для другого, где свечей нет, но оба графика в одном окне. Попросите разработчиков разделить вызов для графиков.
Sergey Gorokhov написал: И это правильно, так как отсутствие свечи это отсутствие данных.
Что же тут правильного? Если свечи нет, то не должно быть и вызова OnCalculate на эту свечу. Если же свеча вызывается, то логично, чтобы для этой свечи существовали те параметры, которые про нее известны. Логично, что цена отсутствует, тогда и пусть будет nil. Но у этих пропущенных свечей есть время. ТАк почему тогда время должно равняться для них nil? В чем логика?
Вызов OnCalculate происходит потому, что на одном графике свечи есть, поэтому он вызывается и для другого, где свечей нет, но оба графика в одном окне. Попросите разработчиков разделить вызов для графиков.
Тут что-то попроще. Вот только один график. Ни свечи, ни объема. Версия 7.6. Индикаторы ломаются. Геометрия поломается. [img]file:///F:/!!ScreenCaptures/PFE/gold.png[/img]
а ну только если. но тут уж ничего не поделаешь, ибо свечи например по другим показателям есть. Либо у окна делать параметр - "игнорировать интервалы, где нет всех свечей" )
Sergey Denegin написал: а ну только если. но тут уж ничего не поделаешь, ибо свечи например по другим показателям есть. Либо у окна делать параметр - "игнорировать интервалы, где нет всех свечей" )
Моим нелинейным индикаторам вообще-то все равно, ну поставлю еще костылики. Линейные могут пострадать.
Я как раз и привел пример, когда нет других показателей, а место под свечу зарезервировано. В видимой части ничего нет. Что они там видят за кадром - недоумеваю.
Правильно написали - время у свечи должно быть, ведь этот параметр существует. Остальные параметры - nil. Плюс свойство exists (или как там оно называется) должно быть установлено в false.
Constantin написал: Правильно написали - время у свечи должно быть, ведь этот параметр существует. Остальные параметры - nil. Плюс свойство exists (или как там оно называется) должно быть установлено в false.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Тут что-то попроще. Вот только один график. Ни свечи, ни объема. Версия 7.6. Индикаторы ломаются. Геометрия поломается. [img]file:///F:/!!ScreenCaptures/PFE/gold.png[/img]
Возможно у Вас в параметрах диаграммы стоит галочка в "Показывать пустые интервал" Попробуйте ее убрать.
[img]file:///F:/!!ScreenCaptures/PFE/gold2.png[/img] Нет галочки. Инструмент - GOLD, ИП: товарные фьючерсы, дневки. День - 24.06.2010. Если кто сможет - проверьте на повторяемость. Судя по многим тысячам выданных ошибок на многих индикаторах (много их у меня) такой дефект не один, или еще другие ошибки есть. Локализовать было не совсем удобно из-за большого количества графиков и индикаторов. Вернулся на 7.5. Дефект виден и там, но индикаторами проглатывается. Еще могу добавить, что резко перешел с 6.17 на 7.5 и почти сразу попробовал 7.6. Когда-то я встречал похожее при подключении области с открытым интересом. Но здесь нет лишних областей. Последний пример - сразу после начального создания.
Борис Гудылин, Класс FEG это иностранная площадка, она есть далеко не у всех брокеров. По всей видимости, график каким-то образом поврежден на стороне сервера. Вам нужно обратиться к брокеру указав на проблему.
Sergey Gorokhov написал: Борис Гудылин , Класс FEG это иностранная площадка, она есть далеко не у всех брокеров. По всей видимости, график каким-то образом поврежден на стороне сервера. Вам нужно обратиться к брокеру указав на проблему.
При возможности я посмотрю в 7.6 другие случаи, их было много тысяч. Но ронять мои индикаторы все равно не стоило.
Борис Гудылин, Еще раз, дело не в версии. Индикаторы ломаются потому что на графике дырка. А дырка на графике потому что на сервере брокера график поврежден. Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности. Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Sergey Gorokhov написал: Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Как можно предусмотреть логику того, что в новых версиях OnCalculate будет запускаться на полностью нулевые интервалы, где даже время равно NIL? А потом кто-то придумает туда писать слова "пустота"..... Логика то хоть какая-то должна быть.
Sergey Gorokhov написал: Борис Гудылин , Еще раз, дело не в версии. Индикаторы ломаются потому что на графике дырка. А дырка на графике потому что на сервере брокера график поврежден. Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности. Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Сергей.
Брокер использует ПО вашей разработки. Почему у него в графиках дырки - это лучше знать вам. Что очевидно - он не сам эти дырки запихивает в данные.
Вы же вместо того, чтобы устранить проблему, предлагаете пользователям обходить эти дырки, сооружая костыли.
Нужели на самом деле нет возможности привести ситуацию в порядок, чтобы у брокеров не возникали подобные проблемы?
-----------------
Я от пользователей получал кучу скриншотов, на которых есть косые данные на графиках. Например, свечи ohlc нет, а объём есть. Или другие столь же странные варианты. Конечно у них сразу же ломается любая алгоритмическая логика. Вы же понимаете, что на все косяки подобного рода заглушки поставить невозможно...
s_mike@rambler.ru, И что Вы предлагаете? Если график заведомо поврежден, надо чинить график, а не фильтровать данные в терминале. Или Вам известно что было 24го июня шестьлет назад?
Sergey Gorokhov написал: s_mike@rambler.ru , И что Вы предлагаете? Если график заведомо поврежден, надо чинить график, а не фильтровать данные в терминале. Или Вам известно что было 24го июня шесть лет назад?
Сергей.
Речь о следующем. График поврежден на компьютере брокера. Очевидно, что брокер сам подобную диверсию не устраивал. Значит, возникли какие-то обстоятельства, которые привели к тому что ПО, разработанное фирмой ARQA повело себя неправильно.
Вот с этим я и предлагаю разобраться.
Подобные "несуразности" возникали у разных брокеров не только 6 лет назад, они имеют место и сейчас. В довольно большом количестве. Основания - жалобы пользователей терминала QUIK, подкреплённые скриншотами.
Я их получаю, когда люди, заказавшие мне разработку, через какое-то время жалуются на проблему. После разбирательств оказывается,что проблема в покалеченных графиках.
s_mike@rambler.ru, Если Вы говорите что она повторяется значит у Вас есть примеры. Нам нужен пример, в идеале не старше месяца, чтобы провести адекватный анализ и найти причины. В частности нужна дата/время свечи, интервал графика, код инструмента/класса и кто брокер.
Sergey Gorokhov написал: s_mike@rambler.ru , Если Вы говорите что она повторяется значит у Вас есть примеры. Нам нужен пример, в идеале не старше месяца, чтобы провести адекватный анализ и найти причины. В частности нужна дата/время свечи, интервал графика, код инструмента/класса и кто брокер.
Ок, записал. При появлении нового прецедента отправлю вам на почту всю имеющуюся информацию.
Sergey Gorokhov написал: Борис Гудылин , Еще раз, дело не в версии. Индикаторы ломаются потому что на графике дырка. А дырка на графике потому что на сервере брокера график поврежден. Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности. Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Откуда такая уверенность? Давайте временно оставим брокера в покое. Я обещал посмотреть оставшиеся несколько тысяч ошибок. Вот, выделил еще одну. Упростил одну диаграмму, убирал индикаторы, пока эффект еще оставался. Для сравнения - версия 7.5, как бы, исходное состояние.
Инструмент всем знакомый, совсем свежий - RIH7, М1.. Кстати, при замене инструмента заголовок диаграммы автоматом не меняется, правил руками (или там вообще другой смысл какой-то заложен). Нет сомнения, что брокер подал много данных, может, дыры и есть, но на глаз не очень заметно. Как бы, на сервере брокера график не поврежден. И для версии 7.6. Картинка снята почти сразу после первой.
Данные обрезаны радикально. Это даже не дыра. Мой индикатор - один и тот же, но ему уже чинятся какие-то помехи. По тем параметрам, которые в нем есть, он должен выдать просто прямую линию, Одно и то же значение для всех подаваемых свечек. Пусть Вас не смущает, что на моем индикаторе другой инструмент - RIZ6. Пару дней назад он был и вверху, с теми же ошибками, нет возможности хранить все сочетания версий, индикаторов, инструментов, параметров,...
Чем "злоупотребляю" я, признаюсь сразу. Большим количеством индикаторов, их было много, оставил единственный. Если его убрать, то данных останется столько же мало, но дыра исчезнет. Возможно, где-то в документации или на просторах Интернета и можно найти ограничения на количество индикаторов, но за руку меня никто не хватал. Еще могу несколько суток не обращать внимания на QUIK, количество свечек может дорасти тысяч до 5. Обязан ли я каждый день перезагружать QUIK - не знаю, QUIK не требовал.
Предыстория у этой диаграммы очень богатая, несколько лет жила. Где была та развилка, с которой начался такой финал, и была ли она вообще - не ведаю.
Дополнительно могу сообщить, что чем-то похожая ситуация была с графиком RTSI, недели. Он переставал обновляться с правого конца в версии 6.17. Приспособился - создавал новую диаграмму, добавлял индикаторы со старыми параметрами, движение возобновлялось, как-то перебивался.
P.S. Извините, еще частный вопрос. В версии 6.17 при добавлении нового индикатора давалась возможность до его установки поменять параметры. В 7.5 он ставится с какими-то параметрами по умолчанию, потом приходится его искать и задавать нужные параметры. Это "бага" или "фича"? Мои индикаторы необычайно ресурсоемки по процессору и проходить лишнюю инициализацию слишком накладно. Ведь сейчас и так при добавлении или переопределении индикатора пересчитываются вообще все видимые индикаторы.
Sergey Gorokhov написал: Борис Гудылин , Пришлите пожалуйста Ваш код индикатора.
В натуральном виде - исключено, но, если будет время, попробую упростить его предельно (пока ошибка будет сохраняться). Про мои "злоупотребления" можете что-то сказать?
Борис Гудылин написал: Я про количество индикаторов (типа несколько десятков) в одном окне.
А что не так с количеством индикаторов? Несколько десятков это не много.
В QUIK есть неявные (по факту) ограничения на количество индикаторов в одном окне. Проявляются по-разному. Например. Если в основном окне индикаторов больше двух десятков, то замена инструмента начинает срабатывать лишь при существенном уменьшении числа индикаторов, сейчас не помню, то ли до 7, до ли до 17. Никакой реакции, никакой диагностики. Поснимаю "лишние" - замена инструмента заработает, потом возвращаю снятые обратно.
Борис Гудылин, Проблема у нас не воспроизводится. Просьба, уточнить как именно меняется инструмент. Какие индикаторы установлены, какие-то из Ваших, или встроенные?
Sergey Gorokhov написал: Борис Гудылин , Проблема у нас не воспроизводится. Просьба, уточнить как именно меняется инструмент. Какие индикаторы установлены, какие-то из Ваших, или встроенные?
У меня рука "тяжелая". Индикаторы только свои. Если будет время, попробую воссоздать ситуацию на моделях своих индикаторов.
Constantin, Добрый день, Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, что реализация пожелания признана потенциально целесообразной. Если по результатам дальнейшего анализа, включающего юридические аспекты, анализ на непротиворечивость с общей политикой компании, никаких возражений не возникнет, мы постараемся включить Ваше пожелание в план доработок при выпуске одной из следующих версий нашего ПО.