Василий Петров написал: Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
Поправка: не смотря на то, что в логах "SERVER = Информационно-торговая система QUIK "Гута-Банк"", на самом деле это логи реального счёта ВТБ24 на версии VERSION = 7.8.1.21. На нём ровно та же проблема - 2 обсчёта свечей.
INDICATORS.ZIP
Пользователь
Сообщений: Регистрация: 09.02.2017
16.02.2017 17:47:41
Цитата
Николай Камынин написал: Быстрее будет, если вместо поиска свечки назад, просто запоминать индекс последней существующей свечки. При отсутствии свечки брать сохраненный индекс.
В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
Ошибка будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
Будем ждать. К слову, у Гута-Банка на VERSION = 7.6.1.1 ровно та же ошибка.
INDICATORS.ZIP
Пользователь
Сообщений: Регистрация: 09.02.2017
16.02.2017 00:48:25
Цитата
Николай Камынин написал: function isnil(a,b) return a or b; end;
Спасибо, исправлю.
INDICATORS.ZIP
Пользователь
Сообщений: Регистрация: 09.02.2017
14.02.2017 20:10:13
Извините, стоило вставить спойлер вокруг кода.
INDICATORS.ZIP
Пользователь
Сообщений: Регистрация: 09.02.2017
14.02.2017 20:08:50
Запускал на SRH7 на 5 минутах. Лог длинный, вот его кусок, где видно, что OnCalculate отрабатывает 2 раза
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
Пользователь
Сообщений: Регистрация: 09.02.2017
14.02.2017 19:00:18
Цитата
Sergey Gorokhov написал: В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
В основных функциях Init(), OnCalculate(), OnDestroy() поставил вывод в текстовый лог основных значений свечей: index, T(), C(). Обнаружил, что OnCalculate перебирает все свечи два раза, при этом общее количество свечей во вторую итерацию иногда меняется, иногда нет. Как такое поведение можно объяснить?
INDICATORS.ZIP
Пользователь
Сообщений: Регистрация: 09.02.2017
14.02.2017 15:45:02
Как из индикатора определить общее количество свечей инструмента, на котором индикатор запущен? Не текущую свечу - index, а общее количество. Нужно вставить проверку, чтобы индикатор не производил обсчёт на исторических свечах.
Индикаторы на LUA. Проигрывание звуков.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 18:28:25
Обошёл проблему организовав таймер, который не даёт повторно проиграть звук, если прошло меньше t времени.
Индикаторы на LUA. Проигрывание звуков.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 17:55:44
Пардон: при использовании внутри индикатора кладёт КВИК.
Индикаторы на LUA. Проигрывание звуков.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 17:55:08
В отдельном скрипте библиотека работает корректно. При использовании кладёт КВИК. Проблема может быть в том, что индикаторы не имеют отдельного потока? По большому счёту вопрос остался тот же. Как в индикаторе отыграть любой звук/сигнал?
Индикаторы на LUA. getCandlesByIndex отдаёт пустую таблицу.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 17:21:38
Вы не поверите, не могу повторить ошибку. Её больше нет, мучался три дня )
Индикаторы на LUA. Проигрывание звуков.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 14:36:23
Суппорт: "Ошибка я библиотеке w32.dll рекомендуем обратиться к разработчику". Обращусь. Отпишусь, когда решу проблему.
Индикаторы на LUA. getCandlesByIndex отдаёт пустую таблицу.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 13:54:40
Пишу индикатор спреда. Клоузы второго инструмента беру из его графика в OnCalculate при помощи
Код
t, n, l = getCandlesByIndex (Settings.tag, 0, index-1, 1);
Индикатор работает, но стоит изменить интервал и getCandlesByIndex начинает отдавать пустую таблицу t. Знаю это, т.к. вывожу всё в лог-файл. Если удалить индикатор и закинуть его на график снова, то всё ок.
Индикаторы на LUA. Проигрывание звуков.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 12:17:43
Возможно ли проигрывание звуков в индикаторах? После внедрения указанного здесь кода QUIK "падает" с ошибкой и выплёвывает дамп.
QUIK отрисовывает не все свечи., Проблема с отображением информации на графике.
Пользователь
Сообщений: Регистрация: 09.02.2017
13.02.2017 12:14:02
Ответы на все вопросы нашёл в этой теме
QUIK отрисовывает не все свечи., Проблема с отображением информации на графике.
Пользователь
Сообщений: Регистрация: 09.02.2017
09.02.2017 17:35:09
Проблема в названии темы. Пропуски отметил красными линиями. Как побороть?