INDICATORS.ZIP

Страницы: Пред. 1 2
RSS
INDICATORS.ZIP
 
Цитата
Sergey Gorokhov написал:
Как связан фильтр по времени с наличием либо отсутствием пустых свечек?

Обобщу. Индекс теперь будет перебирать все свечи, что у него в базе данных, или только те, что на графике? И фильтр по времени, и фильтр на пропуски.
 
валерий,
Какой индекс? Какая база данных? Вы можете предметно сообщить что именно интересует? Сейчас Ваш вопрос не понятен.
Вам уже было сказано, что сами графики вообще никак не менялись, а менялись только конкретные функции, а вернее результат их вывода в случае наличия пустых свечек. Остальное не менялось и поведение то же самое.
 
Sergey Gorokhov,
Индекс в OnCalculate(index). Конкретно, вот график с одной фишкой, пропуски не показывать, фильтр по дневной сессии. Какие свечи будет перебирать индекс? Только те что на графике?
 
Цитата
Sergey Gorokhov написал:
Цитата
валерий   написал:
Это в 7.2. А что в 7.7?
Организовать вычисления при наличии пустых свечек конечно можно, но это накладно и в 99 случаях не нужно.
Никто Вас не заставляет "производить вычисления при наличии пустых свечек", просто пропускайте их и все. Именно это корректно позволяют сделать изменения в 7.7.
Ну да, тогда о чем же эта тема? И почему бы в ваших индикаторах в  ftp://ftp.quik.ru/public/INDICATORS.zip просто не вставить "просто пропускайте их и все"? Делов-то.
 
Цитата
валерий написал:
Делов-то.

Ну так сделайте, Индикаторы предоставляются "как есть" т.е. допускается любое изменение на Ваше усмотрение.
 
Цитата
валерий написал:
Sergey Gorokhov  ,
Индекс в OnCalculate(index). Конкретно, вот график с одной фишкой, пропуски не показывать, фильтр по дневной сессии. Какие свечи будет перебирать индекс? Только те что на графике?

OnCalculate вернет столько свечек сколько на графике.
 
Ну да, тогда о чем же эта тема? И почему бы в ваших индикаторах в   ftp://ftp.quik.ru/public/INDICATORS.zip  просто не вставить "просто пропускайте их и все"? Делов-то.

Дело в том, что это совсем не так просто, как пишет Сергей Горохов. Иначе это было бы сделано в примерах индикатора из архива. Нужно делать дополнительный буфер свечей, в котором вырезаны все пропуски. После чего именно по этому буферу производятся вычисления. Также потребуется оглавление свечей, которое позволяло бы соотносить свечи между исходными (с пропусками) и свечами из буфера. Причем ссылки должны быть в общем случае двунаправленные, в обе стороны. И после вычислений результат проецируется на исходную нумерацию свечей

Очевидно, что этот вопрос в архитектуре терминала был упущен (как и многие другие) и теперь разработчики предлагают обходить эту проблему пользователям самомтоятельно, если они хотят писать индикаторы грамотно. Либо писать только для случая, когда на графике наложен только один источник для расчета.

В общем, очевидное недоваренное мясо, признать которое они не в силах.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Sergey Gorokhov написал:
Цитата
валерий   написал:
Sergey Gorokhov  ,
Индекс в OnCalculate(index). Конкретно, вот график с одной фишкой, пропуски не показывать, фильтр по дневной сессии. Какие свечи будет перебирать индекс? Только те что на графике?
OnCalculate вернет столько свечек сколько на графике.
Будем надеяться, что сие есть стандарт. Вечный. Спасибо.
 
Цитата
s_mike@rambler.ru написал:
Дело в том, что это совсем не так просто, как пишет Сергей Горохов. Иначе это было бы сделано в примерах индикатора из архива. Нужно делать дополнительный буфер свечей,

Я именно об этом. А он делает вид что не понимает.
В общем, спасение утопающих...
 
валерий, s_mike@rambler.ru,

Я просто еще раз напомню

Цитата
Sergey Gorokhov написал:
Как уже говорилось, индикаторы будут переписаны. Не сейчас, но будут.
 
