Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок

Страницы: Пред. 1 2 3 4 След.
RSS
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Где можно потестировать заявки 19-значными номерами?
 
DLL с LUA загружается при старте, или при каком-то событие к программе? Иногда она не загружена в память и это приводит к ошибкам в скрипте.
 
Цитата
Александр написал:
Где можно потестировать заявки 19-значными номерами?
Добрый день.

Такой возможности нет.
 
На 8.2 работает без сбоев. Видимо что-то намудрили.
 
Цитата
timber написал:
DLL с LUA загружается
Непонятно, об чем речь. Если о qlua.dll, то при старте загружается, если ее убрать, квик стартанет без пункта меню с луа-скриптами и ничего запустить в принципе не получится. Если о lua53.dll, то в любом случае ДО запуска вашего скрипта, опять же скрипт физически невозможно запустить без нее. Если о какой-то своей подгружаемой длл, то она грузится явно вызовом package.loadlib и на нее действует обычное правило сборки мусора, то есть если она из области видимости вышла и никаких ссылок на нее не осталось (вроде глобальных функций из нее), то будет выгружена. Видимо, вот этот последний вариант и имеется в виду, тогда смотрите, каким образом теряете все ссылки на длл.
 
Цитата
Anton написал:
Цитата
timber написал:
DLL с LUA загружается
Непонятно, об чем речь. Если о qlua.dll, то при старте загружается, если ее убрать, квик стартанет без пункта меню с луа-скриптами и ничего запустить в принципе не получится. Если о lua53.dll, то в любом случае ДО запуска вашего скрипта, опять же скрипт физически невозможно запустить без нее. Если о какой-то своей подгружаемой длл, то она грузится явно вызовом package.loadlib и на нее действует обычное правило сборки мусора, то есть если она из области видимости вышла и никаких ссылок на нее не осталось (вроде глобальных функций из нее), то будет выгружена. Видимо, вот этот последний вариант и имеется в виду, тогда смотрите, каким образом теряете все ссылки на длл.
Это же динамическая библиотека, и мой скрипт загружается в процесс как и эта dll. А скрипт написан на C и слинкован с хидером. Раньше были экспортные функции, но решил, что хидер надежнее. Это вкратце, как сделано.

А проблема в том, что иногда при старте скрипта пишется ошибка что lua53.dll не найдена (видимо еще не загружена в процесс). А если закрыть окно с управлением скриптов и открыть, и еще раз запустиь - магически dll уже будет находится.

Подозреваю, что lua53 не грузится на старте. Поэтому и глюк такой. А скрипт у меня не тянет их dll, так как скомпилирован с хидером.

Перемудрили они видимо с lua53. Заглушка эта не используется самим терминалом. Поэтому скрипты могут попадать на такие пакости.
 
Цитата
timber написал:
Это же динамическая библиотека, и мой скрипт загружается в процесс как и эта dll. А скрипт написан на C и слинкован с хидером. Раньше были экспортные функции, но решил, что хидер надежнее.
Не понял. Вы включили lua.h, но не линковали с lua53.lib, так? Тогда это ваша задача, искать или загружать lua53.dll и тащить из нее функции через GetProcAddress, хидер сам по себе ничего такого не делает.

Цитата
timber написал:
А проблема в том, что иногда при старте скрипта пишется ошибка что lua53.dll не найдена (видимо еще не загружена в процесс). А если закрыть окно с управлением скриптов и открыть, и еще раз запустиь - магически dll уже будет находится.
Этого не может быть, потому что не может быть никогда (про не загружена в процесс). Это раньше была заглушка lua5.1.dll и весь луа по факту сидел в qlua.dll, теперь все иначе, весь луа в lua53.dll находится, и если квик вообще смог ваш скрипт запустить, это стопроцентно означает, что lua53.dll уже загружена и должна находиться через GetModuleHandle.

Мысль пришла - вы, часом, весь луа в своей длл не продублировали?
 
Цитата
Anton написал:
Цитата
timber написал:
Это же динамическая библиотека, и мой скрипт загружается в процесс как и эта dll. А скрипт написан на C и слинкован с хидером. Раньше были экспортные функции, но решил, что хидер надежнее.
Не понял. Вы включили lua.h, но не линковали с lua53.lib, так? Тогда это ваша задача, искать или загружать lua53.dll и тащить из нее функции через GetProcAddress, хидер сам по себе ничего такого не делает.

