Кажется ошибка в OnCalculate в версии 7.6

Страницы: 1
RSS
Кажется ошибка в OnCalculate в версии 7.6
 
Обновил версию квика до 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.
Просьба проверить, похоже на какую-то ошибку.  
 
Здравствуйте,
Просьба уточнить по какому инструменту строится график.
Заранее спасибо.
 
фьючер ртс - RIZ6
подключен через финам.  
 
Здравствуйте,
Описанная проблема у нас не повторяется.
Единственное, есть версия, что ошибку возвращает какой-то другой, параллельно работающий, скрипт.
Проверьте этот момент.
Если разобраться не получится, просьба прислать для анализа, на адрес quiksupport@arqatech.com копию всей папки с проблемным терминалом QUIK (без ключей доступа). В письме укажите ссылку на эту ветку форума.
 
Покопал более детально, что за ошибка возникает в скрипте.
Вот в чем дело:
у меня под графиком цены, есть еще график суммарного спроса и суммарного предложения, так вот в периоды клиринга в обеих версиях 7.5 и 7.6 свечи рисуются одинаково -
у цены есть свеча 18:40, затем три пустых интервала, и затем свеча 19:00.
В то время как свечи спроса и предложений присутствуют в эти пустые интервалы.
Так вот - в версии 7.5 когда строятся индикаторы, на пропущенных свечах в цене OnCalculate  не запускается.
А вот в версии 7.6 OnCalculate  запускается на этих пропущенных свечах, и всё было бы хорошо, если бы не одна проблема:
значение T(index)  на этих интервалах равно nil
Отсюда и все проблемы с индикаторами.  
 
 
мне кажется это все-таки ошибка. Если уж OnCalculate и срабатывает, то хотя бы время свечей должно указываться.
 
Здравствуйте,
Действительно, в 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 
 
Приличные компании не изменяют поведение своих продуктов задним числом, да еще и втихаря. Они заботятся о пользователях.

А в некоторых лапотных компаниях о таких изменениях не знает даже техподдержка.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov написал:
И это правильно, так как отсутствие свечи это отсутствие данных.
Что же тут правильного? Если свечи нет, то не должно быть и вызова OnCalculate на эту свечу. Если же свеча вызывается, то логично, чтобы для этой свечи существовали те параметры, которые про нее известны. Логично, что цена отсутствует, тогда и пусть будет nil. Но у этих пропущенных свечей есть время. ТАк почему тогда время должно равняться для них nil? В чем логика?  
 
Проверку на nil и добавил как только нашел ошибку. Но не хотелось бы переделывать работающий индикатор под непонятную логику.
И есть еще одна загвоздка и пожелание - сейчас, насколько я понимаю, при добавлении LUA индикатора на график, его сприпт "запоминается", и при следующих запусках квика уже не загружается заново с диска.
Теперь представьте себе терминал, на котором штук 5-7 (минимум) вкладов, и на каждой вкладке по 5-7 окон с разными графикам.
На каждом из них добавлен этот индикатор, который ни с того ни с сего перестает корректно работать......
Это надо  в каждом окне его зайти, удалить, и потом добавить. Представляете трудоемкость?

Я предлагаю сделать вот что - чтобы все внешние индикаторы загружались с диска заново, тогда будет возможность переписать код, и "применить" его без трудоемких операций.

p.s. лично меня в описанной в теме ситуации спасло только то, что у меня основное тело индикатора написано во внешнем файле, который запускается оператором dofile. Иначе я бы долго матерился, и не исключено, что очень долго бы не хотел переходить на версию 7.6. Я думаю, разработчикам квика от этого никакой пользы нет )  
 
Цитата
Sergey Denegin написал:
Цитата
Sergey Gorokhov   написал:
И это правильно, так как отсутствие свечи это отсутствие данных.
Что же тут правильного? Если свечи нет, то не должно быть и вызова OnCalculate на эту свечу. Если же свеча вызывается, то логично, чтобы для этой свечи существовали те параметры, которые про нее известны. Логично, что цена отсутствует, тогда и пусть будет nil. Но у этих пропущенных свечей есть время. ТАк почему тогда время должно равняться для них nil? В чем логика?
Вызов OnCalculate происходит потому, что на одном графике свечи есть, поэтому он вызывается и для другого, где свечей нет, но оба графика в одном окне. Попросите разработчиков разделить вызов для графиков.
 