Цитата
Sergey Gorokhov написал:
валерий  ,  s_mike@rambler.ru  ,

Я просто еще раз напомню
Цитата
Sergey Gorokhov   написал:
Как уже говорилось, индикаторы будут переписаны. Не сейчас, но будут.

То есть не просто "просто пропускайте их и все"?
 
валерий,
Ваш вопрос не понятен.
Вы что-то сказали конкретно про вычисление пустых свечек, и Вам был дан такой ответ конкретно относящийся к необходимости вычисления пустых свечек.
А что касается индикаторов, это вообще никак к ним не относится.
 
Как из индикатора определить общее количество свечей инструмента, на котором индикатор запущен? Не текущую свечу - index, а общее количество. Нужно вставить проверку, чтобы индикатор не производил обсчёт на исторических свечах.
 
Василий Петров,

Для этого есть функция Size()
 
Цитата
Sergey Gorokhov написал:
Size()
Благодарю.

В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
 
Василий Петров,
Что-то похожее уже чинилось, проверьте поведение на актуальной версии, сейчас доступна версия 7.7.
 
Цитата
Sergey Gorokhov написал:
В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
Это у меня на 7.8.1.21 - ВТБ Демо.
 
Цитата
Василий Петров написал:
OnCalculate
Здравствуйте,

Приведите пример скрипта на котором воспроизводится проблема.
 
Могу посоветовать следующее:
1) Пустые свечи определяете по нулевому объему.
-------------------------------
2) примеры индикаторов написаны правильно и работают правильно при двух условиях
а)на графике один инструмент
b) графики не в реале.
---------------------------
3) Примеры написаны не для использования в роботах, а для технического анализа. поэтому они написаны не оптимально.
 
Цитата
Egor Zaytsev написал:
Цитата
Василий Петров   написал:
OnCalculate
Здравствуйте,

Приведите пример скрипта на котором воспроизводится проблема.
Вот код и лог.
 
Код
Settings = {
                Name = "test",
                line =
                        {
                            {
                                Name = "test",
                                Color = RGB(192,224,255),
                                Type = TYPE_LINE,
                                Width = 2
                            }

                        }
            }
         
function Init()

   local params = {"VERSION", "TRADEDATE", "SERVERTIME",
            "LASTRECORDTIME", "NUMRECORDS", "LASTRECORD","LATERECORD",
            "CONNECTION", "IPADDRESS", "IPPORT", "IPCOMMENT",
            "SERVER", "SESSIONID", "USER", "USERID", "ORG", "MEMORY",
            "LOCALTIME", "CONNECTIONTIME", "MESSAGESSENT", "ALLSENT",
            "BYTESSENT", "BYTESPERSECSENT", "MESSAGESRECV", "BYTESRECV",
            "ALLRECV", "BYTESPERSECRECV", "AVGSENT", "AVGRECV",
            "LASTPINGTIME", "LASTPINGDURATION", "AVGPINGDURATION",
            "MAXPINGTIME", "MAXPINGDURATION"}
   logfile = io.open(getScriptPath() .. "/Logs/" .. Settings.Name..".log", "a+");
   for key,v in ipairs(params) do
      logfile:write(v .. " = " .. GetInfoParam(v) .. "\n")
   end
   logfile:flush();



    return 1

end

function OnCalculate(index)
   
   WriteLog ("OnCalc() ".."CandleExist("..index.."): "..tostring(CandleExist(index)).."; T("..index.."); "..isnil(toYYYYMMDDHHMMSS(T(index))," - ").."; C("..index.."): "..isnil(C(index),"-"));
   
   return nil;

end

-- Пользовательcкие функции
function WriteLog(text)

   logfile:write(tostring(os.date("%c",os.time())).." "..text.."\n");
   logfile:flush();
   LASTLOGSTRING = text;

end;

function isnil(a,b)
   if a == nil then
      return b
   else
      return a
   end;
end;

