Индикатор на lua

Страницы: 1
RSS
Индикатор на lua, Значение индикатора не меняется при смене инструмента
 
Уважаемые форумчане! Нужна помощь начинающему.

На графике нужна линия лоя предыдущего дневного бара по активу, график которого в данный момент открыт.

Из таблицы текущих торгов создано 2 графика: пятиминутный и дневной с идентификатором ACTIVE (оба графика привязываю к таблице текущих торгов). Добавляю написанный скрипт на пятиминутку. Происходит следующее - рисуется линия с ценой на момент добавления индикатора на график. При смене инструмента линия не перерисовывается.

Пример: открыт график NLMK, добавляю индикатор - рисуется линия на отметке 165,7; перелистываю график на CHMF - линия там же, а должна быть на отметке 1160,6.

Прошу, подскажите, как изменить скрипт, чтобы он работа корректно.

Код, который написан мной, приведен ниже.
--------------------------------------------------------------------------------------------------------------------------
Settings=
{ Name = "1.aaa",
line =
{ Name = "Low",
Color = RGB(34,177,76),
Type = TYPE_DASH,
Width = 1
}
}

x = getNumCandles('ACTIVE') -- расчет количества баров на дневном графике с идентификатором "ACTIVE"
ACTIVE, ACTIVE_N, ACTIVE_Name = getCandlesByIndex('ACTIVE', 0, 0, x) -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE"
L1_ACTIVE = ACTIVE[ACTIVE_N-2].low -- low -1 бара

function Init()
return 1
end

function OnCalculate(index)
return L1_ACTIVE -- вывожу искомое значение
end
 
У Вас значения вычисляются лишь один раз при запуске скрипта
Чтобы значение пересчитывалось надо вычисления поместить в функцию OnCalculate
Попробуйте так:
Код
function Init()
return 1
end

function OnCalculate(index)
x = getNumCandles('ACTIVE') -- расчет количества баров на дневном графике с идентификатором "ACTIVE"
ACTIVE, ACTIVE_N, ACTIVE_Name = getCandlesByIndex('ACTIVE', 0, 0, x) -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE"
L1_ACTIVE = ACTIVE[ACTIVE_N-2].low -- low -1 бара
return L1_ACTIVE -- вывожу искомое значение
end
 
Такой вариант тоже испробован. При добавлении индикатора, Квик просто перестает отвечать (висит). Приходится перезагружать программу полностью.
Может знаете еще какой-нибудь способ?
 
Цитата
nikolz написал:
У Вас значения вычисляются лишь один раз при запуске скрипта
Чтобы значение пересчитывалось надо вычисления поместить в функцию OnCalculate
Попробуйте так:
Код
   function   Init ()
 return   1 
 end 

 function   OnCalculate (index)
x  =   getNumCandles ( 'ACTIVE' )  -- расчет количества баров на дневном графике с идентификатором "ACTIVE" 
ACTIVE, ACTIVE_N, ACTIVE_Name  =   getCandlesByIndex ( 'ACTIVE' ,  0 ,  0 , x)  -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE" 
L1_ACTIVE  =  ACTIVE[ACTIVE_N -  2 ].low  -- low -1 бара 
 return  L1_ACTIVE  -- вывожу искомое значение 
 end 
 
Спустя время квик выдает 17 тысяч оповещений.

C:\QuikFinam\LuaIndicators\aaa.lua:19: attempt to index a nil value (field '?')
 
Цитата
Энн написал:
Цитата
nikolz написал:
У Вас значения вычисляются лишь один раз при запуске скрипта
Чтобы значение пересчитывалось надо вычисления поместить в функцию OnCalculate
Попробуйте так:  
Код
      function    Init ()
  return     1  
  end  

  function    OnCalculate (index)
x   =     getNumCandles  (  'ACTIVE'  )   -- расчет количества баров на дневном графике с идентификатором "ACTIVE"  
ACTIVE, ACTIVE_N, ACTIVE_Name   =     getCandlesByIndex  (  'ACTIVE'  ,   0  ,   0  , x)   -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE"  
L1_ACTIVE   =   ACTIVE[ACTIVE_N  -    2  ].low   -- low -1 бара  
  return   L1_ACTIVE   -- вывожу искомое значение  
  end  
   
 
Спустя время квик выдает 17 тысяч оповещений.

C:\QuikFinam\LuaIndicators\aaa.lua:19: attempt to index a nil value (field '?')
в 19 строке параметр не определен. Ищите в своем коде 19 строку и проверяйте что там. 17 тысяч - это число рпз вызова OnCalculate
Если Вам не надо обрабатывать все свечи ( в вашем случае это так то попробуйте так
Код
 function   OnCalculate (index)
if index==1 then
x  =   getNumCandles ( 'ACTIVE' )  -- расчет количества баров на дневном графике с идентификатором "ACTIVE" 
ACTIVE, ACTIVE_N, ACTIVE_Name  =   getCandlesByIndex ( 'ACTIVE' ,  0 ,  0 , x)  -- поиск параметров конкретного бара на дневном графике с идентификатором "ACTIVE" 
L1_ACTIVE  =  ACTIVE[ACTIVE_N -  2 ].low  -- low -1 бара 
end
 return  L1_ACTIVE  -- вывожу искомое значение 
 end 
 
ставьте вывод в лог файл и отлаживайте свой скрипт.
Я вам написал что не так.
Но как Вам надо знаете лишь Вы. Никто за Вас делать не будет.
--------------------------
Рекомендую изучить документацию на библиотеку QLua и программирование на Lua
Там есть функции которые Вам надо применить.
Страницы: 1
Читают тему
Наверх