<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: CreateDataSource]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме CreateDataSource форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Mon, 13 Apr 2026 14:56:42 +0300</pubDate>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39462/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_EDZM0YCk" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br /> &nbsp;Вот когда откроете полторы тысячи тиковых TOC - тогда и будет смысл говорить про &quot;ничего не виснет&quot;.<br />=============<br />И опять &quot;об том и речь&quot;. Я прошу сделать ОДНУ ТОС из скрипта, но мне говорят, что это не фича а баг, поэтому не будем. <br />
			<i>28.08.2019 05:31:40, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39462/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39462/topic4699/</guid>
			<pubDate>Wed, 28 Aug 2019 05:31:40 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39459/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_BK3pW1fa" href="/user/1222/" bx-tooltip-user-id="1222">Anton</a> написал:<br />При открытии ТОС ничего же не виснет. <br />=============<br />Вот когда откроете полторы тысячи тиковых TOC - тогда и будет смысл говорить про &quot;ничего не виснет&quot;. <br />
			<i>27.08.2019 20:04:12, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39459/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39459/topic4699/</guid>
			<pubDate>Tue, 27 Aug 2019 20:04:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39430/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_sk8paZ8h" href="/user/47/" bx-tooltip-user-id="47"><noindex><a href="mailto:s_mike@rambler.ru" target="_blank" rel="nofollow">s_mike@rambler.ru</a></noindex></a>, однако ж спасибо за идею/ключевик, кое-что интересное вырисовывается. Главно дело чтобы это не пофиксили в &quot;одной из будущих версий&quot;. <br />
			<i>23.08.2019 19:01:41, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39430/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39430/topic4699/</guid>
			<pubDate>Fri, 23 Aug 2019 19:01:41 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39429/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			О том и речь в конечном итоге, CreateDataSource делает ненужную в данном случае работу. При открытии ТОС ничего же не виснет. Очевидно, что в ближайшие годы требование держать ТОС открытой снять не удастся, даже если прямо сейчас арка бросится теряя тапки реализовывать &quot;просто подписку на ТОС&quot;. <br />
			<i>23.08.2019 18:09:54, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39429/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39429/topic4699/</guid>
			<pubDate>Fri, 23 Aug 2019 18:09:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39428/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Все правильно. Вы подписываетесь на тучу ТИКОВЫХ данных и &nbsp;и хотите чего то сверх_естественного. <br /><br />конечно процессор трудится в потери лица - ему сервер отваливает лопатой работу. Это ж не скрипт сжирает процессорную мощность, а терминал, которому нужно всю эту помойку по полочкам разложить. &nbsp; <br />
			<i>23.08.2019 15:44:45, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39428/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39428/topic4699/</guid>
			<pubDate>Fri, 23 Aug 2019 15:44:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39426/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			В мейне тот же тайминг абсолютно (особо долго не ждал)<br />
====code====
<pre>EQOB (1464 securities) subscribed in 561 seconds
EQDB (30 securities) subscribed in 11 seconds
SMAL (233 securities) subscribed in 89 seconds
INDX (52 securities) subscribed in 19 seconds
TQBR (264 securities) subscribed in 100 seconds
TQDE (12 securities) subscribed in 4 seconds
TQOB (43 securities) subscribed in 16 seconds
TQIF (69 securities) subscribed in 25 seconds
TQTF (26 securities) subscribed in 9 seconds
EQQI (0 securities) subscribed in 0 seconds
OQQI (12 securities) subscribed in 4 seconds
</pre>
=============
<p></p>и та же загрузка ядра на 100% с сопутствующим воем кулера. Это не то, что спасет отца русской демократии. Самое ж смешное, что &quot;пожелание&quot; можно реализовать, просто создавая невидимую ТОС (ну, без условий по невмешательству в фильтры, но это можно пережить). Это можно и из скрипта-длл сделать вообще-то, просто хачить не хочется, бо апдейтонеустойчиво. <br />
			<i>23.08.2019 10:35:22, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39426/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39426/topic4699/</guid>
			<pubDate>Fri, 23 Aug 2019 10:35:22 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39425/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Какая разница, он и в мейне полтора часа кряхтеть будет, только что юзеру не так заметно, юай не виснет. <br />
			<i>23.08.2019 09:53:45, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39425/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39425/topic4699/</guid>
			<pubDate>Fri, 23 Aug 2019 09:53:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39424/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Зачем делать заказ в коллекции онинит? <br /><br />вы используете средства не по назначению. Можно жигули на грузить двумя тоннами картошки и машинка даст дуба. <br /><br /><br />делайте заказ из потока майн, и волосы будут крепкими и шелковистыми... &nbsp; <br />
			<i>23.08.2019 09:38:25, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39424/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39424/topic4699/</guid>
			<pubDate>Fri, 23 Aug 2019 09:38:25 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39419/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Немного конкретики. Квик 8.0.2.3, брокер настоящий (не демо), на момент запуска скрипта соединения с сервером нет, в квике открыта ТОС, в которой чуть меньше 2 млн вчерашних сделок. Полный код скрипта<br />