Цитата
timber написал:
А проблема в том, что иногда при старте скрипта пишется ошибка что lua53.dll не найдена (видимо еще не загружена в процесс). А если закрыть окно с управлением скриптов и открыть, и еще раз запустиь - магически dll уже будет находится.
Этого не может быть, потому что не может быть никогда (про не загружена в процесс). Это раньше была заглушка lua5.1.dll и весь луа по факту сидел в qlua.dll, теперь все иначе, весь луа в lua53.dll находится, и если квик вообще смог ваш скрипт запустить, это стопроцентно означает, что lua53.dll уже загружена и должна находиться через GetModuleHandle.

Мысль пришла - вы, часом, весь луа в своей длл не продублировали?

1) Я и делаю через GetProcAddress
2) Я новый код уже перекомпилировал под qlua.dll обратно и пробую на 8.2. Работает как часы. Думаю, что глюка у Арки. В добаков в 8.5, 8.6 так же работает, но со второй попытки. Думается, ребята что-то перемудрили.

Нет, я только скомпилировал с хидером, чтобы отойти от меняющихся наборов функций.
 
Цитата
timber написал:
Нет, я только скомпилировал с хидером, чтобы отойти от меняющихся наборов функций.
Как вы это сделали? Если заинклюдить lua.h и потом вызвать хоть одну функцию из него, не линкуясь с lua53.lib, линкер скажет unresolved external. Значит, вы объявляете указатели на луа-функции и потом их инициализируете ручками через GetProcAddress, верно? И откуда берете хэндл lua53.dll? Через GetModuleHandle("lua53.dll"), так? И на этом этапе получаете периодически NULL, так? Или иначе как-то?
 
Цитата
Anton написал:
Цитата
timber написал:
Нет, я только скомпилировал с хидером, чтобы отойти от меняющихся наборов функций.
Как вы это сделали? Если заинклюдить lua.h и потом вызвать хоть одну функцию из него, не линкуясь с lua53.lib, линкер скажет unresolved external. Значит, вы объявляете указатели на луа-функции и потом их инициализируете ручками через GetProcAddress, верно? И откуда берете хэндл lua53.dll? Через GetModuleHandle("lua53.dll"), так? И на этом этапе получаете периодически NULL, так? Или иначе как-то?
Спасибо за информацию и расвитие кругозора. Может быть у меня ошибка, может быть в Квик. Не знаю, надо долго разбираться. В итоге я забиваю на проблему. Оно работает, в принципе. И мне этого достаточно. Будет дискомфорт продолжу. Или программисты Арки что-то сами найдут.
 
Цитата
timber написал:
В итоге я забиваю на проблему.
Жаль. У меня тоже есть дллки без прилинкованного луа и даже без сишного рантайма. Я их всех тут перепробовал по тридцать раз в 8.6 после вашего сообщения и ничего такого не обнаружил. Поэтому хотелось понять, как вы такого эффекта добились.
 
Цитата
Anton написал:
Цитата
timber написал:
В итоге я забиваю на проблему.
Жаль. У меня тоже есть дллки без прилинкованного луа и даже без сишного рантайма. Я их всех тут перепробовал по тридцать раз в 8.6 после вашего сообщения и ничего такого не обнаружил. Поэтому хотелось понять, как вы такого эффекта добились.
От Квик никто не ответил. Я склоняюсь, что это моя ошибка где-то. Не хочу теребить о несуществующих проблемах разрабов. Если будет кто-то еще со схожей проблемой, я попробую что-то нарыть.
 
Почему-то квик перестал видеть некоторые индикаторы. Причем, если добавить его в lua-скрипты, то он начинает видеться, и потом работает нормально. Но при перезагрузке индикатор снова становится пустым, и надо выполнять те же действия. В чем проблема может быть?
 
Да, и после того, как индикатор начинает видеть система, то его надо удалить из графика и снова добавить, тогда он начинает нормально работать. До перезагрузки квика.
 
Цитата
Сергей написал:
Почему-то квик перестал видеть некоторые индикаторы. Причем, если добавить его в lua-скрипты, то он начинает видеться, и потом работает нормально. Но при перезагрузке индикатор снова становится пустым, и надо выполнять те же действия. В чем проблема может быть?
Добрый день.

Проверили на версии 8.6.0. Работает корректно.
Нужен какой нибудь конкретный пример. Сообщите версию рабочего места и выложите для примера индикатор.
 
Цитата
Egor Zaytsev написал:
Нужен какой нибудь конкретный пример. Сообщите версию рабочего места и выложите для примера индикатор.
Версия 8.6.0.97

