getCandlesByIndex некорректно работает

Страницы: 1
RSS
getCandlesByIndex некорректно работает
 
Вот текст простого индикатора RateOfChange:
Settings =    
       {
       Name = "ROC2",
       line = {
           {Name = "ROC",
           Type = TYPE_LINE,
           Color = RGB(0, 0, 255)},
           {Name = "Horizontal line (top)",
           Type = TYPE_LINE,
           Color = RGB(100, 100, 100)},
           {Name = "Horizontal line (bottom)",
           Type = TYPE_LINE,
           Color = RGB(100, 100, 100)}

       },
       ID_Graph = "mov",
       per = 3,
       Horizontal_line = 0.1
       }

function Init()
   return 3
end

function OnCalculate(index)
   local pd = Settings.per
   local HL = Settings.Horizontal_line
   local gr, n, leg = getCandlesByIndex(Settings.ID_Graph, 0, index-pd-1, pd+1)
   if index > pd then    
       if n == nil then
           return nil
       end
       if n < pd+1 then
           return nil
       end
       if gr[0].close == nil or gr[0].close == 0 or gr[pd].close == nil then
           return nil    
       end
       return (gr[pd].close-gr[0].close)/gr[0].close*100,HL,-HL
   else
       return 0
   end
end

При помещении на график этот индикатор работает нормально. ID_Graph = "mov" - любая линия, как сам график так и другие индикаторы на графике.
На следующий день этот индикатор выдает странную почти горизонтальную линию не равную 0, при наведении курсора на которую подсказка со значением не выдается (явный глюк). Из кода видно что может выдаваться либо 3 линии (2е горизонтальные) либо одна равная 0 либо ничего. После входа в редактирование графика и нажатия ОК - все считается нормально. После смены ТФ - опять загадочная линия. Если индикатор убрать с графика и снова установить - все считается нормально на всех ТФ.
Получается каждый день на все графики этот индикатор нужно устанавливать заново иначе он не корретно работает.
Я связываю это с  функцией  getCandlesByIndex.
В чем проблема?
 
Загадочная линия - это 2е точки соединенные между собой. Первая - это первая свеча на графике на которой индикатор выдает 0. Вторая - последняя свеча на которой расчитывается некое значение. На всех остальных свечах - nill и поэтому получаем график из двух точек. Тип графика - линия, поэтому эти 2е точки соединены между собой линией. На всех свечах кроме этих двух  getCandlesByIndex ничего не выдает. Почему - вопрос.
 
Добрый день!

Вероятно, проблема вызвана тем, что в lua-скрипте индикатора ID графика прописан статично, а Вы используете данный индикатор для
     разных графиков.

В таком случае, на всех графиках, кроме того, ID которого прописан в скрипте, индикатор будет работать некорректно, а именно:
  • в случае первого применения, либо обновления (путем смены ТФ, открытия графика на редактирование и нажатия "Ок"), индикатор будет строиться по графику, ID которого вписан в скрипт.
  • при смене торговой сессии (наступлении следующего дня) или же обычном перезаказе данных, индикатор будет строить неверную картинку (прим.: прямую линию, наклон которой зависит от данных).
В связи с этим рекомендуем вам заняться доработкой представленного lua-скрипта, либо же использовать его только с тем графиком, ID которого в нем прописан.
 
Не понял.
Вы хотите сказать что в таблице индикатора Settings если я изменил параметры, то при смене торговой или при смене ТФ параметры поменяются на те которые были в файле индикатора?
 
А теперь правильный ответ, внимание на экран
Скрытый текст
 
 
Цитата
Anton написал:
А теперь правильный ответ, внимание на экран     Скрытый текст            
Кстати,да. Как то увлекся написанием индикатора и использовал  getCandlesByIndex. Потом заметил , что он не входит в список разрешенных для индикаторов. Однако до сих пор работает исправно.На всякий случай обложил его мессагами и поизучал. Хоть тресни - все правильно работает. Я ничего не понимаю . Может использование возможно , но с какими то оговорками ?
 
vladindre, Здравствуйте!

Ваше сообщение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Roman Azarov написал:
Ваше сообщение получено
Забыл добавить подробности. При запуске индикатора он при первоначальном переборе индексов , конечно ,брыкается и выдает сообщение типа неправильное обращение к nil. Но потом ,когда все индексы пройдет начинает тикать исправно и забирает данные с другого индикатора.Добавлял конечно message -все исправно забирает.
Ну вообще-то почему бы не сделать его доступным ? Сильно упростит написание индикаторов, а то постоянно приходится искать обходные пути. Читать через файл как-то не кошерно , да и дополнительную читалку надо прикручивать. А уж сделать программное считывание идентификатора графика вообще мечта.Не думаю что там какие-то фундаментальные ограничения имеются.
 
vladindre,

В таком случае просим предоставить скрипт, о котором вы говорите, для анализа.
 
Здравствуйте, vladindre.

Документация по Lua будет дополнена в одной из очередных версий программы.
Приносим извинения за причиненные неудобства.
 
Добрый день,

Описанная в данном инциденте ошибка была исправлена в версии 9.2 терминала QUIK.
Рекомендуем обновить версию программы.
Приносим извинения за причиненные неудобства.
Страницы: 1
Читают тему
Наверх