Здравствуйте, Просьба прислать нам для анализа архив всей папки с терминалом QUIK (без ключей доступа) созданный сразу после возникновения проблемы. Архив следует паковать при закрытом терминале. А также скриншот диспетчера задач На ящик quiksupport@arqatech.com
Фёдор Сухов пишет: Так вот, память расходуется достаточно заметно, если смотреть с помощью менеджера задач.
Здравствуйте, Ранее Вы говорили о том что память не освобождается. Так вот мы запустили присланный код у себя, память прекрасно освобождается. Возможно не LUA ест память, а в таблица Всех Сделок в которую льются данные?
Валентин пишет: скрипт срабатывает во время х, делает две транзакции, засыпает на 2 секунды и в следующий раз срабатывает на следующий день
по коду не было видно где установлен sleep если его установить как написано и установить значение больше 1 секунды, тогда да будет работать как написано и в этом случае someflag не нужен.
Валентин пишет: stime = tostring(GetInfoParam("SERVERTIME")) base_time = "12:15:50" someflag = 0 if stime == base_time then if someflag == 0 then make_transaction(stop_limit) make_transaction (by-sell) someflag = 1
Данный скрипт работает постоянно (стартует при запуске квика и работает с функцией sleep(200). при перезапуске квика someflag будет обнулен?
someflag будет обнулен имено тогда когда вы запрограммируете. В частности по коду он будет обнулен при следующем же вызове функции, а значит от него нет толку.
Валентин пишет: Возможна или нет? при старте программы выскакивает два раза окно с вводом пароля для ключа. или хотя бы отслеживание окон и при разрыве соединения или запросе пароля, qlua мог сам вводить пароль или вызывать стороннее приложение (vbs скрипт)
Здравствуйте, Штатными средствами нет. Можно через VBS средствами os.execute или io.popen. Или через WinAPI библиотеку для LUA
guest_sl пишет: 1) dll-64 будет работать только с QUIK версии 7 и выше?
Да
Цитата
guest_sl пишет: 2) Где взять пример работы с dll-64 из Excel?
он такой же как для х32
Цитата
guest_sl пишет: 3) В версии 1.2 была директория Sample_Excel, в версии 1.3 ее нет – почему (?) и если тут какой-то негатив для перспектив тех кто работает с вашей программой из Excel?
В В пишет: даёт время компьютера, а меня интересует именно время Quik (время биржи).
Здравствуйте, QUIK умеет работать с очень большим количеством биржевых площадок. Не понятно о какой именно бирже идет речь?
Если интересует время сервера QUIK, а не биржи, то его можно получить через функцию getInfoParam с параметром SERVERTIME
Приветствую. Речь идёт о moex, ФОРТС. Не могли бы поподробнее написать, как getInfoParam применить для получения времени биржи? Совпадает ли время биржи moex с временем сервера Quik?
Время на компьютере с сервером QUIK устанавливает администратор который его обслуживает. Соответственно нам не известно синхронизирует он его или нет. Что касается времени именно биржи, то отдельно в QUIK оно не транслируется. Именно потому что QUIK умеет работать с очень большим количеством биржевых площадок. Вы можете примерно оценить время биржи по таблице обезличенных сделок. И функция getInfoParam для этого не предназначена.
Валентин пишет: запрограммировал 2. откуда пять стопов?
По присланному куску кода не видно что запрограммировано 2 транзакции Вы проверяете время условием "if stime == base_time then" однако это условие может за секунду сработать далеко не один раз. Установите ограничение, например в виде флага, чтобы избежать повторного срабатывания
Фёдор Сухов пишет: Немного добавлю: - Отличие в предыдущей версии было в том, что метод t:AddLine()
вызывался последовательно перед новым заполнением таблицы.
Может из-за этого было фрагментирование памяти и её неосвобождение. Не хочется экспериментировать на реальном счёте. Чуть позже на демо попробую вернуть ситуацию и потестить.
Повторю, у нас описанная проблема не повторяется. Вот код на котором воспроизводили
Код
function main()
t_id=AllocTable()
AddColumn(t_id,1,"QWERTY",true,QTABLE_INT_TYPE,10) --Y
CreateWindow(t_id)
SetWindowCaption(t_id,"Script message.")
i=1
while true do
for j=i,i+10000 do
tmp=InsertRow(t_id,-1)
SetCell(t_id,tmp,1,tostring(j),j)
end
i=i+10000
sleep(1000)
Clear(t_id)
end
end
Если требуется дальнейшая диагностика, нам нужен исходный код на котором проблема воспроизводится у Вас Вам не надо ничего воспроизводить. Просто пришлите код.
Фёдор Сухов пишет: А насчёт того где может накапливаться в какой-то из переменных, не очень понимаю, я же использовал и чистил таблицу, используя табличный идентификатор. Посмотрю ещё что там может быть. Выделю часть кода и вышлю.
речь не про таблицу, а про переменные в коде. Если какая-то переменная, хранит данные, то они занимают память. Если в переменной много данных, то занимается много памяти. То что память освобождается при удалении таблицы может быть не более чем совпадением. Просьба прислать полную версию скрипта для анализа. Вы можете не публиковать его на форуме а прислать нам на почту quiksupport@arqatech.com
Egor Zaytsev пишет: Данная утилита уже не актуальна.
Если это действительно так, то было бы некорректным не отметить это здесь.
Дело в том что данная утилита создавалась исключительно в связи с появлением Т+ классов. Ее использование для фьючерсов совсем не предполагалось. А так как переход на Т+ уже давно случился, от утилиту действительно можно считать не актуальной. Тем не менее люди ей пользуются. И поэтому если что-то не работает мы готовы разбираться.
Старатель пишет: Вообще-то хотелось бы получить комментарий. Вы можете однозначно сказать корректно ли работает утилита WndConverter с файлами конфигураций (*.wnd) текущих версий QUIK v.6.17 - 7.0?
Вообще-то вопрос автора был о работе WndConverter на Win7 и на это уже был ответ. Что касается 6.17 и 7.0 то если что-то не работает, то это повод для отдельного разбора.
Здравствуйте, Неработающий софт это не повод для регистрации пожелания, а повод для разбора и последующего устранения причин. Сообщите подробнее что именно не работает и на какой версии терминала QUIK оно не работает.
Sergey Gorokhov пишет: Здравствуйте, Сообщите пожалуйста версию терминала QUIK на котором воспроизводили проблему.
Версия QUIK 6.17.3.6
Фёдор, описанная проблема у нас упорно не воспроизводится. Память не накапливается. После Clear память освобождается. Возможно у Вас данные копятся в какой-то переменной? Пришлите для анализа скрипт на котором наблюдается проблема.
Николай Камынин пишет: В современном мире актуальная информация это та, которая воспринимается пользователем как достоверная. Предположим, что мы включаем телевизор, и видим бегущих и стреляющих солдат в современной форме. Что это? Новости, фантастический фильм или архив новостей? Чтобы решить этот вопрос, нам нужны дальнейшие наблюдения либо дополнительный независимый источник для сравнения информации. -------------------------------- В случае асинхронных событий которые мы получаем через квик ситуация ровто такая же. Если информация не противоречит нашему пониманию и нашим действиям то мы считаем ее актуальной. Даже, если нам "крутит кино" (термин из сленга работников кухни форекса ) наш брокер.
Николай, Ваш комментарий не понятен. У Вас есть надежный совет по решению задачи?
Андрей Мандра пишет: Необходим механизм определения наличия подключения к серверу,
За это отвечает функция isConnected
Цитата
Андрей Мандра пишет: а так же актуальна ли информация, которая отображается во всех таблицах QUIK.
Вопрос кажется банальным, однако к сожалению нет четкого определения тому что такое "актуальная информация", поэтому рекомендаций в этом месте дать не можем. Вы скажете, что это состояние при котором на терминале есть все что есть на сервере. Однако как можно определить что это вся информация при условии что она льется непрерывно? Не хочется начинать спор в этом месте, так как все возможные аргументы уже много раз обсуждались на форуме. Поэтому просто поверьте на слово, надежного способа не существует. Вы можете самостоятельно определить что это именно для Вас означает актуальность данных и создать соответствующую логику проверки.
Цитата
Андрей Мандра пишет: В моменты обрыва связи клиент переходит на другой сервер и только через несколько секунд отображается актуальная информация во всех таблицах, в этом случае callback на свечи вызывается, а таблицы о стопах и текущих позициях еще не актуальны.
При переключении к другому серверу данные затираются и качаются по новой. Терминал можно настроить так чтобы он работал только с одним сервером (галка "При восстановлении использовать только параметры последнего соединения")
Может квик использует не простую скользящую при выводе РСИ, а экспоненциальную? В настройках вывода РСИ только параметр Close...
Еще раз. каждое следующее значение U(P,N) и D(P,N) считается от предыдущего Это значит что начинать расчет нужно с самого начала граыика а не с середины. А во вторых, по формуле СУММсчитается только первое значение U(P,N) и D(P,N) а у Вас первое и второе.
Lenin пишет: Чет я ничего не понимаю.... Я ставлю в Вашу формулу данные Сургута (часовик) - и все равно расчет не сходится с данными Квика. По ходу у меня не только Эксель бракованный, но и Квик неполноценный ))))
И по формуле вопрос: Вы отнимаете "1" для подсчета среднего значения за N периодов. =СУММ(B9:B17)/($B$3 -1 ). Т.е. 9 свечей делите не на "9", а на "8". Это правильно? У Вас в руководстве написано RSI = 100 / (1 + D(P,N) / U(P,N))
Запутался в конец....
Вы испортили пример. Посмотрите внимательнее, каждое следующее значение U(P,N) и D(P,N) считается от предыдущего, отличие только в первом значении.
Андрей 77 пишет: Это если диаграмма отображается в режиме "Отображать пустые интервалы". Если нет, то getCandlesByIndex просто возвращает n свечей (у всех doesExist=1), пропуская интервалы для которых свечи отсутствуют .
Да getCandlesByIndex не вернет свечку если она отсутствует, потому что она отсутствует.
Sergey Gorokhov пишет: Для получения информации из таблицы всех сделок существуют функции getItem, SearchItems и CreateDataSource. Именно свечки строить в LUA сейчас нельзя. Можно строить только линии и точки.
Сами свечи строить графически в qlua пока нет необъодимости. Не могли бы вы привести пример кода, который позволял бы мне получать мне хотя бы 5-минутные (open, high, low, close, volume) для фьючерса на индекс RTS хотя бы за текущий день?
Задача решается функцией CreateDataSource
Код
ds = CreateDataSource("SPBFUT", "RIZ5", INTERVAL_M5)
ds:SetEmptyCallback()
sleep(100) --ждем прокачки информации
for i=1,ds:Size() do
Open = ds:O(i)
High = ds:H(i)
Low = ds:L(i)
Close = ds:C(i)
Volume = ds:V(i)
--остальной код
end
ds:Close()
Создать окно - Все типы окон - Таблица изменений. Также обращаем внимание что список таблиц в "Создать окно" можно настраивать через "Создать окно" - "Настроить меню.."
В В пишет: Приветствую. Есть ли какие-то функции или хотя бы функции доступа к таблице всех сделок, чтобы из сделок самому лепить свечи?
Здравствуйте, Для получения информации из таблицы всех сделок существуют функции getItem, SearchItems и CreateDataSource. Именно свечки строить в LUA сейчас нельзя. Можно строить только линии и точки.
Здравствуйте, Да в случае с SERVERTIME могут быть пропуски. надежней всего использовать следующий код
Код
base_time = "14:25:58"
stime = tostring(GetInfoParam("SERVERTIME"))
function FixTime(V)
V=tostring(V)
local Out = os.date("!*t",os.time())
local len = string.len(V)
if len>6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)%p(%d%d)%p(%d%d)")
elseif len==6 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d%d)(%d%d)(%d%d)")
elseif len==5 then
Out.hour,Out.min,Out.sec = string.match(V,"(%d)(%d%d)(%d%d)")
end
return Out
end
if os.time(FixTime(stime)) >= os.time(FixTime(base_time)) then
message("Hello World")
end
Viktor MMM пишет: ПОЛНЫЙ.. У меня конечно в функциях все.
вот например одна из них:
Код
function _SetLab(par1)
local Q = par1
_ScreenTable = {}
_ScreenTable = _GetScreenArray(t_id)
_log(COMMENT_ALL..LOG_TABULATOR.."Текущая строка = ".._ScreenTable[Q][1]..";".._ScreenTable[Q][2]..";".._ScreenTable[Q][3]..";".._ScreenTable[Q][4]..";".._ScreenTable[Q][5])
if _ScreenTable[Q][OPERATION_STOLB+1] == TEXT_DIRECTION_1 and _ScreenTable[Q][STATUS_STOLB+1] == TEXT_COMMAND_2 then
_log(COMMENT_ALL..LOG_TABULATOR.." Set Текущая метка Green")
LabelLine[Q]["IMAGE_PATH"] = pathGREEN
end
if _ScreenTable[Q][OPERATION_STOLB+1] == TEXT_DIRECTION_2 and _ScreenTable[Q][STATUS_STOLB+1] == TEXT_COMMAND_2 then
LabelLine[Q]["IMAGE_PATH"] = pathRED
_log(COMMENT_ALL..LOG_TABULATOR.."Set Текущая метка RED")
end
LabelText[Q]["TRANSPARENCY"] = 0
_log(COMMENT_ALL..LOG_TABULATOR.."Set Изменение метки № "..tostring(Q).."("..tostring(LABELNUMLINE[Q])..") прошло "..tostring(SetLabelParams(GRAPH_ID,LABELNUMLINE[Q],LabelLine[Q])))
_log(COMMENT_ALL..LOG_TABULATOR.."Set Изменение текста метки № "..tostring(Q).."("..tostring(LABELNUMTEXT[Q])..") прошло "..tostring(SetLabelParams(GRAPH_ID,LABELNUMTEXT[Q],LabelText[Q])))
end
_GetScreenArray(t_id) создает массив из таблицы если метка зеленая, то в массиве меток
Код
LabelLine[Q]["IMAGE_PATH"] = pathGREEN
устанавливается новое значение. Остальное остается как есть. Далее SetLabelParams срабатывает и я на графике вижу, что эта метка изменила вид. Но двигать её я больше не могу.
Надеюсь, стало яснее.
Добрый день,
Описанная поблема с метками будет исправлена в одной из очередных версий программы. Приносим извинения за причиненные неудобства.
WennY пишет: Впрочем, я погорячился: мой пост можно рассматривать как самостоятельное пожелание, касающееся специфицированной идентификации (хэндлинга) открытых индикаторов (подокон), к которым можно было бы- без дополнительных танцев - обращаться из любого скрипта.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Старатель пишет: Если речь о Lua-индикаторе, то ответ очевиден: индикатор должен уметь обратиться как к графику, по которому он построен, так и к самому себе. Можно например, ввести две константы, которые заменяли бы тэг графика или индикатора.
В таком виде пожелание можно зарегистрировать. Регистрируйте.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
green_X5 пишет: Добавить меткам контрол HandleMoving регулирующий разрешение на ручное перемещение, а функции SetLabelParams необязательный аргумент для передачи в этот контрол булев значение, по-умолчанию true.
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Старатель пишет: Если речь о Lua-индикаторе, то ответ очевиден: индикатор должен уметь обратиться как к графику, по которому он построен, так и к самому себе. Можно например, ввести две константы, которые заменяли бы тэг графика или индикатора.
В таком виде пожелание можно зарегистрировать.
Цитата
Старатель пишет: Если речь вообще о любом скрипте, тогда не понятен предмет спора: как вы определили, что вам нужно вот именно это
Цитата
Sergey Gorokhov пишет: Вот есть окно с графиками. В нем 6 графиков по разным инструментам.
а не какое-то другое окно?
Вопрос не понятен. Предмет спора, предложить вариант избавления от идентификаторов. Я привел не более чем пример решаемой задачи. Не нравится одно окно с шестью графиками, пусть будет 10 окон с 200 графиками.
Sergey Gorokhov пишет: Дмитрий, к Вам тот же вопрос. Вот есть окно с графиками. В нем 6 графиков по разным инструментам. Вот Вы предлагаете чтоб на каждом был Auto_ID. Хорошо, допустим мы это сделали. Дальше что? Как скрипт сам должен понять на каком графике рисовать метку?
добрый день, проблема обозначена выше - после применения функции SetLabelParams метка больше не поддается ручному перемещению. Ждем Вашего комментария - "фиксим баг и исправляем" или "так и было задумано"?
WennY пишет: Я даже согласен на добавление линий посредством индикатора в конкретный график. Вот только возможность интерактировать с ними посредством мыши, насколько я понял, закрыта.
Если эти линии - не значения индикатора, а графические метки, то не закрыта. С этой возможностью только временные проблемы, которые обещают исправить. Но беда в том, что и тут Вам придется назначать идентификатор графику вручную, без этого с метками работать не получится. Однако эту проблему можно было бы решить так - добавить каждому графику невидимое (или не редактируемое) поле с названием типа Auto_ID, которое будет автоматически заполняться уникальным значением для каждого вновь открытого графика и будет доступно внутри кода любого индикатора, построенного по этому графику. А в функции для работы с метками добавить возможность использовать кроме идентификатора графика, выставленного вручную, еще и автоматический идентификатор, значение которого можно получить из переменной Auto_ID. Либо еще один вариант решения проблемы - просто автоматически проставлять уникальное значение в поле идентификатора графика при его открытии, дав при этом возможность считывать внутри индикатора значение этого поля. Тогда функции для работы с метками можно вообще не переделывать.
Дмитрий, к Вам тот же вопрос. Вот есть окно с графиками. В нем 6 графиков по разным инструментам. Вот Вы предлагаете чтоб на каждом был Auto_ID. Хорошо, допустим мы это сделали. Дальше что? Как скрипт сам должен понять на каком графике рисовать метку?
Ваше пожелание зарегистрировано. Мы постараемся рассмотреть его и сообщить Вам результаты анализа. Впоследствии, по результатам анализа, будет приниматься решение о реализации пожелания в будущих версиях ПО.
Технически колбэк можно сделать. Но, либо он будет без инструмента, либо будет с инструментом, но только при клике по свечке. В этом месте предлагаю зарегистрировать от Вас пожелание на такую доработку.
Цитата
WennY пишет: Либо удобство работы из графика, либо бакс и нефть в одной рамке?
боюсь что бакс и нефть в одном графике гораздо лучше.
Sergey Gorokhov пишет: В общем, если у Вас нет конкретных предложений
Ок, тупо: предлагаю сделать, как в мете. Но ведь у вас, как я смею подозревать, были причины все устроить именно так, как сейчас, и менять вы здесь ничего не намерены.
Боюсь что 99% пользователей будут с Вами несогласны. То что в QUIK можно добавлять несколько разных инструментов в одно окно, дает просто колоссальные возможности в теханализе. взять ту же нефть и и доллар рубль.
Sergey Gorokhov пишет: Там та же история. Нет технической возможности определить инструмент по которому выставить заявку. Кроме как ткнуть по свечке. Есть предложения в решении?
Неужели два окошка в одном того стоят? Упускается масса возможностей упростить существование юзерам. Например, можно было бы планировать заход в сделку (или даже в целую последовательность) исключительно горизонтальными линиями. Поставил зеленую - вот тебе вход на покупку. Расставил красных - вот тебе выходы. По хоткею - запуск. Я с вас, конечно же, не требую такое бежать запиливать, но и вы и плагинерам вход сюда закрыли.
Не два окошка в одном а несколько разных инструментов в одном окне.