Settings = {
Name = "%WR(BR_1)-STAT+Line",
Period = 14,
line = {{
Name = "Horizontal line (top)",
Type = TYPE_LINE,
Color = RGB(100, 100, 255)
},
{
Name = "Horizontal line (bottom)",
Type = TYPE_LINE,
Color = RGB(100, 100, 255)
},
{
Name = "WR",
Type = TYPE_LINE,
Color = RGB(255, 128, 0)
}
},
Round = "off",
Multiply = 1,
Horizontal_line="30" -- Задается отступ вверх/вниз от центральной линии(-50)
}

function Init()
func = WR()
return #Settings.line
end

--local Sound = 1 -- Если <1>, то проигрываем звук
local ldt = 0 -- last day-time
-- подключить библиотеку w32
local w32 = require ("w32") -- добавляем библиотеку
local FName = "c:\\BCS_Work\\Stat.txt"
local LastPrc = 0
local LastN = 0
local LastOut = -50

-- функция проигрывания файла
-- вызов: PlaySoundFile("имя файла")
function PlaySoundFile(file_name)
 w32.mciSendString("CLOSE QUIK_MP3")
 w32.mciSendString("OPEN \"" .. file_name .. "\" TYPE MpegVideo ALIAS QUIK_MP3")
 w32.mciSendString("PLAY QUIK_MP3")
end

function OnCalculate(Index)
local N=getNumCandles("BR_1") -- Получаем число свечей в графике
local Out = ConvertValue(Settings, func(Index, Settings))
local HL = tonumber(Settings.Horizontal_line)
local HLine = -50+HL
local LLine = -50-HL
if HL then
dt1 = tonumber(os.date("%Y%m%d%H%M%S"))
if (Out == 0 or Out==-100) then
if N==Index then
if LastPrc ~= C(Index) or LastN ~= N then
local FStat = io.open(FName, "a")
FStat:write(os.date("%Y/%m/%d %H:%M:%S") .. " " .. tostring(C(Index)) .. " " .. tostring(Out) .. "\n")
FStat:flush()
FStat:close()

message("WR = " .. tostring(Out) .. "; EP = "..tostring(C(Index)))
LastPrc = C(Index)
LastN = N
end
if dt1-ldt > 10 then
if Out == 0 then
PlaySoundFile("C:\\BCS_Work\\QUIK_BCS\\LuaIndicators\\Higher.wav")
else
PlaySoundFile("C:\\BCS_Work\\QUIK_BCS\\LuaIndicators\\Paday.wav")
end
ldt = dt1
end
end
else
if N==Index then
if (Out <= HLine and LastOut > HLine) or (Out >= LLine and LastOut < LLine) then
if dt1-ldt > 10 then
PlaySoundFile("C:\\BCS_Work\\QUIK_BCS\\LuaIndicators\\Ring04.wav")
ldt = dt1
end
end
end
end
LastOut = Out
return HLine,LLine,Out
else
return nil,nil,Out
end
end

function WR() --Williams' % Range ("WR")
local H_tmp={}
local L_tmp={}
local it = {p=0, l=0}
return function (I, Fsettings, ds)
local Fsettings=(Fsettings or {})
local P = (Fsettings.Period or 10)
if (P>0) then
if I == 1 then
H_tmp={}
L_tmp={}
it = {p=0, l=0}
end
if CandleExist(I,ds) then
if I~=it.p then it={p=I, l=it.l+1} end
H_tmp[Squeeze(it.l,P)+1] = GetValueEX(it.p,HIGH,ds)
L_tmp[Squeeze(it.l,P)+1] = GetValueEX(it.p,LOW,ds)
if it.l>P then
local val_h=math.max(unpack(H_tmp))
local val_l=math.min(unpack(L_tmp))
return -100*(val_h-GetValueEX(it.p,CLOSE,ds))/(val_h-val_l)
end
end
end
return nil
end
end

SMA,MMA,EMA,WMA,SMMA,VMA = "SMA","MMA","EMA","WMA","SMMA","VMA"
OPEN,HIGH,LOW,CLOSE,VOLUME,MEDIAN,TYPICAL,WEIGHTED,DIFFERENCE,ANY = "O","H","L","C","V","M","T","W","D","A"

function CandleExist(I,ds)
return (type©=="function" and C(I)~=nil) or
(type(ds)=="table" and (ds[I]~=nil or (type(ds.Size)=="function" and (I>0) and (I<=ds:Size()))))
end

function Squeeze(I,P)
return math.fmod(I-1,P+1)
end

