<?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>Sun, 03 May 2026 03:24:16 +0300</pubDate>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20730/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Старатель,<br />лучше с точки зрения скорости.<br />Куда быстрее приходит цена - в тек.таблицу, таблицу всех сделок или в ДатаСорс? <br />
			<i>03.12.2016 18:36:31, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20730/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20730/topic2326/</guid>
			<pubDate>Sat, 03 Dec 2016 18:36:31 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20728/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<noindex><a href="https://forum.quik.ru/messages/forum10/message20709/topic2326/#message20709" target="_blank" rel="nofollow">Выше</a></noindex> в коде строка в функции GetPrice<br />
====code====
<pre>Candles&#91;SecCode&#93;&#91;Interval&#93; = ds&#91;SecCode&#93;&#91;Interval&#93;</pre>
=============
лишняя.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_dK8y9Owz" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />А торговать из колбека тоже можно? Отсылать лимитки при выполнении условий (цена, индикатор).<br />=============<br />Конечно.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_dOO1zTep" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />Цену последней сделки откуда лучше брать: из колбека в DataSourse или всё же из таблицы всех сделок?<br />=============<br />Смотря для чего &quot;лучше&quot;. Я обычно беру из getParamEx(class_code, sec_code, 'last') в OnParam, если нет необходимости обрабатывать <B>все</B> сделки. <br />
			<i>03.12.2016 17:35:56, Старатель.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20728/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20728/topic2326/</guid>
			<pubDate>Sat, 03 Dec 2016 17:35:56 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20715/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_o5OxYmdA" href="/user/54/" bx-tooltip-user-id="54">Старатель</a> написал:<br /><br />====quote====<br /> Николай &nbsp;Камынин &nbsp; написал:<br />Расчет надо делать в колбеках. либо в майн по флагу из колбека.<br />=============<br />+<br />Перебор бумаг в цикле while is_run do лишний. В том же SetUpdateCallback можно сделать весь &quot;не сложный анализ&quot;.<br />=============<br />А торговать из колбека тоже можно? Отсылать лимитки при выполнении условий (цена, индикатор).<br /><br />И ещё вопрос. Цену последней сделки откуда лучше брать: из колбека в DataSourse или всё же из таблицы всех сделок? <br />
			<i>02.12.2016 20:02:13, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20715/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20715/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 20:02:13 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20714/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо, попробую!<br />Вот бы ребята из техподдержки Арки тоже научились давать такие ёмкие качественные ответы! <br />
			<i>02.12.2016 19:52:01, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20714/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20714/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 19:52:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20713/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_4nEdvRwo" href="/user/62/" bx-tooltip-user-id="62">Николай  Камынин</a> написал:<br />Расчет надо делать в колбеках. либо в майн по флагу из колбека.<br />=============<br />+<br />Перебор бумаг в цикле while is_run do лишний. В том же SetUpdateCallback можно сделать весь "не сложный анализ". <br />
			<i>02.12.2016 19:12:45, Старатель.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20713/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20713/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 19:12:45 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20712/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			вообще-то Вы опять не правильно делаете.<br />Расчет надо делать в колбеках. либо в майн по флагу из колбека.<br />Ваш вариант функции main очень плохой. <br />
			<i>02.12.2016 18:50:00, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20712/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20712/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 18:50:00 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20711/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Да, это скорее всего был квант.<br />Я уже разобрался.<br />Как советовал Старатель, засунул расчёт индикатора в колбек и сразу получил желаемые космические скорости внутри цикла перебора бумаг. <br />П.С. Индикатор по прежнему считает все свечки. <br />
			<i>02.12.2016 18:49:23, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20711/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20711/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 18:49:23 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20710/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_dGbGf478" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />Добрый день.<br />Два дня мучился, осваивал работу через DataSourse. Заработало. Но код работает в 5 раз медленнее, чем когда я получал данные индикатора через идентификатор. <br /><br />Прошу подсказать почему.<br />Вот код. Боллинджер считается внутри файла BB.lua, который выложили разработчики вот здесь:<br /> <noindex><a href="ftp://ftp.quik.ru/public/INDICATORS.zip" target="_blank" rel="nofollow">ftp://ftp.quik.ru/public/INDICATORS.zip</a></noindex> <br />
