<?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>Sat, 02 May 2026 15:03:26 +0300</pubDate>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63329/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Для тех, кому интересно.<br />----------------------<br />В результате тестов, получилось &nbsp;следующее решение:<br />----------------------------<br />1) &nbsp;стаканы и обезличенные сделки &nbsp;принимаю в колбеках<br />-----------------------<br />2) свечи принимаю в main<br />-------------------------<br />3) индикаторы и алгоритмы решений реализую в отдельных потоках из пула потоков.<br />==================<br />Вот затраты времени на тестовом сервере:<br />Условие тестирование<br />220 инструментов<br />220 стаканов<br />обезличенные сделки по всем акциям на демо сервер.<br />================= 
====code====
<pre>SBER,i=829,len=0,SBER
SMLT,i=441,len=0,SMLT
VTBR,i=825,len=0,VTBR
VTBR,(us)=958.1
14,main(us)=11.2
QUote(us)=ALRS,62.4
QUote(us)=GMKN,62.1
QUote(us)=MTSS,59.7
QUote(us)=SBER,57.6
QUote(us)=VTBR,45.1
AllTrade(us)=3.1,GMKN,1293754
AllTrade(us)=1.8,GMKN,1293755
AllTrade(us)=1.5,SBER,1293756
AllTrade(us)=1.5,SBER,1293757
AllTrade(us)=1.4,SBER,1293758
AllTrade(us)=1.4,SBER,1293759
AllTrade(us)=1.3,SBER,1293760
AllTrade(us)=1.5,SBER,1293761
AllTrade(us)=1.4,GAZP,1293762
AllTrade(us)=1.3,POLY,1293763
AllTrade(us)=1.3,POLY,1293764
AllTrade(us)=1.3,POLY,1293765
AllTrade(us)=1.3,ALRS,1293766
AllTrade(us)=1.2,ALRS,1293767
AllTrade(us)=1.3,ALRS,1293768
AllTrade(us)=1.3,YNDX,1293769
AllTrade(us)=1.4,YNDX,1293770
AllTrade(us)=1.2,YNDX,1293771
AllTrade(us)=1.2,KZOSP,1293772
AllTrade(us)=1.3,GMKN,1293773
AllTrade(us)=1.3,ALRS,1293774
AllTrade(us)=1.3,ALRS,1293775
QUote(us)=RIM2,180.9
AllTrade(us)=3.4,SiM2,1293776
QUote(us)=RIM2,127.6
QUote(us)=RIM2,126.8
QUote(us)=RIM2,149.7
QUote(us)=RIM2,129.5
QUote(us)=RIM2,127.7
AllTrade(us)=2.2,RIM2,1293777
</pre>
=============
В AllTrade &nbsp;последнее число это всего записей таблице обезличенных сделок примерно 1.3 млн.сделок<br />----------- <br />
			<i>19.05.2022 18:07:48, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63329/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63329/topic7323/</guid>
			<pubDate>Thu, 19 May 2022 18:07:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63269/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_mao5QVEv" href="/user/15203/" bx-tooltip-user-id="15203">БорисД</a>, Борь, у меня сегодня ночью всё легло в единую схему, абсолютно всё! И фондовый рынок, и срочный, и свечная торговля, и спредовая. Пока меня лучше не кантовать денёк-другой, я тебе подробно отпишу потом по мылу. Коротко по твоему сообщению:<br /><br />1. В Квике гоняться за данными из стакана, строго говоря можно, но действительно очень сложно (особенно, если учитывать проблемы с синхронизацией), а самое главное - и не нужно: данные в стакане очень быстро меняются вблизи бид и аск, но там тупо нет времени на анализ стакана - те же данные в миллион раз быстрее можно получить из ТТТ. Остальные же данные стакана довольно статичны (даже для ручной торговли), но именно из-за удалённости от текущего состояния курса они тоже не нужны: здесь решения лучше принимать по свечам, а не по стакану, то есть стакан (даже без учёта его тормознутости и глюковатости) для принятия решений не нужен вообще. Свечами, получаемыми из Квика, тоже пользоваться нельзя - слишком ужасен софт для их получения, но мы с тобой, слава богу, знаем, что здесь нужно делать.<br /><br />2. Умный робот на Луа и в Квике возможен. Не этот долбаный ИИ, конечно, а просто очень качественный, который заткнёт за пояс любого трейдера, торгующего руками.<br /><br />3. Нет, &quot;имеем&quot; не значит &quot;предполагаем&quot;, это значит &quot;удалось выяснить из прочитанных статей&quot;. <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" /> <br /><br />4. Анализ текущей таблицы сделок по инструменту (если ты имеешь в виду таблицу обезличенных сделок) также неприменим из-за жутких тормозов и постоянного риска получать недостоверные данные. Графики скрипту не нужны, так что это только дополнительные тормоза. Но у нас есть свечи, а это лучше и надёжнее, чем любые графики и стаканы. Монетка хороша для высокочастотной торговли, поскольку там элемент случайности наиболее велик, но даже там есть информация, которая способна повысить вероятность принятия правильных решений.<br /><br />5. Стоп-заявки и другие поручения брокеру совершить сделку хороши только для ручной торговли, чтобы не сидеть постоянно за монитором и портить глаза и жопу. Для скрипта использовать подобные технологии &quot;просто неприлично&quot;, ведь он постоянно следит за рынком, а чем позже принимается решение, чем ближе оно к моменту совершения сделки, тем больше у нас информации для того, чтобы решение было правильным. Их использование может быть оправданным только если заявки ставятся достаточно далеко от спреда, на случай &quot;а вдруг курс туда ломанётся&quot;, но вероятность срабатывания таких заявок стремится к нулю, так что погоды они не делают в любом случае, а сложности к алгоритму резко прибавляют.<br /><br />6. Математические прогнозы по определению штука вероятностная, значит, во-первых, особая точность здесь не нужна и, во-вторых, любая заявка автоматически является прогнозом: мы надеемся, что курс пойдёт именно туда, куда нам надо. Но мы должны грамотно отработать обе ситуации: что делать, если курс пошёл туда, и что, если не туда.<br /><br />7. Да, &quot;доят лохов, в основном, не на этом&quot;, но и на этом тоже. А &quot;психология&quot; скрипт мало волнует: нервы у него крепкие, да и внимательность на высоте.<br /><br />8. Да, с твоими аппетитами стакан нужен, как и собственный сервер на бирже, но в Квике это бесполезно пытаться использовать. Забыли, как страшный сон! Как говорил незабвенный Владимир Ильич: &quot;Мы пойдём другим путём&quot;. <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>15.05.2022 11:32:36, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63269/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63269/topic7323/</guid>
			<pubDate>Sun, 15 May 2022 11:32:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63267/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_4GuxpqgY" href="/user/14299/" bx-tooltip-user-id="14299">Владимир</a> написал:<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex>, &nbsp;<br />====quote====<br />Относительно приема данных в различных потоках есть разница в получении данных по свечам и по стаканам.<br />=============<br /> Ни малейшей! И то, и другое реализовано в Квике настолько безобразно, что пользоваться ни тем, ни другим просто нельзя- это глюки и тормоза, тормоза и глюки. А приём данных в разных потоках - это готовые ошибки синхронизации. А умный робот не тратит время ни на приём стаканов, ни на анализ их содержимого: работа со стаканом в принципе дурость, а ещё и в Квике это дурость в квадрате. <br />------------------------------- &nbsp; &nbsp; В Квике гоняться за данными из стакана &nbsp;вообще то можно , но очень сложно . Так как уже сам Квик настолько глючный и хреновый софт &nbsp;что мало у кого получилось создать на &nbsp;основе данных из Квика свой собственный &nbsp;и прибыльный робот ..... по крайней мере на этом сайте никто не заявил об этом однозначно с предоставлением фактов подтверждающих это. &nbsp;А Умный робот при помощи этого глючного Квика &nbsp;это просто научная фантастика &nbsp;( теоретически возможно а практически не выполнимо в ближайшие много лет , тем более что &nbsp;разработчикам и брокерам это &nbsp;совсем не нужно от слова &quot;совсем &quot; . Поэтому про умный робот на Луа и в Квике лучше даже не мечтать , не для трейдеров создавалась прога Квик и трейдерам она поэтому предоставляется бесплатно. <br /><br />Прям заинтересовался: кому и на кой может понадобиться стакан? Полистал пяток первых попавшихся статеек на эту тему от тех, кто эту хрень рекламирует. В смысле, считает хоть как-то полезной. Имеем:<br /><br />---------------------------------- &nbsp; &nbsp; &nbsp; &nbsp;Имеем или предполагаем ? &nbsp;Сначала предполагаем &nbsp;что &nbsp;актуальные решения трейдер может принимать &nbsp;всего лишь по нескольким аналитическим данным получаемым от биржи : <br /> ------------1- Анализ текущей таблицы сделок по инструменту <br />---------------2- Анализ графика &nbsp;цен по одному или нескольким выбранным тайфреймам <br />---------------3- &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;( например дубли сообщений по вашим сделкам &nbsp;и вашим выставленным заявкам )<br />---------------4- &nbsp;монетка : по принципу Орел или Решка. Но этот пункт &nbsp;для принятия решений &nbsp;для выставления заявок &nbsp;как был так и останется &nbsp;угадайкой. &nbsp;Конечно &nbsp;в нем можно потыркаться &nbsp;и попробовать найти свой грааль &nbsp; при помощи &nbsp;использования стоп-заявок и тейк -профитных заявок . но все равно это &nbsp;будет &nbsp;из разряда &nbsp;: &quot;подкинь монетку. &quot;<br />------------------5- математические прогнозы - &nbsp;здесь тоже не все так просто &nbsp;потому что прогнозы были и всегда останутся прогнозами , &nbsp;ну это &nbsp;тоже самое как правильно угадать будующую погоду , и гарантированно &nbsp;это предсказать &nbsp;по прежнему не может даже гидрометеоцентр - чего уж нам пытаться сдесь ловить ? <br />------------------6- айсберг заявки и прочая лабуда &nbsp;типа арбитражной торговли на мой взгляд совсем не заслуживает внимания и попыток &nbsp;это изучать и использовать. Ни один серьёзный маркет мейкер или кукловод &nbsp;эти &nbsp;вещи не использует , и к тому же они несут дополнительную биржевую комиссию для тех кто их пытается применять. &nbsp;Тут уж лучше монетку подкидывать чем айсберги &nbsp;и арбиртражные &nbsp;заявки выставлять . <br /><br /><br /><br /><br />1. Обнаружение айсберг-заявок. Обсуждалось когда-то здесь. Выяснилось, что они нафиг не нужны, а обнаружить их в стакане можно лишь тогда, когда их подаёт очень тупой инвестор. Или, наоборот, очень умный, который &nbsp;хочет , чтобы его заявки были обнаружены. А спрятать айсберг от доморощенных аналитиков при желании проще простого.<br /><br />2. Ух ты! &quot;Сейчас биржевые стаканы считаются довольно устаревшей моделью анализа рынка и поэтому все меньше трейдеров ими пользуются&quot;. Дык я про то и говорю! Лично я этим говном не пользовался никогда. Разве что при ручной торговле, ещё до появления своего первого скрипта. И не для анализа, разумеется, а для совершения сделок. Ну да, тут и говорят про то, что всякие кукловоды доят лохов на фиктивных заявках и других &quot;стаканных&quot; разводках. ----------- &nbsp;доят в основном не на этом а немного на другом . &nbsp;В биржевой торговле &nbsp;самый главный фактор для принятия решений это психология , и вот на этм трейдеров и доят. <br /><br />3. Собссно, больше в этих статьях ничего и не написано - так, ликбез, что такое стакан, бид, аск и прочая лабуда. Ха-ха-ха! &quot;Вникать в анализ биржевого стакана полезно скальперам. Трейдерам на более длинных дистанциях следует ориентироваться на уровни поддержки/сопротивления и различные индикаторы&quot;. Детский сад!<br /><br />4. О! &quot;Кому нужен биржевой стакан цен&quot;. Вот я как раз и пытаюсь выяснить. Так кому же? &nbsp;-------- &nbsp;Мне &nbsp;он конечно нужен , но в Квике это бесполезно пытаться &nbsp;использовать. Не, ну болтовня на тему &quot;таблица предоставляет возможность отслеживать текущие сделки по ценной бумаге, оценивать настроения рынка и сформировать собственную линию поведения&quot; меня не интересуют - кому и на кой? Увы, больше ничего, кроме блеяния на тему &quot;внимание следует обращать на крупные лоты, а если у вас не крупные инвестиции, то достаточно аск и бид&quot; или &quot;необходимо применять комплексный подход&quot;. В общем, говно этот стакан. Как и &quot;уровни поддержки/сопротивления и различные индикаторы&quot;. Как и многопоточность. --------- опять таки это справедливо для Квика с его Луа , &nbsp;но не в глобальном плане. <br />=============<br /> <br />
			<i>15.05.2022 05:02:20, БорисД.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63267/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63267/topic7323/</guid>
			<pubDate>Sun, 15 May 2022 05:02:20 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63266/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_4CZBrZGU" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, <br />====quote====<br />Относительно приема данных в различных потоках есть разница в получении данных по свечам и по стаканам.<br /><br />=============<br />Ни малейшей! И то, и другое реализовано в Квике настолько безобразно, что пользоваться ни тем, ни другим просто нельзя - это глюки и тормоза, тормоза и глюки. А приём данных в разных потоках - это готовые ошибки синхронизации. А умный робот не тратит время ни на приём стаканов, ни на анализ их содержимого: работа со стаканом в принципе дурость, а ещё и в Квике это дурость в квадрате.<br /><br />Прям заинтересовался: кому и на кой может понадобиться стакан? Полистал пяток первых попавшихся статеек на эту тему от тех, кто эту хрень рекламирует. В смысле, считает хоть как-то полезной. Имеем:<br /><br />1. Обнаружение айсберг-заявок. Обсуждалось когда-то здесь. Выяснилось, что они нафиг не нужны, а обнаружить их в стакане можно лишь тогда, когда их подаёт очень тупой инвестор. Или, наоборот, очень умный, который <B>хочет</B>, чтобы его заявки были обнаружены. А спрятать айсберг от доморощенных аналитиков при желании проще простого.<br /><br />2. Ух ты! &quot;Сейчас биржевые стаканы считаются довольно устаревшей моделью анализа рынка и поэтому все меньше трейдеров ими пользуются&quot;. Дык я про то и говорю! Лично я этим говном не пользовался никогда. Разве что при ручной торговле, ещё до появления своего первого скрипта. И не для анализа, разумеется, а для совершения сделок. Ну да, тут и говорят про то, что всякие кукловоды доят лохов на фиктивных заявках и других &quot;стаканных&quot; разводках.<br /><br />3. Собссно, больше в этих статьях ничего и не написано - так, ликбез, что такое стакан, бид, аск и прочая лабуда. Ха-ха-ха! &quot;Вникать в анализ биржевого стакана полезно скальперам. Трейдерам на более длинных дистанциях следует ориентироваться на уровни поддержки/сопротивления и различные индикаторы&quot;. Детский сад!<br /><br />4. О! &quot;Кому нужен биржевой стакан цен&quot;. Вот я как раз и пытаюсь выяснить. Так кому же? Не, ну болтовня на тему &quot;таблица предоставляет возможность отслеживать текущие сделки по ценной бумаге, оценивать настроения рынка и сформировать собственную линию поведения&quot; меня не интересуют - кому и на кой? Увы, больше ничего, кроме блеяния на тему &quot;внимание следует обращать на крупные лоты, а если у вас не крупные инвестиции, то достаточно аск и бид&quot; или &quot;необходимо применять комплексный подход&quot;. В общем, говно этот стакан. Как и &quot;уровни поддержки/сопротивления и различные индикаторы&quot;. Как и многопоточность. <br />
			<i>14.05.2022 17:38:42, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63266/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63266/topic7323/</guid>
			<pubDate>Sat, 14 May 2022 17:38:42 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63264/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ySR956GA" href="/user/14016/" bx-tooltip-user-id="14016">Незнайка</a> написал:<br />Наверное, это можно проверить опытным путём.<br /><br />Если обращение к хранилищу данных реализовано через одну дверь - основной поток, - то все остальные потоки, сколько бы их не было запущено, выстроятся в одну очередь у входа в дверь. И при запуске нескольких скриптов, &quot;одновременно&quot; запрашивающих, например, данные стаканов мы не увидим сколько-нибудь существенного ускорения по сравнению с одним скриптом, запрашивающим по очереди такое же количество стаканов.<br />Проверим: 
