<?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, 10 Jun 2026 14:46:21 +0300</pubDate>
		<item>
			<title>Закрывается DataSource при остановке скрипта?</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82606/topic9583/">Закрывается DataSource при остановке скрипта?</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			====code====
<pre>local run = true
function OnStop()
&nbsp;&nbsp;run = nil
&nbsp;&nbsp;message(tostring(ds:Close()))
end

function main()
&nbsp;&nbsp;ds = assert(CreateDataSource(class, sec, INTERVAL_M5))
&nbsp;&nbsp;while run do sleep(500) end
end</pre>
=============
<br />
====code====
<pre>local run = true
function OnStop()
&nbsp;&nbsp;run = nil
end

function main()
&nbsp;&nbsp;ds = assert(CreateDataSource(class, sec, INTERVAL_M5))
&nbsp;&nbsp;while run do sleep(500) end
&nbsp;&nbsp;message(tostring(ds:Close()))
end</pre>
=============
<br />Что в первом, что во втором случае, при нажатии на кнопку &quot;Остановить&quot; скрипт падает с ошибкой &quot;bad argument #1 to 'tostring' (value expected)&quot; <br />
			<i>08.06.2026 12:04:45, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82606/topic9583/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82606/topic9583/</guid>
			<pubDate>Mon, 08 Jun 2026 12:04:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Не срабатывает лимитная заявка sendTransaction, хотя рыночная проходит </title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82600/topic9581/">Не срабатывает лимитная заявка sendTransaction, хотя рыночная проходит </a></b> <i>Знатоки, подскажите возможную причину</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Знатоки, подскажите: рыночную заявку через sendTransaction успешно делает, а такую же лимитную - нет. Ошибок не показывает, цену ставлю заведомо такой, чтобы в стакане точно были предложения. Описал OnTransReply - не вызывается. В чем может быть дело? &nbsp; <br />
			<i>08.06.2026 10:54:17, Сергей Ларченко.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82600/topic9581/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82600/topic9581/</guid>
			<pubDate>Mon, 08 Jun 2026 10:54:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Внешние Lua-модули</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82592/topic9580/">Внешние Lua-модули</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Будет ли <B>Lua</B><B> виртуальная машина</B>, встроенная в <B>QUIK</B>, корректно работать с внешними (не встроенными в язык) модулями, которые я установил в свою систему через менеджер модулей <B><span class="bx-font" style="font-family:monospace">luarocks</span></B>?<br /><br />К примеру мне нужен модуль для распарсивания JSON данных.<br /><br />В Linux-консоли...
====code====
<pre>$ sudo luarocks install lua-cjson</pre>
=============
<br />В коде торгового робота...
====code====
<pre>local json = require( 'cjson' )
local tbl = json.decode( json_string )&nbsp;&nbsp;-- JSON string -&#62; Lua table
local json_string = json.encode( tbl )&nbsp;&nbsp;-- Lua table -&#62; JSON strin
</pre>
=============
<br />Будет такой код работать в торговом роботе? <br />
			<i>06.06.2026 14:44:07, Сергей Че.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82592/topic9580/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82592/topic9580/</guid>
			<pubDate>Sat, 06 Jun 2026 14:44:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Очередное зависание Lua-скрипта</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82567/topic9576/">Очередное зависание Lua-скрипта</a></b> <i>в функции getDepoEx</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			QUIK 13.0.0.165<br />Заинтересованные могут протестировать, скачав архив рабочего места по ссылке: <noindex><a href="https://cloud.mail.ru/public/PnRh/78X5kdGEB" target="_blank" rel="nofollow">https://cloud.mail.ru/public/PnRh/78X5kdGEB</a></noindex><br />Подключаться к серверу не требуется. Достаточно добавить в окно &quot;Доступные скрипты&quot; скрипт getDepoEx.lua (лежит в папке с программой) и запустить его.<br />
