Получить в индикаторе значение цены ещё до OnCalculate()

Страницы: 1
RSS
Получить в индикаторе значение цены ещё до OnCalculate()
 
Здравствуйте.
Пишу индикатор. Мне нужно взять значение цены закрытия первого бара, чтобы постоянно использовать его в OnCalculate().
Проблема в том, что если брать цену первого бара в OnCalculate, то ОДНО И ТО ЖЕ значение первого бара будет браться каждый раз при выполнении OnCalculate() - то есть для каждой свечки/сделки.
А это не рационально в плане производительности.
Как вначале ОДНОКРАТНО получить значение цены первого бара (присвою глобальной переменной), а потом уже применять это значение в OnCalculate()?

Может, в Init() можно это сделать?
 
Цитата
Святослав написал:
Здравствуйте.
Пишу индикатор. Мне нужно взять значение цены закрытия первого бара, чтобы постоянно использовать его в OnCalculate().
Проблема в том, что если брать цену первого бара в OnCalculate, то ОДНО И ТО ЖЕ значение первого бара будет браться каждый раз при выполнении OnCalculate() - то есть для каждой свечки/сделки.
А это не рационально в плане производительности.
Как вначале ОДНОКРАТНО получить значение цены первого бара (присвою глобальной переменной), а потом уже применять это значение в OnCalculate()?

Может, в Init() можно это сделать?
Local bar1

function oncalculate(indx)

if indx == 1 then
bar1 = C(1)
end

остaльной текст индикатора

end
 
s_mike@rambler.ru,

Спасибо за ответ, но я хотел СОВСЕМ убрать ненужные повторяющиеся операции. В вашем решении при каждом OnCalculate будет производиться необязательный " if indx == 1 ", а выполнять этот if при каждой сделке не рационально. Я понимаю, что это миллионные доли секунды, но и самих сделок на МосБирже может быть тоже десятки тысяч в день.
А способа получить цену закрытия первого бара ещё до выполнения первого OnCalculate вы никакого не видите? Может, через функцию Main() от робота и засунуть в файл?
 
Цитата
Святослав написал:
СОВСЕМ убрать ненужные повторяющиеся операции.
Ну тогда запробуйте как-то так
Код
function OnCalculate(idx)
  local base_price = C(idx)
  OnCalcul ate = function(index)
    -- your code here
  end
end
 
Цитата
Anton написал:
Цитата
Святослав написал:
СОВСЕМ убрать ненужные повторяющиеся операции.
Ну тогда запробуйте как-то так
Код
   function   OnCalculate (idx)
   local  base_price  =  C(idx)
  OnCalcul ate  =   function (index)
     -- your code here 
   end 
 end 
  
так делать нельзя. Перезапуск индикатора может быть вследствие разных причин. Некоторые из которых могут  привести к изменению первой свечи.

что касается миллионных долей секунды - не нужно обращать на это внимание.
 
Цитата
s_mike@rambler.ru написал:
Перезапуск индикатора может быть вследствие разных причин.
Упс, действительно, про перезапуск не вспомнил.
 
можно так:
----------------
function oncalculate(indx)
if bar1 then
-- основное тело
else
bar1 = C(1)
end
--------------
Страницы: 1
Читают тему (гостей: 1)
Наверх