function ConvertValue(T,...)
local function r(V, R)
if R and string.upper®== "ON" then R=0 end
if V and tonumber® then
if V >= 0 then return math.floor(V * 10^R + 0.5) / 10^R
else return math.ceil(V * 10^R - 0.5) / 10^R end
else return V end
end
local arg = {...}
arg.n = select('#', ...)
if arg.n > 0 then
for i = 1, arg.n do
arg[i]=arg[i] and r(arg[i] * ((T and T.Multiply) or 1), (T and T.Round) or "off")
end
return unpack(arg)
else return nil end
end

function GetValueEX(I,VT,ds)
VT=(VT and string.upper(string.sub(VT,1,1))) or ANY
if VT == OPEN then --Open
return (O and O(I)) or (ds and ds:O(I))
elseif VT == HIGH then --High
return (H and H(I)) or (ds and ds:H(I))
elseif VT == LOW then --Low
return (L and L(I)) or (ds and ds:L(I))
elseif VT == CLOSE then --Close
return (C and C(I)) or (ds and ds:C(I))
elseif VT == VOLUME then --Volume
return (V and V(I)) or (ds and ds:V(I))
elseif VT == MEDIAN then --Median
return ((GetValueEX(I,HIGH,ds) + GetValueEX(I,LOW,ds)) / 2)
elseif VT == TYPICAL then --Typical
return ((GetValueEX(I,MEDIAN,ds) * 2 + GetValueEX(I,CLOSE,ds))/3)
elseif VT == WEIGHTED then --Weighted
return ((GetValueEX(I,TYPICAL,ds) * 3 + GetValueEX(I,OPEN,ds))/4)
elseif VT == DIFFERENCE then --Difference
return (GetValueEX(I,HIGH,ds) - GetValueEX(I,LOW,ds))
else --Any
return (ds and ds[I])
end
return nil
end
 
Это просто Wiliams % Range с прикрученным выводом звука на 0 -100 и при пересечении уровня и сбором статистики в файл
 
Здравствуйте, на версии 8.6.097, проблема с general protection fault с версии 8.5 никуда не исчезла! Продолжает валиться квик на рабочих lua скриптах с версии 7.27.1. Произвольно, иногда при запуске сразу, иногда через небольшое время. Дамп, скрины отправил в поддержку, уже второй раз!

Скрипты поменял, учел изменения в lua 5.3, никаких подключаемых внешних библиотек нет, только код. Отправлять саппорту терминал со всеми скриптами не вариант!

Это же жесть!! Ранее эксперименты с квиком можно было игнорировать, не участвуя в сырой отладке на пользователях, оставаясь на старой версии, а теперь через пару недель запустят изменения на бирже, на версии 7 оставаться, как пишет саппорт нельзя, новая валится, что делать?????
 
Дата перехода биржи на работу с 19-значными номерами заявок и сделок уже известна?
 
У меня в 8.* версиях индикаторы не работают, если в них есть require. Приходится через load грузить. Но с dll так не пройдет.
 
Цитата
Сергей написал:
Это просто Wiliams % Range с прикрученным выводом звука на 0 -100 и при пересечении уровня и сбором статистики в файл
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
 
Цитата
Сергей написал:
Дата перехода биржи на работу с 19-значными номерами заявок и сделок уже известна?
Добрый день.

Данные изменения запланированы на вторую половину текущего года. К сожалению, пока точная дата не известна, но вы можете уточнить вопрос у специалистов технической поддержки биржи.
 
Цитата
Nikolay написал:
У меня в 8.* версиях индикаторы не работают, если в них есть require. Приходится через load грузить. Но с dll так не пройдет.
Добрый день.

Проверили. Работает и на 8.4.1 и на 8.6, библиотеки через require() грузятся в индикаторах, ошибок нет.
Нужен конкретный пример и если возникают ошибки, то их тоже.
 
Объясните для тех кто в танке - 19-значные номера заявок на ММВБ уже ввели или нет? Какая дата у  события?
 
Цитата
Иван Ру написал:
Объясните для тех кто в танке - 19-значные номера заявок на ММВБ уже ввели или нет? Какая дата у  события?
Добрый день.

На данный момент нет, по информации биржи это случится во второй половине этого года, но даты еще нет. Можете уточнить у специалистов технической поддержки биржи.
 