function toYYYYMMDDHHMMSS(datetime)
   if type(datetime) ~= "table" then
      message("в функции toYYYYMMDDHHMMSS неверно задан параметр: datetime="..tostring(datetime))
      return ""
   else
      local Res = tostring(datetime.year)
      if #Res == 1 then Res = "000"..Res end
      local month = tostring(datetime.month)
      if #month == 1 then Res = Res.."0"..month; else Res = Res..month; end
      local day = tostring(datetime.day)
      if #day == 1 then Res = Res.."0"..day; else Res = Res..day; end
      local hour = tostring(datetime.hour)
      if #hour == 1 then Res = Res.."0"..hour; else Res = Res..hour; end
      local minute = tostring(datetime.min)
      if #minute == 1 then Res = Res.."0"..minute; else Res = Res..minute; end
      local sec = tostring(datetime.sec);
      if #sec == 1 then Res = Res.."0"..sec; else Res = Res..sec; end;
      return Res
   end
end --toYYYYMMDDHHMMSS
 
Запускал на SRH7 на 5 минутах. Лог длинный, вот его кусок, где видно, что OnCalculate отрабатывает 2 раза
Код
VERSION = 7.8.1.21
TRADEDATE = 14.02.2017
SERVERTIME = 20:01:52
LASTRECORDTIME = 20:01:52
NUMRECORDS = 5401561
LASTRECORD = 8011148
LATERECORD = 7965462
CONNECTION = установлено
IPADDRESS = 217.14.50.203
IPPORT = 15100
IPCOMMENT = Демо контур
SERVER = VTB24
.......
02/14/17 20:02:00 OnCalc() CandleExist(3530): true; T(3530); 20170214193500; C(3530): 16422
02/14/17 20:02:00 OnCalc() CandleExist(3531): true; T(3531); 20170214194000; C(3531): 16413
02/14/17 20:02:00 OnCalc() CandleExist(3532): true; T(3532); 20170214194500; C(3532): 16421
02/14/17 20:02:00 OnCalc() CandleExist(3533): true; T(3533); 20170214195000; C(3533): 16418
02/14/17 20:02:00 OnCalc() CandleExist(3534): true; T(3534); 20170214195500; C(3534): 16412
02/14/17 20:02:00 OnCalc() CandleExist(3535): true; T(3535); 20170214200000; C(3535): 16406
02/14/17 20:02:01 OnCalc() CandleExist(1): false; T(1); 20170109151500; C(1): -
02/14/17 20:02:01 OnCalc() CandleExist(2): false; T(2); 20170109152000; C(2): -
02/14/17 20:02:01 OnCalc() CandleExist(3): false; T(3); 20170109152500; C(3): -
02/14/17 20:02:01 OnCalc() CandleExist(4): false; T(4); 20170109153000; C(4): -
02/14/17 20:02:01 OnCalc() CandleExist(5): false; T(5); 20170109153500; C(5): -
02/14/17 20:02:01 OnCalc() CandleExist(6): false; T(6); 20170109154000; C(6): -
........
02/14/17 20:02:02 OnCalc() CandleExist(3534): true; T(3534); 20170214195500; C(3534): 16412
02/14/17 20:02:02 OnCalc() CandleExist(3535): true; T(3535); 20170214200000; C(3535): 16406
 
Извините, стоило вставить спойлер вокруг кода.
 
Эту функцию:
------------------
function isnil(a,b)
  if a == nil then       return b  
else       return a    end;
end;
------------------------
можно записать так:
------------------
function isnil(a,b)
return a or b;  
end;
 
Цитата
Василий Петров написал:
Запускал на SRH7 на 5 минутах. Лог длинный, вот его кусок, где видно, что OnCalculate отрабатывает 2 раза
Код
  VERSION  =   7.8 . 1.21 
