<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Получение данных из таблицы текущих торгов]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Получение данных из таблицы текущих торгов форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Thu, 23 Apr 2026 14:48:53 +0300</pubDate>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51709/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Да ведь копеечная экономия! Я, правда, не работал &quot;с огромными тыщами&quot;, но несколько сотен тикеров этот вариант преспокойно обслуживает. <br />
			<i>12.01.2021 23:52:24, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51709/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51709/topic6110/</guid>
			<pubDate>Tue, 12 Jan 2021 23:52:24 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51708/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Вариант, что-то я не подумал об этом сразу. Я планировал использовать коллбек чтобы снизить нагрузку на скрипт, в том смысле что если изменений по инструмету не было, то и в коллбек он не придёт. <br />
			<i>12.01.2021 23:48:37, foobar.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51708/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51708/topic6110/</guid>
			<pubDate>Tue, 12 Jan 2021 23:48:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51707/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_Cvo7cVTF" href="/user/13427/" bx-tooltip-user-id="13427">foobar</a>, А я вообще с сервером не связываюсь: все данные получаю только от Квика, команды даю тоже только ему. В мейне стоит тупой цикл:
====code====
<pre> while f do
&nbsp;&nbsp;r();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- раз в секунду запускаем утилиту опроса
&nbsp;&nbsp;sleep(1000);&nbsp;&nbsp;&nbsp;-- текущих данных и принятия решений по ним
 end;
</pre>
=============
А внутри ежесекундного прерывания ещё один тупой цикл с опросом:
====code====
<pre>function r()&nbsp;&nbsp;&nbsp;-- мелкий обработчик прерывания по таймеру
 for i=0,N-1 do -- цикл по тикерам (прорисовка таблицы)
&nbsp;&nbsp;s=a&#91;i&#93;&#91;2&#93;;&nbsp;&nbsp;&nbsp;-- предыдущее и последнее значение курса
&nbsp;&nbsp;a&#91;i&#93;&#91;2&#93;=tonumber(getParamEx(a&#91;i&#93;&#91;1&#93;&#91;0&#93;,a&#91;i&#93;&#91;0&#93;,"LAST").param_value);
...
</pre>
=============
Таким образом, коллбэки мне нужны только на OnTrade. Не хило бы, конечно, иметь ещё и по OnOrder, но там множество разных глюков, разбираться с которыми не имею ни малейшего желания, а потому выкинул это прерывание вообще. Никто ничего не жрёт, ничего не помирает, таблица спокойно обновляется, команды на покупку или продажу передаются в Квик - что ещё нужно от скрипта? А в более тяжёлом (15-секундном) прерывании (вызываемом прямо из этого, то есть фактически тоже в мейне) я считаю свечи по разным периодам и ещё кое-что. Мне - ндравицца! <img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp; <br />
			<i>12.01.2021 23:29:37, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51707/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51707/topic6110/</guid>
			<pubDate>Tue, 12 Jan 2021 23:29:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51704/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Я пока остановился на таким варианте. Где-то тысяч 5 инструментов экспортируется, параметров 25, раз в 2 секунды Запас по производительности как будто бы есть. А в чём преимущество всё делать в мейне и как вообще отказаться от коллбэка?<br />Главное сервер надолго не отключать, если таблица отжирает гиг, то Квик помирает. При нормальной работе очереди нет (занимаемая скриптом память &lt; мегабайта).<br /><br /><br />
====code====
<pre>json = require("lib.json")
socket = require("lib.socket")
cfg = require("config")

function string.starts(String,Start)
&nbsp;&nbsp; return string.sub(String,1,string.len(Start))==Start
end

function hasOption (tab, val)
&nbsp;&nbsp;&nbsp;&nbsp;for index, value in ipairs(tab) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if string.starts(val, value) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;return false
end

function OnInit(script) 
&nbsp;&nbsp;&nbsp;isRun = true
&nbsp;&nbsp;&nbsp;connected = false
&nbsp;&nbsp;&nbsp;InstrumentsQueue = {}
end

function OnParam(class_code, sec_code)
&nbsp;&nbsp;&nbsp;if cfg.classes:find(class_code) ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (class_code == "SPBOPT" and hasOption(cfg.optionFilter, sec_code) == false) then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local data = {}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&#91;"market"&#93; = getParamEx(class_code, sec_code, "CLASS_CODE")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&#91;"ticker"&#93; = getParamEx(class_code, sec_code, "CODE")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-- кусь --
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.sinsert(InstrumentsQueue, data)
&nbsp;&nbsp;&nbsp;end
end

function OnStop()
&nbsp;&nbsp;&nbsp;isRun = false
&nbsp;&nbsp;&nbsp;client:close()
&nbsp;&nbsp;&nbsp;return 3000
end

function connect()
&nbsp;&nbsp;&nbsp;if connected == false then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client = socket.connect(cfg.server.host, cfg.server.port)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if client == nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Error connecting to socket server")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(5000)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connected = true
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Connected to socket server")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end