Цитата
Egor Zaytsev написал:
Цитата
Сергей написал:
Это просто Wiliams % Range с прикрученным выводом звука на 0 -100 и при пересечении уровня и сбором статистики в файл
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Ситуация иправляется, если подключаемую по require библиотеку переместить из /luaindicatos в папку квика. Причина мне непонятна, ну да ладно... ¯\_(ツ)_/¯
 
Цитата
Сергей написал:
Цитата
Egor Zaytsev написал:
 
Цитата
Сергей  написал:
Это просто Wiliams % Range с прикрученным выводом звука на 0 -100 и при пересечении уровня и сбором статистики в файл
Здравствуйте!

Ваше обращение получено, проблема изучается. Постараемся в ближайшее время дать ответ.
Ситуация иправляется, если подключаемую по require библиотеку переместить из /luaindicatos в папку квика. Причина мне непонятна, ну да ладно... ¯\_(ツ)_/¯

Ранее мы сталкивались с похожей ситуацией, тогда помогло вместо функции require использовать package.loadlib
Например так:
package.loadlib(getScriptPath() .. "\\some.dll", "luaopen_somemetod")()
где вместо some.dll указать имя Вашей DLL и вместо luaopen_somemetod указать имя Вашего метода.
 
Добрый день.

Стартовое сообщение данной темы форума обновлено: обновлена ссылка на актуальную версию рабочего места QUIK (8.7.1), добавлены пункты 9-13 в список вопросов/ответов.
 
Почему после добавления в график аллигатора начинает выдавать ошибку вот этот код(и не только этот, а и другие самописные индикаторы)

Settings=
{
 Name = "VolMA",
 period = 8,
 line =
 {
   {
     Name = "VMA",
     Color = RGB(0, 128, 64),
     Type = TYPE_LINE,
     Width = 1
   }
 }
}

function Init()
 return 1
end

function OnCalculate(index)
 if index < Settings.period then
    return nil
 else
   local sum = 0
   for i = index-Settings.period+1, index do
     sum = sum + V(i)
   end
   return sum/Settings.period
 end
end

Говорит: VolMA.lua:26: attempt to perform arithmetic on a nil value
это не только с аллигатором,  но и с индикатором открытых позиций тоже.
В чём может быть причина?  
Спасибо!
 
Добрый день.

Проверили. Индикатор добавился без ошибок.
Какая у Вас версия рабочего места QUIK, каким образом добавляете данных скрипт?
Напомним, что необходимо файл поместить в папку с названием LuaIndicators в директории с программой QUIK.
 
Версия 8,7,1,3
Индикатор именно в этой папке.
Вы вместе с аллигатором пробовали?
 
<a href="https://funkyimg.com/view/36vHa"; target="_blank"><img src="https://funkyimg.com/p/36vHa.jpg"; alt="Free Image Hosting at FunkyIMG.com" border="0"></a>
 
https://funkyimg.com/i/36vHa.jpg
 
Цитата
Сергей написал:
Версия 8,7,1,3
Индикатор именно в этой папке.
Вы вместе с аллигатором пробовали?
Добрый день.

Сейчас проверили.

Дело в том, что индикатор Аллигатор сдвигает график «в будущее» на несколько свечек, из-за этого при добавлении Lua индикатора  он пытается считать значения по несуществующим на графике цены и объема  свечкам, которые есть только на графике индикатора Аллигатор. Нужно  проверять существует ли свечка с указанным индексом.

function OnCalculate(index)

if index < Settings.period or not CandleExist(index) then

   return nil

else

  local sum = 0

  for i = index-Settings.period+1, index do

    sum = sum + V(i)

  end

  return sum/Settings.period

end

end
 
О! Спасибо!
 
Цитата
Сергей написал:
Дата перехода биржи на работу с 19-значными номерами заявок и сделок уже известна?
Появилась информация что 14 сентября 2020 года введут https://www.moex.com/n29676
 
Опасно. Терминал 8.8.1.5 ещё не готов к работе, т.к. падает с дампами. Пользователям ещё повезло, что у биржи менялись приоритеты (возможность отрицательных цен) и из-за этого дата всё отодвигалась.

Неясно, успеют ли разработчики за оставшийся месяц залечить дыры.
 
Цитата
_sk_ написал:
Опасно. Терминал 8.8.1.5 ещё не готов к работе, т.к. падает с дампами. Пользователям ещё повезло, что у биржи менялись приоритеты (возможность отрицательных цен) и из-за этого дата всё отодвигалась.

Неясно, успеют ли разработчики за оставшийся месяц залечить дыры.
Добрый день.

Если падает терминал, то этот вопрос надо исследовать. Пришлите dmp файлы нам на quiksupport@arqatech.com
будем разбираться.
 