====code====
<pre>function main()
&nbsp;&nbsp;local n = getNumberOf("depo_limits")
&nbsp;&nbsp;message("Number depo_limits: " .. n)
&nbsp;&nbsp;if n &#62; 0 then
&nbsp;&nbsp;&nbsp;&nbsp;getDepoEx("NC0011100000", "10382", "SBER", "NL0011100043", 20260601)
&nbsp;&nbsp;end
&nbsp;&nbsp;message("Завершение работы main.")
end</pre>
=============
<br />При запуске скрипта в окне &quot;Системные сообщения&quot; появляется сообщение &quot;Number depo_limits: 4&quot;, и скрипт остаётся в запущенном состоянии. Сообщения &quot;Завершение работы main.&quot; нет, что говорит о том, что не происходит выхода из функции getDepoEx.<br />При этом процесс info.exe грузит один из логических процессоров на 100%. <br />
			<i>30.05.2026 16:48:51, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82567/topic9576/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82567/topic9576/</guid>
			<pubDate>Sat, 30 May 2026 16:48:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Сообщения об ошибках в Lua-скриптах не выводятся в окне сообщений</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82556/topic9575/">Сообщения об ошибках в Lua-скриптах не выводятся в окне сообщений</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Почему-то сообщения об ошибках в Lua-скриптах не выводятся в окне сообщений и таблице системных сообщений. <br />
			<i>28.05.2026 18:18:40, Йцукен.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82556/topic9575/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82556/topic9575/</guid>
			<pubDate>Thu, 28 May 2026 18:18:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Восстановление заявок после обрыва связи</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82546/topic9573/">Восстановление заявок после обрыва связи</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте. Иногда бывает такое, что робот пытаясь либо выставить заявку, либо изменить её, либо снять, отправляет транзакцию, и не дождавшись ответа, происходит обрыв связи с сервером. Когда связь восстанавливается, робот не знает, что случилось с заявкой. Я пытаюсь получить состояние заявки из таблицы заявок, но проблема в том, что при восстановлении связи окно квика часто зависает на некоторое время, и в это время getOrder_by_ID и getOrder_by_Number возвращают ответ, аналогичный ответу при отсутствии заявки, хотя заявка на самом деле существует. Когда квик перестаёт висеть, приходит нормальный ответ с существующей заявкой. Но как роботу понять, перестал квик висеть или нет, я не знаю. Есть ли какое-то решение, как роботу корректно восстановить статусы заявок, которые ему неизвестны, после восстановления связи? <br />
			<i>27.05.2026 17:48:11, Максим Трейдер.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82546/topic9573/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82546/topic9573/</guid>
			<pubDate>Wed, 27 May 2026 17:48:11 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Помогите с кодом</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82540/topic9572/">Помогите с кодом</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Хотел создать код, который выводит сообщение, <br />и другой код, который выводит сообщение, если переменная установлена ​​исходным кодом =)<br />Вместо того, чтобы выводить второе сообщение, он выводит одно дважды.<br />