====code====
<pre>local split = function(str, delimiter)
&nbsp;&nbsp;&nbsp;local t = {}
&nbsp;&nbsp;&nbsp;local pat = "(&#91;^" .. delimiter .. "&#93;+)"
&nbsp;&nbsp;&nbsp;for s in string.gmatch(str, pat) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert(t, s)
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;return t
end

local SubscribeAllTrades = function()
&nbsp;&nbsp;&nbsp;local sublog = io.open(getScriptPath() .. "&#92;&#92;SUBLOG.txt", "w")
&nbsp;&nbsp;&nbsp;local cls = split(getClassesList(), ',')
&nbsp;&nbsp;&nbsp;local dss = {}
&nbsp;&nbsp;&nbsp;for k, v in pairs(cls) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sec = split(getClassSecurities(v), ',')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sublog:write(string.format('%s (%u securities)', v, table.getn(sec)))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sublog:flush()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local tim = os.clock()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for kk, vv in pairs(sec) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local ds = CreateDataSource(v, vv, INTERVAL_TICK)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if nil == ds then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sublog:write(string.format(' CreateDataSource failed on %s&#92;n', vv))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.insert(dss, ds)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sublog:write(string.format(' subscribed in %u seconds&#92;n', os.clock() - tim))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sublog:flush()
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;for k, v in pairs(dss) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if not v:SetEmptyCallback() then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sublog:write('SetEmptyCallback failed&#92;n')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;sublog:close()
end

OnI nit = function()
&nbsp;&nbsp;&nbsp;SubscribeAllTrades()
end
</pre>
=============
После ну очень долгого жужжания всеми вентиляторами компа получен следующий лог<br />
====code====
<pre>EQOB (1464 securities) subscribed in 556 seconds
EQDB (30 securities) subscribed in 11 seconds
SMAL (233 securities) subscribed in 89 seconds
INDX (52 securities) subscribed in 20 seconds
TQBR (264 securities) subscribed in 100 seconds
TQDE (12 securities) subscribed in 4 seconds
TQOB (43 securities) subscribed in 16 seconds
TQIF (69 securities) subscribed in 26 seconds
TQTF (26 securities) subscribed in 9 seconds
EQQI (0 securities) subscribed in 0 seconds
OQQI (12 securities) subscribed in 4 seconds
EQRP_INFO (2377 securities) subscribed in 909 seconds
TQQI (36 securities) subscribed in 13 seconds
TQOD (100 securities) subscribed in 37 seconds
CROSSRATE (7 securities) subscribed in 2 seconds
SPBFUT (212 securities) subscribed in 80 seconds
SPBOPT (10062 securities) subscribed in 3837 seconds
RTSIDX (261 securities) subscribed in 99 seconds
INSTR (4 securities) subscribed in 1 seconds
</pre>
=============
Опуская вопли и фейспалмы, резюмируем: для подписки на ТОС CreateDataSource не годится от слова совсем, слишком много ненужной работы (какой, интересно) выполняется внутри нее. Посему &quot;ща буит пожелание&quot; в соответствующем подфоруме.<br /><br />Кстати говоря, есть пара любопытных замечаний, к делу прямо не относящихся.<br />1. То же самое, реализованное в длл на сях, работает чутка (ну так раза в два) быстрее. Хотя, казалось бы, какая разница.<br />2. Пока основной (с окнами) поток висит на нашей OnInit, другие потоки квика продолжают себе спокойно работать. В частности, если есть подключение к серверу, оно не рвется, в фоне нормально подъезжают все сделки, что видно по растущему файлу alltrade.dat. Откуда возникает интересный вопрос, а что происходит с OnAllTrade в это время? Вызываться она не должна, т.к. мы еще не вышли из OnInit, но данные-то едут, там какая-то очередь накапливается или приехавшие во время OnInit новые сделки не приведут к последующему вызову OnAllTrade? По моим наблюдениям пропусков не происходит, но тут нужны более тщательные исследования (либо авторитетное заявление разработчиков). <br />
			<i>22.08.2019 23:23:17, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39419/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39419/topic4699/</guid>
			<pubDate>Thu, 22 Aug 2019 23:23:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>CreateDataSource</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message39402/topic4699/">CreateDataSource</a></b> <i>не делает квик сильнее</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<B>Введение</B><B><br /></B>Нужно экспортировать всю ТОС луа-скриптом. Дело не то чтобы сложное, если обязать юзера держать ТОС открытой. Но хочется покрасивше, давайте на старте подпишемся на все доступные инструменты? А давайте...<B><br /></B><br /><B>Глава первая, шапкозакидательская</B><br />