Как только падает тестовый терминал -- шлю вам дампы (CQ02798550). Архив терминала и QLua-скрипты выслать нет возможности. На реальную эксплуатацию страшно ставить, т.к. при завале 10 скриптов потом долго и дорого последствия разбирать.

По субъективным ощущениям, падения учащаются при параллельной эксплуатации нескольких QLua-скриптов, которые интенсивно запрашивают свечные данные из DataSource-объектов. В принципе, могу попытаться написать тестовый стенд. Может, на нём удастся воспроизвести эти падения.
 
Цитата
Egor Zaytsev написал:
Цитата
_sk_ написал:
Опасно. Терминал 8.8.1.5 ещё не готов к работе, т.к. падает с дампами. Пользователям ещё повезло, что у биржи менялись приоритеты (возможность отрицательных цен) и из-за этого дата всё отодвигалась.

Неясно, успеют ли разработчики за оставшийся месяц залечить дыры.
Добрый день.

Если падает терминал, то этот вопрос надо исследовать. Пришлите dmp файлы нам на  quiksupport@arqatech.com
будем разбираться.
Вам Юрий шлет дампы постоянно. Мало того терминал показывает увеличение занятой оперативной памяти вообще без запущенных скриптов на 2 разных компьютерах и это увеличение не застывает, а продолжает расти.
 
Цитата
_sk_ написал:
Как только падает тестовый терминал -- шлю вам дампы (CQ02798550). Архив терминала и QLua-скрипты выслать нет возможности. На реальную эксплуатацию страшно ставить, т.к. при завале 10 скриптов потом долго и дорого последствия разбирать.

По субъективным ощущениям, падения учащаются при параллельной эксплуатации нескольких QLua-скриптов, которые интенсивно запрашивают свечные данные из DataSource-объектов. В принципе, могу попытаться написать тестовый стенд. Может, на нём удастся воспроизвести эти падения.
С проблемой CQ02798550 еще разбираемся, обязательно дадим ответ.
 

  По моему скромному мнению, перевод QUIK на Lua 5.3… является стратегической ошибкой ARQU, если ориентироваться на пользователя, а не на хайп.    

   Во-первых, функционально, с учетом архитектурно тесной интеграции Lua c языком C/C++, это, мягко говоря, сомнительный шаг, так как все, что не реализовано в Lua 5,1,  по сравнению с Lua 5.3 (а это мало кому нужно), можно реализовать в языке C++. В том числе и длину номеров заявок (>= 19).

  Во-второых, при переходе на Lua 5.3 для  пользователя заметно меняется среда разработки в части используемых dll-библиотек. Надо ли это нормальным пользователям?

  Во-третьих, для самих разработчиков QUIK возникает большой геморрой в связи с необходимостью переработки управление автоматической памятью  Lua 5.3…  (оно существенно отличается от того, что было в Lua 5.1) так, чтобы оно было в QLua 5.3... потокобезопасным (задача, конечно, интересная, но нетривиальная задача параллельного программирования, требующая высокой квалификации). Необходимость потокобезопасности управления автоматической памятью QLua обусловлена тем, что все служебные функции обратного вызова QLua запускаются в потоке отличном от пользовательского (с именем main), но в среде (памяти) пользователя.

   Что мы имеем на текущий момент (12.08.20). Пользователи отлаживают, начиная с марта 2020г.все новые и новые версии (8.5…, 8.6…, 8.7…, 8.8…). Прошло уже 5 месяцев как нас кормят обещаниями стабильной новой версии QUIK. При запусках моего теста управления автоматической памятью во всех QLua версиях >= 8.5  в произвольные моменты времени, но в интервале 10 минут,  возникают дампы ( все они пересланы мной в поддержку ARQU). Причем в QUIK версий < 8.5 проблем с управлением автоматической памятью QLua мной не обнаружено.

    Пока в версии >= 8.5 не будет реализовано корректное потокобезопастное управление автоматической памятью версий QLua >= 8.5, QUIK будет нестабильным (надеюсь что разработчики QUIK это понимают).

-------

   Я понимаю, что отказаться от перевода QUIK на Lua 5.3… для ARQU практически невозможно, но, если ориентироваться на результат, то имело бы смысл «заморозить» перевод QUIK на Lua 5.3… и перенести накопленные нормально работающие фичи версий >=8.5… (в том числе длину номеров заявок = 19   ) в последнюю версию 8.4…… В противном случае, скорее всего, нас ждет длительное шоу новых версий QUIK.

 