TRADEDATE  =   14.02 . 2017 
SERVERTIME  =   20 : 01 : 52 
LASTRECORDTIME  =   20 : 01 : 52 
NUMRECORDS  =   5401561 
LASTRECORD  =   8011148 
LATERECORD  =   7965462 
CONNECTION  =  установлено
IPADDRESS  =   217.14 . 50.203 
IPPORT  =   15100 
IPCOMMENT  =  Демо контур
SERVER  =  VTB24
 ..  ..  .. .
 02 / 14 / 17   20 : 02 : 00  OnCalc() CandleExist( 3530 ):  true ; T( 3530 );  20170214193500 ; C( 3530 ):  16422 
 02 / 14 / 17   20 : 02 : 00  OnCalc() CandleExist( 3531 ):  true ; T( 3531 );  20170214194000 ; C( 3531 ):  16413 
 02 / 14 / 17   20 : 02 : 00  OnCalc() CandleExist( 3532 ):  true ; T( 3532 );  20170214194500 ; C( 3532 ):  16421 
 02 / 14 / 17   20 : 02 : 00  OnCalc() CandleExist( 3533 ):  true ; T( 3533 );  20170214195000 ; C( 3533 ):  16418 
 02 / 14 / 17   20 : 02 : 00  OnCalc() CandleExist( 3534 ):  true ; T( 3534 );  20170214195500 ; C( 3534 ):  16412 
 02 / 14 / 17   20 : 02 : 00  OnCalc() CandleExist( 3535 ):  true ; T( 3535 );  20170214200000 ; C( 3535 ):  16406 
 02 / 14 / 17   20 : 02 : 01  OnCalc() CandleExist( 1 ):  false ; T( 1 );  20170109151500 ; C( 1 ):  - 
 02 / 14 / 17   20 : 02 : 01  OnCalc() CandleExist( 2 ):  false ; T( 2 );  20170109152000 ; C( 2 ):  - 
 02 / 14 / 17   20 : 02 : 01  OnCalc() CandleExist( 3 ):  false ; T( 3 );  20170109152500 ; C( 3 ):  - 
 02 / 14 / 17   20 : 02 : 01  OnCalc() CandleExist( 4 ):  false ; T( 4 );  20170109153000 ; C( 4 ):  - 
 02 / 14 / 17   20 : 02 : 01  OnCalc() CandleExist( 5 ):  false ; T( 5 );  20170109153500 ; C( 5 ):  - 
 02 / 14 / 17   20 : 02 : 01  OnCalc() CandleExist( 6 ):  false ; T( 6 );  20170109154000 ; C( 6 ):  - 
 ..  ..  ..  .. 
 02 / 14 / 17   20 : 02 : 02  OnCalc() CandleExist( 3534 ):  true ; T( 3534 );  20170214195500 ; C( 3534 ):  16412 
 02 / 14 / 17   20 : 02 : 02  OnCalc() CandleExist( 3535 ):  true ; T( 3535 );  20170214200000 ; C( 3535 ):  16406 
  
 
Может просто просто соединение было потеряно?
 
Здравствуйте!

Проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Василий Петров написал:
Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?

Цитата
Sergey Gorokhov написал:
Что-то похожее уже чинилось, проверьте поведение на актуальной версии, сейчас доступна версия 7.7.
Цитата
Sergey Gorokhov написал:
Проблема изучается. Постараемся в ближайшее время дать ответ.

Бред какой-то.
https://forum.quik.ru/messages/forum10/message21343/topic518/#message21343
Цитата
Sergey Gorokhov написал:
Цитата
Старатель   написал:
1. Исправьте ошибку с лишними пересчётами индикаторов при их добавлении или изменении.
Мы знаем об этой проблеме и уже работаем над ее устранением.
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель,

И? Тут речь про 7.8, а там про 7.6.
 
Цитата
Sergey Gorokhov написал:
И? Тут речь про 7.8, а там про 7.6.
И? Вы действительно думали, что в 7.8 эта ошибка исправлена? Какой логикой вы руководствовались?
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель,
Успокойтесь, ошибка не исправлена.
 
Sergey Gorokhov,
вы так коллегам своим будете говорить.
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Василий Петров написал:
Цитата
Sergey Gorokhov   написал:
Size()
Благодарю.

В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?

Ошибка будет исправлена в одной из очередных версий программы.
Приносим извинения за причиненные неудобства.
 
Ме помогли данные конструкции.

Нет свечки, тогда значению массива текущей даем предудыщее значение.
Код
if not CandleExist(index) then
CC[index] = CC[index-1] 
return nil
end

