<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [форум: Программирование на языке Lua]</title>
		<link>http://forum.quik.ru</link>
		<description>Новые темы форума Программирование на языке Lua на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Wed, 20 May 2026 07:18:49 +0300</pubDate>
		<item>
			<title>Если SetUpdateCallback вернул false, предыдущий колбэк снят?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82502/topic9569/">Если SetUpdateCallback вернул false, предыдущий колбэк снят?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Документация не уточняет этот вопрос, хотелось бы знать.<br />У меня пока всегда true возвращает, не могу проверить. <br />
			<i>16.05.2026 13:55:33, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82502/topic9569/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82502/topic9569/</guid>
			<pubDate>Sat, 16 May 2026 13:55:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Не могу понять, что сломано в коде</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82473/topic9567/">Не могу понять, что сломано в коде</a></b> <i>Взял один старый Измеритель</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Использовал этот Измеритель, чтобы сравнивать показания индикаторов Квика с оригинальной скользяшкой Б.Вильямса.<br />Возник такой вопрос, я создаю новую скользяшку при помощи возвратной функции r_RMA(), но таким способом я могу создать две скользяшки. А при попытке добавить третью код ломается (Квик не может отрендерить три линии).<br />
====code====
<pre>Settings = {
&nbsp;&nbsp;&nbsp;&nbsp;Name = "*GAT (Bill Williams Alligator)",
&nbsp;&nbsp;&nbsp;&nbsp;Round = "off",
&nbsp;&nbsp;&nbsp;&nbsp;VType = "Median", --Median price
&nbsp;&nbsp;&nbsp;&nbsp;-- parameters
&nbsp;&nbsp;&nbsp;&nbsp;metod = "RMA",
&nbsp;&nbsp;&nbsp;&nbsp;kScaleFakr = 0.0001,
&nbsp;&nbsp;&nbsp;&nbsp;-- script is working up until I add third moving avrg line
&nbsp;&nbsp;&nbsp;&nbsp;schift_A =&nbsp;&nbsp;3, --short shift forward
&nbsp;&nbsp;&nbsp;&nbsp;period_A =&nbsp;&nbsp;5, --short period
&nbsp;&nbsp;&nbsp;&nbsp;schift_B =&nbsp;&nbsp;5, --long shift forward
&nbsp;&nbsp;&nbsp;&nbsp;period_B =&nbsp;&nbsp;8, --long period
&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;line = {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "GAT_0",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(0,255,0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Name = "GAT_1",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type = TYPE_LINE,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Width = 1,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Color = RGB(255,159,64)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}

function Init()
&nbsp;&nbsp;&nbsp;&nbsp;func = r_MAIN()
&nbsp;&nbsp;&nbsp;&nbsp;return #Settings.line
end

function OnCalculate(Index)
&nbsp;&nbsp;&nbsp;&nbsp;return func(Index, Settings)
end

function r_MAIN()
&nbsp;&nbsp;&nbsp;&nbsp;local vA_MA=r_RMA()
&nbsp;&nbsp;&nbsp;&nbsp;local vB_MA=r_RMA()
&nbsp;&nbsp;&nbsp;&nbsp;return function(I, Fsettings, ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local Fsettings=(Fsettings or {})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local R&nbsp;&nbsp;= (Fsettings.Round or "off")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local VT = (Fsettings.VType or "Median")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local oA,oB --output values
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oA = nil; oB = nil;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local M&nbsp;&nbsp;= (Fsettings.metod or "RMA")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local k_sc = (Fsettings.kScaleFakr or 0.0001)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local s_A = (Fsettings.schift_A or 3)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local p_A = (Fsettings.period_A or 5)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local s_B = (Fsettings.schift_B or 5)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local p_B = (Fsettings.period_B or 8)
--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local s_C = (Fsettings.schift_C or 8)
--&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local p_C = (Fsettings.period_C or 13)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vA = vA_MA(I, VT, ds, p_A)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vB = vB_MA(I, VT, ds, p_B)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( vA ~= nil ) then oA=vA end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( vB ~= nil ) then oB=vB end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return oA,oB
&nbsp;&nbsp;&nbsp;&nbsp;end
end

-----------------
function r_RMA()
&nbsp;&nbsp;&nbsp;&nbsp;local RMA={}
&nbsp;&nbsp;&nbsp;&nbsp;return function(I ,VT, ds, Period)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local P = ((Period) or 5)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local value = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local grace = 15 --grace period to filter out bad initial period
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- we perform logarithm over price often
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- so we must use positive value, this time its 1.0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (I==1) then --protection from candle(1) not-existing
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RMA&#91;I&#93;=1.0; return RMA&#91;I&#93;; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (CandleExist(I)) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value = (H(I)+L(I))*0.5 --median
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (value~=nil) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (I &#60; grace) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- early values are getting averaged
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- so they get faster to real indicator
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RMA&#91;I&#93; = 0.5*( value + RMA&#91;I-1&#93; )
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RMA&#91;I&#93; = ( (P-1) * RMA&#91;I-1&#93; + value )/P
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else -- candle exist, but value does not
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RMA&#91;I&#93;=RMA&#91;I-1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else -- candle does not exist
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RMA&#91;I&#93;=RMA&#91;I-1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return RMA&#91;I&#93;
&nbsp;&nbsp;&nbsp;&nbsp;end
end



</pre>
============= <br />
			<i>13.05.2026 19:57:51, Yury_VYW.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82473/topic9567/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82473/topic9567/</guid>
			<pubDate>Wed, 13 May 2026 19:57:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Работа OnClose</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82461/topic9566/">Работа OnClose</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Есть колбек OnClose. Казалось бы, он должен помочь понять, что терминал остановлен. Но явно что-то пошло не так.<br /><br />Берем простой скрипт. Закрываем терминал через &quot;крестик&quot;.<br /><br />Ожидание - 1. OnClose, сбрасываем флаг. 2. выходим из main. <br /><span class="bx-font" style="color:#272c31"><span class="bx-font" style="font-family:FiraCode NF, Consolas, Courier New, monospace"><span class="bx-font" style="font-size:;">
====code====
<pre>local sleep&nbsp;&nbsp;= _G.sleep
local isRun&nbsp;&nbsp;= true
local AddLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= _G.AddLabel
local GetLabelParams&nbsp;&nbsp;&nbsp;&nbsp;= _G.GetLabelParams
local logFile

local function log_tostring(...)
&nbsp;&nbsp;&nbsp;&nbsp;local n = select('#', ...)
&nbsp;&nbsp;&nbsp;&nbsp;if n == 1 then
&nbsp;&nbsp;&nbsp;&nbsp;return tostring(select(1, ...))
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;local t = {}
&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, n do
&nbsp;&nbsp;&nbsp;&nbsp;t&#91;#t + 1&#93; = tostring((select(i, ...)))
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return table.concat(t, " ")
end

local function log(...)
&nbsp;&nbsp;&nbsp;&nbsp;if logFile==nil then return end
&nbsp;&nbsp;&nbsp;&nbsp;logFile:write(tostring(os.date("%c",os.time())).." "..log_tostring(...).."&#92;n");
&nbsp;&nbsp;&nbsp;&nbsp;logFile:flush();
end

function _G.OnStop()
&nbsp;&nbsp;&nbsp;&nbsp;isRun = false
&nbsp;&nbsp;&nbsp;&nbsp;log("Script Stoped")
&nbsp;&nbsp;&nbsp;&nbsp;if logFile then logFile:close() end
end

function _G.OnClose()
&nbsp;&nbsp;&nbsp;&nbsp;isRun = false
&nbsp;&nbsp;&nbsp;&nbsp;log("Script OnClose")
&nbsp;&nbsp;&nbsp;&nbsp;if logFile then logFile:close() end
end

function _G.main()

&nbsp;&nbsp;&nbsp;&nbsp;logFile = io.open(_G.getScriptPath().."&#92;&#92;labels_test.txt", "w")

&nbsp;&nbsp;&nbsp;&nbsp;local t_id = _G.AllocTable()
&nbsp;&nbsp;&nbsp;&nbsp;_G.AddColumn(t_id, 1, 'test', true, _G.QTABLE_STRING_TYPE, 20)
&nbsp;&nbsp;&nbsp;&nbsp;_G.CreateWindow(t_id)

&nbsp;&nbsp;&nbsp;&nbsp;local tag = 'virt_test'
&nbsp;&nbsp;&nbsp;&nbsp;local label_params = {}
&nbsp;&nbsp;&nbsp;&nbsp;label_params.YVALUE = 324
&nbsp;&nbsp;&nbsp;&nbsp;label_params.TEXT = 'TEST&nbsp;&nbsp;&nbsp;&nbsp;|||||||||||||||||||||||||||||||||||||||||||||'
&nbsp;&nbsp;&nbsp;&nbsp;label_params.HINT = 'Еще текст'
&nbsp;&nbsp;&nbsp;&nbsp;label_params.DATE = 20260512
&nbsp;&nbsp;&nbsp;&nbsp;label_params.TIME = 135000
&nbsp;&nbsp;&nbsp;&nbsp;label_params.FONT_FACE_NAME = 'Arial'
&nbsp;&nbsp;&nbsp;&nbsp;label_params.ALIGNMENT = 'RIGHT'
&nbsp;&nbsp;&nbsp;&nbsp;label_params.FONT_HEIGHT&nbsp;&nbsp;&nbsp;&nbsp;= 10
&nbsp;&nbsp;&nbsp;&nbsp;label_params.TRANSPARENT_BACKGROUND&nbsp;&nbsp;&nbsp;&nbsp;= 1
&nbsp;&nbsp;&nbsp;&nbsp;local data = {price = 324}
&nbsp;&nbsp;&nbsp;&nbsp;local l_id = AddLabel(tag, label_params)
&nbsp;&nbsp;&nbsp;&nbsp;sleep(1000)
&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;while isRun do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local i = 1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while isRun and i &#60; 10 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;label_params = GetLabelParams(tag, l_id)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if label_params then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data.price = tonumber(label_params.yvalue) or 0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(os.clock(), i, 'IsWindowClosed', tostring(_G.IsWindowClosed(t_id)), 'label_params', tostring(label_params), tag, 'l_id', l_id, tostring(data.price))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = i+1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log(os.clock(), 'sleep')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(100)
&nbsp;&nbsp;&nbsp;&nbsp;end
end</pre>
=============
</span></span></span><br />Выводит метку на график, создаём окно. Далее выводим данные метки с графика и закрыто ли окно. Смотрим лог:<br /><br />Tue May 12 15:07:59 2026 30.832 sleep<br />Tue May 12 15:07:59 2026 30.946 1 IsWindowClosed false label_params table: 00000205F30168A0 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 2 IsWindowClosed false label_params table: 00000205F3016BA0 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 3 IsWindowClosed false label_params table: 00000205F3017BA0 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 4 IsWindowClosed false label_params table: 00000205F3017160 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 5 IsWindowClosed false label_params table: 00000205F3018020 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 6 IsWindowClosed false label_params table: 00000205F30171A0 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 7 IsWindowClosed false label_params table: 00000205F30171E0 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.947 8 IsWindowClosed false label_params table: 00000205F3017F20 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.948 9 IsWindowClosed false label_params table: 00000205F3017A60 virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 30.948 sleep<br /><br />Окно ещё не уничтожено, но графика уже нет и данные метки не получены.<br />Tue May 12 15:07:59 2026 31.061 1 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 2 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 3 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 4 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 5 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 6 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 7 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 8 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 9 IsWindowClosed false label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:07:59 2026 31.061 sleep<br /><br />А здесь уже и окна нет<br />Tue May 12 15:08:00 2026 31.173 1 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 2 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 3 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 4 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 5 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 6 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 7 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 8 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 9 IsWindowClosed true label_params nil virt_test l_id 13.0 324.0<br />Tue May 12 15:08:00 2026 31.173 sleep<br /><br />Только сейчас OnClose<br />Tue May 12 15:08:00 2026 Script OnClose<br /><br />Сама по себе схема, вроде, корректна, если бы OnClose мог выполнится параллельно, не обращая внимания на работу main. Но это не так. В итоге OnClose вызывается когда уже уничтожено окно скрипта и нет графика. Т.е. некоторое время (а точнее пока не вызовется C функция) у нас есть подвешенное состояние - мы не знаем окно, график закрыты пользователем или нет.<br />В итоге, если в это время считаем метку, а её нет, можем принять не верное решение. Аналогично и по окну скрипта.<br /><br />Что хотелось бы: вместо колбека иметь глобальный флаг, состояние или иное, сигнализирующее, что терминал закрывается. При этом он должен быть установлен быстро, перед уничтожением объектов терминала. Аналогия из электротехники - логическое 1 или 0 на контакте. Если 0, то уже всё, логика работы совершенно иная.<br /><br />Текущая же реализация может работать, если бы OnClose вызывался до уничтожения объектов. <br />
			<i>12.05.2026 15:17:50, Nikolay.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82461/topic9566/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82461/topic9566/</guid>
			<pubDate>Tue, 12 May 2026 15:17:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Робот, торгующий опционами</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82417/topic9560/">Робот, торгующий опционами</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Товарищи, может ли кто-нибудь из вас поделиться (если не жалко) торговым роботом, торгующим опционами.<br />Хотя бы простой робот - подгрузка доски опционов, выбор инструмента с определённой датой экспирации, покупка/продажа CALL/PUT с определённым страйком. <br />
			<i>03.05.2026 22:08:57, Сергей Че.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82417/topic9560/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82417/topic9560/</guid>
			<pubDate>Sun, 03 May 2026 22:08:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Не верное значение идентификатора транзакции Trans_ID </title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82388/topic9557/">Не верное значение идентификатора транзакции Trans_ID </a></b> <i>Функция sendTransaction ругается на Trans_ID</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Функция sendTransaction ругается на идентификатор транзакции Trans_ID - хотя делаю его заведомо уникальным 16-значным числом и перевожу в формат строки. Что-то посоветуете? &nbsp; <br />
			<i>29.04.2026 13:51:57, Сергей Ларченко.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82388/topic9557/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82388/topic9557/</guid>
			<pubDate>Wed, 29 Apr 2026 13:51:57 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Параметры окна</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82385/topic9556/">Параметры окна</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Как узнать свернуто ли пользовательское окно?<br />GetWindowState(kid) &nbsp;и GetWindowPos(kid) отсутствуют, GetWindowRect(kid) всегда возвращает 6 &nbsp; <br />
			<i>29.04.2026 12:42:09, Kolossi.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82385/topic9556/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82385/topic9556/</guid>
			<pubDate>Wed, 29 Apr 2026 12:42:09 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как отформатировать текст?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82377/topic9555/">Как отформатировать текст?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте.<br />Есть такой текст:<br />====quote====<br />{FFFFFF}Параметр {FFFFFF}Значение<br />Имя Ivan_Encore<br />Уровень 2<br />Exp 0/8<br />Рейтинг 4.00<br />Наличные $0<br />Банковский счет $0<br />Телефон -<br />Законопослушность 0<br />Смертей в розыске 0<br />Арестов 0<br />Счетчик выходов за 7 дней: 0<br />Выходов при аресте: 0<br />Уровень розыска 0<br />Дата регистрации 2026-03-04 10:54:30<br />Зависимость 0<br />Зелёная растительность 0<br />Белые кристаллы 0<br />Материалы 0<br />Организация Гражданские<br />Должность 0 (Нет)<br />Работа Безработный<br />Статус Новичок<br />Супруг(-а) -<br />Пол Мужчина<br />=============<br />Мне нужно записать в переменную цифру которая находится после слова &quot;Уровень&quot; (в данном случае это 2). <br />Как это можно сделать? Спасибо <br />
			<i>28.04.2026 12:59:58, sheldone.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82377/topic9555/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82377/topic9555/</guid>
			<pubDate>Tue, 28 Apr 2026 12:59:58 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Созрело яблочко ... куда падать не пойму</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82371/topic9554/">Созрело яблочко ... куда падать не пойму</a></b> <i>Помогите может истину найду</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Господа! Предлагаю профессиональный холивар.<br />Призадумался Я тут ... вот схема:<br />python принимает данные из стакана и т.д. отправляет заявки, получает инфу о сделке. То есть стадартный некий &#39;виртуальный&#39; робот. Данные с квика, решение алгоритма от внешнего приложения.<br />Варик 1: все инфу делать через lua + таблицы(которые не получишь почему-то через lua) через lua + odbc для вывода во внешку<br />Варик 2: отправку заявок и получать информацию о сделках делать через trans2quik.dll. Cтаканы и таблицы(которые не получишь почему-то через lua) через lua + odbc и все под управлением внешки<br />С Вашей вершины опыта что надежнее и менее трудоемкое в плане кода,кучи телодвижений и так сказать стабильности в плане будущего.<br />P.S. да догадываюсь почти все можно сделать в quik+lua, но именно надо чтобы &quot;сервер&quot; был одно, &quot;клиент&quot; был внешняя программа типа питон(там просто и аналитика, и графики и анимированные кнопочки :)) <br />
			<i>27.04.2026 17:47:31, dimka.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82371/topic9554/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82371/topic9554/</guid>
			<pubDate>Mon, 27 Apr 2026 17:47:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Ошибка ACCESS VIOLATION при запуске QUIKSharp.lua на QUIK 12.8.4.9. Нужен рабочий core.dll</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82324/topic9549/">Ошибка ACCESS VIOLATION при запуске QUIKSharp.lua на QUIK 12.8.4.9. Нужен рабочий core.dll</a></b> <i>Пытаюсь настроить связку QUIK + Python (или C#) через QUIKSharp, но на версии терминала 12.8.4.9 скрипт падает с ACCESS VIOLATION. Перепробовал разные версии core.dll из интернета и из пакетов NuGet — не помогает. Прошу помощи сообщества: поделитесь рабоч</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте, уважаемые форумчане!<br /><br />Столкнулся с проблемой при попытке подключиться к терминалу QUIK из внешнего приложения (Python / C#). Прошу помощи, так как перепробовал уже множество вариантов, но безуспешно.<br /><br />**Исходные данные:**<br />- Терминал: QUIK Workstation 12.8.4.9 (64-bit, брокер Сбер)<br />- Версии Lua в терминале: 5.3.5 и 5.4.1<br />- Цель: Связка с Python (через quik-python / QuikPy) или с C# (через QUIKSharp)<br /><br />**Что делал:**<br />1. Пытался использовать стандартный Lua-скрипт QUIKSharp.lua из репозиториев finsight/QUIKSharp, Algotech-ru/QUIKSharp, DmitriyBodrov/QUIKSharp.<br />2. При запуске скрипта через «Сервисы → LUA скрипты» на любой версии Lua (5.3.5 или 5.4.1) возникает ошибка:<br /> &nbsp; **ACCESS VIOLATION at address ...**<br /> &nbsp; (на Lua 5.3.5 ошибка выводится в лог, терминал остаётся жив; на Lua 5.4.1 терминал падает полностью).<br />3. Пробовал подкладывать файл core.dll (из папок clibs64: 53_MD, 53_MT, 54_MD, 5.1_MT и др.) в папки Lua/socket, в корень QUIK, в lua/clibs64 — результат тот же.<br />4. Проверял установку Microsoft Visual C++ Redistributable x64 — установлено, не помогло.<br />5. Чистил кэш Lua (файлы .luac) — не помогло.<br /><br />**Вопросы к сообществу:**<br />1. Есть ли у кого-то **рабочий файл core.dll** для QUIK 12.8.4.9 (64-bit), который корректно загружается в связке с QUIKSharp.lua? Поделитесь, пожалуйста.<br />2. Если кто-то успешно подключается к этой версии QUIK через Python (QuikPy, quik-lua-rpc, quik-python), подскажите точную последовательность действий и используемые версии библиотек.<br />3. Возможно, для QUIK 12.8 нужно использовать другой коннектор (например, QuikLuaRPC или что-то ещё)? Буду благодарен за наводку.<br /><br />Заранее спасибо за помощь! <br />
			<i>16.04.2026 00:15:21, александр михальцов.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82324/topic9549/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82324/topic9549/</guid>
			<pubDate>Thu, 16 Apr 2026 00:15:21 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Разработчик торгового робота-маркетмейкера (MOEX + QUIK + QLua)</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82323/topic9548/">Разработчик торгового робота-маркетмейкера (MOEX + QUIK + QLua)</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<p>Компании требуется опытный разработчик для создания торгового робота-маркетмейкера для работы на Московской бирже через терминал QUIK (QLua).<br />Мы ищем практика, который уже внедрял торговые системы на Московской бирже.<br /><br />Пожалуйста, в сопроводительном письме укажите:</p><p> </p><ol><li>Опыт с QUIK / QLua: сколько проектов, какие задачи решали<br /><li>Опыт с MOEX: срочный рынок / акции / фьючерсы, какие интеграции были<br /><li>Примеры роботов: маркетмейкинг, исполнение, арбитраж (без конфиденциальных деталей)<br /><li>Готовое портфолио / GitHub (если есть открытые репозитории)<br /></ol><p><B>Контакты для связи:</B> <noindex><a href="mailto:kononova.e@digitald.pro" target="_blank" rel="nofollow">kononova.e@digitald.pro</a></noindex></p> <br />
			<i>15.04.2026 07:46:51, Катерина0905.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82323/topic9548/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82323/topic9548/</guid>
			<pubDate>Wed, 15 Apr 2026 07:46:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Коллбек OnTrade</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82277/topic9546/">Коллбек OnTrade</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Если я, к примеру, покупаю акции, то в коллбеке <span class="bx-font" style="font-family:monospace"><B>OnTrade(trade)</B></span> ...<br /><B><span class="bx-font" style="font-family:monospace">t</span></B><B><span class="bx-font" style="font-family:monospace">rade.price</span></B> - цена за акцию или за лот?<br /><span class="bx-font" style="font-family:monospace"><B>trade.qty</B></span> - количество купленных акций или лотов?<br /><br />Всегда путаюсь. <br />
			<i>09.04.2026 06:24:05, Сергей Че.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82277/topic9546/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82277/topic9546/</guid>
			<pubDate>Thu, 09 Apr 2026 06:24:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource - возвращает дублированные свечи</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82193/topic9541/">CreateDataSource - возвращает дублированные свечи</a></b> <i>CreateDataSource - возвращает дублированные свечи</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			CreateDataSource - возвращает дублированные свечи.<br /><br />Б*ть не сколько можно ? Одни ошибки постоянные.<br /><br />Почему CreateDataSource возвращает массив свечей с дублями ? Такое наблюдается не по всем интервалам и инстрементам, но встречается.<br /><br />Вот скрипт которым проверял:<br />
====code====
<pre>CLASS_CODE = "TQBR"
SEC_CODE&nbsp;&nbsp; = "GAZP"
INTERVAL&nbsp;&nbsp; = INTERVAL_D1

ds = nil

function OnInit()
&nbsp;&nbsp;&nbsp;&nbsp;message("Starting duplicate candles check (DataSource mode)")

&nbsp;&nbsp;&nbsp;&nbsp;ds = CreateDataSource(CLASS_CODE, SEC_CODE, INTERVAL)

&nbsp;&nbsp;&nbsp;&nbsp;if ds == nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Error: failed to create DataSource")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;while ds:Size() == 0 do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(100)
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;message("Data loaded. Candles count: " .. ds:Size())

&nbsp;&nbsp;&nbsp;&nbsp;check_duplicates()
end

function check_duplicates()
&nbsp;&nbsp;&nbsp;&nbsp;local groups = {}

&nbsp;&nbsp;&nbsp;&nbsp;for i = 1, ds:Size() do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local dt = ds:T(i)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local key

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if dt ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- если время нормальное
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if dt.hour ~= 0 or dt.min ~= 0 or (dt.sec or 0) ~= 0 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key = string.format("%04d%02d%02d %02d:%02d:%02d",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.year, dt.month, dt.day,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.hour, dt.min, dt.sec or 0)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- fallback: только дата (важно!)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key = string.format("%04d%02d%02d",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dt.year, dt.month, dt.day)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key = "unknown"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if groups&#91;key&#93; == nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;groups&#91;key&#93; = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert(groups&#91;key&#93;, i)
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;local found = false

&nbsp;&nbsp;&nbsp;&nbsp;for key, indexes in pairs(groups) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if #indexes &#62; 1 then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;found = true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Duplicate group: " .. key .. " | candles: " .. #indexes)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for _, i in ipairs(indexes) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message(string.format(
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&nbsp;&nbsp;index=%d O=%.2f H=%.2f L=%.2f C=%.2f V=%.0f",
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i,
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:O(i),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:H(i),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:L(i),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:C(i),
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:V(i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;if not found then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("No duplicates found")
&nbsp;&nbsp;&nbsp;&nbsp;end
end

function OnStop()
&nbsp;&nbsp;&nbsp;&nbsp;if ds ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:Close()
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;message("Script stopped")
end</pre>
============= <br />
			<i>02.04.2026 21:38:33, Quikos_1.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82193/topic9541/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82193/topic9541/</guid>
			<pubDate>Thu, 02 Apr 2026 21:38:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Куда делать тема ?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82192/topic9540/">Куда делать тема ?</a></b> <i>Куда делать тема ?</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Куда делать тема ? <br />
			<i>02.04.2026 21:35:06, Quikos_1.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82192/topic9540/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82192/topic9540/</guid>
			<pubDate>Thu, 02 Apr 2026 21:35:06 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как задать комментарий в заявке?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82188/topic9539/">Как задать комментарий в заявке?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Пробовал:<br />CLIENT_CODE = &lt;код клиента&gt;/&lt;комментарий&gt;<br />CLIENT_CODE = &lt;код клиента&gt;//&lt;комментарий&gt;<br />CLIENT_CODE = /&lt;комментарий&gt;<br />CLIENT_CODE = //&lt;комментарий&gt;<br /><br />В OnTransReply в поле brokerref отображается введённое в транзакции значение, а в OnOrder - всегда только &lt;код клиента&gt; <br />
			<i>01.04.2026 21:06:40, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82188/topic9539/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82188/topic9539/</guid>
			<pubDate>Wed, 01 Apr 2026 21:06:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Создание GUI приложений на Lua?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82152/topic9536/">Создание GUI приложений на Lua?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте, я хочу сделать несколько простых приложений GUI на Lua, но не знаю с чего начать. <br />Я пробовал IUP, но Lua его не поняла... есть ли более простой способ? <br />Хочу добавить графический интерфейс в свои приложения с командной строкой.<br />Программирую на Fedora, если это тоже поможет при выборе рекомендаций.<br />Заранее спасибо! <br />
			<i>30.03.2026 06:20:50, Eusuchian.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82152/topic9536/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82152/topic9536/</guid>
			<pubDate>Mon, 30 Mar 2026 06:20:50 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Баг SearchItems с datetime.mcs</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82145/topic9534/">Баг SearchItems с datetime.mcs</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Скрипт:
====code====
<pre>function main()

SearchItems("all_trades", 0, getNumberOf("all_trades") - 1,
function(sec, mcs, qty, price)
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(tostring(sec))
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(tostring(mcs))
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(tostring(qty))
&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(tostring(price))
&nbsp;&nbsp;&nbsp;&nbsp;local ok, err = pcall(function() PrintDbgStr(string.format("%02d&#92;t%06d&#92;t%d&#92;t%f", sec, mcs, qty, price)) end)
&nbsp;&nbsp;&nbsp;&nbsp;if not ok then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintDbgStr(err)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return nil
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;return false
end,
"datetime.sec,datetime.mcs,qty,price")

local t = getItem("all_trades", 0)
PrintDbgStr(tostring(t.datetime.sec))
PrintDbgStr(tostring(t.datetime.mcs))
PrintDbgStr(tostring(t.qty))
PrintDbgStr(tostring(t.price))

end</pre>
=============
<br />Результат:<br /><br />
====code====
<pre>1&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;14
2&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;1.0
3&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;2789.61
4&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;nil
5&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;C:&#92;BCS_Work10&#92;QUIK_BCS&#92;lua&#92;MA server&#92;searchitems-bug.lua:10: bad argument #4 to 'format' (number has no integer representation)
6&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;14
7&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;0
8&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;1.0
9&nbsp;&nbsp;&nbsp;23:03:44.848&nbsp;&nbsp;&nbsp;31036&nbsp;&nbsp;&nbsp;info.exe&nbsp;&nbsp;&nbsp;2789.61</pre>
=============
<br />Во-первых, внутри SearchItems почему-то поле datetime.mcs судя по симптомам равно nil, а при получении через getItem оно равно 0.<br />Во-вторых, идёт смещение переданных параметров в функции: поле qty присваивается переменной mcs, поле price присваивается переменной qty, а переменной price ничего не достаётся.<br />В документации написано, что никакого сдвига не должно быть и mcs должно было бы получить nil<br /><br />Quik 12.2.2.8, брокер БКС, подписка на обезличенные сделки по классу INDX (печатается первая сделка за день по IMOEX2). <br />
			<i>28.03.2026 23:11:16, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82145/topic9534/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82145/topic9534/</guid>
			<pubDate>Sat, 28 Mar 2026 23:11:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Накоплен. доход с 24.03.2026</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82087/topic9528/">Накоплен. доход с 24.03.2026</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте!<br />Подскажите, чему будет равен getFuturesLimit(firm_id, ACCOUNT, 0, &quot;&quot;).accruedint<br />&quot;Накоплен. доход&quot; с 24.03.2026?<br />1) 0<br />2) nil<br />3) вчерашней вариационной марже <br />
			<i>23.03.2026 10:10:23, Евгений.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82087/topic9528/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82087/topic9528/</guid>
			<pubDate>Mon, 23 Mar 2026 10:10:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CalcBuySell и getBuySellInfoEx неправильно считают для фьючерсов с валютой шага цены отличной от SUR</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81987/topic9522/">CalcBuySell и getBuySellInfoEx неправильно считают для фьючерсов с валютой шага цены отличной от SUR</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Собственно сабж. Брокер БКС, &nbsp;* &nbsp;со срочным рынком, заявки на 2 млн руб ГО могу выставить в торговую систему как на лонг, так и на шорт, однако функции говорят, что не должен мочь:<br /><br />
====code====
<pre>maxpos, commis = CalcBuySell(ticker.class, sec, nonfut and "1111111" or "SPBFUTxxxxx", accounts&#91;ticker.class&#93;, last, buy, false)
print(maxpos, commis)
debugf(table.tovstring(getBuySellInfoEx("xxxxxxx00000", nonfut and "1111111" or "SPBFUTxxxxx", ticker.class, sec, last)))</pre>
=============
<br />Неправильный выход для EDH6:<br />
====code====
<pre>0&nbsp;&nbsp;&nbsp;0.0
{
 balance = "0",
 can_buy = "0",
 can_buy_own = "0",
 can_sell = "23",
 can_sell_own = "0",
 client_type = "5",
 d_long = "0.050000",
 d_min_long = "1.000000",
 d_min_short = "1.000000e+50",
 d_short = "0.050000",
 is_asset_sec = "0",
 is_futures = "1",
 is_long_allowed = "0",
 is_margin_sec = "0",
 is_rest_short_sec = "0",
 is_short_allowed = "0",
 lim_long = "-1.000000",
 lim_short = "-1.000000",
 limit_kind = "0.000000",
 long_coef = "1.000000",
 long_wa_price = "0.000000",
 open_value = "0.000000",
 open_value_coef = "0.000000",
 position_valuation = "0.000000",
 profit_loss = "0.000000",
 share = "0.000000",
 short_coef = "1.000000",
 short_wa_price = "0.000000",
 spread_hc = "0.000000",
 value = "0.000000",
 value_coef = "0.000000",
}</pre>
=============
и для SVH6<br />
====code====
<pre>0&nbsp;&nbsp;&nbsp;0.0
{
 balance = "0",
 can_buy = "0",
 can_buy_own = "0",
 can_sell = "28",
 can_sell_own = "0",
 client_type = "5",
 d_long = "0.220000",
 d_min_long = "1.000000",
 d_min_short = "1.000000e+50",
 d_short = "0.220000",
 is_asset_sec = "0",
 is_futures = "1",
 is_long_allowed = "0",
 is_margin_sec = "0",
 is_rest_short_sec = "0",
 is_short_allowed = "0",
 lim_long = "-1.000000",
 lim_short = "-1.000000",
 limit_kind = "0.000000",
 long_coef = "1.000000",
 long_wa_price = "0.000000",
 open_value = "0.000000",
 open_value_coef = "0.000000",
 position_valuation = "0.000000",
 profit_loss = "0.000000",
 share = "0.000000",
 short_coef = "1.000000",
 short_wa_price = "0.000000",
 spread_hc = "0.000000",
 value = "0.000000",
 value_coef = "0.000000",
}</pre>
=============
а также ртс, золото, нефть, газ...<br /><br />Правильный выход для CRH6:<br />
====code====
<pre>2429&nbsp;&nbsp;&nbsp;0.0
{
 balance = "0",
 can_buy = "2429",
 can_buy_own = "47",
 can_sell = "2429",
 can_sell_own = "0",
 client_type = "5",
 d_long = "0.080000",
 d_min_long = "1.000000",
 d_min_short = "1.000000e+50",
 d_short = "0.080000",
 is_asset_sec = "0",
 is_futures = "1",
 is_long_allowed = "0",
 is_margin_sec = "0",
 is_rest_short_sec = "0",
 is_short_allowed = "0",
 lim_long = "-1.000000",
 lim_short = "-1.000000",
 limit_kind = "0.000000",
 long_coef = "1.000000",
 long_wa_price = "0.000000",
 open_value = "0.000000",
 open_value_coef = "0.000000",
 position_valuation = "0.000000",
 profit_loss = "0.000000",
 share = "0.000000",
 short_coef = "1.000000",
 short_wa_price = "0.000000",
 spread_hc = "0.000000",
 value = "0.000000",
 value_coef = "0.000000",
}</pre>
=============
и для SRH6<br />
====code====
<pre>533&nbsp;&nbsp;&nbsp;0.0
{
 balance = "0",
 can_buy = "533",
 can_buy_own = "0",
 can_sell = "514",
 can_sell_own = "0",
 client_type = "5",
 d_long = "0.120000",
 d_min_long = "1.000000",
 d_min_short = "1.000000e+50",
 d_short = "0.125000",
 is_asset_sec = "0",
 is_futures = "1",
 is_long_allowed = "0",
 is_margin_sec = "0",
 is_rest_short_sec = "0",
 is_short_allowed = "0",
 lim_long = "-1.000000",
 lim_short = "-1.000000",
 limit_kind = "0.000000",
 long_coef = "1.000000",
 long_wa_price = "0.000000",
 open_value = "0.000000",
 open_value_coef = "0.000000",
 position_valuation = "0.000000",
 profit_loss = "0.000000",
 share = "0.000000",
 short_coef = "1.000000",
 short_wa_price = "0.000000",
 spread_hc = "0.000000",
 value = "0.000000",
 value_coef = "0.000000",
}</pre>
=============
<br />Неужели эти функции не умеют до сих пор валютный курс учитывать хотя бы приблизительно? <br />
			<i>13.03.2026 11:54:36, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81987/topic9522/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81987/topic9522/</guid>
			<pubDate>Fri, 13 Mar 2026 11:54:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Поле is_rest_short_sec в выдаче getBuySellInfoEx не документировано</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81983/topic9521/">Поле is_rest_short_sec в выдаче getBuySellInfoEx не документировано</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Собственно, сабж. Брокер БКС выдаёт таблицу с этим полем. В документе &quot;Интерпретатор языка Lua.pdf&quot; даже версии 12.8.5 это поле не описано. <br />
			<i>13.03.2026 11:00:36, funduk.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81983/topic9521/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81983/topic9521/</guid>
			<pubDate>Fri, 13 Mar 2026 11:00:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Превышено максимальное количество транзакций 50 в интервале 1 сек</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81981/topic9520/">Превышено максимальное количество транзакций 50 в интервале 1 сек</a></b> <i>Некорректная работа sendTransaction</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			При ошибке &quot;Превышено максимальное количество транзакций 50 в интервале 1 сек&quot;<br />Не возвращается описание ошибки через sendTransaction.<br />Выводится пустое значение, как в случаях <B>успешного </B>выполнения.<br />Потратил не мало времени на выявление этого факта.<br />Просьба к разработчикам исправить этот недочёт и дать обратную связь.<br />Заранее, благодарен.<br /><br />
====code====
<pre>result = sendTransaction(_tab) -- выведет "" (пустое значение при ошибке "Превышено максимальное количество транзакций 50 в интервале 1 сек")</pre>
=============
<br />[FILE ID=13215] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=13215&" width="320" height="206" /><br /><i>13.03.2026 09:50:51, Михаил Понамаренко.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81981/topic9520/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81981/topic9520/</guid>
			<pubDate>Fri, 13 Mar 2026 09:50:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>В каком потоке делать финализацию при останове скрипта?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81952/topic9517/">В каком потоке делать финализацию при останове скрипта?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Если делать финализацию OnStop, то при закрытии квика скрипты будут останавливаться последовательно, т.е. ждать друг друга.<br />Если - в main, то есть вероятность, что main не уложится в отведённые 5 сек, и что-нибудь не успеет. Тогда надо в OnStop делать return побольше. Есть ли тут подводные камни?<br />Поделитесь опытом, как вы делаете? <br />
			<i>11.03.2026 17:20:39, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81952/topic9517/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81952/topic9517/</guid>
			<pubDate>Wed, 11 Mar 2026 17:20:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как сделать дамп для lua-скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81884/topic9511/">Как сделать дамп для lua-скрипта</a></b> <i>дамп памяти</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br />Время от времени наблюдаю рост памяти скрипта &quot;до бесконечности&quot;,<br />при этом единственное место которое может занимать много места,<br />вроде бы только <B>очередь </B>с двумя указателями (которая сохраняет сообщения для отправки другому приложению)<br /><br />Посмотрел по логам - все нормально, в момент когда память скрипта постоянно нарастает<br />очередь успешно хранит и отдает, удаляет сообщения, оставаясь пустой.<br /><br />Я тогда думаю, можно ли сделать какой-то дамп данных<br />всего Lua-скрипта, чтобы посмотреть что именно может занимать много памяти?<br /><br /><br />При этом раньше вроде никогда такой проблемы не было,<br />но это ещё попробую поисследовать работу на более старых версиях терминала Quik<br />(в версии 12.5 получается проблема точно есть) <br />
			<i>06.03.2026 00:22:46, Михаил Е.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81884/topic9511/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81884/topic9511/</guid>
			<pubDate>Fri, 06 Mar 2026 00:22:46 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>os.sysdate()</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81850/topic9509/">os.sysdate()</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			os.time() меняется на несколько мс раньше os.sysdate()<br />Ниже разница между os.time() в момент смены секунды и os.sysdate() (при системном таймере 15.625 ms).<br /><br />
====code====
<pre>&nbsp;&nbsp;for i = 1, 10 do
&nbsp;&nbsp;&nbsp;&nbsp;local t
&nbsp;&nbsp;&nbsp;&nbsp;local t0 = os.time()
&nbsp;&nbsp;&nbsp;&nbsp;repeat t = os.time() until t0 ~= t
&nbsp;&nbsp;&nbsp;&nbsp;local s = os.sysdate()
&nbsp;&nbsp;&nbsp;&nbsp;message(string.format("%.3f ms", 1000 * (t - os.time(s)) - s.mcs / 1000))
&nbsp;&nbsp;end
</pre>
=============
<br />Каждый блок - отдельный запуск скрипта в одном и том же терминале.<br /><table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>14.518 ms<br />14.472 ms<br />14.517 ms<br />14.517 ms<br />14.517 ms<br />14.517 ms<br />14.478 ms<br />14.517 ms<br />14.473 ms<br />14.517 ms</td></tr></tbody></table><table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>7.808 ms<br />7.805 ms<br />7.849 ms<br />7.808 ms<br />7.809 ms<br />7.810 ms<br />7.804 ms<br />7.807 ms<br />7.798 ms<br />7.298 ms</td></tr></tbody></table><table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>3.062 ms <br />3.062 ms <br />3.104 ms <br />3.060 ms <br />3.062 ms <br />3.062 ms <br />3.058 ms <br />3.104 ms <br />2.679 ms <br />2.682 ms </td></tr></tbody></table><table class="forum-spoiler"><thead onclick="if (this.nextSibling.style.display=='none') { this.nextSibling.style.display=''; BX.addClass(this, 'forum-spoiler-head-open'); } else { this.nextSibling.style.display='none'; BX.removeClass(this, 'forum-spoiler-head-open'); } BX.onCustomEvent('BX.Forum.Spoiler:toggle', [{node: this}]); event.stopPropagation();"><tr><th><div>Скрытый текст</div></th></tr></thead><tbody class="forum-spoiler" style="display:none;"><tr><td>14.115 ms<br />14.078 ms<br />14.117 ms<br />14.116 ms<br />14.116 ms<br />14.118 ms<br />14.116 ms<br />14.116 ms<br />14.116 ms<br />14.116 ms</td></tr></tbody></table><br />Почему при перезапуске скрипта дельта меняется? <br />
			<i>04.03.2026 14:07:05, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81850/topic9509/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81850/topic9509/</guid>
			<pubDate>Wed, 04 Mar 2026 14:07:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Функция getDepoEx может приводить к зависаниям терминала</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81628/topic9499/">Функция getDepoEx может приводить к зависаниям терминала</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В некоторых случаях функция getDepoEx может приводить к зависаниям терминала.<br />Мне удалось локализовать проблему. Так, при открытом графике с включенной настройкой показывать уровень позиции, запрос позиции через getDepoEx по инструменту, график которого открыт, может приводить к зависанию.<br />Предлагаю заинтересованным подтвердить или опровергнуть это.<br />Для этого нужно скачать архив рабочего места QUIK по ссылке: <noindex><a href="https://cloud.mail.ru/public/rrAb/8FTpZstGW" target="_blank" rel="nofollow">https://cloud.mail.ru/public/rrAb/8FTpZstGW</a></noindex><br />Распаковать в любое место на диске и запустить info.exe<br />В окне &quot;Доступные скрипты&quot; добавить скрипт getDepoEx.lua (лежит в архиве) и запустить его.<br />
====code====
<pre>function OnInit()
&nbsp;&nbsp;getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end</pre>
=============
<br />Можно удалить файл info.wnd, чтобы запустить info.exe без настроек. А затем открыть график Сбербанка и включить в настройках графика &quot;уровень позиции&quot;.<br />[FILE ID=13160] <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=13160&" width="612" height="242" /><br /><i>25.02.2026 11:01:22, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81628/topic9499/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81628/topic9499/</guid>
			<pubDate>Wed, 25 Feb 2026 11:01:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Кому мешает контекстное меню в таблицах рабочего места QUIK, созданных на Lua?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81555/topic9490/">Кому мешает контекстное меню в таблицах рабочего места QUIK, созданных на Lua?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В QUIK, наверное, с версии 9, в таблицах рабочего места QUIK, созданных на Lua, добавили всплывающее контекстное меню "Сортировать ...", которое вызывается при клике правой клавишей мышки в любой ячейке таблицы.<br />[FILE ID=13143]<br />На мой взгляд это меню лишнее, поскольку дублирует функционал сортировки из контекстного меню при клике на название столбца. Кроме того, сортировка включается кликом по названию столбца с зажатой клавишей Ctrl или Shift.<br />Всплывающее контекстное меню забирает три колбэка QTABLE_RBUTTONDOWN, QTABLE_RBUTTONDBLCLK, QTABLE_RBUTTONUP, на которые можно было бы повесить полезные пользовательские функции.<br />Нет, фактически колбэки срабатывают, но пользоваться ими не удобно из-за всплывающего меню, которое потом надо закрывать.<br />Возможно разработчики решили, что это стильно, модно, молодёжно. Но лично мне не удобно.<br />Напишите в комментариях, вам мешает это контекстное меню? <br />
			<img src="https://forum.quik.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=13143&" width="301" height="73" /><br /><i>20.02.2026 11:18:51, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81555/topic9490/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81555/topic9490/</guid>
			<pubDate>Fri, 20 Feb 2026 11:18:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Тип данных у номеров заявок</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81537/topic9485/">Тип данных у номеров заявок</a></b> <i>QLua</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день,<br /><br />Подскажите, в каком виде (типе данных) QUIK (Qlua) передает номера заявок? Всегда как integer или иногда как float? Есть какие-то стандарты и где их посмотреть? <br />
			<i>19.02.2026 17:01:12, Quikdll.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81537/topic9485/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81537/topic9485/</guid>
			<pubDate>Thu, 19 Feb 2026 17:01:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Гарантируется ли вызов колбэка при получении Квиком новых данных?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81464/topic9477/">Гарантируется ли вызов колбэка при получении Квиком новых данных?</a></b> <i>Вопросы разработчикам QUIK</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В документе "Использование Lua в Рабочем месте QUIK.pdf" на стр. 5-8 приведено описание событийной модели, как одного из подходов написания скриптов Lua в Рабочем месте QUIK.<br />На стр. 8 приведён пример скрипта NumberOfTradesOnCallbacks.lua<br /><br />Вопросы: <br />1) Гарантирует ли данный подход, что все данные по сделкам, которые получит терминал с момента запуска скрипта, будут обработаны скриптом в колбэке OnTrade?<br />2) Может ли быть такое, что данные на рабочее место поступили, а колбэк не был вызван? <br />
			<i>16.02.2026 14:26:33, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81464/topic9477/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81464/topic9477/</guid>
			<pubDate>Mon, 16 Feb 2026 14:26:33 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>getDepoEx в OnInit вешает терминал</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81417/topic9473/">getDepoEx в OnInit вешает терминал</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вот такой код вешает QUIK 12.8.3.4 при открытом графике SBER с включенной настройкой показывать уровень позиции.<br />
====code====
<pre>function OnInit()
&nbsp;&nbsp;getDepoEx("NC0011100000", "10547", "SBER", "NL0011100043", 20260216)
end</pre>
=============
<br /><noindex><a href="https://cloud.mail.ru/public/3cf9/wcQFLjhgr" target="_blank" rel="nofollow">Ссылка</a></noindex> на архив рабочего места. Зависает в т.ч. без подключения к серверу. При запуске скрипта после подключения - может зависнуть, а может и не зависнуть &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_confuse.png" border="0" data-code=":what:" data-definition="SD" alt=":what:" style="width:16px;height:16px;" title="Озадаченно" class="bx-smile" /> <br />
			<i>15.02.2026 22:27:20, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81417/topic9473/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81417/topic9473/</guid>
			<pubDate>Sun, 15 Feb 2026 22:27:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Как записать данные в массив?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81416/topic9472/">Как записать данные в массив?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			function main()<br /><br /><br /> &nbsp; &nbsp; &nbsp;ds = CreateDataSource(class_code, sec_code, interval);<br /><br />a=ds:Size()<br /><br />local cc13, cc14={}<br /><br /> for svp=a-(diap), a, 1 do <br /> &nbsp; tmp=InsertRow(t_id,1)<br /><br /> &nbsp; <br />cc13&#91;svp&#93; = ds:O(svp)<br />cc14&#91;svp&#93; = ds:С(svp)<br /><br /><br /> &nbsp; SetCell(t_id,tmp,8,tostring(cc13&#91;svp&#93;))<br /> &nbsp; SetCell(t_id,tmp,9,tostring(cc14&#91;svp&#93;))<br /><br />end<br />----<br />end<br /><br />Квик выдает &quot;attempt to index a nil value (local &#39;cc14&#39;)&quot; , и в сс13 тоже ничего не пишет, тоже nil<br /><br />Как записывать данные в массив на луа? <br />
			<i>15.02.2026 20:34:59, prugramzer.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81416/topic9472/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81416/topic9472/</guid>
			<pubDate>Sun, 15 Feb 2026 20:34:59 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Игровые движки для Lua?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message81221/topic9459/">Игровые движки для Lua?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Roblox не предлагать :D <br />
			<i>09.02.2026 12:13:12, Akrotr.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message81221/topic9459/</link>
			<guid>http://forum.quik.ru/messages/forum10/message81221/topic9459/</guid>
			<pubDate>Mon, 09 Feb 2026 12:13:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