====code====
<pre>local SubscribeAllTrades = function()
&nbsp;&nbsp;&nbsp;local cls = split(getClassesList(), ',')
&nbsp;&nbsp;&nbsp;for k, v in pairs(cls) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local sec = split(getClassSecurities(v), ',')
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for kk, vv in pairs(sec) do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local ds = CreateDataSource(v, vv, INTERVAL_TICK)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if nil ~= ds then
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds:SetEmptyCallback()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message(v .. ':' .. vv)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ds = nil
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;end
end

OnI nit = function()
&nbsp;&nbsp;&nbsp;SubscribeAllTrades()
end</pre>
=============
запускаем - и квик намертво виснет, загрузив одно ядро на 100%. Через час-другой экперимент прекращен через прибитие квика. В научных целях упражнение повторялось неоднократно, результат один.<br /><br /><B>Глава вторая, исследовательская</B><br />Добавляем логи, смотрим, что происходит. Квик резво создает датасорцы, добирается до класса с опционами (а их там ой как много) и процесс начинает постепенно замедляться. Моего терпения хватило до момента, когда создание одного датасорца занимало 6 секунд, проверить апорию об ахиллесе и черепахе не вышло, квик был снова прибит.<br /><br /><B>Глава третья, кулхацкерская</B><br />Где-то между неудачными запусками в волшебном <B>INFO.ini</B> была ручками очищена секция<B> &#91;ALL_TRADES_DATA</B><B>&#93;,</B> так что содержала только
====code====
<pre>&#91;ALL_TRADES_DATA&#93;
req-all-trades-from-curr-moment=0
</pre>
=============
Запускаем наш недоскрипт снова и что мы видим? Квик по мере создания датасорцев пишет в эту секцию коды инструментов. Ну, это логично и ожидаемо, пока дело не доходит до секции с опционами. Их и так много, но квику все мало и он начинает добавлять и добавлять опционы по второму, третьему и так далее кругу. Удалось получить <B>INFO.ini</B> размером в 200 с лишним мегабайт, дальше ждать смысла не было. Весь этот объем был набран исключительно классом SPBOPT, остальные классы были &quot;нормальные&quot;, хотя я бы и ожидал от квика чуть большего интеллекта, чтобы самому заменить исчерпывающий список класса на ALL (при выборе всех инструментов в диалоге настройки получаемых данных он же как-то догадывается).<br /><br /><B>Глава четвертая, предположительная</B><br />Судя по всему, при подписке на опционы (лучше сказать на класс с большим количеством инструментов) квик где-то попадает в бесконечный цикл. Предположительно из-за жесткого лимита на размер буфера, т.е. после достижения определенного размера строки с инструментами квик дальше уже не смотрит, делает вывод &quot;инструмент не найден&quot; и добавляет его еще раз. История с <B>INFO.ini,</B> скорее всего, лишь внешнее проявление внутренней проблемы, поскольку поведение не меняется даже если там для всех классов вручную выставлено ALL.<br /><br /><B>Глава пятая, вопросительная</B><br />Опуская множество сопутствующих вопросов, я спрошу:<br />1) как из скрипта при закрытой ТОС подписаться на все доступные инструменты, чтобы это было выполнено в обозримое время?<br />2) если я из скрипта залезу в <B>INFO.ini</B> и перепишу секцию<B> &#91;ALL_TRADES_DATA</B><B>&#93;</B>, дабы освободить юзера от ковыряния в диалоге заказа данных, это будет грязный хак или не очень?<br /><br /><B>Глава пятая, пожелательная</B><br />Уже было такое пожелание здесь, но и я добавлю. Пусть <B>CreateDataSource</B> со вторым параметром <B>nil</B> и третьим <B>INTERVAL_TICK</B> подписывается сразу на весь класс (и при необходимости выставляет в <B>INFO.ini</B> для этого класса ALL). <br />
			<i>21.08.2019 17:01:12, Anton.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message39402/topic4699/</link>
			<guid>http://forum.quik.ru/messages/forum10/message39402/topic4699/</guid>
			<pubDate>Wed, 21 Aug 2019 17:01:12 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