Если надо получить значение пршлой свечки, то сначала находим ближайшую существующую прошлую, через эту функцию
Код
function FindExistCandle(I)
   local out = I
   
   while not CandleExist(out) do
   out = out -1
   end   
   
   return out
 
end
Код
local previous = index-1
      
if not CandleExist(previous) then
   previous = FindExistCandle(previous)
end
      
if C(index) > C(previous) then
 
Цитата
Николай Камынин написал:
function isnil(a,b)
return a or b;  
end;
Спасибо, исправлю.
 
Цитата
Sergey Gorokhov написал:
Цитата
Василий Петров   написал:
Цитата
Sergey Gorokhov   написал:
Size()
Благодарю.

В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
Ошибка будет исправлена в одной из очередных версий программы.
Приносим извинения за причиненные неудобства.
Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
 
Цитата
Nikolay написал:
Ме помогли данные конструкции.

Нет свечки, тогда значению массива текущей даем предудыщее значение.
Код
   if   not  CandleExist(index)  then 
CC[index]  =  CC[index -  1 ] 
 return   nil 
 end   

Если надо получить значение пршлой свечки, то сначала находим ближайшую существующую прошлую, через эту функцию
Код
   function   FindExistCandle (I)
    local  out  =  I
   
    while   not  CandleExist(out)  do 
   out  =  out  -  1 
    end    
   
    return  out
 
 end   
Код
   local  previous  =  index -  1 
      
 if   not  CandleExist(previous)  then 
   previous  =  FindExistCandle(previous)
 end 
      
 if  C(index)  >  C(previous)  then   
Соорудил подобное при помощи рекурсивного вызова функции.
Код
function GetPrice(ind)
   if ind ~= 0 then
      if CandleExist(ind) == false then
         return GetPrice(ind-1);
      else
         return С(ind)
      end
   else
      return 0
   end
end
 
Цитата
валерий написал:
Концепции Амиброкера это почемуто не противоречит и пользователей устраивает. Я же не сам это придумал.
Любой индикатор это вообще то, чего реально нет. Это отражение реальности, а не сама реальность. Способов отражения, в том числе и пропусков, несчетное множество. А предложение позволяет пользователю выбрать или самое простое и ходовое  zero-order hold или полную своду творчества или компромисс, когда по нулевым объемам можно выявить пропуски и как-то дополнить зох.
Восприятие мира человеком - это отражение реальности, а не сама реальность.
 
Цитата
Василий Петров написал:
Цитата
Nikolay   написал:
Ме помогли данные конструкции.

Нет свечки, тогда значению массива текущей даем предудыщее значение.
Код
      if     not   CandleExist(index)   then  
CC[index]   =   CC[index  -    1  ] 
  return     nil  
  end      

Если надо получить значение пршлой свечки, то сначала находим ближайшую существующую прошлую, через эту функцию
Код
      function    FindExistCandle (I)
     local   out   =   I
   
     while     not   CandleExist(out)   do  
   out   =   out   -    1  
     end     
   
     return   out
 
  end      
Код
      local   previous   =   index  -    1  
      
  if     not   CandleExist(previous)   then  
   previous   =   FindExistCandle(previous)
  end  
      
  if   C(index)   >   C(previous)   then      
Соорудил подобное при помощи рекурсивного вызова функции.
Код
   function   GetPrice (ind)
    if  ind ~ =   0   then 
       if  CandleExist(ind)  =  =   false   then 
          return  GetPrice(ind -  1 );
       else 
          return  С(ind)
       end 
    else 
       return   0 
    end 
 end 
  
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
 
Николай Камынин,
Быстрее будет скинуть данные в матлаб и сделать с ними все, что угодно. Квик, хоть с луа, хоть без, даже для визуалиции не очень...
 
Цитата
валерий написал:
Быстрее будет скинуть данные в матлаб и сделать с ними все, что угодно. Квик, хоть с луа, хоть без, даже для визуалиции не очень...
Вы можете показать что в вашем понимании "очень" в том же матлаб?
Хотя б скрин "визуализации".
Надо делать так, как надо. А как не надо - делать не надо.
 