Цитата
Николай Камынин написал:
Попросите разработчиков разделить вызов для графиков.
В общем тоже логично. На цене свечей нет, значит и вызова не должно быть. Ну или уж передавать туда правильные данные, как я уже писал выше.  
 
Цитата
Николай Камынин написал:
Цитата
Sergey Denegin   написал:
Цитата
Sergey Gorokhov   написал:
И это правильно, так как отсутствие свечи это отсутствие данных.
Что же тут правильного? Если свечи нет, то не должно быть и вызова OnCalculate на эту свечу. Если же свеча вызывается, то логично, чтобы для этой свечи существовали те параметры, которые про нее известны. Логично, что цена отсутствует, тогда и пусть будет nil. Но у этих пропущенных свечей есть время. ТАк почему тогда время должно равняться для них nil? В чем логика?
Вызов OnCalculate происходит потому, что на одном графике свечи есть, поэтому он вызывается и для другого, где свечей нет, но оба графика в одном окне. Попросите разработчиков разделить вызов для графиков.
Тут что-то попроще. Вот только один график. Ни свечи, ни объема. Версия 7.6. Индикаторы ломаются. Геометрия поломается.
[img]file:///F:/!!ScreenCaptures/PFE/gold.png[/img]
 
Цитата
Борис Гудылин написал:
Геометрия поломается.
что тут ломается?  
 
Цитата
Sergey Denegin написал:
Цитата
Борис Гудылин   написал:
Геометрия поломается.
что тут ломается?
Допустим, угол наклона между хаями пары каких-то свечек. Вклинившееся пустое место повлияет на значение.
 
а ну только если. но тут уж ничего не поделаешь, ибо свечи например по другим показателям есть. Либо у окна делать параметр - "игнорировать интервалы, где нет всех свечей" )  
 
Цитата
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.
Когда-то я встречал похожее при подключении области с открытым интересом. Но здесь нет лишних областей. Последний пример - сразу после начального создания.
 
Борис Гудылин,

Уточните точный код инструмента и код класса.
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,

Уточните точный код инструмента и код класса.

Дополнительно, сообщите через какого брокера работаете.
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,

Уточните точный код инструмента и код класса.
FEG,  Gold, VTB24.
 
Борис Гудылин,
Класс FEG это иностранная площадка, она есть далеко не у всех брокеров.
По всей видимости, график каким-то образом поврежден на стороне сервера.
Вам нужно обратиться к брокеру указав на проблему.
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,
Класс FEG это иностранная площадка, она есть далеко не у всех брокеров.
По всей видимости, график каким-то образом поврежден на стороне сервера.
Вам нужно обратиться к брокеру указав на проблему.
При возможности я посмотрю в 7.6 другие случаи, их было много тысяч. Но ронять мои индикаторы все равно не стоило.  
 
Борис Гудылин,
Еще раз, дело не в версии.
Индикаторы ломаются потому что на графике дырка.
А дырка на графике потому что на сервере брокера график поврежден.
Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности.
Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
 
Цитата
Sergey Gorokhov написал:
Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Как можно предусмотреть логику того, что в новых версиях OnCalculate будет запускаться на полностью нулевые интервалы, где даже время равно NIL? А потом кто-то придумает туда писать слова "пустота"..... Логика то хоть какая-то должна быть.  
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,
Еще раз, дело не в версии.
Индикаторы ломаются потому что на графике дырка.
А дырка на графике потому что на сервере брокера график поврежден.
Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности.
Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Сергей.

Брокер использует ПО вашей разработки. Почему у него в графиках дырки - это лучше знать вам. Что очевидно - он не сам эти дырки запихивает в данные.

Вы же вместо того, чтобы устранить проблему, предлагаете пользователям обходить эти дырки, сооружая костыли.

Нужели на самом деле нет возможности привести ситуацию в порядок, чтобы у брокеров не возникали подобные проблемы?


-----------------

Я от пользователей получал кучу скриншотов, на которых есть косые данные на графиках. Например, свечи ohlc нет, а объём есть. Или другие столь же странные варианты. Конечно у них сразу же ломается любая алгоритмическая логика. Вы же понимаете, что на все косяки подобного рода заглушки поставить невозможно...

