Василий Петров написал: Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
Поправка: не смотря на то, что в логах "SERVER = Информационно-торговая система QUIK "Гута-Банк"", на самом деле это логи реального счёта ВТБ24 на версии VERSION = 7.8.1.21. На нём ровно та же проблема - 2 обсчёта свечей.
Николай Камынин написал: Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки. При отсутствии свечки брать сохраненный индекс.
В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
Ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
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
Sergey Gorokhov написал: В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
Как из индикатора определить общее количество свечей инструмента, на котором индикатор запущен? Не текущую свечу - index, а общее количество. Нужно вставить проверку, чтобы индикатор не производил обсчёт на исторических свечах.
В отдельном скрипте библиотека работает корректно. При использовании кладёт КВИК. Проблема может быть в том, что индикаторы не имеют отдельного потока? По большому счёту вопрос остался тот же. Как в индикаторе отыграть любой звук/сигнал?
Пишу индикатор спреда. Клоузы второго инструмента беру из его графика в OnCalculate при помощи
Код
t, n, l = getCandlesByIndex (Settings.tag, 0, index-1, 1);
Индикатор работает, но стоит изменить интервал и getCandlesByIndex начинает отдавать пустую таблицу t. Знаю это, т.к. вывожу всё в лог-файл. Если удалить индикатор и закинуть его на график снова, то всё ок.
Возможно ли проигрывание звуков в индикаторах? После внедрения указанного здесь кода https://quik2dde.ru/viewtopic.php?id=79 QUIK "падает" с ошибкой и выплёвывает дамп.