function main()
&nbsp;&nbsp;&nbsp;while isRun do 
&nbsp;&nbsp;&nbsp;connect()
&nbsp;&nbsp;&nbsp;if #InstrumentsQueue &#62; 0 and connected then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local data = InstrumentsQueue&#91;1&#93;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local jsonData = json.encode({type = "instrument", value = data})
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local status, msg = client:send(jsonData .. "&#92;r&#92;n")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if status ~= nil then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.sremove(InstrumentsQueue, 1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Error sending data to socket server #" .. msg)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if msg == "closed" then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message("Disconnected from socket server")
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;client:close()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connected = false
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep(50)
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end


</pre>
============= <br />
			<i>12.01.2021 22:19:55, foobar.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51704/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51704/topic6110/</guid>
			<pubDate>Tue, 12 Jan 2021 22:19:55 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51594/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Я формирую таблицу в мейне, заполняю её строками (удаляю ненужные или добавляю недостающие) тоже в мейне (раз в 15 секунд), заполняю ячейки данными тоже в мейне (раз в секунду) - тогда и получаю необходимые данные (через GetParamEx) для нескольких сотен инструментов разных классов. Времени это не жрёт, от слова &quot;совсем&quot;. И никаких коллбэков, от того же самого слова. Исключение - OnStop и OnTrade. Чего и &nbsp;другим советую. &nbsp;<img src="http://forum.quik.ru/upload/main/smiles/5/icon_smile.png" border="0" data-code=":smile:" data-definition="SD" alt=":smile:" style="width:16px;height:16px;" title="С улыбкой" class="bx-smile" /> &nbsp; <br />
			<i>08.01.2021 19:14:41, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51594/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51594/topic6110/</guid>
			<pubDate>Fri, 08 Jan 2021 19:14:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51588/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Я планировал формировать таблицу в потоке коллбэков, а обрабатывать её через main() По ощущениям, GetParamEx функция недорогая, хотя я планирую выгружать все инструменты всех классов. По идее, отсутствие в коллбеке строки, для которой коллбек сработал, говорит нам о том, что данные нескольких вызовов GetParamEx не будут консистенты, так как эта фунция общего назначения. Исключение только если во время работы коллбека в терминале србатывает глобальная брокировка на обновление данных.<br /><br /><br />По крайней мере мне это видится так. <br />
			<i>08.01.2021 15:05:18, foobar.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51588/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51588/topic6110/</guid>
			<pubDate>Fri, 08 Jan 2021 15:05:18 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51575/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Правильный вопрос.<br />Можно попробовать вот такую конструкцию, где используется синхронизация через table.ssort (см. документацию для прояснения деталей; в потоке коллбэков эта конструкция не нужна, а в потоке main нужна):<br /><br />
====code====
<pre>local paramTable = {}
&nbsp;&nbsp;table.ssort({ 0, 1 }, function(a, b)&nbsp;&nbsp;
&nbsp;&nbsp;-- Тут делаем нужные операции, которые, по идее, должны быть выполнены атомарно
&nbsp;&nbsp;paramTable&#91;"bid"&#93; =&nbsp;&nbsp;GetParamEx(аргументы для получения bid).param_value
&nbsp;&nbsp;paramTable&#91;"offer"&#93; =&nbsp;&nbsp;GetParamEx(аргументы для получения offer).param_value
&nbsp;&nbsp;-- Далее аналогично
return true
end)</pre>
=============
<br />Но вопрос к разработчикам терминала такой: этим мы достигнем требуемого (см. первое сообщение темы)? <br />
			<i>07.01.2021 08:07:40, _sk_.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51575/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51575/topic6110/</guid>
			<pubDate>Thu, 07 Jan 2021 08:07:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Получение данных из таблицы текущих торгов</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message51560/topic6110/">Получение данных из таблицы текущих торгов</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В документации ответа на вопрос не нашёл.<br />Предположим, мы хотим послать набор из 20 параметров из таблицы текущих торгов. В документации есть такой пример<br /><br />в callback OnParam вызываем GetParamEx по нужному классу-коду-параметру, записываем в глобальную табличку и в main() её вычитываем, чтобы не лочить поток обработчика.<br />Вопрос такой: GetParamEx работает над копией строки, которая была обновлена или нет?<br /><br />Вопрос связан с тем, что вызвав GetParamEx() 20 раз, я получу неконсистентные данные (пока получаю параметры поштучно строка изменяется) или всё будет хорошо? Мне бы получить оригинальную строку, которая бы была в Таблице текущих торгов. <br />
			<i>06.01.2021 13:39:25, foobar.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message51560/topic6110/</link>
			<guid>http://forum.quik.ru/messages/forum10/message51560/topic6110/</guid>
			<pubDate>Wed, 06 Jan 2021 13:39:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