С ув.. и проч.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
И что Вы предлагаете?
Если график заведомо поврежден, надо чинить график, а не фильтровать данные в терминале.
Или Вам известно что было 24го июня шестьлет назад?
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
И что Вы предлагаете?
Если график заведомо поврежден, надо чинить график, а не фильтровать данные в терминале.
Или Вам известно что было 24го июня  шесть лет назад?
Сергей.

Речь о следующем. График поврежден на компьютере брокера. Очевидно, что брокер сам подобную диверсию не устраивал. Значит, возникли какие-то обстоятельства, которые привели к тому что ПО, разработанное фирмой ARQA повело себя неправильно.

Вот с этим я и предлагаю разобраться.

Подобные "несуразности" возникали у разных брокеров не только 6 лет назад, они имеют место и сейчас. В довольно большом количестве. Основания - жалобы пользователей терминала QUIK, подкреплённые скриншотами.

Я их получаю, когда люди, заказавшие мне разработку, через какое-то время жалуются на проблему. После разбирательств оказывается,что  проблема в покалеченных графиках.

Думаю,реакция пользователей вам понятна.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
Вот с этим я и предлагаю разобраться.
Как с этим разбираться если история была ШЕСТЬ лет назад?

Цитата
s_mike@rambler.ru написал:
Подобные "несуразности" возникали у разных брокеров не только 6 лет назад, они имеют место и сейчас.
Приведите пример и мы будем разбираться.
 
Цитата
Sergey Gorokhov написал:
Цитата
s_mike@rambler.ru   написал:
Вот с этим я и предлагаю разобраться.
Как с этим разбираться если история была ШЕСТЬ лет назад?
Цитата
s_mike@rambler.ru   написал:
Подобные "несуразности" возникали у разных брокеров не только 6 лет назад, они имеют место и сейчас.
Приведите пример и мы будем разбираться.
сергей, вы на самом деле считаете, что я храню коллекцию таких граф ков, чтобы пред явить вам в момент когда вы их попросите?   )))))
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru,
Если Вы говорите что она повторяется значит у Вас есть примеры.
Нам нужен пример, в идеале не старше месяца, чтобы провести адекватный анализ и найти причины.
В частности нужна дата/время свечи, интервал графика, код инструмента/класса и кто брокер.
 
Цитата
Sergey Gorokhov написал:
s_mike@rambler.ru  ,
Если Вы говорите что она повторяется значит у Вас есть примеры.
Нам нужен пример, в идеале не старше месяца, чтобы провести адекватный анализ и найти причины.
В частности нужна дата/время свечи, интервал графика, код инструмента/класса и кто брокер.
Ок, записал. При появлении нового прецедента отправлю вам на почту всю имеющуюся информацию.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,
Еще раз, дело не в версии.
Индикаторы ломаются потому что на графике дырка.
А дырка на графике потому что на сервере брокера график поврежден.
Естественно в обычной жизни такой ситуации не должно быть, однако причины мы выяснить не сможем, так как речь про историю шести летней давности.
Вам нужно либо предусмотреть в индикаторах логику проверки свечей на графике, либо указать Вашему брокеру на проблему и он ее устранит.
Откуда такая уверенность? Давайте временно оставим брокера в покое. Я обещал посмотреть оставшиеся несколько тысяч ошибок. Вот, выделил еще одну.
Упростил одну диаграмму, убирал индикаторы, пока эффект еще оставался.
Для сравнения - версия 7.5, как бы, исходное состояние.
   
Инструмент всем знакомый, совсем свежий - RIH7, М1.. Кстати, при замене инструмента заголовок диаграммы автоматом не меняется, правил руками (или там вообще другой смысл какой-то заложен).
Нет сомнения, что брокер подал много данных, может, дыры и есть, но на глаз не очень заметно. Как бы, на сервере брокера график не поврежден.
И для версии 7.6. Картинка снята почти сразу после первой.

Данные обрезаны радикально. Это даже не дыра.
Мой индикатор - один и тот же, но ему уже чинятся какие-то помехи.
По тем параметрам, которые в нем есть, он должен выдать просто прямую линию, Одно и то же значение для всех подаваемых свечек.
Пусть Вас не смущает, что на моем индикаторе другой инструмент - RIZ6.
Пару дней назад он был и вверху, с теми же ошибками, нет возможности хранить все сочетания версий, индикаторов, инструментов, параметров,...

