<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Самое слабое место QLUA]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Самое слабое место QLUA форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Sat, 02 May 2026 15:04:46 +0300</pubDate>
		<item>
			<title>Самое слабое место QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message62610/topic7238/">Самое слабое место QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_jciiXjeP" 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> написал:<br />Nikolz, &nbsp;используйте классы в луа стиле. Все получится само собой. &nbsp;<br />=============<br /><br />Полагаю Вы либо не поняли, либо ошибаетесь.<br />---------------<br />поясню на примере.<br />В функции main делаем цикл чтения свечей и замеряем время .<br />примерно так:
====code====
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nklib.startA();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while count&#62;=i do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nklib.startB();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; O=ds:O(i); H=ds:H(i); L=ds:L(i); C=ds:C(i);&nbsp;&nbsp;&nbsp;V=ds:V(i) Ti=ds:T(i)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x=nklib.stopB();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i=i+1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m1=m1+1;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tx&#91;i&#93;={O,H,L,C,V,Ti}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;&nbsp;x2=nklib.stopA();
Log:write(tostring(O)..","..tostring(H)..","..tostring(L)..","..tostring(C).."/"..tostring(m1)..","..tostring(0.1*x2).." "..tsoc&#91;m&#93;.."&#92;n");Log:flush()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--
</pre>
=============
В колбеке oпParam ставим цикл записи данных в таблицу <br />примерно так:
====code====
<pre>function OnParam (c,s)&nbsp;&nbsp;for m=1,10000 do t_&#91;14&#93;={c,s}; end
ncb=14; ESet(event);&nbsp;&nbsp;end -- изменение текущих параметров
</pre>
=============
После этого делаем три пуска программы.<br />1. без цикла 2. с циклом до 10 и 3. с циклом до 10000<br />------------------- &nbsp;<br />Что мы ожидаем получить:<br />Если колбеки не влияют на функцию main то время получения свечей должно быть примерно одинаковым для одинакового числа свечей.<br />===================== &nbsp;<br />Вот что получили <br />1.136.34,136.34,136.31,136.31/828,<B>2511.1</B> SBER<br />2.136.3,136.3,136.29,136.29/829,<B>6201.2</B> GAZP<br />3.136.27,136.27,136.26,136.26/830,<B>27710.4</B> GAZP<br />============= &nbsp;<br />Как видно время работы колбека влияет на время потока MAIN . &nbsp;<br />без &nbsp;цикла = 2511<br />с циклом 10 = 6200 <br />с циклом 10000= 27710 <br />================== <br />Никакие пляски с бубном в написании классов Вам ничего не дадут.<br />так как классы это всего-навсего массив в котором есть указатели на функции и данные.<br />============== &nbsp;<br />а данная проблема связана с блокировкой &nbsp;глобального стека виртуальной машины луа.<br />об этом я и рассказал ранее в этой теме. <br />
			<i>19.03.2022 19:27:39, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message62610/topic7238/</link>
			<guid>http://forum.quik.ru/messages/forum10/message62610/topic7238/</guid>
			<pubDate>Sat, 19 Mar 2022 19:27:39 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Самое слабое место QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message62609/topic7238/">Самое слабое место QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Пнх <br />
			<i>18.03.2022 23:06:08, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message62609/topic7238/</link>
			<guid>http://forum.quik.ru/messages/forum10/message62609/topic7238/</guid>
			<pubDate>Fri, 18 Mar 2022 23:06:08 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Самое слабое место QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message62608/topic7238/">Самое слабое место QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Дали игрушку для идиотов - &quot;потоки&quot; называется. После чего это тупорылое стадо, выковыривающее проблемы на ровном месте, получило широкое поле для словесного поноса с гнутыми пальцами. Любому дебилу в XX веке было очевидно, что в прерываниях ВСЕГДА следует делать минимальные вычисления - просто потому, что это прерывания. Любому дебилу было понятно, что пытаться заниматься &quot;ускорением вычислений&quot; в интерпретаторе есть Бред Сивой Кобылы. Любому дебилу было ясно, что при организации параллельной работы нужно, чтобы каждый из параллельно выполняющихся процессов был предварительно ИДЕАЛЬНО вылизан. Любому дебилу было известно, что глобальные переменные НИЧЕМ не отличаются от локальных. Любому дебилу должно быть доступно, что этот самый любой дебил может САМОСТОЯТЕЛЬНО &quot;полностью убрать из QLUA эти монстры-колбеки&quot;, что можно ВООБЩЕ НЕ ПЕРЕДАВАТЬ данные в другие потоки, которых у дебилов &quot;может быть любое число&quot;, а у нормальных людей это &quot;любое число&quot; равно нулю.<br /><br />О! Это правильно! Я как раз и &quot;свёл к минимуму использование глобальных переменных в функции main&quot;. Как я уже писал, их там всего-то тысяч сто. Ну, может, двести, но вряд ли больше. А вот классов как раз нет ни одного. Ни &quot;в луа стиле&quot;, ни &nbsp;в &quot;си стиле&quot; - нигде. Нет, не было и не будет. <br />
			<i>18.03.2022 22:47:36, Владимир.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message62608/topic7238/</link>
			<guid>http://forum.quik.ru/messages/forum10/message62608/topic7238/</guid>
			<pubDate>Fri, 18 Mar 2022 22:47:36 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Самое слабое место QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message62607/topic7238/">Самое слабое место QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Nikolz, &nbsp;используйте классы в луа стиле. Все получится само собой. &nbsp; <br />
			<i>18.03.2022 22:22:05, s_mike@rambler.ru.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message62607/topic7238/</link>
			<guid>http://forum.quik.ru/messages/forum10/message62607/topic7238/</guid>
			<pubDate>Fri, 18 Mar 2022 22:22:05 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Самое слабое место QLUA</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message62606/topic7238/">Самое слабое место QLUA</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Известно, что колбеки в QLUA &nbsp;блокируют основной поток терминала QUIK.<br />Решение изначально было спорное, но в ту пору попытка переубедить разработчиков в их ошибке была безрезультатна.<br />-----------------------<br />Как мера, якобы устраняющая данную проблему, по задумке разработчика QLUA &nbsp;был введен еще один поток для &nbsp;функции main.<br />-----------------------<br />Поэтому Всем известна рекомендация разработчиков делать минимальные вычисления в колбеках и выполнять основные расчеты в функции main.<br />==================<br />Однако, это кажущееся ускорение вычислений легко можно свести к нулю, что уверен и делается большинством &nbsp;программистов роботов на QLUA.<br />===================<br />Рассказываю в чем фишка.<br />================<br />Экспериментируя с реализацией пула потоков, &nbsp;обнаружил, что потоки, использующие область глобальных переменных,<br />а также функция main &nbsp;на самом деле не работают независимо от колбеков, а тоже останавливаются на время их работы.<br />Очевидно, это связано с блокировкой области глобальных переменных при работе колбеков.<br />====================<br />В итоге, если у Вас в функции main используются глобальные переменные, а это, в том числе , источники данных, <br />то параллельная работа функции main не получится.<br />------------------<br />В итоге поток Main будет останавливаться вместе с основным потоком терминала и Ваш робот на QLUA будет фактически <br />работать в одном потоке с остановками на каждом колбеке.<br />==========================<br />Прикольно, &nbsp;но есть решение, которое позволяет:<br />во-первых, полностью убрать из QLUA эти монстры-колбеки, останавливающие основной поток и функцию main в указанных выше случаях.<br />во-вторых, не останавливать основной поток &nbsp;вообще для передачи данных в другие потоки, которых может быть любое число. <br />=========================<br />я сомневаюсь, что разработчики когда-нибудь решат это сделать, так как им платят брокеры, а брокерам это до лампочки.<br />----------------------------<br />Поэтому могу лишь рекомендовать писателям роботов свести к минимуму использование глобальных переменных в функции main. <br />
			<i>18.03.2022 22:02:00, nikolz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message62606/topic7238/</link>
			<guid>http://forum.quik.ru/messages/forum10/message62606/topic7238/</guid>
			<pubDate>Fri, 18 Mar 2022 22:02:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
