Индикатор работает, но выдает ошибку

Страницы: 1
RSS
Индикатор работает, но выдает ошибку, Просьба поправить код, чтобы не было ошибок
 
Написал небольшой индикатор, вроде работает, но выдает ошибку, что немного напрягает, кто может подправить?
Код
Settings=
{
 Name = "ColorVolume",
 line ={
 { Name = "VolUp",    Color = RGB( 0,128,0 ), Width = 2, Type = TYPE_HISTOGRAM },
 { Name = "VolDn",    Color = RGB( 255,0,0 ), Width = 2, Type = TYPE_HISTOGRAM },
 }
}
function Init()
 return 2
end

function OnCalculate(index)
 local VolUp = nil
 local VolDn = nil 
 if V(index)>V(index-1) then VolUp=V(index); else VolDn=V(index); end
  return VolUp,VolDn;
end
 
и еще попутно вопрос, можно ли подкрашивать отдельно взятые бары при выполнении определенного условия?
 
Цитата
Евгений написал:
и еще попутно вопрос, можно ли подкрашивать отдельно взятые бары при выполнении определенного условия?
на первой свече вы хотите получить объем нулевой свечи, которой нет.

бары подкрашивать нельзя. можно рисовать гистограмму или ставить метки
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
s_mike@rambler.ru написал:
на первой свече вы хотите получить объем нулевой свечи, которой нет.
спасибо, проблему решил
 
Цитата
Евгений написал:
Цитата
   s_mike@rambler.ru написал:
на первой свече вы хотите получить объем нулевой свечи, которой нет.
Тогда почему индикаторы выводит значения? свечки то не существует...
 
Цитата
Денис Лихачев написал:
function OnCalculate(index)
local VolUp = nil
local VolDn = nil
if V(index)>V(index-1) then VolUp=V(index); else VolDn=V(index); end
 return VolUp,VolDn;
end
У вас выводится  V(index),   а оно есть.
-----------------
 
Цитата
Николай Камынин написал:
У вас выводится  V(index),   а оно есть.
-----------------
Да, это я усвоил)) Нужно выполнять проверку на отсутствие значений.  
 
Цитата
Денис Лихачев написал:
Цитата
Николай Камынин написал:
У вас выводится  V(index),   а оно есть.
-----------------
Да, это я усвоил)) Нужно выполнять проверку на отсутствие значений.  
отвечаю на ваш вопрос в письме.
Если надо лишь последнее значение бара открытия позиции, то проще  
присвоить  номер бара переменной и сравнивать это значение с текущим номером бара
 
Цитата
Николай Камынин написал:
Цитата
проще присвоить  номер бара переменной
тип переменной table ?
 
Цитата
--
У меня есть глобальная переменная FuncPops(Emit,MyAccount) -- текущая чистая позиция(положительное/отрицательное значение)
далее объявляем лок переменную и присваиваем ей значение
   local TecPos=FuncPops(Emit,MyAccount)  -- далее
у нас открылась длинная позиция, и вот теперь что бы из неё выйти мы делаем проверку
   if TecPos > 0 then --если тек позиция больше нуля то...
вот если это условие выполнено, то у нас открыта длинная позиция
и теперь прежде чем проверить на её закрытие - необходимо узнать когда она была открыта.
я пробовал таким способом:  if TecPos(i) == TecPos(i-1) then -- если тек позиция равна предыдущей то идём далее -- не верно!
(таким способом я хотел проверить если тек позиция равна предыдущей то значит была открыта не на этом баре) --
но переменная TecPos - это переменная типа Number, а не таблица и обращаться к ней по индексам нельзя.
Но таблица всех значений мне тоже не нужна, мне нужен массив последних двух баров или одного
Создаём переменную
   local tableTecPos = {}
           tableTecPos[1] = TecPos(1)
           tableTecPos[2] = TecPos(2)
вот в этой таблице, что мне нужно сделать и что сравнить я прекрасно понимаю, но как эту модель прописать?
 
  local TecPos=FuncPops(Emit,MyAccount)  -- далее
у нас открылась длинная позиция,
пишем позицию и бар (bar) в переменную Tpos
Tpos={TecPos,bar}
и вот теперь что бы из неё выйти мы делаем проверку
  if Tpos[1] > 0 then --если тек позиция больше нуля то...
вот если это условие выполнено, то у нас открыта длинная позиция
и теперь
переменная Tpos[2] - содержит бар этой позиции
 
Цитата
Николай Камынин написал:
Tpos={TecPos,bar}
  if Tpos[1] > 0 then --если тек позиция больше нуля то...
переменная Tpos[2] - содержит бар этой позиции
Только не ругайтесь...

  local CurPos = PosNow(Emit,MyAccount)    -- (тек читс позиции)
  local TecPos = {CurPos,NumOfCandle}        -- {тек чист поз, номер открытия позиции}                                       -
  TecPos[1]                                                       -- [возвратит положительное или отрицательное значение]
  TecPos[2]                                                       -- [возвратит номер бара открытия позиции]
                                                             --у нас открыт Лонг --
                               -- проверяем
     if TecPos[1] > 0                                           -- верно
        if TecPos[2] ==        --  с чем сравнивать это число??  
 
Код
   local CurPos = PosNowFunc(Emit,MyAccount) 
   local TecPos = {CurPos,NumOfCandles}
   local PosNow = {NumOfCandles}
      if TecPos[1] < 0 and TecPos [2] == PosNow[1] then
в данной модели - таблица выдаёт одинаковые значения при любой позиции, независимо на каком баре была открыта
 
Цитата
Денис Лихачев написал:
Код
      local  CurPos  =  PosNowFunc(Emit,MyAccount) 
    local  TecPos  =  {CurPos,NumOfCandles}
    local  PosNow  =  {NumOfCandles}
       if  TecPos[ 1 ]  <   0   and  TecPos [ 2 ]  =  =  PosNow[ 1 ]  then 
  
в данной модели - таблица выдаёт одинаковые значения при любой позиции, независимо на каком баре была открыта
Всё решил, нужно было сравнивать глобальные значения с локальными.  
Страницы: 1
Читают тему
Наверх