Василий Петров (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
INDICATORS.ZIP
 
Цитата
Василий Петров написал:
Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
Поправка: не смотря на то, что в логах "SERVER = Информационно-торговая система QUIK "Гута-Банк"", на самом деле это логи реального счёта ВТБ24 на версии VERSION = 7.8.1.21. На нём ровно та же проблема - 2 обсчёта свечей.
INDICATORS.ZIP
 
Цитата
Николай Камынин написал:
Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки.
При отсутствии свечки брать сохраненный индекс.
Вы правы, внедрю.
INDICATORS.ZIP
 
Цитата
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
INDICATORS.ZIP
 
Цитата
Sergey Gorokhov написал:
Цитата
Василий Петров   написал:
Цитата
Sergey Gorokhov   написал:
Size()
Благодарю.

В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
Ошибка будет исправлена в одной из очередных версий программы.
Приносим извинения за причиненные неудобства.
Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
INDICATORS.ZIP
 
Цитата
Николай Камынин написал:
function isnil(a,b)
return a or b;  
end;
Спасибо, исправлю.
INDICATORS.ZIP
 
Извините, стоило вставить спойлер вокруг кода.
INDICATORS.ZIP
 
Запускал на 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
INDICATORS.ZIP
 
Код
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
INDICATORS.ZIP
 
Цитата
Egor Zaytsev написал:
Цитата
Василий Петров   написал:
OnCalculate
Здравствуйте,

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

В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
INDICATORS.ZIP
 
Как из индикатора определить общее количество свечей инструмента, на котором индикатор запущен? Не текущую свечу - index, а общее количество. Нужно вставить проверку, чтобы индикатор не производил обсчёт на исторических свечах.
Индикаторы на LUA. Проигрывание звуков.
 
Обошёл проблему организовав таймер, который не даёт повторно проиграть звук, если прошло меньше t времени.
Индикаторы на LUA. Проигрывание звуков.
 
Пардон: при использовании внутри индикатора кладёт КВИК.
Индикаторы на LUA. Проигрывание звуков.
 
В отдельном скрипте библиотека работает корректно. При использовании кладёт КВИК. Проблема может быть в том, что индикаторы не имеют отдельного потока? По большому счёту вопрос остался тот же. Как в индикаторе отыграть любой звук/сигнал?
Индикаторы на LUA. getCandlesByIndex отдаёт пустую таблицу.
 
Вы не поверите, не могу повторить ошибку. Её больше нет, мучался три дня )
Индикаторы на LUA. Проигрывание звуков.
 
Суппорт: "Ошибка я библиотеке w32.dll рекомендуем обратиться к разработчику". Обращусь. Отпишусь, когда решу проблему.
Индикаторы на LUA. getCandlesByIndex отдаёт пустую таблицу.
 
Пишу индикатор спреда. Клоузы второго инструмента беру из его графика в OnCalculate при помощи
Код
t, n, l = getCandlesByIndex (Settings.tag, 0, index-1, 1);
Индикатор работает, но стоит изменить интервал и getCandlesByIndex начинает отдавать пустую таблицу t. Знаю это, т.к. вывожу всё в лог-файл. Если удалить индикатор и закинуть его на график снова, то всё ок.
Индикаторы на LUA. Проигрывание звуков.
 
Возможно ли проигрывание звуков в индикаторах? После внедрения указанного здесь кода https://quik2dde.ru/viewtopic.php?id=79 QUIK "падает" с ошибкой и выплёвывает дамп.
QUIK отрисовывает не все свечи., Проблема с отображением информации на графике.
 
Ответы на все вопросы нашёл в этой теме https://forum.quik.ru/messages/forum10/message22309/topic2524/
QUIK отрисовывает не все свечи., Проблема с отображением информации на графике.
 
Проблема в названии темы. Пропуски отметил красными линиями. Как побороть?
Страницы: 1
Наверх