Чем "злоупотребляю" я, признаюсь сразу.
Большим количеством индикаторов, их было много, оставил единственный. Если его убрать, то данных останется столько же мало, но дыра исчезнет.
Возможно, где-то в документации или на просторах Интернета и можно найти ограничения на количество индикаторов, но за руку меня никто не хватал.
Еще могу несколько суток не обращать внимания на QUIK, количество свечек может дорасти тысяч до 5. Обязан ли я каждый день перезагружать QUIK - не знаю, QUIK не требовал.

Предыстория у этой диаграммы очень богатая, несколько лет жила. Где была та развилка, с которой начался такой финал, и была ли она вообще - не ведаю.

Дополнительно могу сообщить, что чем-то похожая ситуация была с графиком RTSI, недели.
Он переставал обновляться с правого конца в версии 6.17. Приспособился - создавал новую диаграмму, добавлял индикаторы со старыми параметрами, движение возобновлялось, как-то перебивался.      

P.S. Извините, еще частный вопрос. В версии 6.17 при добавлении нового индикатора давалась возможность до его установки поменять параметры.
В 7.5 он ставится с какими-то параметрами по умолчанию, потом приходится его искать и задавать нужные параметры. Это "бага" или "фича"?
Мои индикаторы необычайно ресурсоемки по процессору и проходить лишнюю инициализацию слишком накладно.
Ведь сейчас и так при добавлении или переопределении индикатора пересчитываются вообще все видимые индикаторы.
 
Борис Гудылин,
Пришлите пожалуйста Ваш код индикатора.
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,
Пришлите пожалуйста Ваш код индикатора.
В натуральном виде - исключено, но, если будет время, попробую упростить его предельно (пока ошибка будет сохраняться).
Про мои "злоупотребления" можете что-то сказать?  
 
Борис Гудылин,
Возможность предварительной настройки пользовательских индикаторов была убрана.
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,
Возможность предварительной настройки пользовательских индикаторов была убрана.
Это не мое "злоупотребление".
Я про количество индикаторов (типа несколько десятков) в одном окне.
И про график длиной в 5000 свечек.  
 
Цитата
Борис Гудылин написал:
Я про количество индикаторов (типа несколько десятков) в одном окне.
А что не так с количеством индикаторов?
Несколько десятков это не много.

Цитата
Борис Гудылин написал:
И про график длиной в 5000 свечек.
На сервере есть ограничение в 3000 свечек, все остальное накапливает терминал.
 
Цитата
Sergey Gorokhov написал:
Цитата
Борис Гудылин   написал:
Я про количество индикаторов (типа несколько десятков) в одном окне.
А что не так с количеством индикаторов?
Несколько десятков это не много.
В QUIK есть неявные (по факту) ограничения на количество индикаторов в одном окне. Проявляются по-разному.
Например. Если в основном окне индикаторов больше двух десятков, то замена инструмента начинает срабатывать лишь при существенном уменьшении числа индикаторов, сейчас не помню, то ли до 7, до ли до 17.
Никакой реакции, никакой диагностики. Поснимаю "лишние" - замена инструмента заработает, потом возвращаю снятые обратно.  
 
Борис Гудылин,
Проблема у нас не воспроизводится.
Просьба, уточнить как именно меняется инструмент. Какие индикаторы установлены, какие-то из Ваших, или встроенные?
 
Цитата
Sergey Gorokhov написал:
Борис Гудылин  ,
Проблема у нас не воспроизводится.
Просьба, уточнить как именно меняется инструмент. Какие индикаторы установлены, какие-то из Ваших, или встроенные?
У меня рука "тяжелая". Индикаторы только свои.
Если будет время, попробую воссоздать ситуацию на моделях своих индикаторов.  
 
Constantin,      Добрый день,
    Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам,     что реализация пожелания признана потенциально целесообразной. Если     по результатам дальнейшего анализа, включающего юридические аспекты,     анализ на непротиворечивость с общей политикой компании, никаких     возражений не возникнет, мы постараемся включить Ваше пожелание в     план доработок при выпуске одной из следующих версий нашего ПО.
Страницы: 1
Читают тему
Наверх