====code====
<pre>
&nbsp;&nbsp; </pre>
=============
<br />А теперь - самое интересное. Места с задержками. Где скорость как у ласточки я не трогал, подсветил только места задержек:<br />====quote====<br /><br /><br />=============<br />То есть задержка то есть, то нету. Она равна 15 миллисекунд. И она бывает не только между 3 и 4, но и на разных участках кода. Вот например между 1 и 2 шагом.<br /><br />====quote====<br />Вопросы.<br /><br />=============<br />1. Почему происходят эти задержки?<br />2. Почему на разных участках кода?<br />3. Рационально ли составлен код?<br /><br />Спасибо.<br />=============<br />задержка в 15 ms смахивает на квант для процесса <br />Попробуйте оставить из запущенных задач лишь квик и посмотрите задержку. <br />
			<i>02.12.2016 18:45:53, Николай  Камынин.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20710/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20710/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 18:45:53 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20709/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_1Ha8acFL" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />Ведь при каждом новом таймф-фрейме таблицу придётся таки обновлять и запихивать в её поля новый набор свечек. То есть раз в таймфрейм полный пересчёт делать всё же придётся.<br />=============<br /><br />А кто мешает сохранять свечи и индикатор в таблицу в зависимости от таймфрейма? Как-то так:<br />
====code====
<pre>
&nbsp;&nbsp;ds&#91;SecCode&#93;&#91;Interval&#93; = CreateDataSource(ClassCode, SecCode, Interval)
&nbsp;&nbsp;local function GetPrice(index)
&nbsp;&nbsp;&nbsp;&nbsp;Candles&#91;SecCode&#93;&#91;Interval&#93; = ds&#91;SecCode&#93;&#91;Interval&#93;
&nbsp;&nbsp;&nbsp;&nbsp;Indicator&#91;SecCode&#93;&#91;Interval&#93;&#91;index&#93; = func( ... )
&nbsp;&nbsp;end
&nbsp;&nbsp;for i = 1, ds:Size() do GetPrice(i) end
&nbsp;&nbsp;ds:SetUpdateCallback(GetPrice)
</pre>
============= <br />
			<i>02.12.2016 17:38:14, Старатель.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20709/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20709/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 17:38:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20708/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_95Kntr1G" href="/user/54/" bx-tooltip-user-id="54">Старатель</a> написал:<br /><br />====quote====<br /> Космонавт &nbsp; написал:<br />3. Рационально ли составлен код?<br />=============<br />Нет. Пересчитывать значение индикатора имеет смысл только при обновлении последней свечи. А вы пытаетесь его пересчитывать каждую мс. Какой в этом смысл, если цена не изменилась?<br />Расчёт индикатора лучше вставить в SetUpdateCallback() и сохранять значения в глобальной таблице.<br />=============<br />покажите пожалуйста на примере. Задача не тривиальная. Ведь при каждом новом таймф-фрейме таблицу придётся таки обновлять и запихивать в её поля новый набор свечек. То есть раз в таймфрейм полный пересчёт делать всё же придётся. <br />
			<i>02.12.2016 16:44:38, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20708/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20708/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 16:44:38 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20706/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_L38xKsSN" href="/user/256/" bx-tooltip-user-id="256">Космонавт</a> написал:<br />3. Рационально ли составлен код?<br />=============<br />Нет. Пересчитывать значение индикатора имеет смысл только при обновлении последней свечи. А вы пытаетесь его пересчитывать каждую мс. Какой в этом смысл, если цена не изменилась?<br />Расчёт индикатора лучше вставить в SetUpdateCallback() и сохранять значения в глобальной таблице. <br />
			<i>02.12.2016 16:26:51, Старатель.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20706/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20706/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 16:26:51 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Почему медленно работает код</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message20703/topic2326/">Почему медленно работает код</a></b> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день.<br />Два дня мучился, осваивал работу через DataSourse. Заработало. Но код работает в 5 раз медленнее, чем когда я получал данные индикатора через идентификатор. <br /><br />Прошу подсказать почему.<br />Вот код. Боллинджер считается внутри файла BB.lua, который выложили разработчики вот здесь:<br /><noindex><a href="ftp://ftp.quik.ru/public/INDICATORS.zip" target="_blank" rel="nofollow">ftp://ftp.quik.ru/public/INDICATORS.zip</a></noindex><br />
====code====
<pre>function DataSource(class,sec,interval)
&nbsp;&nbsp; ds&#91;sec&#93; = CreateDataSource(class,sec,interval)

&nbsp;&nbsp; ds&#91;sec&#93;:SetEmptyCallback ()
&nbsp;&nbsp; return ds&#91;sec&#93;
end

function main()
&nbsp;&nbsp;&nbsp;&nbsp;dofile(getWorkingFolder().."&#92;&#92;LuaIndicators&#92;&#92;BB.lua")
&nbsp;&nbsp;&nbsp;&nbsp;for sec in string.gmatch(ticker_list,"%a+") do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataSource(class,sec,interval)
&nbsp;&nbsp;&nbsp;&nbsp;end
&nbsp;&nbsp;while is_run do
&nbsp;&nbsp;&nbsp;&nbsp;stime=getSTime()
&nbsp;&nbsp;&nbsp;&nbsp;if stime==nil then stime=0 end