====code====
<pre>&nbsp;&nbsp; function&nbsp;&nbsp; main ()
&nbsp;&nbsp; local&nbsp;&nbsp;t&nbsp;&nbsp;=&nbsp;&nbsp; os.clock ()
&nbsp;&nbsp; for&nbsp;&nbsp;_&nbsp;&nbsp;=&nbsp;&nbsp; 1 ,&nbsp;&nbsp;100000&nbsp;&nbsp; do 
&nbsp;&nbsp;&nbsp;&nbsp; getQuoteLevel2 (class, sec)
&nbsp;&nbsp; end 
&nbsp;&nbsp; message (tostring( os.clock ()&nbsp;&nbsp;-&nbsp;&nbsp;t))
 end&nbsp;&nbsp; </pre>
=============
 Проведём несколько тестов с 1-м, 2-мя, 3-мя, 4-мя одновременно запущенными скриптами.<br /><br />Результаты:<br />1 скрипт: 6.5 сек<br />2 скрипта: по 15.2 сек каждый<br />3 скрипта: по 23.1 сек каждый<br />4 скрипта: по 30.4 сек каждый<br /><br />При этом, во всех случаях было загружено только одно ядро процессора, что как бы намекает на использование только одного потока для доступа к данным.<br />=============<br />Относительно приема с сервера данных в одном потоке я уже писал ранее и приводил тест аналогично вашему.<br />----------------------------<br />это связано с тем, что для реализации приема в майн используется общий глобальный стек луа - т е единственная область памяти и следовательно доступ к ней сделан с блокировкой.<br />================<br />Относительно приема данных в различных потоках есть разница в получении данных по свечам и по стаканам.<br />-------------- <br />История Стаканов &nbsp;очевидно не хранится в архиве, поэтому прием стакана выполняется в основном потоке и изменяет образ стакана в архиве. <br />---------------- <br />Со свечами дело иначе. &nbsp;<br />Закрытые свечи - это история и она накапливается в архиве. Прием же выполняется лишь по незакрытой свече. <br />Поэтому чтение свечи из истории вполне допустимо в различных потоках одновременно.<br />------------------ <br />Но чтобы это было возможно, надо реализовать в QLUA механизм работы с глобальным стеком Один пишет -все читают. А это очевидно разработчики делать не стали.<br />Поэтому и не выходит каменная чаша.<br />=============<br />Но даже в этом случае , прием в различных потоках пусть и последовательно позволяет ускорить вычисления по сравнению с приемом в одном потоке.<br />----------------<br />Приняв на грудь стакан, поток приступает к его обработке, а следующий поток примет свой стакан и начнет его обрабатывать параллельно с первым.<br />-------------<br />Таким образом, даже в случае последовательного приема потоками &nbsp;стаканов, &nbsp;обработку их содержимого потоки будут делать параллельно .<br />------------------<br />Так как основное время &nbsp;умный робот тратит не на прием стаканов, а на анализ их содержимого и беседу с товарищами, которые тоже приняли по стакану,<br /> то прием даже по очереди стаканов &nbsp;актуален и перспективен. <br />
			<i>14.05.2022 12:43:48, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63264/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63264/topic7323/</guid>
			<pubDate>Sat, 14 May 2022 12:43:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63230/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_r4Hr792b" href="/user/14016/" bx-tooltip-user-id="14016">Незнайка</a>, Несколько потоков и несколько скриптов - разные вещи: скрипт - это процесс, и он не обязательно однопоточный. Другое дело, что для торговли ни то, ни другое нафиг не нужно. Впрочем, не совсем так: мои три стека можно обозвать и &quot;потоками&quot;, но все они сделаны не для упрощения кода (как раз наоборот) и не для ускорения обработки (они её замедляют), а исключительно для компенсации глюков системного софта Квика. Приходится буферизовать а) подачу заявок в Квик б) получение данных о сделках по прерываниям и в) обработку этих данных.<br /><br />А так согласен: &quot;Хоть тысячу отдельных потоков сделай, они все встанут в очередь при обращении к хранилищу&quot;. <br />
			<i>10.05.2022 13:49:36, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63230/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63230/topic7323/</guid>
			<pubDate>Tue, 10 May 2022 13:49:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63228/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Наверное, это можно проверить опытным путём.<br /><br />Если обращение к хранилищу данных реализовано через одну дверь - основной поток, - то все остальные потоки, сколько бы их не было запущено, выстроятся в одну очередь у входа в дверь. И при запуске нескольких скриптов, &quot;одновременно&quot; запрашивающих, например, данные стаканов мы не увидим сколько-нибудь существенного ускорения по сравнению с одним скриптом, запрашивающим по очереди такое же количество стаканов.<br />Проверим:
====code====
<pre>function main()
&nbsp;&nbsp;local t = os.clock()
&nbsp;&nbsp;for _ = 1, 100000 do
&nbsp;&nbsp;&nbsp;&nbsp;getQuoteLevel2(class, sec)
&nbsp;&nbsp;end
&nbsp;&nbsp;message(tostring(os.clock() - t))
end</pre>
=============
Проведём несколько тестов с 1-м, 2-мя, 3-мя, 4-мя одновременно запущенными скриптами.<br /><br />Результаты:<br />1 скрипт: 6.5 сек<br />2 скрипта: по 15.2 сек каждый<br />3 скрипта: по 23.1 сек каждый<br />4 скрипта: по 30.4 сек каждый<br /><br />При этом, во всех случаях было загружено только одно ядро процессора, что как бы намекает на использование только одного потока для доступа к данным. <br />
			<i>10.05.2022 13:21:28, Незнайка.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63228/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63228/topic7323/</guid>
			<pubDate>Tue, 10 May 2022 13:21:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63227/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_avGuG3B4" href="/user/14016/" bx-tooltip-user-id="14016">Незнайка</a> написал:<br /> <br />====quote====<br /><noindex><a href="/user/62/" target="_blank" rel="nofollow">nikolz</a></noindex> написал:<br />Прием данных от источника и стаканов реализуется &nbsp;в main.<br />-----------------<br />Все работает замечательно. &nbsp; Но узким местом &nbsp;является прием данных всех инструментов в одном потоке main.<br />-----------------------<br />Хочу принимать данные и стаканы в &nbsp;отдельном потоке &nbsp; каждого &nbsp;инструментов.<br />=============<br /> <br />А разве приём данных идёт не через основной поток? Хоть тысячу отдельных потоков сделай, они все встанут в очередь при обращении к хранилищу.<br />Или вы располагаете другой информацией?<br />=============<br />Как сделали разработчики, знают лишь они.<br />--------------- <br />Могу предположить, что есть как минимум два слоя приема данных.<br />-----------------------<br />Первый - это прием по каналу &nbsp;связи данных с сервера и запись их в архив терминала. <br />-------------------------<br />Возможно, что на этом этапе мы можем данные получать через колбек источника.<br />---------------------<br />Второй - это чтение уже принятых данных из хранилища терминала - это делают функции O,H,L,C,V,T.<br />=================<br />Для многопоточного получения этих данных важным фактом является то, что нам не надо писать эти данные в архив.<br />---------------------------<br />Так как в потоках мы лишь читаем из архива уже размещенные там банные &nbsp;, то никакой синхронизации потоков нам не требуется.<br />-------------------<br />Т е в данном случае потоки работают по принципу один пишет - остальные читают.<br />==============<br />Поэтому прием данных лишь в основном потоке реализуется в худшем случае лишь в первом слое. <br />=================<br />Я не использую колбек &nbsp;источника данных для приема ,<br /> поэтому предполагаю возможность одновременно ходить в архив любому количеству потоков. <br />
			<i>10.05.2022 12:01:23, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63227/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63227/topic7323/</guid>
			<pubDate>Tue, 10 May 2022 12:01:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63226/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_7pKpP1os" href="/user/62/" bx-tooltip-user-id="62">nikolz</a> написал:<br />Прием данных от источника и стаканов реализуется &nbsp;в main.<br />-----------------<br />Все работает замечательно. &nbsp; Но узким местом &nbsp;является прием данных всех инструментов в одном потоке main.<br />-----------------------<br />Хочу принимать данные и стаканы в &nbsp;отдельном потоке &nbsp; каждого &nbsp;инструментов.<br />=============<br /><br />А разве приём данных идёт не через основной поток? Хоть тысячу отдельных потоков сделай, они все встанут в очередь при обращении к хранилищу.<br />Или вы располагаете другой информацией? <br />
			<i>10.05.2022 10:09:43, Незнайка.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63226/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63226/topic7323/</guid>
			<pubDate>Tue, 10 May 2022 10:09:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63220/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_acCjTWwI" href="/user/62/" bx-tooltip-user-id="62">nikolz</a>, Лапуль, подсказываю:<br />1. Слово &quot;подскажите&quot; в данном случае нужно писать через &quot;е&quot;.<br />2. Потоки - понятие алгоритмическое, они могут быть организованы в любом количестве, но, как правило, в этом нет никакой необходимости: они являются главным источником тормозов и глюков. Идиотизм нынешней реализации QUIK как раз в том, что юзерам (по определению малоквалифицированным) подсунули ДВА потока, да ещё и подали этот маразм как крутое решение. То же самое со стеками: в моих программах не раз встречалось несколько стеков (максимально 5 или 6 - уже не помню), но это только для ОЧЕНЬ специфических задач! Для такой же примитивной задачи, как организация торговли, у меня изначально не было НИ ОДНОГО стека. А сейчас их целых ТРИ, и все до единого созданы лишь с целью борьбы с последствиями работы банды полуграмотных придурков, сварганивших ТАКОЙ программный интерфейс. Лапуль, дружеский совет: перестаньте заниматься хернёй, забудьте, как страшный сон всякие вумные словечки, вроде &quot;вектора&quot;, &quot;потоки&quot;, &quot;пакеты&quot;, &quot;мьютексы&quot; и прочую белиберду - пишите в ОДНОМ потоке. И будет Вам ЩАСТЬЕ! Вот слова &quot;синхронизация&quot;, к сожалению, забыть не получается, поскольку у этих дебилов всё-таки ДВА потока. Впрочем, я давно понял, что Ваша задача не написать нормальный скрипт, а изображать из себя крутого программера. Плохо получается, лапуль. Позорно плохо! <br />
			<i>09.05.2022 17:08:37, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63220/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63220/topic7323/</guid>
			<pubDate>Mon, 09 May 2022 17:08:37 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63217/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_kb3TsB84" href="/user/82/" bx-tooltip-user-id="82">swerg</a> написал:<br /> <br />====quote====<br />В функции main для каждого инструмента запускается свой поток. &nbsp;Потоки берутся из пула.<br />=============<br /> <br />Без иллюстрации кодом вот этого момента, сказать что-то предметное - невозможно.<br />Ибо не понятно чем ваши потоки (где не работает) отличаются от потока main (где работает).<br />=============<br />У меня в потоках запускаются скрипты, но в них нет библиотеки QLUA.<br />Как ее туда включит пока не разобрался.<br />---------------------<br />Относительно main.<br />Возможно &nbsp;ошибаюсь, &nbsp;Но как я понял, в main и основной программе скрипта используется общий глобальный стек.<br />Делал так, и вроде бы работает получение данных, но неустойчиво. &nbsp;<br />=============== <br />В настоящее время я принимаю данные для всех инструментов в main.<br />----------<br />А в скриптах других потоков использую &nbsp;матрицу данных, которая реализована через мапинг. &nbsp;<br />Через эту матрицу все скрипты получают доступ к любым данным любого потока.<br />При этом нет дублирования данных, но могу работать с векторами &nbsp;данных до 2 миллиардов элементов &nbsp;и таким же числом векторов.<br />--------------------<br />Так как реализую принцип - один пишет - все читают, то никакой &nbsp;синхронизации не требуется , так как нет конфликтов потоков.<br />--------------------<br />Синхронизацию требуется между колбеком, main и вызовом потока для конкретного инструмента.<br />-----------------------<br />Так как возможна ситуация, когда в очереди уже есть инструмент, либо для этого инструмента уже запущен поток.<br />--------------<br />Тут я использую &nbsp;синхронизацию колбека и майн через &nbsp;системный event, а синхронизацию потока и очереди через атомарные операции.<br />-----------------<br />Все работает просто замечательно. &nbsp;<br />===============<br />Провел тест &nbsp;максимального числа потоков,. <br />В результате получилось, &nbsp;что в пуле было открыто 11 потоков.<br />------------------<br />Причем &nbsp;первый поток &nbsp;запускался 23 тысячи раз, а одиннадцатый - 2 раза.<br />------------------<br />Потоки и прием данных активировались по колбеку &nbsp;onParam по 200 инструментам на тестовом сервере.<br />--------------------<br />Время вызова колбека составляло в основном 10 мкс. &nbsp;<br />-----------------------<br />Понятно, что данные на самом деле приходили пакетом и в данном случае это время реакции на очередную запись в пакете данных.<br />================ &nbsp;<br />В итоге, пока не получилось разнести прием данных по различным потокам, чтобы работало устойчиво.<br />------------------<br />Причину не знаю. <br />-------------------------<br />Если что-то подскажите, буду признателен.<br /> &nbsp; <br />
			<i>09.05.2022 16:08:04, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63217/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63217/topic7323/</guid>
			<pubDate>Mon, 09 May 2022 16:08:04 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63216/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br />В функции main для каждого инструмента запускается свой поток. &nbsp;Потоки берутся из пула.<br />=============<br /><br />Без иллюстрации кодом вот этого момента, сказать что-то предметное - невозможно.<br />Ибо не понятно чем ваши потоки (где не работает) отличаются от потока main (где работает). <br />
			<i>09.05.2022 08:27:07, swerg.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63216/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63216/topic7323/</guid>
			<pubDate>Mon, 09 May 2022 08:27:07 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Прием данных и стаканов  в  различных потоках</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message63193/topic7323/">Прием данных и стаканов  в  различных потоках</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день,<br />Ищу решение следующей проблемы.<br />---------------- &nbsp;<br />Сейчас у меня реализовано так:<br />--------------------<br />В функции main для каждого инструмента запускается свой поток. &nbsp;Потоки берутся из пула. &nbsp;Если свободного нет, то создается новый.<br />------------------<br />Данные передаются в поток через параметры скрипта и мапинг-файлы.<br />------------------<br />Прием данных от источника и стаканов реализуется &nbsp;в main.<br />-----------------<br />Все работает замечательно. &nbsp; Но узким местом &nbsp;является прием данных всех инструментов в одном потоке main.<br />-----------------------<br />Хочу принимать данные и стаканы в &nbsp;отдельном потоке &nbsp; каждого &nbsp;инструментов.<br />------------------ <br />Применение общего глобального стека не дает результата.<br />---------------------- &nbsp;<br />Если кто-то решил данную проблему, просьба сказать каким методом.<br />------------<br />Спасибо<br />================= &nbsp;<br />Отдельная пожелание разработчикам. <br /> Реализовать указанные функции для приема данных и стаканов для произвольного потока. <br />
			<i>06.05.2022 13:54:17, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message63193/topic7323/</link>
			<guid>http://forum.quik.ru/messages/forum10/message63193/topic7323/</guid>
			<pubDate>Fri, 06 May 2022 13:54:17 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