Цитата
Александр М написал:
Цитата
Egor Zaytsev написал:
 
Цитата
_sk_  написал:
Опасно. Терминал 8.8.1.5 ещё не готов к работе, т.к. падает с дампами. Пользователям ещё повезло, что у биржи менялись приоритеты (возможность отрицательных цен) и из-за этого дата всё отодвигалась.

Неясно, успеют ли разработчики за оставшийся месяц залечить дыры.
 Добрый день.

Если падает терминал, то этот вопрос надо исследовать. Пришлите dmp файлы нам на   quiksupport@arqatech.com  
будем разбираться.
Вам Юрий шлет дампы постоянно. Мало того терминал показывает увеличение занятой оперативной памяти вообще без запущенных скриптов на 2 разных компьютерах и это увеличение не застывает, а продолжает расти.
Добрый день.
С каждым обращением мы разбираемся. С каждым случаем нужно разбираться отдельно. Если у Вас наблюдаются проблемы с загрузкой оперативной памяти, то просьба прислать архив рабочего места (без ключей) нам на    quiksupport@arqatech.com
 
  Есть предложение от
12.08.2020 18:36:39
Цитата
TGB написал:
Я понимаю, что отказаться от перевода QUIK на Lua 5.3… для ARQU практически невозможно, но, если ориентироваться на результат, то имело бы смысл «заморозить» перевод QUIK на Lua 5.3… и перенести накопленные нормально работающие фичи версий >=8.5… (в том числе длину номеров заявок = 19   ) в последнюю версию 8.4…… В противном случае, скорее всего, нас ждет длительное шоу новых версий QUIK.
Хотелось бы увидеть реакцию от поддержки ARQU.
 
Цитата
TGB написал:
При запусках моего теста управления автоматической памятью во всех QLua версиях >= 8.5  в произвольные моменты времени, но в интервале 10 минут,  возникают дампы ( все они пересланы мной в поддержку ARQU). Причем в QUIK версий < 8.5 проблем с управлением автоматической памятью QLua мной не обнаружено.
Может стоит им отправить свой тестовый стенд, быстрее дело пойдет.  
 
Цитата
Андрей написал:
им отправить свой тестовый стенд
Кто хочет результата, выкладывает здесь тестовый скрипт, здесь есть достаточно заинтересованные люди, чтобы потратить время, прогнать у себя, подтвердить баг и тем самым сподвигнуть арку на подвиги, либо обнаружить косяк в самом тесте.
 
Цитата
Андрей написал:
Может стоит им отправить свой тестовый стенд, быстрее дело пойдет.
Отличное предложение.  Я уже подготовил коды и инструкцию и  предложу это в переписке.с ними.
 
Цитата
Anton написал:
Кто хочет результата, выкладывает здесь тестовый скрипт, здесь есть достаточно заинтересованные люди, чтобы потратить время, прогнать у себя, подтвердить баг и тем самым сподвигнуть арку на подвиги, либо обнаружить косяк в самом тесте.
Для заинтересованных людей ссылка на коды теста:  https://cloud.mail.ru/public/2Emr/QBCqEvATr
 За найденные баги в тесте буду благодарен.
----------------------------------------  
 Ниже приводится инструкция по запуску теста (непосредственно из письма, посланного в поддержку QUIK).
----

Новая версия (от 06.08.20) QUIK 8.8.1.5 продолжает «падать» (CQ02750791, CQ02779753, CQ02787899). Тестовая программа, вызывающая падение (с инструкцией по установке и ее запуску).

Здравствуйте!

 QUIK 8.8.1.5 «падает» похожим образом, как это было в предыдущих версиях (начиная с 8.5….). Кроме того, в QUIK в мониторе ресурсов, наблюдается утечка памяти.

   Для того, чтобы у вас была оперативная возможность отладки очередной версии, я высылаю не дамп, а мою тестовую программу (с кодами и инструкцией по ее запуску), в которой дампы возникают быстро (у меня в течении 5 минут), но в произвольные моменты. Эта же программа (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5. Одна из функций данной программы, которая включена сейчас по умолчанию, это тестирование автоматического управления памятью в QLua. Особенностью теста является высокая нагрузка (1500 обращений в секунду) на управление автоматической памятью QLua в условиях многопоточности.

   Если потребуется, я пришлю коды этой же тестовой программы (с dll оттранслированными для Lua 5.1), нормально работающей в версиях 8… < 8.5.

------

Инструкция по установке и запуску тестовой программы.

Для установки и запуска программы надо выполнить следующее:

1) распаковать архив OS_Quesha 8_5.zip;

  ! После распаковки исполняемые файлы в папке «… OS_Quesha\packages» и «…OS_Quesha\packages\Файлы папки QUIK» могут оказаться заблокированными;

     их необходимо разблокировать;

     Файлы можно разблокировать в их свойствах.

     Для быстрой разблокировки всех файлов папки:

      - откройте консоль PowerShell (под Админом) и выполните в ней команду get-childitem "полный путь папки" | unblock-file, предварительно заменив содержимое кавычек полным адресом к папке с заблокированными файлами.