if stime&#62;100000 and stime&#60;184005 then --не считаем вне сессии

for sec in string.gmatch(ticker_list,"%a+") do
&nbsp;&nbsp;&nbsp;&nbsp;toLog (log, sec)
&nbsp;&nbsp;&nbsp;&nbsp;toLog (log, "1")
&nbsp;&nbsp;&nbsp;&nbsp;func = BB() 
&nbsp;&nbsp;&nbsp;&nbsp;toLog (log, "2")
&nbsp;&nbsp;&nbsp;&nbsp;local num_candles=ds&#91;sec&#93;:Size()&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;toLog (log, "3")&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;line_10,_,line_3=func(num_candles, {Period=12, Metod = "SMA", VType="Typical", round=4, Shift=2}, ds&#91;sec&#93;)
&nbsp;&nbsp;&nbsp;&nbsp;toLog (log, "4")
&nbsp;&nbsp;&nbsp;&nbsp;-- tbl:SetValue(line_count_table&#91;sec&#93;,'BB_middle', line_10)
&nbsp;&nbsp;&nbsp;&nbsp;-- tbl:SetValue(line_count_table&#91;sec&#93;,'BB_lower', line_3)&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;--sleep (1)

дальше не сложный анализ.
end</pre>
=============
<br />А теперь - самое интересное. Места с задержками. Где скорость как у ласточки я не трогал, подсветил только места задержек:<br />====quote====<br />12/02/16 15:18:24,923 LNTA<br />12/02/16 15:18:24,923 1<br />12/02/16 15:18:24,923 2<br /><span class="bx-font" style="color:#ff0000">12/02/16 15:18:24,923 3</span><br /><span class="bx-font" style="color:#ff0000">12/02/16 15:18:24,938 4</span><br />12/02/16 15:18:24,938 LSRG<br />12/02/16 15:18:24,938 1<br />12/02/16 15:18:24,938 2<br />12/02/16 15:18:24,938 3<br />12/02/16 15:18:24,938 4<br />12/02/16 15:18:24,938 MAGN<br />12/02/16 15:18:24,938 1<br />12/02/16 15:18:24,938 2<br />12/02/16 15:18:24,938 3<br />12/02/16 15:18:24,938 4<br />12/02/16 15:18:24,938 MFON<br />12/02/16 15:18:24,938 1<br />12/02/16 15:18:24,938 2<br />12/02/16 15:18:24,938 3<br />12/02/16 15:18:24,938 4<br />12/02/16 15:18:24,938 MGNT<br />12/02/16 15:18:24,938 1<br />12/02/16 15:18:24,938 2<br />12/02/16 15:18:24,938 3<br />12/02/16 15:18:24,938 4<br />12/02/16 15:18:24,938 MOEX<br />12/02/16 15:18:24,938 1<br />12/02/16 15:18:24,938 2<br />12/02/16 15:18:24,938 3<br />12/02/16 15:18:24,938 4<br />12/02/16 15:18:24,938 MSNG<br />12/02/16 15:18:24,938 1<br />12/02/16 15:18:24,938 2<br /><span class="bx-font" style="color:#ff0000">12/02/16 15:18:24,938 3</span><br /><span class="bx-font" style="color:#ff0000">12/02/16 15:18:24,954 4</span><br />12/02/16 15:18:24,954 MSRS<br />12/02/16 15:18:24,954 1<br />12/02/16 15:18:24,954 2<br />12/02/16 15:18:24,954 3<br />12/02/16 15:18:24,954 4<br />=============<br /><br />То есть задержка то есть, то нету. Она равна 15 миллисекунд. И она бывает не только между 3 и 4, но и на разных участках кода. Вот например между 1 и 2 шагом.<br /><br />====quote====<br />12/02/16 15:18:24,969 PIKK<br /><span class="bx-font" style="color:#ff0000">12/02/16 15:18:24,969 1</span><br /><span class="bx-font" style="color:#ff0000">12/02/16 15:18:24,985 2</span><br />12/02/16 15:18:24,985 3<br />12/02/16 15:18:24,985 4<br />12/02/16 15:18:24,985 PLZL<br />12/02/16 15:18:24,985 1<br />12/02/16 15:18:24,985 2<br />12/02/16 15:18:24,985 3<br />12/02/16 15:18:24,985 4<br />12/02/16 15:18:24,985 POLY<br />=============<br /><br />Вопросы.<br />1. Почему происходят эти задержки?<br />2. Почему на разных участках кода?<br />3. Рационально ли составлен код?<br /><br />Спасибо. <br />
			<i>02.12.2016 15:35:14, Космонавт.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message20703/topic2326/</link>
			<guid>http://forum.quik.ru/messages/forum10/message20703/topic2326/</guid>
			<pubDate>Fri, 02 Dec 2016 15:35:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
