ParamRequest и CancelParamRequest в индикаторах

Страницы: 1
RSS
ParamRequest и CancelParamRequest в индикаторах, ACCESS VIOLATION
 
Код
Settings = {
  Name = 'ParamRequest',
  line = {
    { Name = 'ParamRequest' }
  }
}

function Init()
  return #Settings.line
end

local class_code, sec_code
function OnChangeSettings()
  OnDestroy()
  local DSI = getDataSourceInfo()
  class_code = DSI.class_code
  sec_code = DSI.sec_code
  PrintDbgStr(tostring(sec_code))
  ParamRequest(class_code, sec_code, 'LAST')
end

function OnCalculate(index)
  if index == 1 then
    ParamRequest(class_code, sec_code, 'LAST')
  end
  return nil
end

function OnDestroy()
  if sec_code then
    CancelParamRequest(class_code, sec_code, 'LAST')
  end
end

При добавлении / удалении индикатора возникают ошибки:
Цитата
Function OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CC
ACCESS VIOLATION at address 000007FC524B89CC

Что не так?
Надо делать так, как надо. А как не надо - делать не надо.
 
разве функция ParamRequest есть в списке разрешенных к использованию в индикаторах?
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
s_mike@rambler.ru, есть.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Старатель написал:
При добавлении / удалении индикатора возникают ошибки:
Function OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CCACCESS VIOLATION at address 000007FC524B89CC
  Такое сообщение об ошибках - это ошибка QUIK независимо от текста кода скрипта, порождающего это сообщение.  Если есть ошибка при использовании интерфейсных функций QUIK, то должны выдаваться понятные большинству пользователям сообщения об его ошибке.

2.   QUIK 9.7  Qlua 5.4
Индикатор:
Код
Settings={}
Settings.Name = "minimal"
function Init()
   return 1
end
local ind = {}
function OnCalculate(index)
  if not ind[index] then 
     ind[index] = 100
  else
     ind[index] = ind[index] + 100
  end  
  return ind[index]
end

Зачем двойная последовательность вызов функции OnCalculate(index)?:
1) index:  1, 2, 3  ….
2) index:  1, 2, 3  ….
И это, похоже, происходит в любых индикаторах.
Добавляйте в любой график, меняете, например, толщину линии и убеждайтесь.
 
Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?
  Это вопрос к поддержке.
  Что это за ноу-хау? Нельзя ли обойтись без повтора?
 
Цитата
Старатель написал:
Код
  Settings  =  {
  Name  =   'ParamRequest' ,
  line  =  {
    { Name  =   'ParamRequest'  }
  }
}

 function   Init ()
   return   # Settings.line
 end 

 local  class_code, sec_code
 function   OnChangeSettings ()
  OnDestroy()
   local  DSI  =   getDataSourceInfo ()
  class_code  =  DSI.class_code
  sec_code  =  DSI.sec_code
   PrintDbgStr (tostring(sec_code))
  ParamRequest(class_code, sec_code,  'LAST' )
 end 

 function   OnCalculate (index)
   if  index  =  =   1   then 
    ParamRequest(class_code, sec_code,  'LAST' )
   end 
   return   nil 
 end 

 function   OnDestroy ()
   if  sec_code  then 
    CancelParamRequest(class_code, sec_code,  'LAST' )
   end 
 end   

При добавлении / удалении индикатора возникают ошибки:
Цитата
Function OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CC
ACCESS VIOLATION at address 000007FC524B89CC

Что не так?
Предположу, что функция
getDataSourceInfo   вернула nil.
Все дальнейшие действия привели к попытке обратится к несуществующему адресу памяти.

Скорее всего эта ошибка связана с функцией  PrintDbgStr  
 
Все-таки:
Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?
  Вопрос задан две недели назад.
  Выложен код демонстрирующий ситуацию.
  В ветке по ссылки https://forum.quik.ru/messages/forum10/message64619/topic7524/#message64619 мучается пользователь.

 Где ответ поддержки?
 
Цитата
TGB написал:
Все-таки:
Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?
   Вопрос задан две недели назад.
  Выложен код демонстрирующий ситуацию.
  В ветке по ссылки  https://forum.quik.ru/messages/forum10/message64619/topic7524/#message64619  мучается пользователь.

 Где ответ поддержки?