====code====
<pre>:local uis = game:GetService("UserInputService")
local m1 = false
local toolequipped = falseuis.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 then
print("m1")
m1 = true
end
end)--// Services
local Players = game:GetService("Players")--// Variables
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()--// Functions
function ChildAdded()
if character:FindFirstChildOfClass("Tool") then
print("equipped")
toolequipped = true
end
end--// Connections
character.ChildAdded:Connect(ChildAdded)if m1 == true then
print("m1 is true")
endif toolequipped == true then
print("toolequipped is true")
end</pre>
============= <br />
			<i>25.05.2026 16:15:51, Cockalorum.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82540/topic9572/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82540/topic9572/</guid>
			<pubDate>Mon, 25 May 2026 16:15:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Не могу реализовать память через CSV файл</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message82523/topic9570/">Не могу реализовать память через CSV файл</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Всем добрый вечер. Мне 14, я пишу своему отцу пару скриптов, чтобы ему было удобнее работать в терминале. В этом скрипте должна быть реализована стратегия FiBo, вроде бы она довольно известная.<br />Суть в том что при увеличении цены срабатывает функция CheckLine, где я сравниваю строки в csv файле, состоящем из цен, по которым я покупал когда либо инструмент.<br />При покупке он должен записывать туда цену, при продаже вычеркивать одну из цен, ориентируясь на которую он продал.<br />Казус в том, что ничего из прошлой написанной мною строки он не делает. Память по просту не работает!<br />Я пишу скрипты на Qlua недолго, иногда использую ИИ (Извините меня все, я сам против вайбкодинга, но мне батя узкие сроки ставит). Помогите пожалуйста!!!!<br />Если есть любые другие замечания пишите.<br /><br />Сам скрипт:<br /><br />function OnInit()<br />--Настройки, изменять при надобности.--<br />	class = &quot;QJSIM&quot; -- Тип интсрумента<br />	sec = &quot;SBER&quot; -- Код интсрумента<br />	account = &quot;NL0011100043&quot; -- Номер аккаунта, тут всё понятно<br />	LotSize = 1 -- Кол-во лотов в заявке.<br />	step = 0.02 -- Шаг цены.<br />	limits = 10 -- Лимит торговли<br />	<br />	tid = 0 -- Не трогать!<br />	trz_comment = &quot;FIBO-2 --&gt; &quot; -- Не трогать.<br />	price = nil -- Не трогать.<br />	uprice = nil<br />	dprice = nil<br />	SellPrice = nil<br />	TradeNums = {}<br />	Trades&#91;&#93;<br />	<br />	CSV = io.open(getScriptPath()..&quot;/FiboTrades.csv&quot;, &quot;a+&quot;);<br />	secondfile = &quot;fibobuys.csv&quot;<br />end<br /><br />function CheckLine(number)<br />current_line = 0<br />	same = 0;<br />	ss = 0<br />	local CheckFile = io.open(secondfile, &quot;r&quot;);<br />	for line in CheckFile:lines() do<br />					if tonumber(line) == number then same = same+1; end<br />					if tonumber(line) &lt;= number then LimitSpot(&#39;S&#39;, number); break end; <br />					 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;current_line = current_line + 1<br />	end<br />				elseif same == 0 and climits ~= limits then LimitSpot(&#39;B&#39;, number) end<br />				<br />	CheckFile:close();<br />end<br /><br />function LimitSpot(operation, SpotPrice)<br />tid = tid+1<br />	transaction={<br />		&#91;&quot;TRANS_ID&quot;&#93;=tostring(tid),<br />		&#91;&quot;ACTION&quot;&#93;=&quot;NEW_ORDER&quot;,<br />		&#91;&quot;CLASSCODE&quot;&#93;=class,<br />		&#91;&quot;SECCODE&quot;&#93;=sec,<br />		&#91;&quot;OPERATION&quot;&#93;=operation,<br />		&#91;&quot;QUANTITY&quot;&#93;=tostring(LotSize),<br />		&#91;&quot;PRICE&quot;&#93;=tostring(SpotPrice),<br />		&#91;&quot;ACCOUNT&quot;&#93;=tostring(account),<br />		&#91;&quot;EXECUTION_CONDITION&quot;&#93;=&quot;PUT_IN_QUEUE&quot;,	-- тип заявки лимитная<br />	}<br />	res = sendTransaction(transaction)<br />	if res ~= &#39;&#39; then<br />		message(trz_comment..&#39;Transaction Error! &#39;..res)<br />		else<br />		message(trz_comment..&#39;Transaction Success! ID = &#39;..tid)<br />	end<br />end<br /><br />function math_round( roundIn , roundDig ) -- первый аргумент число для округления, второй - количество знаков после запятой <br /> &nbsp; &nbsp; local mul = 10^roundDig<br /> &nbsp; &nbsp; return ( math.floor( ( roundIn * mul ) + 0.5 )/mul )<br />end<br /><br />function main()<br />	message(trz_comment..&#39;Start.&#39;)<br />	climits = 0<br />	do_main = true<br /><br />	while do_main do<br />		sleep(1000)<br />	end<br />end<br /><br />function OnParam(class1, sec1)<br />	if class1 == class and sec1 == sec then<br />		price = math_round(getParamEx(class, &nbsp;sec, &quot;last&quot;).param_value, 2)<br />		if uprice ~= nil then<br />			if price &lt;= dprice then<br />				dprice = dprice-step<br />				uprice = uprice-step<br />				message(trz_comment..&#39;Price-- -&gt; &#39;..price)<br />				else if price &gt;= uprice then<br />					CheckLine(price);<br />					dprice = dprice+step<br />					uprice = uprice+step<br />					message(trz_comment..&quot;Price++ -&gt; &quot;..price)<br />				end<br />			end<br />		end<br />	end<br />end<br /><br />function OnTrade(trade)<br />	if trade.sec_code == sec and trade.class_code == class then<br />		if uprice == nil then<br />			uprice = trade.price + step<br />			dprice = trade.price - step<br />			message(trz_comment..&#39;Grid placed success!&#39;)<br />		end<br />		t = bit.band(tonumber(trade&#91;&#39;flags&#39;&#93;),4) -- 1 = sell 0 = buy<br />		if t == 0 then message(trz_comment..&quot;buy &quot;..trade.price); Op = &quot;Buy&quot;; climits = climits + 1;<br />		wr = io.open(secondfile, &#39;a+&#39;)<br />		wr:write(trade.price..&quot;\n&quot;);<br />		wr:flush();<br />		wr:close();<br />		<br />		else message(trz_comment..&quot;Sell &quot;..trade.price); climits = climits - 1; Op = &quot;Sell&quot;; SellPrice = nil;<br />			 remove_line_from_csv(secondfile, current_line)<br />		end<br />		<br />		<br />		for i=#TradeNums,1,-1 do<br />		-- Если данная сделка уже была записана, выходит из функции<br />		if TradeNums&#91;i&#93; == trade.trade_num then return; end;<br />	end;<br /> <br />	-- Если мы здесь, значит сделка не была найдена в числе уже записанных<br />	-- Добавляет в массив номер новой сделки<br />	TradeNums&#91;#TradeNums + 1&#93; = trade.trade_num;<br />	-- Вычисляет операцию сделки<br />	-- Создает строку сделки для записи в файл (&quot;Дата и время;Код класса;Код бумаги;Номер сделки;Номер заявки;Операция;Цена;Количество\n&quot;)<br />	local TradeLine = 	os.date(&quot;%c&quot;, os.time(trade.datetime))..&quot;;&quot;..<br />						trade.class_code..&quot;;&quot;..<br />						trade.sec_code..&quot;;&quot;..<br />						trade.trade_num..&quot;;&quot;..<br />						trade.order_num..&quot;;&quot;..<br />						Op..&quot;;&quot;..<br />						trade.price..&quot;;&quot;..<br />						trade.qty..&quot;\n&quot;;<br />	-- Записывает строку в файл<br />	CSV:write(TradeLine);<br />	-- Сохраняет изменения в файле<br />	CSV:flush();<br />end<br />	end<br />	<br />	function remove_line_from_csv(filename, line_to_remove)<br /> &nbsp;local input_file = io.open(filename, &quot;r&quot;)<br /> &nbsp;if not input_file then<br /> &nbsp; &nbsp;print(&quot;Ошибка открытия файла для чтения&quot;)<br /> &nbsp; &nbsp;return false<br /> &nbsp;end<br /><br /> &nbsp;local temp_filename = filename .. &quot;.tmp&quot;<br /> &nbsp;local output_file = io.open(temp_filename, &quot;w&quot;)<br /> &nbsp;if not output_file then<br /> &nbsp; &nbsp;print(&quot;Ошибка открытия временного файла для записи&quot;)<br /> &nbsp; &nbsp;input_file:close()<br /> &nbsp; &nbsp;return false<br /> &nbsp;end<br /><br /> &nbsp;local line_number = 1<br /> &nbsp;for line in input_file:lines() do<br /> &nbsp; &nbsp;if line_number ~= line_to_remove then<br /> &nbsp; &nbsp; &nbsp;output_file:write(line .. &quot;\n&quot;)<br /> &nbsp; &nbsp;end<br /> &nbsp; &nbsp;line_number = line_number + 1<br /> &nbsp;end<br /><br /> &nbsp;input_file:close()<br /> &nbsp;output_file:close()<br /> &nbsp;-- Удаляем старый файл и переименовываем временный<br /> os.remove(filename)<br /> &nbsp;os.rename(temp_filename, filename)<br /> &nbsp;message(&quot;deleted&quot;)<br />end <br />
			<i>20.05.2026 21:09:25, DimastaBalz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message82523/topic9570/</link>
			<guid>http://forum.quik.ru/messages/forum10/message82523/topic9570/</guid>
			<pubDate>Wed, 20 May 2026 21:09:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<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>
	</channel>
</rss>