Старатель,

"Очень" это своя база данных, тестер, робот, анализ прошедшего дня с сохранением в эксель. Конечно есть и минусы. В том числе визуализация ценовых рядов. Но зато это "очень" в амиброкере под управлением того же матлаба. Там на одном графике у меня до четырех стратегий по четыре варианта параметров. А в квике получилось только три и без визуализации параметров.
 
Цитата
Николай Камынин написал:
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
Вы правы, внедрю.
 
Цитата
Василий Петров написал:
Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
Поправка: не смотря на то, что в логах "SERVER = Информационно-торговая система QUIK "Гута-Банк"", на самом деле это логи реального счёта ВТБ24 на версии VERSION = 7.8.1.21. На нём ровно та же проблема - 2 обсчёта свечей.
 
вообще-то свечи - это разделение сделок по одинаковым временным интервалам. Поэтому если в каком-то интервале нет сделок то и свеча нулевая.
Поэтому пустая свеча - это время без сделок. Если сделок нет, то свеча пустая и считать нечего.
Поэтому правильно - ничего не изменять на пустых свечах.
Но так как применение различных статистических методов к свечам вообще  не корректно,
то можно считать все, что угодно.
-----------------------------
Как говорится в анекдоте: Там висит кирпич, туда ехать нельзя, но вам можно.
 
Цитата
Николай Камынин написал:
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
Возможно, но не всегда надо именно прошлую свечку. Часто надо -3, -2. Так что просто запоминать будет та еще конструкция. А эта функция универсальна, получив индекс бери любое значение свечи.

Хотелось бы иметь "железную" функцию получения ближайшей существующей свечи к идексу вниз и вверх.
 
Цитата
Nikolay написал:
Цитата
Николай  Камынин   написал:
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
Возможно, но не всегда надо именно прошлую свечку. Часто надо -3, -2. Так что просто запоминать будет та еще конструкция. А эта функция универсальна, получив индекс бери любое значение свечи.

Хотелось бы иметь "железную" функцию получения ближайшей существующей свечи к идексу вниз и вверх.
Здравствуйте!

Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
 
Цитата
Sergey Gorokhov написал:
Здравствуйте,
В будущем, возможно актуализируем.
https://forum.quik.ru/messages/forum10/message23865/topic2658/#message23865
 
Добрый день.
Я уже давно пользуюсь этими индикаторами, но у меня старая редакция. После выхода новой редакции я пытался их применить, у меня пошли ошибки, я бросил это дело и вернулся на старую редакцию INDICATORS.ZIP
---
Сейчас сижу разбираюсь с новой версией.
Ошибка выскакивает даже на том примере, который приведён в файле readme
Код
dofile(getScriptPath().."\\MA.lua")
function main() 
  func = MA()
  t_id = AllocTable()
  AddColumn(t_id,1,"Price",true,QTABLE_INT_TYPE,10)
  AddColumn(t_id,2,"MA",true,QTABLE_INT_TYPE,10)
  CreateWindow(t_id)
  SetWindowCaption(t_id,"MA")
  ds = CreateDataSource("TQBR", "LKOH", INTERVAL_M5) 
  sleep(1000)
  message (""..ds:Size(),1)
  for i=1,ds:Size() do
   ma_out=func(i, {Period=3, Metod = EMA, VType=ANY}, ds)
   tmp=InsertRow(t_id,-1)
   SetCell(t_id,tmp,1,tostring(ds:C(i)),ds:C(i))
   SetCell(t_id,tmp,2,tostring(ma_out),ma_out)
  end 
end
выскакивает message 3106 (количество свечек), а потом ошибка:


Это он ругается на строчку
Код
tmp.p = (tmp.pp*(P-1) + 2*GetValue(it.p,VT,ds)) / (P+1)
помогите пожалуйста разобраться.
 
Let_it_go,

ошибка в примере а не в коде скриптов.
укажите строку так
ma_out=func(i, {Period=3, Metod = EMA, VType=CLOSE}, ds)

пример поправим
Страницы: Пред. 1 2
Читают тему
Наверх