2) получившуюся папку OS_Quesha переслать на диск C (в корень);

3) переслать все файлы (их два) из папки C:\OS_Quesha\packages\Файлы папки QUIK в папку хранения info.exe ( на диске установки QUIK);

4) в меню QUIK <Сервисы> ->   <Lua скрипты ...>   добавить скрипт-шаблон "TS_QUIK.lua" из папки C:\OS_Quesha;

5) запустить добавленный скрипт (это можно делать в QUIKе без подключения к серверу);   при этом появится окно диалога OS_Quesha.

-------------------------

При нормальной работе теста в поле Сообщения диалога с интервалом 5 секунд выдаются сообщения:

<@> <Дата | Время> <6.0> Тест управления памятью QLua. Количество синхронизаций = Количество

  Пока значение Количество меняется (с интервалом в 5 секунд) тест выполняется без ошибок.

Ошибки теста проявляются следующим образом:

1)       QUIK  «падает» (иногда очень быстро) с сохранением дампа, а иногда и без сохранения;

2)      Прграмма OS_Quesha зависает и Количество синхронизаций перестает меняется. Тогда про попытке завершения скрипта зависает или падает QUIK.

-----------

  Если скрипт "TS_QUIK.lua" запускать многократно то, в какой-то (произвольный) момент возникает дамп QUIK.   В версиях QUIK < 8.5 дампов не возникает.

     Для завершения работы с OS_Quesha достаточно закрыть окно ее диалога или остановить крипт в меню QUIK.                

------

Внимание!     Для того чтобы нормально работали пакеты dll,   в W10(64р), в папке C:\Windows\System32 и   в C:\Windows\SysWOW64 должны быть (в каждой из них) файлы:   msvcp140d.dll, msvcr120d.dll,   ucrtbased.dll, vcruntime140d.dll

Иначе QLua   может выдавать сообщение: Не существует модуль…….

 
Все же речь была о заинтересованных в отладке квика, а не вашей операционной системы. А для этого нужен (насколько возможно примитивный) луа-скрипт, показывающий, что гарбидж коллектор в квике работает некорректно, как вы утверждаете. Из описанного поведения пункт 2 это ТОЧНО дедлок у вас в коде, пункт 1 может быть от чего угодно, как из него следует косяк именно в коллекторе, непонятно. Попытался найти, где у вас этот тестовый код зарыт, не нашел. В чем смысл такого теста остается неясным.
 
Цитата
Anton написал:
Все же речь была о заинтересованных в отладке квика, а не вашей операционной системы. А для этого нужен (насколько возможно примитивный) луа-скрипт, показывающий, что гарбидж коллектор в квике работает некорректно, как вы утверждаете. Из описанного поведения пункт 2 это ТОЧНО дедлок у вас в коде, пункт 1 может быть от чего угодно, как из него следует косяк именно в коллекторе, непонятно. Попытался найти, где у вас этот тестовый код зарыт, не нашел. В чем смысл такого теста остается неясным.
    Тестирование проблем синхронизации задача сложная и это подтверждается тем, что сама АРКИ, похоже, за десятилетия существования не разработала достаточно валидного теста потокобезопасного управления автоматической памятью QLua. Я сделал такой тест давно в виде утилиты в своей системе для себя (и он реализован с существенным использованием среды исполнения моей системы и я, к сожалению, не могу его изобразить в виде простенького скрипта, как предлагаете вы) . В том виде, в котором я его выложил, этот тест запускается по умолчанию и для специалиста, с моей точки зрения, этого достаточно. Я думаю разработчики QUIK смогут в нем разобраться. Если же он вам не понятен, то вы можете попробовать предложить свой простой тест.
  Еще один момент, который я специально отметил:
Цитата
TGB написал:
Эта же программа (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5.
 
Страницы: Пред. 1 2 3 4 След.
Читают тему (гостей: 8)
Наверх