Это другой случай.
В моем примере, повторный вызов приведет к отправке транзакции  с другим id  на 1 больше
так как id увеличивается в следующем операторе после транзакции.  
 
Цитата
nikolz написал:
В моем примере, повторный вызов приведет к отправке транзакции  с другим id  на 1 большетак как id увеличивается в следующем операторе после транзакции.  
 В выложенном фрагменте вашего скрипта этого нет.
 
Здравствуйте.

Цитата
Старатель написал:
При добавлении / удалении индикатора возникают ошибки:ЦитатаFunction OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CCACCESS VIOLATION at address 000007FC524B89CCЧто не так?
Проблема изучается. Постараемся в ближайшее время дать ответ.

Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?:1) index:  1, 2, 3  ….2) index:  1, 2, 3  ….И это, похоже, происходит в любых индикаторах.Добавляйте в любой график, меняете, например, толщину линии и убеждайтесь.
Проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Alexey Danin написал:
Здравствуйте.

Цитата
Старатель написал:
При добавлении / удалении индикатора возникают ошибки:ЦитатаFunction OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CCACCESS VIOLATION at address 000007FC524B89CCЧто не так?
Проблема изучается. Постараемся в ближайшее время дать ответ.

Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?:1) index:  1, 2, 3  ….2) index:  1, 2, 3  ….И это, похоже, происходит в любых индикаторах.Добавляйте в любой график, меняете, например, толщину линии и убеждайтесь.
Проблема изучается. Постараемся в ближайшее время дать ответ.
Алексей Данин, можете не утруждаться.
Несколько лет назад ваши предшественники в поте лица уже изучали эту проблему. Порешили всем коллективом, что данное поведение является нормальным, такова реализация. Наваяла как смогла.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Здравствуйте.

Цитата
Старатель написал:
При добавлении / удалении индикатора возникают ошибки:ЦитатаFunction OnChangeSettings: ACCESS VIOLATION at address 000007FC524B89CCACCESS VIOLATION at address 000007FC524B89CC
Действительно, в ПО QLUA есть ошибка вызова методов ParamRequest и CancelParamRequest из Lua скрипта индикатора. Мы исправим её в очередном обновлении ПО.

Приносим извинения за причинённые неудобства.
 
Добрый день.

Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?:1) index:  1, 2, 3  ….2) index:  1, 2, 3  ….

Действительно метод OnCalculate может срабатывать не один раз при изменении параметров индикатора.
Данная проблема будет устранена в одной из очередных версий ПО.
Приносим извинения за причиненные неудобства.
 
Цитата
Karina Dmitrieva написал:
Добрый день.

Цитата
TGB написал:
Зачем двойная последовательность вызов функции OnCalculate(index)?:1) index:  1, 2, 3  ….2) index:  1, 2, 3  ….

Действительно метод OnCalculate может срабатывать не один раз при изменении параметров индикатора.
Данная проблема будет устранена в одной из очередных версий ПО.
Приносим извинения за причиненные неудобства.
Метод OnCalculate  обязательно срабатывает два раза на для всей истории свечей в следующих случаях
1)  Когда первый раз загружается индикатор на график
2) Когда вносятся изменения в settings уже загруженного индикатора
------------------  
Если изменения не вносятся, а лишь вызывается редактирование, то метод срабатывает лишь один раз.
===========  
Таким образом в 1 и 2 случаях выполняется два раза идентичный расчет всего индикатора для всей истории свечей.
т е бессмысленная трата времени процессора и зависание квика.
 
Цитата
Karina Dmitrieva написал:
Действительно метод OnCalculate может срабатывать не один раз при изменении параметров индикатора. Данная проблема будет устранена в одной из очередных версий ПО.Приносим извинения за причиненные неудобства.
  При этом, наверное, надо учесть комментарий s_mike@rambler.ru: https://forum.quik.ru/messages/forum10/message65184/topic7529/#message65184
 
Про это уже говорилось разработчикам неоднократно, уже много лет назад. Даже не помню когда первый раз. Зачем - так и нет ответа. Видимо, особенность, которая мало волнует большинство пользователей. А это брюзжание скрипто-писателей мало значимо.
Страницы: 1
Читают тему
Наверх